diff --git a/frontends/web/images/icons/icon_copy.svg b/frontends/web/images/icons/icon_copy.svg new file mode 100644 index 0000000..b768f2f --- /dev/null +++ b/frontends/web/images/icons/icon_copy.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/frontends/web/scripts/TabController.js b/frontends/web/scripts/TabController.js index 7bb2a5d..2c69d9f 100644 --- a/frontends/web/scripts/TabController.js +++ b/frontends/web/scripts/TabController.js @@ -1498,6 +1498,14 @@ config: this.cachedMermaid = null; this.draw(); } + + copyNodeText() { + if (this._selectedNode == null) { + logEvent("No selected node"); + return; + } + navigator.clipboard.writeText(this._selectedNode.overrideLabel ?? this._selectedNode.label); + } } const NODE_COMPUTED_PROPERTIES = "computedProperties"; diff --git a/frontends/web/scripts/commandPalette.js b/frontends/web/scripts/commandPalette.js index 244141f..27c439e 100644 --- a/frontends/web/scripts/commandPalette.js +++ b/frontends/web/scripts/commandPalette.js @@ -432,6 +432,16 @@ class CommandPalette { event_overrideLabel(); }, }, + { + id: "CopyNodeText", + title: "Copy the text of the selected node to the clipboard", + hotkey: "Ctrl+c", + icon: iconFor("copy"), + section: "General", + handler: () => { + event_copyNodeText(); + } + } ]; } } diff --git a/frontends/web/scripts/main.js b/frontends/web/scripts/main.js index 4834395..79895e3 100644 --- a/frontends/web/scripts/main.js +++ b/frontends/web/scripts/main.js @@ -136,6 +136,12 @@ function event_deleteSubtree() { }); } +function event_copyNodeText() { + window.tabsController.onCurrent((_, controller) => { + controller.copyNodeText(); + }); +} + function event_shareGraph() { Swal.fire({ title: "Share graph", @@ -749,7 +755,7 @@ function initiateConnectionUrl() { function initiateHotkeys() { hotkeys( - "esc,ctrl+z,ctrl+shift+z,ctrl+y,ctrl+s,ctrl+alt+s,ctrl+o,ctrl+i,ctrl+alt+shift+i,ctrl+q,ctrl+f,ctrl+shift+f,ctrl+k,ctrl+e,ctrl+shift+q,ctrl+shift+p,delete,ctrl+delete,home,ctrl+home,shift+`,/,shift+/,ctrl+shift+/,ctrl+a,1,2,3,4,5,6,7,8,9", + "esc,ctrl+z,ctrl+shift+z,ctrl+y,ctrl+s,ctrl+alt+s,ctrl+o,ctrl+i,ctrl+alt+shift+i,ctrl+q,ctrl+f,ctrl+shift+f,ctrl+k,ctrl+e,ctrl+shift+q,ctrl+shift+p,delete,ctrl+delete,ctrl+c,home,ctrl+home,shift+`,/,shift+/,ctrl+shift+/,ctrl+a,1,2,3,4,5,6,7,8,9", function (event, handler) { window.commandPalette.close(); switch (handler.key) { @@ -793,6 +799,9 @@ function initiateHotkeys() { case "ctrl+delete": event_deleteSubtree(); return false; + case "ctrl+c": + event_copyNodeText(); + return false; case "home": event_focusOnSelected(); return false;