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

Function initLiveTemplates

www/js/_hyperscript-max.js:10122–10194  ·  view source on GitHub ↗
(runtime2, tokenizer2, Parser2, kernel2, reactivity2)

Source from the content-addressed store, hash-verified

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

Callers 1

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