summaryrefslogtreecommitdiff
path: root/includes/external/addressbook/node_modules/domutils/lib/esm/manipulation.js
diff options
context:
space:
mode:
Diffstat (limited to 'includes/external/addressbook/node_modules/domutils/lib/esm/manipulation.js')
-rw-r--r--includes/external/addressbook/node_modules/domutils/lib/esm/manipulation.js128
1 files changed, 128 insertions, 0 deletions
diff --git a/includes/external/addressbook/node_modules/domutils/lib/esm/manipulation.js b/includes/external/addressbook/node_modules/domutils/lib/esm/manipulation.js
new file mode 100644
index 0000000..d228da8
--- /dev/null
+++ b/includes/external/addressbook/node_modules/domutils/lib/esm/manipulation.js
@@ -0,0 +1,128 @@
+/**
+ * Remove an element from the dom
+ *
+ * @category Manipulation
+ * @param elem The element to be removed
+ */
+export function removeElement(elem) {
+ if (elem.prev)
+ elem.prev.next = elem.next;
+ if (elem.next)
+ elem.next.prev = elem.prev;
+ if (elem.parent) {
+ const childs = elem.parent.children;
+ childs.splice(childs.lastIndexOf(elem), 1);
+ }
+}
+/**
+ * Replace an element in the dom
+ *
+ * @category Manipulation
+ * @param elem The element to be replaced
+ * @param replacement The element to be added
+ */
+export function replaceElement(elem, replacement) {
+ const prev = (replacement.prev = elem.prev);
+ if (prev) {
+ prev.next = replacement;
+ }
+ const next = (replacement.next = elem.next);
+ if (next) {
+ next.prev = replacement;
+ }
+ const parent = (replacement.parent = elem.parent);
+ if (parent) {
+ const childs = parent.children;
+ childs[childs.lastIndexOf(elem)] = replacement;
+ elem.parent = null;
+ }
+}
+/**
+ * Append a child to an element.
+ *
+ * @category Manipulation
+ * @param elem The element to append to.
+ * @param child The element to be added as a child.
+ */
+export function appendChild(elem, child) {
+ removeElement(child);
+ child.next = null;
+ child.parent = elem;
+ if (elem.children.push(child) > 1) {
+ const sibling = elem.children[elem.children.length - 2];
+ sibling.next = child;
+ child.prev = sibling;
+ }
+ else {
+ child.prev = null;
+ }
+}
+/**
+ * Append an element after another.
+ *
+ * @category Manipulation
+ * @param elem The element to append after.
+ * @param next The element be added.
+ */
+export function append(elem, next) {
+ removeElement(next);
+ const { parent } = elem;
+ const currNext = elem.next;
+ next.next = currNext;
+ next.prev = elem;
+ elem.next = next;
+ next.parent = parent;
+ if (currNext) {
+ currNext.prev = next;
+ if (parent) {
+ const childs = parent.children;
+ childs.splice(childs.lastIndexOf(currNext), 0, next);
+ }
+ }
+ else if (parent) {
+ parent.children.push(next);
+ }
+}
+/**
+ * Prepend a child to an element.
+ *
+ * @category Manipulation
+ * @param elem The element to prepend before.
+ * @param child The element to be added as a child.
+ */
+export function prependChild(elem, child) {
+ removeElement(child);
+ child.parent = elem;
+ child.prev = null;
+ if (elem.children.unshift(child) !== 1) {
+ const sibling = elem.children[1];
+ sibling.prev = child;
+ child.next = sibling;
+ }
+ else {
+ child.next = null;
+ }
+}
+/**
+ * Prepend an element before another.
+ *
+ * @category Manipulation
+ * @param elem The element to prepend before.
+ * @param prev The element be added.
+ */
+export function prepend(elem, prev) {
+ removeElement(prev);
+ const { parent } = elem;
+ if (parent) {
+ const 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;
+}
+//# sourceMappingURL=manipulation.js.map \ No newline at end of file