9 Commits

Author SHA1 Message Date
Kevin
c19dcc1716 Merge branch 'whitelist' into 'master'
Draft: Whitelist

See merge request ClearURLs/ClearUrls!110
2025-01-27 19:19:01 +00:00
Kevin R
308a2f1579 Version 1.27.2 2025-01-27 20:17:56 +01:00
Grigory
d33a86ce3c fix(tools): encode search uri params 2025-01-27 22:38:29 +05:00
Kevin R
08de228cc5 changes 2024-07-14 14:09:36 +00:00
Banaanae
fcbe2abfdd Fix updating whitelist button
- Button now reflects whitelist status instantly
- Fixed bug where only last site whitelisted displayed properly
- No longer breaks when spammed
- Removed test code
2024-07-14 14:09:36 +00:00
Banaanae
81eb931e02 fix styling; allow removing of sites
still needs to update after press
2024-07-14 14:09:36 +00:00
Banaanae
da90e259bb handle url better; fix saving when edited
... via settings
2024-07-14 14:09:36 +00:00
Banaanae
6a63859635 allowing editing of whitelisted sites in settings
just show data in a text input
no fancy formatting needed!
2024-07-14 14:09:36 +00:00
Banaanae
e86654ed29 first commit for adding whitelist
base functionality
2024-07-14 14:09:36 +00:00
10 changed files with 115 additions and 2 deletions

View File

@@ -15,6 +15,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Require Firefox >= 55
- Require Chrome >= 37
## [1.27.2] - 2025-01-27
### Fixed
Special thanks to [SunsetTechuila](https://github.com/SunsetTechuila) for providing [PR 415](https://github.com/ClearURLs/Addon/pull/415)
- https://bugzilla.mozilla.org/show_bug.cgi?id=1943562
- https://bugzilla.mozilla.org/show_bug.cgi?id=1942909
- https://bugzilla.mozilla.org/show_bug.cgi?id=1942705
- https://bugzilla.mozilla.org/show_bug.cgi?id=1943842
- https://bugzilla.mozilla.org/show_bug.cgi?id=1943807
- [#407](https://github.com/ClearURLs/Addon/issues/407)
- [#408](https://github.com/ClearURLs/Addon/issues/408)
- [#409](https://github.com/ClearURLs/Addon/issues/409)
- [#410](https://github.com/ClearURLs/Addon/issues/410)
- [#411](https://github.com/ClearURLs/Addon/issues/411)
- [#412](https://github.com/ClearURLs/Addon/issues/412)
- [#413](https://github.com/ClearURLs/Addon/issues/413)
## [1.27.1] - 2025-01-05
### Changed

View File

@@ -87,6 +87,14 @@
"message": "Show numbers of cleaned urls",
"description": "This string is used as title for the badges switch button on the popup page."
},
"popup_html_configs_whitelist_button_add": {
"message": "Whitelist Site",
"description": "This string is used as name for the whitelist button on the popup page."
},
"popup_html_configs_whitelist_button_remove": {
"message": "Remove from Whitelist",
"description": "This string is used as name for the whitelist button on the popup page."
},
"popup_html_statistics_head": {
"message": "Statistics",
"description": "This string is used as title for the statistics on the popup page."
@@ -179,6 +187,10 @@
"message": "The url to the rules.hash file (hash)",
"description": "This string is used as name for the rule.hash url label."
},
"setting_whitelist_list_label": {
"message": "Whitelisted sites",
"description": "This string is used as name for the whitelisted sites list label."
},
"setting_types_label": {
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Request types</a> (expert level)",
"description": "This string is used as name for the types label."

View File

@@ -47,6 +47,19 @@ function removeFieldsFormURL(provider, pureUrl, quiet = false, request = null) {
let rawRules = provider.getRawRules();
let urlObject = new URL(url);
/*
* Skip whitelisted sites
*/
for (const site of storage.whitelist) {
if (url.indexOf(site) !== -1) {
return {
"changes": false,
"url": url,
"cancel": false
}
}
}
if (storage.localHostsSkipping && checkLocalURL(urlObject)) {
return {
"changes": false,

View File

@@ -62,6 +62,34 @@ function changeStatistics()
elTotal.textContent = totalCounter.toLocaleString();
}
/**
* Set the whitelist button text
*/
function setWhitelistText()
{
let element = document.getElementById('whitelist_btn');
let currentSite;
browser.tabs.query({active: true, currentWindow: true}, function(tabs) {
currentSite = tabs[0].url;
});
browser.runtime.sendMessage({
function: "getData",
params: ['whitelist']
}).then((data) => {
let siteFound = data.response.some(site => currentSite.indexOf(site) !== -1);
if (siteFound) {
element.classList.replace('btn-primary', 'btn-danger')
element.textContent = translate('popup_html_configs_whitelist_button_remove')
document.getElementById('whitelist_btn').onclick = () => {changeWhitelist(true)};
} else {
element.classList.replace('btn-danger', 'btn-primary')
element.textContent = translate('popup_html_configs_whitelist_button_add')
document.getElementById('whitelist_btn').onclick = () => {changeWhitelist(false)};
}
}).catch(handleError);
}
/**
* Set the value for the hashStatus on startUp.
*/
@@ -155,6 +183,36 @@ function setSwitchButton(id, varname)
element.checked = this[varname];
}
/**
* Adds (or removes) the site the user is on to the whitelist
* Whitelisted sites do not get filtered
* @param {boolean} removeWl If true remove current site instead of adding
*/
function changeWhitelist(removeWl) {
let site;
browser.tabs.query({active: true, currentWindow: true}, function(tabs) { // Couldn't figure out how to access currentUrl var
site = tabs[0].url; // So this is used instead
});
browser.runtime.sendMessage({
function: "getData",
params: ['whitelist']
}).then((data) => {
let siteUrl = new URL(site)
let domain = siteUrl.hostname
if (removeWl) {
data.response = data.response.filter(wlSite => wlSite !== domain)
} else {
data.response.push(domain)
}
browser.runtime.sendMessage({
function: "setData",
params: ['whitelist', data.response]
}).then(() => {
setWhitelistText();
}).catch(handleError);
}).catch(handleError);
}
/**
* Reset the global statistic
*/
@@ -220,6 +278,7 @@ function setText()
injectText('configs_switch_filter','popup_html_configs_switch_filter');
injectText('configs_head','popup_html_configs_head');
injectText('configs_switch_statistics','configs_switch_statistics');
setWhitelistText();
document.getElementById('donate').title = translate('donate_button');
}

View File

@@ -82,6 +82,7 @@ function save() {
saveData("badged_color", pickr.getColor().toHEXA().toString())
.then(() => saveData("ruleURL", document.querySelector('input[name=ruleURL]').value))
.then(() => saveData("hashURL", document.querySelector('input[name=hashURL]').value))
.then(() => saveData("whitelist", document.querySelector('input[name=whitelist]').value.split(',')))
.then(() => saveData("types", document.querySelector('input[name=types]').value))
.then(() => saveData("logLimit", Math.max(0, Math.min(5000, document.querySelector('input[name=logLimit]').value))))
.then(() => browser.runtime.sendMessage({
@@ -122,6 +123,7 @@ function getData() {
loadData("ruleURL")
.then(() => loadData("hashURL"))
.then(() => loadData("whitelist"))
.then(() => loadData("types"))
.then(() => loadData("logLimit"))
.then(logData => {
@@ -216,6 +218,7 @@ function setText() {
document.getElementById('reset_settings_btn').setAttribute('title', translate('setting_html_reset_button_title'));
document.getElementById('rule_url_label').textContent = translate('setting_rule_url_label');
document.getElementById('hash_url_label').textContent = translate('setting_hash_url_label');
document.getElementById('whitelist_list_label').textContent = translate('setting_whitelist_list_label');
document.getElementById('types_label').innerHTML = translate('setting_types_label');
document.getElementById('save_settings_btn').textContent = translate('settings_html_save_button');
document.getElementById('save_settings_btn').setAttribute('title', translate('settings_html_save_button_title'));

View File

@@ -216,6 +216,7 @@ function initSettings() {
storage.badged_color = "#ffa500";
storage.hashURL = "https://rules2.clearurls.xyz/rules.minify.hash";
storage.ruleURL = "https://rules2.clearurls.xyz/data.minify.json";
storage.whitelist = []; // TODO: If we do whitelist per rule, this needs to be obj
storage.contextMenuEnabled = true;
storage.historyListenerEnabled = true;
storage.localHostsSkipping = true;

View File

@@ -347,7 +347,7 @@ function urlSearchParamsToString(searchParams) {
searchParams.forEach((value, key) => {
if (value) {
rtn.push(key + '=' + value)
rtn.push(key + '=' + encodeURIComponent(value))
} else {
rtn.push(key)
}

View File

@@ -86,6 +86,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<label id="configs_switch_statistics"></label>
</label>
<div class="clearfix"></div>
<div class="text-center">
<button type="button" id="whitelist_btn" class="btn btn-primary btn-sm text-wrap"></button>
</div>
<br />
</div>
</div>

View File

@@ -105,6 +105,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<input type="url" id="hashURL" value="" name="hashURL" class="form-control" />
</p>
<br />
<p>
<label id="whitelist_list_label"></label><br />
<input type="text" id="whitelist" value="" name="whitelist" class="form-control" />
</p>
<br />
<p>
<label id="types_label"></label><br />
<input type="text" id="types" value="" name="types" class="form-control" />

View File

@@ -1,7 +1,7 @@
{
"manifest_version": 2,
"name": "ClearURLs",
"version": "1.27.1",
"version": "1.27.2",
"author": "Kevin Roebert",
"description": "__MSG_extension_description__",
"homepage_url": "https://docs.clearurls.xyz",