diff options
Diffstat (limited to 'bower_components/jquery/src/css.js')
| -rw-r--r-- | bower_components/jquery/src/css.js | 451 | 
1 files changed, 451 insertions, 0 deletions
| diff --git a/bower_components/jquery/src/css.js b/bower_components/jquery/src/css.js new file mode 100644 index 0000000..6c20b32 --- /dev/null +++ b/bower_components/jquery/src/css.js @@ -0,0 +1,451 @@ +define([ +	"./core", +	"./var/pnum", +	"./core/access", +	"./css/var/rmargin", +	"./css/var/rnumnonpx", +	"./css/var/cssExpand", +	"./css/var/isHidden", +	"./css/var/getStyles", +	"./css/curCSS", +	"./css/defaultDisplay", +	"./css/addGetHookIf", +	"./css/support", +	"./data/var/data_priv", + +	"./core/init", +	"./css/swap", +	"./core/ready", +	"./selector" // contains +], function( jQuery, pnum, access, rmargin, rnumnonpx, cssExpand, isHidden, +	getStyles, curCSS, defaultDisplay, addGetHookIf, support, data_priv ) { + +var +	// 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 +	rdisplayswap = /^(none|table(?!-c[ea]).+)/, +	rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ), +	rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ), + +	cssShow = { position: "absolute", visibility: "hidden", display: "block" }, +	cssNormalTransform = { +		letterSpacing: "0", +		fontWeight: "400" +	}, + +	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; + +// return a css property mapped to a potentially vendor prefixed property +function vendorPropName( style, name ) { + +	// shortcut for names that are not vendor prefixed +	if ( name in style ) { +		return name; +	} + +	// check for vendor prefixed names +	var capName = name[0].toUpperCase() + name.slice(1), +		origName = name, +		i = cssPrefixes.length; + +	while ( i-- ) { +		name = cssPrefixes[ i ] + capName; +		if ( name in style ) { +			return name; +		} +	} + +	return origName; +} + +function setPositiveNumber( elem, value, subtract ) { +	var matches = rnumsplit.exec( value ); +	return matches ? +		// Guard against undefined "subtract", e.g., when used as in cssHooks +		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : +		value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { +	var i = extra === ( isBorderBox ? "border" : "content" ) ? +		// If we already have the right measurement, avoid augmentation +		4 : +		// Otherwise initialize for horizontal or vertical properties +		name === "width" ? 1 : 0, + +		val = 0; + +	for ( ; i < 4; i += 2 ) { +		// both box models exclude margin, so add it if we want it +		if ( extra === "margin" ) { +			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); +		} + +		if ( isBorderBox ) { +			// border-box includes padding, so remove it if we want content +			if ( extra === "content" ) { +				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); +			} + +			// at this point, extra isn't border nor margin, so remove border +			if ( extra !== "margin" ) { +				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); +			} +		} else { +			// at this point, extra isn't content, so add padding +			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + +			// at this point, extra isn't content nor padding, so add border +			if ( extra !== "padding" ) { +				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); +			} +		} +	} + +	return val; +} + +function getWidthOrHeight( elem, name, extra ) { + +	// Start with offset property, which is equivalent to the border-box value +	var valueIsBorderBox = true, +		val = name === "width" ? elem.offsetWidth : elem.offsetHeight, +		styles = getStyles( elem ), +		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + +	// some non-html elements return undefined for offsetWidth, so check for null/undefined +	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 +	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 +	if ( val <= 0 || val == null ) { +		// Fall back to computed then uncomputed css if necessary +		val = curCSS( elem, name, styles ); +		if ( val < 0 || val == null ) { +			val = elem.style[ name ]; +		} + +		// Computed unit is not pixels. Stop here and return. +		if ( rnumnonpx.test(val) ) { +			return val; +		} + +		// we need the check for style in case a browser which returns unreliable values +		// for getComputedStyle silently falls back to the reliable elem.style +		valueIsBorderBox = isBorderBox && +			( support.boxSizingReliable() || val === elem.style[ name ] ); + +		// Normalize "", auto, and prepare for extra +		val = parseFloat( val ) || 0; +	} + +	// use the active box-sizing model to add/subtract irrelevant styles +	return ( val + +		augmentWidthOrHeight( +			elem, +			name, +			extra || ( isBorderBox ? "border" : "content" ), +			valueIsBorderBox, +			styles +		) +	) + "px"; +} + +function showHide( elements, show ) { +	var display, elem, hidden, +		values = [], +		index = 0, +		length = elements.length; + +	for ( ; index < length; index++ ) { +		elem = elements[ index ]; +		if ( !elem.style ) { +			continue; +		} + +		values[ index ] = data_priv.get( elem, "olddisplay" ); +		display = elem.style.display; +		if ( show ) { +			// Reset the inline display of this element to learn if it is +			// being hidden by cascaded rules or not +			if ( !values[ index ] && display === "none" ) { +				elem.style.display = ""; +			} + +			// Set elements which have been overridden with display: none +			// in a stylesheet to whatever the default browser style is +			// for such an element +			if ( elem.style.display === "" && isHidden( elem ) ) { +				values[ index ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) ); +			} +		} else { +			hidden = isHidden( elem ); + +			if ( display !== "none" || !hidden ) { +				data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); +			} +		} +	} + +	// Set the display of most of the elements in a second loop +	// to avoid the constant reflow +	for ( index = 0; index < length; index++ ) { +		elem = elements[ index ]; +		if ( !elem.style ) { +			continue; +		} +		if ( !show || elem.style.display === "none" || elem.style.display === "" ) { +			elem.style.display = show ? values[ index ] || "" : "none"; +		} +	} + +	return elements; +} + +jQuery.extend({ +	// Add in style property hooks for overriding the default +	// behavior of getting and setting a style property +	cssHooks: { +		opacity: { +			get: function( elem, computed ) { +				if ( computed ) { +					// We should always get a number back from opacity +					var ret = curCSS( elem, "opacity" ); +					return ret === "" ? "1" : ret; +				} +			} +		} +	}, + +	// Don't automatically add "px" to these possibly-unitless properties +	cssNumber: { +		"columnCount": true, +		"fillOpacity": true, +		"flexGrow": true, +		"flexShrink": true, +		"fontWeight": true, +		"lineHeight": true, +		"opacity": true, +		"order": true, +		"orphans": true, +		"widows": true, +		"zIndex": true, +		"zoom": true +	}, + +	// Add in properties whose names you wish to fix before +	// setting or getting the value +	cssProps: { +		// normalize float css property +		"float": "cssFloat" +	}, + +	// Get and set the style property on a DOM Node +	style: function( elem, name, value, extra ) { +		// Don't set styles on text and comment nodes +		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { +			return; +		} + +		// Make sure that we're working with the right name +		var ret, type, hooks, +			origName = jQuery.camelCase( name ), +			style = elem.style; + +		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + +		// gets hook for the prefixed version +		// followed by the unprefixed version +		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + +		// Check if we're setting a value +		if ( value !== undefined ) { +			type = typeof value; + +			// convert relative number strings (+= or -=) to relative numbers. #7345 +			if ( type === "string" && (ret = rrelNum.exec( value )) ) { +				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); +				// Fixes bug #9237 +				type = "number"; +			} + +			// Make sure that null and NaN values aren't set. See: #7116 +			if ( value == null || value !== value ) { +				return; +			} + +			// If a number was passed in, add 'px' to the (except for certain CSS properties) +			if ( type === "number" && !jQuery.cssNumber[ origName ] ) { +				value += "px"; +			} + +			// Fixes #8908, it can be done more correctly by specifying setters in cssHooks, +			// but it would mean to define eight (for every problematic property) identical functions +			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { +				style[ name ] = "inherit"; +			} + +			// If a hook was provided, use that value, otherwise just set the specified value +			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { +				style[ name ] = value; +			} + +		} else { +			// If a hook was provided get the non-computed value from there +			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { +				return ret; +			} + +			// Otherwise just get the value from the style object +			return style[ name ]; +		} +	}, + +	css: function( elem, name, extra, styles ) { +		var val, num, hooks, +			origName = jQuery.camelCase( name ); + +		// Make sure that we're working with the right name +		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + +		// gets hook for the prefixed version +		// followed by the unprefixed version +		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + +		// If a hook was provided get the computed value from there +		if ( hooks && "get" in hooks ) { +			val = hooks.get( elem, true, extra ); +		} + +		// Otherwise, if a way to get the computed value exists, use that +		if ( val === undefined ) { +			val = curCSS( elem, name, styles ); +		} + +		//convert "normal" to computed value +		if ( val === "normal" && name in cssNormalTransform ) { +			val = cssNormalTransform[ name ]; +		} + +		// Return, converting to number if forced or a qualifier was provided and val looks numeric +		if ( extra === "" || extra ) { +			num = parseFloat( val ); +			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; +		} +		return val; +	} +}); + +jQuery.each([ "height", "width" ], function( i, name ) { +	jQuery.cssHooks[ name ] = { +		get: function( elem, computed, extra ) { +			if ( computed ) { +				// certain elements can have dimension info if we invisibly show them +				// however, it must have a current display style that would benefit from this +				return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ? +					jQuery.swap( elem, cssShow, function() { +						return getWidthOrHeight( elem, name, extra ); +					}) : +					getWidthOrHeight( elem, name, extra ); +			} +		}, + +		set: function( elem, value, extra ) { +			var styles = extra && getStyles( elem ); +			return setPositiveNumber( elem, value, extra ? +				augmentWidthOrHeight( +					elem, +					name, +					extra, +					jQuery.css( elem, "boxSizing", false, styles ) === "border-box", +					styles +				) : 0 +			); +		} +	}; +}); + +// Support: Android 2.3 +jQuery.cssHooks.marginRight = addGetHookIf( 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" ] ); +		} +	} +); + +// These hooks are used by animate to expand properties +jQuery.each({ +	margin: "", +	padding: "", +	border: "Width" +}, function( prefix, suffix ) { +	jQuery.cssHooks[ prefix + suffix ] = { +		expand: function( value ) { +			var i = 0, +				expanded = {}, + +				// assumes a single number if not a string +				parts = typeof value === "string" ? value.split(" ") : [ value ]; + +			for ( ; i < 4; i++ ) { +				expanded[ prefix + cssExpand[ i ] + suffix ] = +					parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; +			} + +			return expanded; +		} +	}; + +	if ( !rmargin.test( prefix ) ) { +		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; +	} +}); + +jQuery.fn.extend({ +	css: function( name, value ) { +		return access( this, function( elem, name, value ) { +			var styles, len, +				map = {}, +				i = 0; + +			if ( jQuery.isArray( name ) ) { +				styles = getStyles( elem ); +				len = name.length; + +				for ( ; i < len; i++ ) { +					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); +				} + +				return map; +			} + +			return value !== undefined ? +				jQuery.style( elem, name, value ) : +				jQuery.css( elem, name ); +		}, name, value, arguments.length > 1 ); +	}, +	show: function() { +		return showHide( this, true ); +	}, +	hide: function() { +		return showHide( this ); +	}, +	toggle: function( state ) { +		if ( typeof state === "boolean" ) { +			return state ? this.show() : this.hide(); +		} + +		return this.each(function() { +			if ( isHidden( this ) ) { +				jQuery( this ).show(); +			} else { +				jQuery( this ).hide(); +			} +		}); +	} +}); + +return jQuery; +}); | 
