Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
CSS: Support relative adjustment in any applicable unit
- Loading branch information
Showing
5 changed files
with
135 additions
and
58 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
define([ | ||
"../core", | ||
"../var/rcssNum" | ||
], function( jQuery, rcssNum ) { | ||
|
||
function adjustCSS( elem, prop, valueParts, tween ) { | ||
var adjusted, | ||
scale = 1, | ||
maxIterations = 20, | ||
currentValue = tween ? | ||
function() { return tween.cur(); } : | ||
function() { return jQuery.css( elem, prop, "" ); }, | ||
initial = currentValue(), | ||
unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), | ||
// Starting value computation is required for potential unit mismatches | ||
initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && | ||
rcssNum.exec( jQuery.css( elem, prop ) ); | ||
|
||
if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { | ||
// Trust units reported by jQuery.css | ||
unit = unit || initialInUnit[ 3 ]; | ||
|
||
// Make sure we update the tween properties later on | ||
valueParts = valueParts || []; | ||
|
||
// Iteratively approximate from a nonzero starting point | ||
initialInUnit = +initial || 1; | ||
|
||
do { | ||
// If previous iteration zeroed out, double until we get *something*. | ||
// Use string for doubling so we don't accidentally see scale as unchanged below | ||
scale = scale || ".5"; | ||
|
||
// Adjust and apply | ||
initialInUnit = initialInUnit / scale; | ||
jQuery.style( elem, prop, initialInUnit + unit ); | ||
|
||
// Update scale, tolerating zero or NaN from tween.cur() | ||
// Break the loop if scale is unchanged or perfect, or if we've just had enough. | ||
} while ( | ||
scale !== (scale = currentValue() / initial) && scale !== 1 && --maxIterations | ||
); | ||
} | ||
|
||
if ( valueParts ) { | ||
initialInUnit = +initialInUnit || +initial || 0; | ||
// Apply relative offset (+=/-=) if specified | ||
adjusted = valueParts[ 1 ] ? | ||
initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : | ||
+valueParts[ 2 ]; | ||
if ( tween ) { | ||
tween.unit = unit; | ||
tween.start = initialInUnit; | ||
tween.end = adjusted; | ||
} | ||
} | ||
return adjusted; | ||
} | ||
|
||
return adjustCSS; | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
define([ | ||
"../var/pnum" | ||
], function( pnum ) { | ||
|
||
return new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); | ||
|
||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters