aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMichał Gołębiowski <m.goleb@gmail.com>2013-09-11 02:45:11 +0200
committerMichał Gołębiowski <m.goleb@gmail.com>2013-09-11 02:45:11 +0200
commit0b9f0343824526c2b218c313aebeeab3d41d1c96 (patch)
tree1e1f63700f40202c14dec96c00efbdd2e5d1856c /src
parent4ded9be72a724a79d764a4fc72ea9450322235a8 (diff)
downloadjquery-0b9f0343824526c2b218c313aebeeab3d41d1c96.tar.gz
jquery-0b9f0343824526c2b218c313aebeeab3d41d1c96.zip
No ticket. Abstract conditional hook definition.
Diffstat (limited to 'src')
-rw-r--r--src/css.js29
-rw-r--r--src/css/addGetHookIf.js33
-rw-r--r--src/offset.js30
3 files changed, 52 insertions, 40 deletions
diff --git a/src/css.js b/src/css.js
index 23cd73c81..4e80b3216 100644
--- a/src/css.js
+++ b/src/css.js
@@ -14,6 +14,7 @@ var
curCSS = require( "./css/curCSS" ),
support = require( "./css/support" ),
defaultDisplay = require( "./css/defaultDisplay" ),
+ addGetHookIf = require( "./css/addGetHookIf" ),
data_priv = require( "./data/var/data_priv" ),
// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
@@ -369,28 +370,16 @@ jQuery.each([ "height", "width" ], function( i, name ) {
});
// Support: Android 2.3
-jQuery.cssHooks.marginRight = {
- get: function( elem, computed ) {
- if ( support.reliableMarginRight() ) {
- // Hook not needed, remove it.
- // Since there are no other hooks for marginRight, remove the whole object.
- delete jQuery.cssHooks.marginRight;
- return;
+addGetHookIf( jQuery.cssHooks.marginRight, support.reliableMarginRight,
+ function ( elem, computed ) {
+ if ( computed ) {
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ // Work around by temporarily setting element display to inline-block
+ return jQuery.swap( elem, { "display": "inline-block" },
+ curCSS, [ elem, "marginRight" ] );
}
-
- jQuery.cssHooks.marginRight.get = function( elem, computed ) {
- if ( computed ) {
- // Support: Android 2.3
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- // Work around by temporarily setting element display to inline-block
- return jQuery.swap( elem, { "display": "inline-block" },
- curCSS, [ elem, "marginRight" ] );
- }
- };
-
- return jQuery.cssHooks.marginRight.get( elem, computed );
}
-};
+);
// These hooks are used by animate to expand properties
jQuery.each({
diff --git a/src/css/addGetHookIf.js b/src/css/addGetHookIf.js
new file mode 100644
index 000000000..f1ec002b3
--- /dev/null
+++ b/src/css/addGetHookIf.js
@@ -0,0 +1,33 @@
+define( function() {
+
+function addGetHookIf( hookVar, conditionFn, hookFn ) {
+ // Define the hook, we'll check on the first run if it's really needed.
+ hookVar = {
+ get: function() {
+ var condition = conditionFn();
+
+ if ( condition == null ) {
+ // The test was not ready at this point; screw the hook this time
+ // but check again when needed next time.
+ return;
+ }
+
+ if ( condition ) {
+ // Hook not needed (or it's not possible to use it due to missing dependency),
+ // remove it.
+ // Since there are no other hooks for marginRight, remove the whole object.
+ delete hookVar.get;
+ return;
+ }
+
+ // Hook needed; redefine it so that the support test is not executed again.
+ hookVar.get = hookFn;
+
+ return hookVar.get.apply( hookVar, arguments );
+ }
+ };
+}
+
+return addGetHookIf;
+
+});
diff --git a/src/offset.js b/src/offset.js
index 2663b4513..ee46717fd 100644
--- a/src/offset.js
+++ b/src/offset.js
@@ -6,6 +6,7 @@ var
access = require( "./core/access" ),
rnumnonpx = require( "./css/var/rnumnonpx" ),
curCSS = require( "./css/curCSS" ),
+ addGetHookIf = require( "./css/addGetHookIf" ),
support = require( "./css/support" ),
docElem = window.document.documentElement;
@@ -186,28 +187,17 @@ jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( me
// getComputedStyle returns percent when specified for top/left/bottom/right
// rather than make the css module depend on the offset module, we just check for it here
jQuery.each( [ "top", "left" ], function( i, prop ) {
- jQuery.cssHooks[ prop ] = {
- get: function( elem, computed ) {
- if ( support.pixelPosition() ) {
- // Hook not needed, remove it.
- // Since there are no other hooks for prop, remove the whole object.
- delete jQuery.cssHooks[ prop ];
- return;
+ addGetHookIf( jQuery.cssHooks[ prop ], support.pixelPosition,
+ function ( elem, computed ) {
+ if ( computed ) {
+ computed = curCSS( elem, prop );
+ // if curCSS returns percentage, fallback to offset
+ return rnumnonpx.test( computed ) ?
+ jQuery( elem ).position()[ prop ] + "px" :
+ computed;
}
-
- jQuery.cssHooks[ prop ].get = function ( i, prop ) {
- if ( computed ) {
- computed = curCSS( elem, prop );
- // if curCSS returns percentage, fallback to offset
- return rnumnonpx.test( computed ) ?
- jQuery( elem ).position()[ prop ] + "px" :
- computed;
- }
- };
-
- return jQuery.cssHooks[ prop ].get( i, prop );
}
- };
+ );
});
return jQuery;