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