Skip to content

feat: OpenInNewTabAction for the action trigger framework#24431

Draft
Artur- wants to merge 3 commits into
mainfrom
open-popup
Draft

feat: OpenInNewTabAction for the action trigger framework#24431
Artur- wants to merge 3 commits into
mainfrom
open-popup

Conversation

@Artur-
Copy link
Copy Markdown
Member

@Artur- Artur- commented May 24, 2026

Opens a URL in a new browser tab/window via window.open(url, "_blank",
features) when the bound trigger fires. Four constructors cover static
URL with default features (noopener,noreferrer), static URL with custom
features, Action.Input URL resolved on the client at fire time,
and the same with a client-resolved features string. No outcome
callback — browsers don't reliably report popup-blocked or tab-closed.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 24, 2026

Test Results

 1 424 files  + 4   1 424 suites  +4   1h 17m 37s ⏱️ - 2m 52s
10 014 tests +14   9 946 ✅ +14  68 💤 ±0  0 ❌ ±0 
10 486 runs  +14  10 417 ✅ +14  69 💤 ±0  0 ❌ ±0 

Results for commit debe09e. ± Comparison against base commit 6bad3ec.

♻️ This comment has been updated with latest results.

Artur- added 3 commits May 25, 2026 13:05
Replace appendStatement(JsBuilder, StringBuilder) on Action with
render(JsBuilder): JsFunction. Replace Input.appendExpression with
Input.toJs(JsBuilder): JsFunction returning the input's value when
invoked.

Each Action ships as its own JsFunction (body + captures); Trigger
composes them as captures of a tiny parent JsFunction whose body is
just $0(event);$1(event);... PromiseAction wraps the subclass JsFunction
with OBSERVE_PROMISE via captures instead of string concatenation.

Eliminates hand-escaped JS literals in action bodies — strings and
Element refs go through JsFunction's capture mechanism, which Jackson-
encodes on the wire. Removes the "this" special-case for the host
element: the host is captured the same way as any other Element.

JsBuilder shrinks to just the render-time context (trigger() accessor)
plus a static json() helper kept for Trigger.installJs() (a raw String,
not a JsFunction).
Starts a file download in the browser when a trigger fires, using a
synthesised <a href download> click inside the gesture. Three flavours:
a static URL (optionally with a filename), a DownloadHandler whose
stream resource is wired through Element.setAttribute (same lifecycle
as Image.setSrc / Anchor.setHref), and an Action.Input<String> for URLs
resolved on the client at fire time. No outcome callback — browsers do
not report download completion.
Opens a URL in a new browser tab/window via window.open(url, "_blank",
features) when the bound trigger fires. Four constructors cover static
URL with default features (noopener,noreferrer), static URL with custom
features, Action.Input<String> URL resolved on the client at fire time,
and the same with a client-resolved features string. No outcome
callback — browsers don't reliably report popup-blocked or tab-closed.
@sonarqubecloud
Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant