diff --git a/lib/parser.js b/lib/parser.js index 89e0fca6bb..068a84804c 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -19,6 +19,8 @@ const nunjucks = require('nunjucks'); const ATTRIB_INCLUDE_PATH = 'include-path'; const ATTRIB_CWF = 'cwf'; + +const BOILERPLATE_DIRECTORY_NAME = '_boilerplates'; /* * Utils */ @@ -51,6 +53,11 @@ Parser.prototype._preprocess = function (element, context, config) { element.name = isInline ? 'span' : 'div'; element.attribs[ATTRIB_INCLUDE_PATH] = filePath; + let boilerplateFilePath = path.resolve(path.join(process.cwd(), BOILERPLATE_DIRECTORY_NAME), includeSrcPath); + if (!isUrl && !fs.existsSync(filePath) && fs.existsSync(boilerplateFilePath)) { + filePath = boilerplateFilePath; + } + if (isDynamic) { element.name = 'dynamic-panel'; element.attribs.src = filePath; @@ -137,6 +144,10 @@ Parser.prototype._preprocess = function (element, context, config) { element.attribs.fragment = includeSrc.hash.substring(1); // save hash to fragment attribute } filePath = path.resolve(path.dirname(context.cwf), includeSrcPath); // updated path (no hash) + let boilerplateFilePath = path.resolve(path.join(process.cwd(), BOILERPLATE_DIRECTORY_NAME), includeSrcPath); + if (!fs.existsSync(filePath) && fs.existsSync(boilerplateFilePath)) { + filePath = boilerplateFilePath; + } } element.attribs.src = filePath; this.dynamicIncludeSrc.push({from: context.cwf, to: filePath}); @@ -153,6 +164,10 @@ Parser.prototype._preprocess = function (element, context, config) { element.attribs.fragment = includeSrc.hash.substring(1); // save hash to fragment attribute } filePath = path.resolve(path.dirname(context.cwf), includeSrcPath); // updated path (no hash) + let boilerplateFilePath = path.resolve(path.join(process.cwd(), BOILERPLATE_DIRECTORY_NAME), includeSrcPath); + if (!fs.existsSync(filePath) && fs.existsSync(boilerplateFilePath)) { + filePath = boilerplateFilePath; + } } element.attribs.src = filePath; this.dynamicIncludeSrc.push({from: context.cwf, to: filePath}); @@ -195,7 +210,7 @@ Parser.prototype._parse = function (element, context) { element.attribs.isOpen = hasIsOpen ? hasIsOpen : false; try { if (fs.statSync(element.attribs.src).isFile()) { - let resultDir = path.dirname(path.join('{{hostBaseUrl}}', path.relative(process.cwd(), element.attribs.src))); + let resultDir = path.dirname(path.relative('{{hostBaseUrl}}', element.attribs.src)); element.attribs.src = path.join(resultDir, utils.setExtension(path.basename(element.attribs.src), '._include_.html')); if (element.attribs.fragment) { element.attribs.src = `${element.attribs.src}#${element.attribs.fragment}`; // add hash back to path @@ -215,7 +230,7 @@ Parser.prototype._parse = function (element, context) { } try { if (fs.statSync(element.attribs.src).isFile()) { - let resultDir = path.dirname(path.join('{{hostBaseUrl}}', path.relative(process.cwd(), element.attribs.src))); + let resultDir = path.dirname(path.relative('{{hostBaseUrl}}', element.attribs.src)); element.attribs.src = path.join(resultDir, utils.setExtension(path.basename(element.attribs.src), '._include_.html')); if (element.attribs.fragment) { element.attribs.src = `${element.attribs.src}#${element.attribs.fragment}`; // add hash back to path @@ -232,7 +247,7 @@ Parser.prototype._parse = function (element, context) { } try { if (fs.statSync(element.attribs.src).isFile()) { - let resultDir = path.dirname(path.join('{{hostBaseUrl}}', path.relative(process.cwd(), element.attribs.src))); + let resultDir = path.dirname(path.relative('{{hostBaseUrl}}', element.attribs.src)); element.attribs.src = path.join(resultDir, utils.setExtension(path.basename(element.attribs.src), '._include_.html')); if (element.attribs.fragment) { element.attribs.src = `${element.attribs.src}#${element.attribs.fragment}`; // add hash back to path