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

ahuber pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit 681f30fdbc1128a06829bb17fb5a37b17bdb4dd5
Author: a.huber <[email protected]>
AuthorDate: Sun Oct 26 11:07:34 2025 +0100

    CAUSEWAY-3916: href support (_JoupExt)
---
 .../causeway/commons/internal/html/_JsoupExt.java  | 36 ++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git 
a/commons/src/main/java/org/apache/causeway/commons/internal/html/_JsoupExt.java
 
b/commons/src/main/java/org/apache/causeway/commons/internal/html/_JsoupExt.java
index 228696c56d6..39bde5ddcff 100644
--- 
a/commons/src/main/java/org/apache/causeway/commons/internal/html/_JsoupExt.java
+++ 
b/commons/src/main/java/org/apache/causeway/commons/internal/html/_JsoupExt.java
@@ -62,6 +62,25 @@ public interface HtmlAppender3<T1, T2, T3> {
         Element appendTo(Element container, T1 model1, T2 model2, T3 model3);
     }
 
+    public record Href(String plain) {
+        /**
+         * on click causes the browser to navigate to the top of the page
+         */
+        public static Href self() {
+            return new Href("#");
+        }
+        /**
+         * on click does nothing
+         */
+        public static Href empty() {
+            return new Href("javascript:;");
+        }
+        public static Href validate(final String url) {
+            //TODO validate
+            return new Href(url);
+        }
+    }
+
     // -- EVALUATOR LOGIC
 
     public Evaluator not(final Evaluator evaluator) {
@@ -129,6 +148,23 @@ public Element type(final Element container, final String 
type) {
 
     // -- APPENDERS
 
+    public Element appendA(final Element container) {
+        return container.appendElement("a");
+    }
+    public Element appendA(final Element container, final String cssClass) {
+        return container.appendElement("a")
+            .attr("class", cssClass);
+    }
+    public Element appendA(final Element container, Href href) {
+        return container.appendElement("a")
+                .attr("href", href.plain());
+    }
+    public Element appendA(final Element container, final String cssClass, 
Href href) {
+        return container.appendElement("a")
+            .attr("class", cssClass)
+            .attr("href", href.plain());
+    }
+
     public Element appendDiv(final Element container) {
         return container.appendElement("div");
     }

Reply via email to