@@ -92,6 +92,7 @@ const preprocessors = {
92
92
block : Block ,
93
93
state : State ,
94
94
node : Node ,
95
+ inEachBlock : boolean ,
95
96
elementStack : Node [ ] ,
96
97
stripWhitespace : boolean ,
97
98
nextSibling : Node
@@ -112,7 +113,7 @@ const preprocessors = {
112
113
node . _state = getChildState ( state ) ;
113
114
114
115
blocks . push ( node . _block ) ;
115
- preprocessChildren ( generator , node . _block , node . _state , node , elementStack , stripWhitespace , nextSibling ) ;
116
+ preprocessChildren ( generator , node . _block , node . _state , node , inEachBlock , elementStack , stripWhitespace , nextSibling ) ;
116
117
117
118
if ( node . _block . dependencies . size > 0 ) {
118
119
dynamic = true ;
@@ -137,6 +138,7 @@ const preprocessors = {
137
138
node . else . _block ,
138
139
node . else . _state ,
139
140
node . else ,
141
+ inEachBlock ,
140
142
elementStack ,
141
143
stripWhitespace ,
142
144
nextSibling
@@ -165,6 +167,7 @@ const preprocessors = {
165
167
block : Block ,
166
168
state : State ,
167
169
node : Node ,
170
+ inEachBlock : boolean ,
168
171
elementStack : Node [ ] ,
169
172
stripWhitespace : boolean ,
170
173
nextSibling : Node
@@ -214,7 +217,7 @@ const preprocessors = {
214
217
} ) ;
215
218
216
219
generator . blocks . push ( node . _block ) ;
217
- preprocessChildren ( generator , node . _block , node . _state , node , elementStack , stripWhitespace , nextSibling ) ;
220
+ preprocessChildren ( generator , node . _block , node . _state , node , true , elementStack , stripWhitespace , nextSibling ) ;
218
221
block . addDependencies ( node . _block . dependencies ) ;
219
222
node . _block . hasUpdateMethod = node . _block . dependencies . size > 0 ;
220
223
@@ -231,6 +234,7 @@ const preprocessors = {
231
234
node . else . _block ,
232
235
node . else . _state ,
233
236
node . else ,
237
+ inEachBlock ,
234
238
elementStack ,
235
239
stripWhitespace ,
236
240
nextSibling
@@ -244,6 +248,7 @@ const preprocessors = {
244
248
block : Block ,
245
249
state : State ,
246
250
node : Node ,
251
+ inEachBlock : boolean ,
247
252
elementStack : Node [ ] ,
248
253
stripWhitespace : boolean ,
249
254
nextSibling : Node
@@ -344,12 +349,12 @@ const preprocessors = {
344
349
} ) ;
345
350
346
351
generator . blocks . push ( node . _block ) ;
347
- preprocessChildren ( generator , node . _block , node . _state , node , elementStack , stripWhitespace , nextSibling ) ;
352
+ preprocessChildren ( generator , node . _block , node . _state , node , inEachBlock , elementStack , stripWhitespace , nextSibling ) ;
348
353
block . addDependencies ( node . _block . dependencies ) ;
349
354
node . _block . hasUpdateMethod = node . _block . dependencies . size > 0 ;
350
355
} else {
351
356
if ( node . name === 'pre' || node . name === 'textarea' ) stripWhitespace = false ;
352
- preprocessChildren ( generator , block , node . _state , node , elementStack . concat ( node ) , stripWhitespace , nextSibling ) ;
357
+ preprocessChildren ( generator , block , node . _state , node , inEachBlock , elementStack . concat ( node ) , stripWhitespace , nextSibling ) ;
353
358
}
354
359
}
355
360
} ,
@@ -360,6 +365,7 @@ function preprocessChildren(
360
365
block : Block ,
361
366
state : State ,
362
367
node : Node ,
368
+ inEachBlock : boolean ,
363
369
elementStack : Node [ ] ,
364
370
stripWhitespace : boolean ,
365
371
nextSibling : Node
@@ -390,7 +396,7 @@ function preprocessChildren(
390
396
391
397
cleaned . forEach ( ( child : Node , i : number ) => {
392
398
const preprocessor = preprocessors [ child . type ] ;
393
- if ( preprocessor ) preprocessor ( generator , block , state , child , elementStack , stripWhitespace , cleaned [ i + 1 ] || nextSibling ) ;
399
+ if ( preprocessor ) preprocessor ( generator , block , state , child , inEachBlock , elementStack , stripWhitespace , cleaned [ i + 1 ] || nextSibling ) ;
394
400
395
401
if ( lastChild ) {
396
402
lastChild . next = child ;
@@ -402,8 +408,12 @@ function preprocessChildren(
402
408
403
409
// We want to remove trailing whitespace inside an element/component/block,
404
410
// *unless* there is no whitespace between this node and its next sibling
405
- if ( lastChild && lastChild . type === 'Text' ) {
406
- if ( stripWhitespace && ( ! nextSibling || ( nextSibling . type === 'Text' && / ^ \s / . test ( nextSibling . data ) ) ) ) {
411
+ if ( stripWhitespace && lastChild && lastChild . type === 'Text' ) {
412
+ const shouldTrim = (
413
+ nextSibling ? ( nextSibling . type === 'Text' && / ^ \s / . test ( nextSibling . data ) ) : ! inEachBlock
414
+ ) ;
415
+
416
+ if ( shouldTrim ) {
407
417
lastChild . data = trimEnd ( lastChild . data ) ;
408
418
if ( ! lastChild . data ) {
409
419
cleaned . pop ( ) ;
@@ -449,7 +459,7 @@ export default function preprocess(
449
459
} ;
450
460
451
461
generator . blocks . push ( block ) ;
452
- preprocessChildren ( generator , block , state , node , [ ] , true , null ) ;
462
+ preprocessChildren ( generator , block , state , node , false , [ ] , true , null ) ;
453
463
block . hasUpdateMethod = block . dependencies . size > 0 ;
454
464
455
465
return { block, state } ;
0 commit comments