Skip to content

Commit 0607e06

Browse files
Merge pull request #542 from pattern-lab/engine-hooks-for-file-writing
Engine hooks for file writing
2 parents fc9ae1a + 8ed2ad4 commit 0607e06

File tree

2 files changed

+36
-15
lines changed

2 files changed

+36
-15
lines changed

.eslintrc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
"node": true,
44
"builtin": true
55
},
6+
"parserOptions": {
7+
"ecmaVersion": 6,
8+
"sourceType": "module"
9+
},
610
"globals": {},
711
"rules": {
812
"block-scoped-var": 0,

core/lib/patternlab.js

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,37 @@ var patternlab_engine = function (config) {
266266
}
267267
}
268268

269+
function writePatternFiles(headHTML, pattern, footerHTML) {
270+
const nullFormatter = str => str;
271+
const defaultFormatter = codeString => cleanHtml(codeString, {indent_size: 2});
272+
const makePath = type => path.join(paths.public.patterns, pattern.getPatternLink(patternlab, type));
273+
const patternPage = headHTML + pattern.patternPartialCode + footerHTML;
274+
const eng = pattern.engine;
275+
276+
//beautify the output if configured to do so
277+
const formatters = config.cleanOutputHtml ? {
278+
rendered: eng.renderedCodeFormatter || defaultFormatter,
279+
rawTemplate: eng.rawTemplateCodeFormatter || defaultFormatter,
280+
markupOnly: eng.markupOnlyCodeFormatter || defaultFormatter
281+
} : {
282+
rendered: nullFormatter,
283+
rawTemplate: nullFormatter,
284+
markupOnly: nullFormatter
285+
};
286+
287+
//prepare the path and contents of each output file
288+
const outputFiles = [
289+
{ path: makePath('rendered'), content: formatters.rendered(patternPage, pattern) },
290+
{ path: makePath('rawTemplate'), content: formatters.rawTemplate(pattern.template, pattern) },
291+
{ path: makePath('markupOnly'), content: formatters.markupOnly(pattern.patternPartialCode, pattern) }
292+
].concat(
293+
eng.addOutputFiles ? eng.addOutputFiles(paths, patternlab) : []
294+
);
295+
296+
//write the compiled template to the public patterns directory
297+
outputFiles.forEach(outFile => fs.outputFileSync(outFile.path, outFile.content));
298+
}
299+
269300
function buildPatterns(deletePatternDir) {
270301

271302
patternlab.events.emit('patternlab-build-pattern-start', patternlab);
@@ -427,21 +458,7 @@ var patternlab_engine = function (config) {
427458
patternlab.events.emit('patternlab-pattern-write-begin', patternlab, pattern);
428459

429460
//write the compiled template to the public patterns directory
430-
var patternPage = headHTML + pattern.patternPartialCode + footerHTML;
431-
432-
//beautify the output if configured to do so
433-
var cleanedPatternPage = config.cleanOutputHtml ? cleanHtml(patternPage, {indent_size: 2}) : patternPage;
434-
var cleanedPatternPartialCode = config.cleanOutputHtml ? cleanHtml(pattern.patternPartialCode, {indent_size: 2}) : pattern.patternPartialCode;
435-
var cleanedPatternTemplateCode = config.cleanOutputHtml ? cleanHtml(pattern.template, {indent_size: 2}) : pattern.template;
436-
437-
//write the compiled template to the public patterns directory
438-
fs.outputFileSync(paths.public.patterns + pattern.getPatternLink(patternlab, 'rendered'), cleanedPatternPage);
439-
440-
//write the mustache file too
441-
fs.outputFileSync(paths.public.patterns + pattern.getPatternLink(patternlab, 'rawTemplate'), cleanedPatternTemplateCode);
442-
443-
//write the encoded version too
444-
fs.outputFileSync(paths.public.patterns + pattern.getPatternLink(patternlab, 'markupOnly'), cleanedPatternPartialCode);
461+
writePatternFiles(headHTML, pattern, footerHTML);
445462

446463
patternlab.events.emit('patternlab-pattern-write-end', patternlab, pattern);
447464

0 commit comments

Comments
 (0)