@yuneta/gobj-ui 7.5.4 → 7.5.6
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/gobj-ui.cjs.js +32 -19
- package/dist/gobj-ui.es.js +32 -19
- package/package.json +1 -1
- package/src/c_g6_nodes_tree.js +36 -35
package/dist/gobj-ui.cjs.js
CHANGED
|
@@ -55701,31 +55701,34 @@ function show_node_detail_popover(gobj, node_id) {
|
|
|
55701
55701
|
* junction diamonds get their neutral fill/stroke re-themed.
|
|
55702
55702
|
************************************************************/
|
|
55703
55703
|
/************************************************************
|
|
55704
|
-
*
|
|
55705
|
-
*
|
|
55706
|
-
*
|
|
55707
|
-
* older data, in a `_geometry` on the record itself. Both are read.
|
|
55704
|
+
* How many nodes of this treedb carry a saved position, and how many
|
|
55705
|
+
* there are. Positions live in `__graphs__` (per topic, per node) and,
|
|
55706
|
+
* on older data, in a `_geometry` on the record itself; both are read.
|
|
55708
55707
|
************************************************************/
|
|
55709
55708
|
function geometry_has_position(g) {
|
|
55710
55709
|
if (!(0, _yuneta_gobj_js.is_object)(g)) return false;
|
|
55711
55710
|
return (0, _yuneta_gobj_js.is_number)(g.x) || (0, _yuneta_gobj_js.is_number)(g.y);
|
|
55712
55711
|
}
|
|
55713
|
-
function
|
|
55712
|
+
function count_saved_geometry(gobj) {
|
|
55714
55713
|
let priv = gobj.priv;
|
|
55715
|
-
|
|
55716
|
-
|
|
55717
|
-
if (!props || !(0, _yuneta_gobj_js.is_object)(props.nodes)) continue;
|
|
55718
|
-
for (let node_id of Object.keys(props.nodes)) if (geometry_has_position(props.nodes[node_id])) return true;
|
|
55719
|
-
}
|
|
55714
|
+
let saved = 0;
|
|
55715
|
+
let total = 0;
|
|
55720
55716
|
for (let topic of Object.keys(priv.records || {})) {
|
|
55721
55717
|
let records = priv.records[topic];
|
|
55722
55718
|
if (!(0, _yuneta_gobj_js.is_array)(records)) continue;
|
|
55723
|
-
|
|
55724
|
-
|
|
55725
|
-
|
|
55719
|
+
let props = priv._graph_properties ? priv._graph_properties[topic] : null;
|
|
55720
|
+
let nodes = props && (0, _yuneta_gobj_js.is_object)(props.nodes) ? props.nodes : null;
|
|
55721
|
+
for (let record of records) {
|
|
55722
|
+
if (!record) continue;
|
|
55723
|
+
total++;
|
|
55724
|
+
if (nodes && geometry_has_position(nodes[record.id])) saved++;
|
|
55725
|
+
else if (geometry_has_position(record._geometry)) saved++;
|
|
55726
55726
|
}
|
|
55727
55727
|
}
|
|
55728
|
-
return
|
|
55728
|
+
return {
|
|
55729
|
+
saved,
|
|
55730
|
+
total
|
|
55731
|
+
};
|
|
55729
55732
|
}
|
|
55730
55733
|
/************************************************************
|
|
55731
55734
|
* Choose a layout for a treedb nobody has arranged yet.
|
|
@@ -55744,10 +55747,20 @@ function has_saved_geometry(gobj) {
|
|
|
55744
55747
|
************************************************************/
|
|
55745
55748
|
function auto_layout(gobj) {
|
|
55746
55749
|
let priv = gobj.priv;
|
|
55747
|
-
|
|
55748
|
-
|
|
55749
|
-
|
|
55750
|
-
|
|
55750
|
+
if (priv._layout_asked) {
|
|
55751
|
+
(0, _yuneta_gobj_js.log_warning)(`${(0, _yuneta_gobj_js.gobj_short_name)(gobj)}: AL: bail asked='${priv._layout_asked}'`);
|
|
55752
|
+
return;
|
|
55753
|
+
}
|
|
55754
|
+
let g = count_saved_geometry(gobj);
|
|
55755
|
+
(0, _yuneta_gobj_js.log_warning)(`${(0, _yuneta_gobj_js.gobj_short_name)(gobj)}: AL: saved=${g.saved}/${g.total} graph=${!!priv.graph}`);
|
|
55756
|
+
if (g.total > 0 && g.saved * 2 > g.total) {
|
|
55757
|
+
(0, _yuneta_gobj_js.log_warning)(`${(0, _yuneta_gobj_js.gobj_short_name)(gobj)}: AL: bail majority`);
|
|
55758
|
+
return;
|
|
55759
|
+
}
|
|
55760
|
+
if (!priv.graph) {
|
|
55761
|
+
(0, _yuneta_gobj_js.log_warning)(`${(0, _yuneta_gobj_js.gobj_short_name)(gobj)}: AL: bail no graph`);
|
|
55762
|
+
return;
|
|
55763
|
+
}
|
|
55751
55764
|
let name = "dagre";
|
|
55752
55765
|
(0, _yuneta_gobj_js.gobj_write_attr)(gobj, "layout", name);
|
|
55753
55766
|
try {
|
|
@@ -55756,7 +55769,7 @@ function auto_layout(gobj) {
|
|
|
55756
55769
|
(0, _yuneta_gobj_js.log_error)(`${(0, _yuneta_gobj_js.gobj_short_name)(gobj)}: cannot set the '${name}' layout: ${e}`);
|
|
55757
55770
|
return;
|
|
55758
55771
|
}
|
|
55759
|
-
(0, _yuneta_gobj_js.log_warning)(`${(0, _yuneta_gobj_js.gobj_short_name)(gobj)}:
|
|
55772
|
+
(0, _yuneta_gobj_js.log_warning)(`${(0, _yuneta_gobj_js.gobj_short_name)(gobj)}: AL: set dagre, publishing`);
|
|
55760
55773
|
(0, _yuneta_gobj_js.gobj_publish_event)(gobj, "EV_LAYOUT_AUTOSET", { layout: name });
|
|
55761
55774
|
}
|
|
55762
55775
|
/************************************************************
|
package/dist/gobj-ui.es.js
CHANGED
|
@@ -55688,31 +55688,34 @@ function show_node_detail_popover(gobj, node_id) {
|
|
|
55688
55688
|
* junction diamonds get their neutral fill/stroke re-themed.
|
|
55689
55689
|
************************************************************/
|
|
55690
55690
|
/************************************************************
|
|
55691
|
-
*
|
|
55692
|
-
*
|
|
55693
|
-
*
|
|
55694
|
-
* older data, in a `_geometry` on the record itself. Both are read.
|
|
55691
|
+
* How many nodes of this treedb carry a saved position, and how many
|
|
55692
|
+
* there are. Positions live in `__graphs__` (per topic, per node) and,
|
|
55693
|
+
* on older data, in a `_geometry` on the record itself; both are read.
|
|
55695
55694
|
************************************************************/
|
|
55696
55695
|
function geometry_has_position(g) {
|
|
55697
55696
|
if (!is_object(g)) return false;
|
|
55698
55697
|
return is_number(g.x) || is_number(g.y);
|
|
55699
55698
|
}
|
|
55700
|
-
function
|
|
55699
|
+
function count_saved_geometry(gobj) {
|
|
55701
55700
|
let priv = gobj.priv;
|
|
55702
|
-
|
|
55703
|
-
|
|
55704
|
-
if (!props || !is_object(props.nodes)) continue;
|
|
55705
|
-
for (let node_id of Object.keys(props.nodes)) if (geometry_has_position(props.nodes[node_id])) return true;
|
|
55706
|
-
}
|
|
55701
|
+
let saved = 0;
|
|
55702
|
+
let total = 0;
|
|
55707
55703
|
for (let topic of Object.keys(priv.records || {})) {
|
|
55708
55704
|
let records = priv.records[topic];
|
|
55709
55705
|
if (!is_array(records)) continue;
|
|
55710
|
-
|
|
55711
|
-
|
|
55712
|
-
|
|
55706
|
+
let props = priv._graph_properties ? priv._graph_properties[topic] : null;
|
|
55707
|
+
let nodes = props && is_object(props.nodes) ? props.nodes : null;
|
|
55708
|
+
for (let record of records) {
|
|
55709
|
+
if (!record) continue;
|
|
55710
|
+
total++;
|
|
55711
|
+
if (nodes && geometry_has_position(nodes[record.id])) saved++;
|
|
55712
|
+
else if (geometry_has_position(record._geometry)) saved++;
|
|
55713
55713
|
}
|
|
55714
55714
|
}
|
|
55715
|
-
return
|
|
55715
|
+
return {
|
|
55716
|
+
saved,
|
|
55717
|
+
total
|
|
55718
|
+
};
|
|
55716
55719
|
}
|
|
55717
55720
|
/************************************************************
|
|
55718
55721
|
* Choose a layout for a treedb nobody has arranged yet.
|
|
@@ -55731,10 +55734,20 @@ function has_saved_geometry(gobj) {
|
|
|
55731
55734
|
************************************************************/
|
|
55732
55735
|
function auto_layout(gobj) {
|
|
55733
55736
|
let priv = gobj.priv;
|
|
55734
|
-
|
|
55735
|
-
|
|
55736
|
-
|
|
55737
|
-
|
|
55737
|
+
if (priv._layout_asked) {
|
|
55738
|
+
log_warning(`${gobj_short_name(gobj)}: AL: bail asked='${priv._layout_asked}'`);
|
|
55739
|
+
return;
|
|
55740
|
+
}
|
|
55741
|
+
let g = count_saved_geometry(gobj);
|
|
55742
|
+
log_warning(`${gobj_short_name(gobj)}: AL: saved=${g.saved}/${g.total} graph=${!!priv.graph}`);
|
|
55743
|
+
if (g.total > 0 && g.saved * 2 > g.total) {
|
|
55744
|
+
log_warning(`${gobj_short_name(gobj)}: AL: bail majority`);
|
|
55745
|
+
return;
|
|
55746
|
+
}
|
|
55747
|
+
if (!priv.graph) {
|
|
55748
|
+
log_warning(`${gobj_short_name(gobj)}: AL: bail no graph`);
|
|
55749
|
+
return;
|
|
55750
|
+
}
|
|
55738
55751
|
let name = "dagre";
|
|
55739
55752
|
gobj_write_attr(gobj, "layout", name);
|
|
55740
55753
|
try {
|
|
@@ -55743,7 +55756,7 @@ function auto_layout(gobj) {
|
|
|
55743
55756
|
log_error(`${gobj_short_name(gobj)}: cannot set the '${name}' layout: ${e}`);
|
|
55744
55757
|
return;
|
|
55745
55758
|
}
|
|
55746
|
-
log_warning(`${gobj_short_name(gobj)}:
|
|
55759
|
+
log_warning(`${gobj_short_name(gobj)}: AL: set dagre, publishing`);
|
|
55747
55760
|
gobj_publish_event(gobj, "EV_LAYOUT_AUTOSET", { layout: name });
|
|
55748
55761
|
}
|
|
55749
55762
|
/************************************************************
|
package/package.json
CHANGED
package/src/c_g6_nodes_tree.js
CHANGED
|
@@ -4495,54 +4495,50 @@ function show_node_detail_popover(gobj, node_id)
|
|
|
4495
4495
|
* junction diamonds get their neutral fill/stroke re-themed.
|
|
4496
4496
|
************************************************************/
|
|
4497
4497
|
/************************************************************
|
|
4498
|
-
*
|
|
4499
|
-
*
|
|
4500
|
-
*
|
|
4501
|
-
* older data, in a `_geometry` on the record itself. Both are read.
|
|
4498
|
+
* How many nodes of this treedb carry a saved position, and how many
|
|
4499
|
+
* there are. Positions live in `__graphs__` (per topic, per node) and,
|
|
4500
|
+
* on older data, in a `_geometry` on the record itself; both are read.
|
|
4502
4501
|
************************************************************/
|
|
4503
4502
|
function geometry_has_position(g)
|
|
4504
4503
|
{
|
|
4505
|
-
/* An EMPTY object is not a position. A treedb hands back
|
|
4506
|
-
* for a record nobody ever moved, and a
|
|
4507
|
-
* with no coordinates — both are
|
|
4508
|
-
*
|
|
4504
|
+
/* An EMPTY object is not a position. A treedb hands back
|
|
4505
|
+
* `_geometry: {}` for a record nobody ever moved, and a `__graphs__`
|
|
4506
|
+
* node entry can hold a port size with no coordinates — both are
|
|
4507
|
+
* objects, and taking either for "this was placed" is wrong. */
|
|
4509
4508
|
if(!is_object(g)) {
|
|
4510
4509
|
return false;
|
|
4511
4510
|
}
|
|
4512
4511
|
return is_number(g.x) || is_number(g.y);
|
|
4513
4512
|
}
|
|
4514
4513
|
|
|
4515
|
-
function
|
|
4514
|
+
function count_saved_geometry(gobj)
|
|
4516
4515
|
{
|
|
4517
4516
|
let priv = gobj.priv;
|
|
4518
|
-
|
|
4519
|
-
|
|
4520
|
-
let props = priv._graph_properties[topic];
|
|
4521
|
-
if(!props || !is_object(props.nodes)) {
|
|
4522
|
-
continue;
|
|
4523
|
-
}
|
|
4524
|
-
for(let node_id of Object.keys(props.nodes)) {
|
|
4525
|
-
if(geometry_has_position(props.nodes[node_id])) {
|
|
4526
|
-
return true;
|
|
4527
|
-
}
|
|
4528
|
-
}
|
|
4529
|
-
}
|
|
4517
|
+
let saved = 0;
|
|
4518
|
+
let total = 0;
|
|
4530
4519
|
|
|
4531
4520
|
for(let topic of Object.keys(priv.records || {})) {
|
|
4532
4521
|
let records = priv.records[topic];
|
|
4533
4522
|
if(!is_array(records)) {
|
|
4534
4523
|
continue;
|
|
4535
4524
|
}
|
|
4525
|
+
let props = priv._graph_properties? priv._graph_properties[topic] : null;
|
|
4526
|
+
let nodes = (props && is_object(props.nodes))? props.nodes : null;
|
|
4527
|
+
|
|
4536
4528
|
for(let record of records) {
|
|
4537
|
-
if(record
|
|
4538
|
-
|
|
4539
|
-
|
|
4540
|
-
|
|
4529
|
+
if(!record) {
|
|
4530
|
+
continue;
|
|
4531
|
+
}
|
|
4532
|
+
total++;
|
|
4533
|
+
if(nodes && geometry_has_position(nodes[record.id])) {
|
|
4534
|
+
saved++;
|
|
4535
|
+
} else if(geometry_has_position(record._geometry)) {
|
|
4536
|
+
saved++;
|
|
4541
4537
|
}
|
|
4542
4538
|
}
|
|
4543
4539
|
}
|
|
4544
4540
|
|
|
4545
|
-
return
|
|
4541
|
+
return {saved: saved, total: total};
|
|
4546
4542
|
}
|
|
4547
4543
|
|
|
4548
4544
|
/************************************************************
|
|
@@ -4564,20 +4560,25 @@ function auto_layout(gobj)
|
|
|
4564
4560
|
{
|
|
4565
4561
|
let priv = gobj.priv;
|
|
4566
4562
|
|
|
4567
|
-
log_warning(`${gobj_short_name(gobj)}: auto_layout: ` +
|
|
4568
|
-
`asked='${priv._layout_asked}' ` +
|
|
4569
|
-
`saved=${has_saved_geometry(gobj)} ` +
|
|
4570
|
-
`graph=${!!priv.graph} ` +
|
|
4571
|
-
`topics=${Object.keys(priv.records || {}).length} ` +
|
|
4572
|
-
`gprops=${JSON.stringify(Object.keys(priv._graph_properties || {}))}`);
|
|
4573
|
-
|
|
4574
4563
|
if(priv._layout_asked) {
|
|
4564
|
+
log_warning(`${gobj_short_name(gobj)}: AL: bail asked='${priv._layout_asked}'`);
|
|
4575
4565
|
return; /* the user picked one for this treedb */
|
|
4576
4566
|
}
|
|
4577
|
-
|
|
4567
|
+
/* MOST of the nodes, not one of them.
|
|
4568
|
+
*
|
|
4569
|
+
* The app saves the position it invented as readily as one a human
|
|
4570
|
+
* chose, so a single stored coordinate proves nothing: the treedb
|
|
4571
|
+
* that forced this had exactly ONE node of 126 carrying a geometry,
|
|
4572
|
+
* and it was `{x:100, y:100}` — the first cascade slot, saved. One
|
|
4573
|
+
* leftover is not an arrangement. A majority is. */
|
|
4574
|
+
let g = count_saved_geometry(gobj);
|
|
4575
|
+
log_warning(`${gobj_short_name(gobj)}: AL: saved=${g.saved}/${g.total} graph=${!!priv.graph}`);
|
|
4576
|
+
if(g.total > 0 && g.saved * 2 > g.total) {
|
|
4577
|
+
log_warning(`${gobj_short_name(gobj)}: AL: bail majority`);
|
|
4578
4578
|
return; /* somebody arranged it: leave it alone */
|
|
4579
4579
|
}
|
|
4580
4580
|
if(!priv.graph) {
|
|
4581
|
+
log_warning(`${gobj_short_name(gobj)}: AL: bail no graph`);
|
|
4581
4582
|
return;
|
|
4582
4583
|
}
|
|
4583
4584
|
|
|
@@ -4591,7 +4592,7 @@ function auto_layout(gobj)
|
|
|
4591
4592
|
}
|
|
4592
4593
|
/* The toolbar's select was filled before the data arrived, so it is
|
|
4593
4594
|
* still showing `manual`: tell it what the graph is actually doing. */
|
|
4594
|
-
log_warning(`${gobj_short_name(gobj)}:
|
|
4595
|
+
log_warning(`${gobj_short_name(gobj)}: AL: set dagre, publishing`);
|
|
4595
4596
|
gobj_publish_event(gobj, "EV_LAYOUT_AUTOSET", {layout: name});
|
|
4596
4597
|
}
|
|
4597
4598
|
|