@antv/layout 0.2.0 → 0.2.3
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/dist/layout.min.js +1 -1
- package/dist/layout.min.js.LICENSE.txt +0 -9
- package/dist/layout.min.js.map +1 -1
- package/es/layout/circular.js.map +1 -1
- package/es/layout/comboCombined.js +3 -19
- package/es/layout/comboCombined.js.map +1 -1
- package/es/layout/concentric.js.map +1 -1
- package/es/layout/dagre/graph.d.ts +91 -0
- package/es/layout/dagre/graph.js +4 -0
- package/es/layout/dagre/graph.js.map +1 -0
- package/es/layout/dagre/index.d.ts +3 -4
- package/es/layout/dagre/index.js +0 -2
- package/es/layout/dagre/index.js.map +1 -1
- package/es/layout/dagre/src/acyclic.d.ts +1 -2
- package/es/layout/dagre/src/acyclic.js +7 -7
- package/es/layout/dagre/src/acyclic.js.map +1 -1
- package/es/layout/dagre/src/add-border-segments.d.ts +1 -2
- package/es/layout/dagre/src/add-border-segments.js +5 -5
- package/es/layout/dagre/src/add-border-segments.js.map +1 -1
- package/es/layout/dagre/src/coordinate-system.d.ts +1 -2
- package/es/layout/dagre/src/coordinate-system.js +15 -5
- package/es/layout/dagre/src/coordinate-system.js.map +1 -1
- package/es/layout/dagre/src/data/list.d.ts +9 -5
- package/es/layout/dagre/src/data/list.js +25 -27
- package/es/layout/dagre/src/data/list.js.map +1 -1
- package/es/layout/dagre/src/debug.d.ts +2 -3
- package/es/layout/dagre/src/debug.js +3 -5
- package/es/layout/dagre/src/debug.js.map +1 -1
- package/es/layout/dagre/src/greedy-fas.d.ts +2 -3
- package/es/layout/dagre/src/greedy-fas.js +16 -15
- package/es/layout/dagre/src/greedy-fas.js.map +1 -1
- package/es/layout/dagre/src/layout.d.ts +2 -3
- package/es/layout/dagre/src/layout.js +170 -91
- package/es/layout/dagre/src/layout.js.map +1 -1
- package/es/layout/dagre/src/nesting-graph.d.ts +1 -2
- package/es/layout/dagre/src/nesting-graph.js +15 -10
- package/es/layout/dagre/src/nesting-graph.js.map +1 -1
- package/es/layout/dagre/src/normalize.d.ts +1 -2
- package/es/layout/dagre/src/normalize.js +12 -11
- package/es/layout/dagre/src/normalize.js.map +1 -1
- package/es/layout/dagre/src/order/add-subgraph-constraints.d.ts +1 -2
- package/es/layout/dagre/src/order/add-subgraph-constraints.js.map +1 -1
- package/es/layout/dagre/src/order/barycenter.d.ts +1 -2
- package/es/layout/dagre/src/order/barycenter.js.map +1 -1
- package/es/layout/dagre/src/order/build-layer-graph.d.ts +2 -3
- package/es/layout/dagre/src/order/build-layer-graph.js +12 -8
- package/es/layout/dagre/src/order/build-layer-graph.js.map +1 -1
- package/es/layout/dagre/src/order/cross-count.d.ts +2 -3
- package/es/layout/dagre/src/order/cross-count.js +13 -12
- package/es/layout/dagre/src/order/cross-count.js.map +1 -1
- package/es/layout/dagre/src/order/index.d.ts +2 -3
- package/es/layout/dagre/src/order/index.js +17 -15
- package/es/layout/dagre/src/order/index.js.map +1 -1
- package/es/layout/dagre/src/order/init-data-order.d.ts +1 -2
- package/es/layout/dagre/src/order/init-data-order.js +3 -5
- package/es/layout/dagre/src/order/init-data-order.js.map +1 -1
- package/es/layout/dagre/src/order/init-order.d.ts +2 -3
- package/es/layout/dagre/src/order/init-order.js +1 -2
- package/es/layout/dagre/src/order/init-order.js.map +1 -1
- package/es/layout/dagre/src/order/resolve-conflicts.d.ts +18 -3
- package/es/layout/dagre/src/order/resolve-conflicts.js +9 -29
- package/es/layout/dagre/src/order/resolve-conflicts.js.map +1 -1
- package/es/layout/dagre/src/order/sort-subgraph.d.ts +6 -3
- package/es/layout/dagre/src/order/sort-subgraph.js +19 -14
- package/es/layout/dagre/src/order/sort-subgraph.js.map +1 -1
- package/es/layout/dagre/src/order/sort.d.ts +6 -1
- package/es/layout/dagre/src/order/sort.js +2 -2
- package/es/layout/dagre/src/order/sort.js.map +1 -1
- package/es/layout/dagre/src/parent-dummy-chains.d.ts +1 -2
- package/es/layout/dagre/src/parent-dummy-chains.js +47 -44
- package/es/layout/dagre/src/parent-dummy-chains.js.map +1 -1
- package/es/layout/dagre/src/position/bk.d.ts +22 -31
- package/es/layout/dagre/src/position/bk.js +49 -83
- package/es/layout/dagre/src/position/bk.js.map +1 -1
- package/es/layout/dagre/src/position/index.d.ts +1 -2
- package/es/layout/dagre/src/position/index.js +12 -14
- package/es/layout/dagre/src/position/index.js.map +1 -1
- package/es/layout/dagre/src/rank/feasible-tree.d.ts +5 -6
- package/es/layout/dagre/src/rank/feasible-tree.js +1 -2
- package/es/layout/dagre/src/rank/feasible-tree.js.map +1 -1
- package/es/layout/dagre/src/rank/index.d.ts +2 -3
- package/es/layout/dagre/src/rank/index.js.map +1 -1
- package/es/layout/dagre/src/rank/network-simplex.d.ts +8 -11
- package/es/layout/dagre/src/rank/network-simplex.js +18 -31
- package/es/layout/dagre/src/rank/network-simplex.js.map +1 -1
- package/es/layout/dagre/src/rank/util.d.ts +4 -5
- package/es/layout/dagre/src/rank/util.js +37 -20
- package/es/layout/dagre/src/rank/util.js.map +1 -1
- package/es/layout/dagre/src/util.d.ts +29 -48
- package/es/layout/dagre/src/util.js +91 -101
- package/es/layout/dagre/src/util.js.map +1 -1
- package/es/layout/dagre.d.ts +1 -1
- package/es/layout/dagre.js +28 -24
- package/es/layout/dagre.js.map +1 -1
- package/es/layout/fruchterman.js.map +1 -1
- package/es/layout/gForce.js +14 -6
- package/es/layout/gForce.js.map +1 -1
- package/lib/index.js +5 -1
- package/lib/index.js.map +1 -1
- package/lib/layout/circular.js.map +1 -1
- package/lib/layout/comboCombined.js +2 -18
- package/lib/layout/comboCombined.js.map +1 -1
- package/lib/layout/comboForce.js +5 -5
- package/lib/layout/comboForce.js.map +1 -1
- package/lib/layout/concentric.js.map +1 -1
- package/lib/layout/dagre/graph.d.ts +91 -0
- package/lib/layout/dagre/graph.js +28 -0
- package/lib/layout/dagre/graph.js.map +1 -0
- package/lib/layout/dagre/index.d.ts +3 -4
- package/lib/layout/dagre/index.js +0 -2
- package/lib/layout/dagre/index.js.map +1 -1
- package/lib/layout/dagre/src/acyclic.d.ts +1 -2
- package/lib/layout/dagre/src/acyclic.js +7 -7
- package/lib/layout/dagre/src/acyclic.js.map +1 -1
- package/lib/layout/dagre/src/add-border-segments.d.ts +1 -2
- package/lib/layout/dagre/src/add-border-segments.js +5 -8
- package/lib/layout/dagre/src/add-border-segments.js.map +1 -1
- package/lib/layout/dagre/src/coordinate-system.d.ts +1 -2
- package/lib/layout/dagre/src/coordinate-system.js +15 -5
- package/lib/layout/dagre/src/coordinate-system.js.map +1 -1
- package/lib/layout/dagre/src/data/list.d.ts +9 -5
- package/lib/layout/dagre/src/data/list.js +25 -26
- package/lib/layout/dagre/src/data/list.js.map +1 -1
- package/lib/layout/dagre/src/debug.d.ts +2 -3
- package/lib/layout/dagre/src/debug.js +6 -11
- package/lib/layout/dagre/src/debug.js.map +1 -1
- package/lib/layout/dagre/src/greedy-fas.d.ts +2 -3
- package/lib/layout/dagre/src/greedy-fas.js +41 -15
- package/lib/layout/dagre/src/greedy-fas.js.map +1 -1
- package/lib/layout/dagre/src/layout.d.ts +2 -3
- package/lib/layout/dagre/src/layout.js +171 -100
- package/lib/layout/dagre/src/layout.js.map +1 -1
- package/lib/layout/dagre/src/nesting-graph.d.ts +1 -2
- package/lib/layout/dagre/src/nesting-graph.js +15 -13
- package/lib/layout/dagre/src/nesting-graph.js.map +1 -1
- package/lib/layout/dagre/src/normalize.d.ts +1 -2
- package/lib/layout/dagre/src/normalize.js +12 -14
- package/lib/layout/dagre/src/normalize.js.map +1 -1
- package/lib/layout/dagre/src/order/add-subgraph-constraints.d.ts +1 -2
- package/lib/layout/dagre/src/order/add-subgraph-constraints.js.map +1 -1
- package/lib/layout/dagre/src/order/barycenter.d.ts +1 -2
- package/lib/layout/dagre/src/order/barycenter.js.map +1 -1
- package/lib/layout/dagre/src/order/build-layer-graph.d.ts +2 -3
- package/lib/layout/dagre/src/order/build-layer-graph.js +13 -12
- package/lib/layout/dagre/src/order/build-layer-graph.js.map +1 -1
- package/lib/layout/dagre/src/order/cross-count.d.ts +2 -3
- package/lib/layout/dagre/src/order/cross-count.js +14 -13
- package/lib/layout/dagre/src/order/cross-count.js.map +1 -1
- package/lib/layout/dagre/src/order/index.d.ts +2 -3
- package/lib/layout/dagre/src/order/index.js +15 -13
- package/lib/layout/dagre/src/order/index.js.map +1 -1
- package/lib/layout/dagre/src/order/init-data-order.d.ts +1 -2
- package/lib/layout/dagre/src/order/init-data-order.js +3 -5
- package/lib/layout/dagre/src/order/init-data-order.js.map +1 -1
- package/lib/layout/dagre/src/order/init-order.d.ts +2 -3
- package/lib/layout/dagre/src/order/init-order.js +1 -2
- package/lib/layout/dagre/src/order/init-order.js.map +1 -1
- package/lib/layout/dagre/src/order/resolve-conflicts.d.ts +18 -3
- package/lib/layout/dagre/src/order/resolve-conflicts.js +9 -29
- package/lib/layout/dagre/src/order/resolve-conflicts.js.map +1 -1
- package/lib/layout/dagre/src/order/sort-subgraph.d.ts +6 -3
- package/lib/layout/dagre/src/order/sort-subgraph.js +16 -11
- package/lib/layout/dagre/src/order/sort-subgraph.js.map +1 -1
- package/lib/layout/dagre/src/order/sort.d.ts +6 -1
- package/lib/layout/dagre/src/order/sort.js +2 -5
- package/lib/layout/dagre/src/order/sort.js.map +1 -1
- package/lib/layout/dagre/src/parent-dummy-chains.d.ts +1 -2
- package/lib/layout/dagre/src/parent-dummy-chains.js +47 -44
- package/lib/layout/dagre/src/parent-dummy-chains.js.map +1 -1
- package/lib/layout/dagre/src/position/bk.d.ts +22 -31
- package/lib/layout/dagre/src/position/bk.js +75 -85
- package/lib/layout/dagre/src/position/bk.js.map +1 -1
- package/lib/layout/dagre/src/position/index.d.ts +1 -2
- package/lib/layout/dagre/src/position/index.js +14 -17
- package/lib/layout/dagre/src/position/index.js.map +1 -1
- package/lib/layout/dagre/src/rank/feasible-tree.d.ts +5 -6
- package/lib/layout/dagre/src/rank/feasible-tree.js +3 -7
- package/lib/layout/dagre/src/rank/feasible-tree.js.map +1 -1
- package/lib/layout/dagre/src/rank/index.d.ts +2 -3
- package/lib/layout/dagre/src/rank/index.js.map +1 -1
- package/lib/layout/dagre/src/rank/network-simplex.d.ts +8 -11
- package/lib/layout/dagre/src/rank/network-simplex.js +27 -35
- package/lib/layout/dagre/src/rank/network-simplex.js.map +1 -1
- package/lib/layout/dagre/src/rank/util.d.ts +4 -5
- package/lib/layout/dagre/src/rank/util.js +36 -19
- package/lib/layout/dagre/src/rank/util.js.map +1 -1
- package/lib/layout/dagre/src/util.d.ts +29 -48
- package/lib/layout/dagre/src/util.js +80 -92
- package/lib/layout/dagre/src/util.js.map +1 -1
- package/lib/layout/dagre.d.ts +1 -1
- package/lib/layout/dagre.js +27 -23
- package/lib/layout/dagre.js.map +1 -1
- package/lib/layout/er/core.js +5 -1
- package/lib/layout/er/core.js.map +1 -1
- package/lib/layout/force/force-in-a-box.js +7 -3
- package/lib/layout/force/force-in-a-box.js.map +1 -1
- package/lib/layout/force/force.js +5 -1
- package/lib/layout/force/force.js.map +1 -1
- package/lib/layout/force/index.js +5 -1
- package/lib/layout/force/index.js.map +1 -1
- package/lib/layout/fruchterman.js.map +1 -1
- package/lib/layout/gForce.js +10 -2
- package/lib/layout/gForce.js.map +1 -1
- package/lib/layout/grid.js +2 -2
- package/lib/layout/grid.js.map +1 -1
- package/lib/layout/index.js +5 -1
- package/lib/layout/index.js.map +1 -1
- package/lib/layout/radial/index.js +5 -1
- package/lib/layout/radial/index.js.map +1 -1
- package/lib/registy/index.js +1 -1
- package/lib/registy/index.js.map +1 -1
- package/lib/util/index.js +5 -1
- package/lib/util/index.js.map +1 -1
- package/package.json +3 -2
- package/src/index.ts +7 -0
- package/src/layout/base.ts +54 -0
- package/src/layout/circular.ts +369 -0
- package/src/layout/comboCombined.ts +390 -0
- package/src/layout/comboForce.ts +873 -0
- package/src/layout/concentric.ts +289 -0
- package/src/layout/constants.ts +21 -0
- package/src/layout/dagre/graph.ts +104 -0
- package/src/layout/dagre/index.ts +31 -0
- package/src/layout/dagre/src/acyclic.ts +58 -0
- package/src/layout/dagre/src/add-border-segments.ts +47 -0
- package/src/layout/dagre/src/coordinate-system.ts +77 -0
- package/src/layout/dagre/src/data/list.ts +60 -0
- package/src/layout/dagre/src/debug.ts +30 -0
- package/src/layout/dagre/src/greedy-fas.ts +144 -0
- package/src/layout/dagre/src/layout.ts +580 -0
- package/src/layout/dagre/src/nesting-graph.ts +143 -0
- package/src/layout/dagre/src/normalize.ts +96 -0
- package/src/layout/dagre/src/order/add-subgraph-constraints.ts +29 -0
- package/src/layout/dagre/src/order/barycenter.ts +26 -0
- package/src/layout/dagre/src/order/build-layer-graph.ts +82 -0
- package/src/layout/dagre/src/order/cross-count.ts +77 -0
- package/src/layout/dagre/src/order/index.ts +105 -0
- package/src/layout/dagre/src/order/init-data-order.ts +27 -0
- package/src/layout/dagre/src/order/init-order.ts +56 -0
- package/src/layout/dagre/src/order/resolve-conflicts.ts +152 -0
- package/src/layout/dagre/src/order/sort-subgraph.ts +105 -0
- package/src/layout/dagre/src/order/sort.ts +76 -0
- package/src/layout/dagre/src/parent-dummy-chains.ts +102 -0
- package/src/layout/dagre/src/position/bk.ts +494 -0
- package/src/layout/dagre/src/position/index.ts +82 -0
- package/src/layout/dagre/src/rank/feasible-tree.ts +165 -0
- package/src/layout/dagre/src/rank/index.ts +54 -0
- package/src/layout/dagre/src/rank/network-simplex.ts +225 -0
- package/src/layout/dagre/src/rank/util.ts +157 -0
- package/src/layout/dagre/src/util.ts +308 -0
- package/src/layout/dagre.ts +423 -0
- package/src/layout/dagreCompound.ts +518 -0
- package/src/layout/er/core.ts +117 -0
- package/src/layout/er/forceGrid.ts +95 -0
- package/src/layout/er/grid.ts +185 -0
- package/src/layout/er/index.ts +68 -0
- package/src/layout/er/mysqlWorkbench.ts +345 -0
- package/src/layout/er/type.ts +39 -0
- package/src/layout/force/force-in-a-box.ts +400 -0
- package/src/layout/force/force.ts +391 -0
- package/src/layout/force/index.ts +1 -0
- package/src/layout/forceAtlas2/body.ts +115 -0
- package/src/layout/forceAtlas2/index.ts +556 -0
- package/src/layout/forceAtlas2/quad.ts +115 -0
- package/src/layout/forceAtlas2/quadTree.ts +107 -0
- package/src/layout/fruchterman.ts +361 -0
- package/src/layout/gForce.ts +487 -0
- package/src/layout/gpu/fruchterman.ts +314 -0
- package/src/layout/gpu/fruchtermanShader.ts +204 -0
- package/src/layout/gpu/gForce.ts +406 -0
- package/src/layout/gpu/gForceShader.ts +221 -0
- package/src/layout/grid.ts +391 -0
- package/src/layout/index.ts +45 -0
- package/src/layout/layout.ts +75 -0
- package/src/layout/mds.ts +140 -0
- package/src/layout/radial/index.ts +1 -0
- package/src/layout/radial/mds.ts +51 -0
- package/src/layout/radial/radial.ts +500 -0
- package/src/layout/radial/radialNonoverlapForce.ts +189 -0
- package/src/layout/random.ts +75 -0
- package/src/layout/types.ts +421 -0
- package/src/registy/index.ts +43 -0
- package/src/util/array.ts +1 -0
- package/src/util/function.ts +64 -0
- package/src/util/gpu.ts +254 -0
- package/src/util/index.ts +6 -0
- package/src/util/math.ts +158 -0
- package/src/util/number.ts +8 -0
- package/src/util/object.ts +28 -0
- package/src/util/string.ts +18 -0
- package/CHANGELOG.md +0 -78
- package/es/layout/dagre/src/graphlib.d.ts +0 -2
- package/es/layout/dagre/src/graphlib.js +0 -51
- package/es/layout/dagre/src/graphlib.js.map +0 -1
- package/lib/layout/dagre/src/graphlib.d.ts +0 -2
- package/lib/layout/dagre/src/graphlib.js +0 -56
- package/lib/layout/dagre/src/graphlib.js.map +0 -1
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
const Graph = graphlib.Graph;
|
|
4
|
-
/* istanbul ignore next */
|
|
1
|
+
import { Graph } from "../graph";
|
|
2
|
+
import { buildLayerMatrix } from "./util";
|
|
5
3
|
const debugOrdering = (g) => {
|
|
6
|
-
const layerMatrix =
|
|
4
|
+
const layerMatrix = buildLayerMatrix(g);
|
|
7
5
|
const h = new Graph({ compound: true, multigraph: true }).setGraph({});
|
|
8
6
|
g.nodes().forEach((v) => {
|
|
9
7
|
h.setNode(v, { label: v });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../../src/layout/dagre/src/debug.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../../src/layout/dagre/src/debug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAE1C,MAAM,aAAa,GAAG,CAAC,CAAQ,EAAE,EAAE;IACjC,MAAM,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAExC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEvE,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE;QAC9B,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACtB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,CAAC,CAAC,KAAK,EAAE,CAAS,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC;QAC3B,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAA2B,EAAE,CAAC,CAAC;QACzD,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;YACrC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YACpC,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
declare
|
|
3
|
-
declare const greedyFAS: (g: IGraph, weightFn: () => unknown) => (import("../graphlib").Edge | undefined)[];
|
|
1
|
+
import { Edge, Graph } from "../graph";
|
|
2
|
+
declare const greedyFAS: (g: Graph, weightFn?: ((e: Edge) => number) | undefined) => (import("@antv/graphlib/lib/Graph").DefaultEdgeType<string, Partial<import("../graph").EdgeConfig & Edge & import("../graph").GraphEdge>> | undefined)[];
|
|
4
3
|
export default greedyFAS;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
1
|
+
import RawList from "./data/list";
|
|
2
|
+
import { Graph as RawGraph } from "@antv/graphlib";
|
|
3
|
+
class List extends RawList {
|
|
4
|
+
}
|
|
5
|
+
class StateGraph extends RawGraph {
|
|
6
|
+
}
|
|
4
7
|
/*
|
|
5
8
|
* A greedy heuristic for finding a feedback arc set for a graph. A feedback
|
|
6
9
|
* arc set is a set of edges that can be removed to make a graph acyclic.
|
|
@@ -8,7 +11,6 @@ const Graph = graphlib.Graph;
|
|
|
8
11
|
* effective heuristic for the feedback arc set problem." This implementation
|
|
9
12
|
* adjusts that from the paper to allow for weighted edges.
|
|
10
13
|
*/
|
|
11
|
-
// module.exports = greedyFAS;
|
|
12
14
|
const DEFAULT_WEIGHT_FN = () => 1;
|
|
13
15
|
const greedyFAS = (g, weightFn) => {
|
|
14
16
|
var _a;
|
|
@@ -16,8 +18,6 @@ const greedyFAS = (g, weightFn) => {
|
|
|
16
18
|
return [];
|
|
17
19
|
const state = buildState(g, weightFn || DEFAULT_WEIGHT_FN);
|
|
18
20
|
const results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx);
|
|
19
|
-
// Expand multi-edges
|
|
20
|
-
// @ts-ignore
|
|
21
21
|
return (_a = results.map((e) => g.outEdges(e.v, e.w))) === null || _a === void 0 ? void 0 : _a.flat();
|
|
22
22
|
};
|
|
23
23
|
const doGreedyFAS = (g, buckets, zeroIdx) => {
|
|
@@ -46,12 +46,13 @@ const doGreedyFAS = (g, buckets, zeroIdx) => {
|
|
|
46
46
|
};
|
|
47
47
|
const removeNode = (g, buckets, zeroIdx, entry, collectPredecessors) => {
|
|
48
48
|
var _a, _b;
|
|
49
|
-
const results =
|
|
49
|
+
const results = [];
|
|
50
50
|
(_a = g.inEdges(entry.v)) === null || _a === void 0 ? void 0 : _a.forEach((edge) => {
|
|
51
51
|
const weight = g.edge(edge);
|
|
52
52
|
const uEntry = g.node(edge.v);
|
|
53
53
|
if (collectPredecessors) {
|
|
54
|
-
|
|
54
|
+
// this result not really care about in or out
|
|
55
|
+
results.push({ v: edge.v, w: edge.w, in: 0, out: 0 });
|
|
55
56
|
}
|
|
56
57
|
if (uEntry.out === undefined)
|
|
57
58
|
uEntry.out = 0;
|
|
@@ -68,24 +69,24 @@ const removeNode = (g, buckets, zeroIdx, entry, collectPredecessors) => {
|
|
|
68
69
|
assignBucket(buckets, zeroIdx, wEntry);
|
|
69
70
|
});
|
|
70
71
|
g.removeNode(entry.v);
|
|
71
|
-
return results;
|
|
72
|
+
return collectPredecessors ? results : undefined;
|
|
72
73
|
};
|
|
73
74
|
const buildState = (g, weightFn) => {
|
|
74
|
-
const fasGraph = new
|
|
75
|
+
const fasGraph = new StateGraph();
|
|
75
76
|
let maxIn = 0;
|
|
76
77
|
let maxOut = 0;
|
|
77
78
|
g.nodes().forEach((v) => {
|
|
78
|
-
fasGraph.setNode(v, { v,
|
|
79
|
+
fasGraph.setNode(v, { v, in: 0, out: 0 });
|
|
79
80
|
});
|
|
80
81
|
// Aggregate weights on nodes, but also sum the weights across multi-edges
|
|
81
82
|
// into a single edge for the fasGraph.
|
|
82
83
|
g.edges().forEach((e) => {
|
|
83
|
-
const prevWeight = fasGraph.edge(e
|
|
84
|
-
const weight = weightFn === null || weightFn === void 0 ? void 0 : weightFn(e);
|
|
84
|
+
const prevWeight = fasGraph.edge(e) || 0;
|
|
85
|
+
const weight = (weightFn === null || weightFn === void 0 ? void 0 : weightFn(e)) || 1;
|
|
85
86
|
const edgeWeight = prevWeight + weight;
|
|
86
87
|
fasGraph.setEdge(e.v, e.w, edgeWeight);
|
|
87
|
-
maxOut = Math.max(maxOut, fasGraph.node(e.v).out += weight);
|
|
88
|
-
maxIn = Math.max(maxIn, fasGraph.node(e.w)
|
|
88
|
+
maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight));
|
|
89
|
+
maxIn = Math.max(maxIn, (fasGraph.node(e.w).in += weight));
|
|
89
90
|
});
|
|
90
91
|
const buckets = [];
|
|
91
92
|
const rangeMax = maxOut + maxIn + 3;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"greedy-fas.js","sourceRoot":"","sources":["../../../../src/layout/dagre/src/greedy-fas.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"greedy-fas.js","sourceRoot":"","sources":["../../../../src/layout/dagre/src/greedy-fas.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,84 +1,148 @@
|
|
|
1
|
-
import acyclic from
|
|
2
|
-
import normalize from
|
|
3
|
-
import rank from
|
|
4
|
-
import
|
|
5
|
-
import parentDummyChains from
|
|
6
|
-
import nestingGraph from
|
|
7
|
-
import addBorderSegments from
|
|
8
|
-
import coordinateSystem from
|
|
9
|
-
import order from
|
|
10
|
-
import position from
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
const Graph = graphlib.Graph;
|
|
1
|
+
import acyclic from "./acyclic";
|
|
2
|
+
import normalize from "./normalize";
|
|
3
|
+
import rank from "./rank";
|
|
4
|
+
import { normalizeRanks, removeEmptyRanks, time as usetime, notime, asNonCompoundGraph, addDummyNode, intersectRect, buildLayerMatrix, } from "./util";
|
|
5
|
+
import parentDummyChains from "./parent-dummy-chains";
|
|
6
|
+
import nestingGraph from "./nesting-graph";
|
|
7
|
+
import addBorderSegments from "./add-border-segments";
|
|
8
|
+
import coordinateSystem from "./coordinate-system";
|
|
9
|
+
import order from "./order";
|
|
10
|
+
import position from "./position";
|
|
11
|
+
import initDataOrder from "./order/init-data-order";
|
|
12
|
+
import { Graph } from "../graph";
|
|
14
13
|
const layout = (g, opts) => {
|
|
15
|
-
const time = opts && opts.debugTiming ?
|
|
14
|
+
const time = opts && opts.debugTiming ? usetime : notime;
|
|
16
15
|
time("layout", () => {
|
|
17
16
|
// 如果在原图基础上修改,继承原图的order结果
|
|
18
17
|
if (opts && !opts.keepNodeOrder && opts.prevGraph) {
|
|
19
|
-
time(" inheritOrder", () => {
|
|
18
|
+
time(" inheritOrder", () => {
|
|
19
|
+
inheritOrder(g, opts.prevGraph);
|
|
20
|
+
});
|
|
20
21
|
}
|
|
21
|
-
const layoutGraph = time(" buildLayoutGraph", () => {
|
|
22
|
+
const layoutGraph = time(" buildLayoutGraph", () => {
|
|
23
|
+
return buildLayoutGraph(g);
|
|
24
|
+
});
|
|
22
25
|
// 控制是否为边的label留位置(这会影响是否在边中间添加dummy node)
|
|
23
|
-
if (!(opts &&
|
|
24
|
-
time(" makeSpaceForEdgeLabels", () => {
|
|
26
|
+
if (!(opts && opts.edgeLabelSpace === false)) {
|
|
27
|
+
time(" makeSpaceForEdgeLabels", () => {
|
|
28
|
+
makeSpaceForEdgeLabels(layoutGraph);
|
|
29
|
+
});
|
|
25
30
|
}
|
|
26
31
|
// TODO: 暂时处理层级设置不正确时的异常报错,提示设置正确的层级
|
|
27
32
|
try {
|
|
28
|
-
time(" runLayout", () => {
|
|
33
|
+
time(" runLayout", () => {
|
|
34
|
+
runLayout(layoutGraph, time, opts);
|
|
35
|
+
});
|
|
29
36
|
}
|
|
30
37
|
catch (e) {
|
|
31
|
-
if (e.message ===
|
|
32
|
-
|
|
38
|
+
if (e.message ===
|
|
39
|
+
"Not possible to find intersection inside of the rectangle") {
|
|
40
|
+
console.error("The following error may be caused by improper layer setting, please make sure your manual layer setting does not violate the graph's structure:\n", e);
|
|
33
41
|
return;
|
|
34
42
|
}
|
|
35
|
-
throw
|
|
43
|
+
throw e;
|
|
36
44
|
}
|
|
37
|
-
time(" updateInputGraph", () => {
|
|
45
|
+
time(" updateInputGraph", () => {
|
|
46
|
+
updateInputGraph(g, layoutGraph);
|
|
47
|
+
});
|
|
38
48
|
});
|
|
39
49
|
};
|
|
40
50
|
const runLayout = (g, time, opts) => {
|
|
41
|
-
time(" removeSelfEdges", () => {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
time("
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
time(" nestingGraph.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
time("
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
time("
|
|
51
|
+
time(" removeSelfEdges", () => {
|
|
52
|
+
removeSelfEdges(g);
|
|
53
|
+
});
|
|
54
|
+
time(" acyclic", () => {
|
|
55
|
+
acyclic.run(g);
|
|
56
|
+
});
|
|
57
|
+
time(" nestingGraph.run", () => {
|
|
58
|
+
nestingGraph.run(g);
|
|
59
|
+
});
|
|
60
|
+
time(" rank", () => {
|
|
61
|
+
rank(asNonCompoundGraph(g));
|
|
62
|
+
});
|
|
63
|
+
time(" injectEdgeLabelProxies", () => {
|
|
64
|
+
injectEdgeLabelProxies(g);
|
|
65
|
+
});
|
|
66
|
+
time(" removeEmptyRanks", () => {
|
|
67
|
+
removeEmptyRanks(g);
|
|
68
|
+
});
|
|
69
|
+
time(" nestingGraph.cleanup", () => {
|
|
70
|
+
nestingGraph.cleanup(g);
|
|
71
|
+
});
|
|
72
|
+
time(" normalizeRanks", () => {
|
|
73
|
+
normalizeRanks(g);
|
|
74
|
+
});
|
|
75
|
+
time(" assignRankMinMax", () => {
|
|
76
|
+
assignRankMinMax(g);
|
|
77
|
+
});
|
|
78
|
+
time(" removeEdgeLabelProxies", () => {
|
|
79
|
+
removeEdgeLabelProxies(g);
|
|
80
|
+
});
|
|
81
|
+
time(" normalize.run", () => {
|
|
82
|
+
normalize.run(g);
|
|
83
|
+
});
|
|
84
|
+
time(" parentDummyChains", () => {
|
|
85
|
+
parentDummyChains(g);
|
|
86
|
+
});
|
|
87
|
+
time(" addBorderSegments", () => {
|
|
88
|
+
addBorderSegments(g);
|
|
89
|
+
});
|
|
54
90
|
if (opts && opts.keepNodeOrder) {
|
|
55
|
-
time(" initDataOrder", () => {
|
|
91
|
+
time(" initDataOrder", () => {
|
|
92
|
+
initDataOrder(g, opts.nodeOrder);
|
|
93
|
+
});
|
|
56
94
|
}
|
|
57
|
-
time(" order", () => {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
time("
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
time("
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
time("
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
time("
|
|
95
|
+
time(" order", () => {
|
|
96
|
+
order(g);
|
|
97
|
+
});
|
|
98
|
+
time(" insertSelfEdges", () => {
|
|
99
|
+
insertSelfEdges(g);
|
|
100
|
+
});
|
|
101
|
+
time(" adjustCoordinateSystem", () => {
|
|
102
|
+
coordinateSystem.adjust(g);
|
|
103
|
+
});
|
|
104
|
+
time(" position", () => {
|
|
105
|
+
position(g);
|
|
106
|
+
});
|
|
107
|
+
time(" positionSelfEdges", () => {
|
|
108
|
+
positionSelfEdges(g);
|
|
109
|
+
});
|
|
110
|
+
time(" removeBorderNodes", () => {
|
|
111
|
+
removeBorderNodes(g);
|
|
112
|
+
});
|
|
113
|
+
time(" normalize.undo", () => {
|
|
114
|
+
normalize.undo(g);
|
|
115
|
+
});
|
|
116
|
+
time(" fixupEdgeLabelCoords", () => {
|
|
117
|
+
fixupEdgeLabelCoords(g);
|
|
118
|
+
});
|
|
119
|
+
time(" undoCoordinateSystem", () => {
|
|
120
|
+
coordinateSystem.undo(g);
|
|
121
|
+
});
|
|
122
|
+
time(" translateGraph", () => {
|
|
123
|
+
translateGraph(g);
|
|
124
|
+
});
|
|
125
|
+
time(" assignNodeIntersects", () => {
|
|
126
|
+
assignNodeIntersects(g);
|
|
127
|
+
});
|
|
128
|
+
time(" reversePoints", () => {
|
|
129
|
+
reversePointsForReversedEdges(g);
|
|
130
|
+
});
|
|
131
|
+
time(" acyclic.undo", () => {
|
|
132
|
+
acyclic.undo(g);
|
|
133
|
+
});
|
|
70
134
|
};
|
|
71
135
|
/**
|
|
72
136
|
* 继承上一个布局中的order,防止翻转
|
|
73
137
|
* TODO: 暂时没有考虑涉及层级变动的布局,只保证原来布局层级和相对顺序不变
|
|
74
138
|
*/
|
|
75
139
|
const inheritOrder = (currG, prevG) => {
|
|
76
|
-
const prevNodeMap = prevG._nodes || {};
|
|
77
140
|
currG.nodes().forEach((n) => {
|
|
78
141
|
const node = currG.node(n);
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
142
|
+
const prevNode = prevG.node(n);
|
|
143
|
+
if (prevNode !== undefined) {
|
|
144
|
+
node.fixorder = prevNode._order;
|
|
145
|
+
delete prevNode._order;
|
|
82
146
|
}
|
|
83
147
|
else {
|
|
84
148
|
delete node.fixorder;
|
|
@@ -95,8 +159,8 @@ const updateInputGraph = (inputGraph, layoutGraph) => {
|
|
|
95
159
|
inputGraph.nodes().forEach((v) => {
|
|
96
160
|
var _a;
|
|
97
161
|
const inputLabel = inputGraph.node(v);
|
|
98
|
-
const layoutLabel = layoutGraph.node(v);
|
|
99
162
|
if (inputLabel) {
|
|
163
|
+
const layoutLabel = layoutGraph.node(v);
|
|
100
164
|
inputLabel.x = layoutLabel.x;
|
|
101
165
|
inputLabel.y = layoutLabel.y;
|
|
102
166
|
inputLabel._order = layoutLabel.order;
|
|
@@ -126,8 +190,12 @@ const nodeNumAttrs = ["width", "height", "layer", "fixorder"]; // 需要传入la
|
|
|
126
190
|
const nodeDefaults = { width: 0, height: 0 };
|
|
127
191
|
const edgeNumAttrs = ["minlen", "weight", "width", "height", "labeloffset"];
|
|
128
192
|
const edgeDefaults = {
|
|
129
|
-
minlen: 1,
|
|
130
|
-
|
|
193
|
+
minlen: 1,
|
|
194
|
+
weight: 1,
|
|
195
|
+
width: 0,
|
|
196
|
+
height: 0,
|
|
197
|
+
labeloffset: 10,
|
|
198
|
+
labelpos: "r",
|
|
131
199
|
};
|
|
132
200
|
const edgeAttrs = ["labelpos"];
|
|
133
201
|
/*
|
|
@@ -147,12 +215,8 @@ const buildLayoutGraph = (inputGraph) => {
|
|
|
147
215
|
g.setGraph(Object.assign({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pickedProperties));
|
|
148
216
|
inputGraph.nodes().forEach((v) => {
|
|
149
217
|
const node = canonicalize(inputGraph.node(v));
|
|
150
|
-
const
|
|
151
|
-
|
|
152
|
-
if (defaultAttrs[key] === undefined) {
|
|
153
|
-
defaultAttrs[key] = nodeDefaults[key];
|
|
154
|
-
}
|
|
155
|
-
});
|
|
218
|
+
const defaultNode = Object.assign(Object.assign({}, nodeDefaults), node);
|
|
219
|
+
const defaultAttrs = selectNumberAttrs(defaultNode, nodeNumAttrs);
|
|
156
220
|
g.setNode(v, defaultAttrs);
|
|
157
221
|
g.setParent(v, inputGraph.parent(v));
|
|
158
222
|
});
|
|
@@ -163,7 +227,7 @@ const buildLayoutGraph = (inputGraph) => {
|
|
|
163
227
|
if (edge[key] !== undefined)
|
|
164
228
|
pickedProperties[key] = edge[key];
|
|
165
229
|
});
|
|
166
|
-
g.
|
|
230
|
+
g.setEdgeObj(e, Object.assign({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pickedProperties));
|
|
167
231
|
});
|
|
168
232
|
return g;
|
|
169
233
|
};
|
|
@@ -215,18 +279,22 @@ const injectEdgeLabelProxies = (g) => {
|
|
|
215
279
|
if (edge.width && edge.height) {
|
|
216
280
|
const v = g.node(e.v);
|
|
217
281
|
const w = g.node(e.w);
|
|
218
|
-
const label = {
|
|
219
|
-
|
|
282
|
+
const label = {
|
|
283
|
+
e,
|
|
284
|
+
rank: (w.rank - v.rank) / 2 + v.rank,
|
|
285
|
+
};
|
|
286
|
+
addDummyNode(g, "edge-proxy", label, "_ep");
|
|
220
287
|
}
|
|
221
288
|
});
|
|
222
289
|
};
|
|
223
290
|
const assignRankMinMax = (g) => {
|
|
224
291
|
let maxRank = 0;
|
|
225
292
|
g.nodes().forEach((v) => {
|
|
293
|
+
var _a, _b;
|
|
226
294
|
const node = g.node(v);
|
|
227
295
|
if (node.borderTop) {
|
|
228
|
-
node.minRank = g.node(node.borderTop).rank;
|
|
229
|
-
node.maxRank = g.node(node.borderBottom).rank;
|
|
296
|
+
node.minRank = (_a = g.node(node.borderTop)) === null || _a === void 0 ? void 0 : _a.rank;
|
|
297
|
+
node.maxRank = (_b = g.node(node.borderBottom)) === null || _b === void 0 ? void 0 : _b.rank;
|
|
230
298
|
maxRank = Math.max(maxRank, node.maxRank || -Infinity);
|
|
231
299
|
}
|
|
232
300
|
});
|
|
@@ -242,9 +310,9 @@ const removeEdgeLabelProxies = (g) => {
|
|
|
242
310
|
});
|
|
243
311
|
};
|
|
244
312
|
const translateGraph = (g) => {
|
|
245
|
-
let minX
|
|
313
|
+
let minX;
|
|
246
314
|
let maxX = 0;
|
|
247
|
-
let minY
|
|
315
|
+
let minY;
|
|
248
316
|
let maxY = 0;
|
|
249
317
|
const graphLabel = g.graph();
|
|
250
318
|
const marginX = graphLabel.marginx || 0;
|
|
@@ -257,18 +325,26 @@ const translateGraph = (g) => {
|
|
|
257
325
|
const w = attrs.width;
|
|
258
326
|
const h = attrs.height;
|
|
259
327
|
if (!isNaN(x) && !isNaN(w)) {
|
|
328
|
+
if (minX === undefined) {
|
|
329
|
+
minX = x - w / 2;
|
|
330
|
+
}
|
|
260
331
|
minX = Math.min(minX, x - w / 2);
|
|
261
332
|
maxX = Math.max(maxX, x + w / 2);
|
|
262
333
|
}
|
|
263
334
|
if (!isNaN(y) && !isNaN(h)) {
|
|
335
|
+
if (minY === undefined) {
|
|
336
|
+
minY = y - h / 2;
|
|
337
|
+
}
|
|
264
338
|
minY = Math.min(minY, y - h / 2);
|
|
265
339
|
maxY = Math.max(maxY, y + h / 2);
|
|
266
340
|
}
|
|
267
341
|
};
|
|
268
|
-
g.nodes().forEach((v) => {
|
|
342
|
+
g.nodes().forEach((v) => {
|
|
343
|
+
getExtremes(g.node(v));
|
|
344
|
+
});
|
|
269
345
|
g.edges().forEach((e) => {
|
|
270
346
|
const edge = g.edge(e);
|
|
271
|
-
if (edge.hasOwnProperty("x")) {
|
|
347
|
+
if (edge === null || edge === void 0 ? void 0 : edge.hasOwnProperty("x")) {
|
|
272
348
|
getExtremes(edge);
|
|
273
349
|
}
|
|
274
350
|
});
|
|
@@ -276,8 +352,10 @@ const translateGraph = (g) => {
|
|
|
276
352
|
minY -= marginY;
|
|
277
353
|
g.nodes().forEach((v) => {
|
|
278
354
|
const node = g.node(v);
|
|
279
|
-
node
|
|
280
|
-
|
|
355
|
+
if (node) {
|
|
356
|
+
node.x -= minX;
|
|
357
|
+
node.y -= minY;
|
|
358
|
+
}
|
|
281
359
|
});
|
|
282
360
|
g.edges().forEach((e) => {
|
|
283
361
|
var _a;
|
|
@@ -312,14 +390,14 @@ const assignNodeIntersects = (g) => {
|
|
|
312
390
|
p1 = edge.points[0];
|
|
313
391
|
p2 = edge.points[edge.points.length - 1];
|
|
314
392
|
}
|
|
315
|
-
edge.points.unshift(
|
|
316
|
-
edge.points.push(
|
|
393
|
+
edge.points.unshift(intersectRect(nodeV, p1));
|
|
394
|
+
edge.points.push(intersectRect(nodeW, p2));
|
|
317
395
|
});
|
|
318
396
|
};
|
|
319
397
|
const fixupEdgeLabelCoords = (g) => {
|
|
320
398
|
g.edges().forEach((e) => {
|
|
321
399
|
const edge = g.edge(e);
|
|
322
|
-
if (edge.hasOwnProperty("x")) {
|
|
400
|
+
if (edge === null || edge === void 0 ? void 0 : edge.hasOwnProperty("x")) {
|
|
323
401
|
if (edge.labelpos === "l" || edge.labelpos === "r") {
|
|
324
402
|
edge.width -= edge.labeloffset;
|
|
325
403
|
}
|
|
@@ -336,9 +414,10 @@ const fixupEdgeLabelCoords = (g) => {
|
|
|
336
414
|
};
|
|
337
415
|
const reversePointsForReversedEdges = (g) => {
|
|
338
416
|
g.edges().forEach((e) => {
|
|
417
|
+
var _a;
|
|
339
418
|
const edge = g.edge(e);
|
|
340
419
|
if (edge.reversed) {
|
|
341
|
-
edge.points.reverse();
|
|
420
|
+
(_a = edge.points) === null || _a === void 0 ? void 0 : _a.reverse();
|
|
342
421
|
}
|
|
343
422
|
});
|
|
344
423
|
};
|
|
@@ -358,7 +437,8 @@ const removeBorderNodes = (g) => {
|
|
|
358
437
|
}
|
|
359
438
|
});
|
|
360
439
|
g.nodes().forEach((v) => {
|
|
361
|
-
|
|
440
|
+
var _a;
|
|
441
|
+
if (((_a = g.node(v)) === null || _a === void 0 ? void 0 : _a.dummy) === "border") {
|
|
362
442
|
g.removeNode(v);
|
|
363
443
|
}
|
|
364
444
|
});
|
|
@@ -371,12 +451,12 @@ const removeSelfEdges = (g) => {
|
|
|
371
451
|
node.selfEdges = [];
|
|
372
452
|
}
|
|
373
453
|
node.selfEdges.push({ e, label: g.edge(e) });
|
|
374
|
-
g.
|
|
454
|
+
g.removeEdgeObj(e);
|
|
375
455
|
}
|
|
376
456
|
});
|
|
377
457
|
};
|
|
378
458
|
const insertSelfEdges = (g) => {
|
|
379
|
-
const layers =
|
|
459
|
+
const layers = buildLayerMatrix(g);
|
|
380
460
|
layers === null || layers === void 0 ? void 0 : layers.forEach((layer) => {
|
|
381
461
|
let orderShift = 0;
|
|
382
462
|
layer === null || layer === void 0 ? void 0 : layer.forEach((v, i) => {
|
|
@@ -384,13 +464,13 @@ const insertSelfEdges = (g) => {
|
|
|
384
464
|
const node = g.node(v);
|
|
385
465
|
node.order = i + orderShift;
|
|
386
466
|
(_a = node.selfEdges) === null || _a === void 0 ? void 0 : _a.forEach((selfEdge) => {
|
|
387
|
-
|
|
467
|
+
addDummyNode(g, "selfedge", {
|
|
388
468
|
width: selfEdge.label.width,
|
|
389
469
|
height: selfEdge.label.height,
|
|
390
470
|
rank: node.rank,
|
|
391
|
-
order: i +
|
|
471
|
+
order: i + ++orderShift,
|
|
392
472
|
e: selfEdge.e,
|
|
393
|
-
label: selfEdge.label
|
|
473
|
+
label: selfEdge.label,
|
|
394
474
|
}, "_se");
|
|
395
475
|
});
|
|
396
476
|
delete node.selfEdges;
|
|
@@ -406,14 +486,14 @@ const positionSelfEdges = (g) => {
|
|
|
406
486
|
const y = selfNode.y;
|
|
407
487
|
const dx = node.x - x;
|
|
408
488
|
const dy = selfNode.height / 2;
|
|
409
|
-
g.
|
|
489
|
+
g.setEdgeObj(node.e, node.label);
|
|
410
490
|
g.removeNode(v);
|
|
411
491
|
node.label.points = [
|
|
412
|
-
{ x: x + 2 * dx / 3, y: y - dy },
|
|
413
|
-
{ x: x + 5 * dx / 6, y: y - dy },
|
|
492
|
+
{ x: x + (2 * dx) / 3, y: y - dy },
|
|
493
|
+
{ x: x + (5 * dx) / 6, y: y - dy },
|
|
414
494
|
{ y, x: x + dx },
|
|
415
|
-
{ x: x + 5 * dx / 6, y: y + dy },
|
|
416
|
-
{ x: x + 2 * dx / 3, y: y + dy }
|
|
495
|
+
{ x: x + (5 * dx) / 6, y: y + dy },
|
|
496
|
+
{ x: x + (2 * dx) / 3, y: y + dy },
|
|
417
497
|
];
|
|
418
498
|
node.label.x = node.x;
|
|
419
499
|
node.label.y = node.y;
|
|
@@ -432,8 +512,7 @@ const selectNumberAttrs = (obj, attrs) => {
|
|
|
432
512
|
const canonicalize = (attrs = {}) => {
|
|
433
513
|
const newAttrs = {};
|
|
434
514
|
Object.keys(attrs).forEach((k) => {
|
|
435
|
-
|
|
436
|
-
newAttrs[k.toLowerCase()] = v;
|
|
515
|
+
newAttrs[k.toLowerCase()] = attrs[k];
|
|
437
516
|
});
|
|
438
517
|
return newAttrs;
|
|
439
518
|
};
|