@@ -337,17 +337,23 @@ export class Template {
337337 // We have a part for each match found
338338 partIndex += lastIndex ;
339339
340- // We keep this current node, but reset its content to the last
341- // literal part. We insert new literal nodes before this so that the
342- // tree walker keeps its position correctly.
343- node . textContent = strings [ lastIndex ] ;
344-
345340 // Generate a new text node for each literal section
346341 // These nodes are also used as the markers for node parts
347342 for ( let i = 0 ; i < lastIndex ; i ++ ) {
348- parent . insertBefore ( document . createTextNode ( strings [ i ] ) , node ) ;
343+ console . log ( parent . nodeName ) ;
344+ parent . insertBefore (
345+ ( strings [ i ] === '' )
346+ ? document . createComment ( '' )
347+ : document . createTextNode ( strings [ i ] ) ,
348+ node ) ;
349349 this . parts . push ( new TemplatePart ( 'node' , index ++ ) ) ;
350350 }
351+ parent . insertBefore (
352+ strings [ lastIndex ] === '' ?
353+ document . createComment ( '' ) :
354+ document . createTextNode ( strings [ lastIndex ] ) ,
355+ node ) ;
356+ nodesToRemove . push ( node ) ;
351357 } else if (
352358 node . nodeType === 8 /* Node.COMMENT_NODE */ &&
353359 node . nodeValue === marker ) {
@@ -365,7 +371,7 @@ export class Template {
365371 const previousSibling = node . previousSibling ;
366372 if ( previousSibling === null || previousSibling !== previousNode ||
367373 previousSibling . nodeType !== Node . TEXT_NODE ) {
368- parent . insertBefore ( document . createTextNode ( '' ) , node ) ;
374+ parent . insertBefore ( document . createComment ( '' ) , node ) ;
369375 } else {
370376 index -- ;
371377 }
@@ -375,7 +381,7 @@ export class Template {
375381 // We don't have to check if the next node is going to be removed,
376382 // because that node will induce a new marker if so.
377383 if ( node . nextSibling === null ) {
378- parent . insertBefore ( document . createTextNode ( '' ) , node ) ;
384+ parent . insertBefore ( document . createComment ( '' ) , node ) ;
379385 } else {
380386 index -- ;
381387 }
@@ -738,7 +744,19 @@ export class TemplateInstance {
738744 index ++ ;
739745 walker . nextNode ( ) ;
740746 }
741- this . _parts . push ( this . _partCallback ( this , part , walker . currentNode ) ) ;
747+ let node = walker . currentNode ;
748+ // Swap the comment placeholders for empty text nodes
749+ // The nextSibling of the part placeholder is the part endNode
750+ if ( node . nextSibling !== null && node . nextSibling ! . nodeType === 8 ) {
751+ node . parentNode ! . replaceChild ( document . createTextNode ( '' ) , node . nextSibling ! ) ;
752+ }
753+ // The part placeholder is the part startNode
754+ if ( node . nodeType === 8 ) {
755+ node = document . createTextNode ( '' ) ;
756+ walker . currentNode . parentNode ! . replaceChild ( node , walker . currentNode ) ;
757+ walker . currentNode = node ;
758+ }
759+ this . _parts . push ( this . _partCallback ( this , part , node ) ) ;
742760 }
743761 }
744762 return fragment ;
0 commit comments