snabbdom
Version:
A virtual DOM library with focus on simplicity, modularity, powerful features and performance.
85 lines • 2.25 kB
JavaScript
import { vnode } from "./vnode.js";
import * as is from "./is.js";
export function addNS(data, children, sel) {
data.ns = "http://www.w3.org/2000/svg";
if (sel !== "foreignObject" && children !== undefined) {
for (let i = 0; i < children.length; ++i) {
const child = children[i];
if (typeof child === "string")
continue;
const childData = child.data;
if (childData !== undefined) {
addNS(childData, child.children, child.sel);
}
}
}
}
export function h(sel, b, c) {
let data = {};
let children;
let text;
let i;
if (c !== undefined) {
if (b !== null) {
data = b;
}
if (is.array(c)) {
children = c;
}
else if (is.primitive(c)) {
text = c.toString();
}
else if (c && c.sel) {
children = [c];
}
}
else if (b !== undefined && b !== null) {
if (is.array(b)) {
children = b;
}
else if (is.primitive(b)) {
text = b.toString();
}
else if (b && b.sel) {
children = [b];
}
else {
data = b;
}
}
if (children !== undefined) {
for (i = 0; i < children.length; ++i) {
if (is.primitive(children[i]))
children[i] = vnode(undefined, undefined, undefined, children[i], undefined);
}
}
if (sel.startsWith("svg") &&
(sel.length === 3 || sel[3] === "." || sel[3] === "#")) {
addNS(data, children, sel);
}
return vnode(sel, data, children, text, undefined);
}
/**
* @experimental
*/
export function fragment(children) {
let c;
let text;
if (is.array(children)) {
c = children;
}
else if (is.primitive(c)) {
text = children;
}
else if (c && c.sel) {
c = [children];
}
if (c !== undefined) {
for (let i = 0; i < c.length; ++i) {
if (is.primitive(c[i]))
c[i] = vnode(undefined, undefined, undefined, c[i], undefined);
}
}
return vnode(undefined, {}, c, text, undefined);
}
//# sourceMappingURL=h.js.map