Skip to content

Commit 20af673

Browse files
author
Yoav Sternberg
committed
✨ Improve jump to node by edge
1 parent 4f86311 commit 20af673

File tree

1 file changed

+28
-7
lines changed

1 file changed

+28
-7
lines changed

frontends/web/scripts/TabController.js

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -483,12 +483,19 @@ config:
483483
}
484484
}
485485

486-
onEdgeClick(src, dst) {
487-
const selectedId = this._selectedNode?.id;
488-
if (selectedId == src) {
489-
this.selectNode(dst, false, true);
490-
} else if (selectedId == dst) {
486+
onEdgeClick(src, dest, event, shouldScroll) {
487+
const forceSrc = event.altKey
488+
const forceDest = event.shiftKey
489+
490+
const srcElement = this.#getDomElementFromId(src)
491+
const destElement = this.#getDomElementFromId(dest)
492+
if (forceSrc || (!forceDest && this.#getDistance(event, srcElement) < this.#getDistance(event, destElement))) {
491493
this.selectNode(src, false, true);
494+
} else {
495+
this.selectNode(dest, false, true);
496+
}
497+
if (shouldScroll) {
498+
this.resetScrollingToSelected();
492499
}
493500
}
494501

@@ -721,7 +728,11 @@ config:
721728
const dst = parseInt(
722729
classes.filter((it) => it.startsWith("LE-N"))[0].substring(4)
723730
);
724-
_this.onEdgeRightClick(src, dst);
731+
if (event.ctrlKey) {
732+
_this.onEdgeClick(src, dst, event, true);
733+
} else {
734+
_this.onEdgeRightClick(src, dst);
735+
}
725736
event.preventDefault();
726737
event.stopPropagation();
727738
});
@@ -733,7 +744,7 @@ config:
733744
const dst = parseInt(
734745
classes.filter((it) => it.startsWith("LE-N"))[0].substring(4)
735746
);
736-
_this.onEdgeClick(src, dst);
747+
_this.onEdgeClick(src, dst, event, event.ctrlKey);
737748
event.preventDefault();
738749
event.stopPropagation();
739750
});
@@ -756,6 +767,16 @@ config:
756767
});
757768
}
758769

770+
#getDistance(event, element) {
771+
const rect = element.getBoundingClientRect();
772+
const elemCenterX = rect.left + rect.width / 2;
773+
const elemCenterY = rect.top + rect.height / 2;
774+
775+
const dx = event.clientX - elemCenterX;
776+
const dy = event.clientY - elemCenterY;
777+
return Math.sqrt(dx * dx + dy * dy);
778+
}
779+
759780
reset(shouldSupportUndo = false) {
760781
if (shouldSupportUndo) {
761782
// Add all node and edges to undo

0 commit comments

Comments
 (0)