@plait/layouts 0.77.2 → 0.78.0-next.0
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/fesm2022/plait-layouts.mjs.map +1 -1
- package/package.json +1 -3
- package/esm2022/algorithms/non-overlapping-tree-layout.mjs +0 -192
- package/esm2022/interfaces/layout-node.mjs +0 -134
- package/esm2022/interfaces/layout-tree-node.mjs +0 -26
- package/esm2022/interfaces/mind.mjs +0 -29
- package/esm2022/layouts/base-layout.mjs +0 -129
- package/esm2022/layouts/global-layout.mjs +0 -62
- package/esm2022/layouts/indent.mjs +0 -89
- package/esm2022/layouts/logic.mjs +0 -55
- package/esm2022/plait-layouts.mjs +0 -5
- package/esm2022/public-api.mjs +0 -9
- package/esm2022/utils/abstract.mjs +0 -69
- package/esm2022/utils/layout.mjs +0 -73
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { MindLayoutType } from './mind';
|
|
2
|
-
import { findLayoutType } from '../utils/layout';
|
|
3
|
-
/**
|
|
4
|
-
* abstract layout node
|
|
5
|
-
*/
|
|
6
|
-
export class LayoutNode {
|
|
7
|
-
constructor(origin, options, context, parent) {
|
|
8
|
-
this.x = 0;
|
|
9
|
-
this.y = 0;
|
|
10
|
-
this.vGap = 0;
|
|
11
|
-
this.hGap = 0;
|
|
12
|
-
this.width = 0;
|
|
13
|
-
this.height = 0;
|
|
14
|
-
this.depth = 0;
|
|
15
|
-
this.children = [];
|
|
16
|
-
this.left = false;
|
|
17
|
-
this.up = false;
|
|
18
|
-
const hGap = options.getHorizontalGap(origin, parent);
|
|
19
|
-
const vGap = options.getVerticalGap(origin, parent);
|
|
20
|
-
this.origin = origin;
|
|
21
|
-
this.width = options.getWidth(origin);
|
|
22
|
-
this.height = options.getHeight(origin);
|
|
23
|
-
this.x = this.y = 0;
|
|
24
|
-
if (parent) {
|
|
25
|
-
this.parent = parent;
|
|
26
|
-
}
|
|
27
|
-
const layout = findLayoutType(this);
|
|
28
|
-
this.layout = layout && layout !== MindLayoutType.standard ? layout : context.rootLayoutType;
|
|
29
|
-
const verticalConnectingPosition = options.getVerticalConnectingPosition(origin, parent);
|
|
30
|
-
if (verticalConnectingPosition) {
|
|
31
|
-
this.verticalConnectingPosition = verticalConnectingPosition;
|
|
32
|
-
}
|
|
33
|
-
this.addGap(hGap, vGap);
|
|
34
|
-
}
|
|
35
|
-
isRoot() {
|
|
36
|
-
return this.depth === 0;
|
|
37
|
-
}
|
|
38
|
-
addGap(hGap, vGap) {
|
|
39
|
-
const me = this;
|
|
40
|
-
me.hGap += hGap;
|
|
41
|
-
me.vGap += vGap;
|
|
42
|
-
me.width += 2 * hGap;
|
|
43
|
-
me.height += 2 * vGap;
|
|
44
|
-
}
|
|
45
|
-
eachNode(callback) {
|
|
46
|
-
depthFirstRecursion(this, callback);
|
|
47
|
-
}
|
|
48
|
-
getBoundingBox() {
|
|
49
|
-
const bb = {
|
|
50
|
-
left: Number.MAX_VALUE,
|
|
51
|
-
top: Number.MAX_VALUE,
|
|
52
|
-
right: Number.MIN_VALUE,
|
|
53
|
-
bottom: Number.MIN_VALUE,
|
|
54
|
-
width: 0,
|
|
55
|
-
height: 0
|
|
56
|
-
};
|
|
57
|
-
this.eachNode(node => {
|
|
58
|
-
bb.left = Math.min(bb.left, node.x);
|
|
59
|
-
bb.top = Math.min(bb.top, node.y);
|
|
60
|
-
bb.right = Math.max(bb.right, node.x + node.width);
|
|
61
|
-
bb.bottom = Math.max(bb.bottom, node.y + node.height);
|
|
62
|
-
});
|
|
63
|
-
bb.width = bb.right - bb.left;
|
|
64
|
-
bb.height = bb.bottom - bb.top;
|
|
65
|
-
return bb;
|
|
66
|
-
}
|
|
67
|
-
translate(tx = 0, ty = 0) {
|
|
68
|
-
this.eachNode(node => {
|
|
69
|
-
node.x += tx;
|
|
70
|
-
node.y += ty;
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
right2left() {
|
|
74
|
-
const me = this;
|
|
75
|
-
const bb = me.getBoundingBox();
|
|
76
|
-
me.eachNode(node => {
|
|
77
|
-
node.x = node.x - (node.x - bb.left) * 2 - node.width;
|
|
78
|
-
node.left = true;
|
|
79
|
-
});
|
|
80
|
-
me.translate(bb.width, 0);
|
|
81
|
-
}
|
|
82
|
-
down2up() {
|
|
83
|
-
const me = this;
|
|
84
|
-
const bb = me.getBoundingBox();
|
|
85
|
-
me.eachNode(node => {
|
|
86
|
-
node.y = node.y - (node.y - bb.top) * 2 - node.height;
|
|
87
|
-
node.up = true;
|
|
88
|
-
});
|
|
89
|
-
me.translate(0, bb.height);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
function depthFirstRecursion(node, callback) {
|
|
93
|
-
node.children?.forEach(child => {
|
|
94
|
-
depthFirstRecursion(child, callback);
|
|
95
|
-
});
|
|
96
|
-
callback(node);
|
|
97
|
-
}
|
|
98
|
-
export class LayoutBlockNode {
|
|
99
|
-
constructor(left, right, top, bottom, width, height, rootX, rootY, rootWidth, rootHeight) {
|
|
100
|
-
this.left = left;
|
|
101
|
-
this.right = right;
|
|
102
|
-
this.top = top;
|
|
103
|
-
this.bottom = bottom;
|
|
104
|
-
this.width = width;
|
|
105
|
-
this.height = height;
|
|
106
|
-
this.rootX = rootX;
|
|
107
|
-
this.rootY = rootY;
|
|
108
|
-
this.rootWidth = rootWidth;
|
|
109
|
-
this.rootHeight = rootHeight;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
export function toHorizontal(black) {
|
|
113
|
-
return {
|
|
114
|
-
left: black.top,
|
|
115
|
-
right: black.bottom,
|
|
116
|
-
top: black.left,
|
|
117
|
-
bottom: black.right,
|
|
118
|
-
width: black.height,
|
|
119
|
-
height: black.width,
|
|
120
|
-
rootX: black.rootY,
|
|
121
|
-
rootY: black.rootX,
|
|
122
|
-
rootWidth: black.rootHeight,
|
|
123
|
-
rootHeight: black.rootWidth
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Connecting position, affecting horizontal layout
|
|
128
|
-
*/
|
|
129
|
-
export var ConnectingPosition;
|
|
130
|
-
(function (ConnectingPosition) {
|
|
131
|
-
ConnectingPosition["middle"] = "middle";
|
|
132
|
-
ConnectingPosition["bottom"] = "bottom";
|
|
133
|
-
})(ConnectingPosition || (ConnectingPosition = {}));
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXRzL3NyYy9pbnRlcmZhY2VzL2xheW91dC1ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0MsY0FBYyxFQUFjLE1BQU0sUUFBUSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRDs7R0FFRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBaUJuQixZQUFZLE1BQWtCLEVBQUUsT0FBc0IsRUFBRSxPQUFzQixFQUFFLE1BQW1CO1FBaEJuRyxNQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ04sTUFBQyxHQUFHLENBQUMsQ0FBQztRQUNOLFNBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBR1QsVUFBSyxHQUFHLENBQUMsQ0FBQztRQUNWLFdBQU0sR0FBRyxDQUFDLENBQUM7UUFDWCxVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsYUFBUSxHQUFpQixFQUFFLENBQUM7UUFFNUIsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUNiLE9BQUUsR0FBRyxLQUFLLENBQUM7UUFLUCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FB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QUFDLEtBQUs7UUFDbEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxVQUFVO1FBQzNCLFVBQVUsRUFBRSxLQUFLLENBQUMsU0FBUztLQUM5QixDQUFDO0FBQ04sQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksa0JBR1g7QUFIRCxXQUFZLGtCQUFrQjtJQUMxQix1Q0FBaUIsQ0FBQTtJQUNqQix1Q0FBaUIsQ0FBQTtBQUNyQixDQUFDLEVBSFcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQUc3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExheW91dENvbnRleHQsIExheW91dE9wdGlvbnMsIE1pbmRMYXlvdXRUeXBlLCBPcmlnaW5Ob2RlIH0gZnJvbSAnLi9taW5kJztcbmltcG9ydCB7IGZpbmRMYXlvdXRUeXBlIH0gZnJvbSAnLi4vdXRpbHMvbGF5b3V0JztcblxuLyoqXG4gKiBhYnN0cmFjdCBsYXlvdXQgbm9kZVxuICovXG5leHBvcnQgY2xhc3MgTGF5b3V0Tm9kZSB7XG4gICAgeCA9IDA7XG4gICAgeSA9IDA7XG4gICAgdkdhcCA9IDA7XG4gICAgaEdhcCA9IDA7XG4gICAgb3JpZ2luOiBPcmlnaW5Ob2RlO1xuICAgIGJsYWNrTm9kZT86IExheW91dEJsb2NrTm9kZTtcbiAgICB3aWR0aCA9IDA7XG4gICAgaGVpZ2h0ID0gMDtcbiAgICBkZXB0aCA9IDA7XG4gICAgY2hpbGRyZW46IExheW91dE5vZGVbXSA9IFtdO1xuICAgIHBhcmVudD86IExheW91dE5vZGU7XG4gICAgbGVmdCA9IGZhbHNlO1xuICAgIHVwID0gZmFsc2U7XG4gICAgbGF5b3V0OiBNaW5kTGF5b3V0VHlwZTtcbiAgICB2ZXJ0aWNhbENvbm5lY3RpbmdQb3NpdGlvbj86IENvbm5lY3RpbmdQb3NpdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKG9yaWdpbjogT3JpZ2luTm9kZSwgb3B0aW9uczogTGF5b3V0T3B0aW9ucywgY29udGV4dDogTGF5b3V0Q29udGV4dCwgcGFyZW50PzogTGF5b3V0Tm9kZSkge1xuICAgICAgICBjb25zdCBoR2FwID0gb3B0aW9ucy5nZXRIb3Jpem9udGFsR2FwKG9yaWdpbiwgcGFyZW50KTtcbiAgICAgICAgY29uc3QgdkdhcCA9IG9wdGlvbnMuZ2V0VmVydGljYWxHYXAob3JpZ2luLCBwYXJlbnQpO1xuICAgICAgICB0aGlzLm9yaWdpbiA9IG9yaWdpbjtcbiAgICAgICAgdGhpcy53aWR0aCA9IG9wdGlvbnMuZ2V0V2lkdGgob3JpZ2luKTtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBvcHRpb25zLmdldEhlaWdodChvcmlnaW4pO1xuICAgICAgICB0aGlzLnggPSB0aGlzLnkgPSAwO1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXlvdXQgPSBmaW5kTGF5b3V0VHlwZSh0aGlzKTtcbiAgICAgICAgdGhpcy5sYXlvdXQgPSBsYXlvdXQgJiYgbGF5b3V0ICE9PSBNaW5kTGF5b3V0VHlwZS5zdGFuZGFyZCA/IGxheW91dCA6IGNvbnRleHQucm9vdExheW91dFR5cGU7XG5cbiAgICAgICAgY29uc3QgdmVydGljYWxDb25uZWN0aW5nUG9zaXRpb24gPSBvcHRpb25zLmdldFZlcnRpY2FsQ29ubmVjdGluZ1Bvc2l0aW9uKG9yaWdpbiwgcGFyZW50KTtcbiAgICAgICAgaWYgKHZlcnRpY2FsQ29ubmVjdGluZ1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnZlcnRpY2FsQ29ubmVjdGluZ1Bvc2l0aW9uID0gdmVydGljYWxDb25uZWN0aW5nUG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRHYXAoaEdhcCwgdkdhcCk7XG4gICAgfVxuXG4gICAgaXNSb290KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXB0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBhZGRHYXAoaEdhcDogbnVtYmVyLCB2R2FwOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbWUgPSB0aGlzO1xuICAgICAgICBtZS5oR2FwICs9IGhHYXA7XG4gICAgICAgIG1lLnZHYXAgKz0gdkdhcDtcbiAgICAgICAgbWUud2lkdGggKz0gMiAqIGhHYXA7XG4gICAgICAgIG1lLmhlaWdodCArPSAyICogdkdhcDtcbiAgICB9XG5cbiAgICBlYWNoTm9kZShjYWxsYmFjazogKG5vZGU6IExheW91dE5vZGUpID0+IHZvaWQpIHtcbiAgICAgICAgZGVwdGhGaXJzdFJlY3Vyc2lvbih0aGlzLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgZ2V0Qm91bmRpbmdCb3goKTogQm91bmRpbmdCb3gge1xuICAgICAgICBjb25zdCBiYjogQm91bmRpbmdCb3ggPSB7XG4gICAgICAgICAgICBsZWZ0OiBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgdG9wOiBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgcmlnaHQ6IE51bWJlci5NSU5fVkFMVUUsXG4gICAgICAgICAgICBib3R0b206IE51bWJlci5NSU5fVkFMVUUsXG4gICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgIGhlaWdodDogMFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmVhY2hOb2RlKG5vZGUgPT4ge1xuICAgICAgICAgICAgYmIubGVmdCA9IE1hdGgubWluKGJiLmxlZnQsIG5vZGUueCk7XG4gICAgICAgICAgICBiYi50b3AgPSBNYXRoLm1pbihiYi50b3AsIG5vZGUueSk7XG4gICAgICAgICAgICBiYi5yaWdodCA9IE1hdGgubWF4KGJiLnJpZ2h0LCBub2RlLnggKyBub2RlLndpZHRoKTtcbiAgICAgICAgICAgIGJiLmJvdHRvbSA9IE1hdGgubWF4KGJiLmJvdHRvbSwgbm9kZS55ICsgbm9kZS5oZWlnaHQpO1xuICAgICAgICB9KTtcbiAgICAgICAgYmIud2lkdGggPSBiYi5yaWdodCAtIGJiLmxlZnQ7XG4gICAgICAgIGJiLmhlaWdodCA9IGJiLmJvdHRvbSAtIGJiLnRvcDtcbiAgICAgICAgcmV0dXJuIGJiO1xuICAgIH1cblxuICAgIHRyYW5zbGF0ZSh0eCA9IDAsIHR5ID0gMCkge1xuICAgICAgICB0aGlzLmVhY2hOb2RlKG5vZGUgPT4ge1xuICAgICAgICAgICAgbm9kZS54ICs9IHR4O1xuICAgICAgICAgICAgbm9kZS55ICs9IHR5O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByaWdodDJsZWZ0KCkge1xuICAgICAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGJiID0gbWUuZ2V0Qm91bmRpbmdCb3goKTtcbiAgICAgICAgbWUuZWFjaE5vZGUobm9kZSA9PiB7XG4gICAgICAgICAgICBub2RlLnggPSBub2RlLnggLSAobm9kZS54IC0gYmIubGVmdCkgKiAyIC0gbm9kZS53aWR0aDtcbiAgICAgICAgICAgIG5vZGUubGVmdCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBtZS50cmFuc2xhdGUoYmIud2lkdGgsIDApO1xuICAgIH1cblxuICAgIGRvd24ydXAoKSB7XG4gICAgICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICAgICAgY29uc3QgYmIgPSBtZS5nZXRCb3VuZGluZ0JveCgpO1xuICAgICAgICBtZS5lYWNoTm9kZShub2RlID0+IHtcbiAgICAgICAgICAgIG5vZGUueSA9IG5vZGUueSAtIChub2RlLnkgLSBiYi50b3ApICogMiAtIG5vZGUuaGVpZ2h0O1xuICAgICAgICAgICAgbm9kZS51cCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBtZS50cmFuc2xhdGUoMCwgYmIuaGVpZ2h0KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRlcHRoRmlyc3RSZWN1cnNpb24obm9kZTogTGF5b3V0Tm9kZSwgY2FsbGJhY2s6IChub2RlOiBMYXlvdXROb2RlKSA9PiB2b2lkKSB7XG4gICAgbm9kZS5jaGlsZHJlbj8uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgIGRlcHRoRmlyc3RSZWN1cnNpb24oY2hpbGQsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgICBjYWxsYmFjayhub2RlKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCb3VuZGluZ0JveCB7XG4gICAgbGVmdDogbnVtYmVyO1xuICAgIHRvcDogbnVtYmVyO1xuICAgIHJpZ2h0OiBudW1iZXI7XG4gICAgYm90dG9tOiBudW1iZXI7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIExheW91dEJsb2NrTm9kZSB7XG4gICAgbGVmdDogbnVtYmVyO1xuICAgIHJpZ2h0OiBudW1iZXI7XG4gICAgdG9wOiBudW1iZXI7XG4gICAgYm90dG9tOiBudW1iZXI7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICByb290WDogbnVtYmVyO1xuICAgIHJvb3RZOiBudW1iZXI7XG4gICAgcm9vdFdpZHRoOiBudW1iZXI7XG4gICAgcm9vdEhlaWdodDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGxlZnQ6IG51bWJlcixcbiAgICAgICAgcmlnaHQ6IG51bWJlcixcbiAgICAgICAgdG9wOiBudW1iZXIsXG4gICAgICAgIGJvdHRvbTogbnVtYmVyLFxuICAgICAgICB3aWR0aDogbnVtYmVyLFxuICAgICAgICBoZWlnaHQ6IG51bWJlcixcbiAgICAgICAgcm9vdFg6IG51bWJlcixcbiAgICAgICAgcm9vdFk6IG51bWJlcixcbiAgICAgICAgcm9vdFdpZHRoOiBudW1iZXIsXG4gICAgICAgIHJvb3RIZWlnaHQ6IG51bWJlclxuICAgICkge1xuICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgICAgIHRoaXMudG9wID0gdG9wO1xuICAgICAgICB0aGlzLmJvdHRvbSA9IGJvdHRvbTtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgdGhpcy5yb290WCA9IHJvb3RYO1xuICAgICAgICB0aGlzLnJvb3RZID0gcm9vdFk7XG4gICAgICAgIHRoaXMucm9vdFdpZHRoID0gcm9vdFdpZHRoO1xuICAgICAgICB0aGlzLnJvb3RIZWlnaHQgPSByb290SGVpZ2h0O1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvSG9yaXpvbnRhbChibGFjazogTGF5b3V0QmxvY2tOb2RlKTogTGF5b3V0QmxvY2tOb2RlIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiBibGFjay50b3AsXG4gICAgICAgIHJpZ2h0OiBibGFjay5ib3R0b20sXG4gICAgICAgIHRvcDogYmxhY2subGVmdCxcbiAgICAgICAgYm90dG9tOiBibGFjay5yaWdodCxcbiAgICAgICAgd2lkdGg6IGJsYWNrLmhlaWdodCxcbiAgICAgICAgaGVpZ2h0OiBibGFjay53aWR0aCxcbiAgICAgICAgcm9vdFg6IGJsYWNrLnJvb3RZLFxuICAgICAgICByb290WTogYmxhY2sucm9vdFgsXG4gICAgICAgIHJvb3RXaWR0aDogYmxhY2sucm9vdEhlaWdodCxcbiAgICAgICAgcm9vdEhlaWdodDogYmxhY2sucm9vdFdpZHRoXG4gICAgfTtcbn1cblxuLyoqXG4gKiBDb25uZWN0aW5nIHBvc2l0aW9uLCBhZmZlY3RpbmcgaG9yaXpvbnRhbCBsYXlvdXRcbiAqL1xuZXhwb3J0IGVudW0gQ29ubmVjdGluZ1Bvc2l0aW9uIHtcbiAgICBtaWRkbGUgPSAnbWlkZGxlJyxcbiAgICBib3R0b20gPSAnYm90dG9tJ1xufVxuIl19
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* abstract tree node for tree layout algorithm
|
|
3
|
-
*/
|
|
4
|
-
export class LayoutTreeNode {
|
|
5
|
-
constructor(width, height, y, children, origin) {
|
|
6
|
-
this.width = width;
|
|
7
|
-
this.height = height;
|
|
8
|
-
this.y = y;
|
|
9
|
-
this.children = children;
|
|
10
|
-
this.childrenCount = children.length;
|
|
11
|
-
this.x = 0;
|
|
12
|
-
this.preliminary = 0; // initial horizontal coordinates
|
|
13
|
-
this.modifier = 0;
|
|
14
|
-
this.shift = 0;
|
|
15
|
-
this.change = 0;
|
|
16
|
-
this.tl = null; // Left thread
|
|
17
|
-
this.tr = null; // Right thread
|
|
18
|
-
this.el = null; // extreme left nodes
|
|
19
|
-
this.er = null; // extreme right nodes
|
|
20
|
-
//sum of modifiers at the extreme nodes
|
|
21
|
-
this.msel = 0;
|
|
22
|
-
this.mser = 0;
|
|
23
|
-
this.origin = origin;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LXRyZWUtbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2xheW91dHMvc3JjL2ludGVyZmFjZXMvbGF5b3V0LXRyZWUtbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7R0FFRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBbUJ2QixZQUFZLEtBQWEsRUFBRSxNQUFjLEVBQUUsQ0FBUyxFQUFFLFFBQTBCLEVBQUUsTUFBa0I7UUFDaEcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFFckMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLGlDQUFpQztRQUN2RCxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsY0FBYztRQUM5QixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLGVBQWU7UUFDL0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxxQkFBcUI7UUFDckMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxzQkFBc0I7UUFDdEMsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN6QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYXlvdXROb2RlIH0gZnJvbSAnLi9sYXlvdXQtbm9kZSc7XG5cbi8qKlxuICogYWJzdHJhY3QgdHJlZSBub2RlIGZvciB0cmVlIGxheW91dCBhbGdvcml0aG1cbiAqL1xuZXhwb3J0IGNsYXNzIExheW91dFRyZWVOb2RlIHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICBjaGlsZHJlbjogTGF5b3V0VHJlZU5vZGVbXTtcbiAgICBjaGlsZHJlbkNvdW50OiBudW1iZXI7XG4gICAgeDogbnVtYmVyO1xuICAgIHByZWxpbWluYXJ5OiBudW1iZXI7XG4gICAgbW9kaWZpZXI6IG51bWJlcjsgLy8gRGVzY3JpYmVzIGhvdyBtdWNoIHRoZSBlbnRpcmUgc3VidHJlZSBzaG91bGQgYmUgbW92ZWQgaG9yaXpvbnRhbGx5XG4gICAgc2hpZnQ6IG51bWJlcjtcbiAgICBjaGFuZ2U6IG51bWJlcjtcbiAgICB0bDogYW55O1xuICAgIHRyOiBhbnk7XG4gICAgZWw6IExheW91dFRyZWVOb2RlIHwgbnVsbDtcbiAgICBlcjogTGF5b3V0VHJlZU5vZGUgfCBudWxsO1xuICAgIG1zZWw6IG51bWJlcjtcbiAgICBtc2VyOiBudW1iZXI7XG4gICAgb3JpZ2luOiBMYXlvdXROb2RlO1xuXG4gICAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHk6IG51bWJlciwgY2hpbGRyZW46IExheW91dFRyZWVOb2RlW10sIG9yaWdpbjogTGF5b3V0Tm9kZSkge1xuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgIHRoaXMuY2hpbGRyZW5Db3VudCA9IGNoaWxkcmVuLmxlbmd0aDtcblxuICAgICAgICB0aGlzLnggPSAwO1xuICAgICAgICB0aGlzLnByZWxpbWluYXJ5ID0gMDsgLy8gaW5pdGlhbCBob3Jpem9udGFsIGNvb3JkaW5hdGVzXG4gICAgICAgIHRoaXMubW9kaWZpZXIgPSAwO1xuICAgICAgICB0aGlzLnNoaWZ0ID0gMDtcbiAgICAgICAgdGhpcy5jaGFuZ2UgPSAwO1xuICAgICAgICB0aGlzLnRsID0gbnVsbDsgLy8gTGVmdCB0aHJlYWRcbiAgICAgICAgdGhpcy50ciA9IG51bGw7IC8vIFJpZ2h0IHRocmVhZFxuICAgICAgICB0aGlzLmVsID0gbnVsbDsgLy8gZXh0cmVtZSBsZWZ0IG5vZGVzXG4gICAgICAgIHRoaXMuZXIgPSBudWxsOyAvLyBleHRyZW1lIHJpZ2h0IG5vZGVzXG4gICAgICAgIC8vc3VtIG9mIG1vZGlmaWVycyBhdCB0aGUgZXh0cmVtZSBub2Rlc1xuICAgICAgICB0aGlzLm1zZWwgPSAwO1xuICAgICAgICB0aGlzLm1zZXIgPSAwO1xuICAgICAgICB0aGlzLm9yaWdpbiA9IG9yaWdpbjtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
export const AbstractNode = {
|
|
2
|
-
isAbstract(value) {
|
|
3
|
-
if (typeof value.start === 'number' && typeof value.end === 'number') {
|
|
4
|
-
return true;
|
|
5
|
-
}
|
|
6
|
-
else {
|
|
7
|
-
return false;
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
};
|
|
11
|
-
export var MindLayoutType;
|
|
12
|
-
(function (MindLayoutType) {
|
|
13
|
-
MindLayoutType["right"] = "right";
|
|
14
|
-
MindLayoutType["left"] = "left";
|
|
15
|
-
MindLayoutType["standard"] = "standard";
|
|
16
|
-
MindLayoutType["upward"] = "upward";
|
|
17
|
-
MindLayoutType["downward"] = "downward";
|
|
18
|
-
MindLayoutType["rightBottomIndented"] = "right-bottom-indented";
|
|
19
|
-
MindLayoutType["rightTopIndented"] = "right-top-indented";
|
|
20
|
-
MindLayoutType["leftTopIndented"] = "left-top-indented";
|
|
21
|
-
MindLayoutType["leftBottomIndented"] = "left-bottom-indented";
|
|
22
|
-
})(MindLayoutType || (MindLayoutType = {}));
|
|
23
|
-
export var LayoutType;
|
|
24
|
-
(function (LayoutType) {
|
|
25
|
-
LayoutType["logic"] = "logic";
|
|
26
|
-
LayoutType["indented"] = "indented";
|
|
27
|
-
LayoutType["fishBone"] = "fish-bone";
|
|
28
|
-
})(LayoutType || (LayoutType = {}));
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2xheW91dHMvc3JjL2ludGVyZmFjZXMvbWluZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkEsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHO0lBQ3hCLFVBQVUsQ0FBQyxLQUFVO1FBQ2pCLElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbkUsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0lBQ0wsQ0FBQztDQUNKLENBQUM7QUFFRixNQUFNLENBQU4sSUFBWSxjQVVYO0FBVkQsV0FBWSxjQUFjO0lBQ3RCLGlDQUFpQixDQUFBO0lBQ2pCLCtCQUFlLENBQUE7SUFDZix1Q0FBdUIsQ0FBQTtJQUN2QixtQ0FBbUIsQ0FBQTtJQUNuQix1Q0FBdUIsQ0FBQTtJQUN2QiwrREFBK0MsQ0FBQTtJQUMvQyx5REFBeUMsQ0FBQTtJQUN6Qyx1REFBdUMsQ0FBQTtJQUN2Qyw2REFBNkMsQ0FBQTtBQUNqRCxDQUFDLEVBVlcsY0FBYyxLQUFkLGNBQWMsUUFVekI7QUFFRCxNQUFNLENBQU4sSUFBWSxVQUlYO0FBSkQsV0FBWSxVQUFVO0lBQ2xCLDZCQUFpQixDQUFBO0lBQ2pCLG1DQUF1QixDQUFBO0lBQ3ZCLG9DQUF3QixDQUFBO0FBQzVCLENBQUMsRUFKVyxVQUFVLEtBQVYsVUFBVSxRQUlyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExheW91dE5vZGUsIENvbm5lY3RpbmdQb3NpdGlvbiB9IGZyb20gJy4vbGF5b3V0LW5vZGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExheW91dE9wdGlvbnMge1xuICAgIGdldEhlaWdodDogKG5vZGU6IE9yaWdpbk5vZGUpID0+IG51bWJlcjtcbiAgICBnZXRXaWR0aDogKG5vZGU6IE9yaWdpbk5vZGUpID0+IG51bWJlcjtcbiAgICBnZXRIb3Jpem9udGFsR2FwOiAobm9kZTogT3JpZ2luTm9kZSwgcGFyZW50PzogTGF5b3V0Tm9kZSkgPT4gbnVtYmVyO1xuICAgIGdldFZlcnRpY2FsR2FwOiAobm9kZTogT3JpZ2luTm9kZSwgcGFyZW50PzogTGF5b3V0Tm9kZSkgPT4gbnVtYmVyO1xuICAgIGdldFZlcnRpY2FsQ29ubmVjdGluZ1Bvc2l0aW9uOiAobm9kZTogT3JpZ2luTm9kZSwgcGFyZW50PzogTGF5b3V0Tm9kZSkgPT4gQ29ubmVjdGluZ1Bvc2l0aW9uO1xuICAgIGdldEV4dGVuZFdpZHRoPzogKG5vZGU6IE9yaWdpbk5vZGUpID0+IG51bWJlcjtcbiAgICBnZXRFeHRlbmRIZWlnaHQ6IChub2RlOiBPcmlnaW5Ob2RlKSA9PiBudW1iZXI7XG4gICAgZ2V0SW5kZW50ZWRDcm9zc0xldmVsR2FwOiAoKSA9PiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0Q29udGV4dCB7XG4gICAgdG9MZWZ0OiBib29sZWFuO1xuICAgIHRvVG9wOiBib29sZWFuO1xuICAgIHJvb3RMYXlvdXRUeXBlOiBNaW5kTGF5b3V0VHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmlnaW5Ob2RlIHtcbiAgICBjaGlsZHJlbjogT3JpZ2luTm9kZVtdO1xuICAgIGlzQ29sbGFwc2VkPzogYm9vbGVhbjtcbiAgICBsYXlvdXQ/OiBzdHJpbmc7XG4gICAgcmlnaHROb2RlQ291bnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBYnN0cmFjdE5vZGUgZXh0ZW5kcyBPcmlnaW5Ob2RlIHtcbiAgICBzdGFydDogbnVtYmVyO1xuICAgIGVuZDogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgQWJzdHJhY3ROb2RlID0ge1xuICAgIGlzQWJzdHJhY3QodmFsdWU6IGFueSk6IHZhbHVlIGlzIEFic3RyYWN0Tm9kZSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUuc3RhcnQgPT09ICdudW1iZXInICYmIHR5cGVvZiB2YWx1ZS5lbmQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBlbnVtIE1pbmRMYXlvdXRUeXBlIHtcbiAgICAncmlnaHQnID0gJ3JpZ2h0JyxcbiAgICAnbGVmdCcgPSAnbGVmdCcsXG4gICAgJ3N0YW5kYXJkJyA9ICdzdGFuZGFyZCcsXG4gICAgJ3Vwd2FyZCcgPSAndXB3YXJkJyxcbiAgICAnZG93bndhcmQnID0gJ2Rvd253YXJkJyxcbiAgICAncmlnaHRCb3R0b21JbmRlbnRlZCcgPSAncmlnaHQtYm90dG9tLWluZGVudGVkJyxcbiAgICAncmlnaHRUb3BJbmRlbnRlZCcgPSAncmlnaHQtdG9wLWluZGVudGVkJyxcbiAgICAnbGVmdFRvcEluZGVudGVkJyA9ICdsZWZ0LXRvcC1pbmRlbnRlZCcsXG4gICAgJ2xlZnRCb3R0b21JbmRlbnRlZCcgPSAnbGVmdC1ib3R0b20taW5kZW50ZWQnXG59XG5cbmV4cG9ydCBlbnVtIExheW91dFR5cGUge1xuICAgICdsb2dpYycgPSAnbG9naWMnLFxuICAgICdpbmRlbnRlZCcgPSAnaW5kZW50ZWQnLFxuICAgICdmaXNoQm9uZScgPSAnZmlzaC1ib25lJ1xufVxuIl19
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import { layout } from '../algorithms/non-overlapping-tree-layout';
|
|
2
|
-
import { LayoutBlockNode, LayoutNode } from '../interfaces/layout-node';
|
|
3
|
-
import { AbstractNode, LayoutType } from '../interfaces/mind';
|
|
4
|
-
import { extractLayoutType, isHorizontalLayout, isLeftLayout, isTopLayout } from '../utils/layout';
|
|
5
|
-
import * as indent from './indent';
|
|
6
|
-
import * as logic from './logic';
|
|
7
|
-
export class BaseLayout {
|
|
8
|
-
constructor() { }
|
|
9
|
-
layout(node, layoutType, options, context, isHorizontal = false, parent) {
|
|
10
|
-
// build layout node
|
|
11
|
-
const isolatedNodes = [];
|
|
12
|
-
const isolatedLayoutRoots = [];
|
|
13
|
-
// 1、build layout node
|
|
14
|
-
const root = this.buildLayoutNode(node, options, context, isolatedNodes, parent);
|
|
15
|
-
// 2、handle sub node layout
|
|
16
|
-
isolatedNodes
|
|
17
|
-
.filter(v => v.origin.children.length > 0)
|
|
18
|
-
.forEach((isolatedNode) => {
|
|
19
|
-
const _mindLayoutType = isolatedNode.layout;
|
|
20
|
-
const toTop = context.toTop || (isHorizontalLayout(context.rootLayoutType) && isTopLayout(_mindLayoutType));
|
|
21
|
-
const toLeft = context.toLeft || (!isHorizontalLayout(context.rootLayoutType) && isLeftLayout(_mindLayoutType));
|
|
22
|
-
const _isHorizontal = isHorizontalLayout(_mindLayoutType);
|
|
23
|
-
const isolatedRoot = this.layout(isolatedNode.origin, extractLayoutType(_mindLayoutType), options, { toTop, toLeft, rootLayoutType: context.rootLayoutType }, _isHorizontal, isolatedNode.parent);
|
|
24
|
-
if (!context.toTop && toTop && layoutType !== LayoutType.indented) {
|
|
25
|
-
isolatedRoot.down2up();
|
|
26
|
-
}
|
|
27
|
-
if (!context.toLeft && toLeft) {
|
|
28
|
-
isolatedRoot.right2left();
|
|
29
|
-
}
|
|
30
|
-
// 3、set sub node as black box
|
|
31
|
-
const boundingBox = isolatedRoot.getBoundingBox();
|
|
32
|
-
isolatedNode.width = boundingBox.width;
|
|
33
|
-
isolatedNode.height = boundingBox.height;
|
|
34
|
-
isolatedNode.blackNode = new LayoutBlockNode(boundingBox.left, boundingBox.right, boundingBox.top, boundingBox.bottom, boundingBox.width, boundingBox.height, isolatedRoot.x, isolatedRoot.y, isolatedRoot.width, isolatedRoot.height);
|
|
35
|
-
isolatedLayoutRoots.push(isolatedRoot);
|
|
36
|
-
});
|
|
37
|
-
// 4、layout handle
|
|
38
|
-
switch (layoutType) {
|
|
39
|
-
case LayoutType.indented:
|
|
40
|
-
indent.separateXAxle(root);
|
|
41
|
-
indent.separateYAxle(root, options);
|
|
42
|
-
break;
|
|
43
|
-
case LayoutType.fishBone:
|
|
44
|
-
break;
|
|
45
|
-
case LayoutType.logic:
|
|
46
|
-
default:
|
|
47
|
-
logic.separateYAxle(root, isHorizontal);
|
|
48
|
-
const layoutTree = logic.buildLayoutTree(root, isHorizontal);
|
|
49
|
-
layout(layoutTree);
|
|
50
|
-
logic.setLayoutTreeResult(layoutTree, root, isHorizontal);
|
|
51
|
-
break;
|
|
52
|
-
}
|
|
53
|
-
// 5、apply isolated nodes to root
|
|
54
|
-
const attachedMetaOfIsolatedNodes = []; // store the offset caused by isolated nodes to avoid multiple offset accumulation
|
|
55
|
-
isolatedNodes
|
|
56
|
-
.filter(v => v.origin.children.length > 0)
|
|
57
|
-
.forEach((isolatedNode, index) => {
|
|
58
|
-
if (isolatedNode.parent) {
|
|
59
|
-
const layoutRoot = isolatedLayoutRoots[index];
|
|
60
|
-
layoutRoot.parent = isolatedNode.parent;
|
|
61
|
-
let offsetX, offsetY;
|
|
62
|
-
const parentNodeIsHorizontalLayout = isHorizontalLayout(isolatedNode.parent.layout);
|
|
63
|
-
// the cross direction does not need to be transformed
|
|
64
|
-
if (parentNodeIsHorizontalLayout) {
|
|
65
|
-
offsetX = layoutRoot.x;
|
|
66
|
-
offsetY = 0;
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
offsetX = 0;
|
|
70
|
-
offsetY = layoutRoot.y;
|
|
71
|
-
}
|
|
72
|
-
layoutRoot.translate(isolatedNode.x - offsetX, isolatedNode.y - offsetY);
|
|
73
|
-
const _index = isolatedNode.parent.children.indexOf(isolatedNode);
|
|
74
|
-
const oldNode = isolatedNode.parent.children[_index];
|
|
75
|
-
isolatedNode.parent.children[_index] = Object.assign(oldNode, layoutRoot);
|
|
76
|
-
const meta = attachedMetaOfIsolatedNodes.find(m => m.parent === isolatedNode.parent && !AbstractNode.isAbstract(isolatedNode.origin));
|
|
77
|
-
if (meta) {
|
|
78
|
-
if (meta.offsetX < offsetX) {
|
|
79
|
-
meta.offsetX = offsetX;
|
|
80
|
-
}
|
|
81
|
-
if (meta.offsetX < offsetY) {
|
|
82
|
-
meta.offsetX = offsetY;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
else if (!AbstractNode.isAbstract(isolatedNode.origin)) {
|
|
86
|
-
attachedMetaOfIsolatedNodes.push({ parent: isolatedNode.parent, offsetX, offsetY });
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
// 6、correct the offset of sibling nodes caused by sub-layout
|
|
91
|
-
attachedMetaOfIsolatedNodes.forEach(meta => {
|
|
92
|
-
meta.parent.children.forEach(child => child.translate(meta.offsetX, meta.offsetY));
|
|
93
|
-
});
|
|
94
|
-
return root;
|
|
95
|
-
}
|
|
96
|
-
buildLayoutNode(origin, options, context, isolatedNodes, parent) {
|
|
97
|
-
const root = new LayoutNode(origin, options, context, parent);
|
|
98
|
-
if (!root.origin.isCollapsed) {
|
|
99
|
-
const nodes = [root];
|
|
100
|
-
let node;
|
|
101
|
-
while ((node = nodes.pop())) {
|
|
102
|
-
if (!node.origin.isCollapsed) {
|
|
103
|
-
const children = node.origin.children;
|
|
104
|
-
const length = children ? children.length : 0;
|
|
105
|
-
node.children = [];
|
|
106
|
-
if (children && length) {
|
|
107
|
-
for (let i = 0; i < length; i++) {
|
|
108
|
-
const child = new LayoutNode(children[i], options, context, node);
|
|
109
|
-
node.children.push(child);
|
|
110
|
-
child.depth = node.depth + 1;
|
|
111
|
-
const isolated = (node.layout !== child.layout &&
|
|
112
|
-
(extractLayoutType(node.layout) !== extractLayoutType(child.layout) ||
|
|
113
|
-
isHorizontalLayout(node.layout) !== isHorizontalLayout(child.layout))) ||
|
|
114
|
-
AbstractNode.isAbstract(child.origin);
|
|
115
|
-
if (isolated && !child.origin.isCollapsed) {
|
|
116
|
-
isolatedNodes.push(child);
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
nodes.push(child);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
return root;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1sYXlvdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXRzL3NyYy9sYXlvdXRzL2Jhc2UtbGF5b3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQWdDLFVBQVUsRUFBOEIsTUFBTSxvQkFBb0IsQ0FBQztBQUN4SCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25HLE9BQU8sS0FBSyxNQUFNLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sS0FBSyxLQUFLLE1BQU0sU0FBUyxDQUFDO0FBRWpDLE1BQU0sT0FBTyxVQUFVO0lBQ25CLGdCQUFlLENBQUM7SUFFaEIsTUFBTSxDQUNGLElBQWdCLEVBQ2hCLFVBQWtCLEVBQ2xCLE9BQXNCLEVBQ3RCLE9BQXNCLEVBQ3RCLFlBQVksR0FBRyxLQUFLLEVBQ3BCLE1BQW1CO1FBRW5CLG9CQUFvQjtRQUNwQixNQUFNLGFBQWEsR0FBaUIsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sbUJBQW1CLEdBQWlCLEVBQUUsQ0FBQztRQUU3QyxzQkFBc0I7UUFDdEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFakYsMkJBQTJCO1FBQzNCLGFBQWE7YUFDUixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2FBQ3pDLE9BQU8sQ0FBQyxDQUFDLFlBQXdCLEVB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TSxDQUFDO29DQUMvRCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssa0JBQWtCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0NBQzlFLFlBQVksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUMxQyxJQUFJLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7Z0NBQ3hDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQzlCLENBQUM7aUNBQU0sQ0FBQztnQ0FDSixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUN0QixDQUFDO3dCQUNMLENBQUM7b0JBQ0wsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsYXlvdXQgfSBmcm9tICcuLi9hbGdvcml0aG1zL25vbi1vdmVybGFwcGluZy10cmVlLWxheW91dCc7XG5pbXBvcnQgeyBMYXlvdXRCbG9ja05vZGUsIExheW91dE5vZGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2xheW91dC1ub2RlJztcbmltcG9ydCB7IEFic3RyYWN0Tm9kZSwgTGF5b3V0Q29udGV4dCwgTGF5b3V0T3B0aW9ucywgTGF5b3V0VHlwZSwgTWluZExheW91dFR5cGUsIE9yaWdpbk5vZGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL21pbmQnO1xuaW1wb3J0IHsgZXh0cmFjdExheW91dFR5cGUsIGlzSG9yaXpvbnRhbExheW91dCwgaXNMZWZ0TGF5b3V0LCBpc1RvcExheW91dCB9IGZyb20gJy4uL3V0aWxzL2xheW91dCc7XG5pbXBvcnQgKiBhcyBpbmRlbnQgZnJvbSAnLi9pbmRlbnQnO1xuaW1wb3J0ICogYXMgbG9naWMgZnJvbSAnLi9sb2dpYyc7XG5cbmV4cG9ydCBjbGFzcyBCYXNlTGF5b3V0IHtcbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICBsYXlvdXQoXG4gICAgICAgIG5vZGU6IE9yaWdpbk5vZGUsXG4gICAgICAgIGxheW91dFR5cGU6IHN0cmluZyxcbiAgICAgICAgb3B0aW9uczogTGF5b3V0T3B0aW9ucyxcbiAgICAgICAgY29udGV4dDogTGF5b3V0Q29udGV4dCxcbiAgICAgICAgaXNIb3Jpem9udGFsID0gZmFsc2UsXG4gICAgICAgIHBhcmVudD86IExheW91dE5vZGVcbiAgICApIHtcbiAgICAgICAgLy8gYnVpbGQgbGF5b3V0IG5vZGVcbiAgICAgICAgY29uc3QgaXNvbGF0ZWROb2RlczogTGF5b3V0Tm9kZVtdID0gW107XG4gICAgICAgIGNvbnN0IGlzb2xhdGVkTGF5b3V0Um9vdHM6IExheW91dE5vZGVbXSA9IFtdO1xuXG4gICAgICAgIC8vIDHjgIFidWlsZCBsYXlvdXQgbm9kZVxuICAgICAgICBjb25zdCByb290ID0gdGhpcy5idWlsZExheW91dE5vZGUobm9kZSwgb3B0aW9ucywgY29udGV4dCwgaXNvbGF0ZWROb2RlcywgcGFyZW50KTtcblxuICAgICAgICAvLyAy44CBaGFuZGxlIHN1YiBub2RlIGxheW91dFxuICAgICAgICBpc29sYXRlZE5vZGVzXG4gICAgICAgICAgICAuZmlsdGVyKHYgPT4gdi5vcmlnaW4uY2hpbGRyZW4ubGVuZ3RoID4gMClcbiAgICAgICAgICAgIC5mb3JFYWNoKChpc29sYXRlZE5vZGU6IExheW91dE5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfbWluZExheW91dFR5cGUgPSBpc29sYXRlZE5vZGUubGF5b3V0IGFzIE1pbmRMYXlvdXRUeXBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvVG9wID0gY29udGV4dC50b1RvcCB8fCAoaXNIb3Jpem9udGFsTGF5b3V0KGNvbnRleHQucm9vdExheW91dFR5cGUpICYmIGlzVG9wTGF5b3V0KF9taW5kTGF5b3V0VHlwZSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvTGVmdCA9IGNvbnRleHQudG9MZWZ0IHx8ICghaXNIb3Jpem9udGFsTGF5b3V0KGNvbnRleHQucm9vdExheW91dFR5cGUpICYmIGlzTGVmdExheW91dChfbWluZExheW91dFR5cGUpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsTGF5b3V0KF9taW5kTGF5b3V0VHlwZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNvbGF0ZWRSb290ID0gdGhpcy5sYXlvdXQoXG4gICAgICAgICAgICAgICAgICAgIGlzb2xhdGVkTm9kZS5vcmlnaW4sXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhY3RMYXlvdXRUeXBlKF9taW5kTGF5b3V0VHlwZSksXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHsgdG9Ub3AsIHRvTGVmdCwgcm9vdExheW91dFR5cGU6IGNvbnRleHQucm9vdExheW91dFR5cGUgfSxcbiAgICAgICAgICAgICAgICAgICAgX2lzSG9yaXpvbnRhbCxcbiAgICAgICAgICAgICAgICAgICAgaXNvbGF0ZWROb2RlLnBhcmVudFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LnRvVG9wICYmIHRvVG9wICYmIGxheW91dFR5cGUgIT09IExheW91dFR5cGUuaW5kZW50ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNvbGF0ZWRSb290LmRvd24ydXAoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LnRvTGVmdCAmJiB0b0xlZnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNvbGF0ZWRSb290LnJpZ2h0MmxlZnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gM+OAgXNldCBzdWIgbm9kZSBhcyBibGFjayBib3hcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZGluZ0JveCA9IGlzb2xhdGVkUm9vdC5nZXRCb3VuZGluZ0JveCgpO1xuICAgICAgICAgICAgICAgIGlzb2xhdGVkTm9kZS53aWR0aCA9IGJvdW5kaW5nQm94LndpZHRoO1xuICAgICAgICAgICAgICAgIGlzb2xhdGVkTm9kZS5oZWlnaHQgPSBib3VuZGluZ0JveC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgaXNvbGF0ZWROb2RlLmJsYWNrTm9kZSA9IG5ldyBMYXlvdXRCbG9ja05vZGUoXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94LmxlZnQsXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94LnJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICBib3VuZGluZ0JveC50b3AsXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94LmJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgYm91bmRpbmdCb3gud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgaXNvbGF0ZWRSb290LngsXG4gICAgICAgICAgICAgICAgICAgIGlzb2xhdGVkUm9vdC55LFxuICAgICAgICAgICAgICAgICAgICBpc29sYXRlZFJvb3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGlzb2xhdGVkUm9vdC5oZWlnaHRcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNvbGF0ZWRMYXlvdXRSb290cy5wdXNoKGlzb2xhdGVkUm9vdCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyA044CBbGF5b3V0IGhhbmRsZVxuICAgICAgICBzd2l0Y2ggKGxheW91dFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgTGF5b3V0VHlwZS5pbmRlbnRlZDpcbiAgICAgICAgICAgICAgICBpbmRlbnQuc2VwYXJhdGVYQXhsZShyb290KTtcbiAgICAgICAgICAgICAgICBpbmRlbnQuc2VwYXJhdGVZQXhsZShyb290LCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTGF5b3V0VHlwZS5maXNoQm9uZTpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTGF5b3V0VHlwZS5sb2dpYzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgbG9naWMuc2VwYXJhdGVZQXhsZShyb290LCBpc0hvcml6b250YWwpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxheW91dFRyZWUgPSBsb2dpYy5idWlsZExheW91dFRyZWUocm9vdCwgaXNIb3Jpem9udGFsKTtcbiAgICAgICAgICAgICAgICBsYXlvdXQobGF5b3V0VHJlZSk7XG4gICAgICAgICAgICAgICAgbG9naWMuc2V0TGF5b3V0VHJlZVJlc3VsdChsYXlvdXRUcmVlLCByb290LCBpc0hvcml6b250YWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNeOAgWFwcGx5IGlzb2xhdGVkIG5vZGVzIHRvIHJvb3RcbiAgICAgICAgY29uc3QgYXR0YWNoZWRNZXRhT2ZJc29sYXRlZE5vZGVzOiB7IHBhcmVudDogTGF5b3V0Tm9kZTsgb2Zmc2V0WDogbnVtYmVyOyBvZmZzZXRZOiBudW1iZXIgfVtdID0gW107IC8vIHN0b3JlIHRoZSBvZmZzZXQgY2F1c2VkIGJ5IGlzb2xhdGVkIG5vZGVzIHRvIGF2b2lkIG11bHRpcGxlIG9mZnNldCBhY2N1bXVsYXRpb25cbiAgICAgICAgaXNvbGF0ZWROb2Rlc1xuICAgICAgICAgICAgLmZpbHRlcih2ID0+IHYub3JpZ2luLmNoaWxkcmVuLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAuZm9yRWFjaCgoaXNvbGF0ZWROb2RlOiBMYXlvdXROb2RlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc29sYXRlZE5vZGUucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxheW91dFJvb3QgPSBpc29sYXRlZExheW91dFJvb3RzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0Um9vdC5wYXJlbnQgPSBpc29sYXRlZE5vZGUucGFyZW50O1xuICAgICAgICAgICAgICAgICAgICBsZXQgb2Zmc2V0WCwgb2Zmc2V0WTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Tm9kZUlzSG9yaXpvbnRhbExheW91dCA9IGlzSG9yaXpvbnRhbExheW91dChpc29sYXRlZE5vZGUucGFyZW50LmxheW91dCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjcm9zcyBkaXJlY3Rpb24gZG9lcyBub3QgbmVlZCB0byBiZSB0cmFuc2Zvcm1lZFxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50Tm9kZUlzSG9yaXpvbnRhbExheW91dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WCA9IGxheW91dFJvb3QueDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFkgPSAwO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRZID0gbGF5b3V0Um9vdC55O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxheW91dFJvb3QudHJhbnNsYXRlKGlzb2xhdGVkTm9kZS54IC0gb2Zmc2V0WCwgaXNvbGF0ZWROb2RlLnkgLSBvZmZzZXRZKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2luZGV4ID0gaXNvbGF0ZWROb2RlLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKGlzb2xhdGVkTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9sZE5vZGUgPSBpc29sYXRlZE5vZGUucGFyZW50LmNoaWxkcmVuW19pbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGlzb2xhdGVkTm9kZS5wYXJlbnQuY2hpbGRyZW5bX2luZGV4XSA9IE9iamVjdC5hc3NpZ24ob2xkTm9kZSwgbGF5b3V0Um9vdCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGEgPSBhdHRhY2hlZE1ldGFPZklzb2xhdGVkTm9kZXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgIG0gPT4gbS5wYXJlbnQgPT09IGlzb2xhdGVkTm9kZS5wYXJlbnQgJiYgIUFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KGlzb2xhdGVkTm9kZS5vcmlnaW4pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWV0YS5vZmZzZXRYIDwgb2Zmc2V0WCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGEub2Zmc2V0WCA9IG9mZnNldFg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWV0YS5vZmZzZXRYIDwgb2Zmc2V0WSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGEub2Zmc2V0WCA9IG9mZnNldFk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIUFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KGlzb2xhdGVkTm9kZS5vcmlnaW4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2hlZE1ldGFPZklzb2xhdGVkTm9kZXMucHVzaCh7IHBhcmVudDogaXNvbGF0ZWROb2RlLnBhcmVudCwgb2Zmc2V0WCwgb2Zmc2V0WSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAvLyA244CBY29ycmVjdCB0aGUgb2Zmc2V0IG9mIHNpYmxpbmcgbm9kZXMgY2F1c2VkIGJ5IHN1Yi1sYXlvdXRcbiAgICAgICAgYXR0YWNoZWRNZXRhT2ZJc29sYXRlZE5vZGVzLmZvckVhY2gobWV0YSA9PiB7XG4gICAgICAgICAgICBtZXRhLnBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLnRyYW5zbGF0ZShtZXRhLm9mZnNldFgsIG1ldGEub2Zmc2V0WSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcm9vdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkTGF5b3V0Tm9kZShcbiAgICAgICAgb3JpZ2luOiBPcmlnaW5Ob2RlLFxuICAgICAgICBvcHRpb25zOiBMYXlvdXRPcHRpb25zLFxuICAgICAgICBjb250ZXh0OiBMYXlvdXRDb250ZXh0LFxuICAgICAgICBpc29sYXRlZE5vZGVzOiBMYXlvdXROb2RlW10sXG4gICAgICAgIHBhcmVudD86IExheW91dE5vZGVcbiAgICApIHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBMYXlvdXROb2RlKG9yaWdpbiwgb3B0aW9ucywgY29udGV4dCwgcGFyZW50KTtcbiAgICAgICAgaWYgKCFyb290Lm9yaWdpbi5pc0NvbGxhcHNlZCkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZXM6IExheW91dE5vZGVbXSA9IFtyb290XTtcbiAgICAgICAgICAgIGxldCBub2RlOiBMYXlvdXROb2RlIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgd2hpbGUgKChub2RlID0gbm9kZXMucG9wKCkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFub2RlLm9yaWdpbi5pc0NvbGxhcHNlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUub3JpZ2luLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBjaGlsZHJlbiA/IGNoaWxkcmVuLmxlbmd0aCA6IDA7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuICYmIGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gbmV3IExheW91dE5vZGUoY2hpbGRyZW5baV0sIG9wdGlvbnMsIGNvbnRleHQsIG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuZGVwdGggPSBub2RlLmRlcHRoICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc29sYXRlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub2RlLmxheW91dCAhPT0gY2hpbGQubGF5b3V0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXh0cmFjdExheW91dFR5cGUobm9kZS5sYXlvdXQpICE9PSBleHRyYWN0TGF5b3V0VHlwZShjaGlsZC5sYXlvdXQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNIb3Jpem9udGFsTGF5b3V0KG5vZGUubGF5b3V0KSAhPT0gaXNIb3Jpem9udGFsTGF5b3V0KGNoaWxkLmxheW91dCkpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChjaGlsZC5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc29sYXRlZCAmJiAhY2hpbGQub3JpZ2luLmlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzb2xhdGVkTm9kZXMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb290O1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { AbstractNode, LayoutType } from '../interfaces/mind';
|
|
2
|
-
import { isHorizontalLayout, isIndentedLayout, isLeftLayout, isStandardLayout, isTopLayout } from '../utils/layout';
|
|
3
|
-
import { BaseLayout } from './base-layout';
|
|
4
|
-
export class GlobalLayout {
|
|
5
|
-
static layout(root, options, mindLayoutType) {
|
|
6
|
-
const baseLayout = new BaseLayout();
|
|
7
|
-
if (isStandardLayout(mindLayoutType)) {
|
|
8
|
-
const primaryNodeCount = root.children.length;
|
|
9
|
-
const rightBranchNodes = [];
|
|
10
|
-
const leftBranchNodes = [];
|
|
11
|
-
const fakeRootNode = { ...root };
|
|
12
|
-
for (let i = 0; i < primaryNodeCount; i++) {
|
|
13
|
-
const child = root.children[i];
|
|
14
|
-
if (AbstractNode.isAbstract(child) && child.end < root.rightNodeCount) {
|
|
15
|
-
rightBranchNodes.push(child);
|
|
16
|
-
continue;
|
|
17
|
-
}
|
|
18
|
-
if (AbstractNode.isAbstract(child) && child.start >= root.rightNodeCount) {
|
|
19
|
-
leftBranchNodes.push(child);
|
|
20
|
-
continue;
|
|
21
|
-
}
|
|
22
|
-
if (i < root.rightNodeCount) {
|
|
23
|
-
rightBranchNodes.push(child);
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
leftBranchNodes.push(child);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
// right
|
|
30
|
-
fakeRootNode.children = rightBranchNodes;
|
|
31
|
-
const rightRoot = baseLayout.layout(fakeRootNode, LayoutType.logic, options, { toLeft: false, toTop: false, rootLayoutType: mindLayoutType }, true);
|
|
32
|
-
fakeRootNode.children = leftBranchNodes;
|
|
33
|
-
const leftRoot = baseLayout.layout(fakeRootNode, LayoutType.logic, options, { toLeft: true, toTop: false, rootLayoutType: mindLayoutType }, true);
|
|
34
|
-
leftRoot.right2left();
|
|
35
|
-
rightRoot.translate(leftRoot.x - rightRoot.x, leftRoot.y - rightRoot.y);
|
|
36
|
-
const rightAbstractArray = rightRoot.children.filter(child => AbstractNode.isAbstract(child.origin));
|
|
37
|
-
rightRoot.children = rightRoot.children.filter(child => !AbstractNode.isAbstract(child.origin));
|
|
38
|
-
leftRoot.children.forEach(leftPrimaryNode => {
|
|
39
|
-
rightRoot.children.push(leftPrimaryNode);
|
|
40
|
-
leftPrimaryNode.parent = rightRoot;
|
|
41
|
-
});
|
|
42
|
-
rightRoot.children = rightRoot.children.concat(rightAbstractArray);
|
|
43
|
-
rightRoot.x = leftRoot.x;
|
|
44
|
-
rightRoot.origin = root;
|
|
45
|
-
return rightRoot;
|
|
46
|
-
}
|
|
47
|
-
const isIndented = isIndentedLayout(mindLayoutType);
|
|
48
|
-
const layoutType = isIndented ? LayoutType.indented : LayoutType.logic;
|
|
49
|
-
const isHorizontal = isIndented ? true : isHorizontalLayout(mindLayoutType);
|
|
50
|
-
const toTop = isTopLayout(mindLayoutType);
|
|
51
|
-
const toLeft = isLeftLayout(mindLayoutType);
|
|
52
|
-
const resultRoot = baseLayout.layout(root, layoutType, options, { toTop, toLeft, rootLayoutType: mindLayoutType }, isHorizontal);
|
|
53
|
-
if (toTop) {
|
|
54
|
-
resultRoot.down2up();
|
|
55
|
-
}
|
|
56
|
-
if (toLeft) {
|
|
57
|
-
resultRoot.right2left();
|
|
58
|
-
}
|
|
59
|
-
return resultRoot;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWxheW91dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2xheW91dHMvc3JjL2xheW91dHMvZ2xvYmFsLWxheW91dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFpQixVQUFVLEVBQThCLE1BQU0sb0JBQW9CLENBQUM7QUFDekcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE1BQU0sT0FBTyxZQUFZO0lBQ3JCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBZ0IsRUFBRSxPQUFzQixFQUFFLGNBQThCO1FBQ2xGLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFFcEMsSUFBSSxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDOUMsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDNUIsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO1lBQzNCLE1BQU0sWUFBWSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUNqQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFL0IsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUNwRSxnQkFBZ0IsQ0FB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LGNBQWMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1QyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDakksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNSLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNULFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3ROb2RlLCBMYXlvdXRPcHRpb25zLCBMYXlvdXRUeXBlLCBNaW5kTGF5b3V0VHlwZSwgT3JpZ2luTm9kZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvbWluZCc7XG5pbXBvcnQgeyBpc0hvcml6b250YWxMYXlvdXQsIGlzSW5kZW50ZWRMYXlvdXQsIGlzTGVmdExheW91dCwgaXNTdGFuZGFyZExheW91dCwgaXNUb3BMYXlvdXQgfSBmcm9tICcuLi91dGlscy9sYXlvdXQnO1xuaW1wb3J0IHsgQmFzZUxheW91dCB9IGZyb20gJy4vYmFzZS1sYXlvdXQnO1xuXG5leHBvcnQgY2xhc3MgR2xvYmFsTGF5b3V0IHtcbiAgICBzdGF0aWMgbGF5b3V0KHJvb3Q6IE9yaWdpbk5vZGUsIG9wdGlvbnM6IExheW91dE9wdGlvbnMsIG1pbmRMYXlvdXRUeXBlOiBNaW5kTGF5b3V0VHlwZSkge1xuICAgICAgICBjb25zdCBiYXNlTGF5b3V0ID0gbmV3IEJhc2VMYXlvdXQoKTtcblxuICAgICAgICBpZiAoaXNTdGFuZGFyZExheW91dChtaW5kTGF5b3V0VHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHByaW1hcnlOb2RlQ291bnQgPSByb290LmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0QnJhbmNoTm9kZXMgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRCcmFuY2hOb2RlcyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgZmFrZVJvb3ROb2RlID0geyAuLi5yb290IH07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByaW1hcnlOb2RlQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcm9vdC5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgICAgIGlmIChBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChjaGlsZCkgJiYgY2hpbGQuZW5kIDwgcm9vdC5yaWdodE5vZGVDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICByaWdodEJyYW5jaE5vZGVzLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKEFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KGNoaWxkKSAmJiBjaGlsZC5zdGFydCA+PSByb290LnJpZ2h0Tm9kZUNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGxlZnRCcmFuY2hOb2Rlcy5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGkgPCByb290LnJpZ2h0Tm9kZUNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0QnJhbmNoTm9kZXMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdEJyYW5jaE5vZGVzLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHJpZ2h0XG4gICAgICAgICAgICBmYWtlUm9vdE5vZGUuY2hpbGRyZW4gPSByaWdodEJyYW5jaE5vZGVzO1xuICAgICAgICAgICAgY29uc3QgcmlnaHRSb290ID0gYmFzZUxheW91dC5sYXlvdXQoXG4gICAgICAgICAgICAgICAgZmFrZVJvb3ROb2RlLFxuICAgICAgICAgICAgICAgIExheW91dFR5cGUubG9naWMsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgICB7IHRvTGVmdDogZmFsc2UsIHRvVG9wOiBmYWxzZSwgcm9vdExheW91dFR5cGU6IG1pbmRMYXlvdXRUeXBlIH0sXG4gICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZha2VSb290Tm9kZS5jaGlsZHJlbiA9IGxlZnRCcmFuY2hOb2RlcztcbiAgICAgICAgICAgIGNvbnN0IGxlZnRSb290ID0gYmFzZUxheW91dC5sYXlvdXQoXG4gICAgICAgICAgICAgICAgZmFrZVJvb3ROb2RlLFxuICAgICAgICAgICAgICAgIExheW91dFR5cGUubG9naWMsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgICB7IHRvTGVmdDogdHJ1ZSwgdG9Ub3A6IGZhbHNlLCByb290TGF5b3V0VHlwZTogbWluZExheW91dFR5cGUgfSxcbiAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGVmdFJvb3QucmlnaHQybGVmdCgpO1xuICAgICAgICAgICAgcmlnaHRSb290LnRyYW5zbGF0ZShsZWZ0Um9vdC54IC0gcmlnaHRSb290LngsIGxlZnRSb290LnkgLSByaWdodFJvb3QueSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0QWJzdHJhY3RBcnJheSA9IHJpZ2h0Um9vdC5jaGlsZHJlbi5maWx0ZXIoY2hpbGQgPT4gQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QoY2hpbGQub3JpZ2luKSk7XG4gICAgICAgICAgICByaWdodFJvb3QuY2hpbGRyZW4gPSByaWdodFJvb3QuY2hpbGRyZW4uZmlsdGVyKGNoaWxkID0+ICFBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChjaGlsZC5vcmlnaW4pKTtcblxuICAgICAgICAgICAgbGVmdFJvb3QuY2hpbGRyZW4uZm9yRWFjaChsZWZ0UHJpbWFyeU5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIHJpZ2h0Um9vdC5jaGlsZHJlbi5wdXNoKGxlZnRQcmltYXJ5Tm9kZSk7XG4gICAgICAgICAgICAgICAgbGVmdFByaW1hcnlOb2RlLnBhcmVudCA9IHJpZ2h0Um9vdDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmlnaHRSb290LmNoaWxkcmVuID0gcmlnaHRSb290LmNoaWxkcmVuLmNvbmNhdChyaWdodEFic3RyYWN0QXJyYXkpO1xuXG4gICAgICAgICAgICByaWdodFJvb3QueCA9IGxlZnRSb290Lng7XG4gICAgICAgICAgICByaWdodFJvb3Qub3JpZ2luID0gcm9vdDtcbiAgICAgICAgICAgIHJldHVybiByaWdodFJvb3Q7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0luZGVudGVkID0gaXNJbmRlbnRlZExheW91dChtaW5kTGF5b3V0VHlwZSk7XG4gICAgICAgIGNvbnN0IGxheW91dFR5cGUgPSBpc0luZGVudGVkID8gTGF5b3V0VHlwZS5pbmRlbnRlZCA6IExheW91dFR5cGUubG9naWM7XG4gICAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGlzSW5kZW50ZWQgPyB0cnVlIDogaXNIb3Jpem9udGFsTGF5b3V0KG1pbmRMYXlvdXRUeXBlKTtcbiAgICAgICAgY29uc3QgdG9Ub3AgPSBpc1RvcExheW91dChtaW5kTGF5b3V0VHlwZSk7XG4gICAgICAgIGNvbnN0IHRvTGVmdCA9IGlzTGVmdExheW91dChtaW5kTGF5b3V0VHlwZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdFJvb3QgPSBiYXNlTGF5b3V0LmxheW91dChyb290LCBsYXlvdXRUeXBlLCBvcHRpb25zLCB7IHRvVG9wLCB0b0xlZnQsIHJvb3RMYXlvdXRUeXBlOiBtaW5kTGF5b3V0VHlwZSB9LCBpc0hvcml6b250YWwpO1xuICAgICAgICBpZiAodG9Ub3ApIHtcbiAgICAgICAgICAgIHJlc3VsdFJvb3QuZG93bjJ1cCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b0xlZnQpIHtcbiAgICAgICAgICAgIHJlc3VsdFJvb3QucmlnaHQybGVmdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRSb290O1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { AbstractNode } from '../interfaces/mind';
|
|
2
|
-
import { findAbstractByEndNode, getNonAbstractChildren } from '../utils/abstract';
|
|
3
|
-
import { isHorizontalLogicLayout } from '../utils/layout';
|
|
4
|
-
export function separateXAxle(node, d = 0) {
|
|
5
|
-
node.x = d;
|
|
6
|
-
node.children.forEach(child => {
|
|
7
|
-
if (AbstractNode.isAbstract(child.origin)) {
|
|
8
|
-
let width = 0;
|
|
9
|
-
for (let i = child.origin.start; i <= child.origin.end; i++) {
|
|
10
|
-
const box = node.children[i].getBoundingBox();
|
|
11
|
-
width = Math.max(box.width, width);
|
|
12
|
-
}
|
|
13
|
-
separateXAxle(child, node.x + node.width / 2 + width);
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
separateXAxle(child, node.x + node.width / 2);
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
export function separateYAxle(root, options) {
|
|
21
|
-
let previousBottom = root.y + root.height;
|
|
22
|
-
let previousNode = null;
|
|
23
|
-
updateY(root);
|
|
24
|
-
function updateY(node) {
|
|
25
|
-
node.children.forEach((child, index) => {
|
|
26
|
-
const abstract = node.children.find(child => {
|
|
27
|
-
return AbstractNode.isAbstract(child.origin) && child.origin.end === index - 1;
|
|
28
|
-
});
|
|
29
|
-
if (abstract) {
|
|
30
|
-
const attach = previousNode?.origin.isCollapsed ? options.getExtendHeight(child.origin) : 0;
|
|
31
|
-
previousBottom = abstractHandle(node, abstract) + attach;
|
|
32
|
-
}
|
|
33
|
-
if (AbstractNode.isAbstract(child.origin)) {
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
let y = previousBottom + child.vGap;
|
|
37
|
-
if (previousNode && !isHorizontalLogicLayout(previousNode.layout) && previousNode.origin.children.length > 0) {
|
|
38
|
-
if (previousNode.origin.isCollapsed) {
|
|
39
|
-
y = y + options.getExtendHeight(child.origin);
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
y = y + options.getIndentedCrossLevelGap();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
child.y = y;
|
|
46
|
-
previousNode = child;
|
|
47
|
-
previousBottom = child.y + child.height;
|
|
48
|
-
updateY(child);
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
function abstractHandle(node, abstract) {
|
|
53
|
-
const abstractNode = abstract.origin;
|
|
54
|
-
const abstractIndex = node.children.indexOf(abstract);
|
|
55
|
-
const startNode = node.children[abstractNode.start];
|
|
56
|
-
const endNode = node.children[abstractNode.end];
|
|
57
|
-
// abstract and start node alignment
|
|
58
|
-
node.children[abstractIndex].y = startNode.y;
|
|
59
|
-
const topContour = startNode.y;
|
|
60
|
-
let bottomContour = endNode.y + endNode.height;
|
|
61
|
-
let bottomContourNode = endNode;
|
|
62
|
-
let bottomContourParenNode = node;
|
|
63
|
-
while (bottomContourNode?.children.length) {
|
|
64
|
-
bottomContourParenNode = bottomContourNode;
|
|
65
|
-
const children = getNonAbstractChildren(bottomContourParenNode);
|
|
66
|
-
bottomContourNode = children[children.length - 1];
|
|
67
|
-
const abstract = findAbstractByEndNode(bottomContourParenNode, bottomContourNode);
|
|
68
|
-
bottomContour = abstract
|
|
69
|
-
? Math.max(abstract.y + abstract.height, bottomContourNode.y + bottomContourNode.height)
|
|
70
|
-
: bottomContourNode.y + bottomContourNode.height;
|
|
71
|
-
}
|
|
72
|
-
const abstractIncludedHeight = bottomContour - topContour;
|
|
73
|
-
const abstractHeight = abstract.blackNode ? abstract.blackNode.height : abstract.height;
|
|
74
|
-
const abstractBranchHeight = abstract.blackNode ? abstract.blackNode.rootY * 2 + abstract.blackNode.rootHeight : abstract.height;
|
|
75
|
-
if (abstractBranchHeight > abstractIncludedHeight) {
|
|
76
|
-
const distance = (abstractBranchHeight - abstractIncludedHeight) / 2;
|
|
77
|
-
for (let i = abstractNode.start; i <= abstractNode.end; i++) {
|
|
78
|
-
node.children[i].eachNode(child => {
|
|
79
|
-
child.y += distance;
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
const distance = (abstractIncludedHeight - abstractBranchHeight) / 2;
|
|
85
|
-
node.children[abstractIndex].y += distance;
|
|
86
|
-
}
|
|
87
|
-
return Math.max(abstract.y + abstractHeight, startNode.y + abstractIncludedHeight);
|
|
88
|
-
}
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbGF5b3V0cy9zcmMvbGF5b3V0cy9pbmRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBaUIsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUxRCxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDakQsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUMxQixJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDeEMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQU0sRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDNUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDOUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2QyxDQUFDO1lBQ0QsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQzFELENBQUM7YUFBTSxDQUFDO1lBQ0osYUFB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Q0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDakksSUFBSSxvQkFBb0IsR0FBRyxzQkFBc0IsRUFBRSxDQUFDO1FBQ2hELE1BQU0sUUFBUSxHQUFHLENBQUMsb0JBQW9CLEdBQUcsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckUsS0FBSyxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzlCLEtBQUssQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNMLENBQUM7U0FBTSxDQUFDO1FBQ0osTUFBTSxRQUFRLEdBQUcsQ0FBQyxzQkFBc0IsR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUM7SUFDL0MsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLHNCQUFzQixDQUFDLENBQUM7QUFDdkYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExheW91dE5vZGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2xheW91dC1ub2RlJztcbmltcG9ydCB7IEFic3RyYWN0Tm9kZSwgTGF5b3V0T3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvbWluZCc7XG5pbXBvcnQgeyBmaW5kQWJzdHJhY3RCeUVuZE5vZGUsIGdldE5vbkFic3RyYWN0Q2hpbGRyZW4gfSBmcm9tICcuLi91dGlscy9hYnN0cmFjdCc7XG5pbXBvcnQgeyBpc0hvcml6b250YWxMb2dpY0xheW91dCB9IGZyb20gJy4uL3V0aWxzL2xheW91dCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXBhcmF0ZVhBeGxlKG5vZGU6IExheW91dE5vZGUsIGQgPSAwKSB7XG4gICAgbm9kZS54ID0gZDtcbiAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICBpZiAoQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QoY2hpbGQub3JpZ2luKSkge1xuICAgICAgICAgICAgbGV0IHdpZHRoID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBjaGlsZC5vcmlnaW4uc3RhcnQhOyBpIDw9IGNoaWxkLm9yaWdpbi5lbmQhOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBib3ggPSBub2RlLmNoaWxkcmVuW2ldLmdldEJvdW5kaW5nQm94KCk7XG4gICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1heChib3gud2lkdGgsIHdpZHRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlcGFyYXRlWEF4bGUoY2hpbGQsIG5vZGUueCArIG5vZGUud2lkdGggLyAyICsgd2lkdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VwYXJhdGVYQXhsZShjaGlsZCwgbm9kZS54ICsgbm9kZS53aWR0aCAvIDIpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXBhcmF0ZVlBeGxlKHJvb3Q6IExheW91dE5vZGUsIG9wdGlvbnM6IExheW91dE9wdGlvbnMpIHtcbiAgICBsZXQgcHJldmlvdXNCb3R0b20gPSByb290LnkgKyByb290LmhlaWdodDtcbiAgICBsZXQgcHJldmlvdXNOb2RlOiBudWxsIHwgTGF5b3V0Tm9kZSA9IG51bGw7XG4gICAgdXBkYXRlWShyb290KTtcbiAgICBmdW5jdGlvbiB1cGRhdGVZKG5vZGU6IExheW91dE5vZGUpIHtcbiAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFic3RyYWN0ID0gbm9kZS5jaGlsZHJlbi5maW5kKGNoaWxkID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QoY2hpbGQub3JpZ2luKSAmJiBjaGlsZC5vcmlnaW4uZW5kID09PSBpbmRleCAtIDE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChhYnN0cmFjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dGFjaCA9IHByZXZpb3VzTm9kZT8ub3JpZ2luLmlzQ29sbGFwc2VkID8gb3B0aW9ucy5nZXRFeHRlbmRIZWlnaHQoY2hpbGQub3JpZ2luKSA6IDA7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNCb3R0b20gPSBhYnN0cmFjdEhhbmRsZShub2RlLCBhYnN0cmFjdCkgKyBhdHRhY2g7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChjaGlsZC5vcmlnaW4pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgeSA9IHByZXZpb3VzQm90dG9tICsgY2hpbGQudkdhcDtcbiAgICAgICAgICAgIGlmIChwcmV2aW91c05vZGUgJiYgIWlzSG9yaXpvbnRhbExvZ2ljTGF5b3V0KHByZXZpb3VzTm9kZS5sYXlvdXQpICYmIHByZXZpb3VzTm9kZS5vcmlnaW4uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c05vZGUub3JpZ2luLmlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHkgPSB5ICsgb3B0aW9ucy5nZXRFeHRlbmRIZWlnaHQoY2hpbGQub3JpZ2luKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB5ID0geSArIG9wdGlvbnMuZ2V0SW5kZW50ZWRDcm9zc0xldmVsR2FwKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hpbGQueSA9IHk7XG4gICAgICAgICAgICBwcmV2aW91c05vZGUgPSBjaGlsZDtcbiAgICAgICAgICAgIHByZXZpb3VzQm90dG9tID0gY2hpbGQueSArIGNoaWxkLmhlaWdodDtcbiAgICAgICAgICAgIHVwZGF0ZVkoY2hpbGQpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFic3RyYWN0SGFuZGxlKG5vZGU6IExheW91dE5vZGUsIGFic3RyYWN0OiBMYXlvdXROb2RlKSB7XG4gICAgY29uc3QgYWJzdHJhY3ROb2RlID0gYWJzdHJhY3Qub3JpZ2luIGFzIEFic3RyYWN0Tm9kZTtcbiAgICBjb25zdCBhYnN0cmFjdEluZGV4ID0gbm9kZS5jaGlsZHJlbi5pbmRleE9mKGFic3RyYWN0KTtcbiAgICBjb25zdCBzdGFydE5vZGUgPSBub2RlLmNoaWxkcmVuW2Fic3RyYWN0Tm9kZS5zdGFydF07XG4gICAgY29uc3QgZW5kTm9kZSA9IG5vZGUuY2hpbGRyZW5bYWJzdHJhY3ROb2RlLmVuZF07XG5cbiAgICAvLyBhYnN0cmFjdCBhbmQgc3RhcnQgbm9kZSBhbGlnbm1lbnRcbiAgICBub2RlLmNoaWxkcmVuW2Fic3RyYWN0SW5kZXhdLnkgPSBzdGFydE5vZGUueTtcblxuICAgIGNvbnN0IHRvcENvbnRvdXIgPSBzdGFydE5vZGUueTtcbiAgICBsZXQgYm90dG9tQ29udG91ciA9IGVuZE5vZGUueSArIGVuZE5vZGUuaGVpZ2h0O1xuXG4gICAgbGV0IGJvdHRvbUNvbnRvdXJOb2RlOiBMYXlvdXROb2RlIHwgbnVsbCA9IGVuZE5vZGU7XG4gICAgbGV0IGJvdHRvbUNvbnRvdXJQYXJlbk5vZGUgPSBub2RlO1xuXG4gICAgd2hpbGUgKGJvdHRvbUNvbnRvdXJOb2RlPy5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgYm90dG9tQ29udG91clBhcmVuTm9kZSA9IGJvdHRvbUNvbnRvdXJOb2RlO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGdldE5vbkFic3RyYWN0Q2hpbGRyZW4oYm90dG9tQ29udG91clBhcmVuTm9kZSk7XG4gICAgICAgIGJvdHRvbUNvbnRvdXJOb2RlID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgY29uc3QgYWJzdHJhY3QgPSBmaW5kQWJzdHJhY3RCeUVuZE5vZGUoYm90dG9tQ29udG91clBhcmVuTm9kZSwgYm90dG9tQ29udG91ck5vZGUpO1xuICAgICAgICBib3R0b21Db250b3VyID0gYWJzdHJhY3RcbiAgICAgICAgICAgID8gTWF0aC5tYXgoYWJzdHJhY3QueSArIGFic3RyYWN0LmhlaWdodCwgYm90dG9tQ29udG91ck5vZGUueSArIGJvdHRvbUNvbnRvdXJOb2RlLmhlaWdodClcbiAgICAgICAgICAgIDogYm90dG9tQ29udG91ck5vZGUueSArIGJvdHRvbUNvbnRvdXJOb2RlLmhlaWdodDtcbiAgICB9XG5cbiAgICBjb25zdCBhYnN0cmFjdEluY2x1ZGVkSGVpZ2h0ID0gYm90dG9tQ29udG91ciAtIHRvcENvbnRvdXI7XG4gICAgY29uc3QgYWJzdHJhY3RIZWlnaHQgPSBhYnN0cmFjdC5ibGFja05vZGUgPyBhYnN0cmFjdC5ibGFja05vZGUuaGVpZ2h0IDogYWJzdHJhY3QuaGVpZ2h0O1xuICAgIGNvbnN0IGFic3RyYWN0QnJhbmNoSGVpZ2h0ID0gYWJzdHJhY3QuYmxhY2tOb2RlID8gYWJzdHJhY3QuYmxhY2tOb2RlLnJvb3RZICogMiArIGFic3RyYWN0LmJsYWNrTm9kZS5yb290SGVpZ2h0IDogYWJzdHJhY3QuaGVpZ2h0O1xuICAgIGlmIChhYnN0cmFjdEJyYW5jaEhlaWdodCA+IGFic3RyYWN0SW5jbHVkZWRIZWlnaHQpIHtcbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPSAoYWJzdHJhY3RCcmFuY2hIZWlnaHQgLSBhYnN0cmFjdEluY2x1ZGVkSGVpZ2h0KSAvIDI7XG4gICAgICAgIGZvciAobGV0IGkgPSBhYnN0cmFjdE5vZGUuc3RhcnQ7IGkgPD0gYWJzdHJhY3ROb2RlLmVuZDsgaSsrKSB7XG4gICAgICAgICAgICBub2RlLmNoaWxkcmVuW2ldLmVhY2hOb2RlKGNoaWxkID0+IHtcbiAgICAgICAgICAgICAgICBjaGlsZC55ICs9IGRpc3RhbmNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IChhYnN0cmFjdEluY2x1ZGVkSGVpZ2h0IC0gYWJzdHJhY3RCcmFuY2hIZWlnaHQpIC8gMjtcbiAgICAgICAgbm9kZS5jaGlsZHJlblthYnN0cmFjdEluZGV4XS55ICs9IGRpc3RhbmNlO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5tYXgoYWJzdHJhY3QueSArIGFic3RyYWN0SGVpZ2h0LCBzdGFydE5vZGUueSArIGFic3RyYWN0SW5jbHVkZWRIZWlnaHQpO1xufVxuIl19
|