corrade-nucleus-nucleons – Rev 20

Subversion Repositories:
Rev:
define( [
        "../core",
        "./var/rtagName",
        "./var/rscriptType",
        "./wrapMap",
        "./getAll",
        "./setGlobalEval"
], function( jQuery, rtagName, rscriptType, wrapMap, getAll, setGlobalEval ) {

"use strict";

var rhtml = /<|&#?\w+;/;

function buildFragment( elems, context, scripts, selection, ignored ) {
        var elem, tmp, tag, wrap, contains, j,
                fragment = context.createDocumentFragment(),
                nodes = [],
                i = 0,
                l = elems.length;

        for ( ; i < l; i++ ) {
                elem = elems[ i ];

                if ( elem || elem === 0 ) {

                        // Add nodes directly
                        if ( jQuery.type( elem ) === "object" ) {

                                // Support: Android <=4.0 only, PhantomJS 1 only
                                // push.apply(_, arraylike) throws on ancient WebKit
                                jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );

                        // Convert non-html into a text node
                        } else if ( !rhtml.test( elem ) ) {
                                nodes.push( context.createTextNode( elem ) );

                        // Convert html into DOM nodes
                        } else {
                                tmp = tmp || fragment.appendChild( context.createElement( "div" ) );

                                // Deserialize a standard representation
                                tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
                                wrap = wrapMap[ tag ] || wrapMap._default;
                                tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];

                                // Descend through wrappers to the right content
                                j = wrap[ 0 ];
                                while ( j-- ) {
                                        tmp = tmp.lastChild;
                                }

                                // Support: Android <=4.0 only, PhantomJS 1 only
                                // push.apply(_, arraylike) throws on ancient WebKit
                                jQuery.merge( nodes, tmp.childNodes );

                                // Remember the top-level container
                                tmp = fragment.firstChild;

                                // Ensure the created nodes are orphaned (#12392)
                                tmp.textContent = "";
                        }
                }
        }

        // Remove wrapper from fragment
        fragment.textContent = "";

        i = 0;
        while ( ( elem = nodes[ i++ ] ) ) {

                // Skip elements already in the context collection (trac-4087)
                if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
                        if ( ignored ) {
                                ignored.push( elem );
                        }
                        continue;
                }

                contains = jQuery.contains( elem.ownerDocument, elem );

                // Append to fragment
                tmp = getAll( fragment.appendChild( elem ), "script" );

                // Preserve script evaluation history
                if ( contains ) {
                        setGlobalEval( tmp );
                }

                // Capture executables
                if ( scripts ) {
                        j = 0;
                        while ( ( elem = tmp[ j++ ] ) ) {
                                if ( rscriptType.test( elem.type || "" ) ) {
                                        scripts.push( elem );
                                }
                        }
                }
        }

        return fragment;
}

return buildFragment;
} );