123456789101112131415161718192021222324252627282930313233 |
- import { directive } from "../../../model/Directive";
- import { evaluateLater } from "../../../model/Evaluator";
- import { effect } from "../../../model/Reactivity";
- import { PupperNode } from "../Node";
- import dom2vdom from "@pupperjs/dom2vdom";
- import h from "virtual-dom/h";
- /**
- * @directive x-html
- * @description Sets an element inner HTML.
- */
- directive("html", async (node, { expression, scope }) => {
- const evaluate = evaluateLater(expression);
- await effect(async () => {
- try {
- const html = await evaluate(scope) as string;
- const evaluatedNode = dom2vdom(html, h) as VirtualDOM.VTree;
- node.appendChild(
- new PupperNode(evaluatedNode, node.parent, node.renderer)
- );
- node.removeAttribute("x-html");
- node.setDirty();
- } catch(e) {
- console.warn("[pupperjs] failed to set inner HTML:");
- console.error(e);
- }
- });
- });
|