%PDF- %PDF-
| Direktori : /proc/self/root/usr/share/nodejs/jsdom/lib/jsdom/living/helpers/ |
| Current File : //proc/self/root/usr/share/nodejs/jsdom/lib/jsdom/living/helpers/traversal.js |
"use strict";
const { domSymbolTree } = require("./internal-constants");
const { HTML_NS } = require("./namespaces");
// All these operate on and return impls, not wrappers!
exports.closest = (e, localName, namespace = HTML_NS) => {
while (e) {
if (e.localName === localName && e.namespaceURI === namespace) {
return e;
}
e = domSymbolTree.parent(e);
}
return null;
};
exports.childrenByLocalName = (parent, localName, namespace = HTML_NS) => {
return domSymbolTree.childrenToArray(parent, { filter(node) {
return node._localName === localName && node._namespaceURI === namespace;
} });
};
exports.descendantsByLocalName = (parent, localName, namespace = HTML_NS) => {
return domSymbolTree.treeToArray(parent, { filter(node) {
return node._localName === localName && node._namespaceURI === namespace && node !== parent;
} });
};
exports.childrenByLocalNames = (parent, localNamesSet, namespace = HTML_NS) => {
return domSymbolTree.childrenToArray(parent, { filter(node) {
return localNamesSet.has(node._localName) && node._namespaceURI === namespace;
} });
};
exports.descendantsByLocalNames = (parent, localNamesSet, namespace = HTML_NS) => {
return domSymbolTree.treeToArray(parent, { filter(node) {
return localNamesSet.has(node._localName) &&
node._namespaceURI === namespace &&
node !== parent;
} });
};
exports.firstChildWithLocalName = (parent, localName, namespace = HTML_NS) => {
const iterator = domSymbolTree.childrenIterator(parent);
for (const child of iterator) {
if (child._localName === localName && child._namespaceURI === namespace) {
return child;
}
}
return null;
};
exports.firstChildWithLocalNames = (parent, localNamesSet, namespace = HTML_NS) => {
const iterator = domSymbolTree.childrenIterator(parent);
for (const child of iterator) {
if (localNamesSet.has(child._localName) && child._namespaceURI === namespace) {
return child;
}
}
return null;
};
exports.firstDescendantWithLocalName = (parent, localName, namespace = HTML_NS) => {
const iterator = domSymbolTree.treeIterator(parent);
for (const descendant of iterator) {
if (descendant._localName === localName && descendant._namespaceURI === namespace) {
return descendant;
}
}
return null;
};