html-webpack-c5-theme-plugin
Version:
c5 html-webpack-plugin to generate c5 theme files
98 lines (97 loc) • 3.31 kB
JavaScript
;
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;