UNPKG

@surface/custom-element

Version:

Provides support of directives and data binding on custom elements.

29 lines (28 loc) 1.2 kB
import TemplateParser from "../parsers/template-parser.js"; import { globalCustomDirectives } from "../singletons.js"; import TemplateProcessor from "./template-processor.js"; const cache = new Map(); export default function processTemplate(template, scope, directives) { if (!cache.has(template)) { if (typeof template == "string") { const templateElement = document.createElement("template"); templateElement.innerHTML = template; cache.set(template, TemplateParser.parse("annonymous", template)); } else { const templateElement = template.cloneNode(true); cache.set(template, [templateElement, TemplateParser.parseReference("annonymous", templateElement)]); } } const [parsed, descriptor] = cache.get(template); const content = parsed.content; const context = { directives: new Map([...globalCustomDirectives, ...Object.entries(directives ?? {})]), host: content, root: content, scope, templateDescriptor: descriptor, }; const disposable = TemplateProcessor.process(context); return [content, disposable]; }