UNPKG

html-webpack-c5-theme-plugin

Version:
98 lines (97 loc) 3.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class TemplateGenerator { constructor(options) { const handleRegEx = /([A-Za-z0-9]+_?)+/iu; if (!options.name) { options.name = "Concrete5 Theme"; } if (!options.handle.match(handleRegEx)) { throw new Error("Invalid Theme Handle"); } if (options.packageHandle && !options.packageHandle.match(handleRegEx)) { throw new Error("Invalid Package Handle"); } this._options = options; } generate() { let output = "<?php\n"; output += this.generateNameSpace(this._options.handle, this._options.packageHandle); output += this.generateUses(); output += this.generateClass(); return output; } generateUses() { let uses = "\n"; uses += "use Concrete\\Core\\Area\\Layout\\Preset\\Provider\\ThemeProviderInterface;\n"; uses += "use Concrete\\Core\\Page\\Theme\\Theme;\n"; uses += "\n"; return uses; } generateClass() { let classOutput = ""; classOutput += "class PageTheme extends Theme implements ThemeProviderInterface\n"; classOutput += "{\n\n"; classOutput += this.generateThemeName(this._options.name); if (this._options.description) { classOutput += "\n"; classOutput += this.generateDescription(this._options.description); classOutput += "\n"; } classOutput += "\n"; classOutput += this.generatePresets(); classOutput += "\n"; classOutput += "}\n"; return classOutput; } generateNameSpace(themeHandle, packageHandle) { let ns = "namespace "; if (packageHandle) { ns += "Concrete\\Core\\Package\\" + this.camelCase(packageHandle) + "\\Theme\\" + this.camelCase(themeHandle) + ";\n"; } else { ns += "Application\\Theme\\" + this.camelCase(themeHandle) + ";\n"; } ns += "// Auto-Generated by html-webpack-c5-plugin\n"; return ns; } generatePresets() { let output = ""; output += " public function getThemeAreaLayoutPresets()\n"; output += " {\n"; output += " return [];\n"; output += " }"; return output; } camelCase(word) { word = word.toLowerCase(); const words = word.split("_"); let tempWord = ""; words.forEach((wrd) => { tempWord += wrd.charAt(0).toUpperCase() + wrd.slice(1); }); return tempWord; } generateDescription(desc) { let description = " public function getThemeDescription()\n"; description += " {\n"; description += " return t('" + desc + "');\n"; description += " }\n"; return description; } generateThemeName(name) { let themeName = " public function getThemeName()\n"; themeName += " {\n"; themeName += " return t('" + name + "');\n"; themeName += " }\n"; return themeName; } } exports.default = TemplateGenerator;