@@ -163,7 +163,7 @@ export default class Element extends Node {
163
163
164
164
const childState = {
165
165
parentNode : this . var ,
166
- parentNodes : block . getUniqueName ( `${ this . var } _nodes` )
166
+ parentNodes : parentNodes && block . getUniqueName ( `${ this . var } _nodes` ) // if we're in unclaimable territory, i.e. <head>, parentNodes is null
167
167
} ;
168
168
169
169
const name = this . var ;
@@ -175,25 +175,32 @@ export default class Element extends Node {
175
175
parentNode ;
176
176
177
177
block . addVariable ( name ) ;
178
+ const renderStatement = getRenderStatement ( this . generator , this . namespace , this . name ) ;
178
179
block . builders . create . addLine (
179
- `${ name } = ${ getRenderStatement (
180
- this . generator ,
181
- this . namespace ,
182
- this . name
183
- ) } ;`
180
+ `${ name } = ${ renderStatement } ;`
184
181
) ;
185
182
186
183
if ( this . generator . hydratable ) {
187
- block . builders . claim . addBlock ( deindent `
188
- ${ name } = ${ getClaimStatement ( generator , this . namespace , parentNodes , this ) } ;
189
- var ${ childState . parentNodes } = @children(${ name } );
190
- ` ) ;
184
+ if ( parentNodes ) {
185
+ block . builders . claim . addBlock ( deindent `
186
+ ${ name } = ${ getClaimStatement ( generator , this . namespace , parentNodes , this ) } ;
187
+ var ${ childState . parentNodes } = @children(${ name } );
188
+ ` ) ;
189
+ } else {
190
+ block . builders . claim . addLine (
191
+ `${ name } = ${ renderStatement } ;`
192
+ ) ;
193
+ }
191
194
}
192
195
193
196
if ( initialMountNode ) {
194
197
block . builders . mount . addLine (
195
198
`@appendNode(${ name } , ${ initialMountNode } );`
196
199
) ;
200
+
201
+ if ( initialMountNode === 'document.head' ) {
202
+ block . builders . unmount . addLine ( `@detachNode(${ name } );` ) ;
203
+ }
197
204
} else {
198
205
block . builders . mount . addLine ( `@insertNode(${ name } , #target, anchor);` ) ;
199
206
@@ -394,9 +401,11 @@ export default class Element extends Node {
394
401
block . builders . mount . addBlock ( this . initialUpdate ) ;
395
402
}
396
403
397
- block . builders . claim . addLine (
398
- `${ childState . parentNodes } .forEach(@detachNode);`
399
- ) ;
404
+ if ( childState . parentNodes ) {
405
+ block . builders . claim . addLine (
406
+ `${ childState . parentNodes } .forEach(@detachNode);`
407
+ ) ;
408
+ }
400
409
401
410
function toHTML ( node : Element | Text ) {
402
411
if ( node . type === 'Text' ) return node . data ;
0 commit comments