mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
No ticket. Abstract conditional hook definition.
This commit is contained in:
parent
5fbf4a4fe3
commit
f7111fb0e5
72
src/css.js
72
src/css.js
@ -10,6 +10,7 @@ var
|
|||||||
isHidden = require( "./css/var/isHidden" ),
|
isHidden = require( "./css/var/isHidden" ),
|
||||||
support = require( "./css/support" ),
|
support = require( "./css/support" ),
|
||||||
defaultDisplay = require( "./css/defaultDisplay" ),
|
defaultDisplay = require( "./css/defaultDisplay" ),
|
||||||
|
addGetHookIf = require( "./css/addGetHookIf" ),
|
||||||
|
|
||||||
getStyles, curCSS,
|
getStyles, curCSS,
|
||||||
ralpha = /alpha\([^)]*\)/i,
|
ralpha = /alpha\([^)]*\)/i,
|
||||||
@ -512,69 +513,32 @@ if ( !support.opacity ) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
jQuery.cssHooks.marginRight = {
|
addGetHookIf( jQuery.cssHooks.marginRight, support.reliableMarginRight,
|
||||||
get: function( elem, computed ) {
|
function ( elem, computed ) {
|
||||||
var reliableMarginRight = support.reliableMarginRight();
|
if ( computed ) {
|
||||||
if ( reliableMarginRight == null ) {
|
// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
|
||||||
// The test was not ready at this point; screw the hook this time
|
// Work around by temporarily setting element display to inline-block
|
||||||
// but check again when needed next time.
|
return jQuery.swap( elem, { "display": "inline-block" },
|
||||||
return;
|
curCSS, [ elem, "marginRight" ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( reliableMarginRight ) {
|
|
||||||
// Hook not needed, remove it.
|
|
||||||
// Since there are no other hooks for marginRight, remove the whole object.
|
|
||||||
delete jQuery.cssHooks.marginRight;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
jQuery.cssHooks.marginRight.get = 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" ] );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return jQuery.cssHooks.marginRight.get( elem, computed );
|
|
||||||
}
|
}
|
||||||
};
|
);
|
||||||
|
|
||||||
// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
|
// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
|
||||||
// getComputedStyle returns percent when specified for top/left/bottom/right
|
// 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
|
// 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.each( [ "top", "left" ], function( i, prop ) {
|
||||||
jQuery.cssHooks[ prop ] = {
|
addGetHookIf( jQuery.cssHooks[ prop ], support.pixelPosition,
|
||||||
get: function( elem, computed ) {
|
function ( elem, computed ) {
|
||||||
var pixelPosition = support.pixelPosition();
|
if ( computed ) {
|
||||||
|
computed = curCSS( elem, prop );
|
||||||
if ( pixelPosition == null ) {
|
// if curCSS returns percentage, fallback to offset
|
||||||
// The test was not ready at this point; screw the hook this time
|
return rnumnonpx.test( computed ) ?
|
||||||
// but check again when needed next time.
|
jQuery( elem ).position()[ prop ] + "px" :
|
||||||
return;
|
computed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( pixelPosition || !jQuery.fn.position ) {
|
|
||||||
// Hook not needed or impossible to apply due to a missing module, remove it.
|
|
||||||
// Since there are no other hooks for prop, remove the whole object.
|
|
||||||
delete jQuery.cssHooks[ prop ];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
jQuery.cssHooks[ prop ].get = 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;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return jQuery.cssHooks[ prop ].get( elem, computed );
|
|
||||||
}
|
}
|
||||||
};
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
33
src/css/addGetHookIf.js
Normal file
33
src/css/addGetHookIf.js
Normal file
@ -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;
|
||||||
|
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user