"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.prepend = exports.prependChild = exports.append = exports.appendChild = exports.replaceElement = exports.removeElement = void 0; /** * Remove an element from the dom * * @param elem The element to be removed */ function removeElement(elem) { if (elem.prev) elem.prev.next = elem.next; if (elem.next) elem.next.prev = elem.prev; if (elem.parent) { var childs = elem.parent.children; childs.splice(childs.lastIndexOf(elem), 1); } } exports.removeElement = removeElement; /** * Replace an element in the dom * * @param elem The element to be replaced * @param replacement The element to be added */ function replaceElement(elem, replacement) { var prev = (replacement.prev = elem.prev); if (prev) { prev.next = replacement; } var next = (replacement.next = elem.next); if (next) { next.prev = replacement; } var parent = (replacement.parent = elem.parent); if (parent) { var childs = parent.children; childs[childs.lastIndexOf(elem)] = replacement; } } exports.replaceElement = replaceElement; /** * Append a child to an element. * * @param elem The element to append to. * @param child The element to be added as a child. */ function appendChild(elem, child) { removeElement(child); child.next = null; child.parent = elem; if (elem.children.push(child) > 1) { var sibling = elem.children[elem.children.length - 2]; sibling.next = child; child.prev = sibling; } else { child.prev = null; } } exports.appendChild = appendChild; /** * Append an element after another. * * @param elem The element to append after. * @param next The element be added. */ function append(elem, next) { removeElement(next); var parent = elem.parent; var currNext = elem.next; next.next = currNext; next.prev = elem; elem.next = next; next.parent = parent; if (currNext) { currNext.prev = next; if (parent) { var childs = parent.children; childs.splice(childs.lastIndexOf(currNext), 0, next); } } else if (parent) { parent.children.push(next); } } exports.append = append; /** * Prepend a child to an element. * * @param elem The element to prepend before. * @param child The element to be added as a child. */ function prependChild(elem, child) { removeElement(child); child.parent = elem; child.prev = null; if (elem.children.unshift(child) !== 1) { var sibling = elem.children[1]; sibling.prev = child; child.next = sibling; } else { child.next = null; } } exports.prependChild = prependChild; /** * Prepend an element before another. * * @param elem The element to prepend before. * @param prev The element be added. */ function prepend(elem, prev) { removeElement(prev); var parent = elem.parent; if (parent) { var childs = parent.children; childs.splice(childs.indexOf(elem), 0, prev); } if (elem.prev) { elem.prev.next = prev; } prev.parent = parent; prev.prev = elem.prev; prev.next = elem; elem.prev = prev; } exports.prepend = prepend;