1
1
/** @import { Effect, TemplateNode } from '#client' */
2
2
import { hydrate_next , hydrate_node , hydrating , set_hydrate_node } from './hydration.js' ;
3
- import { create_text , get_first_child , is_firefox } from './operations.js' ;
3
+ import {
4
+ create_text ,
5
+ get_first_child ,
6
+ is_firefox ,
7
+ create_element ,
8
+ create_fragment ,
9
+ create_comment ,
10
+ set_attribute
11
+ } from './operations.js' ;
4
12
import { create_fragment_from_html } from './reconciler.js' ;
5
13
import { active_effect } from '../runtime.js' ;
6
14
import {
@@ -79,14 +87,14 @@ export function template(content, flags) {
79
87
* @param {Array<string | undefined> } [namespace_stack]
80
88
*/
81
89
function structure_to_fragment ( structure , ns , namespace_stack = [ ] , foreign_object_count = 0 ) {
82
- var fragment = document . createDocumentFragment ( ) ;
90
+ var fragment = create_fragment ( ) ;
83
91
for ( var i = 0 ; i < structure . length ; i += 1 ) {
84
92
var item = structure [ i ] ;
85
93
if ( item == null || Array . isArray ( item ) ) {
86
94
const data = item ? item [ 0 ] : '' ;
87
- fragment . insertBefore ( document . createComment ( data ) , null ) ;
95
+ fragment . insertBefore ( create_comment ( data ) , null ) ;
88
96
} else if ( typeof item === 'string' ) {
89
- fragment . appendChild ( document . createTextNode ( item ) ) ;
97
+ fragment . appendChild ( create_text ( item ) ) ;
90
98
continue ;
91
99
} else {
92
100
let namespace =
@@ -107,25 +115,10 @@ function structure_to_fragment(structure, ns, namespace_stack = [], foreign_obje
107
115
if ( namespace !== namespace_stack [ namespace_stack . length - 1 ] ) {
108
116
namespace_stack . push ( namespace ) ;
109
117
}
110
- var args = [ item . e ] ;
111
- if ( item . is ) {
112
- // @ts -ignore
113
- args . push ( { is : item . is } ) ;
114
- }
115
- if ( namespace ) {
116
- args . unshift ( namespace ) ;
117
- }
118
- var element = /** @type {HTMLElement } */ (
119
- // @ts -ignore
120
- ( namespace ? document . createElementNS : document . createElement ) . call ( document , ...args )
121
- ) ;
118
+ var element = create_element ( item . e , namespace , item . is ) ;
122
119
123
120
for ( var key in item . p ) {
124
- if ( key . startsWith ( 'xlink:' ) ) {
125
- element . setAttributeNS ( 'http://www.w3.org/1999/xlink' , key , item . p [ key ] ?? '' ) ;
126
- continue ;
127
- }
128
- element . setAttribute ( key , item . p [ key ] ?? '' ) ;
121
+ set_attribute ( element , key , item . p [ key ] ) ;
129
122
}
130
123
if ( item . c ) {
131
124
( element . tagName === 'TEMPLATE'
0 commit comments