webextension-store-meta
Version:
Get browser extension(webextension) item meta from Chrome Web Store, Firefox add-ons, and Microsoft Edge Add-ons.
51 lines • 1.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.queryOne = exports.getText = exports.findOne = void 0;
const domhandler_1 = require("domhandler");
const findOne = (test, maybeNode, recurse = true) => {
const nodes = Array.isArray(maybeNode) ? maybeNode : [maybeNode];
let elem = null;
for (let i = 0; i < nodes.length && !elem; i++) {
const node = nodes[i];
if (!(0, domhandler_1.isTag)(node)) {
continue;
}
if (test(node)) {
elem = node;
}
else if (recurse && node.children.length > 0) {
elem = (0, exports.findOne)(test, node.children, true);
}
}
return elem;
};
exports.findOne = findOne;
/**
* Get a node's trimmed inner text.
* domutils's stringify module is too heavy.
*
* @param node Node to get the inner text of.
* @returns `node`'s trimmed inner text.
*/
const getText = (node) => {
if (!node)
return "";
if (Array.isArray(node))
return node.map(exports.getText).join("");
if ((0, domhandler_1.isTag)(node))
return node.name === "br" ? "\n" : (0, exports.getText)(node.children);
if ((0, domhandler_1.isCDATA)(node))
return (0, exports.getText)(node.children);
if ((0, domhandler_1.isText)(node))
return node.data.trim();
return "";
};
exports.getText = getText;
const queryOne = (node, className, tagName) => {
const tester = new RegExp(`(?:^|\\s)${className}(?:\\s|$)`);
return (0, exports.findOne)((elem) => !!elem.attribs.class &&
(!tagName || tagName === elem.name) &&
tester.test(elem.attribs.class), node);
};
exports.queryOne = queryOne;
//# sourceMappingURL=dom.js.map