tuiHoneyPot

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

buildFragment.js (2490B)


      1 define( [
      2 	"../core",
      3 	"../core/toType",
      4 	"../core/isAttached",
      5 	"./var/rtagName",
      6 	"./var/rscriptType",
      7 	"./wrapMap",
      8 	"./getAll",
      9 	"./setGlobalEval"
     10 ], function( jQuery, toType, isAttached, rtagName, rscriptType, wrapMap, getAll, setGlobalEval ) {
     11 
     12 "use strict";
     13 
     14 var rhtml = /<|&#?\w+;/;
     15 
     16 function buildFragment( elems, context, scripts, selection, ignored ) {
     17 	var elem, tmp, tag, wrap, attached, j,
     18 		fragment = context.createDocumentFragment(),
     19 		nodes = [],
     20 		i = 0,
     21 		l = elems.length;
     22 
     23 	for ( ; i < l; i++ ) {
     24 		elem = elems[ i ];
     25 
     26 		if ( elem || elem === 0 ) {
     27 
     28 			// Add nodes directly
     29 			if ( toType( elem ) === "object" ) {
     30 
     31 				// Support: Android <=4.0 only, PhantomJS 1 only
     32 				// push.apply(_, arraylike) throws on ancient WebKit
     33 				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
     34 
     35 			// Convert non-html into a text node
     36 			} else if ( !rhtml.test( elem ) ) {
     37 				nodes.push( context.createTextNode( elem ) );
     38 
     39 			// Convert html into DOM nodes
     40 			} else {
     41 				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
     42 
     43 				// Deserialize a standard representation
     44 				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
     45 				wrap = wrapMap[ tag ] || wrapMap._default;
     46 				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
     47 
     48 				// Descend through wrappers to the right content
     49 				j = wrap[ 0 ];
     50 				while ( j-- ) {
     51 					tmp = tmp.lastChild;
     52 				}
     53 
     54 				// Support: Android <=4.0 only, PhantomJS 1 only
     55 				// push.apply(_, arraylike) throws on ancient WebKit
     56 				jQuery.merge( nodes, tmp.childNodes );
     57 
     58 				// Remember the top-level container
     59 				tmp = fragment.firstChild;
     60 
     61 				// Ensure the created nodes are orphaned (trac-12392)
     62 				tmp.textContent = "";
     63 			}
     64 		}
     65 	}
     66 
     67 	// Remove wrapper from fragment
     68 	fragment.textContent = "";
     69 
     70 	i = 0;
     71 	while ( ( elem = nodes[ i++ ] ) ) {
     72 
     73 		// Skip elements already in the context collection (trac-4087)
     74 		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
     75 			if ( ignored ) {
     76 				ignored.push( elem );
     77 			}
     78 			continue;
     79 		}
     80 
     81 		attached = isAttached( elem );
     82 
     83 		// Append to fragment
     84 		tmp = getAll( fragment.appendChild( elem ), "script" );
     85 
     86 		// Preserve script evaluation history
     87 		if ( attached ) {
     88 			setGlobalEval( tmp );
     89 		}
     90 
     91 		// Capture executables
     92 		if ( scripts ) {
     93 			j = 0;
     94 			while ( ( elem = tmp[ j++ ] ) ) {
     95 				if ( rscriptType.test( elem.type || "" ) ) {
     96 					scripts.push( elem );
     97 				}
     98 			}
     99 		}
    100 	}
    101 
    102 	return fragment;
    103 }
    104 
    105 return buildFragment;
    106 } );