Skip to content

Commit bf66e78

Browse files
committed
proper rendering of templates with correct data inheritance
1 parent 7f455ef commit bf66e78

File tree

4 files changed

+75
-32
lines changed

4 files changed

+75
-32
lines changed

builder/pattern_assembler.js

Lines changed: 66 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838

3939
if(partials) {
4040
return mustache.render(template, data, partials);
41-
}else{
41+
} else{
4242
return mustache.render(template, data);
4343
}
4444
}
@@ -92,42 +92,51 @@
9292
lineage_hunter = new lh(),
9393
pseudopattern_hunter = new pph();
9494

95+
currentPattern.extendedTemplate = currentPattern.template;
96+
9597
//find how many partials there may be for the given pattern
9698
var foundPatternPartials = findPartials(currentPattern);
9799

98100
if(foundPatternPartials !== null && foundPatternPartials.length > 0){
99101

100-
console.log(foundPatternPartials);
101-
102+
if(patternlab.config.debug){
103+
console.log('found partials for ' + currentPattern.key);
104+
}
102105
//determine if the template contains any pattern parameters. if so they must be immediately consumed
103106
var patternsConsumedWithParameters = parameter_hunter.find_parameters(currentPattern, patternlab);
104107

105-
if(patternsConsumedWithParameters === 0){
106-
//do something with the regular old partials
108+
//do something with the regular old partials
109+
for(var i = 0; i < foundPatternPartials.length; i++){
110+
var partialKey = foundPatternPartials[i].replace(/{{>([ ])?([A-Za-z0-9-]+)(?:\:[A-Za-z0-9-]+)?(?:(| )\(.*)?([ ])?}}/g, '$2');
111+
console.log('key for partial is ' + partialKey);
112+
var partialPattern = getpatternbykey(partialKey, patternlab);
113+
currentPattern.extendedTemplate = currentPattern.extendedTemplate.replace(foundPatternPartials[i], partialPattern.extendedTemplate);
107114
}
108115

109116
} else{
110117
//we found no partials, so we are ready to render
111-
118+
if(patternlab.config.debug){
119+
console.log('no partial found in pattern ' + currentPattern.key);
120+
}
112121
}
113122

114123
//find pattern lineage
115124
lineage_hunter.find_lineage(currentPattern, patternlab);
116125

117126
//add as a partial in case this is referenced later. convert to syntax needed by existing patterns
118-
var sub = currentPattern.subdir.substring(currentPattern.subdir.indexOf('-') + 1);
119-
var folderIndex = sub.indexOf(path.sep);
120-
var cleanSub = sub.substring(0, folderIndex);
121-
122-
//add any templates found to an object of partials, so downstream templates may use them too
123-
//look for the full path on nested patterns, else expect it to be flat
124-
var partialname = '';
125-
if(cleanSub !== ''){
126-
partialname = cleanSub + '-' + currentPattern.patternName;
127-
} else{
128-
partialname = currentPattern.patternGroup + '-' + currentPattern.patternName;
129-
}
130-
patternlab.partials[partialname] = currentPattern.template;
127+
// var sub = currentPattern.subdir.substring(currentPattern.subdir.indexOf('-') + 1);
128+
// var folderIndex = sub.indexOf(path.sep);
129+
// var cleanSub = sub.substring(0, folderIndex);
130+
//
131+
// //add any templates found to an object of partials, so downstream templates may use them too
132+
// //look for the full path on nested patterns, else expect it to be flat
133+
// var partialname = '';
134+
// if(cleanSub !== ''){
135+
// partialname = cleanSub + '-' + currentPattern.patternName;
136+
// } else{
137+
// partialname = currentPattern.patternGroup + '-' + currentPattern.patternName;
138+
// }
139+
// patternlab.partials[partialname] = currentPattern.template;
131140

132141
//look for a pseudo pattern by checking if there is a file containing same name, with ~ in it, ending in .json
133142
pseudopattern_hunter.find_pseudopatterns(currentPattern, patternlab);
@@ -136,6 +145,38 @@
136145
addPattern(currentPattern, patternlab);
137146
}
138147

148+
function getpatternbykey(key, patternlab){
149+
for(var i = 0; i < patternlab.patterns.length; i++){
150+
if(patternlab.patterns[i].key === key){
151+
return patternlab.patterns[i];
152+
}
153+
}
154+
throw 'Could not find pattern with key ' + key;
155+
}
156+
157+
/*
158+
* Recursively merge properties of two objects
159+
* http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically
160+
*/
161+
function mergeData(obj1, obj2) {
162+
for (var p in obj2) {
163+
try {
164+
// Property in destination object set; update its value.
165+
if ( obj2[p].constructor == Object ) {
166+
obj1[p] = merge_data(obj1[p], obj2[p]);
167+
168+
} else {
169+
obj1[p] = obj2[p];
170+
171+
}
172+
} catch(e) {
173+
// Property in destination object not set; create it and set its value.
174+
obj1[p] = obj2[p];
175+
}
176+
}
177+
return obj1;
178+
}
179+
139180
return {
140181
find_pattern_partials: function(pattern){
141182
return findPartials(pattern);
@@ -154,6 +195,12 @@
154195
},
155196
process_pattern: function(pattern, patternlab, additionalData){
156197
processPattern(pattern, patternlab, additionalData);
198+
},
199+
get_pattern_by_key: function(key, patternlab){
200+
return getpatternbykey(key, patternlab);
201+
},
202+
merge_data: function(existingData, newData){
203+
return mergeData(existingData, newData);
157204
}
158205
};
159206

builder/patternlab.js

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,11 @@ var patternlab_engine = function () {
8181
//render all patterns last, so lineageR works
8282
patternlab.patterns.forEach(function(pattern, index, patterns){
8383

84-
//render the pattern. pass partials and data
85-
if(pattern.data) { // Pass found pattern-specific JSON as data
86-
//extend pattern data links into link for pattern link shortcuts to work. we do this locally and globally
87-
pattern.data.link = extend({}, patternlab.data.link);
88-
89-
pattern.patternPartial = pattern_assembler.renderPattern(pattern.template, pattern.data, patternlab.partials);
90-
} else { // Pass global patternlab data
91-
pattern.patternPartial = pattern_assembler.renderPattern(pattern.template, patternlab.data, patternlab.partials);
92-
}
84+
//render the pattern, but first consolidate any data we may have
85+
var allData = patternlab.data;
86+
allData = pattern_assembler.merge_data(allData, pattern.jsonFileData);
87+
allData = pattern_assembler.merge_data(allData, pattern.data);
88+
pattern.patternPartial = pattern_assembler.renderPattern(pattern.extendedTemplate, patternlab.data);
9389

9490
//add footer info before writing
9591
var patternFooter = pattern_assembler.renderPattern(patternlab.footer, pattern);
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<!-- Begin Footer -->
22
<footer class="footer" role="contentinfo">
33
<div class="lc">
4-
<p class="copyright">&copy; 2013 Company Name. All rights reserved.</p>
4+
<p class="copyright">&copy; 2015 Company Name. All rights reserved.</p>
55
</div>
66
</footer>
7-
<!-- End Footer -->
7+
<!-- End Footer -->

source/_patterns/03-templates/00-homepage.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<div class="g g-3up">
1212
{{# touts}}
1313
<div class="gi">
14-
{{> molecules-block-inset }}
14+
{{> molecules-inset-block }}
1515
</div>
1616
{{/ touts}}
1717
</div><!--end 3up-->
@@ -37,4 +37,4 @@
3737
</div><!--end .l-two-col-->
3838
</div><!--End role=main-->
3939
{{> organisms-footer }}
40-
</div>
40+
</div>

0 commit comments

Comments
 (0)