summaryrefslogtreecommitdiff
path: root/alarm/node_modules/jsdom/lib/jsdom/living/helpers/node.js
diff options
context:
space:
mode:
Diffstat (limited to 'alarm/node_modules/jsdom/lib/jsdom/living/helpers/node.js')
-rw-r--r--alarm/node_modules/jsdom/lib/jsdom/living/helpers/node.js68
1 files changed, 68 insertions, 0 deletions
diff --git a/alarm/node_modules/jsdom/lib/jsdom/living/helpers/node.js b/alarm/node_modules/jsdom/lib/jsdom/living/helpers/node.js
new file mode 100644
index 0000000..40e12bc
--- /dev/null
+++ b/alarm/node_modules/jsdom/lib/jsdom/living/helpers/node.js
@@ -0,0 +1,68 @@
+"use strict";
+
+const NODE_TYPE = require("../node-type");
+const { domSymbolTree } = require("./internal-constants");
+
+// https://dom.spec.whatwg.org/#concept-node-length
+function nodeLength(node) {
+ switch (node.nodeType) {
+ case NODE_TYPE.DOCUMENT_TYPE_NODE:
+ return 0;
+
+ case NODE_TYPE.TEXT_NODE:
+ case NODE_TYPE.PROCESSING_INSTRUCTION_NODE:
+ case NODE_TYPE.COMMENT_NODE:
+ return node.data.length;
+
+ default:
+ return domSymbolTree.childrenCount(node);
+ }
+}
+
+// https://dom.spec.whatwg.org/#concept-tree-root
+function nodeRoot(node) {
+ while (domSymbolTree.parent(node)) {
+ node = domSymbolTree.parent(node);
+ }
+
+ return node;
+}
+
+// https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor
+function isInclusiveAncestor(ancestorNode, node) {
+ while (node) {
+ if (ancestorNode === node) {
+ return true;
+ }
+
+ node = domSymbolTree.parent(node);
+ }
+
+ return false;
+}
+
+// https://dom.spec.whatwg.org/#concept-tree-following
+function isFollowing(nodeA, nodeB) {
+ if (nodeA === nodeB) {
+ return false;
+ }
+
+ let current = nodeB;
+ while (current) {
+ if (current === nodeA) {
+ return true;
+ }
+
+ current = domSymbolTree.following(current);
+ }
+
+ return false;
+}
+
+module.exports = {
+ nodeLength,
+ nodeRoot,
+
+ isInclusiveAncestor,
+ isFollowing
+};