Skip to content

Commit 4d99363

Browse files
Merge pull request #663 from pattern-lab/issue/539-chained-parameters
FIX: Multiple pattern parameters down a render tree cause issues
2 parents 1f456d2 + 5998c9c commit 4d99363

File tree

5 files changed

+76
-2
lines changed

5 files changed

+76
-2
lines changed

core/lib/parameter_hunter.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,9 @@ var parameter_hunter = function () {
271271
var allData = plutils.mergeData(globalData, localData);
272272
allData = plutils.mergeData(allData, paramData);
273273

274+
//if the partial has pattern parameters itself, we need to handle those
275+
findparameters(partialPattern, patternlab);
276+
274277
//if partial has style modifier data, replace the styleModifier value
275278
if (pattern.stylePartials && pattern.stylePartials.length > 0) {
276279
style_modifier_hunter.consume_style_modifier(partialPattern, pMatch, patternlab);
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<b>a</b>
2+
{{ #a }}
3+
<i>a!</i>
4+
{{ /a }}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<b>b</b>
2+
{{ #b }}
3+
<i>b!</i>
4+
{{ /b }}
5+
{{> test-a(a: true) }}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<b>c</b>
2+
{{> test-b(b: true) }}

test/parameter_hunter_tests.js

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
"use strict";
22

33
var tap = require('tap');
4+
var pa = require('../core/lib/pattern_assembler');
5+
var Pattern = require('../core/lib/object_factory').Pattern;
6+
var CompileState = require('../core/lib/object_factory').CompileState;
7+
var PatternGraph = require('../core/lib/pattern_graph').PatternGraph;
8+
9+
var fs = require('fs-extra');
410

511
var ph = require('../core/lib/parameter_hunter');
612

13+
714
//setup current pattern from what we would have during execution
815
function currentPatternClosure() {
916
return {
@@ -48,9 +55,11 @@ function patternlabClosure() {
4855
debug: false
4956
},
5057
data: {
51-
description: 'Not a quote from a smart man'
58+
description: 'Not a quote from a smart man',
59+
link: {}
5260
},
53-
partials: {}
61+
partials: {},
62+
graph: PatternGraph.empty()
5463
}
5564
};
5665

@@ -65,6 +74,57 @@ tap.test('parameter hunter finds and extends templates', function(test) {
6574
test.end();
6675
});
6776

77+
tap.test('parameter hunter finds partials with their own parameters and renders them too', function(test) {
78+
//arrange
79+
80+
var pattern_assembler = new pa();
81+
var patterns_dir = './test/files/_patterns/';
82+
83+
var pl = patternlabClosure();
84+
85+
86+
var aPattern = new Pattern('00-test/539-a.mustache');
87+
aPattern.template = fs.readFileSync(patterns_dir + '00-test/539-a.mustache', 'utf8');
88+
aPattern.extendedTemplate = aPattern.template;
89+
aPattern.stylePartials = pattern_assembler.find_pattern_partials_with_style_modifiers(aPattern);
90+
aPattern.parameteredPartials = pattern_assembler.find_pattern_partials_with_parameters(aPattern);
91+
92+
var bPattern = new Pattern('00-test/539-b.mustache');
93+
bPattern.template = fs.readFileSync(patterns_dir + '00-test/539-b.mustache', 'utf8');
94+
bPattern.extendedTemplate = bPattern.template;
95+
bPattern.stylePartials = pattern_assembler.find_pattern_partials_with_style_modifiers(bPattern);
96+
bPattern.parameteredPartials = pattern_assembler.find_pattern_partials_with_parameters(bPattern);
97+
98+
var cPattern = new Pattern('00-test/539-c.mustache');
99+
cPattern.template = fs.readFileSync(patterns_dir + '00-test/539-c.mustache', 'utf8');
100+
cPattern.extendedTemplate = cPattern.template;
101+
cPattern.stylePartials = pattern_assembler.find_pattern_partials_with_style_modifiers(cPattern);
102+
cPattern.parameteredPartials = pattern_assembler.find_pattern_partials_with_parameters(cPattern);
103+
104+
pattern_assembler.addPattern(aPattern, pl);
105+
pattern_assembler.addPattern(bPattern, pl);
106+
pattern_assembler.addPattern(cPattern, pl);
107+
108+
var currentPattern = cPattern;
109+
var parameter_hunter = new ph();
110+
111+
//act
112+
parameter_hunter.find_parameters(currentPattern, pl);
113+
114+
//assert
115+
test.equals(currentPattern.extendedTemplate,
116+
`<b>c</b>
117+
<b>b</b>
118+
<i>b!</i>
119+
<b>a</b>
120+
<i>a!</i>
121+
122+
123+
`);
124+
125+
test.end();
126+
});
127+
68128
tap.test('parameter hunter finds and extends templates with mixed parameter and global data', function(test) {
69129
var currentPattern = currentPatternClosure();
70130
var patternlab = patternlabClosure();

0 commit comments

Comments
 (0)