/pack-rat/003_pack_rat/pack-rat/node_modules/jquery/src/css/showHide.js |
@@ -0,0 +1,105 @@ |
define( [ |
"../core", |
"../data/var/dataPriv", |
"../css/var/isHiddenWithinTree" |
], function( jQuery, dataPriv, isHiddenWithinTree ) { |
|
"use strict"; |
|
var defaultDisplayMap = {}; |
|
function getDefaultDisplay( elem ) { |
var temp, |
doc = elem.ownerDocument, |
nodeName = elem.nodeName, |
display = defaultDisplayMap[ nodeName ]; |
|
if ( display ) { |
return display; |
} |
|
temp = doc.body.appendChild( doc.createElement( nodeName ) ); |
display = jQuery.css( temp, "display" ); |
|
temp.parentNode.removeChild( temp ); |
|
if ( display === "none" ) { |
display = "block"; |
} |
defaultDisplayMap[ nodeName ] = display; |
|
return display; |
} |
|
function showHide( elements, show ) { |
var display, elem, |
values = [], |
index = 0, |
length = elements.length; |
|
// Determine new display value for elements that need to change |
for ( ; index < length; index++ ) { |
elem = elements[ index ]; |
if ( !elem.style ) { |
continue; |
} |
|
display = elem.style.display; |
if ( show ) { |
|
// Since we force visibility upon cascade-hidden elements, an immediate (and slow) |
// check is required in this first loop unless we have a nonempty display value (either |
// inline or about-to-be-restored) |
if ( display === "none" ) { |
values[ index ] = dataPriv.get( elem, "display" ) || null; |
if ( !values[ index ] ) { |
elem.style.display = ""; |
} |
} |
if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { |
values[ index ] = getDefaultDisplay( elem ); |
} |
} else { |
if ( display !== "none" ) { |
values[ index ] = "none"; |
|
// Remember what we're overwriting |
dataPriv.set( elem, "display", display ); |
} |
} |
} |
|
// Set the display of the elements in a second loop to avoid constant reflow |
for ( index = 0; index < length; index++ ) { |
if ( values[ index ] != null ) { |
elements[ index ].style.display = values[ index ]; |
} |
} |
|
return elements; |
} |
|
jQuery.fn.extend( { |
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 ( isHiddenWithinTree( this ) ) { |
jQuery( this ).show(); |
} else { |
jQuery( this ).hide(); |
} |
} ); |
} |
} ); |
|
return showHide; |
} ); |