tuiHoneyPot

front and back end of my TUI honeypot
Log | Files | Refs | README

showHide.js (2304B)


      1 define( [
      2 	"../core",
      3 	"../data/var/dataPriv",
      4 	"../css/var/isHiddenWithinTree"
      5 ], function( jQuery, dataPriv, isHiddenWithinTree ) {
      6 
      7 "use strict";
      8 
      9 var defaultDisplayMap = {};
     10 
     11 function getDefaultDisplay( elem ) {
     12 	var temp,
     13 		doc = elem.ownerDocument,
     14 		nodeName = elem.nodeName,
     15 		display = defaultDisplayMap[ nodeName ];
     16 
     17 	if ( display ) {
     18 		return display;
     19 	}
     20 
     21 	temp = doc.body.appendChild( doc.createElement( nodeName ) );
     22 	display = jQuery.css( temp, "display" );
     23 
     24 	temp.parentNode.removeChild( temp );
     25 
     26 	if ( display === "none" ) {
     27 		display = "block";
     28 	}
     29 	defaultDisplayMap[ nodeName ] = display;
     30 
     31 	return display;
     32 }
     33 
     34 function showHide( elements, show ) {
     35 	var display, elem,
     36 		values = [],
     37 		index = 0,
     38 		length = elements.length;
     39 
     40 	// Determine new display value for elements that need to change
     41 	for ( ; index < length; index++ ) {
     42 		elem = elements[ index ];
     43 		if ( !elem.style ) {
     44 			continue;
     45 		}
     46 
     47 		display = elem.style.display;
     48 		if ( show ) {
     49 
     50 			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
     51 			// check is required in this first loop unless we have a nonempty display value (either
     52 			// inline or about-to-be-restored)
     53 			if ( display === "none" ) {
     54 				values[ index ] = dataPriv.get( elem, "display" ) || null;
     55 				if ( !values[ index ] ) {
     56 					elem.style.display = "";
     57 				}
     58 			}
     59 			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
     60 				values[ index ] = getDefaultDisplay( elem );
     61 			}
     62 		} else {
     63 			if ( display !== "none" ) {
     64 				values[ index ] = "none";
     65 
     66 				// Remember what we're overwriting
     67 				dataPriv.set( elem, "display", display );
     68 			}
     69 		}
     70 	}
     71 
     72 	// Set the display of the elements in a second loop to avoid constant reflow
     73 	for ( index = 0; index < length; index++ ) {
     74 		if ( values[ index ] != null ) {
     75 			elements[ index ].style.display = values[ index ];
     76 		}
     77 	}
     78 
     79 	return elements;
     80 }
     81 
     82 jQuery.fn.extend( {
     83 	show: function() {
     84 		return showHide( this, true );
     85 	},
     86 	hide: function() {
     87 		return showHide( this );
     88 	},
     89 	toggle: function( state ) {
     90 		if ( typeof state === "boolean" ) {
     91 			return state ? this.show() : this.hide();
     92 		}
     93 
     94 		return this.each( function() {
     95 			if ( isHiddenWithinTree( this ) ) {
     96 				jQuery( this ).show();
     97 			} else {
     98 				jQuery( this ).hide();
     99 			}
    100 		} );
    101 	}
    102 } );
    103 
    104 return showHide;
    105 } );