diff options
| -rw-r--r-- | ext/bg/yomichan.js | 22 | ||||
| -rw-r--r-- | ext/client.js | 27 | ||||
| -rw-r--r-- | ext/util.js | 10 | 
3 files changed, 42 insertions, 17 deletions
| diff --git a/ext/bg/yomichan.js b/ext/bg/yomichan.js index 971e739c..9a049f77 100644 --- a/ext/bg/yomichan.js +++ b/ext/bg/yomichan.js @@ -53,7 +53,6 @@ class Yomichan {          switch (this.state) {              case 'disabled':                  this.updateState('loading'); -                this.translator.loadData(this.res, () => this.updateState('enabled'));                  break;              case 'enabled':                  this.updateState('disabled'); @@ -62,9 +61,26 @@ class Yomichan {      }      updateState(state) { -        const text = {'disabled': '', 'enabled': 'on', 'loading': '...'}[state]; -        chrome.browserAction.setBadgeText({text: text});          this.state = state; + +        switch (state) { +            case 'disabled': +                chrome.browserAction.setBadgeText({text: ''}); +                break; +            case 'enabled': +                chrome.browserAction.setBadgeText({text: 'on'}); +                break; +            case 'loading': +                chrome.browserAction.setBadgeText({text: '...'}); +                this.translator.loadData(this.res, () => this.updateState('enabled')); +                break; +        } + +        chrome.tabs.query({}, (tabs) => { +            for (const tab of tabs) { +                chrome.tabs.sendMessage(tab.id, this.state, () => null); +            } +        });      }  } diff --git a/ext/client.js b/ext/client.js index 535d3748..803f7db6 100644 --- a/ext/client.js +++ b/ext/client.js @@ -19,15 +19,23 @@  class Client {      constructor() { -        $('body').append('<div class="yomichan-popup"/>'); - -        this.popup       = $('.yomichan-popup'); +        this.popup       = $('<div class="yomichan-popup"/>');          this.popupOffset = 10; +        this.enabled     = false; + +        $('body').append(this.popup); + +        chrome.runtime.onMessage.addListener(this.onMessage.bind(this)); +        window.addEventListener('mousemove', this.onMouseMove.bind(this)); -        window.addEventListener('mousemove', whenEnabled(this.onMouseMove.bind(this))); +        getState((state) => this.setEnabled(state === 'enabled'));      }      onMouseMove(e) { +        if (!this.enabled) { +            return; +        } +          const range = getRangeAtCursor(e, 10);          if (range === null) {              this.hidePopup(); @@ -43,6 +51,11 @@ class Client {          this.showPopup(range);      } +    onMessage(request, sender, callback) { +        this.setEnabled(request === 'enabled'); +        callback(); +    } +      showPopup(range) {          const selection = window.getSelection();          selection.removeAllRanges(); @@ -58,6 +71,12 @@ class Client {          this.popup.css({visibility: 'hidden'});      } + +    setEnabled(enabled) { +        if (!(this.enabled = enabled)) { +            this.hidePopup(); +        } +    }  }  window.yomiClient = new Client(); diff --git a/ext/util.js b/ext/util.js index e90904f1..76579cac 100644 --- a/ext/util.js +++ b/ext/util.js @@ -68,13 +68,3 @@ function getPopupPositionForRange(popup, range, offset) {      return {x: posX, y: posY};  } - -function whenEnabled(callback) { -    return (...args) => { -        getState((state) => { -            if (state === 'enabled') { -                callback(...args); -            } -        }); -    }; -} |