@ribajs/core
Version:
Core module of Riba.js
79 lines • 6.85 kB
JavaScript
import { Component } from "@ribajs/core";
import { camelCase, parseJsonString, parseType } from "@ribajs/utils";
export class TemplatesComponent extends Component {
templateAttributes = [];
templateReady = false;
connectedCallback() {
this.addItemsByTemplate();
super.connectedCallback();
this.removeTemplates();
this.bindIfReady();
}
ready() {
return super.ready() && this.templateReady;
}
transformTemplateAttribute(name, value, type) {
switch (type) {
case "number":
return Number(value);
case "boolean":
return value === "true";
case "string":
if (typeof value === "string") {
return value;
}
if (typeof value?.toString === "function") {
return value.toString();
}
case "object":
return parseJsonString(value);
}
return parseType(value).value;
}
transformTemplateAttributes(attributes, index) {
attributes.index = attributes.index || index;
return attributes;
}
getTemplateAttributes(tpl, index) {
const attributes = {};
for (const attribute of this.templateAttributes) {
const attrValue = tpl.getAttribute(attribute.name);
if (typeof attrValue !== "string" && attribute.required) {
console.error(new Error(`template "${attribute.name}" attribute is required!`));
}
else {
attributes[camelCase(attribute.name)] = this.transformTemplateAttribute(attribute.name, tpl.getAttribute(attribute.name));
}
}
return this.transformTemplateAttributes(attributes, index);
}
addItemByTemplate(tpl, index) {
const attributes = this.getTemplateAttributes(tpl, index);
const content = tpl.innerHTML;
if (!this.scope.items) {
this.scope.items = [];
}
this.scope.items.push({ ...attributes, content });
}
addItemsByTemplate() {
const templates = this.querySelectorAll("template, .template");
for (let index = 0; index < templates.length; index++) {
const tpl = templates[index];
this.addItemByTemplate(tpl, index);
}
this.templateReady = true;
}
removeTemplates() {
const templates = this.querySelectorAll("template, .template");
for (let index = 0; index < templates.length; index++) {
const tpl = templates[index];
this.removeChild(tpl);
}
}
hasOnlyTemplateChilds() {
return !Array.from(this.children).some((child) => child.nodeName !== "TEMPLATE" &&
!child.classList?.contains("template") &&
child.nodeName !== "#text");
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RlbXBsYXRlcy90ZW1wbGF0ZXMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWEsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBZ0J0RSxNQUFNLE9BQWdCLGtCQUFtQixTQUFRLFNBQVM7SUFDOUMsa0JBQWtCLEdBQXVCLEVBQUUsQ0FBQztJQUU1QyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBSXRCLGlCQUFpQjtRQUN6QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFUyxLQUFLO1FBQ2IsT0FBTyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM3QyxDQUFDO0lBT1MsMEJBQTBCLENBQ2xDLElBQVksRUFDWixLQUFVLEVBQ1YsSUFBb0I7UUFFcEIsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssUUFBUTtnQkFDWCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxLQUFLLEtBQUssTUFBTSxDQUFDO1lBQzFCLEtBQUssUUFBUTtnQkFDWCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM5QixPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO2dCQUNELElBQUksT0FBTyxLQUFLLEVBQUUsUUFBUSxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUMxQyxPQUFPLEtB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