diff --git a/core/lib/pattern_exporter.js b/core/lib/pattern_exporter.js index 1b899a6a2..6333b7cf2 100644 --- a/core/lib/pattern_exporter.js +++ b/core/lib/pattern_exporter.js @@ -1,6 +1,7 @@ "use strict"; var fs = require('fs-extra'); +var path = require('path'); var pattern_exporter = function () { @@ -14,18 +15,50 @@ var pattern_exporter = function () { function exportPatterns(patternlab) { //read the config export options var exportPartials = patternlab.config.patternExportPatternPartials; + var exportAll = patternlab.config.patternExportAll; + + if (exportAll) { + for (var i = 0; i < patternlab.patterns.length; i++) { + if (!patternlab.patterns[i].patternPartial.startsWith('-')) { + exportSinglePattern(patternlab, patternlab.patterns[i]); + } + } + + return; + } //find the chosen patterns to export for (var i = 0; i < exportPartials.length; i++) { for (var j = 0; j < patternlab.patterns.length; j++) { if (exportPartials[i] === patternlab.patterns[j].patternPartial) { //write matches to the desired location - fs.outputFileSync(patternlab.config.patternExportDirectory + patternlab.patterns[j].patternPartial + '.html', patternlab.patterns[j].patternPartialCode); + exportSinglePattern(patternlab, patternlab.patterns[j]); } } } } + function exportSinglePattern(patternlab, pattern) { + var preserveDirStructure = patternlab.config.patternExportPreserveDirectoryStructure; + var patternName = pattern.patternPartial; + var patternDir = patternlab.config.patternExportDirectory; + var patternCode = pattern.patternPartialCode; + var patternFileExtension = ".html"; + if (preserveDirStructure) { + // Extract the first part of the pattern partial as the directory in which + // it should go. + patternDir = path.join(patternDir, pattern.patternPartial.split('-')[0]); + patternName = pattern.patternPartial.split('-').slice(1).join('-'); + } + + if (patternlab.config.patternExportRaw) { + patternCode = pattern.extendedTemplate; + patternFileExtension = "." + JSON.parse(pattern.patternData).patternExtension; + } + + fs.outputFileSync(path.join(patternDir, patternName) + patternFileExtension, patternCode); + } + return { export_patterns: function (patternlab) { exportPatterns(patternlab); diff --git a/patternlab-config.json b/patternlab-config.json index 70ff944c7..b410f98f3 100644 --- a/patternlab-config.json +++ b/patternlab-config.json @@ -52,6 +52,9 @@ "patternStateCascade": ["inprogress", "inreview", "complete"], "patternStates": { }, + "patternExportAll": false, + "patternExportPreserveDirectoryStructure": false, + "patternExportRaw": false, "patternExportPatternPartials": [], "patternExportDirectory": "./pattern_exports/", "cacheBust": true,