mirror of
https://github.com/WordPress/WordPress.git
synced 2024-11-09 20:30:43 +01:00
7ea33988e9
Some regressions happened alongside the release of jQuery UI 1.13.0, this brings the fixes from 1.13.1 downstream to WordPress, notably relating to Widget, Autocomplete, Sortable, and Tooltip modules. See the changelog between version 1.13.0 and 1.13.1 at https://github.com/jquery/jquery-ui/compare/1.13.0...1.13.1 Props blogaid, linux4me2, mgol. Fixes #54902. Built from https://develop.svn.wordpress.org/trunk@52648 git-svn-id: http://core.svn.wordpress.org/trunk@52237 1a063a9b-81f0-0310-95a4-ce76da25c4cd
196 lines
5.3 KiB
JavaScript
196 lines
5.3 KiB
JavaScript
/*!
|
|
* jQuery UI Effects Size 1.13.1
|
|
* http://jqueryui.com
|
|
*
|
|
* Copyright jQuery Foundation and other contributors
|
|
* Released under the MIT license.
|
|
* http://jquery.org/license
|
|
*/
|
|
|
|
//>>label: Size Effect
|
|
//>>group: Effects
|
|
//>>description: Resize an element to a specified width and height.
|
|
//>>docs: http://api.jqueryui.com/size-effect/
|
|
//>>demos: http://jqueryui.com/effect/
|
|
|
|
( function( factory ) {
|
|
"use strict";
|
|
|
|
if ( typeof define === "function" && define.amd ) {
|
|
|
|
// AMD. Register as an anonymous module.
|
|
define( [
|
|
"jquery",
|
|
"./effect"
|
|
], factory );
|
|
} else {
|
|
|
|
// Browser globals
|
|
factory( jQuery );
|
|
}
|
|
} )( function( $ ) {
|
|
"use strict";
|
|
|
|
return $.effects.define( "size", function( options, done ) {
|
|
|
|
// Create element
|
|
var baseline, factor, temp,
|
|
element = $( this ),
|
|
|
|
// Copy for children
|
|
cProps = [ "fontSize" ],
|
|
vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
|
|
hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
|
|
|
|
// Set options
|
|
mode = options.mode,
|
|
restore = mode !== "effect",
|
|
scale = options.scale || "both",
|
|
origin = options.origin || [ "middle", "center" ],
|
|
position = element.css( "position" ),
|
|
pos = element.position(),
|
|
original = $.effects.scaledDimensions( element ),
|
|
from = options.from || original,
|
|
to = options.to || $.effects.scaledDimensions( element, 0 );
|
|
|
|
$.effects.createPlaceholder( element );
|
|
|
|
if ( mode === "show" ) {
|
|
temp = from;
|
|
from = to;
|
|
to = temp;
|
|
}
|
|
|
|
// Set scaling factor
|
|
factor = {
|
|
from: {
|
|
y: from.height / original.height,
|
|
x: from.width / original.width
|
|
},
|
|
to: {
|
|
y: to.height / original.height,
|
|
x: to.width / original.width
|
|
}
|
|
};
|
|
|
|
// Scale the css box
|
|
if ( scale === "box" || scale === "both" ) {
|
|
|
|
// Vertical props scaling
|
|
if ( factor.from.y !== factor.to.y ) {
|
|
from = $.effects.setTransition( element, vProps, factor.from.y, from );
|
|
to = $.effects.setTransition( element, vProps, factor.to.y, to );
|
|
}
|
|
|
|
// Horizontal props scaling
|
|
if ( factor.from.x !== factor.to.x ) {
|
|
from = $.effects.setTransition( element, hProps, factor.from.x, from );
|
|
to = $.effects.setTransition( element, hProps, factor.to.x, to );
|
|
}
|
|
}
|
|
|
|
// Scale the content
|
|
if ( scale === "content" || scale === "both" ) {
|
|
|
|
// Vertical props scaling
|
|
if ( factor.from.y !== factor.to.y ) {
|
|
from = $.effects.setTransition( element, cProps, factor.from.y, from );
|
|
to = $.effects.setTransition( element, cProps, factor.to.y, to );
|
|
}
|
|
}
|
|
|
|
// Adjust the position properties based on the provided origin points
|
|
if ( origin ) {
|
|
baseline = $.effects.getBaseline( origin, original );
|
|
from.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top;
|
|
from.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left;
|
|
to.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top;
|
|
to.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left;
|
|
}
|
|
delete from.outerHeight;
|
|
delete from.outerWidth;
|
|
element.css( from );
|
|
|
|
// Animate the children if desired
|
|
if ( scale === "content" || scale === "both" ) {
|
|
|
|
vProps = vProps.concat( [ "marginTop", "marginBottom" ] ).concat( cProps );
|
|
hProps = hProps.concat( [ "marginLeft", "marginRight" ] );
|
|
|
|
// Only animate children with width attributes specified
|
|
// TODO: is this right? should we include anything with css width specified as well
|
|
element.find( "*[width]" ).each( function() {
|
|
var child = $( this ),
|
|
childOriginal = $.effects.scaledDimensions( child ),
|
|
childFrom = {
|
|
height: childOriginal.height * factor.from.y,
|
|
width: childOriginal.width * factor.from.x,
|
|
outerHeight: childOriginal.outerHeight * factor.from.y,
|
|
outerWidth: childOriginal.outerWidth * factor.from.x
|
|
},
|
|
childTo = {
|
|
height: childOriginal.height * factor.to.y,
|
|
width: childOriginal.width * factor.to.x,
|
|
outerHeight: childOriginal.height * factor.to.y,
|
|
outerWidth: childOriginal.width * factor.to.x
|
|
};
|
|
|
|
// Vertical props scaling
|
|
if ( factor.from.y !== factor.to.y ) {
|
|
childFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom );
|
|
childTo = $.effects.setTransition( child, vProps, factor.to.y, childTo );
|
|
}
|
|
|
|
// Horizontal props scaling
|
|
if ( factor.from.x !== factor.to.x ) {
|
|
childFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom );
|
|
childTo = $.effects.setTransition( child, hProps, factor.to.x, childTo );
|
|
}
|
|
|
|
if ( restore ) {
|
|
$.effects.saveStyle( child );
|
|
}
|
|
|
|
// Animate children
|
|
child.css( childFrom );
|
|
child.animate( childTo, options.duration, options.easing, function() {
|
|
|
|
// Restore children
|
|
if ( restore ) {
|
|
$.effects.restoreStyle( child );
|
|
}
|
|
} );
|
|
} );
|
|
}
|
|
|
|
// Animate
|
|
element.animate( to, {
|
|
queue: false,
|
|
duration: options.duration,
|
|
easing: options.easing,
|
|
complete: function() {
|
|
|
|
var offset = element.offset();
|
|
|
|
if ( to.opacity === 0 ) {
|
|
element.css( "opacity", from.opacity );
|
|
}
|
|
|
|
if ( !restore ) {
|
|
element
|
|
.css( "position", position === "static" ? "relative" : position )
|
|
.offset( offset );
|
|
|
|
// Need to save style here so that automatic style restoration
|
|
// doesn't restore to the original styles from before the animation.
|
|
$.effects.saveStyle( element );
|
|
}
|
|
|
|
done();
|
|
}
|
|
} );
|
|
|
|
} );
|
|
|
|
} );
|