Skip to content

Commit 7c7ff39

Browse files
author
Brian Muenzenmeyer
authored
Merge pull request #391 from pattern-lab/dev
Pattern Lab Node 2.2.0
2 parents 2fea50c + 1d651c2 commit 7c7ff39

File tree

6 files changed

+130
-44
lines changed

6 files changed

+130
-44
lines changed

core/lib/annotation_exporter.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@ var annotations_exporter = function (pl) {
2626

2727
//parse as JSON by removing the old wrapping js syntax. comments and the trailing semi-colon
2828
oldAnnotations = oldAnnotations.replace('var comments = ', '');
29+
oldAnnotations = oldAnnotations.replace('};', '}');
30+
2931
try {
30-
var oldAnnotationsJSON = JSON5.parse(oldAnnotations.trim().slice(0, -1));
32+
var oldAnnotationsJSON = JSON5.parse(oldAnnotations);
3133
} catch (ex) {
3234
console.log('There was an error parsing JSON for ' + paths.source.annotations + 'annotations.js');
3335
console.log(ex);

core/lib/object_factory.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ var Pattern = function (relPath, data) {
4646
// name of the pattern. UPDATE: this.key is now known as this.patternPartial
4747
this.patternPartial = this.patternGroup + '-' + this.patternBaseName;
4848

49+
this.isPattern = true;
4950
this.patternState = '';
5051
this.template = '';
5152
this.patternPartialCode = '';
@@ -64,11 +65,14 @@ Pattern.prototype = {
6465
// render method on oPatterns; this acts as a proxy for the PatternEngine's
6566
// render function
6667
render: function (data, partials) {
67-
return this.engine.renderPattern(this, data || this.jsonFileData, partials);
68+
if (this.engine) {
69+
return this.engine.renderPattern(this, data || this.jsonFileData, partials);
70+
}
71+
return null;
6872
},
6973

7074
registerPartial: function () {
71-
if (typeof this.engine.registerPartial === 'function') {
75+
if (this.engine && typeof this.engine.registerPartial === 'function') {
7276
this.engine.registerPartial(this);
7377
}
7478
},

core/lib/pattern_assembler.js

Lines changed: 67 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
"use strict";
22

3-
var pattern_assembler = function () {
4-
var path = require('path'),
5-
fs = require('fs-extra'),
6-
Pattern = require('./object_factory').Pattern,
7-
pph = require('./pseudopattern_hunter'),
8-
mp = require('./markdown_parser'),
9-
plutils = require('./utilities'),
10-
patternEngines = require('./pattern_engines');
11-
3+
var path = require('path'),
4+
fs = require('fs-extra'),
5+
Pattern = require('./object_factory').Pattern,
6+
pph = require('./pseudopattern_hunter'),
7+
mp = require('./markdown_parser'),
8+
plutils = require('./utilities'),
9+
patternEngines = require('./pattern_engines'),
10+
lh = require('./lineage_hunter'),
11+
lih = require('./list_item_hunter'),
12+
smh = require('./style_modifier_hunter'),
13+
ph = require('./parameter_hunter'),
14+
JSON5 = require('json5');
15+
16+
var markdown_parser = new mp();
1217

18+
var pattern_assembler = function () {
1319
// HELPER FUNCTIONS
1420

1521
function getPartial(partialName, patternlab) {
@@ -108,14 +114,26 @@ var pattern_assembler = function () {
108114
}
109115

110116
// do global registration
117+
118+
119+
if (pattern.isPattern) {
120+
patternlab.partials[pattern.patternPartial] = pattern.extendedTemplate || pattern.template;
121+
122+
// do plugin-specific registration
123+
pattern.registerPartial();
124+
} else {
125+
patternlab.partials[pattern.patternPartial] = pattern.patternDesc;
126+
}
127+
111128
patternlab.patterns.push(pattern);
112-
patternlab.partials[pattern.patternPartial] = pattern.extendedTemplate || pattern.template;
113129

114-
// do plugin-specific registration
115-
pattern.registerPartial();
116130
}
117131
}
118132

133+
function addSubtypePattern(subtypePattern, patternlab) {
134+
patternlab.subtypePatterns[subtypePattern.patternPartial] = subtypePattern;
135+
}
136+
119137
// Render a pattern on request. Long-term, this should probably go away.
120138
function renderPattern(pattern, data, partials) {
121139
// if we've been passed a full Pattern, it knows what kind of template it
@@ -133,8 +151,6 @@ var pattern_assembler = function () {
133151

134152
function parsePatternMarkdown(currentPattern, patternlab) {
135153

136-
var markdown_parser = new mp();
137-
138154
try {
139155
var markdownFileName = path.resolve(patternlab.config.paths.source.patterns, currentPattern.subdir, currentPattern.fileName + ".md");
140156
var markdownFileContents = fs.readFileSync(markdownFileName, 'utf8');
@@ -185,11 +201,40 @@ var pattern_assembler = function () {
185201

186202
function processPatternIterative(relPath, patternlab) {
187203

204+
//check if the found file is a top-level markdown file
205+
var fileObject = path.parse(relPath);
206+
if (fileObject.ext === '.md') {
207+
try {
208+
var proposedDirectory = path.resolve(patternlab.config.paths.source.patterns, fileObject.dir, fileObject.name);
209+
var proposedDirectoryStats = fs.statSync(proposedDirectory);
210+
if (proposedDirectoryStats.isDirectory()) {
211+
var subTypeMarkdownFileContents = fs.readFileSync(proposedDirectory + '.md', 'utf8');
212+
var subTypeMarkdown = markdown_parser.parse(subTypeMarkdownFileContents);
213+
var subTypePattern = new Pattern(relPath);
214+
subTypePattern.patternSectionSubtype = true;
215+
subTypePattern.patternLink = subTypePattern.name + '/index.html';
216+
subTypePattern.patternDesc = subTypeMarkdown.markdown;
217+
subTypePattern.patternPartial = 'viewall-' + subTypePattern.patternPartial;
218+
subTypePattern.isPattern = false;
219+
subTypePattern.engine = null;
220+
221+
addSubtypePattern(subTypePattern, patternlab)
222+
return subTypePattern;
223+
}
224+
} catch (err) {
225+
// no file exists, meaning it's a pattern markdown file
226+
if (err.code !== 'ENOENT') {
227+
console.log(err);
228+
}
229+
}
230+
231+
}
232+
188233
var pseudopattern_hunter = new pph();
189234

190235
//extract some information
191-
var filename = path.basename(relPath);
192-
var ext = path.extname(filename);
236+
var filename = fileObject.base;
237+
var ext = fileObject.ext;
193238
var patternsPath = patternlab.config.paths.source.patterns;
194239

195240
// skip non-pattern files
@@ -274,8 +319,6 @@ var pattern_assembler = function () {
274319
}
275320

276321
function processPatternRecursive(file, patternlab) {
277-
var lh = require('./lineage_hunter'),
278-
lih = require('./list_item_hunter');
279322

280323
var lineage_hunter = new lh(),
281324
list_item_hunter = new lih();
@@ -292,6 +335,9 @@ var pattern_assembler = function () {
292335
//return if processing an ignored file
293336
if (typeof currentPattern === 'undefined') { return; }
294337

338+
//we are processing a markdown only pattern
339+
if (currentPattern.engine === null) { return; }
340+
295341
currentPattern.extendedTemplate = currentPattern.template;
296342

297343
//find how many partials there may be for the given pattern
@@ -321,8 +367,6 @@ var pattern_assembler = function () {
321367
}
322368

323369
function expandPartials(foundPatternPartials, list_item_hunter, patternlab, currentPattern) {
324-
var smh = require('./style_modifier_hunter'),
325-
ph = require('./parameter_hunter');
326370

327371
var style_modifier_hunter = new smh(),
328372
parameter_hunter = new ph();
@@ -365,7 +409,6 @@ var pattern_assembler = function () {
365409
}
366410

367411
function parseDataLinksHelper(patternlab, obj, key) {
368-
var JSON5 = require('json5');
369412
var linkRE, dataObjAsString, linkMatches, expandedLink;
370413

371414
linkRE = /link\.[A-z0-9-_]+/g;
@@ -427,6 +470,9 @@ var pattern_assembler = function () {
427470
addPattern: function (pattern, patternlab) {
428471
addPattern(pattern, patternlab);
429472
},
473+
addSubtypePattern: function (subtypePattern, patternlab) {
474+
addSubtypePattern(subtypePattern, patternlab);
475+
},
430476
renderPattern: function (template, data, partials) {
431477
return renderPattern(template, data, partials);
432478
},

core/lib/patternlab.js

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* patternlab-node - v2.1.1 - 2016
2+
* patternlab-node - v2.2.0 - 2016
33
*
44
* Brian Muenzenmeyer, Geoff Pursell, and the web community.
55
* Licensed under the MIT license.
@@ -73,7 +73,6 @@ var patternlab_engine = function (config) {
7373
pe = require('./pattern_exporter'),
7474
lh = require('./lineage_hunter'),
7575
buildFrontEnd = require('./ui_builder'),
76-
he = require('html-entities').AllHtmlEntities,
7776
plutils = require('./utilities'),
7877
sm = require('./starterkit_manager'),
7978
patternlab = {};
@@ -148,7 +147,7 @@ var patternlab_engine = function (config) {
148147
// references. This happens specifically with the Handlebars engine. Remove
149148
// if you like 180MB log files.
150149
function propertyStringReplacer(key, value) {
151-
if (key === 'engine' && value.engineName) {
150+
if (key === 'engine' && value && value.engineName) {
152151
return '{' + value.engineName + ' engine object}';
153152
}
154153
return value;
@@ -207,13 +206,13 @@ var patternlab_engine = function (config) {
207206
process.exit(1);
208207
}
209208
patternlab.patterns = [];
209+
patternlab.subtypePatterns = {};
210210
patternlab.partials = {};
211211
patternlab.data.link = {};
212212

213213
setCacheBust();
214214

215215
var pattern_assembler = new pa(),
216-
entity_encoder = new he(),
217216
pattern_exporter = new pe(),
218217
lineage_hunter = new lh(),
219218
patterns_dir = paths.source.patterns;
@@ -276,6 +275,10 @@ var patternlab_engine = function (config) {
276275
//render all patterns last, so lineageR works
277276
patternlab.patterns.forEach(function (pattern) {
278277

278+
if (!pattern.isPattern) {
279+
return false;
280+
}
281+
279282
pattern.header = head;
280283

281284
//todo move this into lineage_hunter
@@ -294,15 +297,15 @@ var patternlab_engine = function (config) {
294297
console.log(err);
295298
}
296299
allData = plutils.mergeData(allData, pattern.jsonFileData);
300+
allData.cacheBuster = patternlab.cacheBuster;
297301

298-
//var headHTML = pattern_assembler.renderPattern(patternlab.userHead, allData);
299302
var headHTML = pattern_assembler.renderPattern(pattern.header, allData);
300303

301304
//render the extendedTemplate with all data
302305
pattern.patternPartialCode = pattern_assembler.renderPattern(pattern, allData);
303306

304307
//todo see if this is still needed
305-
pattern.patternPartialCodeE = entity_encoder.encode(pattern.patternPartialCode);
308+
//pattern.patternPartialCodeE = entity_encoder.encode(pattern.patternPartialCode);
306309

307310
// stringify this data for individual pattern rendering and use on the styleguide
308311
// see if patternData really needs these other duped values
@@ -333,7 +336,7 @@ var patternlab_engine = function (config) {
333336

334337
//set the pattern-specific footer by compiling the general-footer with data, and then adding it to the meta footer
335338
var footerPartial = pattern_assembler.renderPattern(patternlab.footer, {
336-
isPattern: true,
339+
isPattern: pattern.isPattern,
337340
patternData: pattern.patternData,
338341
cacheBuster: patternlab.cacheBuster
339342
});
@@ -351,6 +354,8 @@ var patternlab_engine = function (config) {
351354

352355
//write the encoded version too
353356
fs.outputFileSync(paths.public.patterns + pattern.patternLink.replace('.html', '.markup-only.html'), pattern.patternPartialCode);
357+
358+
return true;
354359
});
355360

356361
//export patterns if necessary

0 commit comments

Comments
 (0)