]>
git.r.bdr.sh - rbdr/dotfiles/blob - atom/packages/ex-mode/node_modules/space-pen/node_modules/jquery/src/css.js
d4816175dd7feb51c5514a761f3d1f5de2cae673
11 "./css/defaultDisplay",
14 "./data/var/data_priv",
19 "./selector" // contains
20 ], function( jQuery
, pnum
, access
, rmargin
, rnumnonpx
, cssExpand
, isHidden
,
21 getStyles
, curCSS
, defaultDisplay
, addGetHookIf
, support
, data_priv
) {
24 // Swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
25 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
26 rdisplayswap
= /^(none|table(?!-c[ea]).+)/,
27 rnumsplit
= new RegExp( "^(" + pnum
+ ")(.*)$", "i" ),
28 rrelNum
= new RegExp( "^([+-])=(" + pnum
+ ")", "i" ),
30 cssShow
= { position: "absolute", visibility: "hidden", display: "block" },
31 cssNormalTransform
= {
36 cssPrefixes
= [ "Webkit", "O", "Moz", "ms" ];
38 // Return a css property mapped to a potentially vendor prefixed property
39 function vendorPropName( style
, name
) {
41 // Shortcut for names that are not vendor prefixed
42 if ( name
in style
) {
46 // Check for vendor prefixed names
47 var capName
= name
[0].toUpperCase() + name
.slice(1),
49 i
= cssPrefixes
.length
;
52 name
= cssPrefixes
[ i
] + capName
;
53 if ( name
in style
) {
61 function setPositiveNumber( elem
, value
, subtract
) {
62 var matches
= rnumsplit
.exec( value
);
64 // Guard against undefined "subtract", e.g., when used as in cssHooks
65 Math
.max( 0, matches
[ 1 ] - ( subtract
|| 0 ) ) + ( matches
[ 2 ] || "px" ) :
69 function augmentWidthOrHeight( elem
, name
, extra
, isBorderBox
, styles
) {
70 var i
= extra
=== ( isBorderBox
? "border" : "content" ) ?
71 // If we already have the right measurement, avoid augmentation
73 // Otherwise initialize for horizontal or vertical properties
74 name
=== "width" ? 1 : 0,
78 for ( ; i
< 4; i
+= 2 ) {
79 // Both box models exclude margin, so add it if we want it
80 if ( extra
=== "margin" ) {
81 val
+= jQuery
.css( elem
, extra
+ cssExpand
[ i
], true, styles
);
85 // border-box includes padding, so remove it if we want content
86 if ( extra
=== "content" ) {
87 val
-= jQuery
.css( elem
, "padding" + cssExpand
[ i
], true, styles
);
90 // At this point, extra isn't border nor margin, so remove border
91 if ( extra
!== "margin" ) {
92 val
-= jQuery
.css( elem
, "border" + cssExpand
[ i
] + "Width", true, styles
);
95 // At this point, extra isn't content, so add padding
96 val
+= jQuery
.css( elem
, "padding" + cssExpand
[ i
], true, styles
);
98 // At this point, extra isn't content nor padding, so add border
99 if ( extra
!== "padding" ) {
100 val
+= jQuery
.css( elem
, "border" + cssExpand
[ i
] + "Width", true, styles
);
108 function getWidthOrHeight( elem
, name
, extra
) {
110 // Start with offset property, which is equivalent to the border-box value
111 var valueIsBorderBox
= true,
112 val
= name
=== "width" ? elem
.offsetWidth : elem
.offsetHeight
,
113 styles
= getStyles( elem
),
114 isBorderBox
= jQuery
.css( elem
, "boxSizing", false, styles
) === "border-box";
116 // Some non-html elements return undefined for offsetWidth, so check for null/undefined
117 // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
118 // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
119 if ( val
<= 0 || val
== null ) {
120 // Fall back to computed then uncomputed css if necessary
121 val
= curCSS( elem
, name
, styles
);
122 if ( val
< 0 || val
== null ) {
123 val
= elem
.style
[ name
];
126 // Computed unit is not pixels. Stop here and return.
127 if ( rnumnonpx
.test(val
) ) {
131 // Check for style in case a browser which returns unreliable values
132 // for getComputedStyle silently falls back to the reliable elem.style
133 valueIsBorderBox
= isBorderBox
&&
134 ( support
.boxSizingReliable() || val
=== elem
.style
[ name
] );
136 // Normalize "", auto, and prepare for extra
137 val
= parseFloat( val
) || 0;
140 // Use the active box-sizing model to add/subtract irrelevant styles
142 augmentWidthOrHeight(
145 extra
|| ( isBorderBox
? "border" : "content" ),
152 function showHide( elements
, show
) {
153 var display
, elem
, hidden
,
156 length
= elements
.length
;
158 for ( ; index
< length
; index
++ ) {
159 elem
= elements
[ index
];
164 values
[ index
] = data_priv
.get( elem
, "olddisplay" );
165 display
= elem
.style
.display
;
167 // Reset the inline display of this element to learn if it is
168 // being hidden by cascaded rules or not
169 if ( !values
[ index
] && display
=== "none" ) {
170 elem
.style
.display
= "";
173 // Set elements which have been overridden with display: none
174 // in a stylesheet to whatever the default browser style is
175 // for such an element
176 if ( elem
.style
.display
=== "" && isHidden( elem
) ) {
177 values
[ index
] = data_priv
.access( elem
, "olddisplay", defaultDisplay(elem
.nodeName
) );
180 hidden
= isHidden( elem
);
182 if ( display
!== "none" || !hidden
) {
183 data_priv
.set( elem
, "olddisplay", hidden
? display : jQuery
.css( elem
, "display" ) );
188 // Set the display of most of the elements in a second loop
189 // to avoid the constant reflow
190 for ( index
= 0; index
< length
; index
++ ) {
191 elem
= elements
[ index
];
195 if ( !show
|| elem
.style
.display
=== "none" || elem
.style
.display
=== "" ) {
196 elem
.style
.display
= show
? values
[ index
] || "" : "none";
205 // Add in style property hooks for overriding the default
206 // behavior of getting and setting a style property
209 get: function( elem
, computed
) {
212 // We should always get a number back from opacity
213 var ret
= curCSS( elem
, "opacity" );
214 return ret
=== "" ? "1" : ret
;
220 // Don't automatically add "px" to these possibly-unitless properties
236 // Add in properties whose names you wish to fix before
237 // setting or getting the value
242 // Get and set the style property on a DOM Node
243 style: function( elem
, name
, value
, extra
) {
245 // Don't set styles on text and comment nodes
246 if ( !elem
|| elem
.nodeType
=== 3 || elem
.nodeType
=== 8 || !elem
.style
) {
250 // Make sure that we're working with the right name
251 var ret
, type
, hooks
,
252 origName
= jQuery
.camelCase( name
),
255 name
= jQuery
.cssProps
[ origName
] || ( jQuery
.cssProps
[ origName
] = vendorPropName( style
, origName
) );
257 // Gets hook for the prefixed version, then unprefixed version
258 hooks
= jQuery
.cssHooks
[ name
] || jQuery
.cssHooks
[ origName
];
260 // Check if we're setting a value
261 if ( value
!== undefined ) {
264 // Convert "+=" or "-=" to relative numbers (#7345)
265 if ( type
=== "string" && (ret
= rrelNum
.exec( value
)) ) {
266 value
= ( ret
[1] + 1 ) * ret
[2] + parseFloat( jQuery
.css( elem
, name
) );
271 // Make sure that null and NaN values aren't set (#7116)
272 if ( value
== null || value
!== value
) {
276 // If a number, add 'px' to the (except for certain CSS properties)
277 if ( type
=== "number" && !jQuery
.cssNumber
[ origName
] ) {
282 // background-* props affect original clone's values
283 if ( !support
.clearCloneStyle
&& value
=== "" && name
.indexOf( "background" ) === 0 ) {
284 style
[ name
] = "inherit";
287 // If a hook was provided, use that value, otherwise just set the specified value
288 if ( !hooks
|| !("set" in hooks
) || (value
= hooks
.set( elem
, value
, extra
)) !== undefined ) {
289 style
[ name
] = value
;
293 // If a hook was provided get the non-computed value from there
294 if ( hooks
&& "get" in hooks
&& (ret
= hooks
.get( elem
, false, extra
)) !== undefined ) {
298 // Otherwise just get the value from the style object
299 return style
[ name
];
303 css: function( elem
, name
, extra
, styles
) {
305 origName
= jQuery
.camelCase( name
);
307 // Make sure that we're working with the right name
308 name
= jQuery
.cssProps
[ origName
] || ( jQuery
.cssProps
[ origName
] = vendorPropName( elem
.style
, origName
) );
310 // Try prefixed name followed by the unprefixed name
311 hooks
= jQuery
.cssHooks
[ name
] || jQuery
.cssHooks
[ origName
];
313 // If a hook was provided get the computed value from there
314 if ( hooks
&& "get" in hooks
) {
315 val
= hooks
.get( elem
, true, extra
);
318 // Otherwise, if a way to get the computed value exists, use that
319 if ( val
=== undefined ) {
320 val
= curCSS( elem
, name
, styles
);
323 // Convert "normal" to computed value
324 if ( val
=== "normal" && name
in cssNormalTransform
) {
325 val
= cssNormalTransform
[ name
];
328 // Make numeric if forced or a qualifier was provided and val looks numeric
329 if ( extra
=== "" || extra
) {
330 num
= parseFloat( val
);
331 return extra
=== true || jQuery
.isNumeric( num
) ? num
|| 0 : val
;
337 jQuery
.each([ "height", "width" ], function( i
, name
) {
338 jQuery
.cssHooks
[ name
] = {
339 get: function( elem
, computed
, extra
) {
342 // Certain elements can have dimension info if we invisibly show them
343 // but it must have a current display style that would benefit
344 return rdisplayswap
.test( jQuery
.css( elem
, "display" ) ) && elem
.offsetWidth
=== 0 ?
345 jQuery
.swap( elem
, cssShow
, function() {
346 return getWidthOrHeight( elem
, name
, extra
);
348 getWidthOrHeight( elem
, name
, extra
);
352 set: function( elem
, value
, extra
) {
353 var styles
= extra
&& getStyles( elem
);
354 return setPositiveNumber( elem
, value
, extra
?
355 augmentWidthOrHeight(
359 jQuery
.css( elem
, "boxSizing", false, styles
) === "border-box",
367 // Support: Android 2.3
368 jQuery
.cssHooks
.marginRight
= addGetHookIf( support
.reliableMarginRight
,
369 function( elem
, computed
) {
371 return jQuery
.swap( elem
, { "display": "inline-block" },
372 curCSS
, [ elem
, "marginRight" ] );
377 // These hooks are used by animate to expand properties
382 }, function( prefix
, suffix
) {
383 jQuery
.cssHooks
[ prefix
+ suffix
] = {
384 expand: function( value
) {
388 // Assumes a single number if not a string
389 parts
= typeof value
=== "string" ? value
.split(" ") : [ value
];
391 for ( ; i
< 4; i
++ ) {
392 expanded
[ prefix
+ cssExpand
[ i
] + suffix
] =
393 parts
[ i
] || parts
[ i
- 2 ] || parts
[ 0 ];
400 if ( !rmargin
.test( prefix
) ) {
401 jQuery
.cssHooks
[ prefix
+ suffix
].set = setPositiveNumber
;
406 css: function( name
, value
) {
407 return access( this, function( elem
, name
, value
) {
412 if ( jQuery
.isArray( name
) ) {
413 styles
= getStyles( elem
);
416 for ( ; i
< len
; i
++ ) {
417 map
[ name
[ i
] ] = jQuery
.css( elem
, name
[ i
], false, styles
);
423 return value
!== undefined ?
424 jQuery
.style( elem
, name
, value
) :
425 jQuery
.css( elem
, name
);
426 }, name
, value
, arguments
.length
> 1 );
429 return showHide( this, true );
432 return showHide( this );
434 toggle: function( state
) {
435 if ( typeof state
=== "boolean" ) {
436 return state
? this.show() : this.hide();
439 return this.each(function() {
440 if ( isHidden( this ) ) {
441 jQuery( this ).show();
443 jQuery( this ).hide();