diff --git a/public/scripts/RossAscends-mods.js b/public/scripts/RossAscends-mods.js index b47df8795..b37cea4e5 100644 --- a/public/scripts/RossAscends-mods.js +++ b/public/scripts/RossAscends-mods.js @@ -39,6 +39,7 @@ import { textgen_types, textgenerationwebui_settings as textgen_settings, getTex import { debounce_timeout } from './constants.js'; import Bowser from '../lib/bowser.min.js'; +import { Popup } from './popup.js'; var RPanelPin = document.getElementById('rm_button_panel_pin'); var LPanelPin = document.getElementById('lm_button_panel_pin'); @@ -1096,6 +1097,9 @@ export function initRossMods() { } if (event.key == 'Escape') { //closes various panels + // Do not close panels if we are currently inside a popup + if (Popup.util.isPopupOpen()) + return; //dont override Escape hotkey functions from script.js //"close edit box" and "cancel stream generation". diff --git a/public/scripts/popup.js b/public/scripts/popup.js index d38d40d70..be460feb6 100644 --- a/public/scripts/popup.js +++ b/public/scripts/popup.js @@ -195,19 +195,19 @@ export class Popup { this.ok.addEventListener('click', () => this.complete(POPUP_RESULT.AFFIRMATIVE)); this.cancel.addEventListener('click', () => this.complete(POPUP_RESULT.NEGATIVE)); + + // Bind dialog listeners manually, so we can be sure context is preserved + const cancelListener = (evt) => { + this.complete(POPUP_RESULT.CANCELLED); + evt.preventDefault(); + evt.stopPropagation(); + window.removeEventListener('cancel', cancelListenerBound); + }; + const cancelListenerBound = cancelListener.bind(this); + this.dlg.addEventListener('cancel', cancelListenerBound); + const keyListener = (evt) => { switch (evt.key) { - case 'Escape': { - // Check if we are the currently active popup - if (this.dlg != document.activeElement?.closest('.popup')) - return; - - this.complete(POPUP_RESULT.CANCELLED); - evt.preventDefault(); - evt.stopPropagation(); - window.removeEventListener('keydown', keyListenerBound); - break; - } case 'Enter': { // CTRL+Enter counts as a closing action, but all other modifiers (ALT, SHIFT) should not trigger this if (evt.altKey || evt.shiftKey)