Skip to content

Commit f3f85c9

Browse files
committed
bugfix: #171 pattern links inside base data object
This minor refactor allows for pattern links insde `_data.json` as well as pattern `*.json` objects Also notice the RegExp has been updated to only match `link\.[A-z0-9-_]` to avoid matching `link123something` or `link*something`
1 parent 3f2efa9 commit f3f85c9

File tree

2 files changed

+35
-23
lines changed

2 files changed

+35
-23
lines changed

builder/pattern_assembler.js

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -318,33 +318,36 @@
318318
return o;
319319
}
320320

321+
function parseDataLinksHelper (patternlab, obj, key) {
322+
var linkRE, dataObjAsString, linkMatches, expandedLink;
323+
324+
linkRE = /link\.[A-z0-9-_]+/g
325+
dataObjAsString = JSON.stringify(obj);
326+
linkMatches = dataObjAsString.match(linkRE)
327+
328+
if(linkMatches) {
329+
for (var i = 0; i < linkMatches.length; i++) {
330+
expandedLink = patternlab.data.link[linkMatches[i].split('.')[1]];
331+
if (expandedLink) {
332+
if(patternlab.config.debug){
333+
console.log('expanded data link from ' + linkMatches[i] + ' to ' + expandedLink + ' inside ' + key);
334+
}
335+
dataObjAsString = dataObjAsString.replace(linkMatches[i], expandedLink);
336+
}
337+
}
338+
}
339+
return JSON.parse(dataObjAsString)
340+
}
321341
//look for pattern links included in data files.
322342
//these will be in the form of link.* WITHOUT {{}}, which would still be there from direct pattern inclusion
323-
function parseDataLinks(patternlab){
343+
function parseDataLinks(patternlab) {
344+
//look for link.* such as link.pages-blog as a value
345+
346+
patternlab.data = parseDataLinksHelper(patternlab, patternlab.data, 'data.json')
324347

325348
//loop through all patterns
326-
for (var i = 0; i < patternlab.patterns.length; i++){
327-
var pattern = patternlab.patterns[i];
328-
//look for link.* such as link.pages-blog as a value
329-
var linkRE = /link.[A-z0-9-_]+/g;
330-
//convert to string for easier searching
331-
var dataObjAsString = JSON.stringify(pattern.jsonFileData);
332-
var linkMatches = dataObjAsString.match(linkRE);
333-
334-
//if no matches found, escape current loop iteration
335-
if(linkMatches === null) { continue; }
336-
337-
for(var i = 0; i < linkMatches.length; i++){
338-
//for each match, find the expanded link within the already constructed patternlab.data.link object
339-
var expandedLink = patternlab.data.link[linkMatches[i].split('.')[1]];
340-
if(patternlab.config.debug){
341-
console.log('expanded data link from ' + linkMatches[i] + ' to ' + expandedLink + ' inside ' + pattern.key);
342-
}
343-
//replace value with expandedLink on the pattern
344-
dataObjAsString = dataObjAsString.replace(linkMatches[i], expandedLink);
345-
}
346-
//write back to data on the pattern
347-
pattern.jsonFileData = JSON.parse(dataObjAsString);
349+
for (var i = 0; i < patternlab.patterns.length; i++) {
350+
patternlab.patterns[i].jsonFileData = parseDataLinksHelper(patternlab, patternlab.patterns[i].jsonFileData, patternlab.patterns[i].key)
348351
}
349352
}
350353

test/pattern_assembler_tests.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -643,6 +643,11 @@
643643
patternlab.data.link['twitter-dave'] = 'https://twitter.com/dmolsen';
644644
patternlab.data.link['twitter-brian'] = 'https://twitter.com/bmuenzenmeyer';
645645

646+
patternlab.data.brad = { url: "link.twitter-brad" }
647+
patternlab.data.dave = { url: "link.twitter-dave" }
648+
patternlab.data.brian = { url: "link.twitter-brian" }
649+
650+
646651
var pattern;
647652
for(var i = 0; i < patternlab.patterns.length; i++){
648653
if(patternlab.patterns[i].key === 'test-nav'){
@@ -661,6 +666,10 @@
661666
test.equals(pattern.jsonFileData.brad.url, "https://twitter.com/brad_frost");
662667
test.equals(pattern.jsonFileData.dave.url, "https://twitter.com/dmolsen");
663668
test.equals(pattern.jsonFileData.brian.url, "https://twitter.com/bmuenzenmeyer");
669+
670+
test.equals(patternlab.data.brad.url, "https://twitter.com/brad_frost");
671+
test.equals(patternlab.data.dave.url, "https://twitter.com/dmolsen");
672+
test.equals(patternlab.data.brian.url, "https://twitter.com/bmuenzenmeyer");
664673
test.done();
665674
}
666675
};

0 commit comments

Comments
 (0)