From a14feacfd03be31de4501cf1e6fb0813d7eb03a3 Mon Sep 17 00:00:00 2001 From: BRIAN MUENZENMEYER Date: Sat, 27 Aug 2016 00:44:26 -0500 Subject: [PATCH 1/6] initial support for #410 --- core/lib/pattern_assembler.js | 78 +++++++++++++++++----------- core/lib/pattern_engines.js | 11 +--- core/lib/patternlab.js | 98 +++++++++++++++++++++++------------ core/lib/ui_builder.js | 40 +++++++++----- package.json | 2 +- 5 files changed, 141 insertions(+), 88 deletions(-) diff --git a/core/lib/pattern_assembler.js b/core/lib/pattern_assembler.js index 1c305688d..1eb5b6fda 100644 --- a/core/lib/pattern_assembler.js +++ b/core/lib/pattern_assembler.js @@ -117,8 +117,6 @@ var pattern_assembler = function () { } // do global registration - - if (pattern.isPattern) { patternlab.partials[pattern.patternPartial] = pattern.extendedTemplate || pattern.template; @@ -202,6 +200,48 @@ var pattern_assembler = function () { } } + /** + * A helper that unravels a pattern looking for partials or listitems to unravel. + * The goal is really to convert pattern.template into pattern.extendedTemplate + * @param pattern - the pattern to decompose + * @param patternlab - global data store + * @param ignoreLineage - whether or not to hunt for lineage for this pattern + */ + function decomposePattern(pattern, patternlab, ignoreLineage) { + + var lineage_hunter = new lh(), + list_item_hunter = new lih(); + + pattern.extendedTemplate = pattern.template; + + //find how many partials there may be for the given pattern + var foundPatternPartials = pattern.findPartials(); + + //find any listItem blocks that within the pattern, even if there are no partials + list_item_hunter.process_list_item_partials(pattern, patternlab); + + // expand any partials present in this pattern; that is, drill down into + // the template and replace their calls in this template with rendered + // results + + if (pattern.engine.expandPartials && (foundPatternPartials !== null && foundPatternPartials.length > 0)) { + // eslint-disable-next-line + expandPartials(foundPatternPartials, list_item_hunter, patternlab, pattern); + + // update the extendedTemplate in the partials object in case this + // pattern is consumed later + patternlab.partials[pattern.patternPartial] = pattern.extendedTemplate; + } + + //find pattern lineage + if (!ignoreLineage) { + lineage_hunter.find_lineage(pattern, patternlab); + } + + //add to patternlab object so we can look these up later. + addPattern(pattern, patternlab); + } + function processPatternIterative(relPath, patternlab) { //check if the found file is a top-level markdown file @@ -323,9 +363,6 @@ var pattern_assembler = function () { function processPatternRecursive(file, patternlab) { - var lineage_hunter = new lh(), - list_item_hunter = new lih(); - //find current pattern in patternlab object using var file as a partial var currentPattern, i; @@ -341,32 +378,8 @@ var pattern_assembler = function () { //we are processing a markdown only pattern if (currentPattern.engine === null) { return; } - currentPattern.extendedTemplate = currentPattern.template; - - //find how many partials there may be for the given pattern - var foundPatternPartials = currentPattern.findPartials(); - - //find any listItem blocks that within the pattern, even if there are no partials - list_item_hunter.process_list_item_partials(currentPattern, patternlab); - - // expand any partials present in this pattern; that is, drill down into - // the template and replace their calls in this template with rendered - // results - - if (currentPattern.engine.expandPartials && (foundPatternPartials !== null && foundPatternPartials.length > 0)) { - // eslint-disable-next-line - expandPartials(foundPatternPartials, list_item_hunter, patternlab, currentPattern); - - // update the extendedTemplate in the partials object in case this - // pattern is consumed later - patternlab.partials[currentPattern.patternPartial] = currentPattern.extendedTemplate; - } - - //find pattern lineage - lineage_hunter.find_lineage(currentPattern, patternlab); - - //add to patternlab object so we can look these up later. - addPattern(currentPattern, patternlab); + //call our helper method to actually unravel the pattern with any partials + decomposePattern(currentPattern, patternlab); } function expandPartials(foundPatternPartials, list_item_hunter, patternlab, currentPattern) { @@ -501,6 +514,9 @@ var pattern_assembler = function () { addSubtypePattern: function (subtypePattern, patternlab) { addSubtypePattern(subtypePattern, patternlab); }, + decomposePattern: function (pattern, patternlab, ignoreLineage) { + decomposePattern(pattern, patternlab, ignoreLineage); + }, renderPattern: function (template, data, partials) { return renderPattern(template, data, partials); }, diff --git a/core/lib/pattern_engines.js b/core/lib/pattern_engines.js index acfe5f9db..451f8d4fe 100644 --- a/core/lib/pattern_engines.js +++ b/core/lib/pattern_engines.js @@ -1,13 +1,4 @@ -/* - * patternlab-node - v0.10.1 - 2015 - * - * Geoffrey Pursell, Brian Muenzenmeyer, and the web community. - * Licensed under the MIT license. - * - * Many thanks to Brad Frost and Dave Olsen for inspiration, encouragement, and advice. - * - */ - +// special shoutout to Geoffrey Pursell for single-handedly making Pattern Lab Node Pattern Engines possible! 'use strict'; var path = require('path'); diff --git a/core/lib/patternlab.js b/core/lib/patternlab.js index 99accaa15..3d591bce2 100644 --- a/core/lib/patternlab.js +++ b/core/lib/patternlab.js @@ -1,5 +1,5 @@ /* - * patternlab-node - v2.4.4 - 2016 + * patternlab-node - v2.5.0 - 2016 * * Brian Muenzenmeyer, Geoff Pursell, and the web community. * Licensed under the MIT license. @@ -17,7 +17,6 @@ var diveSync = require('diveSync'), plutils = require('./utilities'); function buildPatternData(dataFilesPath, fs) { - var dataFilesPath = dataFilesPath; var dataFiles = glob.sync(dataFilesPath + '*.json', {"ignore" : [dataFilesPath + 'listitems.json']}); var mergeObject = {}; dataFiles.forEach(function (filePath) { @@ -84,8 +83,13 @@ var patternlab_engine = function (config) { lh = require('./lineage_hunter'), ui = require('./ui_builder'), sm = require('./starterkit_manager'), + Pattern = require('./object_factory').Pattern, patternlab = {}; + var pattern_assembler = new pa(), + pattern_exporter = new pe(), + lineage_hunter = new lh(); + patternlab.package = fs.readJSONSync(path.resolve(__dirname, '../../package.json')); patternlab.config = config || fs.readJSONSync(path.resolve(__dirname, '../../patternlab-config.json')); @@ -191,6 +195,46 @@ var patternlab_engine = function (config) { starterkit_manager.load_starterkit(starterkitName, clean); } + /** + * Process the user-defined pattern head and prepare it for rendering + */ + function processHeadPattern() { + try { + var headPath = path.resolve(paths.source.meta, '_00-head.mustache'); + var headPattern = new Pattern(headPath, null, patternlab); + headPattern.template = fs.readFileSync(headPath, 'utf8'); + headPattern.isPattern = false; + headPattern.isMetaPattern = true; + pattern_assembler.decomposePattern(headPattern, patternlab, true); + patternlab.userHead = headPattern.extendedTemplate; + } + catch (ex) { + plutils.logRed('\nWARNING: Could not find the user-editable header template, currently configured to be at ' + path.join(config.paths.source.meta, '_00-head.mustache') + '. Your configured path may be incorrect (check paths.source.meta in your config file), the file may have been deleted, or it may have been left in the wrong place during a migration or update.\n'); + if (patternlab.config.debug) { console.log(ex); } + process.exit(1); + } + } + + /** + * Process the user-defined pattern footer and prepare it for rendering + */ + function processFootPattern() { + try { + var footPath = path.resolve(paths.source.meta, '_01-foot.mustache'); + var footPattern = new Pattern(footPath, null, patternlab); + footPattern.template = fs.readFileSync(footPath, 'utf8'); + footPattern.isPattern = false; + footPattern.isMetaPattern = true; + pattern_assembler.decomposePattern(footPattern, patternlab, true); + patternlab.userFoot = footPattern.extendedTemplate; + } + catch (ex) { + plutils.logRed('\nWARNING: Could not find the user-editable footer template, currently configured to be at ' + path.join(config.paths.source.meta, '_01-foot.mustache') + '. Your configured path may be incorrect (check paths.source.meta in your config file), the file may have been deleted, or it may have been left in the wrong place during a migration or update.\n'); + if (patternlab.config.debug) { console.log(ex); } + process.exit(1); + } + } + function buildPatterns(deletePatternDir) { try { patternlab.data = buildPatternData(paths.source.data, fs); @@ -222,37 +266,18 @@ var patternlab_engine = function (config) { setCacheBust(); - var pattern_assembler = new pa(), - pattern_exporter = new pe(), - lineage_hunter = new lh(), - patterns_dir = paths.source.patterns; - pattern_assembler.combine_listItems(patternlab); // diveSync once to perform iterative populating of patternlab object - processAllPatternsIterative(pattern_assembler, patterns_dir, patternlab); + processAllPatternsIterative(pattern_assembler, paths.source.patterns, patternlab); //diveSync again to recursively include partials, filling out the //extendedTemplate property of the patternlab.patterns elements - processAllPatternsRecursive(pattern_assembler, patterns_dir, patternlab); + processAllPatternsRecursive(pattern_assembler, paths.source.patterns, patternlab); - //set user defined head and foot if they exist - try { - patternlab.userHead = fs.readFileSync(path.resolve(paths.source.meta, '_00-head.mustache'), 'utf8'); - } - catch (ex) { - plutils.logRed('\nWARNING: Could not find the user-editable header template, currently configured to be at ' + path.join(config.paths.source.meta, '_00-head.mustache') + '. Your configured path may be incorrect (check paths.source.meta in your config file), the file may have been deleted, or it may have been left in the wrong place during a migration or update.\n'); - if (patternlab.config.debug) { console.log(ex); } - process.exit(1); - } - try { - patternlab.userFoot = fs.readFileSync(path.resolve(paths.source.meta, '_01-foot.mustache'), 'utf8'); - } - catch (ex) { - plutils.logRed('\nWARNING: Could not find the user-editable footer template, currently configured to be at ' + path.join(config.paths.source.meta, '_01-foot.mustache') + '. Your configured path may be incorrect (check paths.source.meta in your config file), the file may have been deleted, or it may have been left in the wrong place during a migration or update.\n'); - if (patternlab.config.debug) { console.log(ex); } - process.exit(1); - } + //take the user defined head and foot and process any data and patterns that apply + processHeadPattern(); + processFootPattern(); //now that all the main patterns are known, look for any links that might be within data and expand them //we need to do this before expanding patterns & partials into extendedTemplates, otherwise we could lose the data -> partial reference @@ -287,8 +312,6 @@ var patternlab_engine = function (config) { return false; } - pattern.header = head; - //todo move this into lineage_hunter pattern.patternLineages = pattern.lineage; pattern.patternLineageExists = pattern.lineage.length > 0; @@ -307,14 +330,13 @@ var patternlab_engine = function (config) { allData = plutils.mergeData(allData, pattern.jsonFileData); allData.cacheBuster = patternlab.cacheBuster; + //re-rendering the headHTML each time allows pattern-specific data to influence the head of the pattern + pattern.header = head; var headHTML = pattern_assembler.renderPattern(pattern.header, allData); //render the extendedTemplate with all data pattern.patternPartialCode = pattern_assembler.renderPattern(pattern, allData); - //todo see if this is still needed - //pattern.patternPartialCodeE = entity_encoder.encode(pattern.patternPartialCode); - // stringify this data for individual pattern rendering and use on the styleguide // see if patternData really needs these other duped values pattern.patternData = JSON.stringify({ @@ -350,9 +372,17 @@ var patternlab_engine = function (config) { cacheBuster: patternlab.cacheBuster }); - var footerHTML = pattern_assembler.renderPattern(patternlab.userFoot, { - patternLabFoot : footerPartial - }); + var allFooterData; + try { + allFooterData = JSON5.parse(JSON5.stringify(patternlab.data)); + } catch (err) { + console.log('There was an error parsing JSON for ' + pattern.relPath); + console.log(err); + } + allFooterData = plutils.mergeData(allFooterData, pattern.jsonFileData); + allFooterData.patternLabFoot = footerPartial; + + var footerHTML = pattern_assembler.renderPattern(patternlab.userFoot, allFooterData); //write the compiled template to the public patterns directory var patternPage = headHTML + pattern.patternPartialCode + footerHTML; diff --git a/core/lib/ui_builder.js b/core/lib/ui_builder.js index 4fecf68d8..77f94c84c 100644 --- a/core/lib/ui_builder.js +++ b/core/lib/ui_builder.js @@ -1,6 +1,7 @@ "use strict"; var path = require('path'); +var JSON5 = require('json5'); var fs = require('fs-extra'); var ae = require('./annotation_exporter'); var of = require('./object_factory'); @@ -98,7 +99,16 @@ var ui_builder = function () { isOmitted = pattern.relPath.charAt(0) === '_' || pattern.relPath.indexOf('/_') > -1; if (isOmitted) { if (patternlab.config.debug) { - console.log('Omitting ' + pattern.patternPartial + ' from styleguide patterns its contained within an underscored directory.'); + console.log('Omitting ' + pattern.patternPartial + ' from styleguide patterns because its contained within an underscored directory.'); + } + return true; + } + + //this pattern is a head or foot pattern + isOmitted = pattern.isMetaPattern; + if (isOmitted) { + if (patternlab.config.debug) { + console.log('Omitting ' + pattern.patternPartial + ' from styleguide patterns because its a meta pattern.'); } return true; } @@ -396,10 +406,17 @@ var ui_builder = function () { cacheBuster: patternlab.cacheBuster }); + var allFooterData; + try { + allFooterData = JSON5.parse(JSON5.stringify(patternlab.data)); + } catch (err) { + console.log('There was an error parsing JSON for patternlab.data'); + console.log(err); + } + allFooterData.patternLabFoot = footerPartial; + //then add it to the user footer - var footerHTML = pattern_assembler.renderPattern(patternlab.userFoot, { - patternLabFoot : footerPartial - }); + var footerHTML = pattern_assembler.renderPattern(patternlab.userFoot, allFooterData); return footerHTML; } @@ -505,7 +522,6 @@ var ui_builder = function () { return patterns; } - /** * Write out our pattern information for use by the front end * @param patternlab - global data store @@ -574,19 +590,19 @@ var ui_builder = function () { var headerPartial = pattern_assembler.renderPattern(patternlab.header, { cacheBuster: patternlab.cacheBuster }); - var headerHTML = pattern_assembler.renderPattern(patternlab.userHead, { - patternLabHead : headerPartial, - cacheBuster: patternlab.cacheBuster - }); + + var headFootData = patternlab.data; + headFootData.patternLabHead = headerPartial; + headFootData.cacheBuster = patternlab.cacheBuster; + var headerHTML = pattern_assembler.renderPattern(patternlab.userHead, headFootData); //set the pattern-specific footer by compiling the general-footer with data, and then adding it to the meta footer var footerPartial = pattern_assembler.renderPattern(patternlab.footer, { patternData: '{}', cacheBuster: patternlab.cacheBuster }); - var footerHTML = pattern_assembler.renderPattern(patternlab.userFoot, { - patternLabFoot : footerPartial - }); + headFootData.patternLabFoot = footerPartial; + var footerHTML = pattern_assembler.renderPattern(patternlab.userFoot, headFootData); //build the viewall pages var allPatterns = buildViewAllPages(headerHTML, patternlab, styleguidePatterns); diff --git a/package.json b/package.json index 811086048..f6f795888 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "patternlab-node", "description": "Pattern Lab is a collection of tools to help you create atomic design systems. This is the node command line interface (CLI).", - "version": "2.4.4", + "version": "2.5.0", "main": "./core/lib/patternlab.js", "dependencies": { "diveSync": "^0.3.0", From 62ba3df260a2bf688f8a1e321f1c8d33a8e9649a Mon Sep 17 00:00:00 2001 From: jeremykenedy Date: Mon, 29 Aug 2016 10:06:42 -0700 Subject: [PATCH 2/6] update typo in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 63dfc975b..fa94173db 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ If this looks **REALLY DIFFERENT** from what you expected, check out the [Change ## Upgrading -If you find yourself here and are looking to ugpgrade, check out how to upgrade from version to version of Pattern Lab Node here: [https://github.com/pattern-lab/patternlab-node/wiki/Upgrading](https://github.com/pattern-lab/patternlab-node/wiki/Upgrading) +If you find yourself here and are looking to upgrade, check out how to upgrade from version to version of Pattern Lab Node here: [https://github.com/pattern-lab/patternlab-node/wiki/Upgrading](https://github.com/pattern-lab/patternlab-node/wiki/Upgrading) ## Command Line Interface From b32ce029cc6f9d2f230b8192bfc87ef711b23c00 Mon Sep 17 00:00:00 2001 From: BRIAN MUENZENMEYER Date: Mon, 29 Aug 2016 23:14:27 -0500 Subject: [PATCH 3/6] fix issue where pattern type was not resolving, causing the pattern type view all pages to overwrite index, only to be overwritten by the last index, covering up the issue fixes #452 --- core/lib/ui_builder.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/lib/ui_builder.js b/core/lib/ui_builder.js index 77f94c84c..3d41acea5 100644 --- a/core/lib/ui_builder.js +++ b/core/lib/ui_builder.js @@ -500,9 +500,13 @@ var ui_builder = function () { //todo this isn't quite working yet //typePatterns = typePatterns.concat(getPatternItems(patternlab, patternType)); - //render the viewall template + //get the appropriate patternType + var anyPatternOfType = _.find(typePatterns, function (pat) { + return pat.patternType && pat.patternType !== '';}); + + //render the viewall template for the type var viewAllHTML = buildViewAllHTML(patternlab, typePatterns, patternType); - writeFile(paths.public.patterns + p.subdir + '/index.html', mainPageHeadHtml + viewAllHTML + footerHTML); + writeFile(paths.public.patterns + anyPatternOfType.patternType + '/index.html', mainPageHeadHtml + viewAllHTML + footerHTML); //determine if we should omit this patterntype completely from the viewall page var omitPatternType = styleGuideExcludes && styleGuideExcludes.length From 59dc7e35cc6735669abdefeb76ff661297a66860 Mon Sep 17 00:00:00 2001 From: BRIAN MUENZENMEYER Date: Mon, 29 Aug 2016 23:58:02 -0500 Subject: [PATCH 4/6] added a warning about too-deep patterns per @gael-boyenval's suggestion --- core/lib/pattern_assembler.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/core/lib/pattern_assembler.js b/core/lib/pattern_assembler.js index 1eb5b6fda..f895e6a93 100644 --- a/core/lib/pattern_assembler.js +++ b/core/lib/pattern_assembler.js @@ -244,6 +244,19 @@ var pattern_assembler = function () { function processPatternIterative(relPath, patternlab) { + var relativeDepth = relPath.match(/\w(?=\\)|\w(?=\/)/g || []).length; + if (relativeDepth > 2) { + console.log(''); + plutils.logOrange('Warning:'); + plutils.logOrange('A pattern file: ' + relPath + ' was found greater than 2 levels deep from ' + patternlab.config.paths.source.patterns + '.'); + plutils.logOrange('It\'s strongly suggested to not deviate from the following structure under _patterns/'); + plutils.logOrange('[patternType]/[patternSubtype]/[patternName].[patternExtension]'); + console.log(''); + plutils.logOrange('While Pattern Lab may still function, assets may 404 and frontend links may break. Consider yourself warned. '); + plutils.logOrange('Read More: http://patternlab.io/docs/pattern-organization.html'); + console.log(''); + } + //check if the found file is a top-level markdown file var fileObject = path.parse(relPath); if (fileObject.ext === '.md') { From f34033982fee7cc6ebc5a486f8287c6d6ca0e4c3 Mon Sep 17 00:00:00 2001 From: BRIAN MUENZENMEYER Date: Wed, 31 Aug 2016 00:22:56 -0500 Subject: [PATCH 5/6] prevent stylemodifier parsing from polluting the unstyled pattern closes #444 --- core/lib/pattern_assembler.js | 7 +++-- test/pattern_assembler_tests.js | 49 ++++++++++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/core/lib/pattern_assembler.js b/core/lib/pattern_assembler.js index f895e6a93..f88861628 100644 --- a/core/lib/pattern_assembler.js +++ b/core/lib/pattern_assembler.js @@ -426,14 +426,17 @@ var pattern_assembler = function () { processPatternRecursive(partialPath, patternlab); //complete assembly of extended template + //create a copy of the partial so as to not pollute it after the getPartial call. var partialPattern = getPartial(partial, patternlab); + var cleanPartialPattern = JSON5.parse(JSON5.stringify(partialPattern)); + cleanPartialPattern.extendedTemplate = cleanPartialPattern.template; //if partial has style modifier data, replace the styleModifier value if (currentPattern.stylePartials && currentPattern.stylePartials.length > 0) { - style_modifier_hunter.consume_style_modifier(partialPattern, foundPatternPartials[i], patternlab); + style_modifier_hunter.consume_style_modifier(cleanPartialPattern, foundPatternPartials[i], patternlab); } - currentPattern.extendedTemplate = currentPattern.extendedTemplate.replace(foundPatternPartials[i], partialPattern.extendedTemplate); + currentPattern.extendedTemplate = currentPattern.extendedTemplate.replace(foundPatternPartials[i], cleanPartialPattern.extendedTemplate); } } diff --git a/test/pattern_assembler_tests.js b/test/pattern_assembler_tests.js index 08b22b871..9c0e8704e 100644 --- a/test/pattern_assembler_tests.js +++ b/test/pattern_assembler_tests.js @@ -265,7 +265,7 @@ var mixedPattern = new Pattern('00-test/07-mixed-params.mustache'); mixedPattern.template = fs.readFileSync(patterns_dir + '/00-test/07-mixed-params.mustache', 'utf8'); mixedPattern.stylePartials = pattern_assembler.find_pattern_partials_with_style_modifiers(mixedPattern); - mixedPattern.parameteredPartials = pattern_assembler.find_pattern_partials_with_parameters(mixedPattern); + mixedPattern.parameteredPartials = pattern_assembler.find_pattern_partials_with_parameters(mixedPattern); pattern_assembler.addPattern(atomPattern, pl); pattern_assembler.addPattern(mixedPattern, pl); @@ -322,6 +322,53 @@ test.equals(bookendPattern.extendedTemplate.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), expectedValue.trim()); test.done(); }, + 'processPatternRecursive - does not pollute previous patterns when a later one is found with a styleModifier' : function(test){ + //arrange + var fs = require('fs-extra'); + var pattern_assembler = new pa(); + var patterns_dir = './test/files/_patterns'; + + var pl = {}; + pl.config = { + paths: { + source: { + patterns: patterns_dir + } + }, + outputFileSuffixes: { + rendered : '' + } + }; + pl.data = {}; + pl.data.link = {}; + pl.config.debug = false; + pl.patterns = []; + pl.partials = {}; + + var atomPattern = new Pattern('00-test/03-styled-atom.mustache'); + atomPattern.template = fs.readFileSync(patterns_dir + '/00-test/03-styled-atom.mustache', 'utf8'); + atomPattern.stylePartials = pattern_assembler.find_pattern_partials_with_style_modifiers(atomPattern); + atomPattern.parameteredPartials = pattern_assembler.find_pattern_partials_with_parameters(atomPattern); + + var anotherPattern = new Pattern('00-test/12-another-styled-atom.mustache'); + anotherPattern.template = fs.readFileSync(patterns_dir + '/00-test/12-another-styled-atom.mustache', 'utf8'); + anotherPattern.stylePartials = pattern_assembler.find_pattern_partials_with_style_modifiers(anotherPattern); + anotherPattern.parameteredPartials = pattern_assembler.find_pattern_partials_with_parameters(anotherPattern); + + pattern_assembler.addPattern(atomPattern, pl); + pattern_assembler.addPattern(anotherPattern, pl); + + //act + pattern_assembler.process_pattern_recursive('00-test' + path.sep + '12-another-styled-atom.mustache', pl, {}); + + //assert + var expectedCleanValue = ' {{message}} '; + var expectedSetValue = ' {{message}} '; + test.equals(anotherPattern.extendedTemplate.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), expectedSetValue.trim()); + test.equals(atomPattern.template.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), expectedCleanValue.trim()); + test.equals(atomPattern.extendedTemplate.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), expectedCleanValue.trim()); + test.done(); + }, 'setState - applies any patternState matching the pattern' : function(test){ //arrange var pa = require('../core/lib/pattern_assembler'); From 5e90b80eee55db1e2abc804f5a5be5baffb78a7d Mon Sep 17 00:00:00 2001 From: Brian Muenzenmeyer Date: Wed, 31 Aug 2016 10:15:24 -0500 Subject: [PATCH 6/6] fix and cover pseudo-pattern 404s closes #458 --- core/lib/pseudopattern_hunter.js | 2 +- test/pseudopattern_hunter_tests.js | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/core/lib/pseudopattern_hunter.js b/core/lib/pseudopattern_hunter.js index eb8753be2..2b799f2f3 100644 --- a/core/lib/pseudopattern_hunter.js +++ b/core/lib/pseudopattern_hunter.js @@ -54,7 +54,7 @@ var pseudopattern_hunter = function () { // use the same template engine as the non-variant engine: currentPattern.engine - }); + }, patternlab); //process the companion markdown file if it exists pattern_assembler.parse_pattern_markdown(patternVariant, patternlab); diff --git a/test/pseudopattern_hunter_tests.js b/test/pseudopattern_hunter_tests.js index f428172ce..dd2d4c4c2 100644 --- a/test/pseudopattern_hunter_tests.js +++ b/test/pseudopattern_hunter_tests.js @@ -1,5 +1,6 @@ "use strict"; +var path = require('path'); var pha = require('../core/lib/pseudopattern_hunter'); var pa = require('../core/lib/pattern_assembler'); var Pattern = require('../core/lib/object_factory').Pattern; @@ -44,6 +45,7 @@ exports['pseudopattern_hunter'] = { test.equals(pl.patterns[1].patternPartial, 'test-styled-atom-alt'); test.equals(pl.patterns[1].extendedTemplate.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), ' {{message}} '); test.equals(JSON.stringify(pl.patterns[1].jsonFileData), JSON.stringify({"message": "alternateMessage"})); + test.equals(pl.patterns[1].patternLink, '00-test-03-styled-atom-alt' + path.sep + '00-test-03-styled-atom-alt.html'); test.done(); }