[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/resources/lib/jquery.ui/ -> jquery.ui.effect-scale.js (source)

   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);


Generated: Fri Nov 28 14:03:12 2014 Cross-referenced by PHPXref 0.7.1