aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/mixed/js/core.js30
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();
})();