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
+
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)