@@ -22,78 +22,22 @@ exports.HTMLElement = CustomElementRegistry.HTMLElement;
22
22
23
23
const _upgradedProp = '__$CE_upgraded' ;
24
24
25
- /**
26
- * Registers a transformer for a tag that is intended to run server-side.
27
- *
28
- * At the moment, only one transformer is permitted per tag.
29
- */
30
- var transformers = { } ;
31
-
32
- exports . registerTransformer = function registerTransformer ( name , handler ) {
33
- if ( transformers [ name ] && typeof transformers [ name ] !== 'function' ) {
34
- throw new Error ( `Registration failed for '${ name } '. Name is already taken by another transformer.` ) ;
35
- }
36
- transformers [ name ] = handler ;
37
- return handler ;
38
- } ;
39
-
40
25
41
26
function transformTree ( document , visitedNodes , currentNode , callback ) {
42
27
43
28
var task = visitedNodes . has ( currentNode ) ? undefined : callback ( currentNode ) ;
44
29
45
30
visitedNodes . add ( currentNode ) ;
46
31
47
- if ( task !== undefined ) {
48
- let replaceNode = function replaceNode ( results ) {
49
- if ( results === null ) {
50
- currentNode . parentNode . removeChild ( currentNode ) ;
51
- return Promise . resolve ( ) ;
52
- }
53
- if ( typeof results === 'string' ) {
54
- var temp = document . createElement ( 'template' ) ;
55
- temp . innerHTML = results ;
56
- results = temp . content . childNodes ;
57
- }
58
- if ( results ) {
59
- var fragment = document . createDocumentFragment ( ) ;
60
- var newNodes = results . length ? slice . call ( results ) : [ results ] ;
61
-
62
- newNodes . map ( ( newNode ) => {
63
- if ( newNode . parentNode === currentNode ) currentNode . removeChild ( newNode ) ;
64
- fragment . appendChild ( newNode ) ;
65
- } ) ;
66
- currentNode . parentNode . replaceChild ( fragment , currentNode ) ;
67
-
68
- return Promise . all (
69
- newNodes . map ( ( child ) => transformTree ( document , visitedNodes , child , callback ) )
70
- ) ;
71
- }
72
- else {
73
- return Promise . all (
74
- map ( currentNode . childNodes , ( child ) => transformTree ( document , visitedNodes , child , callback ) )
75
- ) ;
76
- }
77
- } ;
32
+ let visitChildren = ( ) => Promise . all (
33
+ map ( currentNode . childNodes , ( child ) => transformTree ( document , visitedNodes , child , callback ) )
34
+ ) ;
78
35
79
- if ( task === null ) {
80
- return replaceNode ( null ) ;
81
- }
82
- if ( task . then ) {
83
- // Promise task; potential transformation
84
- return task . then ( replaceNode ) ;
85
- }
86
- else {
87
- // Syncronous transformation
88
- return replaceNode ( task ) ;
89
- }
36
+ if ( task && task . then ) {
37
+ return task . then ( visitChildren ) ;
90
38
}
91
39
else {
92
- // This element has opted to do nothing to itself.
93
- // Recurse on its children.
94
- return Promise . all (
95
- map ( currentNode . childNodes , ( child ) => transformTree ( document , visitedNodes , child , callback ) )
96
- ) ;
40
+ return visitChildren ( ) ;
97
41
}
98
42
}
99
43
@@ -137,36 +81,6 @@ function renderNode(rootNode) {
137
81
138
82
return transformTree ( document , visitedNodes , rootNode , function render ( element ) {
139
83
140
- var transformer = transformers [ element . localName ] ;
141
-
142
- if ( transformer && ! element . serverTransformed ) {
143
- let result = transformer ( element , document ) ;
144
- element . serverTransformed = true ;
145
-
146
- let handleTransformerResult = ( result ) => {
147
- if ( result === undefined && customElements . get ( element . localName ) ) {
148
- // Re-render the transformed element as a custom element,
149
- // since a corresponding custom tag is defined.
150
- return render ( element ) ;
151
- }
152
- if ( result === undefined ) {
153
- // Replace the element with its children; its server-side duties are fulfilled.
154
- return element . childNodes ;
155
- }
156
- else {
157
- // The transformer has opted to do something specific.
158
- return result ;
159
- }
160
- } ;
161
-
162
- if ( result && result . then ) {
163
- return result . then ( handleTransformerResult ) ;
164
- }
165
- else {
166
- return handleTransformerResult ( result ) ;
167
- }
168
- }
169
-
170
84
const definition = customElements . getDefinition ( element . localName ) ;
171
85
172
86
if ( definition ) {
@@ -177,17 +91,9 @@ function renderNode(rootNode) {
177
91
upgradedNodes . add ( element ) ;
178
92
179
93
if ( definition . connectedCallback ) {
180
- try {
181
- let result = definition . connectedCallback . call ( element , document ) ;
182
- if ( result && result . then ) {
183
- // Client-side custom elements never replace themselves;
184
- // resolve with undefined to prevent such a scenario.
185
- return result . then ( ( ) => undefined ) ;
186
- }
187
- }
188
- catch ( err ) {
189
- return Promise . reject ( err ) ;
190
- }
94
+ return new Promise ( function ( resolve , reject ) {
95
+ resolve ( definition . connectedCallback . call ( element , document ) ) ;
96
+ } ) ;
191
97
}
192
98
}
193
99
} )
@@ -276,9 +182,3 @@ function map (arrayLike, fn) {
276
182
}
277
183
return results ;
278
184
}
279
-
280
- function isClass ( v ) {
281
- return typeof v === 'function' && / ^ \s * c l a s s \s + / . test ( v . toString ( ) ) ;
282
- }
283
-
284
- var slice = Array . prototype . slice ;
0 commit comments