From 2b0c4b4c6974eee788e6c7434758fe0a117b2f60 Mon Sep 17 00:00:00 2001 From: Jay Ohms Date: Thu, 8 Jan 2026 22:01:08 -0500 Subject: [PATCH] Send icon urls with buttons and resolve duplicate bridge items on the board perma since there are duplicate hidden elements --- app/helpers/accesses_helper.rb | 3 +- .../controllers/bridge/buttons_controller.js | 28 +++++------------ .../bridge/overflow_menu_controller.js | 30 +++++-------------- app/views/boards/show/_stream.html.erb | 4 ++- .../events/index/_add_board_button.html.erb | 3 +- .../events/index/_add_card_button.html.erb | 3 +- app/views/layouts/application.html.erb | 4 +-- 7 files changed, 26 insertions(+), 49 deletions(-) diff --git a/app/helpers/accesses_helper.rb b/app/helpers/accesses_helper.rb index 1ace03574..e26b24346 100644 --- a/app/helpers/accesses_helper.rb +++ b/app/helpers/accesses_helper.rb @@ -48,7 +48,8 @@ module AccessesHelper params: { show_watchers: show_watchers, involvement: next_involvement(access.involvement), icon_only: icon_only }, aria: { labelledby: dom_id(board, :involvement_label) }, title: (label_text if icon_only), - class: class_names("btn", { "btn--reversed": access.watching? && icon_only })) do + class: class_names("btn", { "btn--reversed": access.watching? && icon_only }), + data: { bridge__overflow_menu_target: "item" }) do icon_tag("notification-bell-#{icon_only ? 'reverse-' : nil}#{access.involvement.dasherize}") + tag.span(label_text, class: class_names("txt-nowrap txt-uppercase", "for-screen-reader": icon_only), id: dom_id(board, :involvement_label)) end diff --git a/app/javascript/controllers/bridge/buttons_controller.js b/app/javascript/controllers/bridge/buttons_controller.js index ecad31564..ac3861fba 100644 --- a/app/javascript/controllers/bridge/buttons_controller.js +++ b/app/javascript/controllers/bridge/buttons_controller.js @@ -5,26 +5,16 @@ export default class extends BridgeComponent { static component = "buttons" static targets = [ "button" ] - connect() { - super.connect() - - if (this.hasButtonTarget) { - this.notifyBridgeOfConnect() - } - } - - disconnect() { - super.disconnect() - - if (this.hasButtonTarget) { - this.notifyBridgeOfDisconnect() - } + buttonTargetConnected(element) { + this.notifyBridgeOfConnect() } notifyBridgeOfConnect() { - const buttons = this.buttonTargets.map((target, index) => { - const element = new BridgeElement(target) - return { ...element.getButton(), index } + const buttons = this.buttonTargets + .filter(target => !target.closest("[data-bridge-disabled]")) + .map((target, index) => { + const element = new BridgeElement(target) + return { ...element.getButton(), index } }) this.send("connect", { buttons }, message => { @@ -32,10 +22,6 @@ export default class extends BridgeComponent { }) } - notifyBridgeOfDisconnect() { - this.send("disconnect") - } - clickButton(message) { const selectedIndex = message.data.selectedIndex this.buttonTargets[selectedIndex].click() diff --git a/app/javascript/controllers/bridge/overflow_menu_controller.js b/app/javascript/controllers/bridge/overflow_menu_controller.js index d0edc912f..669469329 100644 --- a/app/javascript/controllers/bridge/overflow_menu_controller.js +++ b/app/javascript/controllers/bridge/overflow_menu_controller.js @@ -5,37 +5,23 @@ export default class extends BridgeComponent { static component = "overflow-menu" static targets = [ "item" ] - connect() { - super.connect() - - if (this.hasItemTarget) { - this.notifyBridgeOfConnect() - } - } - - disconnect() { - super.disconnect() - - if (this.hasItemTarget) { - this.notifyBridgeOfDisconnect() - } + itemTargetConnected() { + this.notifyBridgeOfConnect() } notifyBridgeOfConnect() { - const items = this.itemTargets.map((target, index) => { - const element = new BridgeElement(target) - return { title: element.title, index } - }) + const items = this.itemTargets + .filter(target => !target.closest("[data-bridge-disabled]")) + .map((target, index) => { + const element = new BridgeElement(target) + return { title: element.title, index } + }) this.send("connect", { items }, message => { this.clickItem(message) }) } - notifyBridgeOfDisconnect() { - this.send("disconnect") - } - clickItem(message) { const selectedIndex = message.data.selectedIndex this.itemTargets[selectedIndex].click() diff --git a/app/views/boards/show/_stream.html.erb b/app/views/boards/show/_stream.html.erb index 7773fb292..b43309100 100644 --- a/app/views/boards/show/_stream.html.erb +++ b/app/views/boards/show/_stream.html.erb @@ -7,7 +7,9 @@ <%= render "boards/show/expander", title: "Maybe?", count: board.cards.awaiting_triage.count, column_id: "maybe" %> <%= render "boards/show/menu/maximize", column_path: board_columns_stream_path(board) %> - <%= render "columns/show/add_card_button", board: board %> +
+ <%= render "columns/show/add_card_button", board: board %> +
<% if page.used? %> <%= with_automatic_pagination "maybe", @page do %> diff --git a/app/views/events/index/_add_board_button.html.erb b/app/views/events/index/_add_board_button.html.erb index 613252ff3..a534626d4 100644 --- a/app/views/events/index/_add_board_button.html.erb +++ b/app/views/events/index/_add_board_button.html.erb @@ -1,6 +1,7 @@
- <%= link_to new_board_path, class: "btn btn--link btn--circle-mobile", data: { controller: "hotkey", action: "keydown.b@document->hotkey#click" } do %> + <%= link_to new_board_path, class: "btn btn--link btn--circle-mobile", + data: { controller: "hotkey", action: "keydown.b@document->hotkey#click", bridge__buttons_target: "button", bridge_title: "Add a board", bridge_icon_url: bridge_icon("board") } do %> <%= icon_tag "board" %> Add a board B diff --git a/app/views/events/index/_add_card_button.html.erb b/app/views/events/index/_add_card_button.html.erb index b653e89b5..f865e5403 100644 --- a/app/views/events/index/_add_card_button.html.erb +++ b/app/views/events/index/_add_card_button.html.erb @@ -1,6 +1,7 @@
<% if board = user_filtering.single_board_or_first %> - <%= button_to board_cards_path(board), method: :post, class: "btn btn--link btn--circle-mobile", data: { controller: "hotkey", action: "keydown.c@document->hotkey#click" } do %> + <%= button_to board_cards_path(board), method: :post, class: "btn btn--link btn--circle-mobile", + data: { controller: "hotkey", action: "keydown.c@document->hotkey#click", bridge__buttons_target: "button", bridge_title: "Add a card", bridge_icon_url: bridge_icon("add") } do %> <%= icon_tag "add" %> Add a card C diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 5fe87e291..670232e36 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -3,10 +3,10 @@ <%= render "layouts/shared/head" %> > -
+