uhtml
Version:
A micro HTML/SVG render
51 lines (41 loc) • 1.29 kB
JavaScript
;
const { DOCUMENT_FRAGMENT_NODE, ELEMENT_NODE } = require('domconstants/constants');
const { childNodes, nodeType, parentNode } = require('./symbols.js');
const { empty } = require('../utils.js');
const asElement = ({ [nodeType]: type }) => type === ELEMENT_NODE;
exports.asElement = asElement;
const changeParentNode = (node, parent) => {
if (node[nodeType] === DOCUMENT_FRAGMENT_NODE)
node[childNodes].forEach(setParentNode, parent);
else {
if (node[parentNode]) {
const { [childNodes]: nodes } = node[parentNode];
nodes.splice(nodes.indexOf(node), 1);
}
node[parentNode] = parent;
}
return node;
};
exports.changeParentNode = changeParentNode;
const getNodes = element => (
element[childNodes] === empty ?
(element[childNodes] = []) :
element[childNodes]
);
exports.getNodes = getNodes;
const isSVG = name => (name === 'svg' || name === 'SVG');
exports.isSVG = isSVG;
function cloned(node) {
return setParentNode.call(this, node.cloneNode(true));
}
exports.cloned = cloned
function setParentNode(node) {
'use strict';
node[parentNode] = this;
return node;
}
exports.setParentNode = setParentNode;
function withNewParent(node) {
return changeParentNode(node, this);
}
exports.withNewParent = withNewParent