From 129aae38df1a17a5850898d5832bb8112ead3cbb Mon Sep 17 00:00:00 2001
From: Shin'ya Ueoka <ueokande@i-beam.org>
Date: Sun, 6 May 2018 22:30:04 +0900
Subject: Indicator shows the add-on enabled

---
 src/content/components/common/index.js      | 14 ++++++++++++++
 src/content/components/top-content/index.js |  7 +++++++
 2 files changed, 21 insertions(+)

(limited to 'src/content')

diff --git a/src/content/components/common/index.js b/src/content/components/common/index.js
index 565632c..c5d1df7 100644
--- a/src/content/components/common/index.js
+++ b/src/content/components/common/index.js
@@ -14,10 +14,12 @@ export default class Common {
     input.onKey(key => keymapper.key(key));
 
     this.store = store;
+    this.prevEnabled = this.store.getState().addon.enabled;
 
     this.reloadSettings();
 
     messages.onMessage(this.onMessage.bind(this));
+    store.subscribe(() => this.update());
   }
 
   onMessage(message) {
@@ -27,6 +29,18 @@ export default class Common {
     }
   }
 
+  update() {
+    let enabled = this.store.getState().addon.enabled;
+    if (enabled !== this.prevEnabled) {
+      this.prevEnabled = enabled;
+
+      browser.runtime.sendMessage({
+        type: messages.ADDON_ENABLED_RESPONSE,
+        enabled,
+      });
+    }
+  }
+
   reloadSettings() {
     browser.runtime.sendMessage({
       type: messages.SETTINGS_QUERY,
diff --git a/src/content/components/top-content/index.js b/src/content/components/top-content/index.js
index cf21ec4..cb9e160 100644
--- a/src/content/components/top-content/index.js
+++ b/src/content/components/top-content/index.js
@@ -48,11 +48,18 @@ export default class TopContent {
   }
 
   onMessage(message) {
+    let addonState = this.store.getState().addon;
+
     switch (message.type) {
     case messages.CONSOLE_UNFOCUS:
       this.win.focus();
       consoleFrames.blur(window.document);
       return Promise.resolve();
+    case messages.ADDON_ENABLED_QUERY:
+      return Promise.resolve({
+        type: messages.ADDON_ENABLED_RESPONSE,
+        enabled: addonState.enabled,
+      });
     }
   }
 }
-- 
cgit v1.2.3


From 6d057a974bb42406259b6f0b0a8c0b1e22335073 Mon Sep 17 00:00:00 2001
From: Shin'ya Ueoka <ueokande@i-beam.org>
Date: Sun, 6 May 2018 22:47:58 +0900
Subject: Toggle add-on enabled by clicking indicator

---
 src/background/components/indicator.js | 7 +++++++
 src/content/components/common/index.js | 5 ++++-
 src/shared/messages.js                 | 1 +
 3 files changed, 12 insertions(+), 1 deletion(-)

(limited to 'src/content')

diff --git a/src/background/components/indicator.js b/src/background/components/indicator.js
index ccdcc74..cceb119 100644
--- a/src/background/components/indicator.js
+++ b/src/background/components/indicator.js
@@ -7,6 +7,7 @@ export default class IndicatorComponent {
 
     messages.onMessage(this.onMessage.bind(this));
 
+    browser.browserAction.onClicked.addListener(this.onClicked);
     browser.tabs.onActivated.addListener((info) => {
       return browser.tabs.query({ currentWindow: true }).then(() => {
         return this.onTabActivated(info);
@@ -22,6 +23,12 @@ export default class IndicatorComponent {
     });
   }
 
+  onClicked(tab) {
+    browser.tabs.sendMessage(tab.id, {
+      type: messages.ADDON_TOGGLE_ENABLED,
+    });
+  }
+
   onMessage(message) {
     switch (message.type) {
     case messages.ADDON_ENABLED_RESPONSE:
diff --git a/src/content/components/common/index.js b/src/content/components/common/index.js
index c5d1df7..c76a7d9 100644
--- a/src/content/components/common/index.js
+++ b/src/content/components/common/index.js
@@ -3,6 +3,7 @@ import KeymapperComponent from './keymapper';
 import FollowComponent from './follow';
 import * as settingActions from 'content/actions/setting';
 import messages from 'shared/messages';
+import * as addonActions from '../../actions/addon';
 
 export default class Common {
   constructor(win, store) {
@@ -25,7 +26,9 @@ export default class Common {
   onMessage(message) {
     switch (message.type) {
     case messages.SETTINGS_CHANGED:
-      this.reloadSettings();
+      return this.reloadSettings();
+    case messages.ADDON_TOGGLE_ENABLED:
+      return this.store.dispatch(addonActions.toggleEnabled());
     }
   }
 
diff --git a/src/shared/messages.js b/src/shared/messages.js
index 2a286bf..1f9c816 100644
--- a/src/shared/messages.js
+++ b/src/shared/messages.js
@@ -50,6 +50,7 @@ export default {
 
   ADDON_ENABLED_QUERY: 'addon.enabled.query',
   ADDON_ENABLED_RESPONSE: 'addon.enabled.response',
+  ADDON_TOGGLE_ENABLED: 'addon.toggle.enabled',
 
   OPEN_URL: 'open.url',
 
-- 
cgit v1.2.3


From cf30ef0cd503b3b9dee882202d64ba9db9922ee3 Mon Sep 17 00:00:00 2001
From: Shin'ya Ueoka <ueokande@i-beam.org>
Date: Sun, 6 May 2018 21:35:11 +0900
Subject: update indicator on loaded

---
 src/content/components/common/index.js      | 2 +-
 src/content/components/top-content/index.js | 2 ++
 2 files changed, 3 insertions(+), 1 deletion(-)

(limited to 'src/content')

diff --git a/src/content/components/common/index.js b/src/content/components/common/index.js
index c76a7d9..9b7b083 100644
--- a/src/content/components/common/index.js
+++ b/src/content/components/common/index.js
@@ -15,7 +15,7 @@ export default class Common {
     input.onKey(key => keymapper.key(key));
 
     this.store = store;
-    this.prevEnabled = this.store.getState().addon.enabled;
+    this.prevEnabled = undefined;
 
     this.reloadSettings();
 
diff --git a/src/content/components/top-content/index.js b/src/content/components/top-content/index.js
index cb9e160..a0d0480 100644
--- a/src/content/components/top-content/index.js
+++ b/src/content/components/top-content/index.js
@@ -44,6 +44,8 @@ export default class TopContent {
       .some(regex => regex.test(partial));
     if (matched) {
       this.store.dispatch(addonActions.disable());
+    } else {
+      this.store.dispatch(addonActions.enable());
     }
   }
 
-- 
cgit v1.2.3