|
|
Line 242: |
Line 242: |
| * Date: @DATE | | * Date: @DATE |
| */ | | */ |
− | (function( jQuery, undefined ) { | + | eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(o(k,m){z n="H 2z 2x 2r 2p x 2k 2j 2i 2h",1X=/^([\\-+])=\\s*(\\d+\\.?\\d*)/,1W=[{12:/y?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,I:o(a){8[a[1],a[2],a[3],a[4]]}},{12:/y?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,I:o(a){8[a[1]*2.1s,a[2]*2.1s,a[3]*2.1s,a[4]]}},{12:/#([a-11-9]{2})([a-11-9]{2})([a-11-9]{2})/,I:o(a){8[13(a[1],16),13(a[2],16),13(a[3],16)]}},{12:/#([a-11-9])([a-11-9])([a-11-9])/,I:o(a){8[13(a[1]+a[1],16),13(a[2]+a[2],16),13(a[3]+a[3],16)]}},{12:/F?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,U:"F",I:o(a){8[a[1],a[2]/1v,a[3]/1v,a[4]]}}],x=k.1p=o(a,b,c,d){8 2e k.1p.K.I(a,b,c,d)},E={y:{W:{1V:{C:0,w:"1o"},1H:{C:1,w:"1o"},1S:{C:2,w:"1o"}}},F:{W:{27:{C:0,w:"1R"},2G:{C:1,w:"1k"},2D:{C:2,w:"1k"}}}},1y={"1o":{1B:1b,G:P},"1k":{G:1},"1R":{L:1d,1B:1b}},1f=x.1f={},1u=k("<p>")[0],19,D=k.D;1u.1q.2C="2A-x:y(1,1,1,.5)";1f.y=1u.1q.H.2y("y")>-1;D(E,o(a,b){b.A="2v"+a;b.W.14={C:3,w:"1k",1e:1}});o 1a(a,b,c){z d=1y[b.w]||{};7(a==t){8(c||!b.1e)?t:b.1e}a=d.1B?~~a:1Q(a);7(2g(a)){8 b.1e}7(d.L){8(a+d.L)%d.L}8 0>a?0:d.G<a?d.G:a}o 1A(c){z d=x(),y=d.B=[];c=c.2d();D(1W,o(i,a){z b,O=a.12.1L(c),1r=!(!O||!a.I(O)),S=a.U||"y";7(1r){b=d[S](1r);d[E[S].A]=b[E[S].A];y=d.B=b.B;8 2c}});7(y.1K){7(y.1i()==="0,0,0,0"){k.1J(y,19.Z)}8 d}8 19[c]}x.K=k.1J(x.1U,{I:o(f,g,h,i){7(f===m){u.B=[t,t,t,t];8 u}7(f.28||f.2w){f=k(f).1I(g);g=m}z j=u,w=k.w(f),y=u.B=[];7(g!==m){f=[f,g,h,i];w="1G"}7(w==="1x"){8 u.I(1A(f)||19.1E)}7(w==="1G"){D(E.y.W,o(a,b){y[b.C]=1a(f[b.C],b)});8 u}7(w==="1D"){7(f 2b x){D(E,o(a,b){7(f[b.A]){j[b.A]=f[b.A].R()}})}M{D(E,o(c,d){z e=d.A;D(d.W,o(a,b){7(!(j[e]||!d.N)){7(a==="14"||f[a]==t){8}j[e]=d.N(j.B)}j[e][b.C]=1a(f[a],b,1b)});7(j[e])7(k.2f(t,j[e].R(0,3))<0){j[e][3]=1;7(d.T){j.B=d.T(j[e])}}})}8 u}},2H:o(a){8 1b},1M:o(){z c=[],1N=u;D(E,o(a,b){7(1N[b.A]){c.1O(a)}});8 c.18()},1P:o(d,e){z f=x(d),S=f.1M(),U=E[S],1z=u.14()===0?x("Z"):u,15=1z[U.A]||U.N(1z.B),1g=15.R();f=f[U.A];D(U.W,o(a,b){z c=b.C,Q=15[c],10=f[c],w=1y[b.w]||{};7(10===t){8}7(Q===t){1g[c]=10}M{7(w.L){7(10-Q>w.L/2){Q+=w.L}M 7(Q-10>w.L/2){Q-=w.L}}1g[c]=1a((10-Q)*e+Q,b)}});8 u[S](1g)},1l:o(b){7(u.B[3]===1){8 u}z c=u.B.R(),a=c.18(),1l=x(b).B;8 x(k.1j(c,o(v,i){8(1-a)*1l[i]+a*v}))},1t:o(){z a="y(",y=k.1j(u.B,o(v,i){8 v==t?(i>2?1:0):v});7(y[3]===1){y.18();a="2I("}8 a+y.1i()+")"},3i:o(){z a="F(",F=k.1j(u.F(),o(v,i){7(v==t){v=i>2?1:0}7(!(!i||i>=3)){v=Y.1c(v*1v)+"%"}8 v});7(F[3]===1){F.18();a="29("}8 a+F.1i()+")"},2a:o(a){z b=u.B.R(),14=b.18();7(a){b.1O(~~(14*P))}8"#"+k.1j(b,o(v){v=(v||0).1T(16);8 v.1K===1?"0"+v:v}).1i("")},1T:o(){8 u.B[3]===0?"Z":u.1t()}});x.K.I.1U=x.K;o 1m(p,q,h){h=(h+1)%1;7(h*6<1){8 p+(q-p)*h*6}7(h*2<1){8 q}7(h*3<2){8 p+(q-p)*((2/3)-h)*6}8 p}E.F.N=o(c){7(c[0]==t||c[1]==t||c[2]==t){8[t,t,t,c[3]]}z r=c[0]/P,g=c[1]/P,b=c[2]/P,a=c[3],G=Y.G(r,g,b),17=Y.17(r,g,b),X=G-17,1h=G+17,l=1h*0.5,h,s;7(17===G){h=0}M 7(r===G){h=(1w*(g-b)/X)+1d}M 7(g===G){h=(1w*(b-r)/X)+2l}M{h=(1w*(r-g)/X)+2m}7(X===0){s=0}M 7(l<=0.5){s=X/1h}M{s=X/(2-1h)}8[Y.1c(h)%1d,s,l,a==t?1:a]};E.F.T=o(b){7(b[0]==t||b[1]==t||b[2]==t){8[t,t,t,b[3]]}z h=b[0]/1d,s=b[1],l=b[2],a=b[3],q=l<=0.5?l*(1+s):l+s-l*s,p=2*l-q;8[Y.1c(1m(p,q,h+(1/3))*P),Y.1c(1m(p,q,h)*P),Y.1c(1m(p,q,h-(1/3))*P),a]};D(E,o(f,g){z h=g.W,A=g.A,N=g.N,T=g.T;x.K[f]=o(d){7(!(!N||u[A])){u[A]=N(u.B)}7(d===m){8 u[A].R()}z e,w=k.w(d),1Y=(w==="1G"||w==="1D")?d:2o,J=u[A].R();D(h,o(a,b){z c=1Y[w==="1D"?a:b.C];7(c==t){c=J[b.C]}J[b.C]=1a(c,b)});7(T){e=x(T(J));e[A]=J;8 e}M{8 x(J)}};D(h,o(c,d){7(x.K[c]){8}x.K[c]=o(a){z b=k.w(a),K=(c==="14"?(u.2q?"F":"y"):f),J=u[K](),1n=J[d.C],O;7(b==="2s"){8 1n}7(b==="o"){a=a.2t(u,1n);b=k.w(a)}7(!(a!=t||!d.2u)){8 u}7(b==="1x"){O=1X.1L(a);7(O){a=1n+1Q(O[2])*(O[1]==="+"?1:-1)}}J[d.C]=a;8 u[K](J)}})});x.1Z=o(f){z g=f.3l(" ");D(g,o(i,d){k.1F[d]={20:o(a,b){z c,V,H="";7(!(b==="Z"||!(k.w(b)!=="1x"||(c=1A(b))))){b=x(c||b);7(!(1f.y||b.B[3]===1)){V=d==="H"?a.21:a;2B(!(!(H===""||H==="Z")||!V||!V.1q)){22{H=k.1I(V,"H");V=V.21}23(e){}}b=b.1l(!(!H||H==="Z")?H:"1E")}b=b.1t()}22{a.1q[d]=b}23(e){}}};k.2E.2F[d]=o(a){7(!a.24){a.15=x(a.25,d);a.1C=x(a.1C);a.24=1b}k.1F[d].20(a.25,a.15.1P(a.1C,a.2J))}})};x.1Z(n);k.1F.2K={2L:o(b){z c={};D(["2M","2N","2O","2P"],o(i,a){c["2Q"+a+"1p"]=b});8 c}};19=k.1p.2R={2S:"#2T",2U:"#2V",1S:"#2W",2X:"#2Y",2Z:"#30",1H:"#31",32:"#33",34:"#35",36:"#37",38:"#39",3a:"#3b",1V:"#3c",3d:"#3e",3f:"#3g",3h:"#26",3j:"#3k",Z:[t,t,t,0],1E:"#26"}}(2n));',62,208,'|||||||if|return||||||||||||||||function|||||null|this||type|color|rgba|var|cache|_rgba|idx|each|spaces|hsla|max|backgroundColor|parse|local|fn|mod|else|to|match|255|startValue|slice|spaceName|from|space|curElem|props|diff|Math|transparent|endValue|f0|re|parseInt|alpha|start||min|pop|colors|clamp|true|round|360|def|support|result|add|join|map|percent|blend|hue2rgb|cur|byte|Color|style|values|55|toRgbaString|supportElem|100|60|string|propTypes|startColor|stringParse|floor|end|object|_default|cssHooks|array|green|css|extend|length|exec|_space|inst|push|transition|parseFloat|degrees|blue|toString|prototype|red|stringParsers|rplusequals|arr|hook|set|parentNode|try|catch|colorInit|elem|ffffff|hue|jquery|hsl|toHexString|instanceof|false|toLowerCase|new|inArray|isNaN|textEmphasisColor|textDecorationColor|outlineColor|columnRuleColor|120|240|jQuery|arguments|borderTopColor|_hsla|borderRightColor|undefined|call|empty|_|nodeType|borderLeftColor|indexOf|borderBottomColor|background|while|cssText|lightness|fx|step|saturation|is|rgb|pos|borderColor|expand|Top|Right|Bottom|Left|border|names|aqua|00ffff|black|000000|0000ff|fuchsia|ff00ff|gray|808080|008000|lime|00ff00|maroon|800000|navy|000080|olive|808000|purple|800080|ff0000|silver|c0c0c0|teal|008080|white|toHslaString|yellow|ffff00|split'.split('|'),0,{})); |
− | | + | |
− | var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
| + | |
− | | + | |
− | // plusequals test for += 100 -= 100
| + | |
− | rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
| + | |
− | // a set of RE's that can match strings and generate color tuples.
| + | |
− | stringParsers = [{
| + | |
− | re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
| + | |
− | parse: function( execResult ) {
| + | |
− | return [
| + | |
− | execResult[ 1 ],
| + | |
− | execResult[ 2 ],
| + | |
− | execResult[ 3 ],
| + | |
− | execResult[ 4 ]
| + | |
− | ];
| + | |
− | }
| + | |
− | }, {
| + | |
− | re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
| + | |
− | parse: function( execResult ) {
| + | |
− | return [
| + | |
− | execResult[ 1 ] * 2.55,
| + | |
− | execResult[ 2 ] * 2.55,
| + | |
− | execResult[ 3 ] * 2.55,
| + | |
− | execResult[ 4 ]
| + | |
− | ];
| + | |
− | }
| + | |
− | }, {
| + | |
− | // this regex ignores A-F because it's compared against an already lowercased string
| + | |
− | re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
| + | |
− | parse: function( execResult ) {
| + | |
− | return [
| + | |
− | parseInt( execResult[ 1 ], 16 ),
| + | |
− | parseInt( execResult[ 2 ], 16 ),
| + | |
− | parseInt( execResult[ 3 ], 16 )
| + | |
− | ];
| + | |
− | }
| + | |
− | }, {
| + | |
− | // this regex ignores A-F because it's compared against an already lowercased string
| + | |
− | re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
| + | |
− | parse: function( execResult ) {
| + | |
− | return [
| + | |
− | parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
| + | |
− | parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
| + | |
− | parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
| + | |
− | ];
| + | |
− | }
| + | |
− | }, {
| + | |
− | re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
| + | |
− | space: "hsla",
| + | |
− | parse: function( execResult ) {
| + | |
− | return [
| + | |
− | execResult[ 1 ],
| + | |
− | execResult[ 2 ] / 100,
| + | |
− | execResult[ 3 ] / 100,
| + | |
− | execResult[ 4 ]
| + | |
− | ];
| + | |
− | }
| + | |
− | }],
| + | |
− | | + | |
− | // jQuery.Color( )
| + | |
− | color = jQuery.Color = function( color, green, blue, alpha ) {
| + | |
− | return new jQuery.Color.fn.parse( color, green, blue, alpha );
| + | |
− | },
| + | |
− | spaces = {
| + | |
− | rgba: {
| + | |
− | props: {
| + | |
− | red: {
| + | |
− | idx: 0,
| + | |
− | type: "byte"
| + | |
− | },
| + | |
− | green: {
| + | |
− | idx: 1,
| + | |
− | type: "byte"
| + | |
− | },
| + | |
− | blue: {
| + | |
− | idx: 2,
| + | |
− | type: "byte"
| + | |
− | }
| + | |
− | }
| + | |
− | },
| + | |
− | | + | |
− | hsla: {
| + | |
− | props: {
| + | |
− | hue: {
| + | |
− | idx: 0,
| + | |
− | type: "degrees"
| + | |
− | },
| + | |
− | saturation: {
| + | |
− | idx: 1,
| + | |
− | type: "percent"
| + | |
− | },
| + | |
− | lightness: {
| + | |
− | idx: 2,
| + | |
− | type: "percent"
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− | },
| + | |
− | propTypes = {
| + | |
− | "byte": {
| + | |
− | floor: true,
| + | |
− | max: 255
| + | |
− | },
| + | |
− | "percent": {
| + | |
− | max: 1
| + | |
− | },
| + | |
− | "degrees": {
| + | |
− | mod: 360,
| + | |
− | floor: true
| + | |
− | }
| + | |
− | },
| + | |
− | support = color.support = {},
| + | |
− | | + | |
− | // element for support tests
| + | |
− | supportElem = jQuery( "<p>" )[ 0 ],
| + | |
− | | + | |
− | // colors = jQuery.Color.names
| + | |
− | colors,
| + | |
− | | + | |
− | // local aliases of functions called often
| + | |
− | each = jQuery.each;
| + | |
− | | + | |
− | // determine rgba support immediately
| + | |
− | supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
| + | |
− | support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
| + | |
− | | + | |
− | // define cache name and alpha properties
| + | |
− | // for rgba and hsla spaces
| + | |
− | each( spaces, function( spaceName, space ) {
| + | |
− | space.cache = "_" + spaceName;
| + | |
− | space.props.alpha = {
| + | |
− | idx: 3,
| + | |
− | type: "percent",
| + | |
− | def: 1
| + | |
− | };
| + | |
− | }); | + | |
− | | + | |
− | function clamp( value, prop, allowEmpty ) {
| + | |
− | var type = propTypes[ prop.type ] || {};
| + | |
− | | + | |
− | if ( value == null ) {
| + | |
− | return (allowEmpty || !prop.def) ? null : prop.def;
| + | |
− | }
| + | |
− | | + | |
− | // ~~ is an short way of doing floor for positive numbers
| + | |
− | value = type.floor ? ~~value : parseFloat( value );
| + | |
− | | + | |
− | // IE will pass in empty strings as value for alpha,
| + | |
− | // which will hit this case
| + | |
− | if ( isNaN( value ) ) {
| + | |
− | return prop.def;
| + | |
− | }
| + | |
− | | + | |
− | if ( type.mod ) {
| + | |
− | // we add mod before modding to make sure that negatives values
| + | |
− | // get converted properly: -10 -> 350
| + | |
− | return (value + type.mod) % type.mod;
| + | |
− | }
| + | |
− | | + | |
− | // for now all property types without mod have min and max
| + | |
− | return 0 > value ? 0 : type.max < value ? type.max : value;
| + | |
− | } | + | |
− | | + | |
− | function stringParse( string ) {
| + | |
− | var inst = color(),
| + | |
− | rgba = inst._rgba = [];
| + | |
− | | + | |
− | string = string.toLowerCase();
| + | |
− | | + | |
− | each( stringParsers, function( i, parser ) {
| + | |
− | var parsed,
| + | |
− | match = parser.re.exec( string ),
| + | |
− | values = !(!match || !parser.parse( match )),
| + | |
− | spaceName = parser.space || "rgba";
| + | |
− | | + | |
− | if ( values ) {
| + | |
− | parsed = inst[ spaceName ]( values );
| + | |
− | | + | |
− | // if this was an rgba parse the assignment might happen twice
| + | |
− | // oh well....
| + | |
− | inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
| + | |
− | rgba = inst._rgba = parsed._rgba;
| + | |
− | | + | |
− | // exit each( stringParsers ) here because we matched
| + | |
− | return false;
| + | |
− | }
| + | |
− | });
| + | |
− | | + | |
− | // Found a stringParser that handled it
| + | |
− | if ( rgba.length ) {
| + | |
− | | + | |
− | // if this came from a parsed string, force "transparent" when alpha is 0
| + | |
− | // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
| + | |
− | if ( rgba.join() === "0,0,0,0" ) {
| + | |
− | jQuery.extend( rgba, colors.transparent );
| + | |
− | }
| + | |
− | return inst;
| + | |
− | }
| + | |
− | | + | |
− | // named colors
| + | |
− | return colors[ string ];
| + | |
− | } | + | |
− | | + | |
− | color.fn = jQuery.extend( color.prototype, {
| + | |
− | parse: function( red, green, blue, alpha ) {
| + | |
− | if ( red === undefined ) {
| + | |
− | this._rgba = [ null, null, null, null ];
| + | |
− | return this;
| + | |
− | }
| + | |
− | if ( red.jquery || red.nodeType ) {
| + | |
− | red = jQuery( red ).css( green );
| + | |
− | green = undefined;
| + | |
− | }
| + | |
− | | + | |
− | var inst = this,
| + | |
− | type = jQuery.type( red ),
| + | |
− | rgba = this._rgba = [];
| + | |
− | | + | |
− | // more than 1 argument specified - assume ( red, green, blue, alpha )
| + | |
− | if ( green !== undefined ) {
| + | |
− | red = [ red, green, blue, alpha ];
| + | |
− | type = "array";
| + | |
− | }
| + | |
− | | + | |
− | if ( type === "string" ) {
| + | |
− | return this.parse( stringParse( red ) || colors._default );
| + | |
− | }
| + | |
− | | + | |
− | if ( type === "array" ) {
| + | |
− | each( spaces.rgba.props, function( key, prop ) {
| + | |
− | rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
| + | |
− | });
| + | |
− | return this;
| + | |
− | }
| + | |
− | | + | |
− | if ( type === "object" ) {
| + | |
− | if ( red instanceof color ) {
| + | |
− | each( spaces, function( spaceName, space ) {
| + | |
− | if ( red[ space.cache ] ) {
| + | |
− | inst[ space.cache ] = red[ space.cache ].slice();
| + | |
− | }
| + | |
− | });
| + | |
− | } else {
| + | |
− | each( spaces, function( spaceName, space ) {
| + | |
− | var cache = space.cache;
| + | |
− | each( space.props, function( key, prop ) {
| + | |
− | | + | |
− | // if the cache doesn't exist, and we know how to convert
| + | |
− | if ( !(inst[ cache ] || !space.to ) ) {
| + | |
− | | + | |
− | // if the value was null, we don't need to copy it
| + | |
− | // if the key was alpha, we don't need to copy it either
| + | |
− | if ( key === "alpha" || red[ key ] == null ) {
| + | |
− | return;
| + | |
− | }
| + | |
− | inst[ cache ] = space.to( inst._rgba );
| + | |
− | }
| + | |
− | | + | |
− | // this is the only case where we allow nulls for ALL properties.
| + | |
− | // call clamp with alwaysAllowEmpty
| + | |
− | inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
| + | |
− | });
| + | |
− | | + | |
− | // everything defined but alpha?
| + | |
− | if ( inst[ cache ] )if( jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
| + | |
− | // use the default of 1
| + | |
− | inst[ cache ][ 3 ] = 1;
| + | |
− | if ( space.from ) {
| + | |
− | inst._rgba = space.from( inst[ cache ] );
| + | |
− | }
| + | |
− | }
| + | |
− | });
| + | |
− | }
| + | |
− | return this;
| + | |
− | }
| + | |
− | },
| + | |
− | is: function( compare ) {
| + | |
− | return true;
| + | |
− | },
| + | |
− | _space: function() {
| + | |
− | var used = [],
| + | |
− | inst = this;
| + | |
− | each( spaces, function( spaceName, space ) {
| + | |
− | if ( inst[ space.cache ] ) {
| + | |
− | used.push( spaceName );
| + | |
− | }
| + | |
− | });
| + | |
− | return used.pop();
| + | |
− | },
| + | |
− | transition: function( other, distance ) {
| + | |
− | var end = color( other ),
| + | |
− | spaceName = end._space(),
| + | |
− | space = spaces[ spaceName ],
| + | |
− | startColor = this.alpha() === 0 ? color( "transparent" ) : this,
| + | |
− | start = startColor[ space.cache ] || space.to( startColor._rgba ),
| + | |
− | result = start.slice();
| + | |
− | | + | |
− | end = end[ space.cache ];
| + | |
− | each( space.props, function( key, prop ) {
| + | |
− | var index = prop.idx,
| + | |
− | startValue = start[ index ],
| + | |
− | endValue = end[ index ],
| + | |
− | type = propTypes[ prop.type ] || {};
| + | |
− | | + | |
− | // if null, don't override start value
| + | |
− | if ( endValue === null ) {
| + | |
− | return;
| + | |
− | }
| + | |
− | // if null - use end
| + | |
− | if ( startValue === null ) {
| + | |
− | result[ index ] = endValue;
| + | |
− | } else {
| + | |
− | if ( type.mod ) {
| + | |
− | if ( endValue - startValue > type.mod / 2 ) {
| + | |
− | startValue += type.mod;
| + | |
− | } else if ( startValue - endValue > type.mod / 2 ) {
| + | |
− | startValue -= type.mod;
| + | |
− | }
| + | |
− | }
| + | |
− | result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
| + | |
− | }
| + | |
− | });
| + | |
− | return this[ spaceName ]( result );
| + | |
− | },
| + | |
− | blend: function( opaque ) {
| + | |
− | // if we are already opaque - return ourself
| + | |
− | if ( this._rgba[ 3 ] === 1 ) {
| + | |
− | return this;
| + | |
− | }
| + | |
− | | + | |
− | var rgb = this._rgba.slice(),
| + | |
− | a = rgb.pop(),
| + | |
− | blend = color( opaque )._rgba;
| + | |
− | | + | |
− | return color( jQuery.map( rgb, function( v, i ) {
| + | |
− | return ( 1 - a ) * blend[ i ] + a * v;
| + | |
− | }));
| + | |
− | },
| + | |
− | toRgbaString: function() {
| + | |
− | var prefix = "rgba(",
| + | |
− | rgba = jQuery.map( this._rgba, function( v, i ) {
| + | |
− | return v == null ? ( i > 2 ? 1 : 0 ) : v;
| + | |
− | });
| + | |
− | | + | |
− | if ( rgba[ 3 ] === 1 ) {
| + | |
− | rgba.pop();
| + | |
− | prefix = "rgb(";
| + | |
− | }
| + | |
− | | + | |
− | return prefix + rgba.join() + ")";
| + | |
− | },
| + | |
− | toHslaString: function() {
| + | |
− | var prefix = "hsla(",
| + | |
− | hsla = jQuery.map( this.hsla(), function( v, i ) {
| + | |
− | if ( v == null ) {
| + | |
− | v = i > 2 ? 1 : 0;
| + | |
− | }
| + | |
− | | + | |
− | // catch 1 and 2
| + | |
− | if (!(!i || i >= 3) ) {
| + | |
− | v = Math.round( v * 100 ) + "%";
| + | |
− | }
| + | |
− | return v;
| + | |
− | });
| + | |
− | | + | |
− | if ( hsla[ 3 ] === 1 ) {
| + | |
− | hsla.pop();
| + | |
− | prefix = "hsl(";
| + | |
− | }
| + | |
− | return prefix + hsla.join() + ")";
| + | |
− | },
| + | |
− | toHexString: function( includeAlpha ) {
| + | |
− | var rgba = this._rgba.slice(),
| + | |
− | alpha = rgba.pop();
| + | |
− | | + | |
− | if ( includeAlpha ) {
| + | |
− | rgba.push( ~~( alpha * 255 ) );
| + | |
− | }
| + | |
− | | + | |
− | return "#" + jQuery.map( rgba, function( v ) {
| + | |
− | | + | |
− | // default to 0 when nulls exist
| + | |
− | v = ( v || 0 ).toString( 16 );
| + | |
− | return v.length === 1 ? "0" + v : v;
| + | |
− | }).join("");
| + | |
− | },
| + | |
− | toString: function() {
| + | |
− | return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
| + | |
− | }
| + | |
− | }); | + | |
− | color.fn.parse.prototype = color.fn;
| + | |
− | | + | |
− | // hsla conversions adapted from:
| + | |
− | // https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
| + | |
− | | + | |
− | function hue2rgb( p, q, h ) {
| + | |
− | h = ( h + 1 ) % 1;
| + | |
− | if ( h * 6 < 1 ) {
| + | |
− | return p + (q - p) * h * 6;
| + | |
− | }
| + | |
− | if ( h * 2 < 1) {
| + | |
− | return q;
| + | |
− | }
| + | |
− | if ( h * 3 < 2 ) {
| + | |
− | return p + (q - p) * ((2/3) - h) * 6;
| + | |
− | }
| + | |
− | return p;
| + | |
− | } | + | |
− | | + | |
− | spaces.hsla.to = function ( rgba ) {
| + | |
− | if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
| + | |
− | return [ null, null, null, rgba[ 3 ] ];
| + | |
− | }
| + | |
− | var r = rgba[ 0 ] / 255,
| + | |
− | g = rgba[ 1 ] / 255,
| + | |
− | b = rgba[ 2 ] / 255,
| + | |
− | a = rgba[ 3 ],
| + | |
− | max = Math.max( r, g, b ),
| + | |
− | min = Math.min( r, g, b ),
| + | |
− | diff = max - min,
| + | |
− | add = max + min,
| + | |
− | l = add * 0.5,
| + | |
− | h, s;
| + | |
− | | + | |
− | if ( min === max ) {
| + | |
− | h = 0;
| + | |
− | } else if ( r === max ) {
| + | |
− | h = ( 60 * ( g - b ) / diff ) + 360;
| + | |
− | } else if ( g === max ) {
| + | |
− | h = ( 60 * ( b - r ) / diff ) + 120;
| + | |
− | } else {
| + | |
− | h = ( 60 * ( r - g ) / diff ) + 240;
| + | |
− | }
| + | |
− | | + | |
− | // chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
| + | |
− | // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
| + | |
− | if ( diff === 0 ) {
| + | |
− | s = 0;
| + | |
− | } else if ( l <= 0.5 ) {
| + | |
− | s = diff / add;
| + | |
− | } else {
| + | |
− | s = diff / ( 2 - add );
| + | |
− | }
| + | |
− | return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
| + | |
− | }; | + | |
− | | + | |
− | spaces.hsla.from = function ( hsla ) {
| + | |
− | if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
| + | |
− | return [ null, null, null, hsla[ 3 ] ];
| + | |
− | }
| + | |
− | var h = hsla[ 0 ] / 360,
| + | |
− | s = hsla[ 1 ],
| + | |
− | l = hsla[ 2 ],
| + | |
− | a = hsla[ 3 ],
| + | |
− | q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
| + | |
− | p = 2 * l - q;
| + | |
− | | + | |
− | return [
| + | |
− | Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
| + | |
− | Math.round( hue2rgb( p, q, h ) * 255 ),
| + | |
− | Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
| + | |
− | a
| + | |
− | ];
| + | |
− | }; | + | |
− | | + | |
− | | + | |
− | each( spaces, function( spaceName, space ) {
| + | |
− | var props = space.props,
| + | |
− | cache = space.cache,
| + | |
− | to = space.to,
| + | |
− | from = space.from;
| + | |
− | | + | |
− | // makes rgba() and hsla()
| + | |
− | color.fn[ spaceName ] = function( value ) {
| + | |
− | | + | |
− | // generate a cache for this space if it doesn't exist
| + | |
− | if ( !(!to || this[ cache ]) ) {
| + | |
− | this[ cache ] = to( this._rgba );
| + | |
− | }
| + | |
− | if ( value === undefined ) {
| + | |
− | return this[ cache ].slice();
| + | |
− | }
| + | |
− | | + | |
− | var ret,
| + | |
− | type = jQuery.type( value ),
| + | |
− | arr = ( type === "array" || type === "object" ) ? value : arguments,
| + | |
− | local = this[ cache ].slice();
| + | |
− | | + | |
− | each( props, function( key, prop ) {
| + | |
− | var val = arr[ type === "object" ? key : prop.idx ];
| + | |
− | if ( val == null ) {
| + | |
− | val = local[ prop.idx ];
| + | |
− | }
| + | |
− | local[ prop.idx ] = clamp( val, prop );
| + | |
− | });
| + | |
− | | + | |
− | if ( from ) {
| + | |
− | ret = color( from( local ) );
| + | |
− | ret[ cache ] = local;
| + | |
− | return ret;
| + | |
− | } else {
| + | |
− | return color( local );
| + | |
− | }
| + | |
− | };
| + | |
− | | + | |
− | // makes red() green() blue() alpha() hue() saturation() lightness()
| + | |
− | each( props, function( key, prop ) {
| + | |
− | // alpha is included in more than one space
| + | |
− | if ( color.fn[ key ] ) {
| + | |
− | return;
| + | |
− | }
| + | |
− | color.fn[ key ] = function( value ) {
| + | |
− | var vtype = jQuery.type( value ),
| + | |
− | fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
| + | |
− | local = this[ fn ](),
| + | |
− | cur = local[ prop.idx ],
| + | |
− | match;
| + | |
− | | + | |
− | if ( vtype === "undefined" ) {
| + | |
− | return cur;
| + | |
− | }
| + | |
− | | + | |
− | if ( vtype === "function" ) {
| + | |
− | value = value.call( this, cur );
| + | |
− | vtype = jQuery.type( value );
| + | |
− | }
| + | |
− | if ( !(value != null || !prop.empty) ) {
| + | |
− | return this;
| + | |
− | }
| + | |
− | if ( vtype === "string" ) {
| + | |
− | match = rplusequals.exec( value );
| + | |
− | if ( match ) {
| + | |
− | value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
| + | |
− | }
| + | |
− | }
| + | |
− | local[ prop.idx ] = value;
| + | |
− | return this[ fn ]( local );
| + | |
− | };
| + | |
− | });
| + | |
− | }); | + | |
− | | + | |
− | // add cssHook and .fx.step function for each named hook.
| + | |
− | // accept a space separated string of properties
| + | |
− | color.hook = function( hook ) {
| + | |
− | var hooks = hook.split( " " );
| + | |
− | each( hooks, function( i, hook ) {
| + | |
− | jQuery.cssHooks[ hook ] = {
| + | |
− | set: function( elem, value ) {
| + | |
− | var parsed, curElem,
| + | |
− | backgroundColor = "";
| + | |
− | | + | |
− | if ( !(value === "transparent" || !( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) ) {
| + | |
− | value = color( parsed || value );
| + | |
− | if ( !(support.rgba || value._rgba[ 3 ] === 1) ) {
| + | |
− | curElem = hook === "backgroundColor" ? elem.parentNode : elem;
| + | |
− | while (
| + | |
− | !(!(backgroundColor === "" || backgroundColor === "transparent") ||
| + | |
− | !curElem || !curElem.style)
| + | |
− | ) {
| + | |
− | try {
| + | |
− | backgroundColor = jQuery.css( curElem, "backgroundColor" );
| + | |
− | curElem = curElem.parentNode;
| + | |
− | } catch ( e ) {
| + | |
− | }
| + | |
− | }
| + | |
− | | + | |
− | value = value.blend( !(!backgroundColor || backgroundColor === "transparent") ?
| + | |
− | backgroundColor :
| + | |
− | "_default" );
| + | |
− | }
| + | |
− | | + | |
− | value = value.toRgbaString();
| + | |
− | }
| + | |
− | try {
| + | |
− | elem.style[ hook ] = value;
| + | |
− | } catch( e ) {
| + | |
− | // wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
| + | |
− | }
| + | |
− | }
| + | |
− | };
| + | |
− | jQuery.fx.step[ hook ] = function( fx ) {
| + | |
− | if ( !fx.colorInit ) {
| + | |
− | fx.start = color( fx.elem, hook );
| + | |
− | fx.end = color( fx.end );
| + | |
− | fx.colorInit = true;
| + | |
− | }
| + | |
− | jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
| + | |
− | };
| + | |
− | });
| + | |
− | | + | |
− | }; | + | |
− | | + | |
− | color.hook( stepHooks );
| + | |
− | | + | |
− | jQuery.cssHooks.borderColor = {
| + | |
− | expand: function( value ) {
| + | |
− | var expanded = {};
| + | |
− | | + | |
− | each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
| + | |
− | expanded[ "border" + part + "Color" ] = value;
| + | |
− | });
| + | |
− | return expanded;
| + | |
− | }
| + | |
− | }; | + | |
− | | + | |
− | // Basic color names only.
| + | |
− | // Usage of any of the other color names requires adding yourself or including
| + | |
− | // jquery.color.svg-names.js.
| + | |
− | colors = jQuery.Color.names = {
| + | |
− | // 4.1. Basic color keywords
| + | |
− | aqua: "#00ffff",
| + | |
− | black: "#000000",
| + | |
− | blue: "#0000ff",
| + | |
− | fuchsia: "#ff00ff",
| + | |
− | gray: "#808080",
| + | |
− | green: "#008000",
| + | |
− | lime: "#00ff00",
| + | |
− | maroon: "#800000",
| + | |
− | navy: "#000080",
| + | |
− | olive: "#808000",
| + | |
− | purple: "#800080",
| + | |
− | red: "#ff0000",
| + | |
− | silver: "#c0c0c0",
| + | |
− | teal: "#008080",
| + | |
− | white: "#ffffff",
| + | |
− | yellow: "#ffff00",
| + | |
− | | + | |
− | // 4.2.3. "transparent" color keyword
| + | |
− | transparent: [ null, null, null, 0 ],
| + | |
− | | + | |
− | _default: "#ffffff"
| + | |
− | }; | + | |
− | | + | |
− | }( jQuery )); | + | |
| var scroll_pos = 0; | | var scroll_pos = 0; |
| var beginning_color = new $.Color( 'rgb(255,0,0)' ); //we can set this here, but it'd probably be better to get it from the CSS; for the example we're setting it here. | | var beginning_color = new $.Color( 'rgb(255,0,0)' ); //we can set this here, but it'd probably be better to get it from the CSS; for the example we're setting it here. |
Line 882: |
Line 248: |
| $(document).scroll(function() { | | $(document).scroll(function() { |
| var animation_begin_pos = 0; | | var animation_begin_pos = 0; |
− | var animation_end_pos = document.body.scrollHeigh - window.innerHeight; | + | var animation_end_pos = document.body.scrollHeight - window.innerHeight; |
| scroll_pos = $(this).scrollTop(); | | scroll_pos = $(this).scrollTop(); |
| if(!(scroll_pos < animation_begin_pos || scroll_pos > animation_end_pos) ) { | | if(!(scroll_pos < animation_begin_pos || scroll_pos > animation_end_pos) ) { |