Skip to content

Commit f187cf4

Browse files
author
Brian Muenzenmeyer
committed
Merge pull request #239 from kylewelsby/master
bugfix: #171 pattern links inside base data object
2 parents 04409d3 + d66edf0 commit f187cf4

File tree

3 files changed

+39
-27
lines changed

3 files changed

+39
-27
lines changed

builder/pattern_assembler.js

+26-23
Original file line numberDiff line numberDiff line change
@@ -340,33 +340,36 @@
340340
return o;
341341
}
342342

343+
function parseDataLinksHelper (patternlab, obj, key) {
344+
var linkRE, dataObjAsString, linkMatches, expandedLink;
345+
346+
linkRE = /link\.[A-z0-9-_]+/g
347+
dataObjAsString = JSON.stringify(obj);
348+
linkMatches = dataObjAsString.match(linkRE)
349+
350+
if(linkMatches) {
351+
for (var i = 0; i < linkMatches.length; i++) {
352+
expandedLink = patternlab.data.link[linkMatches[i].split('.')[1]];
353+
if (expandedLink) {
354+
if(patternlab.config.debug){
355+
console.log('expanded data link from ' + linkMatches[i] + ' to ' + expandedLink + ' inside ' + key);
356+
}
357+
dataObjAsString = dataObjAsString.replace(linkMatches[i], expandedLink);
358+
}
359+
}
360+
}
361+
return JSON.parse(dataObjAsString)
362+
}
343363
//look for pattern links included in data files.
344364
//these will be in the form of link.* WITHOUT {{}}, which would still be there from direct pattern inclusion
345-
function parseDataLinks(patternlab){
365+
function parseDataLinks(patternlab) {
366+
//look for link.* such as link.pages-blog as a value
367+
368+
patternlab.data = parseDataLinksHelper(patternlab, patternlab.data, 'data.json')
346369

347370
//loop through all patterns
348-
for (var i = 0; i < patternlab.patterns.length; i++){
349-
var pattern = patternlab.patterns[i];
350-
//look for link.* such as link.pages-blog as a value
351-
var linkRE = /link.[A-z0-9-_]+/g;
352-
//convert to string for easier searching
353-
var dataObjAsString = JSON.stringify(pattern.jsonFileData);
354-
var linkMatches = dataObjAsString.match(linkRE);
355-
356-
//if no matches found, escape current loop iteration
357-
if(linkMatches === null) { continue; }
358-
359-
for(var i = 0; i < linkMatches.length; i++){
360-
//for each match, find the expanded link within the already constructed patternlab.data.link object
361-
var expandedLink = patternlab.data.link[linkMatches[i].split('.')[1]];
362-
if(patternlab.config.debug){
363-
console.log('expanded data link from ' + linkMatches[i] + ' to ' + expandedLink + ' inside ' + pattern.key);
364-
}
365-
//replace value with expandedLink on the pattern
366-
dataObjAsString = dataObjAsString.replace(linkMatches[i], expandedLink);
367-
}
368-
//write back to data on the pattern
369-
pattern.jsonFileData = JSON.parse(dataObjAsString);
371+
for (var i = 0; i < patternlab.patterns.length; i++) {
372+
patternlab.patterns[i].jsonFileData = parseDataLinksHelper(patternlab, patternlab.patterns[i].jsonFileData, patternlab.patterns[i].key)
370373
}
371374
}
372375

builder/patternlab.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,6 @@ var patternlab_engine = function (config) {
9393
pattern_assembler.process_pattern_iterative(path.resolve(file), patternlab);
9494
});
9595

96-
//now that all the main patterns are known, look for any links that might be within data and expand them
97-
//we need to do this before expanding patterns & partials into extendedTemplates, otherwise we could lose the data -> partial reference
98-
pattern_assembler.parse_data_links(patternlab);
99-
10096
//diveSync again to recursively include partials, filling out the
10197
//extendedTemplate property of the patternlab.patterns elements
10298
diveSync(patterns_dir, {
@@ -119,6 +115,10 @@ var patternlab_engine = function (config) {
119115
});
120116

121117

118+
//now that all the main patterns are known, look for any links that might be within data and expand them
119+
//we need to do this before expanding patterns & partials into extendedTemplates, otherwise we could lose the data -> partial reference
120+
pattern_assembler.parse_data_links(patternlab);
121+
122122
//delete the contents of config.patterns.public before writing
123123
if(deletePatternDir){
124124
fs.emptyDirSync(paths.public.patterns);

test/pattern_assembler_tests.js

+9
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,11 @@
654654
patternlab.data.link['twitter-dave'] = 'https://twitter.com/dmolsen';
655655
patternlab.data.link['twitter-brian'] = 'https://twitter.com/bmuenzenmeyer';
656656

657+
patternlab.data.brad = { url: "link.twitter-brad" }
658+
patternlab.data.dave = { url: "link.twitter-dave" }
659+
patternlab.data.brian = { url: "link.twitter-brian" }
660+
661+
657662
var pattern;
658663
for(var i = 0; i < patternlab.patterns.length; i++){
659664
if(patternlab.patterns[i].key === 'test-nav'){
@@ -673,6 +678,10 @@
673678
test.equals(pattern.jsonFileData.brad.url, "https://twitter.com/brad_frost");
674679
test.equals(pattern.jsonFileData.dave.url, "https://twitter.com/dmolsen");
675680
test.equals(pattern.jsonFileData.brian.url, "https://twitter.com/bmuenzenmeyer");
681+
682+
test.equals(patternlab.data.brad.url, "https://twitter.com/brad_frost");
683+
test.equals(patternlab.data.dave.url, "https://twitter.com/dmolsen");
684+
test.equals(patternlab.data.brian.url, "https://twitter.com/bmuenzenmeyer");
676685
test.done();
677686
},
678687
'get_pattern_by_key - returns the fuzzy result when no others found' : function(test){

0 commit comments

Comments
 (0)