From d0173cf2b0552aef3f95b272f4c65676321cd177 Mon Sep 17 00:00:00 2001 From: Tim Lorsbach Date: Wed, 10 Jun 2026 21:51:21 +0200 Subject: [PATCH] Initial Zoom, fix AD Creation --- epdb/models.py | 18 +++++++++++++++++- static/js/pw.js | 9 +++++---- .../modals/collections/new_model_modal.html | 4 ++-- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/epdb/models.py b/epdb/models.py index 4afc1745..0f64f019 100644 --- a/epdb/models.py +++ b/epdb/models.py @@ -2205,7 +2205,23 @@ class Pathway(EnviPathModel, AliasMixin, ScenarioMixin, AdditionalInformationMix depth_map[0] = list() processed = set() - for n in self.root_nodes: + data_driven_root_nodes = self.node_set.all().annotate( + prod_cnt=Count('edge_products'), + educt_cnt=Count('edge_educts') + ).filter(prod_cnt=0, educt_cnt__gt=0).distinct() + + # Eval QuerySet + root_nodes_by_depth = list(self.root_nodes) + + data_driven_root_nodes.update(depth=0) + root_nodes = [n for n in data_driven_root_nodes] + + for n in root_nodes_by_depth: + if n not in root_nodes: + if len(n.edge_products.all()) == 0: + root_nodes.append(n) + + for n in root_nodes: depth_map[0].append(n) # At most depth len(nodes) is possible diff --git a/static/js/pw.js b/static/js/pw.js index 4d87ca46..80c964a6 100644 --- a/static/js/pw.js +++ b/static/js/pw.js @@ -22,7 +22,7 @@ function predictFromNode(url) { // data = {{ pathway.d3_json | safe }}; // elem = 'vizdiv' function draw(pathway, elem) { - + const initialzoom = 2.5 const nodeRadius = 20; const linkDistance = 100; const chargeStrength = -200; @@ -63,7 +63,7 @@ function draw(pathway, elem) { node.fx = width / 2 + depthMap.get(node.depth) * horizontalSpacing - ((nodesInLevel - 1) * horizontalSpacing) / 2; } - node.fy = node.depth * levelSpacing + 50; + node.fy = (node.depth + initialzoom + 0.5) * levelSpacing + 50; depthMap.set(node.depth, depthMap.get(node.depth) + 1); }); } @@ -572,11 +572,12 @@ function draw(pathway, elem) { .scaleExtent([0.5, 5]) .on("zoom", (event) => { zoomable.attr("transform", event.transform); - }); + }) + // Apply zoom to the SVG element - this enables wheel zoom svg.call(zoom); - + svg.call(zoom.scaleBy, initialzoom); // Also apply zoom to container to catch events that might not reach SVG // This ensures drag-to-pan works even when clicking on empty space container.call(zoom); diff --git a/templates/modals/collections/new_model_modal.html b/templates/modals/collections/new_model_modal.html index 32b6ddfb..7c81b72b 100644 --- a/templates/modals/collections/new_model_modal.html +++ b/templates/modals/collections/new_model_modal.html @@ -65,11 +65,11 @@ }, get showMlrr() { - return this.selectedType === 'mlrr'; + return this.selectedType === 'ml-relative-reasoning'; }, get showRbrr() { - return this.selectedType === 'rbrr'; + return this.selectedType === 'rule-based-relative-reasoning'; }, get showEnviformer() {