diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-11-20 22:42:49 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-20 22:42:49 -0500 |
commit | 181ade93d64ca54cee35415e795f42e58d556f54 (patch) | |
tree | 2af5655b0411078ebe8416206877c73f785720ac /ext/mixed/js/display.js | |
parent | 1216926fbdb6b897f4cf9d4cb25d3aaef86707d1 (diff) |
Display scroll fixes (#1046)
* Update focus when internal focus is changed
* Update scroll layout
Diffstat (limited to 'ext/mixed/js/display.js')
-rw-r--r-- | ext/mixed/js/display.js | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index 715b3f3d..299cb026 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -87,7 +87,7 @@ class Display extends EventDispatcher { renderTemplate: this._renderTemplate.bind(this) }); this._updateAdderButtonsPromise = Promise.resolve(); - this._contentScrollElement = document.querySelector('#content'); + this._contentScrollElement = document.querySelector('#content-scroll'); this._contentScrollBodyElement = document.querySelector('#content-body'); this._contentScrollFocusElement = document.querySelector('#content-scroll-focus'); this._windowScroll = new WindowScroll(this._contentScrollElement); @@ -183,6 +183,9 @@ class Display extends EventDispatcher { ['popupMessage', {async: 'dynamic', handler: this._onDirectMessage.bind(this)}] ]); window.addEventListener('focus', this._onWindowFocus.bind(this), false); + document.documentElement.addEventListener('focusin', this._onDocumentFocusIn.bind(this), false); + document.documentElement.addEventListener('focusout', this._onDocumentFocusOut.bind(this), false); + this._updateFocusedElement(); this._progressIndicatorVisible.on('change', this._onProgressIndicatorVisibleChanged.bind(this)); } @@ -582,16 +585,15 @@ class Display extends EventDispatcher { } _onWindowFocus() { - const target = this._contentScrollFocusElement; - if (target === null) { return; } - const {activeElement} = document; - if ( - activeElement === null || - activeElement === document.documentElement || - activeElement === document.body - ) { - target.focus(); - } + this._updateFocusedElement(); + } + + _onDocumentFocusIn() { + this._updateFocusedElement(); + } + + _onDocumentFocusOut() { + this._updateFocusedElement(); } async _onKanjiLookup(e) { @@ -1569,4 +1571,17 @@ class Display extends EventDispatcher { if (deepEqual(this._optionsContext, optionsContext)) { return; } await this.setOptionsContext(optionsContext); } + + _updateFocusedElement() { + const target = this._contentScrollFocusElement; + if (target === null) { return; } + const {activeElement} = document; + if ( + activeElement === null || + activeElement === document.documentElement || + activeElement === document.body + ) { + target.focus(); + } + } } |