diff options
| author | siikamiika <siikamiika@users.noreply.github.com> | 2020-03-21 22:29:07 +0200 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-21 22:29:07 +0200 | 
| commit | 08d38d8db2c97ff9f016a6de640f645b609088d1 (patch) | |
| tree | 9060deb6f870e472c601b6cec050a2f60f62abca /ext/fg/js | |
| parent | 647769f2baae338f201690f21c4bf8983bcb10b0 (diff) | |
| parent | b616bac66ed0735c1e7ebbaf1ceba20b081f1a6f (diff) | |
Merge pull request #411 from siikamiika/apply-all-options-profile-change
apply all options on profile change
Diffstat (limited to 'ext/fg/js')
| -rw-r--r-- | ext/fg/js/float.js | 17 | ||||
| -rw-r--r-- | ext/fg/js/frontend-initialize.js | 4 | ||||
| -rw-r--r-- | ext/fg/js/frontend.js | 18 | ||||
| -rw-r--r-- | ext/fg/js/popup-nested.js | 7 | ||||
| -rw-r--r-- | ext/fg/js/popup-proxy-host.js | 3 | ||||
| -rw-r--r-- | ext/fg/js/popup-proxy.js | 4 | ||||
| -rw-r--r-- | ext/fg/js/popup.js | 34 | 
7 files changed, 47 insertions, 40 deletions
| diff --git a/ext/fg/js/float.js b/ext/fg/js/float.js index 393c2719..9b720ebe 100644 --- a/ext/fg/js/float.js +++ b/ext/fg/js/float.js @@ -28,6 +28,8 @@ class DisplayFloat extends Display {          super(document.querySelector('#spinner'), document.querySelector('#definitions'));          this.autoPlayAudioTimer = null; +        this._popupId = null; +          this.optionsContext = {              depth: 0,              url: window.location.href @@ -53,7 +55,7 @@ class DisplayFloat extends Display {              ['setContent', ({type, details}) => this.setContent(type, details)],              ['clearAutoPlayTimer', () => this.clearAutoPlayTimer()],              ['setCustomCss', ({css}) => this.setCustomCss(css)], -            ['prepare', ({options, popupInfo, url, childrenSupported, scale, uniqueId}) => this.prepare(options, popupInfo, url, childrenSupported, scale, uniqueId)], +            ['prepare', ({popupInfo, url, childrenSupported, scale}) => this.prepare(popupInfo, url, childrenSupported, scale)],              ['setContentScale', ({scale}) => this.setContentScale(scale)]          ]); @@ -61,23 +63,24 @@ class DisplayFloat extends Display {          window.addEventListener('message', this.onMessage.bind(this), false);      } -    async prepare(options, popupInfo, url, childrenSupported, scale, uniqueId) { +    async prepare(popupInfo, url, childrenSupported, scale) {          if (this._prepareInvoked) { return; }          this._prepareInvoked = true; -        await super.prepare(options); -          const {id, depth, parentFrameId} = popupInfo; +        this._popupId = id;          this.optionsContext.depth = depth;          this.optionsContext.url = url; +        await super.prepare(); +          if (childrenSupported) {              popupNestedInitialize(id, depth, parentFrameId, url);          }          this.setContentScale(scale); -        apiForward('popupPrepareCompleted', {uniqueId}); +        apiForward('popupPrepareCompleted', {targetPopupId: this._popupId});      }      onError(error) { @@ -144,10 +147,6 @@ class DisplayFloat extends Display {          handler(params);      } -    getOptionsContext() { -        return this.optionsContext; -    } -      autoPlayAudio() {          this.clearAutoPlayTimer();          this.autoPlayAudioTimer = window.setTimeout(() => super.autoPlayAudio(), 400); diff --git a/ext/fg/js/frontend-initialize.js b/ext/fg/js/frontend-initialize.js index 8424b21d..3a191247 100644 --- a/ext/fg/js/frontend-initialize.js +++ b/ext/fg/js/frontend-initialize.js @@ -26,7 +26,7 @@ async function main() {      await yomichan.prepare();      const data = window.frontendInitializationData || {}; -    const {id, depth=0, parentFrameId, ignoreNodes, url, proxy=false} = data; +    const {id, depth=0, parentFrameId, url, proxy=false} = data;      let popup;      if (proxy) { @@ -38,7 +38,7 @@ async function main() {          popup = popupHost.getOrCreatePopup(null, null, depth);      } -    const frontend = new Frontend(popup, ignoreNodes); +    const frontend = new Frontend(popup);      await frontend.prepare();  } diff --git a/ext/fg/js/frontend.js b/ext/fg/js/frontend.js index 768b9326..d6c5eac6 100644 --- a/ext/fg/js/frontend.js +++ b/ext/fg/js/frontend.js @@ -26,10 +26,9 @@   */  class Frontend extends TextScanner { -    constructor(popup, ignoreNodes) { +    constructor(popup) {          super(              window, -            ignoreNodes,              popup.isProxy() ? [] : [popup.getContainer()],              [(x, y) => this.popup.containsPoint(x, y)]          ); @@ -95,6 +94,9 @@ class Frontend extends TextScanner {      }      onRuntimeMessage({action, params}, sender, callback) { +        const {targetPopupId} = params || {}; +        if (typeof targetPopupId !== 'undefined' && targetPopupId !== this.popup.id) { return; } +          const handler = this._runtimeMessageHandlers.get(action);          if (typeof handler !== 'function') { return false; } @@ -129,8 +131,20 @@ class Frontend extends TextScanner {      async updateOptions() {          this.setOptions(await apiOptionsGet(this.getOptionsContext())); + +        const ignoreNodes = ['.scan-disable', '.scan-disable *']; +        if (!this.options.scanning.enableOnPopupExpressions) { +            ignoreNodes.push('.source-text', '.source-text *'); +        } +        this.ignoreNodes = ignoreNodes.join(','); +          await this.popup.setOptions(this.options); +          this._updateContentScale(); + +        if (this.textSourceCurrent !== null && this.causeCurrent !== null) { +            await this.onSearchSource(this.textSourceCurrent, this.causeCurrent); +        }      }      async onSearchSource(textSource, cause) { diff --git a/ext/fg/js/popup-nested.js b/ext/fg/js/popup-nested.js index 06f8fc4b..39d91fd8 100644 --- a/ext/fg/js/popup-nested.js +++ b/ext/fg/js/popup-nested.js @@ -36,12 +36,7 @@ async function popupNestedInitialize(id, depth, parentFrameId, url) {          return;      } -    const ignoreNodes = ['.scan-disable', '.scan-disable *']; -    if (!options.scanning.enableOnPopupExpressions) { -        ignoreNodes.push('.source-text', '.source-text *'); -    } - -    window.frontendInitializationData = {id, depth, parentFrameId, ignoreNodes, url, proxy: true}; +    window.frontendInitializationData = {id, depth, parentFrameId, url, proxy: true};      const scriptSrcs = [          '/mixed/js/text-scanner.js', diff --git a/ext/fg/js/popup-proxy-host.js b/ext/fg/js/popup-proxy-host.js index 793d3949..6f1c13c6 100644 --- a/ext/fg/js/popup-proxy-host.js +++ b/ext/fg/js/popup-proxy-host.js @@ -25,7 +25,6 @@  class PopupProxyHost {      constructor() {          this._popups = new Map(); -        this._nextId = 0;          this._apiReceiver = null;          this._frameIdPromise = null;      } @@ -76,7 +75,7 @@ class PopupProxyHost {          // New unique id          if (id === null) { -            id = this._nextId++; +            id = yomichan.generateId(16);          }          // Create new popup diff --git a/ext/fg/js/popup-proxy.js b/ext/fg/js/popup-proxy.js index f7cef214..997b1317 100644 --- a/ext/fg/js/popup-proxy.js +++ b/ext/fg/js/popup-proxy.js @@ -33,6 +33,10 @@ class PopupProxy {      // Public properties +    get id() { +        return this._id; +    } +      get parent() {          return null;      } diff --git a/ext/fg/js/popup.js b/ext/fg/js/popup.js index d752812e..e6e93a76 100644 --- a/ext/fg/js/popup.js +++ b/ext/fg/js/popup.js @@ -210,11 +210,9 @@ class Popup {              const parentFrameId = (typeof this._frameId === 'number' ? this._frameId : null);              this._container.setAttribute('src', chrome.runtime.getURL('/fg/float.html'));              this._container.addEventListener('load', () => { -                const uniqueId = yomichan.generateId(32); -                Popup._listenForDisplayPrepareCompleted(uniqueId, resolve); +                this._listenForDisplayPrepareCompleted(resolve);                  this._invokeApi('prepare', { -                    options: this._options,                      popupInfo: {                          id: this._id,                          depth: this._depth, @@ -222,8 +220,7 @@ class Popup {                      },                      url: this.url,                      childrenSupported: this._childrenSupported, -                    scale: this._contentScale, -                    uniqueId +                    scale: this._contentScale                  });              });              this._observeFullscreen(true); @@ -364,23 +361,12 @@ class Popup {          contentWindow.postMessage({action, params, token}, this._targetOrigin);      } -    static _getFullscreenElement() { -        return ( -            document.fullscreenElement || -            document.msFullscreenElement || -            document.mozFullScreenElement || -            document.webkitFullscreenElement || -            null -        ); -    } - -    static _listenForDisplayPrepareCompleted(uniqueId, resolve) { +    _listenForDisplayPrepareCompleted(resolve) {          const runtimeMessageCallback = ({action, params}, sender, callback) => {              if (                  action === 'popupPrepareCompleted' && -                typeof params === 'object' && -                params !== null && -                params.uniqueId === uniqueId +                isObject(params) && +                params.targetPopupId === this._id              ) {                  chrome.runtime.onMessage.removeListener(runtimeMessageCallback);                  callback(); @@ -391,6 +377,16 @@ class Popup {          chrome.runtime.onMessage.addListener(runtimeMessageCallback);      } +    static _getFullscreenElement() { +        return ( +            document.fullscreenElement || +            document.msFullscreenElement || +            document.mozFullScreenElement || +            document.webkitFullscreenElement || +            null +        ); +    } +      static _getPositionForHorizontalText(elementRect, width, height, viewport, offsetScale, optionsGeneral) {          const preferBelow = (optionsGeneral.popupHorizontalTextPosition === 'below');          const horizontalOffset = optionsGeneral.popupHorizontalOffset * offsetScale; |