From ab6c387b2cc811823b9bad6c2d4ffb139fdd12af Mon Sep 17 00:00:00 2001
From: Thomas Rientjes <synzvato@protonmail.com>
Date: Thu, 21 Sep 2017 22:28:24 -0400
Subject: [PATCH] Resolve #185 by allowing users to hide icon badges

---
 core/state-manager.js      | 63 +++++++++++++++++++++++++++++---------
 pages/options/options.html |  2 +-
 2 files changed, 50 insertions(+), 15 deletions(-)

diff --git a/core/state-manager.js b/core/state-manager.js
index 8907514..f6389a8 100644
--- a/core/state-manager.js
+++ b/core/state-manager.js
@@ -42,19 +42,22 @@ stateManager.registerInjection = function (tabIdentifier, injection) {
     registeredTab.injections[injectionIdentifier] = injection;
     injectionCount = Object.keys(registeredTab.injections).length || 0;
 
-    if (injectionCount > 0) {
+    if (stateManager.showIconBadge === true) {
 
-        chrome.browserAction.setBadgeText({
-            tabId: tabIdentifier,
-            text: injectionCount.toString()
-        });
+        if (injectionCount > 0) {
 
-    } else {
+            chrome.browserAction.setBadgeText({
+                tabId: tabIdentifier,
+                text: injectionCount.toString()
+            });
 
-        chrome.browserAction.setBadgeText({
-            tabId: tabIdentifier,
-            text: ''
-        });
+        } else {
+
+            chrome.browserAction.setBadgeText({
+                tabId: tabIdentifier,
+                text: ''
+            });
+        }
     }
 
     if (isNaN(interceptor.amountInjected)) {
@@ -145,16 +148,42 @@ stateManager._updateTab = function (details) {
         return;
     }
 
-    chrome.browserAction.setBadgeText({
-        tabId: tabIdentifier,
-        text: ''
-    });
+    if (stateManager.showIconBadge === true) {
+
+        chrome.browserAction.setBadgeText({
+            tabId: tabIdentifier,
+            text: ''
+        });
+    }
 
     if (stateManager.tabs[tabIdentifier]) {
         stateManager.tabs[tabIdentifier].injections = {};
     }
 };
 
+stateManager._handleStorageChanged = function (changes) {
+
+    if ('showIconBadge' in changes) {
+        
+        stateManager.showIconBadge = changes.showIconBadge.newValue;
+
+        if (changes.showIconBadge.newValue !== true) {
+
+            chrome.tabs.query({}, function (tabs) {
+                tabs.forEach(stateManager._removeIconBadgeFromTab);
+            });
+        }
+    }
+};
+
+stateManager._removeIconBadgeFromTab = function (tab) {
+
+    chrome.browserAction.setBadgeText({
+        tabId: tab.id,
+        text: ''
+    });
+};
+
 /**
  * Initializations
  */
@@ -177,6 +206,10 @@ chrome.tabs.query({}, function (tabs) {
     tabs.forEach(stateManager._createTab);
 });
 
+chrome.storage.local.get('showIconBadge', function (items) {
+    stateManager.showIconBadge = items.showIconBadge || true;
+});
+
 /**
  * Event Handlers
  */
@@ -222,3 +255,5 @@ chrome.webRequest.onBeforeSendHeaders.addListener(function (requestDetails) {
     return {requestHeaders: requestDetails.requestHeaders};
 
 }, {urls: stateManager.validHosts}, [BLOCKING_ACTION, REQUEST_HEADERS]);
+
+chrome.storage.onChanged.addListener(stateManager._handleStorageChanged);
diff --git a/pages/options/options.html b/pages/options/options.html
index f974728..8ecc2d0 100644
--- a/pages/options/options.html
+++ b/pages/options/options.html
@@ -23,7 +23,7 @@
 
                 <label class="label-checkbox">
 
-                    <input class="input-checkbox" data-option="showIconBadge" type="checkbox" disabled>
+                    <input class="input-checkbox" data-option="showIconBadge" type="checkbox">
                     <span data-i18n-content="showIconBadgeTitle"></span>
 
                 </label>
-- 
GitLab