[ Index ] |
PHP Cross Reference of MediaWiki-1.24.0 |
[Summary view] [Print] [Text view]
1 /*! 2 * jQuery UI Effects Scale 1.9.2 3 * http://jqueryui.com 4 * 5 * Copyright 2012 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);
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 14:03:12 2014 | Cross-referenced by PHPXref 0.7.1 |