From dcffe706a327dcf0401e6642b33dc414430c30f8 Mon Sep 17 00:00:00 2001 From: "Stanko K.R." Date: Mon, 18 Aug 2025 20:23:00 +0200 Subject: [PATCH] Make hotkeys activate only when not using inputs --- app/javascript/controllers/bar_controller.js | 31 +++++++++++++++----- app/views/bar/_bar.html.erb | 4 +-- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/app/javascript/controllers/bar_controller.js b/app/javascript/controllers/bar_controller.js index 200f1fe37..dd4f4ae14 100644 --- a/app/javascript/controllers/bar_controller.js +++ b/app/javascript/controllers/bar_controller.js @@ -20,15 +20,32 @@ export default class extends Controller { this.#clearTurboFrame() } - search() { - this.#openInTurboFrame(this.searchTurboFrameNameValue, this.searchUrlValue) - this.dialogOutlet.open() + search(event) { + if (this.#shouldExecuteHotkey) { + event.preventDefault() + this.#openInTurboFrame(this.searchTurboFrameNameValue, this.searchUrlValue) + this.dialogOutlet.open() + } } - async ask() { - this.#initializeConversation() - this.#openInTurboFrame(this.askTurboFrameNameValue, this.askUrlValue) - this.dialogOutlet.open() + ask(event) { + if (this.#shouldExecuteHotkey) { + event.preventDefault() + this.#initializeConversation() + this.#openInTurboFrame(this.askTurboFrameNameValue, this.askUrlValue) + this.dialogOutlet.open() + } + } + + get #shouldExecuteHotkey() { + const activeElement = document.activeElement + + if (activeElement) { + const usingInput = activeElement.closest("input, textarea, lexical-editor") + return !usingInput + } else { + return true + } } #clearTurboFrame() { diff --git a/app/views/bar/_bar.html.erb b/app/views/bar/_bar.html.erb index 7ee411b01..09b0dbdb0 100644 --- a/app/views/bar/_bar.html.erb +++ b/app/views/bar/_bar.html.erb @@ -8,8 +8,8 @@ bar_ask_url_value: conversation_path, bar_ask_turbo_frame_name_value: "conversation", action: " - keydown.meta+k@document->bar#search:prevent keydown.ctrl+k@document->bar#search:prevent - keydown.meta+a@document->bar#ask:prevent keydown.ctrl+a@document->bar#ask:prevent" + keydown.meta+k@document->bar#search keydown.ctrl+k@document->bar#search + keydown.meta+a@document->bar#ask keydown.ctrl+a@document->bar#ask" } do %>
Search [<%= hotkey_label(["ctrl", "K"]) %>] or Ask [<%= hotkey_label(["ctrl", "A"]) %>]