Código fuente de WordPress - jquery-plugins (jquery.colour-2.1.1.js)

1	/*!
2	 * jQuery Color Animations v2.1.1
3	 * https://github.com/jquery/jquery-color
4	 *
5	 * Copyright 2012 jQuery Foundation and other contributors
6	 * Released under the MIT license.
7	 * http://jquery.org/license
8	 *
9	 * Date: Sun Oct 28 15:08:06 2012 -0400
10	 */
11	(function( jQuery, undefined ) {
12	
13	        var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
14	
15	        // plusequals test for += 100 -= 100
16	        rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
17	        // a set of RE's that can match strings and generate color tuples.
18	        stringParsers = [{
19	                        re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
20	                        parse: function( execResult ) {
21	                                return [
22	                                        execResult[ 1 ],
23	                                        execResult[ 2 ],
24	                                        execResult[ 3 ],
25	                                        execResult[ 4 ]
26	                                ];
27	                        }
28	                }, {
29	                        re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
30	                        parse: function( execResult ) {
31	                                return [
32	                                        execResult[ 1 ] * 2.55,
33	                                        execResult[ 2 ] * 2.55,
34	                                        execResult[ 3 ] * 2.55,
35	                                        execResult[ 4 ]
36	                                ];
37	                        }
38	                }, {
39	                        // this regex ignores A-F because it's compared against an already lowercased string
40	                        re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
41	                        parse: function( execResult ) {
42	                                return [
43	                                        parseInt( execResult[ 1 ], 16 ),
44	                                        parseInt( execResult[ 2 ], 16 ),
45	                                        parseInt( execResult[ 3 ], 16 )
46	                                ];
47	                        }
48	                }, {
49	                        // this regex ignores A-F because it's compared against an already lowercased string
50	                        re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
51	                        parse: function( execResult ) {
52	                                return [
53	                                        parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
54	                                        parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
55	                                        parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
56	                                ];
57	                        }
58	                }, {
59	                        re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
60	                        space: "hsla",
61	                        parse: function( execResult ) {
62	                                return [
63	                                        execResult[ 1 ],
64	                                        execResult[ 2 ] / 100,
65	                                        execResult[ 3 ] / 100,
66	                                        execResult[ 4 ]
67	                                ];
68	                        }
69	                }],
70	
71	        // jQuery.Color( )
72	        color = jQuery.Color = function( color, green, blue, alpha ) {
73	                return new jQuery.Color.fn.parse( color, green, blue, alpha );
74	        },
75	        spaces = {
76	                rgba: {
77	                        props: {
78	                                red: {
79	                                        idx: 0,
80	                                        type: "byte"
81	                                },
82	                                green: {
83	                                        idx: 1,
84	                                        type: "byte"
85	                                },
86	                                blue: {
87	                                        idx: 2,
88	                                        type: "byte"
89	                                }
90	                        }
91	                },
92	
93	                hsla: {
94	                        props: {
95	                                hue: {
96	                                        idx: 0,
97	                                        type: "degrees"
98	                                },
99	                                saturation: {
100	                                        idx: 1,
101	                                        type: "percent"
102	                                },
103	                                lightness: {
104	                                        idx: 2,
105	                                        type: "percent"
106	                                }
107	                        }
108	                }
109	        },
110	        propTypes = {
111	                "byte": {
112	                        floor: true,
113	                        max: 255
114	                },
115	                "percent": {
116	                        max: 1
117	                },
118	                "degrees": {
119	                        mod: 360,
120	                        floor: true
121	                }
122	        },
123	        support = color.support = {},
124	
125	        // element for support tests
126	        supportElem = jQuery( "<p>" )[ 0 ],
127	
128	        // colors = jQuery.Color.names
129	        colors,
130	
131	        // local aliases of functions called often
132	        each = jQuery.each;
133	
134	// determine rgba support immediately
135	supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
136	support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
137	
138	// define cache name and alpha properties
139	// for rgba and hsla spaces
140	each( spaces, function( spaceName, space ) {
141	        space.cache = "_" + spaceName;
142	        space.props.alpha = {
143	                idx: 3,
144	                type: "percent",
145	                def: 1
146	        };
147	});
148	
149	function clamp( value, prop, allowEmpty ) {
150	        var type = propTypes[ prop.type ] || {};
151	
152	        if ( value == null ) {
153	                return (allowEmpty || !prop.def) ? null : prop.def;
154	        }
155	
156	        // ~~ is an short way of doing floor for positive numbers
157	        value = type.floor ? ~~value : parseFloat( value );
158	
159	        // IE will pass in empty strings as value for alpha,
160	        // which will hit this case
161	        if ( isNaN( value ) ) {
162	                return prop.def;
163	        }
164	
165	        if ( type.mod ) {
166	                // we add mod before modding to make sure that negatives values
167	                // get converted properly: -10 -> 350
168	                return (value + type.mod) % type.mod;
169	        }
170	
171	        // for now all property types without mod have min and max
172	        return 0 > value ? 0 : type.max < value ? type.max : value;
173	}
174	
175	function stringParse( string ) {
176	        var inst = color(),
177	                rgba = inst._rgba = [];
178	
179	        string = string.toLowerCase();
180	
181	        each( stringParsers, function( i, parser ) {
182	                var parsed,
183	                        match = parser.re.exec( string ),
184	                        values = match && parser.parse( match ),
185	                        spaceName = parser.space || "rgba";
186	
187	                if ( values ) {
188	                        parsed = inst[ spaceName ]( values );
189	
190	                        // if this was an rgba parse the assignment might happen twice
191	                        // oh well....
192	                        inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
193	                        rgba = inst._rgba = parsed._rgba;
194	
195	                        // exit each( stringParsers ) here because we matched
196	                        return false;
197	                }
198	        });
199	
200	        // Found a stringParser that handled it
201	        if ( rgba.length ) {
202	
203	                // if this came from a parsed string, force "transparent" when alpha is 0
204	                // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
205	                if ( rgba.join() === "0,0,0,0" ) {
206	                        jQuery.extend( rgba, colors.transparent );
207	                }
208	                return inst;
209	        }
210	
211	        // named colors
212	        return colors[ string ];
213	}
214	
215	color.fn = jQuery.extend( color.prototype, {
216	        parse: function( red, green, blue, alpha ) {
217	                if ( red === undefined ) {
218	                        this._rgba = [ null, null, null, null ];
219	                        return this;
220	                }
221	                if ( red.jquery || red.nodeType ) {
222	                        red = jQuery( red ).css( green );
223	                        green = undefined;
224	                }
225	
226	                var inst = this,
227	                        type = jQuery.type( red ),
228	                        rgba = this._rgba = [];
229	
230	                // more than 1 argument specified - assume ( red, green, blue, alpha )
231	                if ( green !== undefined ) {
232	                        red = [ red, green, blue, alpha ];
233	                        type = "array";
234	                }
235	
236	                if ( type === "string" ) {
237	                        return this.parse( stringParse( red ) || colors._default );
238	                }
239	
240	                if ( type === "array" ) {
241	                        each( spaces.rgba.props, function( key, prop ) {
242	                                rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
243	                        });
244	                        return this;
245	                }
246	
247	                if ( type === "object" ) {
248	                        if ( red instanceof color ) {
249	                                each( spaces, function( spaceName, space ) {
250	                                        if ( red[ space.cache ] ) {
251	                                                inst[ space.cache ] = red[ space.cache ].slice();
252	                                        }
253	                                });
254	                        } else {
255	                                each( spaces, function( spaceName, space ) {
256	                                        var cache = space.cache;
257	                                        each( space.props, function( key, prop ) {
258	
259	                                                // if the cache doesn't exist, and we know how to convert
260	                                                if ( !inst[ cache ] && space.to ) {
261	
262	                                                        // if the value was null, we don't need to copy it
263	                                                        // if the key was alpha, we don't need to copy it either
264	                                                        if ( key === "alpha" || red[ key ] == null ) {
265	                                                                return;
266	                                                        }
267	                                                        inst[ cache ] = space.to( inst._rgba );
268	                                                }
269	
270	                                                // this is the only case where we allow nulls for ALL properties.
271	                                                // call clamp with alwaysAllowEmpty
272	                                                inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
273	                                        });
274	
275	                                        // everything defined but alpha?
276	                                        if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
277	                                                // use the default of 1
278	                                                inst[ cache ][ 3 ] = 1;
279	                                                if ( space.from ) {
280	                                                        inst._rgba = space.from( inst[ cache ] );
281	                                                }
282	                                        }
283	                                });
284	                        }
285	                        return this;
286	                }
287	        },
288	        is: function( compare ) {
289	                var is = color( compare ),
290	                        same = true,
291	                        inst = this;
292	
293	                each( spaces, function( _, space ) {
294	                        var localCache,
295	                                isCache = is[ space.cache ];
296	                        if (isCache) {
297	                                localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
298	                                each( space.props, function( _, prop ) {
299	                                        if ( isCache[ prop.idx ] != null ) {
300	                                                same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
301	                                                return same;
302	                                        }
303	                                });
304	                        }
305	                        return same;
306	                });
307	                return same;
308	        },
309	        _space: function() {
310	                var used = [],
311	                        inst = this;
312	                each( spaces, function( spaceName, space ) {
313	                        if ( inst[ space.cache ] ) {
314	                                used.push( spaceName );
315	                        }
316	                });
317	                return used.pop();
318	        },
319	        transition: function( other, distance ) {
320	                var end = color( other ),
321	                        spaceName = end._space(),
322	                        space = spaces[ spaceName ],
323	                        startColor = this.alpha() === 0 ? color( "transparent" ) : this,
324	                        start = startColor[ space.cache ] || space.to( startColor._rgba ),
325	                        result = start.slice();
326	
327	                end = end[ space.cache ];
328	                each( space.props, function( key, prop ) {
329	                        var index = prop.idx,
330	                                startValue = start[ index ],
331	                                endValue = end[ index ],
332	                                type = propTypes[ prop.type ] || {};
333	
334	                        // if null, don't override start value
335	                        if ( endValue === null ) {
336	                                return;
337	                        }
338	                        // if null - use end
339	                        if ( startValue === null ) {
340	                                result[ index ] = endValue;
341	                        } else {
342	                                if ( type.mod ) {
343	                                        if ( endValue - startValue > type.mod / 2 ) {
344	                                                startValue += type.mod;
345	                                        } else if ( startValue - endValue > type.mod / 2 ) {
346	                                                startValue -= type.mod;
347	                                        }
348	                                }
349	                                result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
350	                        }
351	                });
352	                return this[ spaceName ]( result );
353	        },
354	        blend: function( opaque ) {
355	                // if we are already opaque - return ourself
356	                if ( this._rgba[ 3 ] === 1 ) {
357	                        return this;
358	                }
359	
360	                var rgb = this._rgba.slice(),
361	                        a = rgb.pop(),
362	                        blend = color( opaque )._rgba;
363	
364	                return color( jQuery.map( rgb, function( v, i ) {
365	                        return ( 1 - a ) * blend[ i ] + a * v;
366	                }));
367	        },
368	        toRgbaString: function() {
369	                var prefix = "rgba(",
370	                        rgba = jQuery.map( this._rgba, function( v, i ) {
371	                                return v == null ? ( i > 2 ? 1 : 0 ) : v;
372	                        });
373	
374	                if ( rgba[ 3 ] === 1 ) {
375	                        rgba.pop();
376	                        prefix = "rgb(";
377	                }
378	
379	                return prefix + rgba.join() + ")";
380	        },
381	        toHslaString: function() {
382	                var prefix = "hsla(",
383	                        hsla = jQuery.map( this.hsla(), function( v, i ) {
384	                                if ( v == null ) {
385	                                        v = i > 2 ? 1 : 0;
386	                                }
387	
388	                                // catch 1 and 2
389	                                if ( i && i < 3 ) {
390	                                        v = Math.round( v * 100 ) + "%";
391	                                }
392	                                return v;
393	                        });
394	
395	                if ( hsla[ 3 ] === 1 ) {
396	                        hsla.pop();
397	                        prefix = "hsl(";
398	                }
399	                return prefix + hsla.join() + ")";
400	        },
401	        toHexString: function( includeAlpha ) {
402	                var rgba = this._rgba.slice(),
403	                        alpha = rgba.pop();
404	
405	                if ( includeAlpha ) {
406	                        rgba.push( ~~( alpha * 255 ) );
407	                }
408	
409	                return "#" + jQuery.map( rgba, function( v ) {
410	
411	                        // default to 0 when nulls exist
412	                        v = ( v || 0 ).toString( 16 );
413	                        return v.length === 1 ? "0" + v : v;
414	                }).join("");
415	        },
416	        toString: function() {
417	                return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
418	        }
419	});
420	color.fn.parse.prototype = color.fn;
421	
422	// hsla conversions adapted from:
423	// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
424	
425	function hue2rgb( p, q, h ) {
426	        h = ( h + 1 ) % 1;
427	        if ( h * 6 < 1 ) {
428	                return p + (q - p) * h * 6;
429	        }
430	        if ( h * 2 < 1) {
431	                return q;
432	        }
433	        if ( h * 3 < 2 ) {
434	                return p + (q - p) * ((2/3) - h) * 6;
435	        }
436	        return p;
437	}
438	
439	spaces.hsla.to = function ( rgba ) {
440	        if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
441	                return [ null, null, null, rgba[ 3 ] ];
442	        }
443	        var r = rgba[ 0 ] / 255,
444	                g = rgba[ 1 ] / 255,
445	                b = rgba[ 2 ] / 255,
446	                a = rgba[ 3 ],
447	                max = Math.max( r, g, b ),
448	                min = Math.min( r, g, b ),
449	                diff = max - min,
450	                add = max + min,
451	                l = add * 0.5,
452	                h, s;
453	
454	        if ( min === max ) {
455	                h = 0;
456	        } else if ( r === max ) {
457	                h = ( 60 * ( g - b ) / diff ) + 360;
458	        } else if ( g === max ) {
459	                h = ( 60 * ( b - r ) / diff ) + 120;
460	        } else {
461	                h = ( 60 * ( r - g ) / diff ) + 240;
462	        }
463	
464	        // chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
465	        // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
466	        if ( diff === 0 ) {
467	                s = 0;
468	        } else if ( l <= 0.5 ) {
469	                s = diff / add;
470	        } else {
471	                s = diff / ( 2 - add );
472	        }
473	        return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
474	};
475	
476	spaces.hsla.from = function ( hsla ) {
477	        if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
478	                return [ null, null, null, hsla[ 3 ] ];
479	        }
480	        var h = hsla[ 0 ] / 360,
481	                s = hsla[ 1 ],
482	                l = hsla[ 2 ],
483	                a = hsla[ 3 ],
484	                q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
485	                p = 2 * l - q;
486	
487	        return [
488	                Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
489	                Math.round( hue2rgb( p, q, h ) * 255 ),
490	                Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
491	                a
492	        ];
493	};
494	
495	
496	each( spaces, function( spaceName, space ) {
497	        var props = space.props,
498	                cache = space.cache,
499	                to = space.to,
500	                from = space.from;
501	
502	        // makes rgba() and hsla()
503	        color.fn[ spaceName ] = function( value ) {
504	
505	                // generate a cache for this space if it doesn't exist
506	                if ( to && !this[ cache ] ) {
507	                        this[ cache ] = to( this._rgba );
508	                }
509	                if ( value === undefined ) {
510	                        return this[ cache ].slice();
511	                }
512	
513	                var ret,
514	                        type = jQuery.type( value ),
515	                        arr = ( type === "array" || type === "object" ) ? value : arguments,
516	                        local = this[ cache ].slice();
517	
518	                each( props, function( key, prop ) {
519	                        var val = arr[ type === "object" ? key : prop.idx ];
520	                        if ( val == null ) {
521	                                val = local[ prop.idx ];
522	                        }
523	                        local[ prop.idx ] = clamp( val, prop );
524	                });
525	
526	                if ( from ) {
527	                        ret = color( from( local ) );
528	                        ret[ cache ] = local;
529	                        return ret;
530	                } else {
531	                        return color( local );
532	                }
533	        };
534	
535	        // makes red() green() blue() alpha() hue() saturation() lightness()
536	        each( props, function( key, prop ) {
537	                // alpha is included in more than one space
538	                if ( color.fn[ key ] ) {
539	                        return;
540	                }
541	                color.fn[ key ] = function( value ) {
542	                        var vtype = jQuery.type( value ),
543	                                fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
544	                                local = this[ fn ](),
545	                                cur = local[ prop.idx ],
546	                                match;
547	
548	                        if ( vtype === "undefined" ) {
549	                                return cur;
550	                        }
551	
552	                        if ( vtype === "function" ) {
553	                                value = value.call( this, cur );
554	                                vtype = jQuery.type( value );
555	                        }
556	                        if ( value == null && prop.empty ) {
557	                                return this;
558	                        }
559	                        if ( vtype === "string" ) {
560	                                match = rplusequals.exec( value );
561	                                if ( match ) {
562	                                        value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
563	                                }
564	                        }
565	                        local[ prop.idx ] = value;
566	                        return this[ fn ]( local );
567	                };
568	        });
569	});
570	
571	// add cssHook and .fx.step function for each named hook.
572	// accept a space separated string of properties
573	color.hook = function( hook ) {
574	        var hooks = hook.split( " " );
575	        each( hooks, function( i, hook ) {
576	                jQuery.cssHooks[ hook ] = {
577	                        set: function( elem, value ) {
578	                                var parsed, curElem,
579	                                        backgroundColor = "";
580	
581	                                if ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) {
582	                                        value = color( parsed || value );
583	                                        if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
584	                                                curElem = hook === "backgroundColor" ? elem.parentNode : elem;
585	                                                while (
586	                                                        (backgroundColor === "" || backgroundColor === "transparent") &&
587	                                                        curElem && curElem.style
588	                                                ) {
589	                                                        try {
590	                                                                backgroundColor = jQuery.css( curElem, "backgroundColor" );
591	                                                                curElem = curElem.parentNode;
592	                                                        } catch ( e ) {
593	                                                        }
594	                                                }
595	
596	                                                value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
597	                                                        backgroundColor :
598	                                                        "_default" );
599	                                        }
600	
601	                                        value = value.toRgbaString();
602	                                }
603	                                try {
604	                                        elem.style[ hook ] = value;
605	                                } catch( e ) {
606	                                        // wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
607	                                }
608	                        }
609	                };
610	                jQuery.fx.step[ hook ] = function( fx ) {
611	                        if ( !fx.colorInit ) {
612	                                fx.start = color( fx.elem, hook );
613	                                fx.end = color( fx.end );
614	                                fx.colorInit = true;
615	                        }
616	                        jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
617	                };
618	        });
619	
620	};
621	
622	color.hook( stepHooks );
623	
624	jQuery.cssHooks.borderColor = {
625	        expand: function( value ) {
626	                var expanded = {};
627	
628	                each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
629	                        expanded[ "border" + part + "Color" ] = value;
630	                });
631	                return expanded;
632	        }
633	};
634	
635	// Basic color names only.
636	// Usage of any of the other color names requires adding yourself or including
637	// jquery.color.svg-names.js.
638	colors = jQuery.Color.names = {
639	        // 4.1. Basic color keywords
640	        aqua: "#00ffff",
641	        black: "#000000",
642	        blue: "#0000ff",
643	        fuchsia: "#ff00ff",
644	        gray: "#808080",
645	        green: "#008000",
646	        lime: "#00ff00",
647	        maroon: "#800000",
648	        navy: "#000080",
649	        olive: "#808000",
650	        purple: "#800080",
651	        red: "#ff0000",
652	        silver: "#c0c0c0",
653	        teal: "#008080",
654	        white: "#ffffff",
655	        yellow: "#ffff00",
656	
657	        // 4.2.3. ‘transparent’ color keyword
658	        transparent: [ null, null, null, 0 ],
659	
660	        _default: "#ffffff"
661	};
662	
663	})( jQuery );

Contacte con nosotros
¿No puede leer el artículo? ¡Póngase en contacto con nosotros para obtener una respuesta gratuita! Ayuda gratuita para sitios personales y de pequeñas empresas
Tel: 020-2206-9892
QQ咨询:1025174874
(iii) Correo electrónico: info@361sale.com
Horario de trabajo: de lunes a viernes, de 9:30 a 18:30, días festivos libres
© Declaración de reproducción
Este artículo fue escrito por Harry
EL FIN
Si le gusta, apóyela.
felicitaciones0 compartir (alegrías, beneficios, privilegios, etc.) con los demás
comentarios compra de sofás

Por favor, inicie sesión para enviar un comentario

    Sin comentarios