From e7ff3a2a1578716f30a1f0ca61841aa78d7abb67 Mon Sep 17 00:00:00 2001 From: nobody Date: Fri, 13 Aug 2021 06:15:10 +0200 Subject: [PATCH] Toggle button for Google Fonts (#620) --- core/messenger.js | 17 ++++++ core/state-manager.js | 19 +++++++ pages/popup/popup.css | 2 +- pages/popup/popup.html | 11 ++++ pages/popup/popup.js | 109 +++++++++++++++++++++++++++++-------- pages/updates/updates.html | 1 + 6 files changed, 134 insertions(+), 25 deletions(-) diff --git a/core/messenger.js b/core/messenger.js index 24a8ca13..969bf217 100644 --- a/core/messenger.js +++ b/core/messenger.js @@ -61,6 +61,10 @@ messenger._handleMessageReceived = function (message, sender, sendResponse) { sendResponse({'value': Boolean(helpers.checkAllowlisted(value, requestAnalyzer.domainsManipulateDOM))}); return MessageResponse.SYNCHRONOUS; + case 'domain:fetch-is-google-fonts': + sendResponse({'value': Boolean(helpers.checkAllowlisted(value, interceptor.allowedDomainsGoogleFonts))}); + return MessageResponse.SYNCHRONOUS; + case 'allowlist:add-domain': stateManager.addDomainToAllowlist(value).then(function () { sendResponse({'value': true}); @@ -85,6 +89,18 @@ messenger._handleMessageReceived = function (message, sender, sendResponse) { }); return MessageResponse.ASYNCHRONOUS; + case 'google-fonts:add-domain': + stateManager.addDomainToGoogleFontsList(value).then(function () { + sendResponse({'value': true}); + }); + return MessageResponse.ASYNCHRONOUS; + + case 'google-fonts:remove-domain': + stateManager.removeDomainFromGoogleFontsList(value).then(function () { + sendResponse({'value': true}); + }); + return MessageResponse.ASYNCHRONOUS; + case 'statistic:delete': storageManager.statistics = {}; break; @@ -103,6 +119,7 @@ messenger._handleMessageReceived = function (message, sender, sendResponse) { popup.negateHtmlFilterList = stateManager.getInvertOption; popup.loggingStatus = stateManager.logging; popup.hideDonationButton = stateManager.hideDonationButton; + popup.blockGoogleFonts = interceptor.blockGoogleFonts; sendResponse({'data': popup}); return MessageResponse.ASYNCHRONOUS; } diff --git a/core/state-manager.js b/core/state-manager.js index 6fd72a80..227f4782 100644 --- a/core/state-manager.js +++ b/core/state-manager.js @@ -123,6 +123,25 @@ stateManager.removeDomainFromManipulateDOMlist = function (domain) { }); }; +stateManager.addDomainToGoogleFontsList = function (domain) { + return new Promise((resolve) => { + let allowedDomainsGoogleFonts = interceptor.allowedDomainsGoogleFonts; + + allowedDomainsGoogleFonts[domain] = true; + + storageManager.type.set({allowedDomainsGoogleFonts}, resolve); + }); +}; + +stateManager.removeDomainFromGoogleFontsList = function (domain) { + return new Promise((resolve) => { + let allowedDomainsGoogleFonts = interceptor.allowedDomainsGoogleFonts; + + delete allowedDomainsGoogleFonts[domain]; + + storageManager.type.set({allowedDomainsGoogleFonts}, resolve); + }); +}; /** * Private Methods diff --git a/pages/popup/popup.css b/pages/popup/popup.css index 27efca86..f7c89db4 100644 --- a/pages/popup/popup.css +++ b/pages/popup/popup.css @@ -270,7 +270,7 @@ footer { /** * Toggles */ -#protection-toggle, #manipulateDOM-toggle { +#protection-toggle, #manipulateDOM-toggle, #google-fonts-toggle { cursor: pointer; float: right; -moz-user-select: none; diff --git a/pages/popup/popup.html b/pages/popup/popup.html index 8f6f858d..89ee51ef 100644 --- a/pages/popup/popup.html +++ b/pages/popup/popup.html @@ -47,6 +47,17 @@ Filter HTML source code +
+
+ +
+
+ Google Fonts +
+
0
diff --git a/pages/popup/popup.js b/pages/popup/popup.js index 3ec249fd..8773dfe9 100644 --- a/pages/popup/popup.js +++ b/pages/popup/popup.js @@ -43,6 +43,7 @@ popup._renderContents = function () { popup._determineTargetTab() .then(popup._determineDomainAllowlistStatus) .then(popup._determineStatusManipulateDOM) + .then(popup._determineStatusGoogleFonts) .then(popup._determineResourceInjections) .then(popup._determineNegateHtmlFilterOption) .then(popup._renderContextualContents); @@ -101,9 +102,11 @@ popup._renderContextualContents = function () { popup._renderDomainAllowlistPanel = function () { let websiteContextElement, protectionToggleElement, domainIndicatorElement, - manipulateDOMToggleElement, manipulateDOMToggleStyle; + manipulateDOMToggleElement, manipulateDOMToggleStyle, googleFontsToggleElement, googleFontsToggleStyle; websiteContextElement = document.getElementById('website-context'); + websiteContextElement.setAttribute('class', 'panel'); + protectionToggleElement = document.getElementById('protection-toggle-switch'); domainIndicatorElement = document.getElementById('domain-indicator'); @@ -112,35 +115,55 @@ popup._renderDomainAllowlistPanel = function () { manipulateDOMToggleElement = document.getElementById('manipulateDOM-toggle-switch'); manipulateDOMToggleStyle = document.getElementById('toggle-switch-manipulateDOM'); + googleFontsToggleElement = document.getElementById('google-fonts-toggle-switch'); + googleFontsToggleStyle = document.getElementById('toggle-switch-google-fonts'); + if (popup._domainIsAllowlisted === true) { manipulateDOMToggleElement.disabled = true; - protectionToggleElement.checked = false; - manipulateDOMToggleStyle.setAttribute('class', 'slider-disabled'); + + googleFontsToggleElement.disabled = true; + googleFontsToggleStyle.setAttribute('class', 'slider-disabled'); + + protectionToggleElement.checked = false; protectionToggleElement.addEventListener('click', popup._enableProtection); - } else { - manipulateDOMToggleElement.disabled = false; - manipulateDOMToggleStyle.setAttribute('class', 'slider'); - - protectionToggleElement.checked = true; - protectionToggleElement.addEventListener('click', popup._disableProtection); - - if (popup.negateHtmlFilterList && !popup._domainManipulateDOM) { - manipulateDOMToggleElement.checked = true; - manipulateDOMToggleElement.addEventListener('click', popup._enableManipulateDOM); - } else if (!popup.negateHtmlFilterList && !popup._domainManipulateDOM) { - manipulateDOMToggleElement.checked = false; - manipulateDOMToggleElement.addEventListener('click', popup._enableManipulateDOM); - } else if (popup.negateHtmlFilterList && popup._domainManipulateDOM) { - manipulateDOMToggleElement.checked = false; - manipulateDOMToggleElement.addEventListener('click', popup._disableManipulateDOM); - } else if (!popup.negateHtmlFilterList && popup._domainManipulateDOM) { - manipulateDOMToggleElement.checked = true; - manipulateDOMToggleElement.addEventListener('click', popup._disableManipulateDOM); - } + return; } - websiteContextElement.setAttribute('class', 'panel'); + if (popup._blockGoogleFonts === false) { + document.getElementById('div-google-fonts').hidden = true; + } + + googleFontsToggleStyle.setAttribute('class', 'slider'); + googleFontsToggleElement.disabled = false; + + if (popup._domainGoogleFonts) { + googleFontsToggleElement.checked = true; + googleFontsToggleElement.addEventListener('click', popup._disableGoogleFonts); + } else { + googleFontsToggleElement.checked = false; + googleFontsToggleElement.addEventListener('click', popup._enableGoogleFonts); + } + + manipulateDOMToggleElement.disabled = false; + manipulateDOMToggleStyle.setAttribute('class', 'slider'); + + protectionToggleElement.checked = true; + protectionToggleElement.addEventListener('click', popup._disableProtection); + + if (popup.negateHtmlFilterList && !popup._domainManipulateDOM) { + manipulateDOMToggleElement.checked = true; + manipulateDOMToggleElement.addEventListener('click', popup._enableManipulateDOM); + } else if (!popup.negateHtmlFilterList && !popup._domainManipulateDOM) { + manipulateDOMToggleElement.checked = false; + manipulateDOMToggleElement.addEventListener('click', popup._enableManipulateDOM); + } else if (popup.negateHtmlFilterList && popup._domainManipulateDOM) { + manipulateDOMToggleElement.checked = false; + manipulateDOMToggleElement.addEventListener('click', popup._disableManipulateDOM); + } else if (!popup.negateHtmlFilterList && popup._domainManipulateDOM) { + manipulateDOMToggleElement.checked = true; + manipulateDOMToggleElement.addEventListener('click', popup._disableManipulateDOM); + } }; popup._renderInjectionPanel = function (groupedInjections) { @@ -196,6 +219,28 @@ popup._disableManipulateDOM = function () { }); }; +popup._enableGoogleFonts = function () { + let message = { + 'topic': 'google-fonts:add-domain', + 'value': popup._domain, + }; + + chrome.runtime.sendMessage(message, function () { + popup._onToggled(); + }); +}; + +popup._disableGoogleFonts = function () { + let message = { + 'topic': 'google-fonts:remove-domain', + 'value': popup._domain, + }; + + chrome.runtime.sendMessage(message, function () { + popup._onToggled(); + }); +}; + popup._determineDomainAllowlistStatus = function () { return new Promise((resolve) => { let message = { @@ -228,6 +273,20 @@ popup._determineStatusManipulateDOM = function () { }); }; +popup._determineStatusGoogleFonts = function () { + return new Promise((resolve) => { + let message = { + 'topic': 'domain:fetch-is-google-fonts', + 'value': popup._domain, + }; + + chrome.runtime.sendMessage(message, function (response) { + popup._domainGoogleFonts = response.value; + resolve(); + }); + }); +}; + popup._determineResourceInjections = function () { return new Promise((resolve) => { let message = { @@ -266,6 +325,7 @@ popup._getData = function () { popup.negateHtmlFilterList = items.data.negateHtmlFilterList; popup._loggingStatus = items.data.loggingStatus; popup.hideDonationButton = items.data.hideDonationButton; + popup._blockGoogleFonts = items.data.blockGoogleFonts; resolve(); }); }); @@ -558,5 +618,6 @@ popup._onLoggingButtonClicked = function () { popup.negateHtmlFilterList = false; popup._statisticsStatus = false; popup._loggingStatus = false; +popup._blockGoogleFonts = true; document.addEventListener('DOMContentLoaded', popup._onDocumentLoaded); diff --git a/pages/updates/updates.html b/pages/updates/updates.html index 7f91b0d4..dce40797 100644 --- a/pages/updates/updates.html +++ b/pages/updates/updates.html @@ -80,6 +80,7 @@
  • Customizable badge as HTML filter indicator (#613)
  • Customizable badge for missing resources and some code improvements (#613)
  • i18n implemented (#613)
  • +
  • Toggle button for Google Fonts (#620)