mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Remove offset dependency from css. Move curCSS and getStyles to their own modules. -39 bytes. Close gh-1360.
This commit is contained in:
parent
641492b7e1
commit
4ded9be72a
80
src/css.js
80
src/css.js
@ -6,8 +6,12 @@ var
|
|||||||
jQuery = require( "./core" ),
|
jQuery = require( "./core" ),
|
||||||
pnum = require( "./var/pnum" ),
|
pnum = require( "./var/pnum" ),
|
||||||
access = require( "./core/access" ),
|
access = require( "./core/access" ),
|
||||||
|
rmargin = require( "./css/var/rmargin" ),
|
||||||
|
rnumnonpx = require( "./css/var/rnumnonpx" ),
|
||||||
cssExpand = require( "./css/var/cssExpand" ),
|
cssExpand = require( "./css/var/cssExpand" ),
|
||||||
isHidden = require( "./css/var/isHidden" ),
|
isHidden = require( "./css/var/isHidden" ),
|
||||||
|
getStyles = require( "./css/var/getStyles" ),
|
||||||
|
curCSS = require( "./css/curCSS" ),
|
||||||
support = require( "./css/support" ),
|
support = require( "./css/support" ),
|
||||||
defaultDisplay = require( "./css/defaultDisplay" ),
|
defaultDisplay = require( "./css/defaultDisplay" ),
|
||||||
data_priv = require( "./data/var/data_priv" ),
|
data_priv = require( "./data/var/data_priv" ),
|
||||||
@ -15,9 +19,7 @@ var
|
|||||||
// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
|
// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
|
||||||
// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
|
// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
|
||||||
rdisplayswap = /^(none|table(?!-c[ea]).+)/,
|
rdisplayswap = /^(none|table(?!-c[ea]).+)/,
|
||||||
rmargin = /^margin/,
|
|
||||||
rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
|
rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
|
||||||
rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ),
|
|
||||||
rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
|
rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
|
||||||
|
|
||||||
cssShow = { position: "absolute", visibility: "hidden", display: "block" },
|
cssShow = { position: "absolute", visibility: "hidden", display: "block" },
|
||||||
@ -33,8 +35,6 @@ require( "./core/init" );
|
|||||||
require( "./css/swap" );
|
require( "./css/swap" );
|
||||||
require( "./core/ready" );
|
require( "./core/ready" );
|
||||||
require( "./selector" ); // contains
|
require( "./selector" ); // contains
|
||||||
// Optional
|
|
||||||
require( "./offset" );
|
|
||||||
|
|
||||||
// return a css property mapped to a potentially vendor prefixed property
|
// return a css property mapped to a potentially vendor prefixed property
|
||||||
function vendorPropName( style, name ) {
|
function vendorPropName( style, name ) {
|
||||||
@ -59,51 +59,7 @@ function vendorPropName( style, name ) {
|
|||||||
return origName;
|
return origName;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: we've included the "window" in window.getComputedStyle
|
|
||||||
// because jsdom on node.js will break without it.
|
|
||||||
function getStyles( elem ) {
|
|
||||||
return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
|
|
||||||
}
|
|
||||||
|
|
||||||
function curCSS( elem, name, _computed ) {
|
|
||||||
var width, minWidth, maxWidth,
|
|
||||||
computed = _computed || getStyles( elem ),
|
|
||||||
|
|
||||||
// Support: IE9
|
|
||||||
// getPropertyValue is only needed for .css('filter') in IE9, see #12537
|
|
||||||
ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
|
|
||||||
style = elem.style;
|
|
||||||
|
|
||||||
if ( computed ) {
|
|
||||||
|
|
||||||
if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
|
|
||||||
ret = jQuery.style( elem, name );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Support: iOS < 6
|
|
||||||
// A tribute to the "awesome hack by Dean Edwards"
|
|
||||||
// iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
|
|
||||||
// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
|
|
||||||
if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
|
|
||||||
|
|
||||||
// Remember the original values
|
|
||||||
width = style.width;
|
|
||||||
minWidth = style.minWidth;
|
|
||||||
maxWidth = style.maxWidth;
|
|
||||||
|
|
||||||
// Put in the new values to get a computed value out
|
|
||||||
style.minWidth = style.maxWidth = style.width = ret;
|
|
||||||
ret = computed.width;
|
|
||||||
|
|
||||||
// Revert the changed values
|
|
||||||
style.width = width;
|
|
||||||
style.minWidth = minWidth;
|
|
||||||
style.maxWidth = maxWidth;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function setPositiveNumber( elem, value, subtract ) {
|
function setPositiveNumber( elem, value, subtract ) {
|
||||||
@ -436,34 +392,6 @@ jQuery.cssHooks.marginRight = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
|
|
||||||
// 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() || !jQuery.fn.position ) {
|
|
||||||
// Hook not needed, remove it.
|
|
||||||
// Since there are no other hooks for prop, remove the whole object.
|
|
||||||
delete jQuery.cssHooks[ prop ];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
// These hooks are used by animate to expand properties
|
// These hooks are used by animate to expand properties
|
||||||
jQuery.each({
|
jQuery.each({
|
||||||
margin: "",
|
margin: "",
|
||||||
|
52
src/css/curCSS.js
Normal file
52
src/css/curCSS.js
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
define([
|
||||||
|
"../core",
|
||||||
|
"./var/rnumnonpx",
|
||||||
|
"./var/rmargin",
|
||||||
|
"./var/getStyles",
|
||||||
|
"../css", // Circular, but needs jQuery.style
|
||||||
|
"../selector" // contains
|
||||||
|
], function( jQuery, rnumnonpx, rmargin, getStyles ) {
|
||||||
|
|
||||||
|
function curCSS( elem, name, computed ) {
|
||||||
|
var width, minWidth, maxWidth, ret,
|
||||||
|
style = elem.style;
|
||||||
|
|
||||||
|
computed = computed || getStyles( elem );
|
||||||
|
|
||||||
|
// Support: IE9
|
||||||
|
// getPropertyValue is only needed for .css('filter') in IE9, see #12537
|
||||||
|
ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
|
||||||
|
|
||||||
|
if ( computed ) {
|
||||||
|
|
||||||
|
if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
|
||||||
|
ret = jQuery.style( elem, name );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Support: iOS < 6
|
||||||
|
// A tribute to the "awesome hack by Dean Edwards"
|
||||||
|
// iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
|
||||||
|
// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
|
||||||
|
if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
|
||||||
|
|
||||||
|
// Remember the original values
|
||||||
|
width = style.width;
|
||||||
|
minWidth = style.minWidth;
|
||||||
|
maxWidth = style.maxWidth;
|
||||||
|
|
||||||
|
// Put in the new values to get a computed value out
|
||||||
|
style.minWidth = style.maxWidth = style.width = ret;
|
||||||
|
ret = computed.width;
|
||||||
|
|
||||||
|
// Revert the changed values
|
||||||
|
style.width = width;
|
||||||
|
style.minWidth = minWidth;
|
||||||
|
style.maxWidth = maxWidth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return curCSS;
|
||||||
|
});
|
5
src/css/var/getStyles.js
Normal file
5
src/css/var/getStyles.js
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
define(function() {
|
||||||
|
return function( elem ) {
|
||||||
|
return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
|
||||||
|
};
|
||||||
|
});
|
3
src/css/var/rmargin.js
Normal file
3
src/css/var/rmargin.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
define(function() {
|
||||||
|
return (/^margin/);
|
||||||
|
});
|
5
src/css/var/rnumnonpx.js
Normal file
5
src/css/var/rnumnonpx.js
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
define([
|
||||||
|
"../../var/pnum"
|
||||||
|
], function( pnum ) {
|
||||||
|
return new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
|
||||||
|
});
|
@ -1,13 +1,17 @@
|
|||||||
define([
|
define(function( require ) {
|
||||||
"./core",
|
|
||||||
"./var/strundefined",
|
|
||||||
"./core/access",
|
|
||||||
"./core/init",
|
|
||||||
"./css",
|
|
||||||
"./selector" // contains
|
|
||||||
], function( jQuery, strundefined, access ) {
|
|
||||||
|
|
||||||
var docElem = window.document.documentElement;
|
var
|
||||||
|
jQuery = require( "./core" ),
|
||||||
|
strundefined = require( "./var/strundefined" ),
|
||||||
|
access = require( "./core/access" ),
|
||||||
|
rnumnonpx = require( "./css/var/rnumnonpx" ),
|
||||||
|
curCSS = require( "./css/curCSS" ),
|
||||||
|
support = require( "./css/support" ),
|
||||||
|
docElem = window.document.documentElement;
|
||||||
|
|
||||||
|
require( "./core/init" );
|
||||||
|
require( "./css" );
|
||||||
|
require( "./selector" ); // contains
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a window from an element
|
* Gets a window from an element
|
||||||
@ -177,5 +181,34 @@ jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( me
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Add the top/left cssHooks using jQuery.fn.position
|
||||||
|
// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
|
||||||
|
// 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
return jQuery;
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user