@yuneta/gobj-ui 7.5.3 → 7.5.5
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 +20 -15
- package/dist/gobj-ui.es.js +20 -15
- package/package.json +1 -1
- package/src/c_g6_nodes_tree.js +31 -33
package/dist/gobj-ui.cjs.js
CHANGED
|
@@ -55701,28 +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
|
-
|
|
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
|
+
}
|
|
55724
55727
|
}
|
|
55725
|
-
return
|
|
55728
|
+
return {
|
|
55729
|
+
saved,
|
|
55730
|
+
total
|
|
55731
|
+
};
|
|
55726
55732
|
}
|
|
55727
55733
|
/************************************************************
|
|
55728
55734
|
* Choose a layout for a treedb nobody has arranged yet.
|
|
@@ -55741,9 +55747,9 @@ function has_saved_geometry(gobj) {
|
|
|
55741
55747
|
************************************************************/
|
|
55742
55748
|
function auto_layout(gobj) {
|
|
55743
55749
|
let priv = gobj.priv;
|
|
55744
|
-
(0, _yuneta_gobj_js.log_warning)(`${(0, _yuneta_gobj_js.gobj_short_name)(gobj)}: auto_layout: asked='${priv._layout_asked}' saved=${has_saved_geometry(gobj)} graph=${!!priv.graph} topics=${Object.keys(priv.records || {}).length} gprops=${JSON.stringify(Object.keys(priv._graph_properties || {}))}`);
|
|
55745
55750
|
if (priv._layout_asked) return;
|
|
55746
|
-
|
|
55751
|
+
let g = count_saved_geometry(gobj);
|
|
55752
|
+
if (g.total > 0 && g.saved * 2 > g.total) return;
|
|
55747
55753
|
if (!priv.graph) return;
|
|
55748
55754
|
let name = "dagre";
|
|
55749
55755
|
(0, _yuneta_gobj_js.gobj_write_attr)(gobj, "layout", name);
|
|
@@ -55753,7 +55759,6 @@ function auto_layout(gobj) {
|
|
|
55753
55759
|
(0, _yuneta_gobj_js.log_error)(`${(0, _yuneta_gobj_js.gobj_short_name)(gobj)}: cannot set the '${name}' layout: ${e}`);
|
|
55754
55760
|
return;
|
|
55755
55761
|
}
|
|
55756
|
-
(0, _yuneta_gobj_js.log_warning)(`${(0, _yuneta_gobj_js.gobj_short_name)(gobj)}: auto_layout: set '${name}'`);
|
|
55757
55762
|
(0, _yuneta_gobj_js.gobj_publish_event)(gobj, "EV_LAYOUT_AUTOSET", { layout: name });
|
|
55758
55763
|
}
|
|
55759
55764
|
/************************************************************
|
package/dist/gobj-ui.es.js
CHANGED
|
@@ -55688,28 +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
|
-
|
|
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
|
+
}
|
|
55711
55714
|
}
|
|
55712
|
-
return
|
|
55715
|
+
return {
|
|
55716
|
+
saved,
|
|
55717
|
+
total
|
|
55718
|
+
};
|
|
55713
55719
|
}
|
|
55714
55720
|
/************************************************************
|
|
55715
55721
|
* Choose a layout for a treedb nobody has arranged yet.
|
|
@@ -55728,9 +55734,9 @@ function has_saved_geometry(gobj) {
|
|
|
55728
55734
|
************************************************************/
|
|
55729
55735
|
function auto_layout(gobj) {
|
|
55730
55736
|
let priv = gobj.priv;
|
|
55731
|
-
log_warning(`${gobj_short_name(gobj)}: auto_layout: asked='${priv._layout_asked}' saved=${has_saved_geometry(gobj)} graph=${!!priv.graph} topics=${Object.keys(priv.records || {}).length} gprops=${JSON.stringify(Object.keys(priv._graph_properties || {}))}`);
|
|
55732
55737
|
if (priv._layout_asked) return;
|
|
55733
|
-
|
|
55738
|
+
let g = count_saved_geometry(gobj);
|
|
55739
|
+
if (g.total > 0 && g.saved * 2 > g.total) return;
|
|
55734
55740
|
if (!priv.graph) return;
|
|
55735
55741
|
let name = "dagre";
|
|
55736
55742
|
gobj_write_attr(gobj, "layout", name);
|
|
@@ -55740,7 +55746,6 @@ function auto_layout(gobj) {
|
|
|
55740
55746
|
log_error(`${gobj_short_name(gobj)}: cannot set the '${name}' layout: ${e}`);
|
|
55741
55747
|
return;
|
|
55742
55748
|
}
|
|
55743
|
-
log_warning(`${gobj_short_name(gobj)}: auto_layout: set '${name}'`);
|
|
55744
55749
|
gobj_publish_event(gobj, "EV_LAYOUT_AUTOSET", { layout: name });
|
|
55745
55750
|
}
|
|
55746
55751
|
/************************************************************
|
package/package.json
CHANGED
package/src/c_g6_nodes_tree.js
CHANGED
|
@@ -4495,52 +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
|
-
|
|
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++;
|
|
4539
4537
|
}
|
|
4540
4538
|
}
|
|
4541
4539
|
}
|
|
4542
4540
|
|
|
4543
|
-
return
|
|
4541
|
+
return {saved: saved, total: total};
|
|
4544
4542
|
}
|
|
4545
4543
|
|
|
4546
4544
|
/************************************************************
|
|
@@ -4562,17 +4560,18 @@ function auto_layout(gobj)
|
|
|
4562
4560
|
{
|
|
4563
4561
|
let priv = gobj.priv;
|
|
4564
4562
|
|
|
4565
|
-
log_warning(`${gobj_short_name(gobj)}: auto_layout: ` +
|
|
4566
|
-
`asked='${priv._layout_asked}' ` +
|
|
4567
|
-
`saved=${has_saved_geometry(gobj)} ` +
|
|
4568
|
-
`graph=${!!priv.graph} ` +
|
|
4569
|
-
`topics=${Object.keys(priv.records || {}).length} ` +
|
|
4570
|
-
`gprops=${JSON.stringify(Object.keys(priv._graph_properties || {}))}`);
|
|
4571
|
-
|
|
4572
4563
|
if(priv._layout_asked) {
|
|
4573
4564
|
return; /* the user picked one for this treedb */
|
|
4574
4565
|
}
|
|
4575
|
-
|
|
4566
|
+
/* MOST of the nodes, not one of them.
|
|
4567
|
+
*
|
|
4568
|
+
* The app saves the position it invented as readily as one a human
|
|
4569
|
+
* chose, so a single stored coordinate proves nothing: the treedb
|
|
4570
|
+
* that forced this had exactly ONE node of 126 carrying a geometry,
|
|
4571
|
+
* and it was `{x:100, y:100}` — the first cascade slot, saved. One
|
|
4572
|
+
* leftover is not an arrangement. A majority is. */
|
|
4573
|
+
let g = count_saved_geometry(gobj);
|
|
4574
|
+
if(g.total > 0 && g.saved * 2 > g.total) {
|
|
4576
4575
|
return; /* somebody arranged it: leave it alone */
|
|
4577
4576
|
}
|
|
4578
4577
|
if(!priv.graph) {
|
|
@@ -4589,7 +4588,6 @@ function auto_layout(gobj)
|
|
|
4589
4588
|
}
|
|
4590
4589
|
/* The toolbar's select was filled before the data arrived, so it is
|
|
4591
4590
|
* still showing `manual`: tell it what the graph is actually doing. */
|
|
4592
|
-
log_warning(`${gobj_short_name(gobj)}: auto_layout: set '${name}'`);
|
|
4593
4591
|
gobj_publish_event(gobj, "EV_LAYOUT_AUTOSET", {layout: name});
|
|
4594
4592
|
}
|
|
4595
4593
|
|