scratch – Rev 125

Subversion Repositories:
Rev:
define([
        "../core",
        "../manipulation" // appendTo
], function( jQuery ) {

var iframe,
        elemdisplay = {};

/**
 * Retrieve the actual display of a element
 * @param {String} name nodeName of the element
 * @param {Object} doc Document object
 */
// Called only from within defaultDisplay
function actualDisplay( name, doc ) {
        var style,
                elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),

                // getDefaultComputedStyle might be reliably used only on attached element
                display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?

                        // Use of this method is a temporary fix (more like optimization) until something better comes along,
                        // since it was removed from specification and supported only in FF
                        style.display : jQuery.css( elem[ 0 ], "display" );

        // We don't have any data stored on the element,
        // so use "detach" method as fast way to get rid of the element
        elem.detach();

        return display;
}

/**
 * Try to determine the default display value of an element
 * @param {String} nodeName
 */
function defaultDisplay( nodeName ) {
        var doc = document,
                display = elemdisplay[ nodeName ];

        if ( !display ) {
                display = actualDisplay( nodeName, doc );

                // If the simple way fails, read from inside an iframe
                if ( display === "none" || !display ) {

                        // Use the already-created iframe if possible
                        iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );

                        // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
                        doc = iframe[ 0 ].contentDocument;

                        // Support: IE
                        doc.write();
                        doc.close();

                        display = actualDisplay( nodeName, doc );
                        iframe.detach();
                }

                // Store the correct default display
                elemdisplay[ nodeName ] = display;
        }

        return display;
}

return defaultDisplay;

});