mirror of
https://gitlab.com/KevinRoebert/ClearUrls
synced 2025-12-17 14:45:37 +07:00
Compare commits
68 Commits
update-dep
...
poeditor
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eef2bdb753 | ||
|
|
bd64e39e02 | ||
|
|
4a90d63539 | ||
|
|
6f76f2f167 | ||
|
|
8e1cba2eb7 | ||
|
|
1360111f15 | ||
|
|
f4e5ec70de | ||
|
|
c1b2cdbda0 | ||
|
|
71484d1488 | ||
|
|
394dda1157 | ||
|
|
854460ef50 | ||
|
|
0d49080a52 | ||
|
|
08630fbb7b | ||
|
|
93630cb8db | ||
|
|
d8e0e9fe96 | ||
|
|
42117aff9c | ||
|
|
ddc1dac829 | ||
|
|
2c12ce2def | ||
|
|
1dd91ef59a | ||
|
|
7ef8faef2f | ||
|
|
acacd6e2c4 | ||
|
|
a0ec22affb | ||
|
|
4d43f5cd07 | ||
|
|
7f8c096368 | ||
|
|
ba6fc13937 | ||
|
|
2cd54fcf28 | ||
|
|
8f5404c632 | ||
|
|
b4b2fe5bfe | ||
|
|
4c0b953972 | ||
|
|
d3ddd31d02 | ||
|
|
8f547660b9 | ||
|
|
465b76dbb2 | ||
|
|
7bb4deb83a | ||
|
|
b99263f85d | ||
|
|
d81041afe4 | ||
|
|
09c4504e5e | ||
|
|
1f7a471ec3 | ||
|
|
804e08098c | ||
|
|
55581cc6b8 | ||
|
|
23279d0c70 | ||
|
|
cff3184751 | ||
|
|
3a45f0f3bd | ||
|
|
39aef0bf19 | ||
|
|
56a91be236 | ||
|
|
99439f8dc9 | ||
|
|
20dd141d3c | ||
|
|
d4c50c037a | ||
|
|
710c1ff527 | ||
|
|
c9be70d0e8 | ||
|
|
188f83b7a0 | ||
|
|
ee32041537 | ||
|
|
e016af23a9 | ||
|
|
003ed087f7 | ||
|
|
cb22c98074 | ||
|
|
f04da7c3b2 | ||
|
|
dde6a52e4b | ||
|
|
d1950a12e8 | ||
|
|
d9c2e895c9 | ||
|
|
b60f46bd34 | ||
|
|
b2547e2564 | ||
|
|
d63727b8b7 | ||
|
|
c3e3148b88 | ||
|
|
ee8916d14a | ||
|
|
7bb4e29768 | ||
|
|
f7fbbbbe88 | ||
|
|
355b724824 | ||
|
|
b53fbc5e76 | ||
|
|
e95a59e5cc |
@@ -24,24 +24,26 @@ hash rules:
|
||||
- data.minify.json
|
||||
- rules.minify.hash
|
||||
|
||||
bundle addon:
|
||||
bundle addon firefox:
|
||||
stage: build
|
||||
script:
|
||||
- zip ClearURLs -r -FS clearurls.js browser-polyfill.js manifest.json img/* external_js/* html/* core_js/* css/* fonts/* _locales/*
|
||||
- zip ClearURLs-firefox -r -FS clearurls.js browser-polyfill.js manifest.json img/* external_js/* html/* core_js/* css/* fonts/* _locales/*
|
||||
only:
|
||||
- master
|
||||
artifacts:
|
||||
paths:
|
||||
- ClearURLs.zip
|
||||
- ClearURLs-firefox.zip
|
||||
|
||||
#bundle addon chrome:
|
||||
#stage: build
|
||||
#script:
|
||||
#- jq 'del(.applications)' manifest.json > manifest.json.tmp && mv manifest.json.tmp manifest.json
|
||||
#- zip ClearURLs-chrome -r -FS clearurls.js browser-polyfill.js manifest.json img/* external_js/* html/* core_js/* css/* fonts/* _locales/*
|
||||
#only:
|
||||
# - master
|
||||
#artifacts:
|
||||
# paths:
|
||||
# - ClearURLs-chrome.zip
|
||||
bundle addon chrome:
|
||||
stage: build
|
||||
script:
|
||||
- jq 'del(.applications)' manifest.json > manifest.json.tmp && mv manifest.json.tmp manifest.json
|
||||
- zip ClearURLs-chrome -r -FS clearurls.js browser-polyfill.js manifest.json img/* external_js/* html/* core_js/* css/* fonts/* _locales/*
|
||||
only:
|
||||
- master
|
||||
artifacts:
|
||||
paths:
|
||||
- ClearURLs-chrome.zip
|
||||
|
||||
pages:
|
||||
stage: deploy
|
||||
@@ -53,8 +55,6 @@ pages:
|
||||
- sha256sum public/data/data.min.json | awk '{print $1}' > public/data/rules.min.hash
|
||||
- node build_tools/minifyDataJSON.js "public/data/data.min.json" "public/data/data.minify.json"
|
||||
- sha256sum public/data/data.minify.json | awk '{print $1}' > public/data/rules.minify.hash
|
||||
only:
|
||||
- master
|
||||
artifacts:
|
||||
paths:
|
||||
- public
|
||||
|
||||
21
CHANGELOG.md
21
CHANGELOG.md
@@ -15,27 +15,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 37
|
||||
|
||||
## [1.27.0] - 2023-XX-XX
|
||||
|
||||
### Fixed
|
||||
- [#276](https://github.com/ClearURLs/Addon/issues/276)
|
||||
- [#196](https://github.com/ClearURLs/Addon/issues/196)
|
||||
|
||||
# Removed
|
||||
- ETag filtering for Firefox. Since Firefox 85, ETags can no longer be used for tracking users over multiple sites.
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 37
|
||||
|
||||
## [1.26.0] - 2022-11-18
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 37
|
||||
|
||||
### Changed
|
||||
- The popup window is now responsive
|
||||
|
||||
## [1.25.0] - 2022-07-27
|
||||
|
||||
|
||||
25
README.md
25
README.md
@@ -2,11 +2,11 @@
|
||||
<a href="https://liberapay.com/kroeb" target="_blank"><img src="https://raw.githubusercontent.com/KevinRoebert/DonateButtons/master/LiberaPay.png" alt="Buy Me A Coffee" height="55"></a>
|
||||
<a href="https://www.buymeacoffee.com/KevinRoebert" target="_blank"><img src="https://raw.githubusercontent.com/KevinRoebert/DonateButtons/master/BuyMeACoffee.png" alt="Buy Me A Coffee" height="55"></a>
|
||||
|
||||
[<img src="https://blog.mozilla.org/addons/files/2020/04/get-the-addon-fx-apr-2020.svg" alt="for Firefox" height="60px">](https://addons.mozilla.org/firefox/addon/clearurls/) [<img src="https://docs.clearurls.xyz/1.22.0/assets/img/MEA-button.png" alt="for Edge" height="60px">](https://microsoftedge.microsoft.com/addons/detail/mdkdmaickkfdekbjdoojfalpbkgaddei)
|
||||
[<img src="https://blog.mozilla.org/addons/files/2020/04/get-the-addon-fx-apr-2020.svg" alt="for Firefox" height="60px">](https://addons.mozilla.org/firefox/addon/clearurls/) [<img src="https://docs.clearurls.xyz/1.22.0/assets/img/MEA-button.png" alt="for Edge" height="60px">](https://microsoftedge.microsoft.com/addons/detail/mdkdmaickkfdekbjdoojfalpbkgaddei) [<img src="https://storage.googleapis.com/chrome-gcs-uploader.appspot.com/image/WlD8wC6g8khYWPJUsQceQkhXSlv1/HRs9MPufa1J1h5glNhut.png" alt="for Chrome" height="60px">](https://chrome.google.com/webstore/detail/clearurls/lckanjgmijmafbedllaakclkaicjfmnk)
|
||||
|
||||
# <sub><img src="https://gitlab.com/ClearURLs/ClearUrls/raw/master/img/clearurls.svg" width="64px" height="64px"></sub> ClearURLs [](https://gitter.im/ClearURLs/ClearURLs)
|
||||
# <sub><img src="https://gitlab.com/KevinRoebert/ClearUrls/raw/master/img/clearurls.svg" width="64px" height="64px"></sub> ClearURLs [](https://gitter.im/ClearURLs/ClearURLs)
|
||||
|
||||
**ClearURLs** is an add-on based on the new WebExtensions technology and is optimized for *Firefox* and some *Chrome* based browsers.
|
||||
**ClearURLs** is an add-on based on the new WebExtensions technology and is optimized for *Firefox* and *Chrome* based browsers.
|
||||
|
||||
This extension will automatically remove tracking elements from URLs to help protect your privacy when browsing the Internet,
|
||||
which is regularly updated by us and can be found [here](https://gitlab.com/anti-tracking/ClearURLs/rules/-/raw/master/data.min.json).
|
||||
@@ -37,7 +37,7 @@ Indeed most of the above URL is tracking code. Once ClearURLs has cleaned the ad
|
||||
* Prevents Yandex from rewriting the search results (to include tracking elements)
|
||||
|
||||
## Permissons
|
||||
Reasoning for needed permissions can be found under [here](https://gitlab.com/ClearURLs/ClearUrls/issues/159).
|
||||
Reasoning for needed permissions can be found under [here](https://gitlab.com/KevinRoebert/ClearUrls/issues/159).
|
||||
|
||||
## Screenshot
|
||||

|
||||
@@ -45,13 +45,14 @@ Reasoning for needed permissions can be found under [here](https://gitlab.com/Cl
|
||||
## CI/CD Artifacts Download (for Firefox- and Chrome-Dev only)
|
||||
Here you can download the packed files for the Firefox- and Chrome-Dev:
|
||||
|
||||
- [ClearURLs.zip](https://gitlab.com/ClearURLs/ClearUrls/-/jobs/artifacts/master/raw/ClearURLs.zip?job=bundle%20addon)
|
||||
- [ClearURLs-firefox.zip](https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/ClearURLs-firefox.zip?job=bundle%20addon%20firefox)
|
||||
- [ClearURLs-chrome.zip](https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/ClearURLs-chrome.zip?job=bundle%20addon%20chrome)
|
||||
|
||||
## Test
|
||||
If you want to test whether ClearURLs works correctly on your system, you can go to this test page: [https://test.clearurls.xyz/](https://test.clearurls.xyz/)
|
||||
|
||||
## Contribute
|
||||
If you have any suggestions or complaints, please [create an issue.](https://gitlab.com/ClearURLs/ClearUrls/issues/new)
|
||||
If you have any suggestions or complaints, please [create an issue.](https://gitlab.com/KevinRoebert/ClearUrls/issues/new)
|
||||
|
||||
**Note: If you have any suggestions or complaints regarding the rules, please [create an issue in this repo](https://gitlab.com/anti-tracking/ClearURLs/rules/-/issues/new) or email us rules.support (at) clearurls.xyz (this mail will automatically create a new issue in this repo).**
|
||||
|
||||
@@ -64,7 +65,7 @@ You can choose between two options to contribute. You can create a merge request
|
||||
It is not necessary to translate the description field; in the most cases it is empty.*
|
||||
|
||||
#### Merge request
|
||||
If you want to create a merge request, you must open the path [`_locales/en/messages.json`](https://gitlab.com/ClearURLs/ClearUrls/-/blob/master/_locales/en/messages.json) in the ClearURLs repo
|
||||
If you want to create a merge request, you must open the path [`_locales/en/messages.json`](https://github.com/KevinRoebert/ClearUrls/blob/master/_locales/en/messages.json) in the ClearURLs repo
|
||||
and translate the english terms into terms of your language. Once you have translated all the terms, you make a pull request of your translation.
|
||||
Please push your translation into the folder `_locales/{language code}/messages.json`.
|
||||
|
||||
@@ -94,14 +95,14 @@ We use some third-party scripts in our add-on. The authors and licenses are list
|
||||
- [WebExtension browser API Polyfill](https://github.com/mozilla/webextension-polyfill) |
|
||||
Copyright by Mozilla |
|
||||
[MPL-2.0](https://github.com/mozilla/webextension-polyfill/blob/master/LICENSE)
|
||||
- [Bootstrap](https://github.com/twbs/bootstrap) |
|
||||
- [Bootstrap v4.3.1](https://github.com/twbs/bootstrap/tree/v4.3.1) |
|
||||
Copyright 2011-2016 Twitter, Inc. |
|
||||
[MIT](https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
- [jQuery](https://github.com/jquery/jquery/) |
|
||||
- [jQuery v3.6.0](https://github.com/jquery/jquery/tree/3.6.0) |
|
||||
Copyright JS Foundation and other contributors |
|
||||
[MIT](https://jquery.org/license/)
|
||||
- [DataTables](https://github.com/DataTables/DataTables/tree/master) | Copyright (c) 2008-2015 SpryMedia Limited | [MIT](https://datatables.net/license/)
|
||||
- [Pickr](https://github.com/Simonwep/pickr/) | Copyright (c) 2018 - 2020 Simon Reinisch |
|
||||
- [DataTables v1.10.20](https://github.com/DataTables/DataTables/tree/master) | Copyright (c) 2008-2015 SpryMedia Limited | [MIT](https://datatables.net/license/)
|
||||
- [Pickr v1.7.0](https://github.com/Simonwep/pickr/tree/1.7.0) | Copyright (c) 2018 - 2020 Simon Reinisch |
|
||||
[MIT](https://github.com/Simonwep/pickr/blob/master/LICENSE)
|
||||
- [Font Awesome](https://github.com/FortAwesome/Font-Awesome/) | Copyright (c) @fontawesome |
|
||||
- [Font Awesome v5.12.0](https://github.com/FortAwesome/Font-Awesome/tree/5.12.0) | Copyright (c) @fontawesome |
|
||||
[Font Awesome Free License](https://github.com/FortAwesome/Font-Awesome/blob/master/LICENSE.txt)
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
factory(mod);
|
||||
global.browser = mod.exports;
|
||||
}
|
||||
})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (module) {
|
||||
/* webextension-polyfill - v0.12.0 - Tue May 14 2024 18:01:29 */
|
||||
})(this, function (module) {
|
||||
/* webextension-polyfill - v0.4.0 - Wed Feb 06 2019 11:58:31 */
|
||||
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set sts=2 sw=2 et tw=80: */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
@@ -19,11 +19,9 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
"use strict";
|
||||
|
||||
if (!(globalThis.chrome && globalThis.chrome.runtime && globalThis.chrome.runtime.id)) {
|
||||
throw new Error("This script should only be loaded in a browser extension.");
|
||||
}
|
||||
if (!(globalThis.browser && globalThis.browser.runtime && globalThis.browser.runtime.id)) {
|
||||
if (typeof browser === "undefined" || Object.getPrototypeOf(browser) !== Object.prototype) {
|
||||
const CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE = "The message port closed before a response was received.";
|
||||
const SEND_RESPONSE_DEPRECATION_WARNING = "Returning a Promise is the preferred way to send a reply from an onMessage/onMessageExternal listener, as the sendResponse will be removed from the specs (See https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage)";
|
||||
|
||||
// Wrapping the bulk of this polyfill in a one-time-use function is a minor
|
||||
// optimization for Firefox. Since Spidermonkey does not fully parse the
|
||||
@@ -252,12 +250,6 @@
|
||||
"minArgs": 3,
|
||||
"maxArgs": 3,
|
||||
"singleCallbackArg": true
|
||||
},
|
||||
"elements": {
|
||||
"createSidebarPane": {
|
||||
"minArgs": 1,
|
||||
"maxArgs": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -464,6 +456,10 @@
|
||||
"minArgs": 0,
|
||||
"maxArgs": 0
|
||||
},
|
||||
"getBrowserInfo": {
|
||||
"minArgs": 0,
|
||||
"maxArgs": 0
|
||||
},
|
||||
"getPlatformInfo": {
|
||||
"minArgs": 0,
|
||||
"maxArgs": 0
|
||||
@@ -600,14 +596,6 @@
|
||||
"minArgs": 0,
|
||||
"maxArgs": 1
|
||||
},
|
||||
"goBack": {
|
||||
"minArgs": 0,
|
||||
"maxArgs": 1
|
||||
},
|
||||
"goForward": {
|
||||
"minArgs": 0,
|
||||
"maxArgs": 1
|
||||
},
|
||||
"highlight": {
|
||||
"minArgs": 1,
|
||||
"maxArgs": 1
|
||||
@@ -706,6 +694,7 @@
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if (Object.keys(apiMetadata).length === 0) {
|
||||
throw new Error("api-metadata.json has not been included in browser-polyfill");
|
||||
}
|
||||
@@ -725,10 +714,12 @@
|
||||
super(items);
|
||||
this.createItem = createItem;
|
||||
}
|
||||
|
||||
get(key) {
|
||||
if (!this.has(key)) {
|
||||
this.set(key, this.createItem(key));
|
||||
}
|
||||
|
||||
return super.get(key);
|
||||
}
|
||||
}
|
||||
@@ -760,17 +751,13 @@
|
||||
* promise.
|
||||
* @param {function} promise.resolve
|
||||
* The promise's resolution function.
|
||||
* @param {function} promise.reject
|
||||
* @param {function} promise.rejection
|
||||
* The promise's rejection function.
|
||||
* @param {object} metadata
|
||||
* Metadata about the wrapped method which has created the callback.
|
||||
* @param {boolean} metadata.singleCallbackArg
|
||||
* Whether or not the promise is resolved with only the first
|
||||
* argument of the callback, alternatively an array of all the
|
||||
* callback arguments is resolved. By default, if the callback
|
||||
* function is invoked with only a single argument, that will be
|
||||
* resolved to the promise, while all arguments will be resolved as
|
||||
* an array if multiple are given.
|
||||
* @param {integer} metadata.maxResolvedArgs
|
||||
* The maximum number of arguments which may be passed to the
|
||||
* callback created by the wrapped async function.
|
||||
*
|
||||
* @returns {function}
|
||||
* The generated callback function.
|
||||
@@ -778,7 +765,7 @@
|
||||
const makeCallback = (promise, metadata) => {
|
||||
return (...callbackArgs) => {
|
||||
if (extensionAPIs.runtime.lastError) {
|
||||
promise.reject(new Error(extensionAPIs.runtime.lastError.message));
|
||||
promise.reject(extensionAPIs.runtime.lastError);
|
||||
} else if (metadata.singleCallbackArg || callbackArgs.length <= 1 && metadata.singleCallbackArg !== false) {
|
||||
promise.resolve(callbackArgs[0]);
|
||||
} else {
|
||||
@@ -786,6 +773,7 @@
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
const pluralizeArguments = numArgs => numArgs == 1 ? "argument" : "arguments";
|
||||
|
||||
/**
|
||||
@@ -803,13 +791,9 @@
|
||||
* The maximum number of arguments which may be passed to the
|
||||
* function. If called with more than this number of arguments, the
|
||||
* wrapper will raise an exception.
|
||||
* @param {boolean} metadata.singleCallbackArg
|
||||
* Whether or not the promise is resolved with only the first
|
||||
* argument of the callback, alternatively an array of all the
|
||||
* callback arguments is resolved. By default, if the callback
|
||||
* function is invoked with only a single argument, that will be
|
||||
* resolved to the promise, while all arguments will be resolved as
|
||||
* an array if multiple are given.
|
||||
* @param {integer} metadata.maxResolvedArgs
|
||||
* The maximum number of arguments which may be passed to the
|
||||
* callback created by the wrapped async function.
|
||||
*
|
||||
* @returns {function(object, ...*)}
|
||||
* The generated wrapper function.
|
||||
@@ -819,37 +803,35 @@
|
||||
if (args.length < metadata.minArgs) {
|
||||
throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`);
|
||||
}
|
||||
|
||||
if (args.length > metadata.maxArgs) {
|
||||
throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`);
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
if (metadata.fallbackToNoCallback) {
|
||||
// This API method has currently no callback on Chrome, but it return a promise on Firefox,
|
||||
// and so the polyfill will try to call it with a callback first, and it will fallback
|
||||
// to not passing the callback if the first call fails.
|
||||
try {
|
||||
target[name](...args, makeCallback({
|
||||
resolve,
|
||||
reject
|
||||
}, metadata));
|
||||
target[name](...args, makeCallback({ resolve, reject }, metadata));
|
||||
} catch (cbError) {
|
||||
console.warn(`${name} API method doesn't seem to support the callback parameter, ` + "falling back to call it without a callback: ", cbError);
|
||||
|
||||
target[name](...args);
|
||||
|
||||
// Update the API method metadata, so that the next API calls will not try to
|
||||
// use the unsupported callback anymore.
|
||||
metadata.fallbackToNoCallback = false;
|
||||
metadata.noCallback = true;
|
||||
|
||||
resolve();
|
||||
}
|
||||
} else if (metadata.noCallback) {
|
||||
target[name](...args);
|
||||
resolve();
|
||||
} else {
|
||||
target[name](...args, makeCallback({
|
||||
resolve,
|
||||
reject
|
||||
}, metadata));
|
||||
target[name](...args, makeCallback({ resolve, reject }, metadata));
|
||||
}
|
||||
});
|
||||
};
|
||||
@@ -881,6 +863,7 @@
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
let hasOwnProperty = Function.call.bind(Object.prototype.hasOwnProperty);
|
||||
|
||||
/**
|
||||
@@ -912,14 +895,18 @@
|
||||
has(proxyTarget, prop) {
|
||||
return prop in target || prop in cache;
|
||||
},
|
||||
|
||||
get(proxyTarget, prop, receiver) {
|
||||
if (prop in cache) {
|
||||
return cache[prop];
|
||||
}
|
||||
|
||||
if (!(prop in target)) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
let value = target[prop];
|
||||
|
||||
if (typeof value === "function") {
|
||||
// This is a method on the underlying object. Check if we need to do
|
||||
// any wrapping.
|
||||
@@ -942,9 +929,6 @@
|
||||
// of. Create a sub-object wrapper for it with the appropriate child
|
||||
// metadata.
|
||||
value = wrapObject(value, wrappers[prop], metadata[prop]);
|
||||
} else if (hasOwnProperty(metadata, "*")) {
|
||||
// Wrap all properties in * namespace.
|
||||
value = wrapObject(value, wrappers[prop], metadata["*"]);
|
||||
} else {
|
||||
// We don't need to do any wrapping for this property,
|
||||
// so just forward all access to the underlying object.
|
||||
@@ -958,11 +942,14 @@
|
||||
target[prop] = value;
|
||||
}
|
||||
});
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
cache[prop] = value;
|
||||
return value;
|
||||
},
|
||||
|
||||
set(proxyTarget, prop, value, receiver) {
|
||||
if (prop in cache) {
|
||||
cache[prop] = value;
|
||||
@@ -971,9 +958,11 @@
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
defineProperty(proxyTarget, prop, desc) {
|
||||
return Reflect.defineProperty(cache, prop, desc);
|
||||
},
|
||||
|
||||
deleteProperty(proxyTarget, prop) {
|
||||
return Reflect.deleteProperty(cache, prop);
|
||||
}
|
||||
@@ -1013,36 +1002,19 @@
|
||||
addListener(target, listener, ...args) {
|
||||
target.addListener(wrapperMap.get(listener), ...args);
|
||||
},
|
||||
|
||||
hasListener(target, listener) {
|
||||
return target.hasListener(wrapperMap.get(listener));
|
||||
},
|
||||
|
||||
removeListener(target, listener) {
|
||||
target.removeListener(wrapperMap.get(listener));
|
||||
}
|
||||
});
|
||||
const onRequestFinishedWrappers = new DefaultWeakMap(listener => {
|
||||
if (typeof listener !== "function") {
|
||||
return listener;
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps an onRequestFinished listener function so that it will return a
|
||||
* `getContent()` property which returns a `Promise` rather than using a
|
||||
* callback API.
|
||||
*
|
||||
* @param {object} req
|
||||
* The HAR entry object representing the network request.
|
||||
*/
|
||||
return function onRequestFinished(req) {
|
||||
const wrappedReq = wrapObject(req, {} /* wrappers */, {
|
||||
getContent: {
|
||||
minArgs: 0,
|
||||
maxArgs: 0
|
||||
}
|
||||
});
|
||||
listener(wrappedReq);
|
||||
};
|
||||
});
|
||||
// Keep track if the deprecation warning has been logged at least once.
|
||||
let loggedSendResponseDeprecationWarning = false;
|
||||
|
||||
const onMessageWrappers = new DefaultWeakMap(listener => {
|
||||
if (typeof listener !== "function") {
|
||||
return listener;
|
||||
@@ -1067,19 +1039,26 @@
|
||||
*/
|
||||
return function onMessage(message, sender, sendResponse) {
|
||||
let didCallSendResponse = false;
|
||||
|
||||
let wrappedSendResponse;
|
||||
let sendResponsePromise = new Promise(resolve => {
|
||||
wrappedSendResponse = function (response) {
|
||||
if (!loggedSendResponseDeprecationWarning) {
|
||||
console.warn(SEND_RESPONSE_DEPRECATION_WARNING, new Error().stack);
|
||||
loggedSendResponseDeprecationWarning = true;
|
||||
}
|
||||
didCallSendResponse = true;
|
||||
resolve(response);
|
||||
};
|
||||
});
|
||||
|
||||
let result;
|
||||
try {
|
||||
result = listener(message, sender, wrappedSendResponse);
|
||||
} catch (err) {
|
||||
result = Promise.reject(err);
|
||||
}
|
||||
|
||||
const isResultThenable = result !== true && isThenable(result);
|
||||
|
||||
// If the listener didn't returned true or a Promise, or called
|
||||
@@ -1106,6 +1085,7 @@
|
||||
} else {
|
||||
message = "An unexpected error occurred";
|
||||
}
|
||||
|
||||
sendResponse({
|
||||
__mozWebExtensionPolyfillReject__: true,
|
||||
message
|
||||
@@ -1129,10 +1109,8 @@
|
||||
return true;
|
||||
};
|
||||
});
|
||||
const wrappedSendMessageCallback = ({
|
||||
reject,
|
||||
resolve
|
||||
}, reply) => {
|
||||
|
||||
const wrappedSendMessageCallback = ({ reject, resolve }, reply) => {
|
||||
if (extensionAPIs.runtime.lastError) {
|
||||
// Detect when none of the listeners replied to the sendMessage call and resolve
|
||||
// the promise to undefined as in Firefox.
|
||||
@@ -1140,7 +1118,7 @@
|
||||
if (extensionAPIs.runtime.lastError.message === CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE) {
|
||||
resolve();
|
||||
} else {
|
||||
reject(new Error(extensionAPIs.runtime.lastError.message));
|
||||
reject(extensionAPIs.runtime.lastError);
|
||||
}
|
||||
} else if (reply && reply.__mozWebExtensionPolyfillReject__) {
|
||||
// Convert back the JSON representation of the error into
|
||||
@@ -1150,68 +1128,52 @@
|
||||
resolve(reply);
|
||||
}
|
||||
};
|
||||
|
||||
const wrappedSendMessage = (name, metadata, apiNamespaceObj, ...args) => {
|
||||
if (args.length < metadata.minArgs) {
|
||||
throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`);
|
||||
}
|
||||
|
||||
if (args.length > metadata.maxArgs) {
|
||||
throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`);
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const wrappedCb = wrappedSendMessageCallback.bind(null, {
|
||||
resolve,
|
||||
reject
|
||||
});
|
||||
const wrappedCb = wrappedSendMessageCallback.bind(null, { resolve, reject });
|
||||
args.push(wrappedCb);
|
||||
apiNamespaceObj.sendMessage(...args);
|
||||
});
|
||||
};
|
||||
|
||||
const staticWrappers = {
|
||||
devtools: {
|
||||
network: {
|
||||
onRequestFinished: wrapEvent(onRequestFinishedWrappers)
|
||||
}
|
||||
},
|
||||
runtime: {
|
||||
onMessage: wrapEvent(onMessageWrappers),
|
||||
onMessageExternal: wrapEvent(onMessageWrappers),
|
||||
sendMessage: wrappedSendMessage.bind(null, "sendMessage", {
|
||||
minArgs: 1,
|
||||
maxArgs: 3
|
||||
})
|
||||
sendMessage: wrappedSendMessage.bind(null, "sendMessage", { minArgs: 1, maxArgs: 3 })
|
||||
},
|
||||
tabs: {
|
||||
sendMessage: wrappedSendMessage.bind(null, "sendMessage", {
|
||||
minArgs: 2,
|
||||
maxArgs: 3
|
||||
})
|
||||
sendMessage: wrappedSendMessage.bind(null, "sendMessage", { minArgs: 2, maxArgs: 3 })
|
||||
}
|
||||
};
|
||||
const settingMetadata = {
|
||||
clear: {
|
||||
minArgs: 1,
|
||||
maxArgs: 1
|
||||
},
|
||||
get: {
|
||||
minArgs: 1,
|
||||
maxArgs: 1
|
||||
},
|
||||
set: {
|
||||
minArgs: 1,
|
||||
maxArgs: 1
|
||||
}
|
||||
clear: { minArgs: 1, maxArgs: 1 },
|
||||
get: { minArgs: 1, maxArgs: 1 },
|
||||
set: { minArgs: 1, maxArgs: 1 }
|
||||
};
|
||||
apiMetadata.privacy = {
|
||||
network: {
|
||||
"*": settingMetadata
|
||||
networkPredictionEnabled: settingMetadata,
|
||||
webRTCIPHandlingPolicy: settingMetadata
|
||||
},
|
||||
services: {
|
||||
"*": settingMetadata
|
||||
passwordSavingEnabled: settingMetadata
|
||||
},
|
||||
websites: {
|
||||
"*": settingMetadata
|
||||
hyperlinkAuditingEnabled: settingMetadata,
|
||||
referrersEnabled: settingMetadata
|
||||
}
|
||||
};
|
||||
|
||||
return wrapObject(extensionAPIs, staticWrappers, apiMetadata);
|
||||
};
|
||||
|
||||
@@ -1219,7 +1181,6 @@
|
||||
// `module` variable available.
|
||||
module.exports = wrapAPIs(chrome);
|
||||
} else {
|
||||
module.exports = globalThis.browser;
|
||||
module.exports = browser;
|
||||
}
|
||||
});
|
||||
//# sourceMappingURL=browser-polyfill.js.map
|
||||
|
||||
@@ -152,7 +152,7 @@ function removeFieldsFormURL(provider, pureUrl, quiet = false, request = null) {
|
||||
|
||||
let finalURL = domain;
|
||||
|
||||
if (fields.toString() !== "") finalURL += "?" + urlSearchParamsToString(fields);
|
||||
if (fields.toString() !== "") finalURL += "?" + fields.toString();
|
||||
if (fragments.toString() !== "") finalURL += "#" + fragments.toString();
|
||||
|
||||
url = finalURL.replace(new RegExp("\\?&"), "?").replace(new RegExp("#&"), "#");
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2025 Kevin Röbert
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2025 Kevin Röbert
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2025 Kevin Röbert
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2025 Kevin Röbert
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
@@ -31,16 +31,8 @@ function eTagFilter(requestDetails) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const etag = header.value.toLowerCase();
|
||||
const w = etag.startsWith('w');
|
||||
const quotes = etag.endsWith('"');
|
||||
|
||||
let len = etag.length;
|
||||
if (w) len -= 2;
|
||||
if (quotes) len -= 2;
|
||||
|
||||
// insert dummy etag
|
||||
requestDetails.responseHeaders[i].value = generateDummyEtag(len, quotes, w);
|
||||
requestDetails.responseHeaders[i].value = generateDummyEtag();
|
||||
|
||||
pushToLog(requestDetails.url, requestDetails.url, translate("eTag_filtering_log"));
|
||||
|
||||
@@ -50,29 +42,12 @@ function eTagFilter(requestDetails) {
|
||||
return {responseHeaders: requestDetails.responseHeaders};
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a random ETag.
|
||||
*
|
||||
* Must be ASCII characters placed between double quotes.
|
||||
* See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag
|
||||
*/
|
||||
function generateDummyEtag(len, quotes = true, w = false) {
|
||||
let rtn = randomASCII(len);
|
||||
|
||||
if (quotes) rtn = '"' + rtn + '"';
|
||||
if (w) rtn = 'W/' + rtn;
|
||||
|
||||
return rtn;
|
||||
function generateDummyEtag() {
|
||||
return Math.random().toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Since Firefox 85, eTags can no longer be
|
||||
* used for tracking users over multiple sites.
|
||||
*/
|
||||
if(getBrowser() !== "Firefox") {
|
||||
browser.webRequest.onHeadersReceived.addListener(
|
||||
eTagFilter,
|
||||
{urls: ["<all_urls>"]},
|
||||
["blocking", "responseHeaders"]
|
||||
);
|
||||
}
|
||||
browser.webRequest.onHeadersReceived.addListener(
|
||||
eTagFilter,
|
||||
{urls: ["<all_urls>"]},
|
||||
["blocking", "responseHeaders"]
|
||||
);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2025 Kevin Röbert
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
@@ -27,9 +27,6 @@
|
||||
function injectFunction() {
|
||||
let ele = document.createElement('script');
|
||||
let s = document.getElementsByTagName('script')[0];
|
||||
if (s === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
ele.type = 'text/javascript';
|
||||
ele.textContent = "Object.defineProperty(window, 'rwt', {" +
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2025 Kevin Röbert
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
@@ -44,7 +44,7 @@ function historyCleaner(details) {
|
||||
if(urlBefore !== urlAfter) {
|
||||
browser.tabs.executeScript(details.tabId, {
|
||||
frameId: details.frameId,
|
||||
code: 'history.replaceState(null,"",'+JSON.stringify(urlAfter)+');'
|
||||
code: 'history.replaceState({state: "cleaned_history"},"",'+JSON.stringify(urlAfter)+');'
|
||||
}).then(() => {}, onError);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2025 Kevin Röbert
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2025 Kevin Röbert
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2025 Kevin Röbert
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2025 Kevin Röbert
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2025 Kevin Röbert
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
@@ -147,20 +147,6 @@ function getData() {
|
||||
changeSwitchButton("domainBlocking", "domainBlocking");
|
||||
changeSwitchButton("pingBlocking", "pingBlocking");
|
||||
changeSwitchButton("eTagFiltering", "eTagFiltering");
|
||||
})
|
||||
.then(() => {
|
||||
/**
|
||||
* Since Firefox 85, eTags can no longer be
|
||||
* used for tracking users over multiple sites.
|
||||
*/
|
||||
browser.runtime.sendMessage({
|
||||
function: "getBrowser",
|
||||
params: []
|
||||
}).then(resp => {
|
||||
if(resp.response === "Firefox") {
|
||||
document.getElementById('etag_p').remove();
|
||||
}
|
||||
}, null);
|
||||
}).catch(handleError);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2025 Kevin Röbert
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2025 Kevin Röbert
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2025 Kevin Röbert
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
@@ -328,30 +328,3 @@ async function sha256(message) {
|
||||
|
||||
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a non-secure random ASCII string of length {@code len}.
|
||||
*
|
||||
* @returns non-secure random ASCII
|
||||
*/
|
||||
function randomASCII(len) {
|
||||
return [...Array(len)].map(() => (~~(Math.random() * 36)).toString(36)).join('');
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an URLSearchParams as string.
|
||||
* Does handle spaces correctly.
|
||||
*/
|
||||
function urlSearchParamsToString(searchParams) {
|
||||
const rtn = []
|
||||
|
||||
searchParams.forEach((value, key) => {
|
||||
if (value) {
|
||||
rtn.push(key + '=' + value)
|
||||
} else {
|
||||
rtn.push(key)
|
||||
}
|
||||
})
|
||||
|
||||
return rtn.join('&')
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2025 Kevin Röbert
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2025 Kevin Röbert
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2025 Kevin Röbert
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
|
||||
10
css/bootstrap.min.css
vendored
10
css/bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2025 Kevin Röbert
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
|
||||
6
css/datatables.min.css
vendored
6
css/datatables.min.css
vendored
File diff suppressed because one or more lines are too long
3
css/pickr.nano.min.css
vendored
3
css/pickr.nano.min.css
vendored
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2025 Kevin Röbert
|
||||
* Copyright (c) 2017-2020 Kevin Röbert
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
|
||||
10
external_js/bootstrap.min.js
vendored
10
external_js/bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
205
external_js/datatables.min.js
vendored
205
external_js/datatables.min.js
vendored
File diff suppressed because one or more lines are too long
5
external_js/fontawesome/all.min.js
vendored
5
external_js/fontawesome/all.min.js
vendored
File diff suppressed because one or more lines are too long
2
external_js/jquery-3.6.0.min.js
vendored
Normal file
2
external_js/jquery-3.6.0.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
external_js/jquery-3.7.1.min.js
vendored
2
external_js/jquery-3.7.1.min.js
vendored
File diff suppressed because one or more lines are too long
6
external_js/pickr.min.js
vendored
6
external_js/pickr.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
||||
<!--
|
||||
ClearURLs
|
||||
Copyright (c) 2017-2025 Kevin Röbert
|
||||
Copyright (c) 2017-2020 Kevin Röbert
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<!--
|
||||
ClearURLs
|
||||
Copyright (c) 2017-2025 Kevin Röbert
|
||||
Copyright (c) 2017-2020 Kevin Röbert
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
@@ -53,15 +53,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
direction: ltr;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#logTable_wrapper .dt-paging {
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
#logTable_wrapper .dt-search, .dt-length{
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -121,7 +112,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
<!-- Optional JavaScript -->
|
||||
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
|
||||
<script src="../browser-polyfill.js"></script>
|
||||
<script src="../external_js/jquery-3.7.1.min.js"></script>
|
||||
<script src="../external_js/jquery-3.6.0.min.js"></script>
|
||||
<script src="../external_js/datatables.min.js"></script>
|
||||
<script src="../core_js/log.js"></script>
|
||||
<script src="../core_js/write_version.js"></script>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<!--
|
||||
ClearURLs
|
||||
Copyright (c) 2017-2025 Kevin Röbert
|
||||
Copyright (c) 2017-2020 Kevin Röbert
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
@@ -32,9 +32,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
</head>
|
||||
<body>
|
||||
<div class="container-fluid"
|
||||
style="min-width: 200px">
|
||||
style="min-width: 200px;">
|
||||
<div class="row">
|
||||
<nav class="col-sm-12 navbar-margin navbar navbar-dark bg-dark">
|
||||
<nav class="col-sm-1 navbar-margin navbar navbar-dark bg-dark">
|
||||
<div class="container">
|
||||
<span class="navbar-brand">
|
||||
<span class="float-left"><img src="../img/clearurls.svg"
|
||||
@@ -53,14 +53,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
</div>
|
||||
|
||||
<div class="row" id="references_section">
|
||||
<div class="col-sm-4 offset-sm-4 text-center">
|
||||
<div class="col-sm-1 text-center">
|
||||
<a id="cleaning_tools" target="_blank"><span class="fas fa-tools" style="font-size: 1.5em; margin-right: 1em;"></span></a>
|
||||
<a id="settings" target="_blank"><span class="fas fa-cog" style="font-size: 1.5em"></span></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" id="config_section">
|
||||
<div class="col-sm-4 offset-sm-4">
|
||||
<div class="col-sm-1">
|
||||
<h5><b id="configs_head"></b></h5>
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="globalStatus">
|
||||
@@ -91,7 +91,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
</div>
|
||||
|
||||
<div class="row" id="statistic_section">
|
||||
<div class="col-sm-4 offset-sm-4">
|
||||
<div class="col-sm-1">
|
||||
<h5><b id="statistics_head"></b></h5>
|
||||
|
||||
<div class="progress">
|
||||
@@ -133,7 +133,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
</div>
|
||||
|
||||
<div class="row" id="status_section">
|
||||
<div class="col-sm-4 offset-sm-4">
|
||||
<div class="col-sm-1">
|
||||
<h5><b id="rules_status_head"></b></h5>
|
||||
<div class="text-center">
|
||||
<a href="https://gitlab.com/ClearURLs/rules/-/commits/master/data.min.json"
|
||||
@@ -145,7 +145,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
</div>
|
||||
<br />
|
||||
<div class="row" id="log_section">
|
||||
<div class="col-sm-4 offset-sm-4">
|
||||
<div class="col-sm-1">
|
||||
<div class="text-center">
|
||||
<a id="loggingPage" target="_blank"
|
||||
class="btn btn-default btn-sm btn-block text-wrap"></a>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<!--
|
||||
ClearURLs
|
||||
Copyright (c) 2017-2025 Kevin Röbert
|
||||
Copyright (c) 2017-2020 Kevin Röbert
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
@@ -157,7 +157,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
</p>
|
||||
<p id="etag_p">
|
||||
<p>
|
||||
<label id="eTag_filtering_enabled" style="font-weight: bold;"></label><br />
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="eTagFiltering">
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<!--
|
||||
ClearURLs
|
||||
Copyright (c) 2017-2025 Kevin Röbert
|
||||
Copyright (c) 2017-2020 Kevin Röbert
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "ClearURLs",
|
||||
"version": "1.27.0",
|
||||
"version": "1.25.0",
|
||||
"author": "Kevin Roebert",
|
||||
"description": "__MSG_extension_description__",
|
||||
"homepage_url": "https://docs.clearurls.xyz",
|
||||
"default_locale": "en",
|
||||
"content_security_policy": "script-src 'self'; object-src 'none'",
|
||||
"browser_specific_settings": {
|
||||
"applications": {
|
||||
"gecko": {
|
||||
"id": "{74145f27-f039-47ce-a470-a662b129930a}"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user