diff options
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/bg/data/options-schema.json | 3 | ||||
| -rw-r--r-- | ext/bg/js/options.js | 3 | ||||
| -rw-r--r-- | ext/bg/js/search.js | 21 | ||||
| -rw-r--r-- | ext/bg/settings2.html | 3 | ||||
| -rw-r--r-- | ext/mixed/js/display.js | 41 | 
5 files changed, 50 insertions, 21 deletions
| diff --git a/ext/bg/data/options-schema.json b/ext/bg/data/options-schema.json index 8c00d455..405d62a9 100644 --- a/ext/bg/data/options-schema.json +++ b/ext/bg/data/options-schema.json @@ -971,7 +971,8 @@                                              }                                          },                                          "default": [ -                                            {"action": "close",             "key": "Escape",    "modifiers": [],       "scopes": ["popup", "search"], "enabled": true}, +                                            {"action": "close",             "key": "Escape",    "modifiers": [],       "scopes": ["popup"], "enabled": true}, +                                            {"action": "focusSearchBox",    "key": "Escape",    "modifiers": [],       "scopes": ["search"], "enabled": true},                                              {"action": "previousEntry3",    "key": "PageUp",    "modifiers": ["alt"],  "scopes": ["popup", "search"], "enabled": true},                                              {"action": "nextEntry3",        "key": "PageDown",  "modifiers": ["alt"],  "scopes": ["popup", "search"], "enabled": true},                                              {"action": "lastEntry",         "key": "End",       "modifiers": ["alt"],  "scopes": ["popup", "search"], "enabled": true}, diff --git a/ext/bg/js/options.js b/ext/bg/js/options.js index cbc390da..964c346c 100644 --- a/ext/bg/js/options.js +++ b/ext/bg/js/options.js @@ -716,7 +716,8 @@ class OptionsUtil {              profile.options.general.popupActionBarLocation = 'top';              profile.options.inputs = {                  hotkeys: [ -                    {action: 'close',             key: 'Escape',    modifiers: [],       scopes: ['popup', 'search'], enabled: true}, +                    {action: 'close',             key: 'Escape',    modifiers: [],       scopes: ['popup'], enabled: true}, +                    {action: 'focusSearchBox',    key: 'Escape',    modifiers: [],       scopes: ['search'], enabled: true},                      {action: 'previousEntry3',    key: 'PageUp',    modifiers: ['alt'],  scopes: ['popup', 'search'], enabled: true},                      {action: 'nextEntry3',        key: 'PageDown',  modifiers: ['alt'],  scopes: ['popup', 'search'], enabled: true},                      {action: 'lastEntry',         key: 'End',       modifiers: ['alt'],  scopes: ['popup', 'search'], enabled: true}, diff --git a/ext/bg/js/search.js b/ext/bg/js/search.js index 340b86ce..00148418 100644 --- a/ext/bg/js/search.js +++ b/ext/bg/js/search.js @@ -43,6 +43,10 @@ class DisplaySearch extends Display {              }          });          this.autoPlayAudioDelay = 0; + +        this.registerActions([ +            ['focusSearchBox', this._onActionFocusSearchBox.bind(this)] +        ]);      }      async prepare() { @@ -77,15 +81,6 @@ class DisplaySearch extends Display {          this._isPrepared = true;      } -    onEscape() { -        if (this._queryInput === null) { -            return; -        } - -        this._queryInput.focus(); -        this._queryInput.select(); -    } -      onKeyDown(e) {          if (              !super.onKeyDown(e) && @@ -110,6 +105,14 @@ class DisplaySearch extends Display {          return query;      } +    // Actions + +    _onActionFocusSearchBox() { +        if (this._queryInput === null) { return; } +        this._queryInput.focus(); +        this._queryInput.select(); +    } +      // Private      async _onOptionsUpdated() { diff --git a/ext/bg/settings2.html b/ext/bg/settings2.html index f44b7eab..0beef025 100644 --- a/ext/bg/settings2.html +++ b/ext/bg/settings2.html @@ -2871,7 +2871,8 @@      <div class="hotkey-list-item-action-cell">          <select class="hotkey-list-item-action">              <option value="">None</option> -            <option value="close">Close popup</option> +            <option value="close">Close</option> +            <option value="focusSearchBox">Focus search box</option>              <option value="nextEntry">Go to next entry</option>              <option value="nextEntry3">Go to next entry (x3)</option>              <option value="previousEntry">Go to previous entry</option> diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index 67498d01..8558d849 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -116,7 +116,7 @@ class Display extends EventDispatcher {          this._tagNotificationContainer = document.querySelector('#content-footer');          this.registerActions([ -            ['close',             () => { this.onEscape(); }], +            ['close',             () => { this.close(); }],              ['nextEntry',         () => { this._focusEntry(this._index + 1, true); }],              ['nextEntry3',        () => { this._focusEntry(this._index + 3, true); }],              ['previousEntry',     () => { this._focusEntry(this._index - 1, true); }], @@ -249,12 +249,6 @@ class Display extends EventDispatcher {          yomichan.logError(error);      } -    onEscape() { -        if (this._pageType === 'popup') { -            this.close(); -        } -    } -      onKeyDown(e) {          const key = e.code;          const handlers = this._hotkeys.get(key); @@ -418,8 +412,13 @@ class Display extends EventDispatcher {      }      close() { -        if (this._pageType === 'popup') { -            this._invokeOwner('closePopup'); +        switch (this._pageType) { +            case 'popup': +                this._invokeOwner('closePopup'); +                break; +            case 'search': +                this._closeTab(); +                break;          }      } @@ -1904,4 +1903,28 @@ class Display extends EventDispatcher {              this._registerHotkey(key, modifiers, action);          }      } + +    async _closeTab() { +        const tab = await new Promise((resolve, reject) => { +            chrome.tabs.getCurrent((result) => { +                const e = chrome.runtime.lastError; +                if (e) { +                    reject(new Error(e.message)); +                } else { +                    resolve(result); +                } +            }); +        }); +        const tabId = tab.id; +        await new Promise((resolve, reject) => { +            chrome.tabs.remove(tabId, () => { +                const e = chrome.runtime.lastError; +                if (e) { +                    reject(new Error(e.message)); +                } else { +                    resolve(); +                } +            }); +        }); +    }  } |