integration/back-office/lib/jquery-ui/ui/jquery.ui.effect-scale.js
changeset 2 78f71aa0a477
parent 1 b95aebb070b5
child 3 54f80d24f469
child 6 547b3ddedf7f
equal deleted inserted replaced
1:b95aebb070b5 2:78f71aa0a477
     1 /*!
       
     2  * jQuery UI Effects Scale 1.10.3
       
     3  * http://jqueryui.com
       
     4  *
       
     5  * Copyright 2013 jQuery Foundation and other contributors
       
     6  * Released under the MIT license.
       
     7  * http://jquery.org/license
       
     8  *
       
     9  * http://api.jqueryui.com/scale-effect/
       
    10  *
       
    11  * Depends:
       
    12  *	jquery.ui.effect.js
       
    13  */
       
    14 (function( $, undefined ) {
       
    15 
       
    16 $.effects.effect.puff = function( o, done ) {
       
    17 	var elem = $( this ),
       
    18 		mode = $.effects.setMode( elem, o.mode || "hide" ),
       
    19 		hide = mode === "hide",
       
    20 		percent = parseInt( o.percent, 10 ) || 150,
       
    21 		factor = percent / 100,
       
    22 		original = {
       
    23 			height: elem.height(),
       
    24 			width: elem.width(),
       
    25 			outerHeight: elem.outerHeight(),
       
    26 			outerWidth: elem.outerWidth()
       
    27 		};
       
    28 
       
    29 	$.extend( o, {
       
    30 		effect: "scale",
       
    31 		queue: false,
       
    32 		fade: true,
       
    33 		mode: mode,
       
    34 		complete: done,
       
    35 		percent: hide ? percent : 100,
       
    36 		from: hide ?
       
    37 			original :
       
    38 			{
       
    39 				height: original.height * factor,
       
    40 				width: original.width * factor,
       
    41 				outerHeight: original.outerHeight * factor,
       
    42 				outerWidth: original.outerWidth * factor
       
    43 			}
       
    44 	});
       
    45 
       
    46 	elem.effect( o );
       
    47 };
       
    48 
       
    49 $.effects.effect.scale = function( o, done ) {
       
    50 
       
    51 	// Create element
       
    52 	var el = $( this ),
       
    53 		options = $.extend( true, {}, o ),
       
    54 		mode = $.effects.setMode( el, o.mode || "effect" ),
       
    55 		percent = parseInt( o.percent, 10 ) ||
       
    56 			( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
       
    57 		direction = o.direction || "both",
       
    58 		origin = o.origin,
       
    59 		original = {
       
    60 			height: el.height(),
       
    61 			width: el.width(),
       
    62 			outerHeight: el.outerHeight(),
       
    63 			outerWidth: el.outerWidth()
       
    64 		},
       
    65 		factor = {
       
    66 			y: direction !== "horizontal" ? (percent / 100) : 1,
       
    67 			x: direction !== "vertical" ? (percent / 100) : 1
       
    68 		};
       
    69 
       
    70 	// We are going to pass this effect to the size effect:
       
    71 	options.effect = "size";
       
    72 	options.queue = false;
       
    73 	options.complete = done;
       
    74 
       
    75 	// Set default origin and restore for show/hide
       
    76 	if ( mode !== "effect" ) {
       
    77 		options.origin = origin || ["middle","center"];
       
    78 		options.restore = true;
       
    79 	}
       
    80 
       
    81 	options.from = o.from || ( mode === "show" ? {
       
    82 		height: 0,
       
    83 		width: 0,
       
    84 		outerHeight: 0,
       
    85 		outerWidth: 0
       
    86 	} : original );
       
    87 	options.to = {
       
    88 		height: original.height * factor.y,
       
    89 		width: original.width * factor.x,
       
    90 		outerHeight: original.outerHeight * factor.y,
       
    91 		outerWidth: original.outerWidth * factor.x
       
    92 	};
       
    93 
       
    94 	// Fade option to support puff
       
    95 	if ( options.fade ) {
       
    96 		if ( mode === "show" ) {
       
    97 			options.from.opacity = 0;
       
    98 			options.to.opacity = 1;
       
    99 		}
       
   100 		if ( mode === "hide" ) {
       
   101 			options.from.opacity = 1;
       
   102 			options.to.opacity = 0;
       
   103 		}
       
   104 	}
       
   105 
       
   106 	// Animate
       
   107 	el.effect( options );
       
   108 
       
   109 };
       
   110 
       
   111 $.effects.effect.size = function( o, done ) {
       
   112 
       
   113 	// Create element
       
   114 	var original, baseline, factor,
       
   115 		el = $( this ),
       
   116 		props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
       
   117 
       
   118 		// Always restore
       
   119 		props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
       
   120 
       
   121 		// Copy for children
       
   122 		props2 = [ "width", "height", "overflow" ],
       
   123 		cProps = [ "fontSize" ],
       
   124 		vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
       
   125 		hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
       
   126 
       
   127 		// Set options
       
   128 		mode = $.effects.setMode( el, o.mode || "effect" ),
       
   129 		restore = o.restore || mode !== "effect",
       
   130 		scale = o.scale || "both",
       
   131 		origin = o.origin || [ "middle", "center" ],
       
   132 		position = el.css( "position" ),
       
   133 		props = restore ? props0 : props1,
       
   134 		zero = {
       
   135 			height: 0,
       
   136 			width: 0,
       
   137 			outerHeight: 0,
       
   138 			outerWidth: 0
       
   139 		};
       
   140 
       
   141 	if ( mode === "show" ) {
       
   142 		el.show();
       
   143 	}
       
   144 	original = {
       
   145 		height: el.height(),
       
   146 		width: el.width(),
       
   147 		outerHeight: el.outerHeight(),
       
   148 		outerWidth: el.outerWidth()
       
   149 	};
       
   150 
       
   151 	if ( o.mode === "toggle" && mode === "show" ) {
       
   152 		el.from = o.to || zero;
       
   153 		el.to = o.from || original;
       
   154 	} else {
       
   155 		el.from = o.from || ( mode === "show" ? zero : original );
       
   156 		el.to = o.to || ( mode === "hide" ? zero : original );
       
   157 	}
       
   158 
       
   159 	// Set scaling factor
       
   160 	factor = {
       
   161 		from: {
       
   162 			y: el.from.height / original.height,
       
   163 			x: el.from.width / original.width
       
   164 		},
       
   165 		to: {
       
   166 			y: el.to.height / original.height,
       
   167 			x: el.to.width / original.width
       
   168 		}
       
   169 	};
       
   170 
       
   171 	// Scale the css box
       
   172 	if ( scale === "box" || scale === "both" ) {
       
   173 
       
   174 		// Vertical props scaling
       
   175 		if ( factor.from.y !== factor.to.y ) {
       
   176 			props = props.concat( vProps );
       
   177 			el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
       
   178 			el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
       
   179 		}
       
   180 
       
   181 		// Horizontal props scaling
       
   182 		if ( factor.from.x !== factor.to.x ) {
       
   183 			props = props.concat( hProps );
       
   184 			el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
       
   185 			el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
       
   186 		}
       
   187 	}
       
   188 
       
   189 	// Scale the content
       
   190 	if ( scale === "content" || scale === "both" ) {
       
   191 
       
   192 		// Vertical props scaling
       
   193 		if ( factor.from.y !== factor.to.y ) {
       
   194 			props = props.concat( cProps ).concat( props2 );
       
   195 			el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
       
   196 			el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
       
   197 		}
       
   198 	}
       
   199 
       
   200 	$.effects.save( el, props );
       
   201 	el.show();
       
   202 	$.effects.createWrapper( el );
       
   203 	el.css( "overflow", "hidden" ).css( el.from );
       
   204 
       
   205 	// Adjust
       
   206 	if (origin) { // Calculate baseline shifts
       
   207 		baseline = $.effects.getBaseline( origin, original );
       
   208 		el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
       
   209 		el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
       
   210 		el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
       
   211 		el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
       
   212 	}
       
   213 	el.css( el.from ); // set top & left
       
   214 
       
   215 	// Animate
       
   216 	if ( scale === "content" || scale === "both" ) { // Scale the children
       
   217 
       
   218 		// Add margins/font-size
       
   219 		vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
       
   220 		hProps = hProps.concat([ "marginLeft", "marginRight" ]);
       
   221 		props2 = props0.concat(vProps).concat(hProps);
       
   222 
       
   223 		el.find( "*[width]" ).each( function(){
       
   224 			var child = $( this ),
       
   225 				c_original = {
       
   226 					height: child.height(),
       
   227 					width: child.width(),
       
   228 					outerHeight: child.outerHeight(),
       
   229 					outerWidth: child.outerWidth()
       
   230 				};
       
   231 			if (restore) {
       
   232 				$.effects.save(child, props2);
       
   233 			}
       
   234 
       
   235 			child.from = {
       
   236 				height: c_original.height * factor.from.y,
       
   237 				width: c_original.width * factor.from.x,
       
   238 				outerHeight: c_original.outerHeight * factor.from.y,
       
   239 				outerWidth: c_original.outerWidth * factor.from.x
       
   240 			};
       
   241 			child.to = {
       
   242 				height: c_original.height * factor.to.y,
       
   243 				width: c_original.width * factor.to.x,
       
   244 				outerHeight: c_original.height * factor.to.y,
       
   245 				outerWidth: c_original.width * factor.to.x
       
   246 			};
       
   247 
       
   248 			// Vertical props scaling
       
   249 			if ( factor.from.y !== factor.to.y ) {
       
   250 				child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
       
   251 				child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
       
   252 			}
       
   253 
       
   254 			// Horizontal props scaling
       
   255 			if ( factor.from.x !== factor.to.x ) {
       
   256 				child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
       
   257 				child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
       
   258 			}
       
   259 
       
   260 			// Animate children
       
   261 			child.css( child.from );
       
   262 			child.animate( child.to, o.duration, o.easing, function() {
       
   263 
       
   264 				// Restore children
       
   265 				if ( restore ) {
       
   266 					$.effects.restore( child, props2 );
       
   267 				}
       
   268 			});
       
   269 		});
       
   270 	}
       
   271 
       
   272 	// Animate
       
   273 	el.animate( el.to, {
       
   274 		queue: false,
       
   275 		duration: o.duration,
       
   276 		easing: o.easing,
       
   277 		complete: function() {
       
   278 			if ( el.to.opacity === 0 ) {
       
   279 				el.css( "opacity", el.from.opacity );
       
   280 			}
       
   281 			if( mode === "hide" ) {
       
   282 				el.hide();
       
   283 			}
       
   284 			$.effects.restore( el, props );
       
   285 			if ( !restore ) {
       
   286 
       
   287 				// we need to calculate our new positioning based on the scaling
       
   288 				if ( position === "static" ) {
       
   289 					el.css({
       
   290 						position: "relative",
       
   291 						top: el.to.top,
       
   292 						left: el.to.left
       
   293 					});
       
   294 				} else {
       
   295 					$.each([ "top", "left" ], function( idx, pos ) {
       
   296 						el.css( pos, function( _, str ) {
       
   297 							var val = parseInt( str, 10 ),
       
   298 								toRef = idx ? el.to.left : el.to.top;
       
   299 
       
   300 							// if original was "auto", recalculate the new value from wrapper
       
   301 							if ( str === "auto" ) {
       
   302 								return toRef + "px";
       
   303 							}
       
   304 
       
   305 							return val + toRef + "px";
       
   306 						});
       
   307 					});
       
   308 				}
       
   309 			}
       
   310 
       
   311 			$.effects.removeWrapper( el );
       
   312 			done();
       
   313 		}
       
   314 	});
       
   315 
       
   316 };
       
   317 
       
   318 })(jQuery);