You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					2262 lines
				
				55 KiB
			
		
		
			
		
	
	
					2262 lines
				
				55 KiB
			| 
											12 years ago
										 | /*! jQuery UI - v1.10.3 - 2013-07-18
 | ||
|  | * http://jqueryui.com
 | ||
|  | * Includes: jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
 | ||
|  | * Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
 | ||
|  | 
 | ||
| 
											13 years ago
										 | (function($, undefined) {
 | ||
|  | 
 | ||
|  | var dataSpace = "ui-effects-";
 | ||
|  | 
 | ||
|  | $.effects = {
 | ||
|  | 	effect: {}
 | ||
|  | };
 | ||
|  | 
 | ||
|  | /*!
 | ||
|  |  * jQuery Color Animations v2.1.2
 | ||
|  |  * https://github.com/jquery/jquery-color
 | ||
|  |  *
 | ||
|  |  * Copyright 2013 jQuery Foundation and other contributors
 | ||
|  |  * Released under the MIT license.
 | ||
|  |  * http://jquery.org/license
 | ||
|  |  *
 | ||
|  |  * Date: Wed Jan 16 08:47:09 2013 -0600
 | ||
|  |  */
 | ||
|  | (function( jQuery, undefined ) {
 | ||
|  | 
 | ||
|  | 	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 ] && 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 ) {
 | ||
|  | 		var is = color( compare ),
 | ||
|  | 			same = true,
 | ||
|  | 			inst = this;
 | ||
|  | 
 | ||
|  | 		each( spaces, function( _, space ) {
 | ||
|  | 			var localCache,
 | ||
|  | 				isCache = is[ space.cache ];
 | ||
|  | 			if (isCache) {
 | ||
|  | 				localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
 | ||
|  | 				each( space.props, function( _, prop ) {
 | ||
|  | 					if ( isCache[ prop.idx ] != null ) {
 | ||
|  | 						same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
 | ||
|  | 						return same;
 | ||
|  | 					}
 | ||
|  | 				});
 | ||
|  | 			}
 | ||
|  | 			return same;
 | ||
|  | 		});
 | ||
|  | 		return same;
 | ||
|  | 	},
 | ||
|  | 	_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 );
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /******************************************************************************/
 | ||
|  | /****************************** CLASS ANIMATIONS ******************************/
 | ||
|  | /******************************************************************************/
 | ||
|  | (function() {
 | ||
|  | 
 | ||
|  | var classAnimationActions = [ "add", "remove", "toggle" ],
 | ||
|  | 	shorthandStyles = {
 | ||
|  | 		border: 1,
 | ||
|  | 		borderBottom: 1,
 | ||
|  | 		borderColor: 1,
 | ||
|  | 		borderLeft: 1,
 | ||
|  | 		borderRight: 1,
 | ||
|  | 		borderTop: 1,
 | ||
|  | 		borderWidth: 1,
 | ||
|  | 		margin: 1,
 | ||
|  | 		padding: 1
 | ||
|  | 	};
 | ||
|  | 
 | ||
|  | $.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
 | ||
|  | 	$.fx.step[ prop ] = function( fx ) {
 | ||
|  | 		if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
 | ||
|  | 			jQuery.style( fx.elem, prop, fx.end );
 | ||
|  | 			fx.setAttr = true;
 | ||
|  | 		}
 | ||
|  | 	};
 | ||
|  | });
 | ||
|  | 
 | ||
|  | function getElementStyles( elem ) {
 | ||
|  | 	var key, len,
 | ||
|  | 		style = elem.ownerDocument.defaultView ?
 | ||
|  | 			elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
 | ||
|  | 			elem.currentStyle,
 | ||
|  | 		styles = {};
 | ||
|  | 
 | ||
|  | 	if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
 | ||
|  | 		len = style.length;
 | ||
|  | 		while ( len-- ) {
 | ||
|  | 			key = style[ len ];
 | ||
|  | 			if ( typeof style[ key ] === "string" ) {
 | ||
|  | 				styles[ $.camelCase( key ) ] = style[ key ];
 | ||
|  | 			}
 | ||
|  | 		}
 | ||
|  | 	// support: Opera, IE <9
 | ||
|  | 	} else {
 | ||
|  | 		for ( key in style ) {
 | ||
|  | 			if ( typeof style[ key ] === "string" ) {
 | ||
|  | 				styles[ key ] = style[ key ];
 | ||
|  | 			}
 | ||
|  | 		}
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	return styles;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | 
 | ||
|  | function styleDifference( oldStyle, newStyle ) {
 | ||
|  | 	var diff = {},
 | ||
|  | 		name, value;
 | ||
|  | 
 | ||
|  | 	for ( name in newStyle ) {
 | ||
|  | 		value = newStyle[ name ];
 | ||
|  | 		if ( oldStyle[ name ] !== value ) {
 | ||
|  | 			if ( !shorthandStyles[ name ] ) {
 | ||
|  | 				if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
 | ||
|  | 					diff[ name ] = value;
 | ||
|  | 				}
 | ||
|  | 			}
 | ||
|  | 		}
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	return diff;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | // support: jQuery <1.8
 | ||
|  | if ( !$.fn.addBack ) {
 | ||
|  | 	$.fn.addBack = function( selector ) {
 | ||
|  | 		return this.add( selector == null ?
 | ||
|  | 			this.prevObject : this.prevObject.filter( selector )
 | ||
|  | 		);
 | ||
|  | 	};
 | ||
|  | }
 | ||
|  | 
 | ||
|  | $.effects.animateClass = function( value, duration, easing, callback ) {
 | ||
|  | 	var o = $.speed( duration, easing, callback );
 | ||
|  | 
 | ||
|  | 	return this.queue( function() {
 | ||
|  | 		var animated = $( this ),
 | ||
|  | 			baseClass = animated.attr( "class" ) || "",
 | ||
|  | 			applyClassChange,
 | ||
|  | 			allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
 | ||
|  | 
 | ||
|  | 		// map the animated objects to store the original styles.
 | ||
|  | 		allAnimations = allAnimations.map(function() {
 | ||
|  | 			var el = $( this );
 | ||
|  | 			return {
 | ||
|  | 				el: el,
 | ||
|  | 				start: getElementStyles( this )
 | ||
|  | 			};
 | ||
|  | 		});
 | ||
|  | 
 | ||
|  | 		// apply class change
 | ||
|  | 		applyClassChange = function() {
 | ||
|  | 			$.each( classAnimationActions, function(i, action) {
 | ||
|  | 				if ( value[ action ] ) {
 | ||
|  | 					animated[ action + "Class" ]( value[ action ] );
 | ||
|  | 				}
 | ||
|  | 			});
 | ||
|  | 		};
 | ||
|  | 		applyClassChange();
 | ||
|  | 
 | ||
|  | 		// map all animated objects again - calculate new styles and diff
 | ||
|  | 		allAnimations = allAnimations.map(function() {
 | ||
|  | 			this.end = getElementStyles( this.el[ 0 ] );
 | ||
|  | 			this.diff = styleDifference( this.start, this.end );
 | ||
|  | 			return this;
 | ||
|  | 		});
 | ||
|  | 
 | ||
|  | 		// apply original class
 | ||
|  | 		animated.attr( "class", baseClass );
 | ||
|  | 
 | ||
|  | 		// map all animated objects again - this time collecting a promise
 | ||
|  | 		allAnimations = allAnimations.map(function() {
 | ||
|  | 			var styleInfo = this,
 | ||
|  | 				dfd = $.Deferred(),
 | ||
|  | 				opts = $.extend({}, o, {
 | ||
|  | 					queue: false,
 | ||
|  | 					complete: function() {
 | ||
|  | 						dfd.resolve( styleInfo );
 | ||
|  | 					}
 | ||
|  | 				});
 | ||
|  | 
 | ||
|  | 			this.el.animate( this.diff, opts );
 | ||
|  | 			return dfd.promise();
 | ||
|  | 		});
 | ||
|  | 
 | ||
|  | 		// once all animations have completed:
 | ||
|  | 		$.when.apply( $, allAnimations.get() ).done(function() {
 | ||
|  | 
 | ||
|  | 			// set the final class
 | ||
|  | 			applyClassChange();
 | ||
|  | 
 | ||
|  | 			// for each animated element,
 | ||
|  | 			// clear all css properties that were animated
 | ||
|  | 			$.each( arguments, function() {
 | ||
|  | 				var el = this.el;
 | ||
|  | 				$.each( this.diff, function(key) {
 | ||
|  | 					el.css( key, "" );
 | ||
|  | 				});
 | ||
|  | 			});
 | ||
|  | 
 | ||
|  | 			// this is guarnteed to be there if you use jQuery.speed()
 | ||
|  | 			// it also handles dequeuing the next anim...
 | ||
|  | 			o.complete.call( animated[ 0 ] );
 | ||
|  | 		});
 | ||
|  | 	});
 | ||
|  | };
 | ||
|  | 
 | ||
|  | $.fn.extend({
 | ||
|  | 	addClass: (function( orig ) {
 | ||
|  | 		return function( classNames, speed, easing, callback ) {
 | ||
|  | 			return speed ?
 | ||
|  | 				$.effects.animateClass.call( this,
 | ||
|  | 					{ add: classNames }, speed, easing, callback ) :
 | ||
|  | 				orig.apply( this, arguments );
 | ||
|  | 		};
 | ||
|  | 	})( $.fn.addClass ),
 | ||
|  | 
 | ||
|  | 	removeClass: (function( orig ) {
 | ||
|  | 		return function( classNames, speed, easing, callback ) {
 | ||
|  | 			return arguments.length > 1 ?
 | ||
|  | 				$.effects.animateClass.call( this,
 | ||
|  | 					{ remove: classNames }, speed, easing, callback ) :
 | ||
|  | 				orig.apply( this, arguments );
 | ||
|  | 		};
 | ||
|  | 	})( $.fn.removeClass ),
 | ||
|  | 
 | ||
|  | 	toggleClass: (function( orig ) {
 | ||
|  | 		return function( classNames, force, speed, easing, callback ) {
 | ||
|  | 			if ( typeof force === "boolean" || force === undefined ) {
 | ||
|  | 				if ( !speed ) {
 | ||
|  | 					// without speed parameter
 | ||
|  | 					return orig.apply( this, arguments );
 | ||
|  | 				} else {
 | ||
|  | 					return $.effects.animateClass.call( this,
 | ||
|  | 						(force ? { add: classNames } : { remove: classNames }),
 | ||
|  | 						speed, easing, callback );
 | ||
|  | 				}
 | ||
|  | 			} else {
 | ||
|  | 				// without force parameter
 | ||
|  | 				return $.effects.animateClass.call( this,
 | ||
|  | 					{ toggle: classNames }, force, speed, easing );
 | ||
|  | 			}
 | ||
|  | 		};
 | ||
|  | 	})( $.fn.toggleClass ),
 | ||
|  | 
 | ||
|  | 	switchClass: function( remove, add, speed, easing, callback) {
 | ||
|  | 		return $.effects.animateClass.call( this, {
 | ||
|  | 			add: add,
 | ||
|  | 			remove: remove
 | ||
|  | 		}, speed, easing, callback );
 | ||
|  | 	}
 | ||
|  | });
 | ||
|  | 
 | ||
|  | })();
 | ||
|  | 
 | ||
|  | /******************************************************************************/
 | ||
|  | /*********************************** EFFECTS **********************************/
 | ||
|  | /******************************************************************************/
 | ||
|  | 
 | ||
|  | (function() {
 | ||
|  | 
 | ||
|  | $.extend( $.effects, {
 | ||
|  | 	version: "1.10.3",
 | ||
|  | 
 | ||
|  | 	// Saves a set of properties in a data storage
 | ||
|  | 	save: function( element, set ) {
 | ||
|  | 		for( var i=0; i < set.length; i++ ) {
 | ||
|  | 			if ( set[ i ] !== null ) {
 | ||
|  | 				element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
 | ||
|  | 			}
 | ||
|  | 		}
 | ||
|  | 	},
 | ||
|  | 
 | ||
|  | 	// Restores a set of previously saved properties from a data storage
 | ||
|  | 	restore: function( element, set ) {
 | ||
|  | 		var val, i;
 | ||
|  | 		for( i=0; i < set.length; i++ ) {
 | ||
|  | 			if ( set[ i ] !== null ) {
 | ||
|  | 				val = element.data( dataSpace + set[ i ] );
 | ||
|  | 				// support: jQuery 1.6.2
 | ||
|  | 				// http://bugs.jquery.com/ticket/9917
 | ||
|  | 				// jQuery 1.6.2 incorrectly returns undefined for any falsy value.
 | ||
|  | 				// We can't differentiate between "" and 0 here, so we just assume
 | ||
|  | 				// empty string since it's likely to be a more common value...
 | ||
|  | 				if ( val === undefined ) {
 | ||
|  | 					val = "";
 | ||
|  | 				}
 | ||
|  | 				element.css( set[ i ], val );
 | ||
|  | 			}
 | ||
|  | 		}
 | ||
|  | 	},
 | ||
|  | 
 | ||
|  | 	setMode: function( el, mode ) {
 | ||
|  | 		if (mode === "toggle") {
 | ||
|  | 			mode = el.is( ":hidden" ) ? "show" : "hide";
 | ||
|  | 		}
 | ||
|  | 		return mode;
 | ||
|  | 	},
 | ||
|  | 
 | ||
|  | 	// Translates a [top,left] array into a baseline value
 | ||
|  | 	// this should be a little more flexible in the future to handle a string & hash
 | ||
|  | 	getBaseline: function( origin, original ) {
 | ||
|  | 		var y, x;
 | ||
|  | 		switch ( origin[ 0 ] ) {
 | ||
|  | 			case "top": y = 0; break;
 | ||
|  | 			case "middle": y = 0.5; break;
 | ||
|  | 			case "bottom": y = 1; break;
 | ||
|  | 			default: y = origin[ 0 ] / original.height;
 | ||
|  | 		}
 | ||
|  | 		switch ( origin[ 1 ] ) {
 | ||
|  | 			case "left": x = 0; break;
 | ||
|  | 			case "center": x = 0.5; break;
 | ||
|  | 			case "right": x = 1; break;
 | ||
|  | 			default: x = origin[ 1 ] / original.width;
 | ||
|  | 		}
 | ||
|  | 		return {
 | ||
|  | 			x: x,
 | ||
|  | 			y: y
 | ||
|  | 		};
 | ||
|  | 	},
 | ||
|  | 
 | ||
|  | 	// Wraps the element around a wrapper that copies position properties
 | ||
|  | 	createWrapper: function( element ) {
 | ||
|  | 
 | ||
|  | 		// if the element is already wrapped, return it
 | ||
|  | 		if ( element.parent().is( ".ui-effects-wrapper" )) {
 | ||
|  | 			return element.parent();
 | ||
|  | 		}
 | ||
|  | 
 | ||
|  | 		// wrap the element
 | ||
|  | 		var props = {
 | ||
|  | 				width: element.outerWidth(true),
 | ||
|  | 				height: element.outerHeight(true),
 | ||
|  | 				"float": element.css( "float" )
 | ||
|  | 			},
 | ||
|  | 			wrapper = $( "<div></div>" )
 | ||
|  | 				.addClass( "ui-effects-wrapper" )
 | ||
|  | 				.css({
 | ||
|  | 					fontSize: "100%",
 | ||
|  | 					background: "transparent",
 | ||
|  | 					border: "none",
 | ||
|  | 					margin: 0,
 | ||
|  | 					padding: 0
 | ||
|  | 				}),
 | ||
|  | 			// Store the size in case width/height are defined in % - Fixes #5245
 | ||
|  | 			size = {
 | ||
|  | 				width: element.width(),
 | ||
|  | 				height: element.height()
 | ||
|  | 			},
 | ||
|  | 			active = document.activeElement;
 | ||
|  | 
 | ||
|  | 		// support: Firefox
 | ||
|  | 		// Firefox incorrectly exposes anonymous content
 | ||
|  | 		// https://bugzilla.mozilla.org/show_bug.cgi?id=561664
 | ||
|  | 		try {
 | ||
|  | 			active.id;
 | ||
|  | 		} catch( e ) {
 | ||
|  | 			active = document.body;
 | ||
|  | 		}
 | ||
|  | 
 | ||
|  | 		element.wrap( wrapper );
 | ||
|  | 
 | ||
|  | 		// Fixes #7595 - Elements lose focus when wrapped.
 | ||
|  | 		if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
 | ||
|  | 			$( active ).focus();
 | ||
|  | 		}
 | ||
|  | 
 | ||
|  | 		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
 | ||
|  | 
 | ||
|  | 		// transfer positioning properties to the wrapper
 | ||
|  | 		if ( element.css( "position" ) === "static" ) {
 | ||
|  | 			wrapper.css({ position: "relative" });
 | ||
|  | 			element.css({ position: "relative" });
 | ||
|  | 		} else {
 | ||
|  | 			$.extend( props, {
 | ||
|  | 				position: element.css( "position" ),
 | ||
|  | 				zIndex: element.css( "z-index" )
 | ||
|  | 			});
 | ||
|  | 			$.each([ "top", "left", "bottom", "right" ], function(i, pos) {
 | ||
|  | 				props[ pos ] = element.css( pos );
 | ||
|  | 				if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
 | ||
|  | 					props[ pos ] = "auto";
 | ||
|  | 				}
 | ||
|  | 			});
 | ||
|  | 			element.css({
 | ||
|  | 				position: "relative",
 | ||
|  | 				top: 0,
 | ||
|  | 				left: 0,
 | ||
|  | 				right: "auto",
 | ||
|  | 				bottom: "auto"
 | ||
|  | 			});
 | ||
|  | 		}
 | ||
|  | 		element.css(size);
 | ||
|  | 
 | ||
|  | 		return wrapper.css( props ).show();
 | ||
|  | 	},
 | ||
|  | 
 | ||
|  | 	removeWrapper: function( element ) {
 | ||
|  | 		var active = document.activeElement;
 | ||
|  | 
 | ||
|  | 		if ( element.parent().is( ".ui-effects-wrapper" ) ) {
 | ||
|  | 			element.parent().replaceWith( element );
 | ||
|  | 
 | ||
|  | 			// Fixes #7595 - Elements lose focus when wrapped.
 | ||
|  | 			if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
 | ||
|  | 				$( active ).focus();
 | ||
|  | 			}
 | ||
|  | 		}
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 		return element;
 | ||
|  | 	},
 | ||
|  | 
 | ||
|  | 	setTransition: function( element, list, factor, value ) {
 | ||
|  | 		value = value || {};
 | ||
|  | 		$.each( list, function( i, x ) {
 | ||
|  | 			var unit = element.cssUnit( x );
 | ||
|  | 			if ( unit[ 0 ] > 0 ) {
 | ||
|  | 				value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
 | ||
|  | 			}
 | ||
|  | 		});
 | ||
|  | 		return value;
 | ||
|  | 	}
 | ||
|  | });
 | ||
|  | 
 | ||
|  | // return an effect options object for the given parameters:
 | ||
|  | function _normalizeArguments( effect, options, speed, callback ) {
 | ||
|  | 
 | ||
|  | 	// allow passing all options as the first parameter
 | ||
|  | 	if ( $.isPlainObject( effect ) ) {
 | ||
|  | 		options = effect;
 | ||
|  | 		effect = effect.effect;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// convert to an object
 | ||
|  | 	effect = { effect: effect };
 | ||
|  | 
 | ||
|  | 	// catch (effect, null, ...)
 | ||
|  | 	if ( options == null ) {
 | ||
|  | 		options = {};
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// catch (effect, callback)
 | ||
|  | 	if ( $.isFunction( options ) ) {
 | ||
|  | 		callback = options;
 | ||
|  | 		speed = null;
 | ||
|  | 		options = {};
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// catch (effect, speed, ?)
 | ||
|  | 	if ( typeof options === "number" || $.fx.speeds[ options ] ) {
 | ||
|  | 		callback = speed;
 | ||
|  | 		speed = options;
 | ||
|  | 		options = {};
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// catch (effect, options, callback)
 | ||
|  | 	if ( $.isFunction( speed ) ) {
 | ||
|  | 		callback = speed;
 | ||
|  | 		speed = null;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// add options to effect
 | ||
|  | 	if ( options ) {
 | ||
|  | 		$.extend( effect, options );
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	speed = speed || options.duration;
 | ||
|  | 	effect.duration = $.fx.off ? 0 :
 | ||
|  | 		typeof speed === "number" ? speed :
 | ||
|  | 		speed in $.fx.speeds ? $.fx.speeds[ speed ] :
 | ||
|  | 		$.fx.speeds._default;
 | ||
|  | 
 | ||
|  | 	effect.complete = callback || options.complete;
 | ||
|  | 
 | ||
|  | 	return effect;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | function standardAnimationOption( option ) {
 | ||
|  | 	// Valid standard speeds (nothing, number, named speed)
 | ||
|  | 	if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
 | ||
|  | 		return true;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// Invalid strings - treat as "normal" speed
 | ||
|  | 	if ( typeof option === "string" && !$.effects.effect[ option ] ) {
 | ||
|  | 		return true;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// Complete callback
 | ||
|  | 	if ( $.isFunction( option ) ) {
 | ||
|  | 		return true;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// Options hash (but not naming an effect)
 | ||
|  | 	if ( typeof option === "object" && !option.effect ) {
 | ||
|  | 		return true;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// Didn't match any standard API
 | ||
|  | 	return false;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | $.fn.extend({
 | ||
|  | 	effect: function( /* effect, options, speed, callback */ ) {
 | ||
|  | 		var args = _normalizeArguments.apply( this, arguments ),
 | ||
|  | 			mode = args.mode,
 | ||
|  | 			queue = args.queue,
 | ||
|  | 			effectMethod = $.effects.effect[ args.effect ];
 | ||
|  | 
 | ||
|  | 		if ( $.fx.off || !effectMethod ) {
 | ||
|  | 			// delegate to the original method (e.g., .show()) if possible
 | ||
|  | 			if ( mode ) {
 | ||
|  | 				return this[ mode ]( args.duration, args.complete );
 | ||
|  | 			} else {
 | ||
|  | 				return this.each( function() {
 | ||
|  | 					if ( args.complete ) {
 | ||
|  | 						args.complete.call( this );
 | ||
|  | 					}
 | ||
|  | 				});
 | ||
|  | 			}
 | ||
|  | 		}
 | ||
|  | 
 | ||
|  | 		function run( next ) {
 | ||
|  | 			var elem = $( this ),
 | ||
|  | 				complete = args.complete,
 | ||
|  | 				mode = args.mode;
 | ||
|  | 
 | ||
|  | 			function done() {
 | ||
|  | 				if ( $.isFunction( complete ) ) {
 | ||
|  | 					complete.call( elem[0] );
 | ||
|  | 				}
 | ||
|  | 				if ( $.isFunction( next ) ) {
 | ||
|  | 					next();
 | ||
|  | 				}
 | ||
|  | 			}
 | ||
|  | 
 | ||
|  | 			// If the element already has the correct final state, delegate to
 | ||
|  | 			// the core methods so the internal tracking of "olddisplay" works.
 | ||
|  | 			if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
 | ||
|  | 				elem[ mode ]();
 | ||
|  | 				done();
 | ||
|  | 			} else {
 | ||
|  | 				effectMethod.call( elem[0], args, done );
 | ||
|  | 			}
 | ||
|  | 		}
 | ||
|  | 
 | ||
|  | 		return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
 | ||
|  | 	},
 | ||
|  | 
 | ||
|  | 	show: (function( orig ) {
 | ||
|  | 		return function( option ) {
 | ||
|  | 			if ( standardAnimationOption( option ) ) {
 | ||
|  | 				return orig.apply( this, arguments );
 | ||
|  | 			} else {
 | ||
|  | 				var args = _normalizeArguments.apply( this, arguments );
 | ||
|  | 				args.mode = "show";
 | ||
|  | 				return this.effect.call( this, args );
 | ||
|  | 			}
 | ||
|  | 		};
 | ||
|  | 	})( $.fn.show ),
 | ||
|  | 
 | ||
|  | 	hide: (function( orig ) {
 | ||
|  | 		return function( option ) {
 | ||
|  | 			if ( standardAnimationOption( option ) ) {
 | ||
|  | 				return orig.apply( this, arguments );
 | ||
|  | 			} else {
 | ||
|  | 				var args = _normalizeArguments.apply( this, arguments );
 | ||
|  | 				args.mode = "hide";
 | ||
|  | 				return this.effect.call( this, args );
 | ||
|  | 			}
 | ||
|  | 		};
 | ||
|  | 	})( $.fn.hide ),
 | ||
|  | 
 | ||
|  | 	toggle: (function( orig ) {
 | ||
|  | 		return function( option ) {
 | ||
|  | 			if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
 | ||
|  | 				return orig.apply( this, arguments );
 | ||
|  | 			} else {
 | ||
|  | 				var args = _normalizeArguments.apply( this, arguments );
 | ||
|  | 				args.mode = "toggle";
 | ||
|  | 				return this.effect.call( this, args );
 | ||
|  | 			}
 | ||
|  | 		};
 | ||
|  | 	})( $.fn.toggle ),
 | ||
|  | 
 | ||
|  | 	// helper functions
 | ||
|  | 	cssUnit: function(key) {
 | ||
|  | 		var style = this.css( key ),
 | ||
|  | 			val = [];
 | ||
|  | 
 | ||
|  | 		$.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
 | ||
|  | 			if ( style.indexOf( unit ) > 0 ) {
 | ||
|  | 				val = [ parseFloat( style ), unit ];
 | ||
|  | 			}
 | ||
|  | 		});
 | ||
|  | 		return val;
 | ||
|  | 	}
 | ||
|  | });
 | ||
|  | 
 | ||
|  | })();
 | ||
|  | 
 | ||
|  | /******************************************************************************/
 | ||
|  | /*********************************** EASING ***********************************/
 | ||
|  | /******************************************************************************/
 | ||
|  | 
 | ||
|  | (function() {
 | ||
|  | 
 | ||
|  | // based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
 | ||
|  | 
 | ||
|  | var baseEasings = {};
 | ||
|  | 
 | ||
|  | $.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
 | ||
|  | 	baseEasings[ name ] = function( p ) {
 | ||
|  | 		return Math.pow( p, i + 2 );
 | ||
|  | 	};
 | ||
|  | });
 | ||
|  | 
 | ||
|  | $.extend( baseEasings, {
 | ||
|  | 	Sine: function ( p ) {
 | ||
|  | 		return 1 - Math.cos( p * Math.PI / 2 );
 | ||
|  | 	},
 | ||
|  | 	Circ: function ( p ) {
 | ||
|  | 		return 1 - Math.sqrt( 1 - p * p );
 | ||
|  | 	},
 | ||
|  | 	Elastic: function( p ) {
 | ||
|  | 		return p === 0 || p === 1 ? p :
 | ||
|  | 			-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
 | ||
|  | 	},
 | ||
|  | 	Back: function( p ) {
 | ||
|  | 		return p * p * ( 3 * p - 2 );
 | ||
|  | 	},
 | ||
|  | 	Bounce: function ( p ) {
 | ||
|  | 		var pow2,
 | ||
|  | 			bounce = 4;
 | ||
|  | 
 | ||
|  | 		while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
 | ||
|  | 		return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
 | ||
|  | 	}
 | ||
|  | });
 | ||
|  | 
 | ||
|  | $.each( baseEasings, function( name, easeIn ) {
 | ||
|  | 	$.easing[ "easeIn" + name ] = easeIn;
 | ||
|  | 	$.easing[ "easeOut" + name ] = function( p ) {
 | ||
|  | 		return 1 - easeIn( 1 - p );
 | ||
|  | 	};
 | ||
|  | 	$.easing[ "easeInOut" + name ] = function( p ) {
 | ||
|  | 		return p < 0.5 ?
 | ||
|  | 			easeIn( p * 2 ) / 2 :
 | ||
|  | 			1 - easeIn( p * -2 + 2 ) / 2;
 | ||
|  | 	};
 | ||
|  | });
 | ||
|  | 
 | ||
|  | })();
 | ||
|  | 
 | ||
|  | })(jQuery);
 | ||
| 
											12 years ago
										 | (function( $, undefined ) {
 | ||
|  | 
 | ||
|  | var rvertical = /up|down|vertical/,
 | ||
|  | 	rpositivemotion = /up|left|vertical|horizontal/;
 | ||
|  | 
 | ||
|  | $.effects.effect.blind = function( o, done ) {
 | ||
|  | 	// Create element
 | ||
|  | 	var el = $( this ),
 | ||
|  | 		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
 | ||
|  | 		mode = $.effects.setMode( el, o.mode || "hide" ),
 | ||
|  | 		direction = o.direction || "up",
 | ||
|  | 		vertical = rvertical.test( direction ),
 | ||
|  | 		ref = vertical ? "height" : "width",
 | ||
|  | 		ref2 = vertical ? "top" : "left",
 | ||
|  | 		motion = rpositivemotion.test( direction ),
 | ||
|  | 		animation = {},
 | ||
|  | 		show = mode === "show",
 | ||
|  | 		wrapper, distance, margin;
 | ||
|  | 
 | ||
|  | 	// if already wrapped, the wrapper's properties are my property. #6245
 | ||
|  | 	if ( el.parent().is( ".ui-effects-wrapper" ) ) {
 | ||
|  | 		$.effects.save( el.parent(), props );
 | ||
|  | 	} else {
 | ||
|  | 		$.effects.save( el, props );
 | ||
|  | 	}
 | ||
|  | 	el.show();
 | ||
|  | 	wrapper = $.effects.createWrapper( el ).css({
 | ||
|  | 		overflow: "hidden"
 | ||
|  | 	});
 | ||
|  | 
 | ||
|  | 	distance = wrapper[ ref ]();
 | ||
|  | 	margin = parseFloat( wrapper.css( ref2 ) ) || 0;
 | ||
|  | 
 | ||
|  | 	animation[ ref ] = show ? distance : 0;
 | ||
|  | 	if ( !motion ) {
 | ||
|  | 		el
 | ||
|  | 			.css( vertical ? "bottom" : "right", 0 )
 | ||
|  | 			.css( vertical ? "top" : "left", "auto" )
 | ||
|  | 			.css({ position: "absolute" });
 | ||
|  | 
 | ||
|  | 		animation[ ref2 ] = show ? margin : distance + margin;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// start at 0 if we are showing
 | ||
|  | 	if ( show ) {
 | ||
|  | 		wrapper.css( ref, 0 );
 | ||
|  | 		if ( ! motion ) {
 | ||
|  | 			wrapper.css( ref2, margin + distance );
 | ||
|  | 		}
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// Animate
 | ||
|  | 	wrapper.animate( animation, {
 | ||
|  | 		duration: o.duration,
 | ||
|  | 		easing: o.easing,
 | ||
|  | 		queue: false,
 | ||
|  | 		complete: function() {
 | ||
|  | 			if ( mode === "hide" ) {
 | ||
|  | 				el.hide();
 | ||
|  | 			}
 | ||
|  | 			$.effects.restore( el, props );
 | ||
|  | 			$.effects.removeWrapper( el );
 | ||
|  | 			done();
 | ||
|  | 		}
 | ||
|  | 	});
 | ||
|  | 
 | ||
|  | };
 | ||
|  | 
 | ||
|  | })(jQuery);
 | ||
|  | (function( $, undefined ) {
 | ||
|  | 
 | ||
|  | $.effects.effect.bounce = function( o, done ) {
 | ||
|  | 	var el = $( this ),
 | ||
|  | 		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
 | ||
|  | 
 | ||
|  | 		// defaults:
 | ||
|  | 		mode = $.effects.setMode( el, o.mode || "effect" ),
 | ||
|  | 		hide = mode === "hide",
 | ||
|  | 		show = mode === "show",
 | ||
|  | 		direction = o.direction || "up",
 | ||
|  | 		distance = o.distance,
 | ||
|  | 		times = o.times || 5,
 | ||
|  | 
 | ||
|  | 		// number of internal animations
 | ||
|  | 		anims = times * 2 + ( show || hide ? 1 : 0 ),
 | ||
|  | 		speed = o.duration / anims,
 | ||
|  | 		easing = o.easing,
 | ||
|  | 
 | ||
|  | 		// utility:
 | ||
|  | 		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
 | ||
|  | 		motion = ( direction === "up" || direction === "left" ),
 | ||
|  | 		i,
 | ||
|  | 		upAnim,
 | ||
|  | 		downAnim,
 | ||
|  | 
 | ||
|  | 		// we will need to re-assemble the queue to stack our animations in place
 | ||
|  | 		queue = el.queue(),
 | ||
|  | 		queuelen = queue.length;
 | ||
|  | 
 | ||
|  | 	// Avoid touching opacity to prevent clearType and PNG issues in IE
 | ||
|  | 	if ( show || hide ) {
 | ||
|  | 		props.push( "opacity" );
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	$.effects.save( el, props );
 | ||
|  | 	el.show();
 | ||
|  | 	$.effects.createWrapper( el ); // Create Wrapper
 | ||
|  | 
 | ||
|  | 	// default distance for the BIGGEST bounce is the outer Distance / 3
 | ||
|  | 	if ( !distance ) {
 | ||
|  | 		distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	if ( show ) {
 | ||
|  | 		downAnim = { opacity: 1 };
 | ||
|  | 		downAnim[ ref ] = 0;
 | ||
|  | 
 | ||
|  | 		// if we are showing, force opacity 0 and set the initial position
 | ||
|  | 		// then do the "first" animation
 | ||
|  | 		el.css( "opacity", 0 )
 | ||
|  | 			.css( ref, motion ? -distance * 2 : distance * 2 )
 | ||
|  | 			.animate( downAnim, speed, easing );
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// start at the smallest distance if we are hiding
 | ||
|  | 	if ( hide ) {
 | ||
|  | 		distance = distance / Math.pow( 2, times - 1 );
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	downAnim = {};
 | ||
|  | 	downAnim[ ref ] = 0;
 | ||
|  | 	// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
 | ||
|  | 	for ( i = 0; i < times; i++ ) {
 | ||
|  | 		upAnim = {};
 | ||
|  | 		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
 | ||
|  | 
 | ||
|  | 		el.animate( upAnim, speed, easing )
 | ||
|  | 			.animate( downAnim, speed, easing );
 | ||
|  | 
 | ||
|  | 		distance = hide ? distance * 2 : distance / 2;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// Last Bounce when Hiding
 | ||
|  | 	if ( hide ) {
 | ||
|  | 		upAnim = { opacity: 0 };
 | ||
|  | 		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
 | ||
|  | 
 | ||
|  | 		el.animate( upAnim, speed, easing );
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	el.queue(function() {
 | ||
|  | 		if ( hide ) {
 | ||
|  | 			el.hide();
 | ||
|  | 		}
 | ||
|  | 		$.effects.restore( el, props );
 | ||
|  | 		$.effects.removeWrapper( el );
 | ||
|  | 		done();
 | ||
|  | 	});
 | ||
|  | 
 | ||
|  | 	// inject all the animations we just queued to be first in line (after "inprogress")
 | ||
|  | 	if ( queuelen > 1) {
 | ||
|  | 		queue.splice.apply( queue,
 | ||
|  | 			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
 | ||
|  | 	}
 | ||
|  | 	el.dequeue();
 | ||
|  | 
 | ||
|  | };
 | ||
|  | 
 | ||
|  | })(jQuery);
 | ||
|  | (function( $, undefined ) {
 | ||
|  | 
 | ||
|  | $.effects.effect.clip = function( o, done ) {
 | ||
|  | 	// Create element
 | ||
|  | 	var el = $( this ),
 | ||
|  | 		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
 | ||
|  | 		mode = $.effects.setMode( el, o.mode || "hide" ),
 | ||
|  | 		show = mode === "show",
 | ||
|  | 		direction = o.direction || "vertical",
 | ||
|  | 		vert = direction === "vertical",
 | ||
|  | 		size = vert ? "height" : "width",
 | ||
|  | 		position = vert ? "top" : "left",
 | ||
|  | 		animation = {},
 | ||
|  | 		wrapper, animate, distance;
 | ||
|  | 
 | ||
|  | 	// Save & Show
 | ||
|  | 	$.effects.save( el, props );
 | ||
|  | 	el.show();
 | ||
|  | 
 | ||
|  | 	// Create Wrapper
 | ||
|  | 	wrapper = $.effects.createWrapper( el ).css({
 | ||
|  | 		overflow: "hidden"
 | ||
|  | 	});
 | ||
|  | 	animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
 | ||
|  | 	distance = animate[ size ]();
 | ||
|  | 
 | ||
|  | 	// Shift
 | ||
|  | 	if ( show ) {
 | ||
|  | 		animate.css( size, 0 );
 | ||
|  | 		animate.css( position, distance / 2 );
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// Create Animation Object:
 | ||
|  | 	animation[ size ] = show ? distance : 0;
 | ||
|  | 	animation[ position ] = show ? 0 : distance / 2;
 | ||
|  | 
 | ||
|  | 	// Animate
 | ||
|  | 	animate.animate( animation, {
 | ||
|  | 		queue: false,
 | ||
|  | 		duration: o.duration,
 | ||
|  | 		easing: o.easing,
 | ||
|  | 		complete: function() {
 | ||
|  | 			if ( !show ) {
 | ||
|  | 				el.hide();
 | ||
|  | 			}
 | ||
|  | 			$.effects.restore( el, props );
 | ||
|  | 			$.effects.removeWrapper( el );
 | ||
|  | 			done();
 | ||
|  | 		}
 | ||
|  | 	});
 | ||
|  | 
 | ||
|  | };
 | ||
|  | 
 | ||
|  | })(jQuery);
 | ||
|  | (function( $, undefined ) {
 | ||
|  | 
 | ||
|  | $.effects.effect.drop = function( o, done ) {
 | ||
|  | 
 | ||
|  | 	var el = $( this ),
 | ||
|  | 		props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
 | ||
|  | 		mode = $.effects.setMode( el, o.mode || "hide" ),
 | ||
|  | 		show = mode === "show",
 | ||
|  | 		direction = o.direction || "left",
 | ||
|  | 		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
 | ||
|  | 		motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
 | ||
|  | 		animation = {
 | ||
|  | 			opacity: show ? 1 : 0
 | ||
|  | 		},
 | ||
|  | 		distance;
 | ||
|  | 
 | ||
|  | 	// Adjust
 | ||
|  | 	$.effects.save( el, props );
 | ||
|  | 	el.show();
 | ||
|  | 	$.effects.createWrapper( el );
 | ||
|  | 
 | ||
|  | 	distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
 | ||
|  | 
 | ||
|  | 	if ( show ) {
 | ||
|  | 		el
 | ||
|  | 			.css( "opacity", 0 )
 | ||
|  | 			.css( ref, motion === "pos" ? -distance : distance );
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// Animation
 | ||
|  | 	animation[ ref ] = ( show ?
 | ||
|  | 		( motion === "pos" ? "+=" : "-=" ) :
 | ||
|  | 		( motion === "pos" ? "-=" : "+=" ) ) +
 | ||
|  | 		distance;
 | ||
|  | 
 | ||
|  | 	// Animate
 | ||
|  | 	el.animate( animation, {
 | ||
|  | 		queue: false,
 | ||
|  | 		duration: o.duration,
 | ||
|  | 		easing: o.easing,
 | ||
|  | 		complete: function() {
 | ||
|  | 			if ( mode === "hide" ) {
 | ||
|  | 				el.hide();
 | ||
|  | 			}
 | ||
|  | 			$.effects.restore( el, props );
 | ||
|  | 			$.effects.removeWrapper( el );
 | ||
|  | 			done();
 | ||
|  | 		}
 | ||
|  | 	});
 | ||
|  | };
 | ||
|  | 
 | ||
|  | })(jQuery);
 | ||
|  | (function( $, undefined ) {
 | ||
|  | 
 | ||
|  | $.effects.effect.explode = function( o, done ) {
 | ||
|  | 
 | ||
|  | 	var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
 | ||
|  | 		cells = rows,
 | ||
|  | 		el = $( this ),
 | ||
|  | 		mode = $.effects.setMode( el, o.mode || "hide" ),
 | ||
|  | 		show = mode === "show",
 | ||
|  | 
 | ||
|  | 		// show and then visibility:hidden the element before calculating offset
 | ||
|  | 		offset = el.show().css( "visibility", "hidden" ).offset(),
 | ||
|  | 
 | ||
|  | 		// width and height of a piece
 | ||
|  | 		width = Math.ceil( el.outerWidth() / cells ),
 | ||
|  | 		height = Math.ceil( el.outerHeight() / rows ),
 | ||
|  | 		pieces = [],
 | ||
|  | 
 | ||
|  | 		// loop
 | ||
|  | 		i, j, left, top, mx, my;
 | ||
|  | 
 | ||
|  | 	// children animate complete:
 | ||
|  | 	function childComplete() {
 | ||
|  | 		pieces.push( this );
 | ||
|  | 		if ( pieces.length === rows * cells ) {
 | ||
|  | 			animComplete();
 | ||
|  | 		}
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// clone the element for each row and cell.
 | ||
|  | 	for( i = 0; i < rows ; i++ ) { // ===>
 | ||
|  | 		top = offset.top + i * height;
 | ||
|  | 		my = i - ( rows - 1 ) / 2 ;
 | ||
|  | 
 | ||
|  | 		for( j = 0; j < cells ; j++ ) { // |||
 | ||
|  | 			left = offset.left + j * width;
 | ||
|  | 			mx = j - ( cells - 1 ) / 2 ;
 | ||
|  | 
 | ||
|  | 			// Create a clone of the now hidden main element that will be absolute positioned
 | ||
|  | 			// within a wrapper div off the -left and -top equal to size of our pieces
 | ||
|  | 			el
 | ||
|  | 				.clone()
 | ||
|  | 				.appendTo( "body" )
 | ||
|  | 				.wrap( "<div></div>" )
 | ||
|  | 				.css({
 | ||
|  | 					position: "absolute",
 | ||
|  | 					visibility: "visible",
 | ||
|  | 					left: -j * width,
 | ||
|  | 					top: -i * height
 | ||
|  | 				})
 | ||
|  | 
 | ||
|  | 			// select the wrapper - make it overflow: hidden and absolute positioned based on
 | ||
|  | 			// where the original was located +left and +top equal to the size of pieces
 | ||
|  | 				.parent()
 | ||
|  | 				.addClass( "ui-effects-explode" )
 | ||
|  | 				.css({
 | ||
|  | 					position: "absolute",
 | ||
|  | 					overflow: "hidden",
 | ||
|  | 					width: width,
 | ||
|  | 					height: height,
 | ||
|  | 					left: left + ( show ? mx * width : 0 ),
 | ||
|  | 					top: top + ( show ? my * height : 0 ),
 | ||
|  | 					opacity: show ? 0 : 1
 | ||
|  | 				}).animate({
 | ||
|  | 					left: left + ( show ? 0 : mx * width ),
 | ||
|  | 					top: top + ( show ? 0 : my * height ),
 | ||
|  | 					opacity: show ? 1 : 0
 | ||
|  | 				}, o.duration || 500, o.easing, childComplete );
 | ||
|  | 		}
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	function animComplete() {
 | ||
|  | 		el.css({
 | ||
|  | 			visibility: "visible"
 | ||
|  | 		});
 | ||
|  | 		$( pieces ).remove();
 | ||
|  | 		if ( !show ) {
 | ||
|  | 			el.hide();
 | ||
|  | 		}
 | ||
|  | 		done();
 | ||
|  | 	}
 | ||
|  | };
 | ||
|  | 
 | ||
|  | })(jQuery);
 | ||
|  | (function( $, undefined ) {
 | ||
|  | 
 | ||
|  | $.effects.effect.fade = function( o, done ) {
 | ||
|  | 	var el = $( this ),
 | ||
|  | 		mode = $.effects.setMode( el, o.mode || "toggle" );
 | ||
|  | 
 | ||
|  | 	el.animate({
 | ||
|  | 		opacity: mode
 | ||
|  | 	}, {
 | ||
|  | 		queue: false,
 | ||
|  | 		duration: o.duration,
 | ||
|  | 		easing: o.easing,
 | ||
|  | 		complete: done
 | ||
|  | 	});
 | ||
|  | };
 | ||
|  | 
 | ||
|  | })( jQuery );
 | ||
|  | (function( $, undefined ) {
 | ||
|  | 
 | ||
|  | $.effects.effect.fold = function( o, done ) {
 | ||
|  | 
 | ||
|  | 	// Create element
 | ||
|  | 	var el = $( this ),
 | ||
|  | 		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
 | ||
|  | 		mode = $.effects.setMode( el, o.mode || "hide" ),
 | ||
|  | 		show = mode === "show",
 | ||
|  | 		hide = mode === "hide",
 | ||
|  | 		size = o.size || 15,
 | ||
|  | 		percent = /([0-9]+)%/.exec( size ),
 | ||
|  | 		horizFirst = !!o.horizFirst,
 | ||
|  | 		widthFirst = show !== horizFirst,
 | ||
|  | 		ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
 | ||
|  | 		duration = o.duration / 2,
 | ||
|  | 		wrapper, distance,
 | ||
|  | 		animation1 = {},
 | ||
|  | 		animation2 = {};
 | ||
|  | 
 | ||
|  | 	$.effects.save( el, props );
 | ||
|  | 	el.show();
 | ||
|  | 
 | ||
|  | 	// Create Wrapper
 | ||
|  | 	wrapper = $.effects.createWrapper( el ).css({
 | ||
|  | 		overflow: "hidden"
 | ||
|  | 	});
 | ||
|  | 	distance = widthFirst ?
 | ||
|  | 		[ wrapper.width(), wrapper.height() ] :
 | ||
|  | 		[ wrapper.height(), wrapper.width() ];
 | ||
|  | 
 | ||
|  | 	if ( percent ) {
 | ||
|  | 		size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
 | ||
|  | 	}
 | ||
|  | 	if ( show ) {
 | ||
|  | 		wrapper.css( horizFirst ? {
 | ||
|  | 			height: 0,
 | ||
|  | 			width: size
 | ||
|  | 		} : {
 | ||
|  | 			height: size,
 | ||
|  | 			width: 0
 | ||
|  | 		});
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// Animation
 | ||
|  | 	animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
 | ||
|  | 	animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
 | ||
|  | 
 | ||
|  | 	// Animate
 | ||
|  | 	wrapper
 | ||
|  | 		.animate( animation1, duration, o.easing )
 | ||
|  | 		.animate( animation2, duration, o.easing, function() {
 | ||
|  | 			if ( hide ) {
 | ||
|  | 				el.hide();
 | ||
|  | 			}
 | ||
|  | 			$.effects.restore( el, props );
 | ||
|  | 			$.effects.removeWrapper( el );
 | ||
|  | 			done();
 | ||
|  | 		});
 | ||
|  | 
 | ||
|  | };
 | ||
|  | 
 | ||
|  | })(jQuery);
 | ||
|  | (function( $, undefined ) {
 | ||
|  | 
 | ||
|  | $.effects.effect.highlight = function( o, done ) {
 | ||
|  | 	var elem = $( this ),
 | ||
|  | 		props = [ "backgroundImage", "backgroundColor", "opacity" ],
 | ||
|  | 		mode = $.effects.setMode( elem, o.mode || "show" ),
 | ||
|  | 		animation = {
 | ||
|  | 			backgroundColor: elem.css( "backgroundColor" )
 | ||
|  | 		};
 | ||
|  | 
 | ||
|  | 	if (mode === "hide") {
 | ||
|  | 		animation.opacity = 0;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	$.effects.save( elem, props );
 | ||
|  | 
 | ||
|  | 	elem
 | ||
|  | 		.show()
 | ||
|  | 		.css({
 | ||
|  | 			backgroundImage: "none",
 | ||
|  | 			backgroundColor: o.color || "#ffff99"
 | ||
|  | 		})
 | ||
|  | 		.animate( animation, {
 | ||
|  | 			queue: false,
 | ||
|  | 			duration: o.duration,
 | ||
|  | 			easing: o.easing,
 | ||
|  | 			complete: function() {
 | ||
|  | 				if ( mode === "hide" ) {
 | ||
|  | 					elem.hide();
 | ||
|  | 				}
 | ||
|  | 				$.effects.restore( elem, props );
 | ||
|  | 				done();
 | ||
|  | 			}
 | ||
|  | 		});
 | ||
|  | };
 | ||
|  | 
 | ||
|  | })(jQuery);
 | ||
|  | (function( $, undefined ) {
 | ||
|  | 
 | ||
|  | $.effects.effect.pulsate = function( o, done ) {
 | ||
|  | 	var elem = $( this ),
 | ||
|  | 		mode = $.effects.setMode( elem, o.mode || "show" ),
 | ||
|  | 		show = mode === "show",
 | ||
|  | 		hide = mode === "hide",
 | ||
|  | 		showhide = ( show || mode === "hide" ),
 | ||
|  | 
 | ||
|  | 		// showing or hiding leaves of the "last" animation
 | ||
|  | 		anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
 | ||
|  | 		duration = o.duration / anims,
 | ||
|  | 		animateTo = 0,
 | ||
|  | 		queue = elem.queue(),
 | ||
|  | 		queuelen = queue.length,
 | ||
|  | 		i;
 | ||
|  | 
 | ||
|  | 	if ( show || !elem.is(":visible")) {
 | ||
|  | 		elem.css( "opacity", 0 ).show();
 | ||
|  | 		animateTo = 1;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// anims - 1 opacity "toggles"
 | ||
|  | 	for ( i = 1; i < anims; i++ ) {
 | ||
|  | 		elem.animate({
 | ||
|  | 			opacity: animateTo
 | ||
|  | 		}, duration, o.easing );
 | ||
|  | 		animateTo = 1 - animateTo;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	elem.animate({
 | ||
|  | 		opacity: animateTo
 | ||
|  | 	}, duration, o.easing);
 | ||
|  | 
 | ||
|  | 	elem.queue(function() {
 | ||
|  | 		if ( hide ) {
 | ||
|  | 			elem.hide();
 | ||
|  | 		}
 | ||
|  | 		done();
 | ||
|  | 	});
 | ||
|  | 
 | ||
|  | 	// We just queued up "anims" animations, we need to put them next in the queue
 | ||
|  | 	if ( queuelen > 1 ) {
 | ||
|  | 		queue.splice.apply( queue,
 | ||
|  | 			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
 | ||
|  | 	}
 | ||
|  | 	elem.dequeue();
 | ||
|  | };
 | ||
|  | 
 | ||
|  | })(jQuery);
 | ||
|  | (function( $, undefined ) {
 | ||
|  | 
 | ||
|  | $.effects.effect.puff = function( o, done ) {
 | ||
|  | 	var elem = $( this ),
 | ||
|  | 		mode = $.effects.setMode( elem, o.mode || "hide" ),
 | ||
|  | 		hide = mode === "hide",
 | ||
|  | 		percent = parseInt( o.percent, 10 ) || 150,
 | ||
|  | 		factor = percent / 100,
 | ||
|  | 		original = {
 | ||
|  | 			height: elem.height(),
 | ||
|  | 			width: elem.width(),
 | ||
|  | 			outerHeight: elem.outerHeight(),
 | ||
|  | 			outerWidth: elem.outerWidth()
 | ||
|  | 		};
 | ||
|  | 
 | ||
|  | 	$.extend( o, {
 | ||
|  | 		effect: "scale",
 | ||
|  | 		queue: false,
 | ||
|  | 		fade: true,
 | ||
|  | 		mode: mode,
 | ||
|  | 		complete: done,
 | ||
|  | 		percent: hide ? percent : 100,
 | ||
|  | 		from: hide ?
 | ||
|  | 			original :
 | ||
|  | 			{
 | ||
|  | 				height: original.height * factor,
 | ||
|  | 				width: original.width * factor,
 | ||
|  | 				outerHeight: original.outerHeight * factor,
 | ||
|  | 				outerWidth: original.outerWidth * factor
 | ||
|  | 			}
 | ||
|  | 	});
 | ||
|  | 
 | ||
|  | 	elem.effect( o );
 | ||
|  | };
 | ||
|  | 
 | ||
|  | $.effects.effect.scale = function( o, done ) {
 | ||
|  | 
 | ||
|  | 	// Create element
 | ||
|  | 	var el = $( this ),
 | ||
|  | 		options = $.extend( true, {}, o ),
 | ||
|  | 		mode = $.effects.setMode( el, o.mode || "effect" ),
 | ||
|  | 		percent = parseInt( o.percent, 10 ) ||
 | ||
|  | 			( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
 | ||
|  | 		direction = o.direction || "both",
 | ||
|  | 		origin = o.origin,
 | ||
|  | 		original = {
 | ||
|  | 			height: el.height(),
 | ||
|  | 			width: el.width(),
 | ||
|  | 			outerHeight: el.outerHeight(),
 | ||
|  | 			outerWidth: el.outerWidth()
 | ||
|  | 		},
 | ||
|  | 		factor = {
 | ||
|  | 			y: direction !== "horizontal" ? (percent / 100) : 1,
 | ||
|  | 			x: direction !== "vertical" ? (percent / 100) : 1
 | ||
|  | 		};
 | ||
|  | 
 | ||
|  | 	// We are going to pass this effect to the size effect:
 | ||
|  | 	options.effect = "size";
 | ||
|  | 	options.queue = false;
 | ||
|  | 	options.complete = done;
 | ||
|  | 
 | ||
|  | 	// Set default origin and restore for show/hide
 | ||
|  | 	if ( mode !== "effect" ) {
 | ||
|  | 		options.origin = origin || ["middle","center"];
 | ||
|  | 		options.restore = true;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	options.from = o.from || ( mode === "show" ? {
 | ||
|  | 		height: 0,
 | ||
|  | 		width: 0,
 | ||
|  | 		outerHeight: 0,
 | ||
|  | 		outerWidth: 0
 | ||
|  | 	} : original );
 | ||
|  | 	options.to = {
 | ||
|  | 		height: original.height * factor.y,
 | ||
|  | 		width: original.width * factor.x,
 | ||
|  | 		outerHeight: original.outerHeight * factor.y,
 | ||
|  | 		outerWidth: original.outerWidth * factor.x
 | ||
|  | 	};
 | ||
|  | 
 | ||
|  | 	// Fade option to support puff
 | ||
|  | 	if ( options.fade ) {
 | ||
|  | 		if ( mode === "show" ) {
 | ||
|  | 			options.from.opacity = 0;
 | ||
|  | 			options.to.opacity = 1;
 | ||
|  | 		}
 | ||
|  | 		if ( mode === "hide" ) {
 | ||
|  | 			options.from.opacity = 1;
 | ||
|  | 			options.to.opacity = 0;
 | ||
|  | 		}
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// Animate
 | ||
|  | 	el.effect( options );
 | ||
|  | 
 | ||
|  | };
 | ||
|  | 
 | ||
|  | $.effects.effect.size = function( o, done ) {
 | ||
|  | 
 | ||
|  | 	// Create element
 | ||
|  | 	var original, baseline, factor,
 | ||
|  | 		el = $( this ),
 | ||
|  | 		props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
 | ||
|  | 
 | ||
|  | 		// Always restore
 | ||
|  | 		props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
 | ||
|  | 
 | ||
|  | 		// Copy for children
 | ||
|  | 		props2 = [ "width", "height", "overflow" ],
 | ||
|  | 		cProps = [ "fontSize" ],
 | ||
|  | 		vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
 | ||
|  | 		hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
 | ||
|  | 
 | ||
|  | 		// Set options
 | ||
|  | 		mode = $.effects.setMode( el, o.mode || "effect" ),
 | ||
|  | 		restore = o.restore || mode !== "effect",
 | ||
|  | 		scale = o.scale || "both",
 | ||
|  | 		origin = o.origin || [ "middle", "center" ],
 | ||
|  | 		position = el.css( "position" ),
 | ||
|  | 		props = restore ? props0 : props1,
 | ||
|  | 		zero = {
 | ||
|  | 			height: 0,
 | ||
|  | 			width: 0,
 | ||
|  | 			outerHeight: 0,
 | ||
|  | 			outerWidth: 0
 | ||
|  | 		};
 | ||
|  | 
 | ||
|  | 	if ( mode === "show" ) {
 | ||
|  | 		el.show();
 | ||
|  | 	}
 | ||
|  | 	original = {
 | ||
|  | 		height: el.height(),
 | ||
|  | 		width: el.width(),
 | ||
|  | 		outerHeight: el.outerHeight(),
 | ||
|  | 		outerWidth: el.outerWidth()
 | ||
|  | 	};
 | ||
|  | 
 | ||
|  | 	if ( o.mode === "toggle" && mode === "show" ) {
 | ||
|  | 		el.from = o.to || zero;
 | ||
|  | 		el.to = o.from || original;
 | ||
|  | 	} else {
 | ||
|  | 		el.from = o.from || ( mode === "show" ? zero : original );
 | ||
|  | 		el.to = o.to || ( mode === "hide" ? zero : original );
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// Set scaling factor
 | ||
|  | 	factor = {
 | ||
|  | 		from: {
 | ||
|  | 			y: el.from.height / original.height,
 | ||
|  | 			x: el.from.width / original.width
 | ||
|  | 		},
 | ||
|  | 		to: {
 | ||
|  | 			y: el.to.height / original.height,
 | ||
|  | 			x: el.to.width / original.width
 | ||
|  | 		}
 | ||
|  | 	};
 | ||
|  | 
 | ||
|  | 	// Scale the css box
 | ||
|  | 	if ( scale === "box" || scale === "both" ) {
 | ||
|  | 
 | ||
|  | 		// Vertical props scaling
 | ||
|  | 		if ( factor.from.y !== factor.to.y ) {
 | ||
|  | 			props = props.concat( vProps );
 | ||
|  | 			el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
 | ||
|  | 			el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
 | ||
|  | 		}
 | ||
|  | 
 | ||
|  | 		// Horizontal props scaling
 | ||
|  | 		if ( factor.from.x !== factor.to.x ) {
 | ||
|  | 			props = props.concat( hProps );
 | ||
|  | 			el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
 | ||
|  | 			el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
 | ||
|  | 		}
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// Scale the content
 | ||
|  | 	if ( scale === "content" || scale === "both" ) {
 | ||
|  | 
 | ||
|  | 		// Vertical props scaling
 | ||
|  | 		if ( factor.from.y !== factor.to.y ) {
 | ||
|  | 			props = props.concat( cProps ).concat( props2 );
 | ||
|  | 			el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
 | ||
|  | 			el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
 | ||
|  | 		}
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	$.effects.save( el, props );
 | ||
|  | 	el.show();
 | ||
|  | 	$.effects.createWrapper( el );
 | ||
|  | 	el.css( "overflow", "hidden" ).css( el.from );
 | ||
|  | 
 | ||
|  | 	// Adjust
 | ||
|  | 	if (origin) { // Calculate baseline shifts
 | ||
|  | 		baseline = $.effects.getBaseline( origin, original );
 | ||
|  | 		el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
 | ||
|  | 		el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
 | ||
|  | 		el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
 | ||
|  | 		el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
 | ||
|  | 	}
 | ||
|  | 	el.css( el.from ); // set top & left
 | ||
|  | 
 | ||
|  | 	// Animate
 | ||
|  | 	if ( scale === "content" || scale === "both" ) { // Scale the children
 | ||
|  | 
 | ||
|  | 		// Add margins/font-size
 | ||
|  | 		vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
 | ||
|  | 		hProps = hProps.concat([ "marginLeft", "marginRight" ]);
 | ||
|  | 		props2 = props0.concat(vProps).concat(hProps);
 | ||
|  | 
 | ||
|  | 		el.find( "*[width]" ).each( function(){
 | ||
|  | 			var child = $( this ),
 | ||
|  | 				c_original = {
 | ||
|  | 					height: child.height(),
 | ||
|  | 					width: child.width(),
 | ||
|  | 					outerHeight: child.outerHeight(),
 | ||
|  | 					outerWidth: child.outerWidth()
 | ||
|  | 				};
 | ||
|  | 			if (restore) {
 | ||
|  | 				$.effects.save(child, props2);
 | ||
|  | 			}
 | ||
|  | 
 | ||
|  | 			child.from = {
 | ||
|  | 				height: c_original.height * factor.from.y,
 | ||
|  | 				width: c_original.width * factor.from.x,
 | ||
|  | 				outerHeight: c_original.outerHeight * factor.from.y,
 | ||
|  | 				outerWidth: c_original.outerWidth * factor.from.x
 | ||
|  | 			};
 | ||
|  | 			child.to = {
 | ||
|  | 				height: c_original.height * factor.to.y,
 | ||
|  | 				width: c_original.width * factor.to.x,
 | ||
|  | 				outerHeight: c_original.height * factor.to.y,
 | ||
|  | 				outerWidth: c_original.width * factor.to.x
 | ||
|  | 			};
 | ||
|  | 
 | ||
|  | 			// Vertical props scaling
 | ||
|  | 			if ( factor.from.y !== factor.to.y ) {
 | ||
|  | 				child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
 | ||
|  | 				child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
 | ||
|  | 			}
 | ||
|  | 
 | ||
|  | 			// Horizontal props scaling
 | ||
|  | 			if ( factor.from.x !== factor.to.x ) {
 | ||
|  | 				child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
 | ||
|  | 				child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
 | ||
|  | 			}
 | ||
|  | 
 | ||
|  | 			// Animate children
 | ||
|  | 			child.css( child.from );
 | ||
|  | 			child.animate( child.to, o.duration, o.easing, function() {
 | ||
|  | 
 | ||
|  | 				// Restore children
 | ||
|  | 				if ( restore ) {
 | ||
|  | 					$.effects.restore( child, props2 );
 | ||
|  | 				}
 | ||
|  | 			});
 | ||
|  | 		});
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// Animate
 | ||
|  | 	el.animate( el.to, {
 | ||
|  | 		queue: false,
 | ||
|  | 		duration: o.duration,
 | ||
|  | 		easing: o.easing,
 | ||
|  | 		complete: function() {
 | ||
|  | 			if ( el.to.opacity === 0 ) {
 | ||
|  | 				el.css( "opacity", el.from.opacity );
 | ||
|  | 			}
 | ||
|  | 			if( mode === "hide" ) {
 | ||
|  | 				el.hide();
 | ||
|  | 			}
 | ||
|  | 			$.effects.restore( el, props );
 | ||
|  | 			if ( !restore ) {
 | ||
|  | 
 | ||
|  | 				// we need to calculate our new positioning based on the scaling
 | ||
|  | 				if ( position === "static" ) {
 | ||
|  | 					el.css({
 | ||
|  | 						position: "relative",
 | ||
|  | 						top: el.to.top,
 | ||
|  | 						left: el.to.left
 | ||
|  | 					});
 | ||
|  | 				} else {
 | ||
|  | 					$.each([ "top", "left" ], function( idx, pos ) {
 | ||
|  | 						el.css( pos, function( _, str ) {
 | ||
|  | 							var val = parseInt( str, 10 ),
 | ||
|  | 								toRef = idx ? el.to.left : el.to.top;
 | ||
|  | 
 | ||
|  | 							// if original was "auto", recalculate the new value from wrapper
 | ||
|  | 							if ( str === "auto" ) {
 | ||
|  | 								return toRef + "px";
 | ||
|  | 							}
 | ||
|  | 
 | ||
|  | 							return val + toRef + "px";
 | ||
|  | 						});
 | ||
|  | 					});
 | ||
|  | 				}
 | ||
|  | 			}
 | ||
|  | 
 | ||
|  | 			$.effects.removeWrapper( el );
 | ||
|  | 			done();
 | ||
|  | 		}
 | ||
|  | 	});
 | ||
|  | 
 | ||
|  | };
 | ||
|  | 
 | ||
|  | })(jQuery);
 | ||
|  | (function( $, undefined ) {
 | ||
|  | 
 | ||
|  | $.effects.effect.shake = function( o, done ) {
 | ||
|  | 
 | ||
|  | 	var el = $( this ),
 | ||
|  | 		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
 | ||
|  | 		mode = $.effects.setMode( el, o.mode || "effect" ),
 | ||
|  | 		direction = o.direction || "left",
 | ||
|  | 		distance = o.distance || 20,
 | ||
|  | 		times = o.times || 3,
 | ||
|  | 		anims = times * 2 + 1,
 | ||
|  | 		speed = Math.round(o.duration/anims),
 | ||
|  | 		ref = (direction === "up" || direction === "down") ? "top" : "left",
 | ||
|  | 		positiveMotion = (direction === "up" || direction === "left"),
 | ||
|  | 		animation = {},
 | ||
|  | 		animation1 = {},
 | ||
|  | 		animation2 = {},
 | ||
|  | 		i,
 | ||
|  | 
 | ||
|  | 		// we will need to re-assemble the queue to stack our animations in place
 | ||
|  | 		queue = el.queue(),
 | ||
|  | 		queuelen = queue.length;
 | ||
|  | 
 | ||
|  | 	$.effects.save( el, props );
 | ||
|  | 	el.show();
 | ||
|  | 	$.effects.createWrapper( el );
 | ||
|  | 
 | ||
|  | 	// Animation
 | ||
|  | 	animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
 | ||
|  | 	animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
 | ||
|  | 	animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
 | ||
|  | 
 | ||
|  | 	// Animate
 | ||
|  | 	el.animate( animation, speed, o.easing );
 | ||
|  | 
 | ||
|  | 	// Shakes
 | ||
|  | 	for ( i = 1; i < times; i++ ) {
 | ||
|  | 		el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
 | ||
|  | 	}
 | ||
|  | 	el
 | ||
|  | 		.animate( animation1, speed, o.easing )
 | ||
|  | 		.animate( animation, speed / 2, o.easing )
 | ||
|  | 		.queue(function() {
 | ||
|  | 			if ( mode === "hide" ) {
 | ||
|  | 				el.hide();
 | ||
|  | 			}
 | ||
|  | 			$.effects.restore( el, props );
 | ||
|  | 			$.effects.removeWrapper( el );
 | ||
|  | 			done();
 | ||
|  | 		});
 | ||
|  | 
 | ||
|  | 	// inject all the animations we just queued to be first in line (after "inprogress")
 | ||
|  | 	if ( queuelen > 1) {
 | ||
|  | 		queue.splice.apply( queue,
 | ||
|  | 			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
 | ||
|  | 	}
 | ||
|  | 	el.dequeue();
 | ||
|  | 
 | ||
|  | };
 | ||
|  | 
 | ||
|  | })(jQuery);
 | ||
|  | (function( $, undefined ) {
 | ||
|  | 
 | ||
|  | $.effects.effect.slide = function( o, done ) {
 | ||
|  | 
 | ||
|  | 	// Create element
 | ||
|  | 	var el = $( this ),
 | ||
|  | 		props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
 | ||
|  | 		mode = $.effects.setMode( el, o.mode || "show" ),
 | ||
|  | 		show = mode === "show",
 | ||
|  | 		direction = o.direction || "left",
 | ||
|  | 		ref = (direction === "up" || direction === "down") ? "top" : "left",
 | ||
|  | 		positiveMotion = (direction === "up" || direction === "left"),
 | ||
|  | 		distance,
 | ||
|  | 		animation = {};
 | ||
|  | 
 | ||
|  | 	// Adjust
 | ||
|  | 	$.effects.save( el, props );
 | ||
|  | 	el.show();
 | ||
|  | 	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
 | ||
|  | 
 | ||
|  | 	$.effects.createWrapper( el ).css({
 | ||
|  | 		overflow: "hidden"
 | ||
|  | 	});
 | ||
|  | 
 | ||
|  | 	if ( show ) {
 | ||
|  | 		el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	// Animation
 | ||
|  | 	animation[ ref ] = ( show ?
 | ||
|  | 		( positiveMotion ? "+=" : "-=") :
 | ||
|  | 		( positiveMotion ? "-=" : "+=")) +
 | ||
|  | 		distance;
 | ||
|  | 
 | ||
|  | 	// Animate
 | ||
|  | 	el.animate( animation, {
 | ||
|  | 		queue: false,
 | ||
|  | 		duration: o.duration,
 | ||
|  | 		easing: o.easing,
 | ||
|  | 		complete: function() {
 | ||
|  | 			if ( mode === "hide" ) {
 | ||
|  | 				el.hide();
 | ||
|  | 			}
 | ||
|  | 			$.effects.restore( el, props );
 | ||
|  | 			$.effects.removeWrapper( el );
 | ||
|  | 			done();
 | ||
|  | 		}
 | ||
|  | 	});
 | ||
|  | };
 | ||
|  | 
 | ||
|  | })(jQuery);
 | ||
|  | (function( $, undefined ) {
 | ||
|  | 
 | ||
|  | $.effects.effect.transfer = function( o, done ) {
 | ||
|  | 	var elem = $( this ),
 | ||
|  | 		target = $( o.to ),
 | ||
|  | 		targetFixed = target.css( "position" ) === "fixed",
 | ||
|  | 		body = $("body"),
 | ||
|  | 		fixTop = targetFixed ? body.scrollTop() : 0,
 | ||
|  | 		fixLeft = targetFixed ? body.scrollLeft() : 0,
 | ||
|  | 		endPosition = target.offset(),
 | ||
|  | 		animation = {
 | ||
|  | 			top: endPosition.top - fixTop ,
 | ||
|  | 			left: endPosition.left - fixLeft ,
 | ||
|  | 			height: target.innerHeight(),
 | ||
|  | 			width: target.innerWidth()
 | ||
|  | 		},
 | ||
|  | 		startPosition = elem.offset(),
 | ||
|  | 		transfer = $( "<div class='ui-effects-transfer'></div>" )
 | ||
|  | 			.appendTo( document.body )
 | ||
|  | 			.addClass( o.className )
 | ||
|  | 			.css({
 | ||
|  | 				top: startPosition.top - fixTop ,
 | ||
|  | 				left: startPosition.left - fixLeft ,
 | ||
|  | 				height: elem.innerHeight(),
 | ||
|  | 				width: elem.innerWidth(),
 | ||
|  | 				position: targetFixed ? "fixed" : "absolute"
 | ||
|  | 			})
 | ||
|  | 			.animate( animation, o.duration, o.easing, function() {
 | ||
|  | 				transfer.remove();
 | ||
|  | 				done();
 | ||
|  | 			});
 | ||
|  | };
 | ||
|  | 
 | ||
|  | })(jQuery);
 |