From 95690324033384adc5fb5d5387aab619f5439e57 Mon Sep 17 00:00:00 2001 From: Adrien Maston Date: Fri, 20 Feb 2026 13:03:28 +0100 Subject: [PATCH 1/5] Move helper to bridge helper file --- app/helpers/boards_helper.rb | 8 -------- app/helpers/bridge_helper.rb | 8 ++++++++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/helpers/boards_helper.rb b/app/helpers/boards_helper.rb index eae2f3665..5f12b9259 100644 --- a/app/helpers/boards_helper.rb +++ b/app/helpers/boards_helper.rb @@ -9,12 +9,4 @@ module BoardsHelper icon_tag("settings") + tag.span("Settings for #{board.name}", class: "for-screen-reader") end end - - def bridged_button_to_board(board) - link_to "Go to #{board.name}", board, hidden: true, data: { - bridge__buttons_target: "button", - bridge_icon_url: bridge_icon("board"), - bridge_title: "Go to #{board.name}" - } - end end diff --git a/app/helpers/bridge_helper.rb b/app/helpers/bridge_helper.rb index 5fb4508b6..fe53b86c3 100644 --- a/app/helpers/bridge_helper.rb +++ b/app/helpers/bridge_helper.rb @@ -2,4 +2,12 @@ module BridgeHelper def bridge_icon(name) asset_url("#{name}.svg") end + + def bridged_button_to_board(board) + link_to "Go to #{board.name}", board, hidden: true, data: { + bridge__buttons_target: "button", + bridge_icon_url: bridge_icon("board"), + bridge_title: "Go to #{board.name}" + } + end end From 4e53000bc3106e775cff0d11b5c630b5b7c30551 Mon Sep 17 00:00:00 2001 From: Adrien Maston Date: Fri, 20 Feb 2026 12:49:00 +0100 Subject: [PATCH 2/5] Add bridged share button to board and card permas --- app/helpers/bridge_helper.rb | 10 +++++ .../controllers/bridge/share_controller.js | 45 +++++++++++++++++++ app/views/boards/show.html.erb | 2 + app/views/cards/show.html.erb | 2 + 4 files changed, 59 insertions(+) create mode 100644 app/javascript/controllers/bridge/share_controller.js diff --git a/app/helpers/bridge_helper.rb b/app/helpers/bridge_helper.rb index fe53b86c3..0fd43044e 100644 --- a/app/helpers/bridge_helper.rb +++ b/app/helpers/bridge_helper.rb @@ -10,4 +10,14 @@ module BridgeHelper bridge_title: "Go to #{board.name}" } end + + def bridged_share_button(type = nil) + tag.button "Share", hidden: true, data: { + controller: "bridge--share", + action: "bridge--share#share", + bridge__overflow_menu_target: "item", + bridge_title: "Share", + bridge_share_type: type + } + end end diff --git a/app/javascript/controllers/bridge/share_controller.js b/app/javascript/controllers/bridge/share_controller.js new file mode 100644 index 000000000..2c6e24248 --- /dev/null +++ b/app/javascript/controllers/bridge/share_controller.js @@ -0,0 +1,45 @@ +import { BridgeComponent } from "@hotwired/hotwire-native-bridge" + +export default class extends BridgeComponent { + static component = "share" + + share() { + const type = this.bridgeElement.bridgeAttribute("share-type") + switch (type) { + case "card-url": + this.send("shareCardUrl", this.#data(type)) + break + default: + this.send("shareUrl", this.#data(type)) + } + } + + #data(type) { + return { + title: document.title, + url: window.location.href, + ...this.#additionalDataFor(type) + } + } + + #additionalDataFor(type) { + switch (type) { + case "card-url": + return { + author: this.#author, + dateAdded: this.#dateAdded + } + default: + return null + } + } + + get #author() { + return document.querySelector(".card__meta-text--author strong")?.textContent?.trim() ?? null + } + + get #dateAdded() { + const timestamp = document.querySelector(".card__meta-text--added time")?.dateTime + return parseInt(timestamp) || null + } +} diff --git a/app/views/boards/show.html.erb b/app/views/boards/show.html.erb index bcccf4512..49391dd58 100644 --- a/app/views/boards/show.html.erb +++ b/app/views/boards/show.html.erb @@ -30,3 +30,5 @@ <%= render "boards/show/columns", page: @page, board: @board %> <% end %> <% end %> + +<%= bridged_share_button() %> diff --git a/app/views/cards/show.html.erb b/app/views/cards/show.html.erb index cf6d239db..90481c5b8 100644 --- a/app/views/cards/show.html.erb +++ b/app/views/cards/show.html.erb @@ -23,3 +23,5 @@ <%= button_to_remove_card_image(@card) if @card.image.attached? %> <% end %> + +<%= bridged_share_button("card-url") %> From 1d07e10650b49208aa3769ee5c2c4efb1edb8b43 Mon Sep 17 00:00:00 2001 From: Adrien Maston Date: Fri, 20 Feb 2026 17:18:53 +0100 Subject: [PATCH 3/5] Replace additional date by optional description --- app/helpers/bridge_helper.rb | 18 ++++++++- .../controllers/bridge/share_controller.js | 39 ++----------------- app/views/boards/show.html.erb | 2 +- app/views/cards/show.html.erb | 2 +- 4 files changed, 22 insertions(+), 39 deletions(-) diff --git a/app/helpers/bridge_helper.rb b/app/helpers/bridge_helper.rb index 0fd43044e..ef96e89b3 100644 --- a/app/helpers/bridge_helper.rb +++ b/app/helpers/bridge_helper.rb @@ -11,13 +11,27 @@ module BridgeHelper } end - def bridged_share_button(type = nil) + def bridged_share_button(description = nil) tag.button "Share", hidden: true, data: { controller: "bridge--share", action: "bridge--share#share", bridge__overflow_menu_target: "item", bridge_title: "Share", - bridge_share_type: type + bridge_share_description: description } end + + def bridge_share_card_description(card) + date_added = card.created_at.strftime("%b %e") + date_updated = card.last_active_at.strftime("%b %e") + author = card.creator.familiar_name + assignees = card.assignees.any? ? "assigned to #{card.assignees.map { |assignee| h assignee.familiar_name }.to_sentence}" : "not assigned" + "Added #{date_added} by #{author} and #{assignees}. Updated #{date_updated}" + end + + def bridge_share_board_description(board) + count_open = board.cards.active.count + count_in_stream = board.cards.awaiting_triage.count + "#{count_open} open cards, #{count_in_stream} in MAYBE?" + end end diff --git a/app/javascript/controllers/bridge/share_controller.js b/app/javascript/controllers/bridge/share_controller.js index 2c6e24248..0080b5c34 100644 --- a/app/javascript/controllers/bridge/share_controller.js +++ b/app/javascript/controllers/bridge/share_controller.js @@ -4,42 +4,11 @@ export default class extends BridgeComponent { static component = "share" share() { - const type = this.bridgeElement.bridgeAttribute("share-type") - switch (type) { - case "card-url": - this.send("shareCardUrl", this.#data(type)) - break - default: - this.send("shareUrl", this.#data(type)) - } - } - - #data(type) { - return { + const description = this.bridgeElement.bridgeAttribute("share-description") + this.send("share", { title: document.title, url: window.location.href, - ...this.#additionalDataFor(type) - } - } - - #additionalDataFor(type) { - switch (type) { - case "card-url": - return { - author: this.#author, - dateAdded: this.#dateAdded - } - default: - return null - } - } - - get #author() { - return document.querySelector(".card__meta-text--author strong")?.textContent?.trim() ?? null - } - - get #dateAdded() { - const timestamp = document.querySelector(".card__meta-text--added time")?.dateTime - return parseInt(timestamp) || null + description + }) } } diff --git a/app/views/boards/show.html.erb b/app/views/boards/show.html.erb index 49391dd58..9f120728b 100644 --- a/app/views/boards/show.html.erb +++ b/app/views/boards/show.html.erb @@ -31,4 +31,4 @@ <% end %> <% end %> -<%= bridged_share_button() %> +<%= bridged_share_button(bridge_share_board_description(@board)) %> diff --git a/app/views/cards/show.html.erb b/app/views/cards/show.html.erb index 90481c5b8..d996d4482 100644 --- a/app/views/cards/show.html.erb +++ b/app/views/cards/show.html.erb @@ -24,4 +24,4 @@ <% end %> -<%= bridged_share_button("card-url") %> +<%= bridged_share_button(bridge_share_card_description(@card)) %> From 0b229c701b8d3ebf97ea7cf820ff40a58a220e7e Mon Sep 17 00:00:00 2001 From: Adrien Maston Date: Mon, 23 Feb 2026 16:10:54 +0100 Subject: [PATCH 4/5] Rename event --- app/helpers/bridge_helper.rb | 4 ++-- app/javascript/controllers/bridge/share_controller.js | 4 ++-- app/views/boards/show.html.erb | 2 +- app/views/cards/show.html.erb | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/helpers/bridge_helper.rb b/app/helpers/bridge_helper.rb index ef96e89b3..ffebe6459 100644 --- a/app/helpers/bridge_helper.rb +++ b/app/helpers/bridge_helper.rb @@ -11,10 +11,10 @@ module BridgeHelper } end - def bridged_share_button(description = nil) + def bridged_share_url_button(description = nil) tag.button "Share", hidden: true, data: { controller: "bridge--share", - action: "bridge--share#share", + action: "bridge--share#shareUrl", bridge__overflow_menu_target: "item", bridge_title: "Share", bridge_share_description: description diff --git a/app/javascript/controllers/bridge/share_controller.js b/app/javascript/controllers/bridge/share_controller.js index 0080b5c34..46e91845d 100644 --- a/app/javascript/controllers/bridge/share_controller.js +++ b/app/javascript/controllers/bridge/share_controller.js @@ -3,9 +3,9 @@ import { BridgeComponent } from "@hotwired/hotwire-native-bridge" export default class extends BridgeComponent { static component = "share" - share() { + shareUrl() { const description = this.bridgeElement.bridgeAttribute("share-description") - this.send("share", { + this.send("shareUrl", { title: document.title, url: window.location.href, description diff --git a/app/views/boards/show.html.erb b/app/views/boards/show.html.erb index 9f120728b..93c1447bb 100644 --- a/app/views/boards/show.html.erb +++ b/app/views/boards/show.html.erb @@ -31,4 +31,4 @@ <% end %> <% end %> -<%= bridged_share_button(bridge_share_board_description(@board)) %> +<%= bridged_share_url_button(bridge_share_board_description(@board)) %> diff --git a/app/views/cards/show.html.erb b/app/views/cards/show.html.erb index d996d4482..1ad92dd59 100644 --- a/app/views/cards/show.html.erb +++ b/app/views/cards/show.html.erb @@ -24,4 +24,4 @@ <% end %> -<%= bridged_share_button(bridge_share_card_description(@card)) %> +<%= bridged_share_url_button(bridge_share_card_description(@card)) %> From a4f1a6b106d9e68b4d8cec8b5a8e8dc2ffa0d33a Mon Sep 17 00:00:00 2001 From: Adrien Maston Date: Mon, 23 Feb 2026 16:11:52 +0100 Subject: [PATCH 5/5] Coding style --- app/javascript/controllers/bridge/share_controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/controllers/bridge/share_controller.js b/app/javascript/controllers/bridge/share_controller.js index 46e91845d..75f0241cf 100644 --- a/app/javascript/controllers/bridge/share_controller.js +++ b/app/javascript/controllers/bridge/share_controller.js @@ -8,7 +8,7 @@ export default class extends BridgeComponent { this.send("shareUrl", { title: document.title, url: window.location.href, - description + description: description }) } }