diff options
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/mixed/js/core.js | 30 | 
1 files changed, 22 insertions, 8 deletions
| diff --git a/ext/mixed/js/core.js b/ext/mixed/js/core.js index 36056c36..edb1f913 100644 --- a/ext/mixed/js/core.js +++ b/ext/mixed/js/core.js @@ -231,15 +231,29 @@ class EventDispatcher {   * Default message handlers   */ -(() => { -    function onMessage({action}, sender, callback) { -        switch (action) { -            case 'getUrl': -                callback({url: window.location.href}); -                break; +const yomichan = (() => { +    class Yomichan { +        constructor() { +            this._messageHandlers = new Map([ +                ['getUrl', this._onMessageGetUrl.bind(this)] +            ]); + +            chrome.runtime.onMessage.addListener(this._onMessage.bind(this)); +        } + +        _onMessage({action, params}, sender, callback) { +            const handler = this._messageHandlers.get(action); +            if (typeof handler !== 'function') { return false; } + +            const result = handler(params, sender); +            callback(result); +            return false; +        } + +        _onMessageGetUrl() { +            return {url: window.location.href};          } -        return false;      } -    chrome.runtime.onMessage.addListener(onMessage); +    return new Yomichan();  })(); |