Skip to content

Commit f340339

Browse files
committed
prevent stylemodifier parsing from polluting the unstyled pattern
closes #444
1 parent 528a60a commit f340339

File tree

2 files changed

+53
-3
lines changed

2 files changed

+53
-3
lines changed

core/lib/pattern_assembler.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -426,14 +426,17 @@ var pattern_assembler = function () {
426426
processPatternRecursive(partialPath, patternlab);
427427

428428
//complete assembly of extended template
429+
//create a copy of the partial so as to not pollute it after the getPartial call.
429430
var partialPattern = getPartial(partial, patternlab);
431+
var cleanPartialPattern = JSON5.parse(JSON5.stringify(partialPattern));
432+
cleanPartialPattern.extendedTemplate = cleanPartialPattern.template;
430433

431434
//if partial has style modifier data, replace the styleModifier value
432435
if (currentPattern.stylePartials && currentPattern.stylePartials.length > 0) {
433-
style_modifier_hunter.consume_style_modifier(partialPattern, foundPatternPartials[i], patternlab);
436+
style_modifier_hunter.consume_style_modifier(cleanPartialPattern, foundPatternPartials[i], patternlab);
434437
}
435438

436-
currentPattern.extendedTemplate = currentPattern.extendedTemplate.replace(foundPatternPartials[i], partialPattern.extendedTemplate);
439+
currentPattern.extendedTemplate = currentPattern.extendedTemplate.replace(foundPatternPartials[i], cleanPartialPattern.extendedTemplate);
437440
}
438441
}
439442

test/pattern_assembler_tests.js

+48-1
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@
265265
var mixedPattern = new Pattern('00-test/07-mixed-params.mustache');
266266
mixedPattern.template = fs.readFileSync(patterns_dir + '/00-test/07-mixed-params.mustache', 'utf8');
267267
mixedPattern.stylePartials = pattern_assembler.find_pattern_partials_with_style_modifiers(mixedPattern);
268-
mixedPattern.parameteredPartials = pattern_assembler.find_pattern_partials_with_parameters(mixedPattern);
268+
mixedPattern.parameteredPartials = pattern_assembler.find_pattern_partials_with_parameters(mixedPattern);
269269

270270
pattern_assembler.addPattern(atomPattern, pl);
271271
pattern_assembler.addPattern(mixedPattern, pl);
@@ -322,6 +322,53 @@
322322
test.equals(bookendPattern.extendedTemplate.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), expectedValue.trim());
323323
test.done();
324324
},
325+
'processPatternRecursive - does not pollute previous patterns when a later one is found with a styleModifier' : function(test){
326+
//arrange
327+
var fs = require('fs-extra');
328+
var pattern_assembler = new pa();
329+
var patterns_dir = './test/files/_patterns';
330+
331+
var pl = {};
332+
pl.config = {
333+
paths: {
334+
source: {
335+
patterns: patterns_dir
336+
}
337+
},
338+
outputFileSuffixes: {
339+
rendered : ''
340+
}
341+
};
342+
pl.data = {};
343+
pl.data.link = {};
344+
pl.config.debug = false;
345+
pl.patterns = [];
346+
pl.partials = {};
347+
348+
var atomPattern = new Pattern('00-test/03-styled-atom.mustache');
349+
atomPattern.template = fs.readFileSync(patterns_dir + '/00-test/03-styled-atom.mustache', 'utf8');
350+
atomPattern.stylePartials = pattern_assembler.find_pattern_partials_with_style_modifiers(atomPattern);
351+
atomPattern.parameteredPartials = pattern_assembler.find_pattern_partials_with_parameters(atomPattern);
352+
353+
var anotherPattern = new Pattern('00-test/12-another-styled-atom.mustache');
354+
anotherPattern.template = fs.readFileSync(patterns_dir + '/00-test/12-another-styled-atom.mustache', 'utf8');
355+
anotherPattern.stylePartials = pattern_assembler.find_pattern_partials_with_style_modifiers(anotherPattern);
356+
anotherPattern.parameteredPartials = pattern_assembler.find_pattern_partials_with_parameters(anotherPattern);
357+
358+
pattern_assembler.addPattern(atomPattern, pl);
359+
pattern_assembler.addPattern(anotherPattern, pl);
360+
361+
//act
362+
pattern_assembler.process_pattern_recursive('00-test' + path.sep + '12-another-styled-atom.mustache', pl, {});
363+
364+
//assert
365+
var expectedCleanValue = '<span class="test_base {{styleModifier}}"> {{message}} </span>';
366+
var expectedSetValue = '<span class="test_base test_1"> {{message}} </span>';
367+
test.equals(anotherPattern.extendedTemplate.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), expectedSetValue.trim());
368+
test.equals(atomPattern.template.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), expectedCleanValue.trim());
369+
test.equals(atomPattern.extendedTemplate.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), expectedCleanValue.trim());
370+
test.done();
371+
},
325372
'setState - applies any patternState matching the pattern' : function(test){
326373
//arrange
327374
var pa = require('../core/lib/pattern_assembler');

0 commit comments

Comments
 (0)