/* * expand jquery to support ... * by @psyonline ( http://www.psyonline.kr/, majorartist@gmail.com ) */ (function($) { 'use strict'; var ua = navigator.userAgent, div = document.createElement('div'), ie = ua.match(/(?:msie ([0-9]+)|rv:([0-9\.]+)\) like gecko)/i), prefix = ['Webkit', 'Moz', 'O'], transition = 'transition', transform = 'transform', requestanimationframe = 'requestAnimationFrame', cancelanimationframe = 'CancelAnimationFrame', transforms = { translate3d: 'translate3d(0px, 0px, 0px)', translate: 'translate(0px, 0px)', scale3d: 'scale3d(1, 1, 1)', scale: 'scale(1, 1)' }, browser = $.browser, support = $.support, version, i; if ( !browser ) { $.browser = browser = {}; } browser.local = !(/^http:\/\//).test(location.href); browser.firefox = (/firefox/i).test(ua); browser.webkit = (/applewebkit/i).test(ua); browser.chrome = (/chrome/i).test(ua); browser.opera = (/opera/i).test(ua); browser.ios = (/ip(ad|hone|od)/i).test(ua); browser.android = (/android/i).test(ua); browser.safari = browser.webkit && !browser.chrome; support.touch = document.ontouchstart !== undefined || window.navigator.pointerEnabled || window.navigator.msPointerEnabled; browser.mobile = support.touch && ( browser.ios || browser.android ); for ( i in browser ) { if( !browser[i] ) { delete browser[i]; } } browser.os = (navigator.appVersion).match(/(mac|win|linux)/i); browser.os = ( browser.os )? browser.os[1].toLowerCase() : ''; if ( browser.ios || browser.android ) { version = ua.match(/applewebkit\/([0-9.]+)/i); if ( version && version.length > 1 ) { browser.webkitversion = version[1]; } if ( browser.ios ) { version = ua.match(/version\/([0-9.]+)/i); if ( version && version.length > 1 ) { browser.ios = version[1]; } } else if ( browser.android ) { version = ua.match(/android ([0-9.]+)/i); if ( version && version.length > 1 ) { browser.android = parseInt(version[1].replace(/\./g, '')); } } } support.svgimage = true; support.pointerevents = true; if ( ie ) { browser.ie = ie = parseInt( ie[1] || ie[2] ); if ( 9 > ie ) { browser.oldie = true; } else if ( 9 == ie ) { prefix.push('ms'); } if ( 11 > ie ) { support.pointerevents = false; } if ( 9 > ie ) { support.svgimage = false; } } support.pushstate = !!history.pushState; support.mediaquery = typeof(window.matchMedia) == 'function' || !browser.oldie; support.video = document.createElement('video').canPlayType !== undefined; support.backgroundsize = 'backgroundSize' in div.style; if ( support.backgroundsize ) { div.style.backgroundSize = 'cover'; support.backgroundsize = div.style.backgroundSize == 'cover'; } try { div.style.background = 'rgba(0, 0, 0, 0)'; support.rgba = div.style.background == 'rgba(0, 0, 0, 0)'; } catch(e) { support.rgba = false; } support.canvas = document.createElement('canvas'); support.canvas = support.canvas.getContext && support.canvas.getContext('2d'); // check support transform if ( div.style[transform] != undefined ) { support.transform = transform; } else { transform = 'Transform'; for ( i = 0; i < 4; i++ ) { if ( div.style[prefix[i]+transform] !== undefined ) { support.transform = prefix[i]+transform; break; } } } if ( support.transform ) { transform = support.transform; for ( i in transforms ) { div.style[transform] = ''; div.style[transform] = transforms[i]; support[i] = div.style[transform]; } if ( browser.ie && 10 > browser.ie ) { // support.scale3d = support.scale = false; } if ( browser.android && 430 > browser.android ) { // support.translate3d = false; // support.transition = false; } } // check support transition if ( div.style[transition] != undefined ) { support.transition = transition; } else { transition = 'Transition'; for ( i = 0; i < 4; i++ ) { if ( div.style[prefix[i]+transition] !== undefined ) { support.transition = prefix[i]+transition; break; } } } // check support request animation frame if ( window[requestanimationframe] ) { support.requestanimationframe = true; } else { requestanimationframe = 'RequestAnimationFrame'; for ( i = 0; i < 4; i++ ) { if ( window[prefix[i]+requestanimationframe] !== undefined ) { window.requestAnimationFrame = window[prefix[i]+requestanimationframe]; window.cancelAnimationFrame = window[prefix[i]+cancelanimationframe]; support.requestanimationframe = true; break; } } } // referrence - http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/ if ( !support.requestanimationframe ) { window.requestAnimationFrame = (function() { var lasttime = 0; return function(callback) { var currenttime = gettime(); var timetocall = Math.max(0, 16-(currenttime-lasttime)); lasttime = currenttime+timetocall; return setTimeout(function() { callback(currenttime+timetocall); }, timetocall); } })(); window.cancelAnimationFrame = function(id) { clearTimeout(id); } } // $.fn.translate = function(x, y) { // var transform = $.support.transform; // x = ( x || x === '' )? x : 0; // y = ( y || y === '' )? y : 0; // if ( transform ) { // this.each(function() { // this.style[transform] = ( x === '' )? '' : ( $.support.translate3d )? 'translate3d('+ x +'px, '+ y +'px, 0)' : 'translate('+ x +'px, '+ y +'px)'; // }); // } else { // this.css({ left: Math.round(x), top: Math.round(y) }); // } // return this; // }; // cookie $._cookie = { set: function(name, value, term, path, domain) { var cookieset = name + '=' + value + ';', expdate; if ( term ) { expdate = new Date(); expdate.setTime( expdate.getTime()+term*1000*60*60*24 ); // term 1 is a day cookieset += 'expires=' + expdate.toGMTString() + ';'; } if ( path ) { cookieset += 'path=' + path + ';'; } if ( domain ) { cookieset += 'domain=' + domain + ';'; } document.cookie = cookieset; }, get: function(name) { var match = ( document.cookie || ' ' ).match( new RegExp(name+' *= *([^;]+)') ); return ( match )? match[1] : null; } }; // parse/assemble query strings var expqueries = /([^=&]+)=?([^=&]*)/g; $._query = { parse: (function() { var matches, i, max; function resetdata(v) { if ( v ) { v = decodeURIComponent(v).replace(/\+/g, ' '); if ( v.indexOf(',') != -1 ) { v = v.split(','); for ( i = 0, max = v.length; i < max; i++ ) { v[i] = resetdata(v[i]); } } else if ( expint.test(v) ) { v = parseFloat(v); } } return v; } return function(query) { var rv = {}; query = ( (/^#/).test(query) )? query.substring(query.lastIndexOf('#')+1) : ( !query || (/\?/).test(query) )? ( query || location.href ).split('?')[1] : query; if ( query ) { query = query.split('#')[0]; while ( matches = expqueries.exec(query) ) { rv[matches[1]] = resetdata(matches[2]); } return rv; } else { return false; } } })(), make: function(data) { var key, newdata, datatype = typeof(data); if ( datatype == 'string' ) { return data; } else if ( datatype == 'object' ) { newdata = []; for ( key in data ) { newdata.push( key +'='+ encodeURIComponent(data[key])); } return newdata.join('&'); } } }; // easings. // Convert to JS from "Robert Penner's Easing Functions" http://www.robertpenner.com/easing/ var easings = { linear : function(t,b,c,d){return c*t/d+b;}, easeInQuad : function(t,b,c,d){return c*(t/=d)*t+b;}, easeOutQuad : function(t,b,c,d){return -c*(t/=d)*(t-2)+b;}, easeInOutQuad : function(t,b,c,d){if((t/=d/2)<1)return c/2*t*t+b;return -c/2*((--t)*(t-2)-1)+b;}, easeOutInQuad : function(t,b,c,d){if(t < d/2)return easings.easeOutQuad(t*2,b,c/2,d);return easings.easeInQuad((t*2)-d,b+c/2,c/2,d);}, easeInCubic : function(t,b,c,d){return c*(t/=d)*t*t+b;}, easeOutCubic : function(t,b,c,d){return c*((t=t/d-1)*t*t+1)+b;}, easeInOutCubic : function(t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t+b;return c/2*((t-=2)*t*t+2)+b;}, easeOutInCubic : function(t,b,c,d){if(t browser.ie, expiscolor = /color/i, expisbody = /body/i, exprgb = /rgba?\(/, expgetrgb = /rgba?\(([0-9]+), *([0-9]+), *([0-9]+)/, transitionname = support.transition, transitionable = !!transitionname, transitionendnames = 'transitionend webkitTransitionEnd mozTransitionEnd oTransitionEnd msTransitionEnd', gettime = function() { return new Date().getTime(); }, isobject = $.isPlainObject, color = { getcode: function(target, property) { return this.tohex.apply( null, this.torgb( target, property, style.get(target, property) ) ); }, torgb: function(target, property, v) { var temp; if ( v == 'transparent' || v == 'rgba(0, 0, 0, 0)' ) { while ( !expisbody.test(target.nodeName) ) { target = target.parentNode; temp = style.get(target, property); if ( temp != 'transparent' && temp != 'rgba(0, 0, 0, 0)' ) { return this.torgb(target, property, temp); } } return [ 255, 255, 255 ]; } else if ( v.match(exprgb) ) { v = v.match(expgetrgb); return [ parseInt(v[1]), parseInt(v[2]), parseInt(v[3]) ]; } else { //#cccccc if ( v.length>5 ) { v = [ v.substr(1, 2), v.substr(3, 2), v.substr(5, 2) ]; //#ccc } else { v = [ v.substr(1, 1), v.substr(2, 1), v.substr(3, 1) ]; v = [ v[0]+v[0], v[1]+v[1], v[2]+v[2] ]; } return [ parseInt( ( eval('0x'+v[0]) ).toString(10) ), parseInt( ( eval('0x'+v[1]) ).toString(10) ), parseInt( ( eval('0x'+v[2]) ).toString(10) ) ]; } }, tohex: function() { var temp, i = 0, rv = ''; for ( ; i < 3; i++ ) { temp = Math.max( Math.min(255, arguments[i]), 0 ).toString(16); rv += ( 2 > temp.length )? '0'+temp : temp; } return '#'+rv; } }, //style get, set style = (function() { var supporttransform = support.transform, transforms = ['translate3d', 'translate', 'scale3d', 'scale', 'rotate', 'rotateX', 'rotateY', 'rotateZ'], nex = '[e0-9\-\.]+', pxex = '(?:px)?', vex = '(?:(?:px|deg))?', xyzex = /(X|Y|Z)$/, //[ get, set x, set y, set z ] expressions = { isxyztarget: /^(scale|scale3d|translate|translate3d)$/, nopx: /(zIndex)/ }, is3dtransform = /3d/, istranslate = /^translate/, isscale = /^scale/, isrotate = /^rotate/, isx = /X$/, isy = /Y$/, isstupidbrowser = browser.ie == 9, i = 0, max = transforms.length; for ( ; i < max; i++ ) { expressions[transforms[i]] = [ new RegExp(transforms[i] + '\\(('+ nex +')'+ vex +'(?:, ('+ nex +')'+ vex +'(?:, ('+ nex +')'+ vex +')?)?'), new RegExp('('+transforms[i] + '\\()'+ nex + vex) ]; if ( !isrotate.test(transforms[i]) ) { expressions[transforms[i]][2] = new RegExp('('+transforms[i] + '\\('+ nex + vex +', )'+ nex + vex), expressions[transforms[i]][3] = new RegExp('('+transforms[i] + '\\('+ nex + vex +', '+ nex + vex +', )'+ nex + vex); } } function istransform(property) { property = css3(property); if ( (/^(matrix|translate|scale|rotate|skew|perspective)/).test(property) ) { return true; } return false; } function isxyztarget(property) { var check = property.match(expressions.isxyztarget); return ( check )? check[1] : false; } function issvg(target) { return window.SVGElement && target instanceof SVGElement; } function css3(property) { if ( istranslate.test(property) ) { if ( !support.translate ) { return (/X$/).test(property)? 'left' : 'top'; } else if ( is3dtransform.test(property) && !support.translate3d ) { return property.replace('3d', ''); } } else if ( isscale.test(property) ) { if ( is3dtransform.test(property) && !support.scale3d ) { return property.replace('3d', ''); } } return property; } function ie9scale(target, property, value) { var temp = target.style[supporttransform].match(expressions.scale[0]), x, y; if ( !temp ) {//get only return 1; } else { x = parseFloat(temp[1]); y = ( temp[2] !== undefined )? parseFloat(temp[2]) : x; if ( value !== undefined ) {//set if ( isx.test(property) ) { x = value; } else { y = value; } target.style[supporttransform] = target.style[supporttransform].replace(expressions.scale[0], 'scale('+ x +', '+ y); } else {//get return ( isx.test(property) )? x : y; } } } function get(target, property) { var rv, transform, xyz; property = css3(property); if ( istransform(property) ) { xyz = isxyztarget(property); if ( xyz ) { return get(target, xyz+'X'); } transform = property; property = supporttransform; } if ( property == 'opacity' && !support.opacity ){ property = 'filter'; } else if ( property == 'scrollTop' ) { return target.scrollTop; } rv = (target) ? (issvg(target) && target.attributes[property]) ? parseInt(target.attributes[property].value) : // svg attribute (!target.style)? target[property] : (target.style[property])? target.style[property] : (target.currentStyle)? target.currentStyle[property] : document.defaultView.getComputedStyle(target, null)[property] : 0; if ( transform && supporttransform ) { xyz = transform.match(xyzex); xyz = ( xyz )? xyz[0] : ''; if ( isrotate.test(transform) ) { rv = rv.match(expressions[transform][0]); return (!rv)? 0 : parseFloat(rv[1]); } else if ( isstupidbrowser && isscale.test(transform) ) { return ie9scale(target, transform); } else if( rv ) { rv = rv.match( expressions[transform.replace(xyzex, '')][0] ); return (!rv)? ( isscale.test(transform) )? 1 : 0 : parseFloat(rv[( xyz == 'X' )? 1 : ( xyz == 'Y' )? 2 : 3]); } } if ( property == 'opacity' ) { return parseFloat(rv); } if ( property == 'filter' ) { rv = rv.match(/alpha *\( *opacity *[=:] *([0-9\.]+) *\)/i); rv = (rv)? parseFloat(rv[1]) : 1; return (rv || rv===0)? rv/100 : 1; } return (rv=='auto')? 0 : ((/(pt|px)$/).test(rv))? parseInt(rv) : rv; } function set(target, property, value) { var i, transform, xyz; if ( typeof(property) == 'object' ) { for ( i in property) { style.set(target, i, property[i]); } return; } if ( value !== undefined ) { if ( issvg(target) && target.attributes[property] ) { // svg attribute target.attributes[property].value = value; } else if ( !target.style ) { target[property] = value; } else { property = css3(property); if ( istransform(property) && supporttransform ) { xyz = isxyztarget(property); if ( xyz ) { set(target, xyz+'X', value); set(target, xyz+'Y', value); set(target, xyz+'Z', value); return; } if ( isrotate.test(property) ) { if ( !expressions[property][0].test(target.style[supporttransform]) ) { target.style[supporttransform] += property+'(0)'; } target.style[supporttransform] = target.style[supporttransform].replace(expressions[property][1], '$1'+ value +'deg'); } else { transform = property.replace(xyzex, ''); if ( !expressions[transform][0].test(target.style[supporttransform]) ) { target.style[supporttransform] += support[transform]; } if ( isstupidbrowser && isscale.test(property) ) { ie9scale(target, property, value); } else { target.style[supporttransform] = target.style[supporttransform].replace( expressions[transform][isx.test(property)? 1 : isy.test(property)? 2 : 3], '$1'+ value + ( isscale.test(transform)? '' : 'px' ) ); } } } else if ( property == 'opacity' ) { if ( !support.opacity ) { target.style.filter = ( value === '' )? '' : 'alpha(opacity='+(value*100)+')'; } else { target.style.opacity = value; } } else if ( property == 'scrollTop' ) { target.scrollTop = value; } else { try { target.style[property] = ( value && !isNaN(value) && !expressions.nopx.test(property) )? value+'px' : value; } catch(e) { window.console && console.log(e.message+'('+target + ' : id="'+ target.id +'", class="'+ target.className +'", property="'+ property +'", value : "'+ value +'")'); } } } } } return { get: get, set: set, istransform: istransform }; })(), //animation ani = (function() { var tweens = [], _fps = 60, _time = 1, _easing = 'easeOutCubic', nowframe = 0, totalframes = 0, starttime = 0, playing = false, getstyle = style.get, setstyle = style.set, torgb = color.torgb, tocolorcode = color.tohex, istransform = style.istransform, issplitxyztarget = style.issplitxyztarget, timer = null, timerdelay = 1000/_fps, isemptytween, i, max; function set(target, property, _option) { if ( !target ) { return; } if ( target.constructor == Array ) { for ( i = 0, max = target.length; i < max; i++ ) { set(target[i], property, _option); } return; } var tween, option = _option || {}, time = option.time || _time, frames = Math.round( _fps*time ), delay = Math.round( _fps*( option.delay || 0 ) ), easing = option.easing || _easing, p, rounding, fromcolor, tocolor, rgb, i, temp, values = {}; for ( p in property ) { rounding = ( option.rounding === false || p == 'opacity' )? false : !istransform(p); if ( property[p].constructor == Array ) {//for preseted values values[p] = property[p]; frames = Math.max(frames, Math.round( _fps*values[p].length/_fps )); } else if ( expiscolor.test(p) ) { fromcolor = torgb(target, p, getstyle(target, p)); tocolor = torgb(target, p, property[p]); rgb = []; for ( i = 0; i < 3; i++ ) { rgb[i] = getvalues(p, fromcolor[i], tocolor[i], frames, easing, true); } values[p] = []; for ( i = 0; i < frames; i++ ) { values[p][i] = tocolorcode(rgb[0][i], rgb[1][i], rgb[2][i]); } } else { values[p] = getvalues(p, getstyle(target, p), property[p], frames, easing, rounding); } } //check exist. delete same properties. remove empty tween. stop(target, property); tweens.push({ el: target, vs: values, sf: nowframe + delay, tf: frames, es: option.onstart, eu: option.onupdate, ee: option.onend, lp: option.loop }); totalframes = Math.max( totalframes, nowframe + delay + frames + _fps ); if ( !playing ) { starttime = gettime(); timer = window.requestAnimationFrame(action); playing = true; } } function stop(target, property, _jumptoend) { var i = 0, max = tweens.length, tween, p, properties; if ( property ) { if ( typeof(property) != 'string' ) { properties = []; for ( p in property ) { properties.push(p); } properties = properties.join(' ')+' '; } else { properties = property+' '; } } isemptytween = true; for ( ; i < max; i++ ) { tween = tweens[i]; if ( tween && tween.el == target ) { if ( property ) { for ( p in tween.vs ) { if ( properties.indexOf(p+' ') != -1 ) { if ( _jumptoend ) { setstyle(tween.el, p, tween.vs[p][tween.tf-1]); } delete tween.vs[p]; } else { isemptytween = false; } } } if ( isemptytween ) { if ( _jumptoend ) { jumptoend(tweens[i]); } tweens[i] = null; } } } } function jumptoend(tween) { var p, lastframe = tween.tf-1; for ( p in tween.vs ) { setstyle(tween.el, p, tween.vs[p][lastframe]); } tween.eu && tween.eu.call( tween.el, geteventvalue(tween, 'update', lastframe, lastframe) ); tween.ee && tween.ee.call( tween.el, geteventvalue(tween, 'end', lastframe, lastframe) ); } //not complete //todo: option as ani.set's option function sprite(target, framewidth, totalframe, property, time, loop) { var currentframe, temp = { }; totalframe--; function onupdate(e) { var frame = Math.round(totalframe*e.v); if ( currentframe != frame ) { style.set(target, property, -framewidth*frame); currentframe = frame; } } function play() { stop(); animate(temp, { v: 1 }, { time: time, loop: loop, rounding: false, easing: 'linear', onupdate: onupdate }); } function stop() { stopanimate(temp); currentframe = -1; temp.v = 0; } return { play: play, stop: stop } } function action() { nowframe = Math.floor( ( gettime()-starttime ) / timerdelay ); // nowframe++; if ( totalframes > nowframe ) { setproperties(nowframe); timer = window.requestAnimationFrame(action); } else { window.cancelAnimationFrame(timer); setproperties(totalframes); nowframe = totalframes = 0; tweens = []; playing = false; } } function setproperties(step) { var tween, mystep, myframes, p, i = 0, max = tweens.length; for ( ; i < max; i++ ) { tween = tweens[i]; if ( tween && step >= tween.sf ) { myframes = tween.tf-1; mystep = Math.min( myframes, step-tween.sf ); //start event call if ( tween.es ) { tween.es.call( tween.el, geteventvalue(tween, 'start', 0, myframes) ); delete tween.es; } //re-check tween has removed from stop function if (!tweens[i]) { continue; } //set properties for ( p in tween.vs ) { setstyle(tween.el, p, tween.vs[p][mystep]); } //update event call tween.eu && tween.eu.call( tween.el, geteventvalue(tween, 'update', mystep, myframes) ); //end. remove tween, end event call if ( mystep == myframes ) { tween.ee && tween.ee.call( tween.el, geteventvalue(tween, 'end', mystep, myframes) ); if ( tween.lp ) { tweens[i].sf = nowframe; totalframes += tweens[i].tf+_fps; if ( tween.lp == 'yoyo' ) { for ( p in tween.vs ) { tween.vs[p].reverse(); } } } else { tweens[i] = null; } } } } } function geteventvalue(tween, type, step, totalstep) { var values = tween.vs, eventvalue = { type: type, percent: step/totalstep }, p; for ( p in values ) { eventvalue[p] = values[p][step]; } return eventvalue; } function getvalues(property, from, to, totalframe, easing, rounding) { var nv, rv = [], gap = to-from, i = 0; totalframe--; for ( ; i <= totalframe; i++ ) { nv = easings[easing](i, from, gap, totalframe); rv.push( ( rounding )? Math.round(nv) : nv ); } return rv; } return { set: set, stop: stop, sprite: sprite, getvalues: getvalues }; })(); $.fn._css = function(property, value) { var p; if ( isobject(property) ) { for ( p in property ) { this._css(p, property[p]); } } else if ( value !== undefined ) { this.each(function() { style.set(this, property, value); }); } else { return style.get(this[0], property); } return this; } $.fn._animate = function(properties, d, e, c) { var options = assignanimationoptions(d, e, c); return this.each(function(i) { // if ( poorbrowser ) { // style.set(this, properties); // if ( !i ) { // properties.percent = 1; // options.onupdate && options.onupdate.call(this, properties); // options.onend && options.onend.call(this); // } // } else { if ( i ) { options.step = options.complete = null; } options.loop = d.loop; ani.set(this, properties, options); // } }); } $._getanimationvalues = ani.getvalues; $.fn._stop = function(property, jumptoend) { if ( property === true || property === false ) { jumptoend = property; property = null; } return this._css(transitionname, '').each(function() { ani.stop(this, property, jumptoend); }); } $.fn._transition = function(properties, d, e, c) { var $target = this, options = assignanimationoptions(d, e, c), p, setting, onend, onendfired; if ( transitionable ) { setting = []; for ( p in properties ) { if ( style.istransform(p) ) { p = support.transform; } setting.push([killcamels(p), ' ', options.time, 's ', (options.delay)? options.delay+'s ' : '', 'cubic-bezier(', ( cubicbeziers[options.easing] || cubicbeziers.ease ), ')'].join('')); } setting = setting.join(','); onend = options.onend; options.onend = function() { if ( !onendfired ) { $target.css(transitionname, '').unbind(transitionendnames, options.onend); setTimeout(function() { onend && onend.call($target[0]); }, 0); onendfired = true; } } setTimeout(function() { $target.each(function() { $(this).css(transitionname, setting)._css(properties).bind(transitionendnames, options.onend); }); }, 0); return this; } else { return this.each(function() { // if ( poorbrowser ) { // style.set(this, properties); // options.onend && options.onend.call(this); // } else { ani.set(this, properties, options); // } }); } } $.fn._fill = function($area, sizes) { return this.each(function() { filling(this, $area, sizes); }); } $.fn.decideClass = function(classname, condition) { return this[condition ? 'addClass' : 'removeClass'](classname); } // ie png fix $.fn.pngFix = (function() { var expIsImage = /img/i, expImageSrc = /[a-z0-9_-]+\.(gif|jpg|png)$/i, expBackgroundImage = /(url\("?'?|"?'?\))/g; return function() { var src, sizing; if (!support.opacity) { this.each(function() { var $this = $(this); if ( expIsImage.test(this.nodeName) ) { sizing = 'image'; src = $this.attr('src'); $this.attr('src', src.replace(expImageSrc, 'blank.gif') ); } else { sizing = 'scale'; src = $this.css('backgroundImage').replace(expBackgroundImage, ''); $this.css('backgroundImage', 'url(\'\')'); } this.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+ src +'",sizingMethod='+ sizing +')'; }); } return this; } })(); function filling(target, $area, _sizes) { if ( !$area ) { $area = $(target.parentNode); } if ( !$area.length ) { return false; } var position, sizes = _sizes || {}, targetwidth = sizes.width || target.offsetWidth, targetheight = sizes.height || target.offsetHeight, areawidth = sizes.areawidth || $area[0].offsetWidth, areaheight = sizes.areaheight || $area[0].offsetHeight, rate, newwidth, newheight, marginleft, margintop; if (!targetwidth || !targetheight || !areawidth || !areaheight) { return false; } // set position from parent's background position position = $area._css('backgroundPosition'); if ( position ) { position = position.split(' '); position[0] = position[0] == 'center' ? 0.5 : position[0].indexOf('%') != -1 ? parseInt(position[0])/100 : 0; position[1] = position[1] == 'center' ? 0.5 : position[1].indexOf('%') != -1 ? parseInt(position[1])/100 : 0; } rate = ( targetwidth > targetheight )? areaheight/targetheight : areawidth/targetwidth; rate = ( areaheight > Math.round(targetheight*rate) )? areaheight/targetheight : ( areawidth > targetwidth*rate )? areawidth/targetwidth : rate; newwidth = Math.max(areawidth, Math.round(targetwidth*rate)); newheight = Math.max(areaheight, Math.round(targetheight*rate)); if (position) { if (position[0]) { marginleft = (areawidth-newwidth)*position[0]; } if (position[1]) { margintop = (areaheight-newheight)*position[1]; } } $(target).css({ width: newwidth, height: newheight, marginLeft: marginleft || '', marginTop: margintop || '' }); } function assignanimationoptions(d, e, c) { var options; if ( isobject(d) ) { options = { time: d.duration, delay: d.delay, rounding: d.rounding, easing: d.easing, onstart: d.start, onupdate: d.step, onend: d.complete }; } else if ( typeof(c) == 'function' ) { options = { time: d, easing: e, onend: c }; } else if ( typeof(e) == 'function' ) { options = ( typeof(d) == 'number' )? { time: d } : { easing: d } options.onend = e; } else if ( typeof(d) == 'function' ) { options = { onend: d }; } if ( options.time === undefined ) { options.time = 400; // jquery default time } options.time /= 1000; if ( options.delay ) { options.delay /= 1000; } return options; } function killcamels(property) { return property.replace(/([A-Z])/g, '-$1').toLowerCase(); } $._event = (function() { var supporttouch = support.touch, typemap = window.navigator.pointerEnabled ? {mousedown: 'pointerdown', mousemove: 'pointermove', mouseup: 'pointerup'} : window.navigator.msPointerEnabled ? {mousedown: 'MSPointerDown', mousemove: 'MSPointerMove', mouseup: 'MSPointerUp'} : supporttouch ? {mousedown: 'touchstart', mousemove: 'touchmove', mouseup: 'touchend'} : {}; return { gettype: function(types) { var type, newtypes; if (supporttouch) { newtypes = {}; for (type in types) { newtypes[typemap[type] || type] = types[type]; } return newtypes; } return types; }, getpoint: function(e) { e = e.originalEvent; if (e.touches || e.changedTouches) { return [ e.touches[0] ? e.touches[0].pageX : e.changedTouches[0].pageX, e.touches[0] ? e.touches[0].pageY : e.changedTouches[0].pageY ]; } return [e.clientX, e.clientY]; } } })(); div = null; // $.browser.mobile = true; // console.log(123, $.support.transform); // console.log($.browser.local) $(document.documentElement) .addClass(browser.os) .addClass(browser.chrome ? 'chrome' : browser.firefox ? 'firefox' : browser.opera ? 'opera' : browser.safari ? 'safari' : browser.ie ? 'ie ie'+browser.ie : '') .addClass(browser.ios ? 'ios' : browser.android ? 'android' : '') .addClass(support.transition ? 'transition' : 'notransition') .addClass(support.transform ? 'transform' : 'notransform') .addClass(support.backgroundsize ? 'backgroundsize' : 'nobackgroundsize') .addClass(support.rgba ? 'rgba' : 'norgba') .addClass(support.pointerevents ? 'pointerevents' : 'nopointerevents') .addClass(support.opacity ? 'opacity' : 'noopacity'); if (!window.console) { window.console = {}; window.console.log = window.console.table = window.console.error = window.console.clear = function() {}; } window.trace = (function() { var box = null, number = 1; function tostring(v) { var rv, i, max; if ( v === null ) { return 'null'; } else if ( v === undefined ) { return 'undefined'; } else if ( v == window ) { return '[object Window]'; } else if ( v == document ) { return '[object HTMLDocument]'; } else if ( v === true || v === false || typeof(v) == 'number' || typeof(v) == 'function' ) { return v; } else if ( typeof(v) == 'object' ) { if ( v.constructor == Array ) { rv = []; for ( i = 0, max = v.length; i < max; i++ ) { rv.push(tostring(v[i])); } return '['+ rv.join(',') +']'; } else if ( v.constructor == String ) { return '"'+ v.replace(/\