This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch tui-web-headless-defaults
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 98359536fc281b6f740edd3d662d6e66d7d00388
Author: Claus Ibsen <[email protected]>
AuthorDate: Sun Oct 25 20:06:40 2026 +0100

    chore: camel-jbang - the footer of the route diagram shows the keys of the 
go to node popup while it is open
    
    What is typed goes into the popup, so the diagram's keys (c source, +/- 
zoom,
    Space fold) did not apply while the footer still listed them.
    
    Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
    Signed-off-by: Claus Ibsen <[email protected]>
---
 .../dsl/jbang/core/commands/tui/AbstractDiagramTab.java  | 16 ++++++++++++++++
 .../camel/dsl/jbang/core/commands/tui/DiagramTab.java    |  3 +++
 .../camel/dsl/jbang/core/commands/tui/RoutesTab.java     |  3 +++
 .../jbang/core/commands/tui/DiagramTabRenderTest.java    | 13 +++++++++++++
 4 files changed, 35 insertions(+)

diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/AbstractDiagramTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/AbstractDiagramTab.java
index 26dad2c67be3..668d0eb88c54 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/AbstractDiagramTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/AbstractDiagramTab.java
@@ -19,8 +19,10 @@ package org.apache.camel.dsl.jbang.core.commands.tui;
 import java.util.ArrayDeque;
 import java.util.Deque;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
+import dev.tamboui.text.Span;
 import dev.tamboui.tui.event.KeyCode;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.tui.event.MouseEvent;
@@ -114,6 +116,20 @@ abstract class AbstractDiagramTab extends AbstractTab {
         return true;
     }
 
+    /**
+     * The footer of the go to node popup while it is open, in place of the 
diagram's: what is typed goes into the
+     * popup, so the keys of the diagram do not apply.
+     */
+    protected final boolean renderGotoNodeFooter(List<Span> spans) {
+        if (!gotoNodePopup.isVisible()) {
+            return false;
+        }
+        TuiHelper.hint(spans, "type", "filter");
+        TuiHelper.hint(spans, "Enter", "go to");
+        TuiHelper.hintLast(spans, "Esc", "back");
+        return true;
+    }
+
     /** c: the source of the selected node of a route, or of the route 
selected in the topology. */
     protected final boolean handleSourceKey(KeyEvent ke) {
         if (!diagram.isShowDiagram() || !ke.isChar('c')) {
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTab.java
index d4caf3728253..b643834187ca 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTab.java
@@ -683,6 +683,9 @@ class DiagramTab extends AbstractDiagramTab {
 
     @Override
     public void renderFooter(List<Span> spans) {
+        if (renderGotoNodeFooter(spans)) {
+            return;
+        }
         if (sourceViewer.isVisible()) {
             sourceViewer.renderFooter(spans);
             return;
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RoutesTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RoutesTab.java
index b3bafca9928d..9cfcc7dd5a90 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RoutesTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RoutesTab.java
@@ -757,6 +757,9 @@ class RoutesTab extends AbstractDiagramTab {
 
     @Override
     public void renderFooter(List<Span> spans) {
+        if (renderGotoNodeFooter(spans)) {
+            return;
+        }
         if (sourceViewer.isVisible()) {
             sourceViewer.renderFooter(spans);
         } else if (diagram.isShowDiagram()) {
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTabRenderTest.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTabRenderTest.java
index 66bc9a1a0131..6feca237f415 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTabRenderTest.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTabRenderTest.java
@@ -24,6 +24,7 @@ import dev.tamboui.text.Span;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
@@ -94,6 +95,18 @@ class DiagramTabRenderTest {
                 "Footer should be empty (no diagram loaded) or contain 
diagram-related hints");
     }
 
+    @Test
+    void theGoToNodePopupShowsItsOwnKeysInTheFooter() {
+        DiagramTab tab = new DiagramTab(ctx);
+        tab.gotoNodePopup.open(List.of(), -1);
+        List<Span> footerSpans = new ArrayList<>();
+        tab.renderFooter(footerSpans);
+
+        String footer = footerSpans.stream().map(Span::content).reduce("", 
String::concat);
+        assertEquals(" type  filter   Enter  go to   Esc  back", footer,
+                "what is typed goes into the popup, so the keys of the diagram 
are not listed");
+    }
+
     @Test
     void renderShowsLoadingWhenNoRoutes() {
         DiagramTab tab = new DiagramTab(ctx);

Reply via email to