diff --git a/app/javascript/controllers/bridge/buttons_controller.js b/app/javascript/controllers/bridge/buttons_controller.js index 47d09a158..3e3aa4a60 100644 --- a/app/javascript/controllers/bridge/buttons_controller.js +++ b/app/javascript/controllers/bridge/buttons_controller.js @@ -5,6 +5,26 @@ export default class extends BridgeComponent { static component = "buttons" static targets = [ "button" ] + connect() { + super.connect() + + if (!this.beforeUnloadHandler) { + this.beforeUnloadHandler = this.handleBeforeUnload.bind(this) + } + + window.addEventListener("beforeunload", this.beforeUnloadHandler) + } + + disconnect() { + super.disconnect() + + if (this.beforeUnloadHandler) { + window.removeEventListener("beforeunload", this.beforeUnloadHandler) + } + + this.notifyBridgeOfDisconnect() + } + buttonTargetConnected() { this.notifyBridgeOfConnect() } @@ -27,6 +47,14 @@ export default class extends BridgeComponent { }) } + notifyBridgeOfDisconnect() { + this.send("disconnect") + } + + handleBeforeUnload() { + this.notifyBridgeOfDisconnect() + } + #clickButton(message) { const selectedIndex = message.data.selectedIndex this.#enabledButtonTargets[selectedIndex].click() diff --git a/app/javascript/controllers/bridge/form_controller.js b/app/javascript/controllers/bridge/form_controller.js index a3c780e62..4ebb3022c 100644 --- a/app/javascript/controllers/bridge/form_controller.js +++ b/app/javascript/controllers/bridge/form_controller.js @@ -6,13 +6,31 @@ export default class extends BridgeComponent { static targets = [ "submit", "cancel" ] static values = { submitTitle: String } + connect() { + super.connect() + + if (!this.beforeUnloadHandler) { + this.beforeUnloadHandler = this.handleBeforeUnload.bind(this) + } + + window.addEventListener("beforeunload", this.beforeUnloadHandler) + } + + disconnect() { + super.disconnect() + + if (this.beforeUnloadHandler) { + window.removeEventListener("beforeunload", this.beforeUnloadHandler) + } + } + submitTargetConnected() { this.notifyBridgeOfConnect() this.#observeSubmitTarget() } submitTargetDisconnected() { - this.notifyBridgeOfDisonnect() + this.notifyBridgeOfDisconnect() this.submitObserver?.disconnect() } @@ -37,7 +55,7 @@ export default class extends BridgeComponent { } } - notifyBridgeOfDisonnect() { + notifyBridgeOfDisconnect() { this.send("disconnect") } @@ -49,6 +67,10 @@ export default class extends BridgeComponent { this.send("submitEnd") } + handleBeforeUnload() { + this.notifyBridgeOfDisconnect() + } + #observeSubmitTarget() { this.submitObserver = new MutationObserver(() => { this.send(this.submitTarget.disabled ? "submitDisabled" : "submitEnabled") diff --git a/app/views/cards/container/_closure.html.erb b/app/views/cards/container/_closure.html.erb index 1afbaaaac..6da99c7ee 100644 --- a/app/views/cards/container/_closure.html.erb +++ b/app/views/cards/container/_closure.html.erb @@ -5,6 +5,7 @@ <%= button_to card_closure_path(card), method: :delete, class: "btn btn--plain borderless fill-transparent" do %> Undo <% end %> + <%= bridged_button_to_board(card.board) %> <% else %>
diff --git a/app/views/cards/container/_closure_buttons.html.erb b/app/views/cards/container/_closure_buttons.html.erb index e1ea75ec7..27db6590e 100644 --- a/app/views/cards/container/_closure_buttons.html.erb +++ b/app/views/cards/container/_closure_buttons.html.erb @@ -13,4 +13,6 @@ Mark as Done d <% end %> + + <%= bridged_button_to_board(card.board) %>
diff --git a/app/views/cards/container/_image.html.erb b/app/views/cards/container/_image.html.erb index e044b9b0c..c8892f0d4 100644 --- a/app/views/cards/container/_image.html.erb +++ b/app/views/cards/container/_image.html.erb @@ -1,12 +1,12 @@ <% if card.image.attached? %> - <%= button_to card_image_path(card), method: :delete, class: "btn", - data: { controller: "tooltip", bridge__overflow_menu_target: "item", bridge_title: "Remove background image" } do %> + <%= button_to card_image_path(card), method: :delete, class: "btn hide-on-native", + data: { controller: "tooltip" } do %> <%= icon_tag "picture-remove" %> Remove background image <% end %> <% elsif !card.closed? %> <%= form_with model: card, data: { controller: "form" } do |form| %> -