occam-dom 4.0.16 → 5.0.2

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.
Files changed (56) hide show
  1. package/bin/main.js +15 -0
  2. package/example.js +38032 -0
  3. package/index.html +47 -0
  4. package/lib/constants.js +13 -0
  5. package/lib/example/constants.js +22 -0
  6. package/lib/example/utilities/query.js +23 -0
  7. package/lib/example/utilities/token.js +28 -0
  8. package/lib/example/view/div/sizeable.js +39 -0
  9. package/lib/example/view/input/maximumDepth.js +143 -0
  10. package/lib/example/view/input.js +39 -0
  11. package/lib/example/view/subHeading.js +39 -0
  12. package/lib/example/view/textarea/content.js +142 -0
  13. package/lib/example/view/textarea/expressions.js +143 -0
  14. package/lib/example/view/textarea/outerNodes.js +147 -0
  15. package/lib/example/view/textarea/parseTree/inner.js +157 -0
  16. package/lib/example/view/textarea/parseTree/outer.js +126 -0
  17. package/lib/example/view/textarea/parseTree.js +148 -0
  18. package/lib/example/view/textarea.js +39 -0
  19. package/lib/example/view.js +245 -0
  20. package/lib/example.js +19 -0
  21. package/lib/index.js +27 -0
  22. package/lib/node.js +302 -0
  23. package/lib/parseTree/childNodes.js +164 -0
  24. package/lib/parseTree/horizontalBranch.js +120 -0
  25. package/lib/parseTree/node.js +145 -0
  26. package/lib/parseTree/string.js +109 -0
  27. package/lib/parseTree/verticalBranch.js +184 -0
  28. package/lib/parseTree.js +191 -0
  29. package/lib/utilities/node.js +81 -0
  30. package/package.json +3 -2
  31. package/src/constants.js +3 -0
  32. package/src/example/constants.js +4 -0
  33. package/src/example/utilities/query.js +21 -0
  34. package/src/example/utilities/token.js +19 -0
  35. package/src/example/view/div/sizeable.js +12 -0
  36. package/src/example/view/input/maximumDepth.js +35 -0
  37. package/src/example/view/input.js +14 -0
  38. package/src/example/view/subHeading.js +16 -0
  39. package/src/example/view/textarea/content.js +33 -0
  40. package/src/example/view/textarea/expressions.js +39 -0
  41. package/src/example/view/textarea/outerNodes.js +48 -0
  42. package/src/example/view/textarea/parseTree/inner.js +24 -0
  43. package/src/example/view/textarea/parseTree/outer.js +17 -0
  44. package/src/example/view/textarea/parseTree.js +28 -0
  45. package/src/example/view/textarea.js +18 -0
  46. package/src/example/view.js +137 -0
  47. package/src/example.js +21 -0
  48. package/src/index.js +4 -0
  49. package/src/node.js +221 -0
  50. package/src/parseTree/childNodes.js +108 -0
  51. package/src/parseTree/horizontalBranch.js +32 -0
  52. package/src/parseTree/node.js +77 -0
  53. package/src/parseTree/string.js +18 -0
  54. package/src/parseTree/verticalBranch.js +77 -0
  55. package/src/parseTree.js +141 -0
  56. package/src/utilities/node.js +104 -0
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+
3
+ import Node from "../node";
4
+
5
+ export function topmostNodeFromOuterNodes(Class, outerNodes) {
6
+ if (outerNodes === undefined) {
7
+ outerNodes = Class; ///
8
+
9
+ Class = Node; ///
10
+ }
11
+
12
+ const nodes = outerNodes; ///
13
+
14
+ orderNodes(nodes);
15
+
16
+ const topmostNode = Node.fromNothing(),
17
+ outerNodeToNodeMap = new WeakMap();
18
+
19
+ outerNodes.forEach((outerNode) => {
20
+ const ancestorNodes = outerNode.getAncestorNodes();
21
+
22
+ let parentNode = topmostNode; ///
23
+
24
+ ancestorNodes.some((ancestorNode) => {
25
+ const outerNode = ancestorNode, ///
26
+ node = outerNodeToNodeMap.get(outerNode) || null;
27
+
28
+ if (node !== null) {
29
+ parentNode = node; ///
30
+
31
+ return true;
32
+ }
33
+ });
34
+
35
+ const node = Class.fromOuterNode(outerNode),
36
+ childNode = node; ///
37
+
38
+ parentNode.addChildNode(childNode);
39
+
40
+ outerNodeToNodeMap.set(outerNode, node);
41
+ });
42
+
43
+ return topmostNode;
44
+ }
45
+
46
+ export default {
47
+ topmostNodeFromOuterNodes
48
+ };
49
+
50
+ function orderNodes(nodes) {
51
+ nodes.sort((nodeA, nodeB) => {
52
+ const nodeALessThanNodeB = isLessThan(nodeA, nodeB),
53
+ result = nodeALessThanNodeB ?
54
+ -1 :
55
+ +1;
56
+
57
+ return result;
58
+ });
59
+ }
60
+
61
+ function isLessThan(nodeA, nodeB) {
62
+ let lessThan = null;
63
+
64
+ const ancestorNodesA = ancestorNodesFromNode(nodeA),
65
+ ancestorNodesB = ancestorNodesFromNode(nodeB),
66
+ ancestorNodesALength = ancestorNodesA.length,
67
+ ancestorNodesBLength = ancestorNodesB.length,
68
+ minimumAncestorNodesLength = Math.min(ancestorNodesALength, ancestorNodesBLength);
69
+
70
+ for (let index = 0; index < minimumAncestorNodesLength; index++) {
71
+ const ancestorNodeA = ancestorNodesA[index],
72
+ ancestorNodeB = ancestorNodesB[index];
73
+
74
+ if (ancestorNodeA !== ancestorNodeB) {
75
+ const parentIndex = index - 1,
76
+ ancestorNodeAParentNode = ancestorNodesA[parentIndex],
77
+ parentNode = ancestorNodeAParentNode, ///
78
+ childNodeA = ancestorNodeA, ///
79
+ childNodeB = ancestorNodeB, ///
80
+ indexA = parentNode.indexOfChildNode(childNodeA),
81
+ indexB = parentNode.indexOfChildNode(childNodeB);
82
+
83
+ lessThan = (indexA < indexB);
84
+
85
+ break;
86
+ }
87
+ }
88
+
89
+ if (lessThan === null) {
90
+ lessThan = (ancestorNodesALength < ancestorNodesBLength);
91
+ }
92
+
93
+ return lessThan;
94
+ }
95
+
96
+ function ancestorNodesFromNode(node) {
97
+ const ancestorNodes = node.getAncestorNodes();
98
+
99
+ ancestorNodes.unshift(node);
100
+
101
+ ancestorNodes.reverse();
102
+
103
+ return ancestorNodes;
104
+ }