118 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			118 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | "use strict"; | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | exports.prevElementSibling = exports.nextElementSibling = exports.getName = exports.hasAttrib = exports.getAttributeValue = exports.getSiblings = exports.getParent = exports.getChildren = void 0; | ||
|  | var domhandler_1 = require("domhandler"); | ||
|  | var emptyArray = []; | ||
|  | /** | ||
|  |  * Get a node's children. | ||
|  |  * | ||
|  |  * @param elem Node to get the children of. | ||
|  |  * @returns `elem`'s children, or an empty array. | ||
|  |  */ | ||
|  | function getChildren(elem) { | ||
|  |     var _a; | ||
|  |     return (_a = elem.children) !== null && _a !== void 0 ? _a : emptyArray; | ||
|  | } | ||
|  | exports.getChildren = getChildren; | ||
|  | /** | ||
|  |  * Get a node's parent. | ||
|  |  * | ||
|  |  * @param elem Node to get the parent of. | ||
|  |  * @returns `elem`'s parent node. | ||
|  |  */ | ||
|  | function getParent(elem) { | ||
|  |     return elem.parent || null; | ||
|  | } | ||
|  | exports.getParent = getParent; | ||
|  | /** | ||
|  |  * Gets an elements siblings, including the element itself. | ||
|  |  * | ||
|  |  * Attempts to get the children through the element's parent first. | ||
|  |  * If we don't have a parent (the element is a root node), | ||
|  |  * we walk the element's `prev` & `next` to get all remaining nodes. | ||
|  |  * | ||
|  |  * @param elem Element to get the siblings of. | ||
|  |  * @returns `elem`'s siblings. | ||
|  |  */ | ||
|  | function getSiblings(elem) { | ||
|  |     var _a, _b; | ||
|  |     var parent = getParent(elem); | ||
|  |     if (parent != null) | ||
|  |         return getChildren(parent); | ||
|  |     var siblings = [elem]; | ||
|  |     var prev = elem.prev, next = elem.next; | ||
|  |     while (prev != null) { | ||
|  |         siblings.unshift(prev); | ||
|  |         (_a = prev, prev = _a.prev); | ||
|  |     } | ||
|  |     while (next != null) { | ||
|  |         siblings.push(next); | ||
|  |         (_b = next, next = _b.next); | ||
|  |     } | ||
|  |     return siblings; | ||
|  | } | ||
|  | exports.getSiblings = getSiblings; | ||
|  | /** | ||
|  |  * Gets an attribute from an element. | ||
|  |  * | ||
|  |  * @param elem Element to check. | ||
|  |  * @param name Attribute name to retrieve. | ||
|  |  * @returns The element's attribute value, or `undefined`. | ||
|  |  */ | ||
|  | function getAttributeValue(elem, name) { | ||
|  |     var _a; | ||
|  |     return (_a = elem.attribs) === null || _a === void 0 ? void 0 : _a[name]; | ||
|  | } | ||
|  | exports.getAttributeValue = getAttributeValue; | ||
|  | /** | ||
|  |  * Checks whether an element has an attribute. | ||
|  |  * | ||
|  |  * @param elem Element to check. | ||
|  |  * @param name Attribute name to look for. | ||
|  |  * @returns Returns whether `elem` has the attribute `name`. | ||
|  |  */ | ||
|  | function hasAttrib(elem, name) { | ||
|  |     return (elem.attribs != null && | ||
|  |         Object.prototype.hasOwnProperty.call(elem.attribs, name) && | ||
|  |         elem.attribs[name] != null); | ||
|  | } | ||
|  | exports.hasAttrib = hasAttrib; | ||
|  | /** | ||
|  |  * Get the tag name of an element. | ||
|  |  * | ||
|  |  * @param elem The element to get the name for. | ||
|  |  * @returns The tag name of `elem`. | ||
|  |  */ | ||
|  | function getName(elem) { | ||
|  |     return elem.name; | ||
|  | } | ||
|  | exports.getName = getName; | ||
|  | /** | ||
|  |  * Returns the next element sibling of a node. | ||
|  |  * | ||
|  |  * @param elem The element to get the next sibling of. | ||
|  |  * @returns `elem`'s next sibling that is a tag. | ||
|  |  */ | ||
|  | function nextElementSibling(elem) { | ||
|  |     var _a; | ||
|  |     var next = elem.next; | ||
|  |     while (next !== null && !(0, domhandler_1.isTag)(next)) | ||
|  |         (_a = next, next = _a.next); | ||
|  |     return next; | ||
|  | } | ||
|  | exports.nextElementSibling = nextElementSibling; | ||
|  | /** | ||
|  |  * Returns the previous element sibling of a node. | ||
|  |  * | ||
|  |  * @param elem The element to get the previous sibling of. | ||
|  |  * @returns `elem`'s previous sibling that is a tag. | ||
|  |  */ | ||
|  | function prevElementSibling(elem) { | ||
|  |     var _a; | ||
|  |     var prev = elem.prev; | ||
|  |     while (prev !== null && !(0, domhandler_1.isTag)(prev)) | ||
|  |         (_a = prev, prev = _a.prev); | ||
|  |     return prev; | ||
|  | } | ||
|  | exports.prevElementSibling = prevElementSibling; |