occam-dom 5.2.24 → 5.2.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/example.js +21 -1
- package/lib/utilities/node.js +21 -1
- package/package.json +1 -1
- package/src/utilities/node.js +31 -11
package/lib/utilities/node.js
CHANGED
|
@@ -12,6 +12,12 @@ _export(exports, {
|
|
|
12
12
|
default: function() {
|
|
13
13
|
return _default;
|
|
14
14
|
},
|
|
15
|
+
isAncestorOf: function() {
|
|
16
|
+
return isAncestorOf;
|
|
17
|
+
},
|
|
18
|
+
isDescendantOf: function() {
|
|
19
|
+
return isDescendantOf;
|
|
20
|
+
},
|
|
15
21
|
isLessThan: function() {
|
|
16
22
|
return isLessThan;
|
|
17
23
|
},
|
|
@@ -41,6 +47,18 @@ function isLessThan(nodeA, nodeB) {
|
|
|
41
47
|
}
|
|
42
48
|
return lessThan;
|
|
43
49
|
}
|
|
50
|
+
function isAncestorOf(nodeA, nodeB) {
|
|
51
|
+
var ancestorOf = nodeB.someAncestorNode(function(ancestorNodeB) {
|
|
52
|
+
if (nodeA === ancestorNodeB) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return ancestorOf;
|
|
57
|
+
}
|
|
58
|
+
function isDescendantOf(nodeA, nodeB) {
|
|
59
|
+
var nodeBAncestorOfNodeA = isAncestorOf(nodeB, nodeA), nodeADescendantOfNodeB = nodeBAncestorOfNodeA, descendantOf = nodeADescendantOfNodeB; ///
|
|
60
|
+
return descendantOf;
|
|
61
|
+
}
|
|
44
62
|
function topmostNodeFromOuterNodes(ClassFromOuterNode, outerNodes) {
|
|
45
63
|
if (outerNodes === undefined) {
|
|
46
64
|
outerNodes = ClassFromOuterNode; ///
|
|
@@ -68,6 +86,8 @@ function topmostNodeFromOuterNodes(ClassFromOuterNode, outerNodes) {
|
|
|
68
86
|
}
|
|
69
87
|
var _default = {
|
|
70
88
|
isLessThan: isLessThan,
|
|
89
|
+
isAncestorOf: isAncestorOf,
|
|
90
|
+
isDescendantOf: isDescendantOf,
|
|
71
91
|
topmostNodeFromOuterNodes: topmostNodeFromOuterNodes
|
|
72
92
|
};
|
|
73
93
|
function orderNodes(nodes) {
|
|
@@ -83,4 +103,4 @@ function ancestorNodesFromNode(node) {
|
|
|
83
103
|
return ancestorNodes;
|
|
84
104
|
}
|
|
85
105
|
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvbm9kZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vZGUgZnJvbSBcIi4uL25vZGVcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGVzc1RoYW4obm9kZUEsIG5vZGVCKSB7XG4gIGxldCBsZXNzVGhhbiA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZUFBbmNlc3Rvck5vZGVzID0gYW5jZXN0b3JOb2Rlc0Zyb21Ob2RlKG5vZGVBKSxcbiAgICAgICAgbm9kZUJBbmNlc3Rvck5vZGVzID0gYW5jZXN0b3JOb2Rlc0Zyb21Ob2RlKG5vZGVCKSxcbiAgICAgICAgbm9kZUFBbmNlc3Rvck5vZGVzTGVuZ3RoID0gbm9kZUFBbmNlc3Rvck5vZGVzLmxlbmd0aCxcbiAgICAgICAgbm9kZUJBbmNlc3Rvck5vZGVzTGVuZ3RoID0gbm9kZUJBbmNlc3Rvck5vZGVzLmxlbmd0aCxcbiAgICAgICAgbWluaW11bUFuY2VzdG9yTm9kZXNMZW5ndGggPSBNYXRoLm1pbihub2RlQUFuY2VzdG9yTm9kZXNMZW5ndGgsIG5vZGVCQW5jZXN0b3JOb2Rlc0xlbmd0aCk7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1pbmltdW1BbmNlc3Rvck5vZGVzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3Qgbm9kZUFBbmNlc3Rvck5vZGUgPSBub2RlQUFuY2VzdG9yTm9kZXNbaW5kZXhdLFxuICAgICAgICAgIG5vZGVCQW5jZXN0b3JOb2RlID0gbm9kZUJBbmNlc3Rvck5vZGVzW2luZGV4XTtcblxuICAgIGlmIChub2RlQUFuY2VzdG9yTm9kZSAhPT0gbm9kZUJBbmNlc3Rvck5vZGUpIHtcbiAgICAgIGNvbnN0IHBhcmVudEluZGV4ID0gaW5kZXggLSAxLFxuICAgICAgICAgICAgbm9kZUFBbmNlc3Rvck5vZGVQYXJlbnROb2RlID0gbm9kZUFBbmNlc3Rvck5vZGVzW3BhcmVudEluZGV4XSxcbiAgICAgICAgICAgIHBhcmVudE5vZGUgPSBub2RlQUFuY2VzdG9yTm9kZVBhcmVudE5vZGUsIC8vL1xuICAgICAgICAgICAgY2hpbGROb2RlQSA9IG5vZGVBQW5jZXN0b3JOb2RlLCAvLy9cbiAgICAgICAgICAgIGNoaWxkTm9kZUIgPSBub2RlQkFuY2VzdG9yTm9kZSwgLy8vXG4gICAgICAgICAgICBpbmRleEEgPSBwYXJlbnROb2RlLmluZGV4T2ZDaGlsZE5vZGUoY2hpbGROb2RlQSksXG4gICAgICAgICAgICBpbmRleEIgPSBwYXJlbnROb2RlLmluZGV4T2ZDaGlsZE5vZGUoY2hpbGROb2RlQik7XG5cbiAgICAgIGxlc3NUaGFuID0gKGluZGV4QSA8IGluZGV4Qik7XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsZXNzVGhhbiA9PT0gbnVsbCkge1xuICAgIGxlc3NUaGFuID0gKG5vZGVBQW5jZXN0b3JOb2Rlc0xlbmd0aCA8IG5vZGVCQW5jZXN0b3JOb2Rlc0xlbmd0aCk7XG4gIH1cblxuICByZXR1cm4gbGVzc1RoYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FuY2VzdG9yT2Yobm9kZUEsIG5vZGVCKSB7XG4gIGNvbnN0IGFuY2VzdG9yT2YgPSBub2RlQi5zb21lQW5jZXN0b3JOb2RlKChhbmNlc3Rvck5vZGVCKSA9PiB7XG4gICAgaWYgKG5vZGVBID09PSBhbmNlc3Rvck5vZGVCKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBhbmNlc3Rvck9mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEZXNjZW5kYW50T2Yobm9kZUEsIG5vZGVCKSB7XG4gIGNvbnN0IG5vZGVCQW5jZXN0b3JPZk5vZGVBID0gaXNBbmNlc3Rvck9mKG5vZGVCLCBub2RlQSksXG4gICAgICAgIG5vZGVBRGVzY2VuZGFudE9mTm9kZUIgPSBub2RlQkFuY2VzdG9yT2ZOb2RlQSwgIC8vL1xuICAgICAgICBkZXNjZW5kYW50T2YgPSBub2RlQURlc2NlbmRhbnRPZk5vZGVCOyAgLy8vXG5cbiAgcmV0dXJuIGRlc2NlbmRhbnRPZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3ROb2RlRnJvbU91dGVyTm9kZXMoQ2xhc3NGcm9tT3V0ZXJOb2RlLCBvdXRlck5vZGVzKSB7XG4gIGlmIChvdXRlck5vZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICBvdXRlck5vZGVzID0gQ2xhc3NGcm9tT3V0ZXJOb2RlOyAvLy9cblxuICAgIENsYXNzRnJvbU91dGVyTm9kZSA9IChvdXRlck5vZGUpID0+IE5vZGU7ICAvLy9cbiAgfVxuXG4gIGNvbnN0IG5vZGVzID0gb3V0ZXJOb2RlczsgLy8vXG5cbiAgb3JkZXJOb2Rlcyhub2Rlcyk7XG5cbiAgY29uc3Qgb3V0ZXJOb2RlID0gbnVsbCxcbiAgICAgICAgQ2xhc3MgPSBDbGFzc0Zyb21PdXRlck5vZGUob3V0ZXJOb2RlKSxcbiAgICAgICAgdG9wbW9zdE5vZGUgPSBDbGFzcy5mcm9tTm90aGluZygpLFxuICAgICAgICBvdXRlck5vZGVUb05vZGVNYXAgPSBuZXcgV2Vha01hcCgpO1xuXG4gIG91dGVyTm9kZXMuZm9yRWFjaCgob3V0ZXJOb2RlKSA9PiB7XG4gICAgbGV0IHBhcmVudE5vZGUgPSB0b3Btb3N0Tm9kZTsgLy8vXG5cbiAgICBvdXRlck5vZGUuc29tZUFuY2VzdG9yTm9kZSgoYW5jZXN0b3JOb2RlKSA9PiB7XG4gICAgICBjb25zdCBvdXRlck5vZGUgPSBhbmNlc3Rvck5vZGUsIC8vL1xuICAgICAgICAgICAgbm9kZSA9IG91dGVyTm9kZVRvTm9kZU1hcC5nZXQob3V0ZXJOb2RlKSB8fCBudWxsO1xuXG4gICAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgICBwYXJlbnROb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgQ2xhc3MgPSBDbGFzc0Zyb21PdXRlck5vZGUob3V0ZXJOb2RlKSxcbiAgICAgICAgICBub2RlID0gQ2xhc3MuZnJvbU91dGVyTm9kZShvdXRlck5vZGUpLFxuICAgICAgICAgIGFwcGVuZGVkQ2hpbGROb2RlID0gbm9kZTsgLy8vXG5cbiAgICBwYXJlbnROb2RlLmFwcGVuZENoaWxkTm9kZShhcHBlbmRlZENoaWxkTm9kZSk7XG5cbiAgICBvdXRlck5vZGVUb05vZGVNYXAuc2V0KG91dGVyTm9kZSwgbm9kZSk7XG4gIH0pO1xuXG4gIHJldHVybiB0b3Btb3N0Tm9kZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0xlc3NUaGFuLFxuICBpc0FuY2VzdG9yT2YsXG4gIGlzRGVzY2VuZGFudE9mLFxuICB0b3Btb3N0Tm9kZUZyb21PdXRlck5vZGVzXG59O1xuXG5mdW5jdGlvbiBvcmRlck5vZGVzKG5vZGVzKSB7XG4gIG5vZGVzLnNvcnQoKG5vZGVBLCBub2RlQikgPT4ge1xuICAgIGNvbnN0IG5vZGVBTGVzc1RoYW5Ob2RlQiA9IGlzTGVzc1RoYW4obm9kZUEsIG5vZGVCKSxcbiAgICAgICAgICByZXN1bHQgPSBub2RlQUxlc3NUaGFuTm9kZUIgP1xuICAgICAgICAgICAgICAgICAgICAgLTEgOlxuICAgICAgICAgICAgICAgICAgICAgICArMTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhbmNlc3Rvck5vZGVzRnJvbU5vZGUobm9kZSkge1xuICBjb25zdCBhbmNlc3Rvck5vZGVzID0gbm9kZS5nZXRBbmNlc3Rvck5vZGVzKCk7XG5cbiAgYW5jZXN0b3JOb2Rlcy51bnNoaWZ0KG5vZGUpO1xuXG4gIGFuY2VzdG9yTm9kZXMucmV2ZXJzZSgpO1xuXG4gIHJldHVybiBhbmNlc3Rvck5vZGVzO1xufVxuIl0sIm5hbWVzIjpbImlzQW5jZXN0b3JPZiIsImlzRGVzY2VuZGFudE9mIiwiaXNMZXNzVGhhbiIsInRvcG1vc3ROb2RlRnJvbU91dGVyTm9kZXMiLCJub2RlQSIsIm5vZGVCIiwibGVzc1RoYW4iLCJub2RlQUFuY2VzdG9yTm9kZXMiLCJhbmNlc3Rvck5vZGVzRnJvbU5vZGUiLCJub2RlQkFuY2VzdG9yTm9kZXMiLCJub2RlQUFuY2VzdG9yTm9kZXNMZW5ndGgiLCJsZW5ndGgiLCJub2RlQkFuY2VzdG9yTm9kZXNMZW5ndGgiLCJtaW5pbXVtQW5jZXN0b3JOb2Rlc0xlbmd0aCIsIk1hdGgiLCJtaW4iLCJpbmRleCIsIm5vZGVBQW5jZXN0b3JOb2RlIiwibm9kZUJBbmNlc3Rvck5vZGUiLCJwYXJlbnRJbmRleCIsIm5vZGVBQW5jZXN0b3JOb2RlUGFyZW50Tm9kZSIsInBhcmVudE5vZGUiLCJjaGlsZE5vZGVBIiwiY2hpbGROb2RlQiIsImluZGV4QSIsImluZGV4T2ZDaGlsZE5vZGUiLCJpbmRleEIiLCJhbmNlc3Rvck9mIiwic29tZUFuY2VzdG9yTm9kZSIsImFuY2VzdG9yTm9kZUIiLCJub2RlQkFuY2VzdG9yT2ZOb2RlQSIsIm5vZGVBRGVzY2VuZGFudE9mTm9kZUIiLCJkZXNjZW5kYW50T2YiLCJDbGFzc0Zyb21PdXRlck5vZGUiLCJvdXRlck5vZGVzIiwidW5kZWZpbmVkIiwib3V0ZXJOb2RlIiwiTm9kZSIsIm5vZGVzIiwib3JkZXJOb2RlcyIsIkNsYXNzIiwidG9wbW9zdE5vZGUiLCJmcm9tTm90aGluZyIsIm91dGVyTm9kZVRvTm9kZU1hcCIsIldlYWtNYXAiLCJmb3JFYWNoIiwiYW5jZXN0b3JOb2RlIiwibm9kZSIsImdldCIsImZyb21PdXRlck5vZGUiLCJhcHBlbmRlZENoaWxkTm9kZSIsImFwcGVuZENoaWxkTm9kZSIsInNldCIsInNvcnQiLCJub2RlQUxlc3NUaGFuTm9kZUIiLCJyZXN1bHQiLCJhbmNlc3Rvck5vZGVzIiwiZ2V0QW5jZXN0b3JOb2RlcyIsInVuc2hpZnQiLCJyZXZlcnNlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUFtR0EsT0FLRTtlQUxGOztJQTVEZ0JBLFlBQVk7ZUFBWkE7O0lBVUFDLGNBQWM7ZUFBZEE7O0lBN0NBQyxVQUFVO2VBQVZBOztJQXFEQUMseUJBQXlCO2VBQXpCQTs7OzJEQXZEQzs7Ozs7O0FBRVYsU0FB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
|
package/package.json
CHANGED
package/src/utilities/node.js
CHANGED
|
@@ -6,23 +6,23 @@ export function isLessThan(nodeA, nodeB) {
|
|
|
6
6
|
let lessThan = null;
|
|
7
7
|
|
|
8
8
|
const nodeAAncestorNodes = ancestorNodesFromNode(nodeA),
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
nodeBAncestorNodes = ancestorNodesFromNode(nodeB),
|
|
10
|
+
nodeAAncestorNodesLength = nodeAAncestorNodes.length,
|
|
11
|
+
nodeBAncestorNodesLength = nodeBAncestorNodes.length,
|
|
12
|
+
minimumAncestorNodesLength = Math.min(nodeAAncestorNodesLength, nodeBAncestorNodesLength);
|
|
13
13
|
|
|
14
14
|
for (let index = 0; index < minimumAncestorNodesLength; index++) {
|
|
15
15
|
const nodeAAncestorNode = nodeAAncestorNodes[index],
|
|
16
|
-
|
|
16
|
+
nodeBAncestorNode = nodeBAncestorNodes[index];
|
|
17
17
|
|
|
18
18
|
if (nodeAAncestorNode !== nodeBAncestorNode) {
|
|
19
19
|
const parentIndex = index - 1,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
nodeAAncestorNodeParentNode = nodeAAncestorNodes[parentIndex],
|
|
21
|
+
parentNode = nodeAAncestorNodeParentNode, ///
|
|
22
|
+
childNodeA = nodeAAncestorNode, ///
|
|
23
|
+
childNodeB = nodeBAncestorNode, ///
|
|
24
|
+
indexA = parentNode.indexOfChildNode(childNodeA),
|
|
25
|
+
indexB = parentNode.indexOfChildNode(childNodeB);
|
|
26
26
|
|
|
27
27
|
lessThan = (indexA < indexB);
|
|
28
28
|
|
|
@@ -37,6 +37,24 @@ export function isLessThan(nodeA, nodeB) {
|
|
|
37
37
|
return lessThan;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
export function isAncestorOf(nodeA, nodeB) {
|
|
41
|
+
const ancestorOf = nodeB.someAncestorNode((ancestorNodeB) => {
|
|
42
|
+
if (nodeA === ancestorNodeB) {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
return ancestorOf;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function isDescendantOf(nodeA, nodeB) {
|
|
51
|
+
const nodeBAncestorOfNodeA = isAncestorOf(nodeB, nodeA),
|
|
52
|
+
nodeADescendantOfNodeB = nodeBAncestorOfNodeA, ///
|
|
53
|
+
descendantOf = nodeADescendantOfNodeB; ///
|
|
54
|
+
|
|
55
|
+
return descendantOf;
|
|
56
|
+
}
|
|
57
|
+
|
|
40
58
|
export function topmostNodeFromOuterNodes(ClassFromOuterNode, outerNodes) {
|
|
41
59
|
if (outerNodes === undefined) {
|
|
42
60
|
outerNodes = ClassFromOuterNode; ///
|
|
@@ -81,6 +99,8 @@ export function topmostNodeFromOuterNodes(ClassFromOuterNode, outerNodes) {
|
|
|
81
99
|
|
|
82
100
|
export default {
|
|
83
101
|
isLessThan,
|
|
102
|
+
isAncestorOf,
|
|
103
|
+
isDescendantOf,
|
|
84
104
|
topmostNodeFromOuterNodes
|
|
85
105
|
};
|
|
86
106
|
|