uhtml
Version:
A micro HTML/SVG render
33 lines (26 loc) • 1.02 kB
JavaScript
;
/*! (c) Andrea Giammarchi - MIT */
const { Hole } = require('./rabbit.js');
const { attr } = require('./handler.js');
/** @typedef {import("./literals.js").DOMValue} DOMValue */
/** @typedef {import("./literals.js").Target} Target */
const tag = svg => (template, ...values) => new Hole(svg, template, values).toDOM().valueOf();
/** @type {(template: TemplateStringsArray, ...values:DOMValue[]) => Target} A tag to render HTML content. */
const html = tag(false);
exports.html = html;
/** @type {(template: TemplateStringsArray, ...values:DOMValue[]) => Target} A tag to render SVG content. */
const svg = tag(true);
exports.svg = svg;
/**
* Render directly within a generic container.
* @template T
* @param {T} where the DOM node where to render content
* @param {(() => Target) | Target} what the node to render
* @returns
*/
const render = (where, what) => {
where.replaceChildren(typeof what === 'function' ? what() : what);
return where;
};
exports.render = render;
exports.attr = attr;