[6a3a178] | 1 | "use strict";
|
---|
| 2 | Object.defineProperty(exports, "__esModule", { value: true });
|
---|
| 3 | exports.prevElementSibling = exports.nextElementSibling = exports.getName = exports.hasAttrib = exports.getAttributeValue = exports.getSiblings = exports.getParent = exports.getChildren = void 0;
|
---|
| 4 | var domhandler_1 = require("domhandler");
|
---|
| 5 | var emptyArray = [];
|
---|
| 6 | /**
|
---|
| 7 | * Get a node's children.
|
---|
| 8 | *
|
---|
| 9 | * @param elem Node to get the children of.
|
---|
| 10 | * @returns `elem`'s children, or an empty array.
|
---|
| 11 | */
|
---|
| 12 | function getChildren(elem) {
|
---|
| 13 | var _a;
|
---|
| 14 | return (_a = elem.children) !== null && _a !== void 0 ? _a : emptyArray;
|
---|
| 15 | }
|
---|
| 16 | exports.getChildren = getChildren;
|
---|
| 17 | /**
|
---|
| 18 | * Get a node's parent.
|
---|
| 19 | *
|
---|
| 20 | * @param elem Node to get the parent of.
|
---|
| 21 | * @returns `elem`'s parent node.
|
---|
| 22 | */
|
---|
| 23 | function getParent(elem) {
|
---|
| 24 | return elem.parent || null;
|
---|
| 25 | }
|
---|
| 26 | exports.getParent = getParent;
|
---|
| 27 | /**
|
---|
| 28 | * Gets an elements siblings, including the element itself.
|
---|
| 29 | *
|
---|
| 30 | * Attempts to get the children through the element's parent first.
|
---|
| 31 | * If we don't have a parent (the element is a root node),
|
---|
| 32 | * we walk the element's `prev` & `next` to get all remaining nodes.
|
---|
| 33 | *
|
---|
| 34 | * @param elem Element to get the siblings of.
|
---|
| 35 | * @returns `elem`'s siblings.
|
---|
| 36 | */
|
---|
| 37 | function getSiblings(elem) {
|
---|
| 38 | var _a, _b;
|
---|
| 39 | var parent = getParent(elem);
|
---|
| 40 | if (parent != null)
|
---|
| 41 | return getChildren(parent);
|
---|
| 42 | var siblings = [elem];
|
---|
| 43 | var prev = elem.prev, next = elem.next;
|
---|
| 44 | while (prev != null) {
|
---|
| 45 | siblings.unshift(prev);
|
---|
| 46 | (_a = prev, prev = _a.prev);
|
---|
| 47 | }
|
---|
| 48 | while (next != null) {
|
---|
| 49 | siblings.push(next);
|
---|
| 50 | (_b = next, next = _b.next);
|
---|
| 51 | }
|
---|
| 52 | return siblings;
|
---|
| 53 | }
|
---|
| 54 | exports.getSiblings = getSiblings;
|
---|
| 55 | /**
|
---|
| 56 | * Gets an attribute from an element.
|
---|
| 57 | *
|
---|
| 58 | * @param elem Element to check.
|
---|
| 59 | * @param name Attribute name to retrieve.
|
---|
| 60 | * @returns The element's attribute value, or `undefined`.
|
---|
| 61 | */
|
---|
| 62 | function getAttributeValue(elem, name) {
|
---|
| 63 | var _a;
|
---|
| 64 | return (_a = elem.attribs) === null || _a === void 0 ? void 0 : _a[name];
|
---|
| 65 | }
|
---|
| 66 | exports.getAttributeValue = getAttributeValue;
|
---|
| 67 | /**
|
---|
| 68 | * Checks whether an element has an attribute.
|
---|
| 69 | *
|
---|
| 70 | * @param elem Element to check.
|
---|
| 71 | * @param name Attribute name to look for.
|
---|
| 72 | * @returns Returns whether `elem` has the attribute `name`.
|
---|
| 73 | */
|
---|
| 74 | function hasAttrib(elem, name) {
|
---|
| 75 | return (elem.attribs != null &&
|
---|
| 76 | Object.prototype.hasOwnProperty.call(elem.attribs, name) &&
|
---|
| 77 | elem.attribs[name] != null);
|
---|
| 78 | }
|
---|
| 79 | exports.hasAttrib = hasAttrib;
|
---|
| 80 | /**
|
---|
| 81 | * Get the tag name of an element.
|
---|
| 82 | *
|
---|
| 83 | * @param elem The element to get the name for.
|
---|
| 84 | * @returns The tag name of `elem`.
|
---|
| 85 | */
|
---|
| 86 | function getName(elem) {
|
---|
| 87 | return elem.name;
|
---|
| 88 | }
|
---|
| 89 | exports.getName = getName;
|
---|
| 90 | /**
|
---|
| 91 | * Returns the next element sibling of a node.
|
---|
| 92 | *
|
---|
| 93 | * @param elem The element to get the next sibling of.
|
---|
| 94 | * @returns `elem`'s next sibling that is a tag.
|
---|
| 95 | */
|
---|
| 96 | function nextElementSibling(elem) {
|
---|
| 97 | var _a;
|
---|
| 98 | var next = elem.next;
|
---|
| 99 | while (next !== null && !(0, domhandler_1.isTag)(next))
|
---|
| 100 | (_a = next, next = _a.next);
|
---|
| 101 | return next;
|
---|
| 102 | }
|
---|
| 103 | exports.nextElementSibling = nextElementSibling;
|
---|
| 104 | /**
|
---|
| 105 | * Returns the previous element sibling of a node.
|
---|
| 106 | *
|
---|
| 107 | * @param elem The element to get the previous sibling of.
|
---|
| 108 | * @returns `elem`'s previous sibling that is a tag.
|
---|
| 109 | */
|
---|
| 110 | function prevElementSibling(elem) {
|
---|
| 111 | var _a;
|
---|
| 112 | var prev = elem.prev;
|
---|
| 113 | while (prev !== null && !(0, domhandler_1.isTag)(prev))
|
---|
| 114 | (_a = prev, prev = _a.prev);
|
---|
| 115 | return prev;
|
---|
| 116 | }
|
---|
| 117 | exports.prevElementSibling = prevElementSibling;
|
---|