MCPcopy Create free account
hub / github.com/bigskysoftware/_hyperscript / initLiveTemplates

Function initLiveTemplates

www/js/_hyperscript.js:10123–10195  ·  view source on GitHub ↗
(runtime2, tokenizer2, Parser2, kernel2, reactivity2)

Source from the content-addressed store, hash-verified

10121 }
10122 var LIVE_SELECTOR = 'script[type="text/hyperscript-template"][live]';
10123 function initLiveTemplates(runtime2, tokenizer2, Parser2, kernel2, reactivity2) {
10124 var processed = /* @__PURE__ */ new WeakSet();
10125 runtime2.addBeforeProcessHook(function(elt) {
10126 if (!elt || !elt.querySelectorAll) return;
10127 elt.querySelectorAll(LIVE_SELECTOR).forEach(function(tmpl) {
10128 if (processed.has(tmpl)) return;
10129 processed.add(tmpl);
10130 var source = getTemplateSource(tmpl);
10131 var script = tmpl.getAttribute("_") || tmpl.getAttribute("data-script") || "";
10132 tmpl.removeAttribute("_");
10133 tmpl.removeAttribute("data-script");
10134 var wrapper = document.createElement("div");
10135 wrapper.style.display = "contents";
10136 wrapper.setAttribute("data-live-template", "");
10137 tmpl.after(wrapper);
10138 if (script) {
10139 wrapper.setAttribute("_", script);
10140 runtime2.processNode(wrapper);
10141 }
10142 var stamped = false;
10143 function stamp(html) {
10144 if (!stamped) {
10145 wrapper.innerHTML = html;
10146 runtime2.processNode(wrapper);
10147 stamped = true;
10148 } else {
10149 runtime2.morph(wrapper, html);
10150 }
10151 }
10152 function render() {
10153 var ctx = runtime2.makeContext(wrapper, null, wrapper, null);
10154 var buf = [];
10155 ctx.meta.__ht_template_result = buf;
10156 var tokens = tokenizer2.tokenize(source, "lines");
10157 var parser = new Parser2(kernel2, tokens);
10158 var cmds;
10159 try {
10160 cmds = parser.parseElement("commandList");
10161 parser.ensureTerminated(cmds);
10162 } catch (e) {
10163 console.error("live-template parse error:", e.message || e);
10164 return "";
10165 }
10166 cmds.execute(ctx);
10167 wrapper.__hs_scopes = ctx.meta.__ht_scopes || null;
10168 if (ctx.meta.returned || !ctx.meta.resolve) return buf.join("");
10169 var resolve;
10170 var promise = new Promise(function(r) {
10171 resolve = r;
10172 });
10173 ctx.meta.resolve = resolve;
10174 return promise.then(function() {
10175 return buf.join("");
10176 });
10177 }
10178 queueMicrotask(function() {
10179 var result = render();
10180 if (result && result.then) {

Callers 1

_hyperscript.jsFile · 0.70

Calls 7

getTemplateSourceFunction · 0.70
renderFunction · 0.70
stampFunction · 0.70
setupEffectFunction · 0.70
addBeforeProcessHookMethod · 0.45
forEachMethod · 0.45
processNodeMethod · 0.45

Tested by

no test coverage detected