Permalink
Cannot retrieve contributors at this time
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
104 lines (81 sloc)
2.4 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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; | |
| } ); |