Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
171 commits
Select commit Hold shift + click to select a range
1df8ee6
working performant recursive parameter hunter, with debug code
Feb 29, 2016
c0b6b42
resolving merge conflicts
Feb 29, 2016
f441666
code cleanup: else blocks to standard, removing startFile params, rem…
Mar 1, 2016
8f0d873
unit test coverage for #250
bmuenzenmeyer Feb 24, 2016
68bbd2f
working unit test for parameter hunter
Mar 1, 2016
ec1c1cd
using getpatternbykey to stay DRY
Mar 1, 2016
5450d3c
whitespace edits
Mar 1, 2016
8c2625a
reverting test changes in source dir
Mar 1, 2016
b798a8a
moving data vars in parameter_hunter.js outside for loop
Mar 1, 2016
fec34de
lines before comments per eslint
Mar 1, 2016
c013275
removing .swp file
Mar 1, 2016
3b51556
fixing delimitPos in paramToJson. eliminating more extraneous recursi…
Mar 1, 2016
7663c56
unit test
Mar 2, 2016
63897ac
periods in comments
Mar 2, 2016
af090a2
avoiding errors and enabling pseudopatterns
Mar 2, 2016
efda953
execution optimization and updated unit test
Mar 2, 2016
8e1ad2c
avoiding undefined type error
Mar 2, 2016
959e089
execution optimization
Mar 2, 2016
3452e9e
deleting extraneous empty line
Mar 2, 2016
0bdaca0
updating unit test
Mar 2, 2016
5175615
rendering patterns to dismiss excepted partials
Mar 3, 2016
c5d46a8
passing nodeunit and eslint
Mar 3, 2016
25cb4ee
Merge branch '250-with-recursion-limiter' of github.com:e2tha-e/patte…
Mar 3, 2016
81a47fa
new recursion scheme - processPatternRecursive stays within pattern w…
Mar 5, 2016
c9b4af5
working recursion limiter
Mar 7, 2016
2d10237
limiting recursion by winnowing tags at partial level
Mar 8, 2016
a69edcc
correct requires and better exception handling
Mar 8, 2016
e81d9e3
unique partials
Mar 9, 2016
62a217b
working list item hunter
Mar 9, 2016
5ec5d0d
partially working pseudopattern hunter
Mar 9, 2016
9d49785
working pseudopattern hunter
Mar 10, 2016
6afd5a4
stopping point. file writing done in processPatternRecursive so memor…
Mar 10, 2016
6dbceb2
fixed frontend render
Mar 10, 2016
4ab6864
working pseudopatterns
Mar 10, 2016
31810ae
moved file writing to a function
Mar 10, 2016
81b8115
working listItems
Mar 10, 2016
07dbf3c
unique data keys
Mar 11, 2016
f625c70
view all works
Mar 11, 2016
91eea3a
freeing more memory
Mar 11, 2016
19a926e
everything except list items
Mar 12, 2016
d1ad420
working listitems
Mar 12, 2016
31319ac
limiting object clones
Mar 13, 2016
031c12d
performant recursive builder
Mar 14, 2016
2c48160
working listitem hunter
Mar 14, 2016
f70558e
working local listitems.json
Mar 14, 2016
ba595a4
eslinting
Mar 14, 2016
d0034d6
updating unit tests
Mar 14, 2016
082117a
updating unit tests
Mar 15, 2016
9e35acf
working unit tests
Mar 15, 2016
4fa911b
eslinting
Mar 15, 2016
baa0f83
deleting .swp file
Mar 16, 2016
0343df1
more accurate paramToJson in parameter_hunter
Mar 16, 2016
92e9a00
updating unit tests for parameter_hunter paramToJson
Mar 16, 2016
695471c
minor edit
Mar 16, 2016
7d40cb7
docblock and comment update
Mar 16, 2016
8b3551f
another param string parser
Mar 17, 2016
77a2089
bugs fixed, unit tests working
Mar 18, 2016
e3bb31e
variable name change
Mar 18, 2016
df0e804
Added (failing for now) test to highlight the bug.
Mar 11, 2016
695a936
Added another test for another bug (parenthesis in value confuses pat…
Mar 11, 2016
2a297f4
Added additional parameter hunter tests.
Mar 14, 2016
c8acb5a
replacing JSON with JSON5 for better error messaging
Mar 18, 2016
9348441
working paramToJson
Mar 18, 2016
cf080af
stricter unit tests
Mar 18, 2016
68a6c35
comment updates
Mar 18, 2016
37ad825
simplfying paramToJson further
Mar 18, 2016
a7e52cd
simplfying paramToJson further
Mar 18, 2016
f3ee0f1
comment update
Mar 18, 2016
db17e81
tightened parameter key search
Mar 18, 2016
83f6a4f
comment update
Mar 18, 2016
ed13128
accommodating decimals and exponentials as valid numeric values
Mar 18, 2016
7bcea0a
comment update
Mar 18, 2016
227de6a
new paramToJson
Mar 18, 2016
91f6c1e
working unit tests
Mar 18, 2016
ad77450
updated unit tests
Mar 18, 2016
2414d99
deleting swap file
Mar 18, 2016
d9ad874
using JSON5
Mar 18, 2016
2317cae
fixing array instead of number typo
Mar 18, 2016
3583251
more comments
Mar 18, 2016
704346a
spacing to pass eslint
Mar 18, 2016
1007237
fixing typo and updating comments
Mar 18, 2016
a0d33d3
removing unnecessary escape
Mar 19, 2016
58c4598
removing unnecessary escape
Mar 19, 2016
cc95ac4
working performant recursive parameter hunter, with debug code
Feb 29, 2016
c50d389
code cleanup: else blocks to standard, removing startFile params, rem…
Mar 1, 2016
5aabbdf
unit test coverage for #250
bmuenzenmeyer Feb 24, 2016
543b669
working unit test for parameter hunter
Mar 1, 2016
b02ec97
using getpatternbykey to stay DRY
Mar 1, 2016
766e5a3
whitespace edits
Mar 1, 2016
7e9866a
reverting test changes in source dir
Mar 1, 2016
afde752
moving data vars in parameter_hunter.js outside for loop
Mar 1, 2016
285fb8d
lines before comments per eslint
Mar 1, 2016
7110707
fixing delimitPos in paramToJson. eliminating more extraneous recursi…
Mar 1, 2016
e2b2a13
unit test
Mar 2, 2016
d64d0fe
periods in comments
Mar 2, 2016
7dd23df
avoiding errors and enabling pseudopatterns
Mar 2, 2016
ec2cd4f
execution optimization and updated unit test
Mar 2, 2016
4938a02
avoiding undefined type error
Mar 2, 2016
92550fd
execution optimization
Mar 2, 2016
f0edeb2
deleting extraneous empty line
Mar 2, 2016
1b6aba8
updating unit test
Mar 2, 2016
22f62f3
rendering patterns to dismiss excepted partials
Mar 3, 2016
bd5ff0e
passing nodeunit and eslint
Mar 3, 2016
146b730
new recursion scheme - processPatternRecursive stays within pattern w…
Mar 5, 2016
859cb86
working recursion limiter
Mar 7, 2016
6928c1b
limiting recursion by winnowing tags at partial level
Mar 8, 2016
91dc7ea
correct requires and better exception handling
Mar 8, 2016
d25389e
unique partials
Mar 9, 2016
dd41d04
working list item hunter
Mar 9, 2016
29ac4ed
partially working pseudopattern hunter
Mar 9, 2016
e41874d
working pseudopattern hunter
Mar 10, 2016
dba57a7
stopping point. file writing done in processPatternRecursive so memor…
Mar 10, 2016
cd45965
fixed frontend render
Mar 10, 2016
5fc348a
working pseudopatterns
Mar 10, 2016
65d6c78
moved file writing to a function
Mar 10, 2016
3b24c71
working listItems
Mar 10, 2016
f439082
unique data keys
Mar 11, 2016
f9191e8
view all works
Mar 11, 2016
50e6ee3
freeing more memory
Mar 11, 2016
0f20fe9
everything except list items
Mar 12, 2016
27d3e90
working listitems
Mar 12, 2016
540fbe9
limiting object clones
Mar 13, 2016
149fc49
performant recursive builder
Mar 14, 2016
a94a1e6
working listitem hunter
Mar 14, 2016
8a06cf7
working local listitems.json
Mar 14, 2016
ff37ef8
eslinting
Mar 14, 2016
4c25f1d
updating unit tests
Mar 14, 2016
3b7794f
updating unit tests
Mar 15, 2016
9e71138
working unit tests
Mar 15, 2016
81d8a1d
eslinting
Mar 15, 2016
0e09555
deleting .swp file
Mar 16, 2016
3a94208
docblock and comment update
Mar 16, 2016
e34939a
new paramToJson
Mar 18, 2016
f341a8f
working unit tests
Mar 18, 2016
b5e9c22
updated unit tests
Mar 18, 2016
db83ce1
deleting swap file
Mar 18, 2016
40ef541
using JSON5
Mar 18, 2016
6359052
fixing typo and updating comments
Mar 18, 2016
2c47e34
removing unnecessary escape
Mar 19, 2016
3699fa0
pattern_exporter.js and pseudopattern_hunter.js ready
Mar 26, 2016
2de305e
patternlab.js updated, builder/pattern_assembler.js set up to be move…
Mar 29, 2016
fbdb9b6
updating pattern_assembler.js
Mar 29, 2016
3f5373f
builder/parameter_hunter.js set up to be moved to core/lib
Mar 29, 2016
4690f79
fixing substring param typo
Mar 29, 2016
eedaecc
renaming json5 instances
Mar 29, 2016
4c90948
fixing typo and renaming to JSON5 where necessary
Mar 29, 2016
7fa7f6b
comment update
Mar 29, 2016
768bc9b
Merge branch 'dev' of github.com:pattern-lab/patternlab-node into 250…
Mar 29, 2016
176dd4f
unit tests passing
Mar 30, 2016
a50abd1
nodeunit and eslint passing
Mar 30, 2016
456273f
stopping point
Mar 31, 2016
374dfb9
looks like it's working
Mar 31, 2016
26cc554
appears to work
Mar 31, 2016
2cbafcd
working lineage
Mar 31, 2016
0e04e07
working lineage_hunter
Apr 1, 2016
f286eae
resolving merge conflicts
Apr 1, 2016
6d07db7
resolving merge conflicts
Apr 1, 2016
3883262
fixing unit test
Apr 1, 2016
92f7806
improved partial and listitem finding regexes
Apr 2, 2016
8d449f4
right hogan.js npm
Apr 2, 2016
d067378
improved regex
Apr 2, 2016
93f665a
allow triple-mustache with alternate delimiters
Apr 3, 2016
bbca4c5
Merge branch 'dev' of github.com:pattern-lab/patternlab-node into 250…
Apr 6, 2016
d46f21f
resolving merge conflicts
Apr 8, 2016
00a63cd
fixing inclusion of local listitem files
Apr 14, 2016
107aa27
more DRY styleguide exclusion
Apr 14, 2016
460f322
updating unit tests
Apr 14, 2016
780be51
deleting .swp files
Apr 14, 2016
fee0d67
removing unused dependency
Apr 14, 2016
85ca7c0
Revert "removing unused dependency"
Apr 14, 2016
470f54d
Merge branch 'dev' of github.com:pattern-lab/patternlab-node into 250…
Apr 18, 2016
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
138 changes: 58 additions & 80 deletions core/lib/list_item_hunter.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,119 +12,97 @@

var list_item_hunter = function () {

var extend = require('util')._extend,
JSON5 = require('json5'),
var JSON5 = require('json5'),
pa = require('./pattern_assembler'),
smh = require('./style_modifier_hunter'),
pattern_assembler = new pa(),
style_modifier_hunter = new smh(),
items = [ 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty'];

function getListItemIterationKeys() {
return items;
}

function processListItemPartials(pattern, patternlab) {

//find any listitem blocks
var matches = pattern_assembler.find_list_items(pattern, patternlab);
if (matches !== null) {
matches.forEach(function (liMatch) {
var liMatches = pattern_assembler.find_list_items(pattern.extendedTemplate, patternlab);
if (liMatches !== null) {

if (pattern.listitemsRaw) {

//copy, don't reference
try {
pattern.listitems = JSON5.parse(JSON5.stringify(pattern.listitemsRaw));
} catch (err) {
console.log('There was an error parsing JSON for ' + pattern.abspath);
console.log(err);
}

//if no local listitems.json file, use global listitems data
} else {

//copy, don't reference
try {
pattern.listitems = JSON5.parse(JSON5.stringify(patternlab.listitems));
pattern.listitemsRaw = JSON5.parse(JSON5.stringify(patternlab.listitems));
} catch (err) {
console.log('There was an error parsing JSON for ' + pattern.abspath);
console.log(err);
}
}

//this shuffles listitemsRaw, and builds it into an object of array of
//objects and saves that in listitems
pattern_assembler.combine_listItems(pattern);

for (var i = 0; i < liMatches.length; i++) {

if (patternlab.config.debug) {
console.log('found listItem of size ' + liMatch + ' inside ' + pattern.key);
console.log('found listItem of size ' + liMatches[i] + ' inside ' + pattern.key);
}

//find the boundaries of the block
var loopNumberString = liMatch.split('.')[1].split('}')[0].trim();
var end = liMatch.replace('#', '/');
var patternBlock = pattern.template.substring(pattern.template.indexOf(liMatch) + liMatch.length, pattern.template.indexOf(end)).trim();
var loopNumberString = liMatches[i].split('.')[1].split('}')[0].trim();
var end = liMatches[i].replace('#', '/');
var patternBlock = pattern.extendedTemplate.substring(pattern.extendedTemplate.indexOf(liMatches[i]) + liMatches[i].length, pattern.extendedTemplate.indexOf(end)).trim();

//build arrays that repeat the block, however large we need to
var repeatedBlockTemplate = [];
var repeatedBlockHtml = '';
var i; // for loops
var j; // for loops

for (i = 0; i < items.indexOf(loopNumberString); i++) {
for (j = 0; j < items.indexOf(loopNumberString); j++) {
repeatedBlockTemplate.push(patternBlock);
}

//check for a local listitems.json file
var listData;
try {
listData = JSON5.parse(JSON5.stringify(patternlab.listitems));
} catch (err) {
console.log('There was an error parsing JSON for ' + pattern.abspath);
console.log(err);
}
listData = pattern_assembler.merge_data(listData, pattern.listitems);

//iterate over each copied block, rendering its contents along with pattenlab.listitems[i]
for (i = 0; i < repeatedBlockTemplate.length; i++) {
var thisBlockTemplate = repeatedBlockTemplate[i];
//iterate over each copied block, rendering its contents along with pattenlab.listitems[j]
for (j = 0; j < repeatedBlockTemplate.length; j++) {
var thisBlockHTML = "";
var itemData = pattern.listitems['' + items.indexOf(loopNumberString)]; //this is a property like "2"
var patternData = pattern.jsonFileData;
var allData = pattern_assembler.merge_data(patternData, itemData !== undefined ? itemData[j] : {}); //itemData could be undefined if the listblock contains no partial, just markup

//combine listItem data with pattern data with global data
var itemData = listData['' + items.indexOf(loopNumberString)]; //this is a property like "2"
var globalData;
var localData;
try {
globalData = JSON5.parse(JSON5.stringify(patternlab.data));
localData = JSON5.parse(JSON5.stringify(pattern.jsonFileData));
} catch (err) {
console.log('There was an error parsing JSON for ' + pattern.abspath);
console.log(err);
}

var allData = pattern_assembler.merge_data(globalData, localData);
allData = pattern_assembler.merge_data(allData, itemData !== undefined ? itemData[i] : {}); //itemData could be undefined if the listblock contains no partial, just markup
allData.link = extend({}, patternlab.data.link);

//check for partials within the repeated block
var foundPartials = pattern_assembler.find_pattern_partials({ 'template' : thisBlockTemplate });

if (foundPartials && foundPartials.length > 0) {
for (var j = 0; j < foundPartials.length; j++) {
//get the partial
var partialName = foundPartials[j].match(/([\w\-\.\/~]+)/g)[0];
var partialPattern = pattern_assembler.get_pattern_by_key(partialName, patternlab);

//create a copy of the partial so as to not pollute it after the get_pattern_by_key call.
var cleanPartialPattern;
try {
cleanPartialPattern = JSON5.parse(JSON5.stringify(partialPattern));
} catch (err) {
console.log('There was an error parsing JSON for ' + pattern.abspath);
console.log(err);
}

//if partial has style modifier data, replace the styleModifier value
if (foundPartials[j].indexOf(':') > -1) {
style_modifier_hunter.consume_style_modifier(cleanPartialPattern, foundPartials[j], patternlab);
}

//replace its reference within the block with the extended template
thisBlockTemplate = thisBlockTemplate.replace(foundPartials[j], cleanPartialPattern.extendedTemplate);
}

//render with data
thisBlockHTML = pattern_assembler.renderPattern(thisBlockTemplate, allData, patternlab.partials);
} else {
//just render with mergedData
thisBlockHTML = pattern_assembler.renderPattern(thisBlockTemplate, allData, patternlab.partials);
}

thisBlockHTML = pattern_assembler.renderPattern(patternBlock, allData);

//add the rendered HTML to our string
repeatedBlockHtml = repeatedBlockHtml + thisBlockHTML;

//unset the allData reference to free up memory
allData = null;
}

//replace the block with our generated HTML
var repeatingBlock = pattern.extendedTemplate.substring(pattern.extendedTemplate.indexOf(liMatch), pattern.extendedTemplate.indexOf(end) + end.length);
var repeatingBlock = pattern.extendedTemplate.substring(pattern.extendedTemplate.indexOf(liMatches[i]), pattern.extendedTemplate.indexOf(end) + end.length);
pattern.extendedTemplate = pattern.extendedTemplate.replace(repeatingBlock, repeatedBlockHtml);

//update the extendedTemplate in the partials object in case this pattern is consumed later
patternlab.partials[pattern.key] = pattern.extendedTemplate;

});
}
}
}

return {
get_list_item_iteration_keys: function () {
return getListItemIterationKeys();
},
process_list_item_partials: function (pattern, patternlab) {
processListItemPartials(pattern, patternlab);
}
Expand Down
125 changes: 77 additions & 48 deletions core/lib/parameter_hunter.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@

var parameter_hunter = function () {

var extend = require('util')._extend,
JSON5 = require('json5'),
var JSON5 = require('json5'),
pa = require('./pattern_assembler'),
smh = require('./style_modifier_hunter'),
pattern_assembler = new pa(),
Expand Down Expand Up @@ -159,7 +158,7 @@ var parameter_hunter = function () {
values.push(paramString.match(regex)[0].trim());

//truncate the beginning from paramString and continue either
//looking for a key, or returning
//looking for a key, or returning
paramString = paramString.replace(regex, '').trim();

//exit do while if the final char is '}'
Expand Down Expand Up @@ -241,67 +240,97 @@ var parameter_hunter = function () {
return paramStringWellFormed;
}

function findparameters(pattern, patternlab) {
function findparameters(pattern, patternlab, parameteredPartials) {
var uniquePartials = [];

if (pattern.parameteredPartials && pattern.parameteredPartials.length > 0) {
for (var i = 0; i < parameteredPartials.length; i++) {

//compile this partial immeadiately, essentially consuming it.
pattern.parameteredPartials.forEach(function (pMatch) {
//find the partial's name and retrieve it
var partialName = pMatch.match(/([\w\-\.\/~]+)/g)[0];
var partialPattern = pattern_assembler.get_pattern_by_key(partialName, patternlab);
//limit iteration to one time per partial. eliminate duplicates.
if (uniquePartials.indexOf(parameteredPartials[i]) === -1) {
uniquePartials.push(parameteredPartials[i]);
} else {
continue;
}

//if we retrieved a pattern we should make sure that its extendedTemplate is reset. looks to fix #190
partialPattern.extendedTemplate = partialPattern.template;
//find the partial's name and retrieve it
var partialName = parameteredPartials[i].match(/([\w\-\.\/~]+)/g)[0];
var partialPattern = pattern_assembler.get_pattern_by_key(partialName, patternlab);

if (patternlab.config.debug) {
console.log('found patternParameters for ' + partialName);
}
if (!partialPattern) {
throw ('Could not find pattern with key ' + partialName);
}

//strip out the additional data, convert string to JSON.
var leftParen = pMatch.indexOf('(');
var rightParen = pMatch.lastIndexOf(')');
var paramString = '{' + pMatch.substring(leftParen + 1, rightParen) + '}';
var paramStringWellFormed = paramToJson(paramString);

var paramData = {};
var globalData = {};
var localData = {};

try {
paramData = JSON5.parse(paramStringWellFormed);
globalData = JSON5.parse(JSON5.stringify(patternlab.data));
localData = JSON5.parse(JSON5.stringify(pattern.jsonFileData || {}));
} catch (err) {
console.log('There was an error parsing JSON for ' + pattern.abspath);
console.log(err);
}
//if we retrieved a pattern we should make sure that its tmpTemplate is reset. looks to fix #190
partialPattern.tmpTemplate = partialPattern.escapedTemplate;

var allData = pattern_assembler.merge_data(globalData, localData);
allData = pattern_assembler.merge_data(allData, paramData);
if (patternlab.config.debug) {
console.log('found patternParameters for ' + partialName);
}

//if partial has style modifier data, replace the styleModifier value
if (pattern.stylePartials && pattern.stylePartials.length > 0) {
style_modifier_hunter.consume_style_modifier(partialPattern, pMatch, patternlab);
//if the current tag has styleModifier data, replace the styleModifier value in the partial
//do this before rendering parametered tags
if (pattern_assembler.find_pattern_partials_with_style_modifiers(parameteredPartials[i])) {
style_modifier_hunter.consume_style_modifier(partialPattern, parameteredPartials[i], patternlab);
}

//strip out the additional data, convert string to JSON
var leftParen = parameteredPartials[i].indexOf('(');
var rightParen = parameteredPartials[i].lastIndexOf(')');
var paramString = '{' + parameteredPartials[i].substring(leftParen + 1, rightParen) + '}';
var paramStringWellFormed = paramToJson(paramString);

var paramData = {};
try {
paramData = JSON5.parse(paramStringWellFormed);
} catch (e) {
console.log(e);
}

var regex;
var escapedKey;
for (var j in paramData) {
if (paramData.hasOwnProperty(j) && (typeof paramData[j] === 'boolean' || typeof paramData[j] === 'number' || typeof paramData[j] === 'string')) {
//escape regex special characters as per https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Using_special_characters
escapedKey = j.replace(/[.*+?^${}()|[\]\\\/]/g, '\\$&');

//apply replacement based on allowable characters from lines 78 and 79 of mustache.js
//of the Mustache for JS project.
regex = new RegExp('\\{\\{([\\{#\\^\\/&]?\\s*' + escapedKey + '\\s*\\}?)\\}\\}', 'g');

//since ERB is already used for escaping in partialPattern.escapedTemplate,
//using <%% %%> as escaping tags.
partialPattern.tmpTemplate = partialPattern.tmpTemplate.replace(regex, '<%%$1%%>');
regex = new RegExp('<%([\\{#\\^\\/&]?\\s*' + escapedKey + '\\s*\\}?)%>', 'g');
partialPattern.tmpTemplate = partialPattern.tmpTemplate.replace(regex, '<%%$1%%>');

//when using alternate delimiters, triple-Mustache syntax won't work.
//<%{ must be replaced with <%# and }%> with %>.
partialPattern.tmpTemplate = partialPattern.tmpTemplate.replace(/<%%\{/g, '<%%&');
partialPattern.tmpTemplate = partialPattern.tmpTemplate.replace(/\}%%>/g, '%%>');
}
}

//extend pattern data links into link for pattern link shortcuts to work. we do this locally and globally
allData.link = extend({}, patternlab.data.link);
//then set the new delimiter at the beginning of the extended template
partialPattern.tmpTemplate = '{{=<%% %%>=}}' + partialPattern.tmpTemplate;

var renderedPartial = pattern_assembler.renderPattern(partialPattern.extendedTemplate, allData, patternlab.partials);
//the reason for rendering at this point is to eliminate the unwanted
//recursion paths that would remain if irrelevant conditional tags persisted.
partialPattern.tmpTemplate = pattern_assembler.renderPattern(partialPattern.tmpTemplate, paramData);
partialPattern.tmpTemplate = pattern_assembler.winnow_unused_tags(partialPattern.tmpTemplate, pattern);

//remove the parameter from the partial and replace it with the rendered partial + paramData
pattern.extendedTemplate = pattern.extendedTemplate.replace(pMatch, renderedPartial);
//replace parameteredPartials with their rendered values.
var pMatch = parameteredPartials[i].replace(/[.*+?^${}()|[\]\\\/]/g, '\\$&');
regex = new RegExp(pMatch, 'g');
pattern.extendedTemplate = pattern.extendedTemplate.replace(regex, partialPattern.tmpTemplate);

//update the extendedTemplate in the partials object in case this pattern is consumed later
patternlab.partials[pattern.key] = pattern.extendedTemplate;
});
//free tmpTemplate from memory.
partialPattern.tmpTemplate = '';
}
}

return {
find_parameters: function (pattern, patternlab) {
findparameters(pattern, patternlab);
find_parameters: function (pattern, patternlab, parameteredPartials, tmpTemplate) {
findparameters(pattern, patternlab, parameteredPartials, tmpTemplate);
}
};

Expand Down
Loading