@@ -22,78 +22,22 @@ exports.HTMLElement = CustomElementRegistry.HTMLElement;
2222
2323const _upgradedProp = '__$CE_upgraded' ;
2424
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-
4025
4126function transformTree ( document , visitedNodes , currentNode , callback ) {
4227
4328 var task = visitedNodes . has ( currentNode ) ? undefined : callback ( currentNode ) ;
4429
4530 visitedNodes . add ( currentNode ) ;
4631
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+ ) ;
7835
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 ) ;
9038 }
9139 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 ( ) ;
9741 }
9842}
9943
@@ -137,36 +81,6 @@ function renderNode(rootNode) {
13781
13882 return transformTree ( document , visitedNodes , rootNode , function render ( element ) {
13983
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-
17084 const definition = customElements . getDefinition ( element . localName ) ;
17185
17286 if ( definition ) {
@@ -177,17 +91,9 @@ function renderNode(rootNode) {
17791 upgradedNodes . add ( element ) ;
17892
17993 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+ } ) ;
19197 }
19298 }
19399 } )
@@ -276,9 +182,3 @@ function map (arrayLike, fn) {
276182 }
277183 return results ;
278184}
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