UNPKG

node-html-parser

Version:

A very fast HTML parser, generating a simplified DOM, with basic element query support.

107 lines (106 loc) 2.91 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const type_1 = __importDefault(require("./nodes/type")); function isTag(node) { return node && node.nodeType === type_1.default.ELEMENT_NODE; } function getAttributeValue(elem, name) { return isTag(elem) ? elem.getAttribute(name) : undefined; } function getName(elem) { return ((elem && elem.rawTagName) || '').toLowerCase(); } function getChildren(node) { return node && node.childNodes; } function getParent(node) { return node ? node.parentNode : null; } function getText(node) { return node.text; } function removeSubsets(nodes) { let idx = nodes.length; let node; let ancestor; let replace; // Check if each node (or one of its ancestors) is already contained in the // array. while (--idx > -1) { node = ancestor = nodes[idx]; // Temporarily remove the node under consideration nodes[idx] = null; replace = true; while (ancestor) { if (nodes.indexOf(ancestor) > -1) { replace = false; nodes.splice(idx, 1); break; } ancestor = getParent(ancestor); } // If the node has been found to be unique, re-insert it. if (replace) { nodes[idx] = node; } } return nodes; } function existsOne(test, elems) { return elems.some((elem) => { return isTag(elem) ? test(elem) || existsOne(test, getChildren(elem)) : false; }); } function getSiblings(node) { const parent = getParent(node); return parent ? getChildren(parent) : []; } function hasAttrib(elem, name) { return getAttributeValue(elem, name) !== undefined; } function findOne(test, elems) { let elem = null; for (let i = 0, l = elems === null || elems === void 0 ? void 0 : elems.length; i < l && !elem; i++) { const el = elems[i]; if (test(el)) { elem = el; } else { const childs = getChildren(el); if (childs && childs.length > 0) { elem = findOne(test, childs); } } } return elem; } function findAll(test, nodes) { let result = []; for (let i = 0, j = nodes.length; i < j; i++) { if (!isTag(nodes[i])) continue; if (test(nodes[i])) result.push(nodes[i]); const childs = getChildren(nodes[i]); if (childs) result = result.concat(findAll(test, childs)); } return result; } exports.default = { isTag, getAttributeValue, getName, getChildren, getParent, getText, removeSubsets, existsOne, getSiblings, hasAttrib, findOne, findAll };