UNPKG

@ribajs/core

Version:

Core module of Riba.js

79 lines 6.85 kB
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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