root / drupal7 / sites / all / modules / jquery_update / replace / ui / ui / jquery.ui.effect-scale.js @ 503b3f7b
1 |
/*!
|
---|---|
2 |
* jQuery UI Effects Scale 1.10.2
|
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); |