client/player/js/ui/jquery.effects.scale.js
changeset 51 2d6866072851
child 57 3a3c15c462f8
equal deleted inserted replaced
50:1ecfe4720da7 51:2d6866072851
       
     1 /*
       
     2  * jQuery UI Effects Scale 1.8.1
       
     3  *
       
     4  * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
       
     5  * Dual licensed under the MIT (MIT-LICENSE.txt)
       
     6  * and GPL (GPL-LICENSE.txt) licenses.
       
     7  *
       
     8  * http://docs.jquery.com/UI/Effects/Scale
       
     9  *
       
    10  * Depends:
       
    11  *	jquery.effects.core.js
       
    12  */
       
    13 (function($) {
       
    14 
       
    15 $.effects.puff = function(o) {
       
    16 	return this.queue(function() {
       
    17 		var elem = $(this),
       
    18 			mode = $.effects.setMode(elem, o.options.mode || 'hide'),
       
    19 			percent = parseInt(o.options.percent, 10) || 150,
       
    20 			factor = percent / 100,
       
    21 			original = { height: elem.height(), width: elem.width() };
       
    22 
       
    23 		$.extend(o.options, {
       
    24 			fade: true,
       
    25 			mode: mode,
       
    26 			percent: mode == 'hide' ? percent : 100,
       
    27 			from: mode == 'hide'
       
    28 				? original
       
    29 				: {
       
    30 					height: original.height * factor,
       
    31 					width: original.width * factor
       
    32 				}
       
    33 		});
       
    34 
       
    35 		elem.effect('scale', o.options, o.duration, o.callback);
       
    36 		elem.dequeue();
       
    37 	});
       
    38 };
       
    39 
       
    40 $.effects.scale = function(o) {
       
    41 
       
    42 	return this.queue(function() {
       
    43 
       
    44 		// Create element
       
    45 		var el = $(this);
       
    46 
       
    47 		// Set options
       
    48 		var options = $.extend(true, {}, o.options);
       
    49 		var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
       
    50 		var percent = parseInt(o.options.percent,10) || (parseInt(o.options.percent,10) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent
       
    51 		var direction = o.options.direction || 'both'; // Set default axis
       
    52 		var origin = o.options.origin; // The origin of the scaling
       
    53 		if (mode != 'effect') { // Set default origin and restore for show/hide
       
    54 			options.origin = origin || ['middle','center'];
       
    55 			options.restore = true;
       
    56 		}
       
    57 		var original = {height: el.height(), width: el.width()}; // Save original
       
    58 		el.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state
       
    59 
       
    60 		// Adjust
       
    61 		var factor = { // Set scaling factor
       
    62 			y: direction != 'horizontal' ? (percent / 100) : 1,
       
    63 			x: direction != 'vertical' ? (percent / 100) : 1
       
    64 		};
       
    65 		el.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state
       
    66 
       
    67 		if (o.options.fade) { // Fade option to support puff
       
    68 			if (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;};
       
    69 			if (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;};
       
    70 		};
       
    71 
       
    72 		// Animation
       
    73 		options.from = el.from; options.to = el.to; options.mode = mode;
       
    74 
       
    75 		// Animate
       
    76 		el.effect('size', options, o.duration, o.callback);
       
    77 		el.dequeue();
       
    78 	});
       
    79 
       
    80 };
       
    81 
       
    82 $.effects.size = function(o) {
       
    83 
       
    84 	return this.queue(function() {
       
    85 
       
    86 		// Create element
       
    87 		var el = $(this), props = ['position','top','left','width','height','overflow','opacity'];
       
    88 		var props1 = ['position','top','left','overflow','opacity']; // Always restore
       
    89 		var props2 = ['width','height','overflow']; // Copy for children
       
    90 		var cProps = ['fontSize'];
       
    91 		var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'];
       
    92 		var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight'];
       
    93 
       
    94 		// Set options
       
    95 		var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
       
    96 		var restore = o.options.restore || false; // Default restore
       
    97 		var scale = o.options.scale || 'both'; // Default scale mode
       
    98 		var origin = o.options.origin; // The origin of the sizing
       
    99 		var original = {height: el.height(), width: el.width()}; // Save original
       
   100 		el.from = o.options.from || original; // Default from state
       
   101 		el.to = o.options.to || original; // Default to state
       
   102 		// Adjust
       
   103 		if (origin) { // Calculate baseline shifts
       
   104 			var baseline = $.effects.getBaseline(origin, original);
       
   105 			el.from.top = (original.height - el.from.height) * baseline.y;
       
   106 			el.from.left = (original.width - el.from.width) * baseline.x;
       
   107 			el.to.top = (original.height - el.to.height) * baseline.y;
       
   108 			el.to.left = (original.width - el.to.width) * baseline.x;
       
   109 		};
       
   110 		var factor = { // Set scaling factor
       
   111 			from: {y: el.from.height / original.height, x: el.from.width / original.width},
       
   112 			to: {y: el.to.height / original.height, x: el.to.width / original.width}
       
   113 		};
       
   114 		if (scale == 'box' || scale == 'both') { // Scale the css box
       
   115 			if (factor.from.y != factor.to.y) { // Vertical props scaling
       
   116 				props = props.concat(vProps);
       
   117 				el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from);
       
   118 				el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to);
       
   119 			};
       
   120 			if (factor.from.x != factor.to.x) { // Horizontal props scaling
       
   121 				props = props.concat(hProps);
       
   122 				el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from);
       
   123 				el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to);
       
   124 			};
       
   125 		};
       
   126 		if (scale == 'content' || scale == 'both') { // Scale the content
       
   127 			if (factor.from.y != factor.to.y) { // Vertical props scaling
       
   128 				props = props.concat(cProps);
       
   129 				el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from);
       
   130 				el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to);
       
   131 			};
       
   132 		};
       
   133 		$.effects.save(el, restore ? props : props1); el.show(); // Save & Show
       
   134 		$.effects.createWrapper(el); // Create Wrapper
       
   135 		el.css('overflow','hidden').css(el.from); // Shift
       
   136 
       
   137 		// Animate
       
   138 		if (scale == 'content' || scale == 'both') { // Scale the children
       
   139 			vProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size
       
   140 			hProps = hProps.concat(['marginLeft','marginRight']); // Add margins
       
   141 			props2 = props.concat(vProps).concat(hProps); // Concat
       
   142 			el.find("*[width]").each(function(){
       
   143 				child = $(this);
       
   144 				if (restore) $.effects.save(child, props2);
       
   145 				var c_original = {height: child.height(), width: child.width()}; // Save original
       
   146 				child.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x};
       
   147 				child.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x};
       
   148 				if (factor.from.y != factor.to.y) { // Vertical props scaling
       
   149 					child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from);
       
   150 					child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to);
       
   151 				};
       
   152 				if (factor.from.x != factor.to.x) { // Horizontal props scaling
       
   153 					child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from);
       
   154 					child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to);
       
   155 				};
       
   156 				child.css(child.from); // Shift children
       
   157 				child.animate(child.to, o.duration, o.options.easing, function(){
       
   158 					if (restore) $.effects.restore(child, props2); // Restore children
       
   159 				}); // Animate children
       
   160 			});
       
   161 		};
       
   162 
       
   163 		// Animate
       
   164 		el.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
       
   165 			if (el.to.opacity === 0) {
       
   166 				el.css('opacity', el.from.opacity);
       
   167 			}
       
   168 			if(mode == 'hide') el.hide(); // Hide
       
   169 			$.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore
       
   170 			if(o.callback) o.callback.apply(this, arguments); // Callback
       
   171 			el.dequeue();
       
   172 		}});
       
   173 
       
   174 	});
       
   175 
       
   176 };
       
   177 
       
   178 })(jQuery);