snabbdom
Version:
A virtual DOM library with focus on simplicity, modularity, powerful features and performance.
114 lines • 3.5 kB
JavaScript
function createElement(tagName, options) {
return document.createElement(tagName, options);
}
function createElementNS(namespaceURI, qualifiedName, options) {
return document.createElementNS(namespaceURI, qualifiedName, options);
}
function createDocumentFragment() {
return parseFragment(document.createDocumentFragment());
}
function createTextNode(text) {
return document.createTextNode(text);
}
function createComment(text) {
return document.createComment(text);
}
function insertBefore(parentNode, newNode, referenceNode) {
if (isDocumentFragment(parentNode)) {
let node = parentNode;
while (node && isDocumentFragment(node)) {
const fragment = parseFragment(node);
node = fragment.parent;
}
parentNode = node !== null && node !== void 0 ? node : parentNode;
}
if (isDocumentFragment(newNode)) {
newNode = parseFragment(newNode, parentNode);
}
if (referenceNode && isDocumentFragment(referenceNode)) {
referenceNode = parseFragment(referenceNode).firstChildNode;
}
parentNode.insertBefore(newNode, referenceNode);
}
function removeChild(node, child) {
node.removeChild(child);
}
function appendChild(node, child) {
if (isDocumentFragment(child)) {
child = parseFragment(child, node);
}
node.appendChild(child);
}
function parentNode(node) {
if (isDocumentFragment(node)) {
while (node && isDocumentFragment(node)) {
const fragment = parseFragment(node);
node = fragment.parent;
}
return node !== null && node !== void 0 ? node : null;
}
return node.parentNode;
}
function nextSibling(node) {
var _a;
if (isDocumentFragment(node)) {
const fragment = parseFragment(node);
const parent = parentNode(fragment);
if (parent && fragment.lastChildNode) {
const children = Array.from(parent.childNodes);
const index = children.indexOf(fragment.lastChildNode);
return (_a = children[index + 1]) !== null && _a !== void 0 ? _a : null;
}
return null;
}
return node.nextSibling;
}
function tagName(elm) {
return elm.tagName;
}
function setTextContent(node, text) {
node.textContent = text;
}
function getTextContent(node) {
return node.textContent;
}
function isElement(node) {
return node.nodeType === 1;
}
function isText(node) {
return node.nodeType === 3;
}
function isComment(node) {
return node.nodeType === 8;
}
function isDocumentFragment(node) {
return node.nodeType === 11;
}
function parseFragment(fragmentNode, parentNode) {
var _a, _b, _c;
const fragment = fragmentNode;
(_a = fragment.parent) !== null && _a !== void 0 ? _a : (fragment.parent = parentNode !== null && parentNode !== void 0 ? parentNode : null);
(_b = fragment.firstChildNode) !== null && _b !== void 0 ? _b : (fragment.firstChildNode = fragmentNode.firstChild);
(_c = fragment.lastChildNode) !== null && _c !== void 0 ? _c : (fragment.lastChildNode = fragmentNode.lastChild);
return fragment;
}
export const htmlDomApi = {
createElement,
createElementNS,
createTextNode,
createDocumentFragment,
createComment,
insertBefore,
removeChild,
appendChild,
parentNode,
nextSibling,
tagName,
setTextContent,
getTextContent,
isElement,
isText,
isComment,
isDocumentFragment
};
//# sourceMappingURL=htmldomapi.js.map