@surface/custom-element
Version:
Provides support of directives and data binding on custom elements.
29 lines (28 loc) • 1.2 kB
JavaScript
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];
}