Skip to content

Commit d7952aa

Browse files
committed
factor out writePatternFiles() and add hooks for engines to allow
engines to provide custom code fomatters and add files to the pattern output
1 parent cd6feaf commit d7952aa

File tree

1 file changed

+40
-15
lines changed

1 file changed

+40
-15
lines changed

core/lib/patternlab.js

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

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

271310
patternlab.events.emit('patternlab-build-pattern-start', patternlab);
@@ -427,21 +466,7 @@ var patternlab_engine = function (config) {
427466
patternlab.events.emit('patternlab-pattern-write-begin', patternlab, pattern);
428467

429468
//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);
469+
writePatternFiles(headHTML, pattern, footerHTML);
445470

446471
patternlab.events.emit('patternlab-pattern-write-end', patternlab, pattern);
447472

0 commit comments

Comments
 (0)