Compare commits
127 Commits
v1.3.4.0_c
...
react-test
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f59ff2f453 | ||
|
|
9537b181b8 | ||
|
|
291118d185 | ||
|
|
b75235f306 | ||
|
|
f4ad457047 | ||
|
|
0f1ade94a2 | ||
|
|
cd988ed24e | ||
|
|
5da65aed98 | ||
|
|
15daf50c71 | ||
|
|
dbe7c603f9 | ||
|
|
53de1eae53 | ||
|
|
a3d3818766 | ||
|
|
6c113d4ebd | ||
|
|
830cc055db | ||
|
|
ccd40c7df3 | ||
|
|
1a057e8494 | ||
|
|
2506dc6ebc | ||
|
|
44b0c043f8 | ||
|
|
f9289d9216 | ||
|
|
4d9e066781 | ||
|
|
fe8de86c73 | ||
|
|
89963b0d6d | ||
|
|
e3191eecb1 | ||
|
|
5c3b1f4880 | ||
|
|
a78256e52d | ||
|
|
bb516b81d8 | ||
|
|
a35ef95d66 | ||
|
|
836cfc74da | ||
|
|
4eddd4e594 | ||
|
|
4670cacc7d | ||
|
|
484b52319c | ||
|
|
ad404ae6f7 | ||
|
|
531ade1b05 | ||
|
|
f53ea156c0 | ||
|
|
3e2e75d38b | ||
|
|
c9f2deab11 | ||
|
|
8ca852476d | ||
|
|
1d6d36eb8c | ||
|
|
a8a5f7e311 | ||
|
|
929aa53aa1 | ||
|
|
aa2344b4cc | ||
|
|
7999077671 | ||
|
|
75275bad7e | ||
|
|
54d72e7865 | ||
|
|
61d285be99 | ||
|
|
217393ded8 | ||
|
|
91d46a7b70 | ||
|
|
ae139af5ea | ||
|
|
a41deb20d8 | ||
|
|
a76ecb17b3 | ||
|
|
dfebef07ac | ||
|
|
1b6cc37bdd | ||
|
|
cfd3bf5f43 | ||
|
|
a91b79aa18 | ||
|
|
4fc4018859 | ||
|
|
e87aa9d027 | ||
|
|
9b7dd7f9cb | ||
|
|
8b8ac33ed2 | ||
|
|
a67abc6bc6 | ||
|
|
c53a36999c | ||
|
|
1caeeb29ab | ||
|
|
0a948968b3 | ||
|
|
304cbe2e6b | ||
|
|
ed61dbdbaf | ||
|
|
2d1d81810e | ||
|
|
c9f3b3610d | ||
|
|
932511fbf8 | ||
|
|
28af5a8630 | ||
|
|
36300bf1c9 | ||
|
|
4f86852312 | ||
|
|
03e0580b20 | ||
|
|
869cd63e64 | ||
|
|
f69ae79adb | ||
|
|
cd6bb5d6f5 | ||
|
|
f02d36c6a7 | ||
|
|
f46daa7205 | ||
|
|
cc358744f2 | ||
|
|
df4e461102 | ||
|
|
9a6adad225 | ||
|
|
1e15c8a265 | ||
|
|
d87d88250d | ||
|
|
1175d0ff9d | ||
|
|
bfabe4ca98 | ||
|
|
80af6f6fea | ||
|
|
43a510efe7 | ||
|
|
2a158f6dd7 | ||
|
|
8f70a49bb2 | ||
|
|
6b2e79669c | ||
|
|
8231ade8a3 | ||
|
|
239ee17697 | ||
|
|
805ef75f7f | ||
|
|
4367f13f03 | ||
|
|
b9931f0d63 | ||
|
|
b87eaa4eea | ||
|
|
9c638c52f9 | ||
|
|
3480dd71c5 | ||
|
|
110fd19a07 | ||
|
|
3cc2d6d1a8 | ||
|
|
18cc61de0b | ||
|
|
6395335428 | ||
|
|
f2034a9b7e | ||
|
|
15ad222706 | ||
|
|
688026c408 | ||
|
|
8884674e36 | ||
|
|
81bc71de5e | ||
|
|
03cdcbb38a | ||
|
|
078b51de98 | ||
|
|
c39ead0a6d | ||
|
|
a57591cd0b | ||
|
|
8bee5b99f1 | ||
|
|
4321771762 | ||
|
|
32b525363a | ||
|
|
c6f66ec646 | ||
|
|
f139e628ab | ||
|
|
23e7fa4064 | ||
|
|
99ba98f909 | ||
|
|
126dc02e07 | ||
|
|
a8334e60fa | ||
|
|
0b3b1f7498 | ||
|
|
3fae440364 | ||
|
|
6b9f9a5ca1 | ||
|
|
2266cbb434 | ||
|
|
11abcf9783 | ||
|
|
d2d4b25f0b | ||
|
|
57de51eb53 | ||
|
|
ca6d0e037d | ||
|
|
f3c86db0b9 |
17
.gitignore
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
# See https://help.github.com/ignore-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
.env
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
42
.gitlab-ci.yml
Normal file
@@ -0,0 +1,42 @@
|
||||
image: debian:latest
|
||||
|
||||
before_script:
|
||||
- export DEBIAN_FRONTEND= noninteractive
|
||||
- apt-get update -y
|
||||
- apt-get install -y zip unzip jq
|
||||
|
||||
stages:
|
||||
- build
|
||||
|
||||
hash rules:
|
||||
stage: build
|
||||
script:
|
||||
- sha256sum data/data.min.json | awk '{print $1}' > rules.min.hash
|
||||
artifacts:
|
||||
paths:
|
||||
- rules.min.hash
|
||||
|
||||
build firefox:
|
||||
stage: build
|
||||
script:
|
||||
- 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_firefox.zip
|
||||
|
||||
build chrome:
|
||||
stage: build
|
||||
script:
|
||||
- jq 'del(.applications) | .description=""' 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
|
||||
248
CHANGELOG.md
Normal file
@@ -0,0 +1,248 @@
|
||||
# Changelog
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [1.7.1] - 2019-08-04
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Added
|
||||
- Added new setting to data.min.json to set if redirects should be enforced via a "tabs.update" ([#221](https://gitlab.com/KevinRoebert/ClearUrls/issues/221))
|
||||
- Added [#220](https://gitlab.com/KevinRoebert/ClearUrls/issues/220)
|
||||
- Added [#218](https://gitlab.com/KevinRoebert/ClearUrls/issues/218)
|
||||
|
||||
### Fixed
|
||||
- Fixed YouTube ad redirection bug ([#221](https://gitlab.com/KevinRoebert/ClearUrls/issues/221))
|
||||
- Fixed [#217](https://gitlab.com/KevinRoebert/ClearUrls/issues/217)
|
||||
|
||||
## [1.7.0] - 2019-07-30
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Added
|
||||
- Added support for raw rules to cleaning also parts from URL-path
|
||||
|
||||
### Fixed
|
||||
- Fixed misspelling in german translation
|
||||
|
||||
## [1.6.9] - 2019-07-29
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Fixed
|
||||
- Fixed error in fields RegExp
|
||||
|
||||
## [1.6.8] - 2019-07-28
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Changed
|
||||
- Improvements on check for android systems ([#206](https://gitlab.com/KevinRoebert/ClearUrls/issues/206))
|
||||
|
||||
### Fixed
|
||||
- [#205](https://gitlab.com/KevinRoebert/ClearUrls/issues/205)
|
||||
|
||||
## [1.6.7] - 2019-07-25
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Fixed
|
||||
- [#175](https://gitlab.com/KevinRoebert/ClearUrls/issues/175) by [@yukulele](https://gitlab.com/yukulele)
|
||||
- [#196](https://gitlab.com/KevinRoebert/ClearUrls/issues/196)
|
||||
- [#204](https://gitlab.com/KevinRoebert/ClearUrls/issues/204)
|
||||
|
||||
## [1.6.6] - 2019-06-14
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Fixed
|
||||
- [#171](https://gitlab.com/KevinRoebert/ClearUrls/issues/171)
|
||||
- [#195](https://gitlab.com/KevinRoebert/ClearUrls/issues/195)
|
||||
|
||||
## [1.6.5] - 2019-06-12
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Added
|
||||
- Added support for fragment cleaning
|
||||
|
||||
### Fixed
|
||||
- [#171](https://gitlab.com/KevinRoebert/ClearUrls/issues/171)
|
||||
- [#191](https://gitlab.com/KevinRoebert/ClearUrls/issues/191)
|
||||
- [#192](https://gitlab.com/KevinRoebert/ClearUrls/issues/192)
|
||||
- [#193](https://gitlab.com/KevinRoebert/ClearUrls/issues/193)
|
||||
- [#194](https://gitlab.com/KevinRoebert/ClearUrls/issues/194)
|
||||
|
||||
## [1.6.4] - 2019-05-07
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Added
|
||||
- Added Polish translation by [@alekksander](https://gitlab.com/alekksander)
|
||||
|
||||
## [1.6.3] - 2019-05-06
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Added
|
||||
- Added redirection from [#181](https://gitlab.com/KevinRoebert/ClearUrls/issues/181)
|
||||
|
||||
### Changed
|
||||
- Update french translation by [@hydrargyrum](https://gitlab.com/hydrargyrum)
|
||||
- Update chinese translation
|
||||
|
||||
## [1.6.2] - 2019-04-26
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Added
|
||||
- Added rules from [#172](https://gitlab.com/KevinRoebert/ClearUrls/issues/172)
|
||||
- Added rules from [#176](https://gitlab.com/KevinRoebert/ClearUrls/issues/176)
|
||||
- Added rules from [#178](https://gitlab.com/KevinRoebert/ClearUrls/issues/178)
|
||||
|
||||
### Fixed
|
||||
- [#170](https://gitlab.com/KevinRoebert/ClearUrls/issues/170)
|
||||
- [#162](https://gitlab.com/KevinRoebert/ClearUrls/issues/162)
|
||||
- [#163](https://gitlab.com/KevinRoebert/ClearUrls/issues/163)
|
||||
|
||||
## [[1.6.1] - 2019-04-14](https://gitlab.com/KevinRoebert/ClearUrls/commit/a8a5f7e311300ae7f186d4b581e805bdf3f9f5d9)
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 22
|
||||
|
||||
### Changed
|
||||
- Chinese translations by [@yipinghuang](https://gitlab.com/yipinghuang)
|
||||
- French translations
|
||||
|
||||
## [1.6] - 2019-04-11
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 28
|
||||
|
||||
### Added
|
||||
- Added listener to the browser history to prevent tracking with the [history.pushState method](https://developer.mozilla.org/en-US/docs/Web/API/History_API)
|
||||
- Added webNavigation and tabs permissions, for the new feature
|
||||
- Added switches in settings to enable and disable the context menu entry and the history listener
|
||||
- Added tool to clean URLs, that was pasted into a textbox
|
||||
- Added icon for new tool to clean URLs
|
||||
|
||||
### Fixed
|
||||
- [#40](https://gitlab.com/KevinRoebert/ClearUrls/issues/40), see also https://curl.kevinroebert.de
|
||||
- [#103](https://gitlab.com/KevinRoebert/ClearUrls/issues/103), see also https://curl.kevinroebert.de
|
||||
|
||||
### Changed
|
||||
- Changed clipboard-helper.js path to be absolute to prevent problems
|
||||
- Changed rewrite of old GitHub links to the new data.min.json and rules.min.hash
|
||||
- Config icon is now bigger and above the config label
|
||||
- Update Traditional Chinese Translation by [@yipinghuang](https://gitlab.com/yipinghuang)
|
||||
|
||||
## [[1.5.8] - 2019-04-10](https://gitlab.com/KevinRoebert/ClearUrls/commit/1b6cc37bdd23011d006bf7ef6824463e7c96067a)
|
||||
|
||||
### Compatibility note
|
||||
- Require Firefox >= 55
|
||||
- Require Chrome >= 28
|
||||
|
||||
### Added
|
||||
- Added context menu entry, to clean and copy links into clipboard
|
||||
|
||||
## [[1.5.4] - 2019-04-08](https://gitlab.com/KevinRoebert/ClearUrls/commit/0a948968b309f418ec4175dd23fedb0b88c97086)
|
||||
|
||||
### Fixed
|
||||
- Changed icon format from svg into png to support Chrome
|
||||
|
||||
## [[1.5.3] - 2019-04-03](https://gitlab.com/KevinRoebert/ClearUrls/commit/304cbe2e6bf3756f4bcb675ec4b8b7403158ea5c)
|
||||
|
||||
### Removed
|
||||
- Removed the *tab permission*, because it is not required for all used methods on the tabs api
|
||||
|
||||
## [[1.5.2] - 2019-04-01](https://gitlab.com/KevinRoebert/ClearUrls/commit/03e0580b202fc0a77f442f284dd5470cddbbd5c0)
|
||||
|
||||
### Added
|
||||
- Added new screenshots of the ClearURLs popup
|
||||
|
||||
### Changed
|
||||
- Replaced *webextension-polyfill* v.0.3.1 with the new version v0.4.0
|
||||
- Updated the Chrome version of ClearURLs to the newest version
|
||||
- Changed ClearURLs to support both Firefox and Chrome, without generating every time to different source codes
|
||||
- Changed the GitLab-CI to build the Chrome version automatically from the Firefox version
|
||||
- Replaced the old screenshots in the README with new ones
|
||||
|
||||
### Removed
|
||||
- Removed the old ClearURLs Chrome version
|
||||
|
||||
## [[1.5.1.6a] - 2019-03-27](https://gitlab.com/KevinRoebert/ClearUrls/commit/869cd63e645e2cacaf26017366fa4eaa3fb97411)
|
||||
|
||||
### Fixed
|
||||
- Added own flat function and a function that removes empty fields from arrays to support Waterfox
|
||||
|
||||
## [[1.5.1.5a] - 2019-03-18](https://gitlab.com/KevinRoebert/ClearUrls/commit/d87d88250dccd07570c10b37f41054ed44a0ee97)
|
||||
|
||||
### Fixed
|
||||
- Bugfix to support Android devices again
|
||||
|
||||
## [[1.5.1a] - 2019-03-14](https://gitlab.com/KevinRoebert/ClearUrls/commit/80af6f6feac086490f841adad5fe769d71be86f8)
|
||||
|
||||
### Added
|
||||
- Added *unlimitedStorage* permissions to prevent storage restrictions (which will come in future versions of firefox) and to have enough space for user generated rules
|
||||
|
||||
### Changed
|
||||
- Changed the regex interpretation for better performance
|
||||
|
||||
## [[1.5a] - 2019-03-14](https://gitlab.com/KevinRoebert/ClearUrls/commit/80af6f6feac086490f841adad5fe769d71be86f8)
|
||||
|
||||
### Added
|
||||
- New rules file *data.min.json* that is a minimized version of the old one
|
||||
- New technique to get data from the local storage
|
||||
- The command pattern has been implemented so that ClearURLs also works in private mode
|
||||
- Automatically generating hash for *data.min.json* file with GitLab-CI
|
||||
- Add start and end delimiters to rules
|
||||
- Preparations for costume rules
|
||||
|
||||
### Changed
|
||||
- Storage improvements, better performance
|
||||
- Splitted core file into multiple pieces for better overview
|
||||
- Minimize rules length
|
||||
|
||||
### Fixed
|
||||
- [#124](https://gitlab.com/KevinRoebert/ClearUrls/issues/124)
|
||||
|
||||
### Removed
|
||||
- Warning in private mode (no longer necessary)
|
||||
- Removed *Report URL* function
|
||||
|
||||
## [[1.3.4.2] - 2019-02-01](https://gitlab.com/KevinRoebert/ClearUrls/commit/23e7fa406436c40c561c1e0108c5e9c8c7e9e0d8)
|
||||
|
||||
### Changed
|
||||
- Updated Ukrainian translation from [@a-polivanchuk](https://gitlab.com/a-polivanchuk)
|
||||
|
||||
## [[1.3.4.0] - 2018-10-08](https://gitlab.com/KevinRoebert/ClearUrls/commit/06b84d749084997e3d759ebd916772b446adfe9c)
|
||||
|
||||
## Added
|
||||
- Added more request types, as proposed in [#106](https://gitlab.com/KevinRoebert/ClearUrls/issues/106)
|
||||
|
||||
## Updated
|
||||
- Updated french translation
|
||||
@@ -1,892 +0,0 @@
|
||||
/*
|
||||
* ##################################################################
|
||||
* # Fetch Rules & Exception from URL #
|
||||
* ##################################################################
|
||||
*/
|
||||
var providers = [];
|
||||
var prvKeys = [];
|
||||
var badges = [];
|
||||
var tabid = 0;
|
||||
var siteBlockedAlert = 'javascript:void(0)';
|
||||
var dataHash;
|
||||
var localDataHash;
|
||||
var os;
|
||||
var currentURL;
|
||||
|
||||
var storage = [];
|
||||
|
||||
getDataFromDisk();
|
||||
|
||||
function start(items)
|
||||
{
|
||||
initStorage(items);
|
||||
|
||||
/**
|
||||
* Save OS Version
|
||||
*/
|
||||
chrome.runtime.getPlatformInfo(function(info) {
|
||||
|
||||
os = info.os;
|
||||
|
||||
|
||||
/**
|
||||
* Initialize the JSON provider object keys.
|
||||
*
|
||||
* @param {JSON Object} obj
|
||||
*/
|
||||
function getKeys(obj){
|
||||
for(var key in obj){
|
||||
prvKeys.push(key);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the providers form the JSON object.
|
||||
*
|
||||
*/
|
||||
function createProviders()
|
||||
{
|
||||
data = storage.ClearURLsData;
|
||||
|
||||
for(var p = 0; p < prvKeys.length; p++)
|
||||
{
|
||||
//Create new provider
|
||||
providers.push(new Provider(prvKeys[p],data.providers[prvKeys[p]].completeProvider));
|
||||
|
||||
//Add URL Pattern
|
||||
providers[p].setURLPattern(data.providers[prvKeys[p]].urlPattern);
|
||||
|
||||
//Add rules to provider
|
||||
for(var r = 0; r < data.providers[prvKeys[p]].rules.length; r++)
|
||||
{
|
||||
providers[p].addRule(data.providers[prvKeys[p]].rules[r]);
|
||||
}
|
||||
|
||||
//Add exceptions to provider
|
||||
for(var e = 0; e < data.providers[prvKeys[p]].exceptions.length; e++)
|
||||
{
|
||||
providers[p].addException(data.providers[prvKeys[p]].exceptions[e]);
|
||||
}
|
||||
|
||||
//Add redirections to provider
|
||||
for(var re = 0; re < data.providers[prvKeys[p]].redirections.length; re++)
|
||||
{
|
||||
providers[p].addRedirection(data.providers[prvKeys[p]].redirections[re]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the external data to Objects and
|
||||
* call the create provider function.
|
||||
*
|
||||
* @param {String} retrievedText - pure data form github
|
||||
*/
|
||||
function toObject(retrievedText) {
|
||||
getKeys(storage.ClearURLsData.providers);
|
||||
createProviders();
|
||||
}
|
||||
|
||||
/**
|
||||
* Load local saved data, if the browser is offline or
|
||||
* some other network trouble.
|
||||
*/
|
||||
function loadOldDataFromStore()
|
||||
{
|
||||
localDataHash = storage.dataHash;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the hash status to the local storage.
|
||||
* The status can have the following values:
|
||||
* 1 "up to date"
|
||||
* 2 "updated"
|
||||
* 3 "update available"
|
||||
* @param status_code the number for the status
|
||||
*/
|
||||
function storeHashStatus(status_code)
|
||||
{
|
||||
switch(status_code)
|
||||
{
|
||||
case 1: status_code = "hash_status_code_1";
|
||||
break;
|
||||
case 2: status_code = "hash_status_code_2";
|
||||
break;
|
||||
case 3: status_code = "hash_status_code_3";
|
||||
break;
|
||||
default: status_code = "hash_status_code_4";
|
||||
}
|
||||
|
||||
storage.hashStatus = status_code;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the hash for the rule file on github.
|
||||
* Check the hash with the hash form the local file.
|
||||
* If the hash has changed, then download the new rule file.
|
||||
* Else do nothing.
|
||||
*/
|
||||
function getHash()
|
||||
{
|
||||
//Get the target hash from github
|
||||
fetch(storage.hashURL)
|
||||
.then(function(response){
|
||||
var responseTextHash = response.clone().text().then(function(responseTextHash){
|
||||
if(response.ok)
|
||||
{
|
||||
dataHash = responseTextHash;
|
||||
|
||||
if($.trim(dataHash) !== $.trim(localDataHash))
|
||||
{
|
||||
fetchFromURL();
|
||||
}
|
||||
else {
|
||||
toObject(storage.ClearURLsData);
|
||||
storeHashStatus(1);
|
||||
}
|
||||
}
|
||||
else {
|
||||
dataHash = false;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch the Rules & Exception from github.
|
||||
*/
|
||||
function fetchFromURL()
|
||||
{
|
||||
fetch(storage.ruleURL)
|
||||
.then(checkResponse);
|
||||
|
||||
function checkResponse(response)
|
||||
{
|
||||
var responseText = response.clone().text().then(function(responseText){
|
||||
if(response.ok)
|
||||
{
|
||||
var downloadedFileHash = $.sha256(responseText);
|
||||
|
||||
if($.trim(downloadedFileHash) === $.trim(dataHash))
|
||||
{
|
||||
storage.ClearURLsData = responseText;
|
||||
storage.dataHash = downloadedFileHash;
|
||||
storeHashStatus(2);
|
||||
}
|
||||
else {
|
||||
storeHashStatus(3);
|
||||
}
|
||||
storage.ClearURLsData = JSON.parse(storage.ClearURLsData);
|
||||
toObject(storage.ClearURLsData);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// ##################################################################
|
||||
|
||||
/*
|
||||
* ##################################################################
|
||||
* # Supertyp Provider #
|
||||
* ##################################################################
|
||||
*/
|
||||
/**
|
||||
* Declare constructor
|
||||
*
|
||||
* @param {String} _name Provider name
|
||||
* @param {boolean} completeProvider Set URL Pattern as rule
|
||||
*/
|
||||
function Provider(_name,_completeProvider = false){
|
||||
var name = _name;
|
||||
var urlPattern;
|
||||
var rules = [];
|
||||
var exceptions = [];
|
||||
var canceling = _completeProvider;
|
||||
var redirections = [];
|
||||
|
||||
if(_completeProvider){
|
||||
rules.push(".*");
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the provider name.
|
||||
* @return {String}
|
||||
*/
|
||||
this.getName = function() {
|
||||
return name;
|
||||
};
|
||||
|
||||
/**
|
||||
* Add URL pattern.
|
||||
*
|
||||
* @require urlPatterns as RegExp
|
||||
*/
|
||||
this.setURLPattern = function(urlPatterns) {
|
||||
urlPattern = new RegExp(urlPatterns, "i");
|
||||
};
|
||||
|
||||
/**
|
||||
* Return if the Provider Request is canceled
|
||||
* @return {Boolean} isCanceled
|
||||
*/
|
||||
this.isCaneling = function() {
|
||||
return canceling;
|
||||
};
|
||||
|
||||
/**
|
||||
* Check the url is matching the ProviderURL.
|
||||
*
|
||||
* @return {boolean} ProviderURL as RegExp
|
||||
*/
|
||||
this.matchURL = function(url) {
|
||||
return !(this.matchException(url)) && urlPattern.test(url);
|
||||
};
|
||||
|
||||
/**
|
||||
* Add a rule to the rule array.
|
||||
*
|
||||
* @param String rule RegExp as string
|
||||
*/
|
||||
this.addRule = function(rule) {
|
||||
rules.push(rule);
|
||||
};
|
||||
|
||||
/**
|
||||
* Return all rules as an array.
|
||||
*
|
||||
* @return Array RegExp strings
|
||||
*/
|
||||
this.getRules = function() {
|
||||
return rules;
|
||||
};
|
||||
|
||||
/**
|
||||
* Add a exception to the exceptions array.
|
||||
*
|
||||
* @param String exception RegExp as string
|
||||
*/
|
||||
this.addException = function(exception) {
|
||||
exceptions.push(exception);
|
||||
};
|
||||
|
||||
/**
|
||||
* Private helper method to check if the url
|
||||
* an exception.
|
||||
*
|
||||
* @param {String} url RegExp as string
|
||||
* @return {boolean} if matching? true: false
|
||||
*/
|
||||
this.matchException = function(url) {
|
||||
var result = false;
|
||||
|
||||
//Add the site blocked alert to every exception
|
||||
if(url == siteBlockedAlert) return true;
|
||||
|
||||
for (var i = 0; i < exceptions.length; i++) {
|
||||
if(result) { break; }
|
||||
|
||||
exception_regex = new RegExp(exceptions[i], "i");
|
||||
result = exception_regex.test(url);
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
/**
|
||||
* Add a redirection to the redirections array.
|
||||
*
|
||||
* @param String redirection RegExp as string
|
||||
*/
|
||||
this.addRedirection = function(redirection) {
|
||||
redirections.push(redirection);
|
||||
};
|
||||
|
||||
/**
|
||||
* Return all redirection.
|
||||
*
|
||||
* @return url
|
||||
*/
|
||||
this.getRedirection = function(url) {
|
||||
var re = null;
|
||||
|
||||
for(var i = 0; i < redirections.length; i++)
|
||||
{
|
||||
result = (url.match(new RegExp(redirections[i], "i")));
|
||||
|
||||
if (result && result.length > 0)
|
||||
{
|
||||
re = (new RegExp(redirections[i], "i")).exec(url)[1];
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return re;
|
||||
};
|
||||
}
|
||||
// ##################################################################
|
||||
|
||||
/**
|
||||
* Helper function which remove the tracking fields
|
||||
* for each provider given as parameter.
|
||||
*
|
||||
* @param {Provider} provider Provider-Object
|
||||
* @param {webRequest} request webRequest-Object
|
||||
* @return {Array} Array with changes and url fields
|
||||
*/
|
||||
function removeFieldsFormURL(provider, request)
|
||||
{
|
||||
var url = request.url;
|
||||
var domain = url.replace(new RegExp("\\?.*", "i"), "");
|
||||
var fields = "";
|
||||
var rules = provider.getRules();
|
||||
var changes = false;
|
||||
var cancel = false;
|
||||
|
||||
/*
|
||||
* Expand the url by provider redirections. So no tracking on
|
||||
* url redirections form sites to sites.
|
||||
*/
|
||||
var re = provider.getRedirection(url);
|
||||
if(re !== null)
|
||||
{
|
||||
url = decodeURIComponent(re);
|
||||
//Log the action
|
||||
pushToLog(request.url, re, translate('log_redirect'));
|
||||
|
||||
return {
|
||||
"redirect": true,
|
||||
"url": url
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Only test for matches, if there are fields that can be cleaned.
|
||||
*/
|
||||
if(existsFields(url))
|
||||
{
|
||||
/**
|
||||
* It must be non-greedy, because by default .* will match
|
||||
* all ? chars. So the replace function delete everything
|
||||
* before the last ?. With adding a ? on the quantifier *,
|
||||
* we fixed this problem.
|
||||
*/
|
||||
fields = url.replace(new RegExp(".*?\\?", "i"), "");
|
||||
|
||||
for (var i = 0; i < rules.length; i++) {
|
||||
var beforReplace = fields;
|
||||
|
||||
fields = fields.replace(new RegExp(rules[i], "i"), "");
|
||||
|
||||
if(beforReplace != fields)
|
||||
{
|
||||
//Log the action
|
||||
pushToLog(domain+"?"+beforReplace, domain+"?"+fields, rules[i]);
|
||||
|
||||
if(badges[tabid] == null)
|
||||
{
|
||||
badges[tabid] = 0;
|
||||
}
|
||||
|
||||
increaseURLCounter();
|
||||
|
||||
if(!checkOSAndroid())
|
||||
{
|
||||
if(storage.badgedStatus) {
|
||||
browser.browserAction.setBadgeText({text: (++badges[tabid]).toString(), tabId: tabid});
|
||||
}
|
||||
else
|
||||
{
|
||||
browser.browserAction.setBadgeText({text: "", tabId: tabid});
|
||||
}
|
||||
}
|
||||
|
||||
changes = true;
|
||||
}
|
||||
}
|
||||
url = domain+"?"+fields;
|
||||
}
|
||||
else {
|
||||
if(domain != url)
|
||||
{
|
||||
url = domain;
|
||||
changes = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(provider.isCaneling()){
|
||||
pushToLog(request.url, request.url, translate('log_domain_blocked'));
|
||||
if(badges[tabid] == null)
|
||||
{
|
||||
badges[tabid] = 0;
|
||||
}
|
||||
|
||||
increaseURLCounter();
|
||||
|
||||
if(!checkOSAndroid())
|
||||
{
|
||||
if(storage.badgedStatus) {
|
||||
browser.browserAction.setBadgeText({text: (++badges[tabid]).toString(), tabId: tabid});
|
||||
}
|
||||
else
|
||||
{
|
||||
browser.browserAction.setBadgeText({text: "", tabId: tabid});
|
||||
}
|
||||
}
|
||||
|
||||
cancel = true;
|
||||
}
|
||||
|
||||
return {
|
||||
"changes": changes,
|
||||
"url": url,
|
||||
"cancel": cancel
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the number of parameters query strings.
|
||||
* @param {String} url URL as String
|
||||
* @return {int} Number of Parameters
|
||||
*/
|
||||
function countFields(url)
|
||||
{
|
||||
var matches = (url.match(/[^\/|\?|&]+=[^\/|\?|&]+/gi) || []);
|
||||
var count = matches.length;
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if fields exists.
|
||||
* @param {String} url URL as String
|
||||
* @return {boolean}
|
||||
*/
|
||||
function existsFields(url)
|
||||
{
|
||||
var matches = (url.match(/\?.+/i) || []);
|
||||
var count = matches.length;
|
||||
|
||||
return (count > 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function which called from the webRequest to
|
||||
* remove the tracking fields from the url.
|
||||
*
|
||||
* @param {webRequest} request webRequest-Object
|
||||
* @return {Array} redirectUrl or none
|
||||
*/
|
||||
function clearUrl(request)
|
||||
{
|
||||
var URLbeforeReplaceCount = countFields(request.url);
|
||||
|
||||
//Add Fields form Request to global url counter
|
||||
increaseGlobalURLCounter(URLbeforeReplaceCount);
|
||||
|
||||
if(storage.globalStatus){
|
||||
|
||||
var result = {
|
||||
"changes": false,
|
||||
"url": "",
|
||||
"redirect": false,
|
||||
"cancel": false
|
||||
};
|
||||
|
||||
/*
|
||||
* Call for every provider the removeFieldsFormURL method.
|
||||
*/
|
||||
for (var i = 0; i < providers.length; i++) {
|
||||
|
||||
if(providers[i].matchURL(request.url))
|
||||
{
|
||||
result = removeFieldsFormURL(providers[i], request);
|
||||
}
|
||||
|
||||
/*
|
||||
* Expand urls and bypass tracking.
|
||||
* Cancel the active request.
|
||||
*/
|
||||
if(result.redirect)
|
||||
{
|
||||
browser.tabs.update(request.tabId, {url: result.url});
|
||||
return {cancel: true};
|
||||
}
|
||||
|
||||
/*
|
||||
* Cancel the Request and redirect to the site blocked alert page,
|
||||
* to inform the user about the full url blocking.
|
||||
*/
|
||||
if(result.cancel){
|
||||
return {
|
||||
redirectUrl: siteBlockedAlert
|
||||
};
|
||||
}
|
||||
|
||||
/*
|
||||
* Ensure that the function go not into
|
||||
* a loop.
|
||||
*/
|
||||
if(result.changes){
|
||||
return {
|
||||
redirectUrl: result.url
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Default case
|
||||
return {};
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to log all activities from ClearUrls.
|
||||
* Only logging when activated.
|
||||
* The log is only temporary saved in the cache and will
|
||||
* permanently saved with the saveLogOnClose function.
|
||||
*
|
||||
* @param beforeProcessing the url before the clear process
|
||||
* @param afterProcessing the url after the clear process
|
||||
* @param rule the rule that triggered the process
|
||||
*/
|
||||
function pushToLog(beforeProcessing, afterProcessing, rule)
|
||||
{
|
||||
if(storage.loggingStatus)
|
||||
{
|
||||
storage.log.log.push(
|
||||
{
|
||||
"before": beforeProcessing,
|
||||
"after": afterProcessing,
|
||||
"rule": rule,
|
||||
"timestamp": Date.now()
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Call loadOldDataFromStore, getHash, counter, status and log functions
|
||||
*/
|
||||
|
||||
loadOldDataFromStore();
|
||||
getHash();
|
||||
setBadgedStatus();
|
||||
|
||||
/**
|
||||
* Call by each tab is updated.
|
||||
* And if url has changed.
|
||||
*/
|
||||
function handleUpdated(tabId, changeInfo, tabInfo) {
|
||||
if(changeInfo.url)
|
||||
{
|
||||
delete badges[tabId];
|
||||
}
|
||||
currentURL = tabInfo.url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Call by each tab is updated.
|
||||
*/
|
||||
browser.tabs.onUpdated.addListener(handleUpdated);
|
||||
|
||||
/**
|
||||
* Call by each tab change to set the actual tab id
|
||||
*/
|
||||
function handleActivated(activeInfo) {
|
||||
tabid = activeInfo.tabId;
|
||||
browser.tabs.get(tabid).then(function (tab) {
|
||||
currentURL = tab.url;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Call by each tab change.
|
||||
*/
|
||||
browser.tabs.onActivated.addListener(handleActivated);
|
||||
|
||||
/**
|
||||
* Check the request.
|
||||
*/
|
||||
function promise(requestDetails)
|
||||
{
|
||||
if(isDataURL(requestDetails))
|
||||
{
|
||||
return {};
|
||||
}
|
||||
else {
|
||||
var ret = clearUrl(requestDetails);
|
||||
return ret;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* To prevent long loading on data urls
|
||||
* we will check here for data urls.
|
||||
*
|
||||
* @type {requestDetails}
|
||||
* @return {boolean}
|
||||
*/
|
||||
function isDataURL(requestDetails) {
|
||||
var s = requestDetails.url;
|
||||
|
||||
return s.substring(0,4) == "data";
|
||||
}
|
||||
|
||||
/**
|
||||
* Call by each Request and checking the url.
|
||||
*
|
||||
* @type {Array}
|
||||
*/
|
||||
browser.webRequest.onBeforeRequest.addListener(
|
||||
promise,
|
||||
{urls: ["<all_urls>"], types: getData("types")},
|
||||
["blocking"]
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Save every minute the temporary data to the disk.
|
||||
*/
|
||||
setInterval(saveOnExit, 60000);
|
||||
|
||||
/**
|
||||
* Get the badged status from the browser storage and put the value
|
||||
* into a local variable.
|
||||
*
|
||||
*/
|
||||
function setBadgedStatus()
|
||||
{
|
||||
if(!checkOSAndroid() && storage.badgedStatus){
|
||||
browser.browserAction.setBadgeBackgroundColor({
|
||||
'color': '#'+storage.badged_color
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the icon.
|
||||
*/
|
||||
function changeIcon()
|
||||
{
|
||||
if(storage.globalStatus){
|
||||
browser.browserAction.setIcon({path: "img/clearurls.svg"});
|
||||
} else{
|
||||
browser.browserAction.setIcon({path: "img/clearurls_gray.svg"});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if it is an android device.
|
||||
* @return bool
|
||||
*/
|
||||
function checkOSAndroid()
|
||||
{
|
||||
if(os == "android")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Increase by {number} the GlobalURLCounter
|
||||
* @param {int} number
|
||||
*/
|
||||
function increaseGlobalURLCounter(number)
|
||||
{
|
||||
if(storage.statisticsStatus)
|
||||
{
|
||||
storage.globalurlcounter += number;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Increase by one the URLCounter
|
||||
*/
|
||||
function increaseURLCounter()
|
||||
{
|
||||
if(storage.statisticsStatus)
|
||||
{
|
||||
storage.globalCounter++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Writes the storage variable to the disk.
|
||||
*/
|
||||
function saveOnExit()
|
||||
{
|
||||
var json = {};
|
||||
|
||||
Object.entries(storage).forEach(([key, value]) => {
|
||||
switch (key) {
|
||||
case "ClearURLsData":
|
||||
case "log":
|
||||
json[key] = JSON.stringify(value);
|
||||
break;
|
||||
case "types":
|
||||
json[key] = value.toString();
|
||||
break;
|
||||
default:
|
||||
json[key] = value;
|
||||
}
|
||||
});
|
||||
console.log(translate('core_save_on_disk'));
|
||||
browser.storage.local.set(json);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the value under the key on the disk.
|
||||
* @param {String} key
|
||||
* @param {Object} value
|
||||
*/
|
||||
function saveOnDisk(key, value)
|
||||
{
|
||||
browser.storage.local.set({key: value});
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve everything and save on the RAM.
|
||||
*/
|
||||
function getDataFromDisk()
|
||||
{
|
||||
browser.storage.local.get().then(start, error);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value under the key.
|
||||
* @param {String} key
|
||||
* @return {Object}
|
||||
*/
|
||||
function getData(key)
|
||||
{
|
||||
return storage[key];
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the value under the key on the RAM.
|
||||
* @param {String} key
|
||||
* @param {Object} value
|
||||
*/
|
||||
function setData(key, value)
|
||||
{
|
||||
switch (key) {
|
||||
case "ClearURLsData":
|
||||
case "log":
|
||||
storage[key] = JSON.parse(value);
|
||||
break;
|
||||
case "hashURL":
|
||||
case "ruleURL":
|
||||
storage[key] = replaceOldGithubURLs(value);
|
||||
break;
|
||||
case "types":
|
||||
storage[key] = value.split(',');
|
||||
break;
|
||||
default:
|
||||
storage[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate a string with the i18n API.
|
||||
*
|
||||
* @param {string} string Name of the attribute used for localization
|
||||
*/
|
||||
function translate(string)
|
||||
{
|
||||
return browser.i18n.getMessage(string);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Write error on console.
|
||||
*/
|
||||
function error()
|
||||
{
|
||||
console.log(translate('core_error'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set default values, if the storage is empty.
|
||||
* @param {Object} items
|
||||
*/
|
||||
function initStorage(items)
|
||||
{
|
||||
initSettings();
|
||||
|
||||
if(!isEmpty(items)) {
|
||||
Object.entries(items).forEach(([key, value]) => {
|
||||
setData(key, value);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set default values for the settings.
|
||||
*/
|
||||
function initSettings()
|
||||
{
|
||||
storage.ClearURLsData = [];
|
||||
storage.dataHash = "";
|
||||
storage.badgedStatus = true;
|
||||
storage.globalStatus = true;
|
||||
storage.globalurlcounter = 0;
|
||||
storage.globalCounter = 0;
|
||||
storage.hashStatus = "error";
|
||||
storage.loggingStatus = false;
|
||||
storage.log = {"log": []};
|
||||
storage.statisticsStatus = true;
|
||||
storage.badged_color = "ffa500";
|
||||
storage.hashURL = "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/rules.hash";
|
||||
storage.ruleURL = "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.json";
|
||||
storage.types = ["main_frame", "sub_frame", "xmlhttprequest"];
|
||||
storage.reportServer = "https://clearurls.xn--rb-fka.it";
|
||||
}
|
||||
|
||||
/**
|
||||
* Reloads the extension.
|
||||
*/
|
||||
function reload()
|
||||
{
|
||||
browser.runtime.reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace the old GitHub URLs with the
|
||||
* new GitLab URLs.
|
||||
*/
|
||||
function replaceOldGithubURLs(url)
|
||||
{
|
||||
switch (url) {
|
||||
case "https://raw.githubusercontent.com/KevinRoebert/ClearUrls/master/data/rules.hash?flush_cache=true":
|
||||
return "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/rules.hash";
|
||||
case "https://raw.githubusercontent.com/KevinRoebert/ClearUrls/master/data/data.json?flush_cache=true":
|
||||
return "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.json";
|
||||
default:
|
||||
return url;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if an object is empty.
|
||||
* @param {Object} obj
|
||||
* @return {Boolean}
|
||||
*/
|
||||
function isEmpty(obj)
|
||||
{
|
||||
return (Object.getOwnPropertyNames(obj).length === 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current URL.
|
||||
* @return {String} [description]
|
||||
*/
|
||||
function getCurrentURL()
|
||||
{
|
||||
return currentURL;
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
body {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.small-version {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.navbar-header {
|
||||
margin-top: 0;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.col-sm-1 {
|
||||
margin-top: -10px;
|
||||
}
|
||||
|
||||
#body-popup {
|
||||
width: 200px;
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "ClearURLs",
|
||||
"version": "1.3.3.14",
|
||||
"author": "Kevin R.",
|
||||
"description": "Remove tracking elements form URLs.",
|
||||
"homepage_url": "https://gitlab.com/KevinRoebert/ClearUrls",
|
||||
"default_locale": "en",
|
||||
"icons": {
|
||||
"16": "img/clearurls.png",
|
||||
"19": "img/clearurls.png",
|
||||
"20": "img/clearurls.png",
|
||||
"24": "img/clearurls.png",
|
||||
"30": "img/clearurls.png",
|
||||
"32": "img/clearurls.png",
|
||||
"38": "img/clearurls.png",
|
||||
"48": "img/clearurls.png",
|
||||
"64": "img/clearurls.png",
|
||||
"96": "img/clearurls.png",
|
||||
"128": "img/clearurls.png"
|
||||
|
||||
},
|
||||
"browser_action": {
|
||||
"browser_style": true,
|
||||
"default_icon": {
|
||||
"16": "img/clearurls.png",
|
||||
"19": "img/clearurls.png",
|
||||
"20": "img/clearurls.png",
|
||||
"24": "img/clearurls.png",
|
||||
"30": "img/clearurls.png",
|
||||
"32": "img/clearurls.png",
|
||||
"38": "img/clearurls.png",
|
||||
"48": "img/clearurls.png",
|
||||
"64": "img/clearurls.png",
|
||||
"96": "img/clearurls.png",
|
||||
"128": "img/clearurls.png"
|
||||
|
||||
},
|
||||
"default_title": "ClearURLs Add-on",
|
||||
"default_popup": "html/popup.html"
|
||||
},
|
||||
"permissions": [
|
||||
"*://*/*",
|
||||
"<all_urls>",
|
||||
"webRequest",
|
||||
"webRequestBlocking",
|
||||
"storage",
|
||||
"tabs"
|
||||
],
|
||||
"background": {
|
||||
"scripts": [
|
||||
"browser-polyfill.js",
|
||||
"external_js/jquery-3.2.1.min.js",
|
||||
"external_js/sha256.jquery.js",
|
||||
"clearurls.js"
|
||||
]
|
||||
},
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": ["<all_urls>"],
|
||||
"js": [
|
||||
"browser-polyfill.js"
|
||||
]
|
||||
}
|
||||
],
|
||||
"options_ui": {
|
||||
"page": "html/settings.html"
|
||||
}
|
||||
}
|
||||
165
LICENSE
Normal file
@@ -0,0 +1,165 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates
|
||||
the terms and conditions of version 3 of the GNU General Public
|
||||
License, supplemented by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||
General Public License.
|
||||
|
||||
"The Library" refers to a covered work governed by this License,
|
||||
other than an Application or a Combined Work as defined below.
|
||||
|
||||
An "Application" is any work that makes use of an interface provided
|
||||
by the Library, but which is not otherwise based on the Library.
|
||||
Defining a subclass of a class defined by the Library is deemed a mode
|
||||
of using an interface provided by the Library.
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an
|
||||
Application with the Library. The particular version of the Library
|
||||
with which the Combined Work was made is also called the "Linked
|
||||
Version".
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the
|
||||
Corresponding Source for the Combined Work, excluding any source code
|
||||
for portions of the Combined Work that, considered in isolation, are
|
||||
based on the Application, and not on the Linked Version.
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the
|
||||
object code and/or source code for the Application, including any data
|
||||
and utility programs needed for reproducing the Combined Work from the
|
||||
Application, but excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License
|
||||
without being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a
|
||||
facility refers to a function or data to be supplied by an Application
|
||||
that uses the facility (other than as an argument passed when the
|
||||
facility is invoked), then you may convey a copy of the modified
|
||||
version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to
|
||||
ensure that, in the event an Application does not supply the
|
||||
function or data, the facility still operates, and performs
|
||||
whatever part of its purpose remains meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of
|
||||
this License applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from
|
||||
a header file that is part of the Library. You may convey such object
|
||||
code under terms of your choice, provided that, if the incorporated
|
||||
material is not limited to numerical parameters, data structure
|
||||
layouts and accessors, or small macros, inline functions and templates
|
||||
(ten or fewer lines in length), you do both of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the
|
||||
Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that,
|
||||
taken together, effectively do not restrict modification of the
|
||||
portions of the Library contained in the Combined Work and reverse
|
||||
engineering for debugging such modifications, if you also do each of
|
||||
the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during
|
||||
execution, include the copyright notice for the Library among
|
||||
these notices, as well as a reference directing the user to the
|
||||
copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this
|
||||
License, and the Corresponding Application Code in a form
|
||||
suitable for, and under terms that permit, the user to
|
||||
recombine or relink the Application with a modified version of
|
||||
the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (a) uses at run time
|
||||
a copy of the Library already present on the user's computer
|
||||
system, and (b) will operate properly with a modified version
|
||||
of the Library that is interface-compatible with the Linked
|
||||
Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise
|
||||
be required to provide such information under section 6 of the
|
||||
GNU GPL, and only to the extent that such information is
|
||||
necessary to install and execute a modified version of the
|
||||
Combined Work produced by recombining or relinking the
|
||||
Application with a modified version of the Linked Version. (If
|
||||
you use option 4d0, the Installation Information must accompany
|
||||
the Minimal Corresponding Source and Corresponding Application
|
||||
Code. If you use option 4d1, you must provide the Installation
|
||||
Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the
|
||||
Library side by side in a single library together with other library
|
||||
facilities that are not Applications and are not covered by this
|
||||
License, and convey such a combined library under terms of your
|
||||
choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based
|
||||
on the Library, uncombined with any other library facilities,
|
||||
conveyed under the terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it
|
||||
is a work based on the Library, and explaining where to find the
|
||||
accompanying uncombined form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU Lesser General Public License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Library as you received it specifies that a certain numbered version
|
||||
of the GNU Lesser General Public License "or any later version"
|
||||
applies to it, you have the option of following the terms and
|
||||
conditions either of that published version or of any later version
|
||||
published by the Free Software Foundation. If the Library as you
|
||||
received it does not specify a version number of the GNU Lesser
|
||||
General Public License, you may choose any version of the GNU Lesser
|
||||
General Public License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
||||
118
LICENSE.md
@@ -1,118 +0,0 @@
|
||||
Qabel Public License Version 0.2 (QaPL v0.2) (c) Qabel GmbH, Hannover
|
||||
=====================================================================
|
||||
|
||||
|
||||
You may copy and distribute verbatim copies of this license agreement. You may also use content from it for your own license agreement. Unless not expressly stated, you may not use the name Qabel Public License ("QaPL") in connection with any license agreement that is not a verbatim copy of This License.
|
||||
|
||||
|
||||
PREAMBLE
|
||||
--------
|
||||
|
||||
Today Software is the undisputed centerpiece of the information society and access to software and information society services became a public commodity. Yet traditional software is made available in object code only, where the software user is not entitled to study or even modify the source code. We believe that this is a salient shortcoming in particular when it comes to software which is designed to help the user protect his privacy in a virtual world. A proprietary software developer who refuses to unveil the source code of its security software, requires users to place a great deal of faith into the computer program and its ability to protect personal data. Not only because trust in conventional software security was all too often disappointed, we have decided to replace "trust" with "transparency" and everybody is welcome to study, modify and improve the source code of this software. Furthermore, and although we believe in the idea of free software, we have decided to make two important exceptions, to wit, QaPL-licensed software should neither be used commercially without our consent, nor for military, intelligence or related purposes. By that we hope to make it a powerful, self sustaining and constantly evolving tool that helps to reinforce data security and the protection of personal data. However, it shall be up to the user to decide whether he finds this software fit for the purpose.
|
||||
|
||||
|
||||
[0] Definitions
|
||||
---------------
|
||||
|
||||
[a] "Application" means any software that may be, directly or indirectly, linked to the Library by using its interface.
|
||||
|
||||
[b] "Commercial use" means utilizing the Library or other software licensed under the QaPL or parts thereof to, directly or indirectly, establish a source of income, including but not limited to, embedding the Library or other software licensed under the QaPL or parts thereof into Proprietary Software, executable software, or consulting services utilizing the Library or other software licensed under the QaPL or parts thereof. It is not considered Commercial Use if the Licensee, including a commercial enterprise, uses the Library or other software licensed under the QaPL or parts thereof for academic, study and/or research purposes, or if a software project is solely based on donations.
|
||||
|
||||
[c] "Original Copyright Holder" means Kevin Röbert.
|
||||
|
||||
[d] "Contributor" means any person or entity that creates or contributes to the creation of modifications to the Library or other software licensed under the QaPL.
|
||||
|
||||
[e] "Library" means a collection of software functions, subroutines and/or data prepared so as to be conveniently linked with Applications (which use some of those functions and data) to form executables including associated documentation.
|
||||
|
||||
[f] "Licensee" means any individual or legal entity exercising rights under the QaPL.
|
||||
|
||||
[g] "Make Publicly Available" refers to the public distribution of the Library or other software licensed under the QaPL in an immaterial form, including but not limited to, making it available for download in data networks and Software as a Service (SaaS).
|
||||
|
||||
[h] "Modification" means any change to the Library or other software licensed under the QaPL in a way that would, under the applicable law, require the copyright holder's permission, including but not limited to the extension, deletion, alteration, translation into other programming languages or combination with other software.
|
||||
|
||||
[i] "Modification of the Library" means the Library or its derivatives containing the Library as a whole or in parts and Applications or any other software that are linked to the Library.
|
||||
|
||||
[j] "Object Code" means any machine-readable form of the Library or other software licensed under the QaPL, excluding the Source Code.
|
||||
|
||||
[k] "Proprietary Software" means software that is not licensed under an open source license as defined by the open source definition (Version 1.9).
|
||||
|
||||
[l] "Source Code" means the preferred form of the Library or other software licensed under the QaPL for making Modifications to it.
|
||||
|
||||
[m] "This License" means the Qabel Public License regardless of its version.
|
||||
|
||||
|
||||
[1] Scope of Application
|
||||
-------------------------------
|
||||
|
||||
The QaPL applies to any software library or other software that contains a notice placed by the copyright holder or another authorised party stating that the Library or other software is governed by the
|
||||
terms of the QaPL. This license shall also apply to remote network interaction.
|
||||
|
||||
|
||||
[2] License Grant and Conditions
|
||||
------------------------------------------
|
||||
|
||||
[a] As far as This License is not restricted according to sec. [3], Licensee may free of charge and in any medium modify, reproduce, distribute, and Make Publicly Available the Library or other software licensed under the QaPL.
|
||||
|
||||
[b] Licensee may distribute, and Make Publicly Available unmodified versions, of the Library or other software licensed under the QaPL provided that the following condition is met: A conspicuous reference to the text of This License
|
||||
that allows any recipient to easily access the text of This License must be provided.
|
||||
|
||||
[c] Licensee may distribute, and Make Publicly Available modified versions, of the Library or other software licensed under the QaPL provided that, in addition to the conditions stated in sec. [2][b], the following conditions are met: The files modified must bear notices which state that the files were changed, the date of change and the author of the Modification. The Library or other software licensed under the QaPL must in its entirety be licensed free of charge to all third parties under the terms of This License.
|
||||
|
||||
[d] If you wish to distribute or Make the Library or other software licensed under the QaPL, modified or unmodified, Publicly Available in Object Code form only, you must in addition to the forgoing make the complete Source Code publicly available or ensure that the Original Copyright Holder does so and make a conspicuous reference to the internet address from which the Source Code may be downloaded.
|
||||
|
||||
|
||||
[3] Restrictions
|
||||
--------------------
|
||||
|
||||
[a] No license is granted by the Original Copyright Holder for the Commercial Use of the Library or other software licensed under the QaPL. In particular, no license is granted for linking Applications to the Library which shall be used commercially. If you would like to use the Library or other software licensed under the QaPL for commercial purposes or link to an Application that shall be used commercially, including selling an Application that shall be linked to the Library or other software licensed under the QaPL, please inquire with the Original Copyright Holder.
|
||||
|
||||
[b] No license is granted by the Original Copyright Holder for military, intelligence or related purposes, including but not limited to intelligence and military research.
|
||||
|
||||
|
||||
[4] Contributor's License Grant
|
||||
----------------------------------------
|
||||
|
||||
[a] A Contributor, who distributes or makes publicly available a Modification, hereby grants the Original Copyright Holder a perpetual, irrevocable, worldwide, free of charge, royalty-free, non-exclusive, unrestricted license that may be subject to third party property claims, to use, reproduce, modify, display, perform, sublicense, distribute, Make Publicly Available, commercially exploit and exercise all ownership rights in the Contributors contribution. Contributor hereby agrees that he will not assert any moral rights in his contribution against the Original Copyright Holder.
|
||||
|
||||
[b] A contributor, who distributes or makes publicly available a Modification, hereby grants to the Original Copyright Holder a perpetual, worldwide, non-exclusive, free-of-charge, royalty-free patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Library or other software licensed under the QaPL. Where such license applies it shall only apply to those patent claims licensable by the Contributor that are necessarily infringed by their contributions alone or by combination of their contributions with the Library or other software licensed under the QaPL with which such contribution was combined.
|
||||
|
||||
[c] Contributor represents and warrants that his contribution is his own original creation and to the best of his knowledge he can legally grant the rights in his contribution set out in This License and, where applicable, is authorised by his employer and that the Original Copyright Holder exercising the rights granted under this license does, to the best of the Contributors knowledge, not infringe any third party rights. Contributor further represents that he is not aware of any claims, suits or court actions in relation to his contribution. Contributor agrees that he will immediately notify the Original Copyright Holder if he becomes aware of any third party claims and, if the Contributor after having submitted or otherwise distributed his contribution, becomes aware of a third party claim in relation to his contribution, shall promptly take all reasonable measures to mitigate damages resulting from the infringement of third party claims, including but not limited to informing those who may have received software containing the contribution.
|
||||
|
||||
|
||||
[5] Conclusion of Contract
|
||||
----------------------------------
|
||||
|
||||
[a] This License constitutes the offer to conclude a contract to use the Library or other software licensed under the QaPL in compliance with the conditions of This License. Acceptance may be declared by exercising the right granted under sec. [2] of This License.
|
||||
|
||||
[b] All Licensees obtain the rights granted by This License directly from the Original Copyright Holder. Without having to accept This License the Library or other software may still be used in accordance with the applicable statutory provisions.
|
||||
|
||||
|
||||
[6] Termination
|
||||
--------------------
|
||||
|
||||
The rights granted under This License will terminate
|
||||
automatically if the Licensee fails to comply with its terms.
|
||||
|
||||
|
||||
[7] Warranty and Liability
|
||||
---------------------------------
|
||||
|
||||
[a] The copyright holders are not liable for contradictory third-party rights, unless they were aware of such rights without informing the Licensee.
|
||||
|
||||
[b] Liability for damages arising out of the use or inability to use the Library or other software licensed under the QaPL, including but not limited to software failure, data loss, data being rendered inaccurate, a failure of the software to operate with any other program and any other defects in the Library or other software licensed under the QaPL, shall be governed by separate agreements, or, if no such agreement exists, by the applicable statutory provisions.
|
||||
|
||||
|
||||
[8] License Updates
|
||||
-------------------------
|
||||
|
||||
Qabel GmbH or its legal successors may, from time to time, revise and update the QaPL in order to address new developments and concerns. These revisions and updates will reflect the spirit of the current license version and will not impose on any Licensee or copyright holder additional obligations. QaPL license updates shall replace all older license versions in existing agreements. This does not apply to original copyright holders other than Qabel GmbH, who have chosen to submit their program to the QaPL, unless they have designated their program as licensed under "QaPL 0.2 or any later version".
|
||||
|
||||
|
||||
[9] Miscellaneous
|
||||
----------------------
|
||||
|
||||
[a] This License shall be governed by German Law. The application of the UN Convention on the International Sale of Goods (CISG) and the principles of conflict of laws shall be excluded.
|
||||
|
||||
[b] If you wish to incorporate parts of the Library or other software licensed under the QaPL into other software whose license terms contradict with the provisions of this license, you may inquire with either the Original Copyright Holder or the copyright holder of the other software on possible exceptions.
|
||||
|
||||
[c] If, under the applicable law, any provision of This License is or becomes invalid or unenforceable, it shall not affect the validity or enforceability of the remainder of the terms of This License, and without further action by the parties to This License, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
|
||||
42
README.md
@@ -1,29 +1,44 @@
|
||||
# ClearURLs [](https://addons.mozilla.org/en-US/firefox/addon/clearurls/versions/)
|
||||
[](https://www.paypal.me/KevinRoebert)
|
||||
|
||||
[](https://addons.mozilla.org/en-US/firefox/addon/clearurls/reviews/)
|
||||
|
||||
[](https://addons.mozilla.org/en-US/firefox/addon/clearurls/statistics/?last=30)
|
||||
# ClearURLs
|
||||
|
||||
**ClearURLs** is an add-on based on the new WebExtensions technology and is optimized for *Firefox* and now also available for *Chrome* based browsers.
|
||||
|
||||
This add-on will remove the tracking fields from all URLs which are visited by the browser and use a rule file, namely `data.json`.
|
||||
This add-on will remove the tracking fields from all URLs which are visited by the browser and use a rule file, namely `data.min.json`.
|
||||
|
||||
This add-on protects your privacy and block the request from advertising services like *doubleclick.net*.
|
||||
|
||||
## Application
|
||||
Large (and small) webpages use elements in the URL, e.g.: https://example.com?source=thisIstheSiteIvisitedBefore to track your online activities. In this example, the source field tells the provider which page you visited before. The add-on will remove these tracking fields from the URL.
|
||||
|
||||
## Installation
|
||||
Mozilla Add-on: [](https://addons.mozilla.org/en-US/firefox/addon/clearurls/)
|
||||
## Screenshot
|
||||

|
||||
|
||||
[Chrome Add-on](https://gitlab.com/KevinRoebert/ClearUrls/tags?utf8=%E2%9C%93&search=_cv)
|
||||
## Offical installation
|
||||
Firefox Add-on: [Download](https://addons.mozilla.org/en-US/firefox/addon/clearurls/)
|
||||
|
||||
Chrome Add-on: [Download](https://chrome.google.com/webstore/detail/clearurls/lckanjgmijmafbedllaakclkaicjfmnk)
|
||||
|
||||
|
||||
### Download (for Firefox- and Chrome-Dev only)
|
||||
Here you can download the packed files for the Firefox- and Chrome-Dev:
|
||||
|
||||
[Firefox](https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/ClearUrls_firefox.zip?job=build%20firefox)
|
||||
|
||||
[Chrome](https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/ClearUrls_chrome.zip?job=build%20chrome)
|
||||
|
||||
## Contribute
|
||||
If you have any suggestions or complaints, please [create an issue.](https://gitlab.com/KevinRoebert/ClearUrls/issues/new)
|
||||
|
||||
## Screenshot
|
||||

|
||||
## Projects that use parts of ClearURLs
|
||||
|
||||
* [Uroute](https://github.com/walterl/uroute) used ClearURLs to filter/clean URL before launching browser
|
||||
|
||||
## Recommended by...
|
||||
* [ghacks-user.js](https://github.com/ghacksuserjs/ghacks-user.js/wiki/4.1-Extensions)
|
||||
* [Awesome Humane Tech List](https://github.com/humanetech-community/awesome-humane-tech#tracking)
|
||||
|
||||
## Permissions
|
||||
|
||||
Reasoning for needed permissions you can find under [this discussion](https://gitlab.com/KevinRoebert/ClearUrls/issues/159).
|
||||
|
||||
## Copyright
|
||||
We use some third-party scripts in our add-on. The authors and licenses are listed below.
|
||||
@@ -43,6 +58,3 @@ We use some third-party scripts in our add-on. The authors and licenses are list
|
||||
- [DataTables](https://datatables.net/) | Copyright 2011-2015 SpryMedia Ltd | [MIT](https://datatables.net/license/)
|
||||
- [Pick-a-Color v1.2.3](https://github.com/lauren/pick-a-color) | Copyright (c) 2013 Lauren Sperber and Broadstreet Ads |
|
||||
[MIT](https://github.com/lauren/pick-a-color/blob/master/LICENSE)
|
||||
|
||||
## Licence
|
||||
[](https://gitlab.com/KevinRoebert/ClearUrls/blob/master/LICENSE.md)
|
||||
|
||||
@@ -1,251 +1,234 @@
|
||||
{
|
||||
"hash_status_code_1": {
|
||||
"message": "Aktuell",
|
||||
"description": ""
|
||||
"description": "Dieser Statuscode besagt, dass kein Update für die ClearURLs-Regeln verfügbar ist und alles auf dem neuesten Stand ist."
|
||||
},
|
||||
|
||||
"hash_status_code_2": {
|
||||
"message": "Aktuallisiert",
|
||||
"description": ""
|
||||
"message": "Aktualisiert",
|
||||
"description": "Dieser Statuscode besagt, dass die ClearURLs-Regeln erfolgreich aktualisiert wurden."
|
||||
},
|
||||
|
||||
"hash_status_code_3": {
|
||||
"message": "Aktuallisierung verfügbar",
|
||||
"description": ""
|
||||
"message": "Aktualisierung verfügbar",
|
||||
"description": "Dieser Statuscode besagt, dass ein Update für die ClearURLs-Regeln verfügbar ist."
|
||||
},
|
||||
|
||||
"hash_status_code_4": {
|
||||
"message": "Fehler",
|
||||
"description": ""
|
||||
"description": "Dieser Statuscode besagt, dass ClearURLs nicht korrekt gestartet werden konnten."
|
||||
},
|
||||
|
||||
"hash_status_code_5": {
|
||||
"message": "Da ist etwas schiefgelaufen!",
|
||||
"description": ""
|
||||
"description": "Dieser Statuscode besagt, dass beim Aktualisieren der ClearURLs-Regeln ein Fehler aufgetreten ist."
|
||||
},
|
||||
|
||||
"log_redirect": {
|
||||
"message": "Diese Url wurde weiter geleitet",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird für Umleitungen im ClearURL-Protokoll verwendet."
|
||||
},
|
||||
|
||||
"log_domain_blocked": {
|
||||
"message": "Diese Domain wurde blockiert",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird für blockierte Domäns im ClearURL-Protokoll verwendet."
|
||||
},
|
||||
|
||||
"check_os_log": {
|
||||
"message": "[ClearURLs]: Protokoll-Listener wurde hinzugefügt.",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird beim Start des ClearURL-Protokolls verwendet."
|
||||
},
|
||||
|
||||
"log_html_page_title": {
|
||||
"message": "Protokoll von ClearURLs",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Überschrift auf der Protokollseite verwendet."
|
||||
},
|
||||
|
||||
"log_html_table_head_1": {
|
||||
"message": "Vor der Verarbeitung",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Tabellentitel auf der Protokollseite verwendet."
|
||||
},
|
||||
|
||||
"log_html_table_head_2": {
|
||||
"message": "Nach der Verarbeitung",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Tabellentitel auf der Protokollseite verwendet."
|
||||
},
|
||||
|
||||
"log_html_table_head_3": {
|
||||
"message": "Regel",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Tabellentitel auf der Protokollseite verwendet."
|
||||
},
|
||||
|
||||
"log_html_table_head_4": {
|
||||
"message": "Zeit",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Tabellentitel auf der Protokollseite verwendet."
|
||||
},
|
||||
|
||||
"log_html_reset_button": {
|
||||
"message": "Zurücksetzen",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird für die Schaltfläche zum Zurücksetzen auf der Protokollseite verwendet."
|
||||
},
|
||||
|
||||
"log_html_reset_button_title": {
|
||||
"message": "Setzt das globale Protokoll zurück",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Titel für die Schaltfläche zum Zurücksetzen auf der Protokollseite verwendet."
|
||||
},
|
||||
|
||||
"popup_html_configs_head": {
|
||||
"message": "Einstellungen",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Titel für die Konfigurationen auf der Popup-Seite verwendet."
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter": {
|
||||
"message": "Filter",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Name für die Filterschaltfläche auf der Popup-Seite verwendet."
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter_title": {
|
||||
"message": "Der Filter-Schalter aktiviert die Reinigungsfunktion von ClearURLs, wenn sie die Funktion ausschalten, dann deaktivieren sie das gesamte Addon",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Titel für die Filterschaltfläche auf der Popup-Seite verwendet."
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log": {
|
||||
"message": "Protokoll",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Name für die Schaltfläche zum Umschalten der Protokollierung auf der Popup-Seite verwendet."
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log_title": {
|
||||
"message": "Das Protokoll wird nur lokal gespeichert. Wir empfehlen diese Funktion deaktiviert zulassen, wenn Sie sie nicht benötigen",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Titel für die Schaltfläche zum Umschalten der Protokollierung auf der Popup-Seite verwendet."
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges": {
|
||||
"message": "Zähler",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Name für die Schaltfläche zum Wechseln der Abzeichen auf der Popup-Seite verwendet."
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges_title": {
|
||||
"message": "Zeigt die Anzahl der gereinigten URLs an",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Titel für die Schaltfläche zum Wechseln der Abzeichen auf der Popup-Seite verwendet."
|
||||
},
|
||||
|
||||
"popup_html_statistics_head": {
|
||||
"message": "Statistik",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Titel für die Statistiken auf der Popup-Seite verwendet."
|
||||
},
|
||||
|
||||
"popup_html_statistics_elements": {
|
||||
"message": "Elemente",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Name für die Elemente auf der Popup-Seite verwendet."
|
||||
},
|
||||
|
||||
"popup_html_statistics_blocked": {
|
||||
"message": "Blockiert",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Name für die blockierten Elemente auf der Popup-Seite verwendet."
|
||||
},
|
||||
|
||||
"popup_html_statistics_percentage": {
|
||||
"message": "Anteil",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Name für den Prozentsatz der blockierten Elemente auf der Popup-Seite verwendet."
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button": {
|
||||
"message": "Zurücksetzen",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Name für die Schaltfläche zum Zurücksetzen der Statistik auf der Popup-Seite verwendet."
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button_title": {
|
||||
"message": "Setzt die globale Statistik zurück",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Titel für die Schaltfläche zum Zurücksetzen der Statistik auf der Popup-Seite verwendet."
|
||||
},
|
||||
|
||||
"popup_html_rules_status_head": {
|
||||
"message": "Regel Status",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Titel für den Abschnitt \"Regelstatus\" auf der Popup-Seite verwendet."
|
||||
},
|
||||
|
||||
"popup_html_log_head": {
|
||||
"message": "Protokoll",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Name für die Protokollschaltfläche auf der Popup-Seite verwendet."
|
||||
},
|
||||
|
||||
"popup_html_log_head_title": {
|
||||
"message": "Öffnet das Protokoll",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Titel für die Protokollschaltfläche auf der Popup-Seite verwendet."
|
||||
},
|
||||
|
||||
"popup_html_report_button": {
|
||||
"message": "Aktuelle URL melden",
|
||||
"description": ""
|
||||
"description": "Hinweis: Wird derzeit nicht verwendet."
|
||||
},
|
||||
|
||||
"popup_html_report_button_title": {
|
||||
"message": "Meldet die aktuelle URL aus diesem Tab.",
|
||||
"description": ""
|
||||
"description": "Wird derzeit nicht verwendet."
|
||||
},
|
||||
|
||||
"core_save_on_disk": {
|
||||
"message": "[ClearURLs]: Auf Festplatte gespeichert.",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge teilt dem Benutzer mit, dass ClearURLs die Einstellungen auf der Festplatte gespeichert hat."
|
||||
},
|
||||
|
||||
"core_error": {
|
||||
"message": "[ClearURLs]: Das Addon konnte nicht gestartet werden.",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge teilt dem Benutzer mit, dass ClearURLs nicht gestartet werden konnten."
|
||||
},
|
||||
|
||||
"configs_switch_statistics": {
|
||||
"message": "Statistiken",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Name für die Statistikschaltfläche auf der Popup-Seite verwendet."
|
||||
},
|
||||
|
||||
"configs_switch_statistics_title": {
|
||||
"message": "Aktiviert oder deaktiviert die Statistikfunktion",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Titel für die Statistikschaltfläche auf der Popup-Seite verwendet."
|
||||
},
|
||||
|
||||
"settings_html_page_title": {
|
||||
"message": "Einstellungen von ClearURLs",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Titel auf der Einstellungsseite verwendet."
|
||||
},
|
||||
|
||||
"badged_color_label": {
|
||||
"message": "Zählerfarbe",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Name für das Etikett mit den abgebildeten Farben verwendet."
|
||||
},
|
||||
|
||||
"setting_html_reset_button": {
|
||||
"message": "Zurücksetzen",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Name für die Schaltfläche zum Zurücksetzen auf der Einstellungsseite verwendet."
|
||||
},
|
||||
|
||||
"setting_html_reset_button_title": {
|
||||
"message": "Setzt alle Einstellungen zurück",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Titel für die Schaltfläche zum Zurücksetzen auf der Einstellungsseite verwendet."
|
||||
},
|
||||
|
||||
"setting_rule_url_label": {
|
||||
"message": "Die Url zu der data.json Datei (Regeln)",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Name für die Regel-URL-Bezeichnung verwendet."
|
||||
},
|
||||
|
||||
"settings_html_save_button": {
|
||||
"message": "Speichern & Addon neustarten",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Name für die Schaltfläche zum Speichern und erneuten Laden auf der Einstellungsseite verwendet."
|
||||
},
|
||||
|
||||
"settings_html_save_button_title": {
|
||||
"message": "Speichert die Einstellungen",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Titel für die Schaltfläche zum Speichern und erneuten Laden auf der Einstellungsseite verwendet."
|
||||
},
|
||||
|
||||
"setting_hash_url_label": {
|
||||
"message": "Die Url zu der rules.hash Datei (Hash)",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Name für die rule.hash URL verwendet."
|
||||
},
|
||||
|
||||
"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> (Expertenniveau)",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird als Name für die Typenbezeichnung verwendet."
|
||||
},
|
||||
|
||||
"setting_report_server_label": {
|
||||
"message": "Meldungsserver für URLs",
|
||||
"description": ""
|
||||
"description": "Hinweis: Wird derzeit nicht verwendet."
|
||||
},
|
||||
|
||||
"success_report_url": {
|
||||
"message": "Die URL wurde erfolgreich gemeldet. Wir werden sie in Kürze prüfen.",
|
||||
"description": ""
|
||||
"description": "Hinweis: Wird derzeit nicht verwendet."
|
||||
},
|
||||
|
||||
"error_report_url": {
|
||||
"message": "Es schaut so aus, als ob diese URL schon gemeldet wurde.",
|
||||
"description": ""
|
||||
"description": "Hinweis: Wird derzeit nicht verwendet."
|
||||
},
|
||||
|
||||
"donate_button": {
|
||||
"message": "Eine Spende (Schenkung) für den ClearURLs Urheber.",
|
||||
"description": ""
|
||||
"description": "Diese Zeichenfolge wird verwendet, um auf eine Spendenseite zu verweisen."
|
||||
},
|
||||
"clipboard_copy_link": {
|
||||
"message": "Gesäuberte Link-Adresse kopieren",
|
||||
"description": "Diese Zeichenfolge wird im Kontextmenü zum Kopieren sauberer Links verwendet."
|
||||
},
|
||||
"context_menu_enabled": {
|
||||
"message": "Kontextmenü-Eintrag anzeigen",
|
||||
"description": "Mit dieser Zeichenfolge wird der Kontextmenüeintrag ein- und ausgeschaltet, um saubere Links zu kopieren."
|
||||
},
|
||||
"history_listener_enabled": {
|
||||
"message": "Verhindere Tracking über die History-API (Siehe auch: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>The replaceState() method</a>)",
|
||||
"description": "Diese Zeichenfolge wird als Name für das History-API-Listener-Label verwendet."
|
||||
},
|
||||
"cleaning_tool_page_title": {
|
||||
"message": "Säuberungswerkzeug von ClearURLs",
|
||||
"description": "Diese Zeichenfolge wird als Titel auf der Reinigungswerkzeugseite verwendet."
|
||||
},
|
||||
"cleaning_tool_description": {
|
||||
"message": "Mit diesem Werkzeug können Sie URLs in die Textbox einfügen. Nach einem klick auf den grünen Button reinigt ClearURLs die Links. Sie können mehrer URLs auf einmal einfügen, jede URL muss aber in einer eigenen Zeile stehen.",
|
||||
"description": "Diese Zeichenfolge wird als Beschreibung des Reinigungswerkzeugs verwendet."
|
||||
},
|
||||
"cleaning_tool_btn": {
|
||||
"message": "URLs säubern",
|
||||
"description": "Diese Zeichenfolge wird als Name für die Schaltfläche \"URLs säubern\" verwendet."
|
||||
},
|
||||
"cleaning_tool_dirty_urls_label": {
|
||||
"message": "Hier können Sie die ungesäuberten URLs einfügen:",
|
||||
"description": "Diese Zeichenfolge wird als Titel auf der Seite des Bereinigungstools für die fehlerhaften URLs verwendet."
|
||||
},
|
||||
"cleaning_tool_clean_urls_label": {
|
||||
"message": "Hier finden Sie die gesäuberten URLs:",
|
||||
"description": "Diese Zeichenfolge wird als Titel auf der Bereinigungswerkzeugseite für die bereinigten URLs verwendet."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,251 +1,234 @@
|
||||
{
|
||||
"hash_status_code_1": {
|
||||
"message": "up to date",
|
||||
"description": ""
|
||||
"description": "This status code says, that no update is available for the ClearURLs rules and everything is up to date."
|
||||
},
|
||||
|
||||
"hash_status_code_2": {
|
||||
"message": "updated",
|
||||
"description": ""
|
||||
"description": "This status code says, that the ClearURLs rules are successfully updated."
|
||||
},
|
||||
|
||||
"hash_status_code_3": {
|
||||
"message": "update available",
|
||||
"description": ""
|
||||
"description": "This status code says, that an update is available for the ClearURLs rules."
|
||||
},
|
||||
|
||||
"hash_status_code_4": {
|
||||
"message": "error",
|
||||
"description": ""
|
||||
"description": "This status code says, that the ClearURLs could not be started correctly."
|
||||
},
|
||||
|
||||
"hash_status_code_5": {
|
||||
"message": "Oops something went wrong!",
|
||||
"description": ""
|
||||
"description": "This status code says, that an error occurred while updating the ClearURLs rules."
|
||||
},
|
||||
|
||||
"log_redirect": {
|
||||
"message": "This url is redirected",
|
||||
"description": ""
|
||||
"description": "This string is used on redirections in the ClearURLs log."
|
||||
},
|
||||
|
||||
"log_domain_blocked": {
|
||||
"message": "This domain is blocked",
|
||||
"description": ""
|
||||
"description": "This string is used on blocked domains in the ClearURLs log."
|
||||
},
|
||||
|
||||
"check_os_log": {
|
||||
"message": "[ClearURLs]: Log listener is added.",
|
||||
"description": ""
|
||||
"description": "This string is used on ClearURLs log startup."
|
||||
},
|
||||
|
||||
"log_html_page_title": {
|
||||
"message": "Log from ClearURLs",
|
||||
"description": ""
|
||||
"description": "This string is used as header on the log page."
|
||||
},
|
||||
|
||||
"log_html_table_head_1": {
|
||||
"message": "Before processing",
|
||||
"description": ""
|
||||
"description": "This string is used as table title on the log page."
|
||||
},
|
||||
|
||||
"log_html_table_head_2": {
|
||||
"message": "After processing",
|
||||
"description": ""
|
||||
"description": "This string is used as table title on the log page."
|
||||
},
|
||||
|
||||
"log_html_table_head_3": {
|
||||
"message": "Rule",
|
||||
"description": ""
|
||||
"description": "This string is used as table title on the log page."
|
||||
},
|
||||
|
||||
"log_html_table_head_4": {
|
||||
"message": "Time",
|
||||
"description": ""
|
||||
"description": "This string is used as table title on the log page."
|
||||
},
|
||||
|
||||
"log_html_reset_button": {
|
||||
"message": "Reset",
|
||||
"description": ""
|
||||
"description": "This string is used for the reset button on the log page."
|
||||
},
|
||||
|
||||
"log_html_reset_button_title": {
|
||||
"message": "Reset the global log",
|
||||
"description": ""
|
||||
"description": "This string is used as title for the reset button on the log page."
|
||||
},
|
||||
|
||||
"popup_html_configs_head": {
|
||||
"message": "Configs",
|
||||
"description": ""
|
||||
"description": "This string is used as title for the configs on the popup page."
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter": {
|
||||
"message": "Filter",
|
||||
"description": ""
|
||||
"description": "This string is used as name for the filter switch button on the popup page."
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter_title": {
|
||||
"message": "The filters switch activates the cleaning functionality of ClearURLs. If you disable this option, the whole addon is disabled",
|
||||
"description": ""
|
||||
"description": "This string is used as title for the filter switch button on the popup page."
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log": {
|
||||
"message": "Logging",
|
||||
"description": ""
|
||||
"description": "This string is used as name for the logging switch button on the popup page."
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log_title": {
|
||||
"message": "The log is saved only locally. We advise against this feature if you do not need it",
|
||||
"description": ""
|
||||
"description": "This string is used as title for the logging switch button on the popup page."
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges": {
|
||||
"message": "Badges",
|
||||
"description": ""
|
||||
"description": "This string is used as name for the badges switch button on the popup page."
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges_title": {
|
||||
"message": "Show number of cleaned urls",
|
||||
"description": ""
|
||||
"description": "This string is used as title for the badges switch button on the popup page."
|
||||
},
|
||||
|
||||
"popup_html_statistics_head": {
|
||||
"message": "Statistics",
|
||||
"description": ""
|
||||
"description": "This string is used as title for the statistics on the popup page."
|
||||
},
|
||||
|
||||
"popup_html_statistics_elements": {
|
||||
"message": "Elements",
|
||||
"description": ""
|
||||
"description": "This string is used as name for the elements on the popup page."
|
||||
},
|
||||
|
||||
"popup_html_statistics_blocked": {
|
||||
"message": "Blocked",
|
||||
"description": ""
|
||||
"description": "This string is used as name for the blocked elements on the popup page."
|
||||
},
|
||||
|
||||
"popup_html_statistics_percentage": {
|
||||
"message": "Percentage",
|
||||
"description": ""
|
||||
"description": "This string is used as name for the percentage of blocked elements on the popup page."
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button": {
|
||||
"message": "Reset",
|
||||
"description": ""
|
||||
"description": "This string is used as name for the statistics reset button on the popup page."
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button_title": {
|
||||
"message": "Reset the global statistics",
|
||||
"description": ""
|
||||
"description": "This string is used as title for the statistics reset button on the popup page."
|
||||
},
|
||||
|
||||
"popup_html_rules_status_head": {
|
||||
"message": "Rules-Status",
|
||||
"description": ""
|
||||
"description": "This string is used as title for the rules-status section on the popup page."
|
||||
},
|
||||
|
||||
"popup_html_log_head": {
|
||||
"message": "Log",
|
||||
"description": ""
|
||||
"description": "This string is used as name for the log button on the popup page."
|
||||
},
|
||||
|
||||
"popup_html_log_head_title": {
|
||||
"message": "Open the log",
|
||||
"description": ""
|
||||
"description": "This string is used as title for the log button on the popup page."
|
||||
},
|
||||
|
||||
"popup_html_report_button": {
|
||||
"message": "Report current URL",
|
||||
"description": ""
|
||||
"description": "Note: Currently not used."
|
||||
},
|
||||
|
||||
"popup_html_report_button_title": {
|
||||
"message": "Report the current URL from this tab.",
|
||||
"description": ""
|
||||
"description": "Currently not used."
|
||||
},
|
||||
|
||||
"core_save_on_disk": {
|
||||
"message": "[ClearURLs]: Save on disk.",
|
||||
"description": ""
|
||||
"description": "This string is used to tell the user, that ClearURLs saved the settings on disk."
|
||||
},
|
||||
|
||||
"core_error": {
|
||||
"message": "[ClearURLs]: The addon could not started.",
|
||||
"description": ""
|
||||
"description": "This string is used to tell the user, that ClearURLs could not be started."
|
||||
},
|
||||
|
||||
"configs_switch_statistics": {
|
||||
"message": "Statistics",
|
||||
"description": ""
|
||||
"description": "This string is used as name for the statistics switch button on the popup page."
|
||||
},
|
||||
|
||||
"configs_switch_statistics_title": {
|
||||
"message": "Activate or deactivate the statistics function",
|
||||
"description": ""
|
||||
"description": "This string is used as title for the statistics switch button on the popup page."
|
||||
},
|
||||
|
||||
"settings_html_page_title": {
|
||||
"message": "Settings from ClearURLs",
|
||||
"description": ""
|
||||
"description": "This string is used as title on the settings page."
|
||||
},
|
||||
|
||||
"badged_color_label": {
|
||||
"message": "Badged color",
|
||||
"description": ""
|
||||
"description": "This string is used as name for the badged color label."
|
||||
},
|
||||
|
||||
"setting_html_reset_button": {
|
||||
"message": "Reset",
|
||||
"description": ""
|
||||
"description": "This string is used as name for the reset button on the settings page."
|
||||
},
|
||||
|
||||
"setting_html_reset_button_title": {
|
||||
"message": "Reset everything",
|
||||
"description": ""
|
||||
"description": "This string is used as title for the reset button on the settings page."
|
||||
},
|
||||
|
||||
"setting_rule_url_label": {
|
||||
"message": "The url to the data.json file (rules)",
|
||||
"description": ""
|
||||
"description": "This string is used as name for the rule url label."
|
||||
},
|
||||
|
||||
"settings_html_save_button": {
|
||||
"message": "Save & reload addon",
|
||||
"description": ""
|
||||
"description": "This string is used as name for the save&reload button on the settings page."
|
||||
},
|
||||
|
||||
"settings_html_save_button_title": {
|
||||
"message": "Saves the settings",
|
||||
"description": ""
|
||||
"description": "This string is used as title for the save&reload button on the settings page."
|
||||
},
|
||||
|
||||
"setting_hash_url_label": {
|
||||
"message": "The url to the rules.hash file (hash)",
|
||||
"description": ""
|
||||
"description": "This string is used as name for the rule.hash url 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": ""
|
||||
"description": "This string is used as name for the types label."
|
||||
},
|
||||
|
||||
"setting_report_server_label": {
|
||||
"message": "Report server for URLs",
|
||||
"description": ""
|
||||
"description": "Note: Currently not used."
|
||||
},
|
||||
|
||||
"success_report_url": {
|
||||
"message": "The URL was successfully reported. We will check this URL soon.",
|
||||
"description": ""
|
||||
"description": "Note: Currently not used."
|
||||
},
|
||||
|
||||
"error_report_url": {
|
||||
"message": "It seems like this URL has already been reported.",
|
||||
"description": ""
|
||||
"description": "Note: Currently not used."
|
||||
},
|
||||
|
||||
"donate_button": {
|
||||
"message": "A donation for the ClearURLs creator.",
|
||||
"description": ""
|
||||
"description": "This string is used to refer to a donation page."
|
||||
},
|
||||
"clipboard_copy_link": {
|
||||
"message": "Copy Clean Link Location",
|
||||
"description": "This string is used in the context menu to copy clean links."
|
||||
},
|
||||
"context_menu_enabled": {
|
||||
"message": "Display context menu entry",
|
||||
"description": "This string is used toggle the context menu entry to copy clean links."
|
||||
},
|
||||
"history_listener_enabled": {
|
||||
"message": "Prevent tracking injection over history API (See also: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>The replaceState() method</a>)",
|
||||
"description": "This string is used as name for the history API listener label."
|
||||
},
|
||||
"cleaning_tool_page_title": {
|
||||
"message": "Cleaning tool from ClearURLs",
|
||||
"description": "This string is used as title on the cleaning tool page."
|
||||
},
|
||||
"cleaning_tool_description": {
|
||||
"message": "With this tool you can paste in URLs and ClearURLs will cleaned the URLs after a click on the green button. You can paste in multiple URLs at once, but every URL must be in a separate line.",
|
||||
"description": "This string is used as description of the cleaning tool."
|
||||
},
|
||||
"cleaning_tool_btn": {
|
||||
"message": "Clean URLs",
|
||||
"description": "This string is used as name for the clean url button."
|
||||
},
|
||||
"cleaning_tool_dirty_urls_label": {
|
||||
"message": "Here you can paste in the dirty URLs:",
|
||||
"description": "This string is used as title on the cleaning tool page for the dirty URLs."
|
||||
},
|
||||
"cleaning_tool_clean_urls_label": {
|
||||
"message": "Here you can find the cleaned URLs:",
|
||||
"description": "This string is used as title on the cleaning tool page for the clean URLs."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,16 @@
|
||||
{
|
||||
"hash_status_code_1": {
|
||||
"message": "Mise à jour",
|
||||
"message": "à jour",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_2": {
|
||||
"message": "Mis à jour",
|
||||
"message": "mis à jour",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_3": {
|
||||
"message": "Mise à jour disponible",
|
||||
"message": "mise à jour disponible",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -20,12 +20,12 @@
|
||||
},
|
||||
|
||||
"hash_status_code_5": {
|
||||
"message": "Quelque chose a dysfonctionné, mais quoi ...",
|
||||
"message": "Quelque chose a dysfonctionné",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_redirect": {
|
||||
"message": "Ce lien Internet a été redirigé",
|
||||
"message": "Cette URL a été redirigée",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -40,17 +40,17 @@
|
||||
},
|
||||
|
||||
"log_html_page_title": {
|
||||
"message": "Connexion à partir de ClearURLs",
|
||||
"message": "Journaux de ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_1": {
|
||||
"message": "Avant le processus de traitement",
|
||||
"message": "Avant traitement",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_2": {
|
||||
"message": "Après le processus de traitement. ",
|
||||
"message": "Après traitement. ",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -65,12 +65,12 @@
|
||||
},
|
||||
|
||||
"log_html_reset_button": {
|
||||
"message": "Remise à l’état initial",
|
||||
"message": "Remise à zéro",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button_title": {
|
||||
"message": "Réinitialiser la base de données",
|
||||
"message": "Réinitialiser les journaux globaux",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -90,12 +90,12 @@
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log": {
|
||||
"message": "Historique",
|
||||
"message": "Journalisation",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log_title": {
|
||||
"message": "L'historique est enregistré localement. Si vous n’avez pas besoin de le consulter, nous déconseillons de l’activer",
|
||||
"message": "Les journaux sont enregistrés localement. Si vous n’avez pas besoin de les consulter, nous déconseillons de les activer",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges_title": {
|
||||
"message": "Nombre de liens Internet nettoyés",
|
||||
"message": "Afficher le nombre d'URL nettoyées",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
},
|
||||
|
||||
"popup_html_statistics_elements": {
|
||||
"message": "Liens Internet",
|
||||
"message": "Éléments",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button_title": {
|
||||
"message": "Remettre à zéro le décompte, les statistiques",
|
||||
"message": "Remettre à zéro les statistiques globales",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -145,12 +145,12 @@
|
||||
},
|
||||
|
||||
"popup_html_log_head": {
|
||||
"message": "Compte-rendu",
|
||||
"message": "Journaux",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head_title": {
|
||||
"message": "Ouvrir le compte-rendu",
|
||||
"message": "Ouvrir les journaux",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -160,17 +160,17 @@
|
||||
},
|
||||
|
||||
"popup_html_report_button_title": {
|
||||
"message": "Signaler le dysfonctionnement sur cette URL",
|
||||
"message": "Signaler un dysfonctionnement sur cette URL",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_save_on_disk": {
|
||||
"message": "[ClearURLs]: Sauvegarder sur le disque",
|
||||
"message": "[ClearURLs]: Sauvegarder sur le disque.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_error": {
|
||||
"message": "[ClearURLs]: L’extension n’a pu être démarrée",
|
||||
"message": "[ClearURLs]: L’extension n’a pu être démarrée.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -205,7 +205,7 @@
|
||||
},
|
||||
|
||||
"setting_rule_url_label": {
|
||||
"message": "Lien Internet du fichier Data (basse de données)",
|
||||
"message": "L'URL du fichier data.json (règles)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -215,37 +215,69 @@
|
||||
},
|
||||
|
||||
"settings_html_save_button_title": {
|
||||
"message": "Sauvegarder les paramétrages",
|
||||
"message": "Sauvegarde les paramétrages",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_hash_url_label": {
|
||||
"message": "Lien Internet du fichier Hash (signature de contrôle)",
|
||||
"message": "L'URL du fichier rules.hash (signature de contrôle)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_types_label": {
|
||||
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Demande de données (webRequest)</a> (Uniquement si vous maitrisez la programmation)",
|
||||
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Types de requête (webRequest)</a> (niveau expert)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_report_server_label": {
|
||||
"message": "Serveur pour signaler des URLs",
|
||||
"message": "Serveur pour signaler des URL",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"success_report_url": {
|
||||
"message": "Nous avons reçu votre signalement. Nous allons vérifier cette URL",
|
||||
"message": "Nous avons reçu votre signalement. Nous allons vérifier cette URL.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"error_report_url": {
|
||||
"message": "Il semble que cette URL a déjà été signalée",
|
||||
"message": "Il semble que cette URL a déjà été signalée.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"donate_button": {
|
||||
"message": "Subventionner le développeur de ClearURLs",
|
||||
"message": "Subventionner le créateur de ClearURLs.",
|
||||
"description": ""
|
||||
},
|
||||
"clipboard_copy_link": {
|
||||
"message": "Copier l’URL sans le traqueur",
|
||||
"description": ""
|
||||
},
|
||||
"context_menu_enabled": {
|
||||
"message": "Activer ClearUrls dans le menu contextuel",
|
||||
"description": ""
|
||||
},
|
||||
"history_listener_enabled": {
|
||||
"message": "Empêcher le suivi par l’API d'historique (<a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>La méthode replaceState()</a>)",
|
||||
"description": ""
|
||||
},
|
||||
"cleaning_tool_page_title": {
|
||||
"message": "Outil de nettoyage pour ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
"cleaning_tool_description": {
|
||||
"message": "Ici, vous pouvez déposer des URL et ClearURLs les nettoiera par un clic sur le bouton vert. Vous pouvez mettre plusieurs URL mais chaque URL devra être mise sur une ligne séparée.",
|
||||
"description": ""
|
||||
},
|
||||
"cleaning_tool_btn": {
|
||||
"message": "Nettoyer les URL",
|
||||
"description": ""
|
||||
},
|
||||
"cleaning_tool_dirty_urls_label": {
|
||||
"message": "Coller ici les URL à nettoyer :",
|
||||
"description": ""
|
||||
},
|
||||
"cleaning_tool_clean_urls_label": {
|
||||
"message": "Vous trouverez ici les URL nettoyées :",
|
||||
"description": ""
|
||||
}
|
||||
}
|
||||
|
||||
283
_locales/pl/messages.json
Normal file
@@ -0,0 +1,283 @@
|
||||
{
|
||||
"hash_status_code_1": {
|
||||
"message": "aktualne",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_2": {
|
||||
"message": "zaktualizowane",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_3": {
|
||||
"message": "dostępna aktualizacja",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_4": {
|
||||
"message": "błąd",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_5": {
|
||||
"message": "Ups, coś poszło nie tak!",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_redirect": {
|
||||
"message": "Ten url jest przekierowany",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_domain_blocked": {
|
||||
"message": "Ta domena jest zablokowana",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"check_os_log": {
|
||||
"message": "[ClearURLs]: Dodano nasłuchiwanie dziennika.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_page_title": {
|
||||
"message": "Dziennik ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_1": {
|
||||
"message": "Przed przetworzeniem",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_2": {
|
||||
"message": "Po przetworzeniu",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_3": {
|
||||
"message": "Reguła",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_4": {
|
||||
"message": "Czas",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button": {
|
||||
"message": "Wyczyść",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button_title": {
|
||||
"message": "Wyczyść wszystkie wpisy dziennika",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_head": {
|
||||
"message": "Konfiguracja",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter": {
|
||||
"message": "Filtr",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter_title": {
|
||||
"message": "Przełącznik filtra aktywuje funkcję oczyszczania ClearURLs. Jeśli wyłączysz tę funkcję, dodatek przestanie działać.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log": {
|
||||
"message": "Dziennik",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log_title": {
|
||||
"message": "Dziennik zapisywany jest wyłącznie lokalnie. Zalecamy nie używanie tej funkcji jeśli nie jest ci potrzebna.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges": {
|
||||
"message": "Znacznik",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges_title": {
|
||||
"message": "Pokazuje liczbę oczyszczonych url",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_head": {
|
||||
"message": "Statystyki",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_elements": {
|
||||
"message": "Elementy",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_blocked": {
|
||||
"message": "Zablokowano",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_percentage": {
|
||||
"message": "Procent",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button": {
|
||||
"message": "Wyczyść",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button_title": {
|
||||
"message": "Wyczyść wszystkie statystyki",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_rules_status_head": {
|
||||
"message": "Status–Reguł",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head": {
|
||||
"message": "Dziennik",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head_title": {
|
||||
"message": "Otwórz dziennik",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_report_button": {
|
||||
"message": "Raportuj aktualny URL",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_report_button_title": {
|
||||
"message": "Raportuj aktualny URL z tej karty.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_save_on_disk": {
|
||||
"message": "[ClearURLs]: Zapisz na dysku.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_error": {
|
||||
"message": "[ClearURLs]: Dodatek nie mógł się uruchomić.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics": {
|
||||
"message": "Statystyki",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics_title": {
|
||||
"message": "Aktywuj lub dezaktywuj funkcję statystyk",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_page_title": {
|
||||
"message": "Ustawienia ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"badged_color_label": {
|
||||
"message": "Kolor znacznika",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button": {
|
||||
"message": "Wyczyść",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button_title": {
|
||||
"message": "Wyczyść wszystko",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_rule_url_label": {
|
||||
"message": "Url do pliku data.json (reguły)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button": {
|
||||
"message": "Zapisz i załaduj dodatek ponownie",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button_title": {
|
||||
"message": "Zapisz ustawienia",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_hash_url_label": {
|
||||
"message": "Url do pliku rules.hash (hash)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"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": ""
|
||||
},
|
||||
|
||||
"setting_report_server_label": {
|
||||
"message": "Serwer raportów dla adresów URL",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"success_report_url": {
|
||||
"message": "URL został zaraportowany z powodzeniem. Wkrótce sprawdzimy ten raport.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"error_report_url": {
|
||||
"message": "Ten Url już był raportowany.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"donate_button": {
|
||||
"message": "Dotacja dla twórcy ClearURLs.",
|
||||
"description": ""
|
||||
},
|
||||
"clipboard_copy_link": {
|
||||
"message": "Kopiuj Oczyszczony Odnośnik",
|
||||
"description": ""
|
||||
},
|
||||
"context_menu_enabled": {
|
||||
"message": "Wyświetl wpis w menu kontekstowym",
|
||||
"description": ""
|
||||
},
|
||||
"history_listener_enabled": {
|
||||
"message": "Zapobiegaj iniekcji śledzenia w API historii (Zobacz także: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>The replaceState() method</a>)",
|
||||
"description": ""
|
||||
},
|
||||
"cleaning_tool_page_title": {
|
||||
"message": "Narzędzie do oczyszczania URL",
|
||||
"description": ""
|
||||
},
|
||||
"cleaning_tool_description": {
|
||||
"message": "To narzędzie pozwoli wkleić URL, a po wciśnięciu zielonego przycisku ClearURLs oczyści go. Można wkleić wiele URL jednocześnie, ale każdy pojedyńczy winien być w osobnej linii.",
|
||||
"description": ""
|
||||
},
|
||||
"cleaning_tool_btn": {
|
||||
"message": "Oczyść",
|
||||
"description": ""
|
||||
},
|
||||
"cleaning_tool_dirty_urls_label": {
|
||||
"message": "Tu możesz wkleić brudne URL:",
|
||||
"description": ""
|
||||
},
|
||||
"cleaning_tool_clean_urls_label": {
|
||||
"message": "Tu możesz znaleźć oczyszczone URL:",
|
||||
"description": ""
|
||||
}
|
||||
}
|
||||
@@ -3,214 +3,200 @@
|
||||
"message": "не потребує оновлення",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_2": {
|
||||
"message": "оновлено",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_3": {
|
||||
"message": "наявне оновлення",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_4": {
|
||||
"message": "помилка",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"hash_status_code_5": {
|
||||
"message": "Ой, щось не так!",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_redirect": {
|
||||
"message": "Цей URL перенаправляється",
|
||||
"message": "Ця URL-адреса перенаправляється",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_domain_blocked": {
|
||||
"message": "Цей домен заблоковано",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"check_os_log": {
|
||||
"message": "[ClearURLs]: Лог listener додано.",
|
||||
"message": "[ClearURLs]: listener журналу додано.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_page_title": {
|
||||
"message": "Лог ClearURLs",
|
||||
"message": "Журнал ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_1": {
|
||||
"message": "Перед обробкою",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_2": {
|
||||
"message": "Після обробки",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_3": {
|
||||
"message": "Правило",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_table_head_4": {
|
||||
"message": "Час",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button": {
|
||||
"message": "Скидання",
|
||||
"message": "Скинути",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button_title": {
|
||||
"message": "Скидання глобального логу",
|
||||
"message": "Скидання глобального журналу",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_head": {
|
||||
"message": "Налаштування",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter": {
|
||||
"message": "Фільтр",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter_title": {
|
||||
"message": "Активує функцію очищення URL. Якщо вимкнути - аддон не працюватиме",
|
||||
"message": "Активує функцію очищення ClearURLs. Якщо вимкнути - додаток не працюватиме",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log": {
|
||||
"message": "Логування",
|
||||
"message": "Журнал",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log_title": {
|
||||
"message": "Лог зберігається лише локально. Не активуйте цю функцію, якщо вона вам не потрібна.",
|
||||
"message": "Журнал зберігається лише локально. Не активуйте цю функцію, якщо вона вам не потрібна",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges": {
|
||||
"message": "Значки",
|
||||
"message": "Позначки",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_badges_title": {
|
||||
"message": "Показати кількість очищених URL",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_head": {
|
||||
"message": "Статистика",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_elements": {
|
||||
"message": "Елементи",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_blocked": {
|
||||
"message": "Заблоковано",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_percentage": {
|
||||
"message": "Відсоток",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button": {
|
||||
"message": "Скинути",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button_title": {
|
||||
"message": "Скидання глобальної статистики",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_rules_status_head": {
|
||||
"message": "Актуальність правил",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head": {
|
||||
"message": "Лог",
|
||||
"message": "Журнал",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head_title": {
|
||||
"message": "Відкрити лог",
|
||||
"message": "Відкрити журнал",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_report_button": {
|
||||
"message": "Повідомити про URL",
|
||||
"description": ""
|
||||
},
|
||||
"popup_html_report_button_title": {
|
||||
"message": "Повідомити про URL з цієї вкладки.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_save_on_disk": {
|
||||
"message": "[ClearURLs]: Зберегти на диск.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_error": {
|
||||
"message": "[ClearURLs]: Не вдалося запустити аддон.",
|
||||
"message": "[ClearURLs]: Не вдалося запустити додаток.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics": {
|
||||
"message": "Статистика",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"configs_switch_statistics_title": {
|
||||
"message": "Увімк. чи вимк. статистику",
|
||||
"message": "Увімкнення чи вимкнення статистики",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_page_title": {
|
||||
"message": "Налаштування ClearURLs",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"badged_color_label": {
|
||||
"message": "Колір значка",
|
||||
"message": "Колір піктограми",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button": {
|
||||
"message": "Скинути",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button_title": {
|
||||
"message": "Скинути все",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_rule_url_label": {
|
||||
"message": "Посилання на файл data.json (правила)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button": {
|
||||
"message": "Зберегти і перезавантажити аддон",
|
||||
"message": "Зберегти і перезавантажити додаток",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button_title": {
|
||||
"message": "Збереження налаштувань",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_hash_url_label": {
|
||||
"message": "Посилання на файл rules.hash (хеш)",
|
||||
"description": ""
|
||||
},
|
||||
"setting_types_label": {
|
||||
"message": "<a href='https:\/\/developer.mozilla.org\/en-US\/docs\/Mozilla\/Add-ons\/WebExtensions\/API\/webRequest\/ResourceType' target='_blank'>Типи запитів<\/a> (експертний рівень)",
|
||||
"description": ""
|
||||
},
|
||||
"setting_report_server_label": {
|
||||
"message": "Звіт про сервер URL",
|
||||
"description": ""
|
||||
},
|
||||
"success_report_url": {
|
||||
"message": "Успішно повідомлено про URL-адресу. Ми невдовзі це перевіримо.",
|
||||
"description": ""
|
||||
},
|
||||
"error_report_url": {
|
||||
"message": "Схоже, про цю URL-адресу вже повідомлено.",
|
||||
"description": ""
|
||||
},
|
||||
"donate_button": {
|
||||
"message": "Внесок для розробників ClearURLs.",
|
||||
"description": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,7 @@
|
||||
},
|
||||
|
||||
"hash_status_code_5": {
|
||||
"message": "糟糕! 有东西不对劲",
|
||||
"message": "发生错误",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
},
|
||||
|
||||
"log_domain_blocked": {
|
||||
"message": "此网址已被封锁",
|
||||
"message": "此网域已被封锁",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -65,17 +65,17 @@
|
||||
},
|
||||
|
||||
"log_html_reset_button": {
|
||||
"message": "重设",
|
||||
"message": "重置",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button_title": {
|
||||
"message": "重设全域日志",
|
||||
"message": "重置全局日志",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_head": {
|
||||
"message": "配置",
|
||||
"message": "设定",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter_title": {
|
||||
"message": "此过滤器开关为ClearURLs的主开关, 若此项不勾选, 则本插件失效.",
|
||||
"message": "此为ClearURLs的主开关. 若关闭则此插件失效.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log_title": {
|
||||
"message": "日志会被储存于本地. 若不需要此功能, 建议不要使用.",
|
||||
"message": "日志会被储存于本地. 若不需要此功能建议关闭.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -130,17 +130,17 @@
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button": {
|
||||
"message": "重设",
|
||||
"message": "重置",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button_title": {
|
||||
"message": "重设全域统计",
|
||||
"message": "重置全局统计",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_rules_status_head": {
|
||||
"message": "规则状态",
|
||||
"message": "规则-状态",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -154,13 +154,23 @@
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_report_button": {
|
||||
"message": "回报目前网址",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_report_button_title": {
|
||||
"message": "回报该分页目前网址",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_save_on_disk": {
|
||||
"message": "[ClearURLs]: 储存于硬盘",
|
||||
"message": "[ClearURLs]: 储存于本地",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_error": {
|
||||
"message": "[ClearURLs]: 此插件无法启动",
|
||||
"message": "[ClearURLs]: 插件无法启动",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -175,7 +185,7 @@
|
||||
},
|
||||
|
||||
"settings_html_page_title": {
|
||||
"message": "ClearURLs设置",
|
||||
"message": "ClearURLs设定",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -185,17 +195,17 @@
|
||||
},
|
||||
|
||||
"setting_html_reset_button": {
|
||||
"message": "重设",
|
||||
"message": "重置",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button_title": {
|
||||
"message": "重设所有设置",
|
||||
"message": "重置所有设定",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_rule_url_label": {
|
||||
"message": "data.json的网址 (规则)",
|
||||
"message": "data.json档的网址 (规则)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -205,12 +215,77 @@
|
||||
},
|
||||
|
||||
"settings_html_save_button_title": {
|
||||
"message": "储存设置",
|
||||
"message": "储存设定",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_hash_url_label": {
|
||||
"message": "rules.hash的网址 (校验)",
|
||||
"message": "rules.hash档的网址 (校验)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_types_label": {
|
||||
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>请求类型</a> (进阶设定)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_report_server_label": {
|
||||
"message": "回报网址",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"success_report_url": {
|
||||
"message": "该网址已成功回报",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"error_report_url": {
|
||||
"message": "该网址已被回报过",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"donate_button": {
|
||||
"message": "给ClearURLs的作者一点贊助",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"clipboard_copy_link": {
|
||||
"message": "複製清理过的网址",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"context_menu_enabled": {
|
||||
"message": "显示右键选单条目",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"history_listener_enabled": {
|
||||
"message": "Prevent tracking injection over history API (详见: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>The replaceState() method</a>)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_page_title": {
|
||||
"message": "ClearURLs的网址清理工具",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_description": {
|
||||
"message": "此工具提供手动清理网址的功能. 在下方贴上网址并按下绿色按钮, ClearURLs将会输出清理后的网址. 若要同时清理多个网址, 请将每个置于不同行.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_btn": {
|
||||
"message": "网址清理工具",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_dirty_urls_label": {
|
||||
"message": "清理前的网址:",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_clean_urls_label": {
|
||||
"message": "清理后的网址:",
|
||||
"description": ""
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
},
|
||||
|
||||
"hash_status_code_5": {
|
||||
"message": "糟糕! 有東西不對勁",
|
||||
"message": "發生錯誤",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -30,17 +30,17 @@
|
||||
},
|
||||
|
||||
"log_domain_blocked": {
|
||||
"message": "此網址已被封鎖",
|
||||
"message": "此網域已被封鎖",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"check_os_log": {
|
||||
"message": "[ClearURLs]: 已新增記錄聆聽者",
|
||||
"message": "[ClearURLs]: 已新增記錄監聽器",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_page_title": {
|
||||
"message": "ClearURLs記錄檔",
|
||||
"message": "ClearURLs歷史記錄",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -65,17 +65,17 @@
|
||||
},
|
||||
|
||||
"log_html_reset_button": {
|
||||
"message": "重設",
|
||||
"message": "重置",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"log_html_reset_button_title": {
|
||||
"message": "重設全域記錄檔",
|
||||
"message": "重置全域記錄檔",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_head": {
|
||||
"message": "配置",
|
||||
"message": "設定",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -85,17 +85,17 @@
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_filter_title": {
|
||||
"message": "此過濾器開關為ClearURLs的主開關, 若此項不打勾, 則本附加元件失效.",
|
||||
"message": "此為ClearURLs的主開關. 若關閉則此附件元件失效.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log": {
|
||||
"message": "記錄",
|
||||
"message": "歷史記錄",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_configs_switch_log_title": {
|
||||
"message": "記錄檔會被儲存於本機. 若不需要此功能, 建議不要使用.",
|
||||
"message": "記錄檔會被儲存於本機. 若不需要此功能建議關閉.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -130,37 +130,47 @@
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button": {
|
||||
"message": "重設",
|
||||
"message": "重置",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_statistics_reset_button_title": {
|
||||
"message": "重設全域統計",
|
||||
"message": "重置全域統計",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_rules_status_head": {
|
||||
"message": "規則狀態",
|
||||
"message": "規則-狀態",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head": {
|
||||
"message": "記錄檔",
|
||||
"message": "記錄",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_log_head_title": {
|
||||
"message": "開啟記錄檔",
|
||||
"message": "開啟記錄",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_report_button": {
|
||||
"message": "回報目前網址",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"popup_html_report_button_title": {
|
||||
"message": "回報該分頁目前網址",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_save_on_disk": {
|
||||
"message": "[ClearURLs]: 儲存於磁碟",
|
||||
"message": "[ClearURLs]: 儲存於本機",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"core_error": {
|
||||
"message": "[ClearURLs]: 此附加元件無法啟動",
|
||||
"message": "[ClearURLs]: 附加元件無法啟動",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -185,22 +195,22 @@
|
||||
},
|
||||
|
||||
"setting_html_reset_button": {
|
||||
"message": "重設",
|
||||
"message": "重置",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_html_reset_button_title": {
|
||||
"message": "重設所有設定",
|
||||
"message": "重置所有設定",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_rule_url_label": {
|
||||
"message": "data.json的網址 (規則)",
|
||||
"message": "data.json檔的網址 (規則)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"settings_html_save_button": {
|
||||
"message": "儲存並重啟附加元件",
|
||||
"message": "儲存並重啟附件元件",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
@@ -210,7 +220,72 @@
|
||||
},
|
||||
|
||||
"setting_hash_url_label": {
|
||||
"message": "rules.hash的網址 (校驗)",
|
||||
"message": "rules.hash檔的網址 (校驗)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_types_label": {
|
||||
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>請求類型</a> (進階設定)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"setting_report_server_label": {
|
||||
"message": "回報網址",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"success_report_url": {
|
||||
"message": "該網址已成功回報",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"error_report_url": {
|
||||
"message": "該網址已被回報過",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"donate_button": {
|
||||
"message": "給ClearURLs的作者一點贊助",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"clipboard_copy_link": {
|
||||
"message": "複製清理過的網址",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"context_menu_enabled": {
|
||||
"message": "顯示右鍵選單項目",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"history_listener_enabled": {
|
||||
"message": "Prevent tracking injection over history API (詳見: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>The replaceState() method</a>)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_page_title": {
|
||||
"message": "ClearURLs的網址清理工具",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_description": {
|
||||
"message": "此工具提供手動清理網址的功能. 在下方貼上網址並按下綠色按鈕, ClearURLs將會輸出清理後的網址. 若要同時清理多個網址, 請將每個置於不同行.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_btn": {
|
||||
"message": "網址清理工具",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_dirty_urls_label": {
|
||||
"message": "清理前的網址:",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"cleaning_tool_clean_urls_label": {
|
||||
"message": "清理後的網址:",
|
||||
"description": ""
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
global.browser = mod.exports;
|
||||
}
|
||||
})(this, function (module) {
|
||||
/* webextension-polyfill - v0.3.1 - Tue Aug 21 2018 10:09:34 */
|
||||
/* 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
|
||||
@@ -28,7 +28,7 @@
|
||||
// contents of a function until the first time it's called, and since it will
|
||||
// never actually need to be called, this allows the polyfill to be included
|
||||
// in Firefox nearly for free.
|
||||
const wrapAPIs = () => {
|
||||
const wrapAPIs = extensionAPIs => {
|
||||
// NOTE: apiMetadata is associated to the content of the api-metadata.json file
|
||||
// at build time by replacing the following "include" with the content of the
|
||||
// JSON file.
|
||||
@@ -241,7 +241,8 @@
|
||||
"inspectedWindow": {
|
||||
"eval": {
|
||||
"minArgs": 1,
|
||||
"maxArgs": 2
|
||||
"maxArgs": 2,
|
||||
"singleCallbackArg": false
|
||||
}
|
||||
},
|
||||
"panels": {
|
||||
@@ -763,9 +764,9 @@
|
||||
*/
|
||||
const makeCallback = (promise, metadata) => {
|
||||
return (...callbackArgs) => {
|
||||
if (chrome.runtime.lastError) {
|
||||
promise.reject(chrome.runtime.lastError);
|
||||
} else if (metadata.singleCallbackArg || callbackArgs.length <= 1) {
|
||||
if (extensionAPIs.runtime.lastError) {
|
||||
promise.reject(extensionAPIs.runtime.lastError);
|
||||
} else if (metadata.singleCallbackArg || callbackArgs.length <= 1 && metadata.singleCallbackArg !== false) {
|
||||
promise.resolve(callbackArgs[0]);
|
||||
} else {
|
||||
promise.resolve(callbackArgs);
|
||||
@@ -1110,14 +1111,14 @@
|
||||
});
|
||||
|
||||
const wrappedSendMessageCallback = ({ reject, resolve }, reply) => {
|
||||
if (chrome.runtime.lastError) {
|
||||
if (extensionAPIs.runtime.lastError) {
|
||||
// Detect when none of the listeners replied to the sendMessage call and resolve
|
||||
// the promise to undefined as in Firefox.
|
||||
// See https://github.com/mozilla/webextension-polyfill/issues/130
|
||||
if (chrome.runtime.lastError.message === CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE) {
|
||||
if (extensionAPIs.runtime.lastError.message === CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE) {
|
||||
resolve();
|
||||
} else {
|
||||
reject(chrome.runtime.lastError);
|
||||
reject(extensionAPIs.runtime.lastError);
|
||||
}
|
||||
} else if (reply && reply.__mozWebExtensionPolyfillReject__) {
|
||||
// Convert back the JSON representation of the error into
|
||||
@@ -1173,14 +1174,13 @@
|
||||
}
|
||||
};
|
||||
|
||||
return wrapObject(chrome, staticWrappers, apiMetadata);
|
||||
return wrapObject(extensionAPIs, staticWrappers, apiMetadata);
|
||||
};
|
||||
|
||||
// The build process adds a UMD wrapper around this file, which makes the
|
||||
// `module` variable available.
|
||||
module.exports = wrapAPIs(); // eslint-disable-line no-undef
|
||||
module.exports = wrapAPIs(chrome);
|
||||
} else {
|
||||
module.exports = browser; // eslint-disable-line no-undef
|
||||
module.exports = browser;
|
||||
}
|
||||
});
|
||||
//# sourceMappingURL=browser-polyfill.js.map
|
||||
|
||||
1480
clearurls.js
80
core_js/cleaning_tool.js
Normal file
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
var cleanedURLs = [];
|
||||
var i = 0;
|
||||
var length = 0;
|
||||
|
||||
/**
|
||||
* Load only when document is ready
|
||||
*/
|
||||
$(document).ready(function(){
|
||||
setText();
|
||||
$('#cleaning_tool_btn').on("click", cleanURLs);
|
||||
});
|
||||
|
||||
/**
|
||||
* This function cleans all URLs line by line in the textarea.
|
||||
*/
|
||||
function cleanURLs() {
|
||||
var cleanTArea = $('#cleanURLs');
|
||||
var dirtyTArea = $('#dirtyURLs');
|
||||
var urls = dirtyTArea.val().split('\n');
|
||||
cleanedURLs = [];
|
||||
length = urls.length;
|
||||
|
||||
for(i=0; i < length; i++) {
|
||||
browser.runtime.sendMessage({
|
||||
function: "pureCleaning",
|
||||
params: [urls[i]]
|
||||
}).then((data) => {
|
||||
cleanedURLs.push(data.response);
|
||||
if(i >= length-1) {
|
||||
cleanTArea.val(cleanedURLs.join('\n'));
|
||||
}
|
||||
}, handleError);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate a string with the i18n API.
|
||||
*
|
||||
* @param {string} string Name of the attribute used for localization
|
||||
*/
|
||||
function translate(string)
|
||||
{
|
||||
return browser.i18n.getMessage(string);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the text for the UI.
|
||||
*/
|
||||
function setText()
|
||||
{
|
||||
document.title = translate('cleaning_tool_page_title');
|
||||
$('#page_title').text(translate('cleaning_tool_page_title'));
|
||||
$('#cleaning_tool_description').text(translate('cleaning_tool_description'));
|
||||
$('#cleaning_tool_btn').text(translate('cleaning_tool_btn'));
|
||||
$('#cleaning_tool_dirty_urls_label').text(translate('cleaning_tool_dirty_urls_label'));
|
||||
$('#cleaning_tool_clean_urls_label').text(translate('cleaning_tool_clean_urls_label'));
|
||||
}
|
||||
|
||||
function handleError(error) {
|
||||
console.log(`Error: ${error}`);
|
||||
}
|
||||
57
core_js/context_menu.js
Normal file
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
/*
|
||||
* This script is responsible for context menu cleaning functions
|
||||
* and based on: https://github.com/mdn/webextensions-examples/tree/master/context-menu-copy-link-with-types
|
||||
*/
|
||||
|
||||
function contextMenuStart() {
|
||||
if(storage.contextMenuEnabled) {
|
||||
browser.contextMenus.create({
|
||||
id: "copy-link-to-clipboard",
|
||||
title: translate("clipboard_copy_link"),
|
||||
contexts: ["link"]
|
||||
});
|
||||
|
||||
browser.contextMenus.onClicked.addListener((info, tab) => {
|
||||
if (info.menuItemId === "copy-link-to-clipboard") {
|
||||
const url = pureCleaning(info.linkUrl);
|
||||
const code = "copyToClipboard(" +
|
||||
JSON.stringify(url)+");";
|
||||
|
||||
browser.tabs.executeScript({
|
||||
code: "typeof copyToClipboard === 'function';",
|
||||
}).then((results) => {
|
||||
if (!results || results[0] !== true) {
|
||||
return browser.tabs.executeScript(tab.id, {
|
||||
file: "/external_js/clipboard-helper.js",
|
||||
});
|
||||
}
|
||||
}).then(() => {
|
||||
return browser.tabs.executeScript(tab.id, {
|
||||
code,
|
||||
});
|
||||
}).catch((error) => {
|
||||
console.error("Failed to copy text: " + error);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
53
core_js/historyListener.js
Normal file
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
/*
|
||||
* This script is responsible for listen on history changes.
|
||||
* This technique is often used to inject tracking code into the location bar,
|
||||
* because all feature events will use the updated URL.
|
||||
*/
|
||||
|
||||
function historyListenerStart() {
|
||||
if(storage.historyListenerEnabled) {
|
||||
browser.webNavigation.onHistoryStateUpdated.addListener(historyCleaner);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function that is triggered on history changes. Injects script into page
|
||||
* to clean links that were pushed to the history stack with the
|
||||
* history.replaceState method.
|
||||
* @param {state object} details The state object is a JavaScript object
|
||||
* which is associated with the new history entry created by replaceState()
|
||||
*/
|
||||
function historyCleaner(details) {
|
||||
var urlBefore = details.url;
|
||||
var urlAfter = pureCleaning(details.url);
|
||||
|
||||
if(urlBefore != urlAfter) {
|
||||
browser.tabs.executeScript(details.tabId, {
|
||||
frameId: details.frameId,
|
||||
code: 'history.replaceState({state: "cleaned_history"},"",'+JSON.stringify(urlAfter)+');'
|
||||
}).then(() => {}, onError);
|
||||
}
|
||||
}
|
||||
|
||||
function onError(error) {
|
||||
console.log(`[ClearURLs] Error: ${error}`);
|
||||
}
|
||||
@@ -1,20 +1,38 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
/**
|
||||
* Get the log and display the data as table.
|
||||
*/
|
||||
var log = {};
|
||||
|
||||
var core = function (func) {
|
||||
return browser.runtime.getBackgroundPage().then(func);
|
||||
};
|
||||
|
||||
/**
|
||||
* Reset the global log
|
||||
*/
|
||||
function resetGlobalLog(){
|
||||
core(function (ref){
|
||||
obj = {"log": []};
|
||||
ref.setData('log', JSON.stringify(obj));
|
||||
obj = {"log": []};
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: ['log', JSON.stringify(obj)]
|
||||
});
|
||||
|
||||
getLog();
|
||||
location.reload();
|
||||
}
|
||||
@@ -24,8 +42,11 @@ function resetGlobalLog(){
|
||||
*/
|
||||
function getLog()
|
||||
{
|
||||
core(function (ref){
|
||||
log = ref.getData('log');
|
||||
browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ['log']
|
||||
}).then((data) => {
|
||||
log = data.response;
|
||||
|
||||
// Sort the log | issue #70
|
||||
log.log.sort(function(a,b) {
|
||||
@@ -38,11 +59,11 @@ function getLog()
|
||||
{
|
||||
for(var i=0; i<length;i++)
|
||||
{
|
||||
row = "<tr>"
|
||||
+ "<td>"+log.log[i].before+"</td>"
|
||||
+ "<td>"+log.log[i].after+"</td>"
|
||||
+ "<td>"+log.log[i].rule+"</td>"
|
||||
+ "<td>"+toDate(log.log[i].timestamp)+"</td>";
|
||||
row = "<tr>" +
|
||||
"<td>"+log.log[i].before+"</td>" +
|
||||
"<td>"+log.log[i].after+"</td>" +
|
||||
"<td>"+log.log[i].rule+"</td>" +
|
||||
"<td>"+toDate(log.log[i].timestamp)+"</td>";
|
||||
$('#tbody').append(row);
|
||||
}
|
||||
}
|
||||
@@ -108,3 +129,7 @@ function setText()
|
||||
$('#head_3').text(translate('log_html_table_head_3'));
|
||||
$('#head_4').text(translate('log_html_table_head_4'));
|
||||
}
|
||||
|
||||
function handleError(error) {
|
||||
console.log(`Error: ${error}`);
|
||||
}
|
||||
|
||||
42
core_js/message_handler.js
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
/*
|
||||
* This script is responsible for the communication between background and content_scripts.
|
||||
*/
|
||||
|
||||
/**
|
||||
* [handleMessage description]
|
||||
* @param request The message itself. This is a JSON-ifiable object.
|
||||
* @param sender A runtime.MessageSender object representing the sender of the message.
|
||||
* @param sendResponse A function to call, at most once, to send a response to the message. The function takes a single argument, which may be any JSON-ifiable object. This argument is passed back to the message sender.
|
||||
*/
|
||||
function handleMessage(request, sender, sendResponse)
|
||||
{
|
||||
var fn = window[request.function];
|
||||
|
||||
if(typeof fn === "function")
|
||||
{
|
||||
var response = fn.apply(null, request.params);
|
||||
|
||||
return Promise.resolve({response});
|
||||
}
|
||||
}
|
||||
|
||||
browser.runtime.onMessage.addListener(handleMessage);
|
||||
@@ -1,3 +1,22 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
var element = $("#statistics_value");
|
||||
var elGlobalPercentage = $("#statistics_value_global_percentage");
|
||||
var elProgressbar_blocked = $('#progress_blocked');
|
||||
@@ -12,24 +31,63 @@ var hashStatus;
|
||||
var loggingStatus;
|
||||
var statisticsStatus;
|
||||
var currentURL;
|
||||
var reportServer;
|
||||
|
||||
var core = function (func) {
|
||||
return browser.runtime.getBackgroundPage().then(func);
|
||||
};
|
||||
|
||||
function getData()
|
||||
async function getData()
|
||||
{
|
||||
core(function (ref){
|
||||
globalCounter = ref.getData('globalCounter');
|
||||
globalurlcounter = ref.getData('globalurlcounter');
|
||||
globalStatus = ref.getData('globalStatus');
|
||||
badgedStatus = ref.getData('badgedStatus');
|
||||
hashStatus = ref.getData('hashStatus');
|
||||
loggingStatus = ref.getData('loggingStatus');
|
||||
statisticsStatus = ref.getData('statisticsStatus');
|
||||
currentURL = ref.getCurrentURL();
|
||||
reportServer = ref.getData('reportServer');
|
||||
await browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["globalCounter"]
|
||||
}).then((data) => {
|
||||
globalCounter = data.response;
|
||||
});
|
||||
|
||||
await browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["globalurlcounter"]
|
||||
}).then((data) => {
|
||||
globalurlcounter = data.response;
|
||||
});
|
||||
|
||||
await browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["globalStatus"]
|
||||
}).then((data) => {
|
||||
globalStatus = data.response;
|
||||
});
|
||||
|
||||
await browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["badgedStatus"]
|
||||
}).then((data) => {
|
||||
badgedStatus = data.response;
|
||||
});
|
||||
|
||||
await browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["hashStatus"]
|
||||
}).then((data) => {
|
||||
hashStatus = data.response;
|
||||
});
|
||||
|
||||
await browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["loggingStatus"]
|
||||
}).then((data) => {
|
||||
loggingStatus = data.response;
|
||||
});
|
||||
|
||||
await browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["statisticsStatus"]
|
||||
}).then((data) => {
|
||||
statisticsStatus = data.response;
|
||||
});
|
||||
|
||||
await browser.runtime.sendMessage({
|
||||
function: "getCurrentURL",
|
||||
params: []
|
||||
}).then((data) => {
|
||||
currentURL = data.response;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -48,8 +106,8 @@ function init()
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the globalCounter value from the browser storage
|
||||
* @param {(data){} Return value form browser.storage.local.get
|
||||
* Get the globalCounter and globalurlcounter value from the storage
|
||||
* @param {(data){} Return value form storage
|
||||
*/
|
||||
function changeStatistics()
|
||||
{
|
||||
@@ -93,19 +151,29 @@ function changeSwitchButton(id, storageID)
|
||||
changeVisibility(id, storageID);
|
||||
|
||||
element.on('change', function(){
|
||||
core(function (ref){
|
||||
ref.setData(storageID, element.is(':checked'));
|
||||
if(storageID == "globalStatus") ref.changeIcon();
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: [storageID, element.is(':checked')]
|
||||
}).then((data) => {
|
||||
if(storageID == "globalStatus"){
|
||||
browser.runtime.sendMessage({
|
||||
function: "changeIcon",
|
||||
params: []
|
||||
});
|
||||
}
|
||||
changeVisibility(id, storageID);
|
||||
|
||||
ref.saveOnExit();
|
||||
browser.runtime.sendMessage({
|
||||
function: "saveOnExit",
|
||||
params: []
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the visibility of sections.
|
||||
*/
|
||||
* Change the visibility of sections.
|
||||
*/
|
||||
function changeVisibility(id, storageID)
|
||||
{
|
||||
var element;
|
||||
@@ -113,13 +181,13 @@ function changeVisibility(id, storageID)
|
||||
switch(storageID)
|
||||
{
|
||||
case "loggingStatus":
|
||||
element = $('#log_section');
|
||||
break;
|
||||
element = $('#log_section');
|
||||
break;
|
||||
case "statisticsStatus":
|
||||
element = $('#statistic_section');
|
||||
break;
|
||||
element = $('#statistic_section');
|
||||
break;
|
||||
default:
|
||||
element = "undefine";
|
||||
element = "undefine";
|
||||
}
|
||||
|
||||
if(element != "undefine")
|
||||
@@ -137,10 +205,10 @@ function changeVisibility(id, storageID)
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of a switch button.
|
||||
* @param {string} id HTML id
|
||||
* @param {string} varname js internal variable name
|
||||
*/
|
||||
* Set the value of a switch button.
|
||||
* @param {string} id HTML id
|
||||
* @param {string} varname js internal variable name
|
||||
*/
|
||||
function setSwitchButton(id, varname)
|
||||
{
|
||||
var element = $('#'+id);
|
||||
@@ -151,25 +219,29 @@ function setSwitchButton(id, varname)
|
||||
* Reset the global statistic
|
||||
*/
|
||||
function resetGlobalCounter(){
|
||||
core(function (ref){
|
||||
globalurlcounter = 0;
|
||||
globalCounter = 0;
|
||||
ref.setData('globalCounter', 0);
|
||||
ref.setData('globalurlcounter', 0);
|
||||
ref.saveOnExit();
|
||||
|
||||
changeStatistics();
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: ['globalCounter', 0]
|
||||
});
|
||||
}
|
||||
|
||||
if(!browser.extension.inIncognitoContext)
|
||||
{
|
||||
getData();
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: ['globalurlcounter', 0]
|
||||
});
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "saveOnExit",
|
||||
params: []
|
||||
});
|
||||
|
||||
globalCounter = 0;
|
||||
globalurlcounter = 0;
|
||||
|
||||
changeStatistics();
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
if(!browser.extension.inIncognitoContext)
|
||||
{
|
||||
getData().then(() => {
|
||||
init();
|
||||
$('#reset_counter_btn').on("click", resetGlobalCounter);
|
||||
changeSwitchButton("globalStatus", "globalStatus");
|
||||
@@ -178,15 +250,9 @@ $(document).ready(function(){
|
||||
changeSwitchButton("statistics", "statisticsStatus");
|
||||
$('#loggingPage').attr('href', browser.extension.getURL('./html/log.html'));
|
||||
$('#settings').attr('href', browser.extension.getURL('./html/settings.html'));
|
||||
$('#reportButton').on("click", reportURL);
|
||||
$('#cleaning_tools').attr('href', browser.extension.getURL('./html/cleaningTool.html'));
|
||||
setText();
|
||||
} else {
|
||||
$('#config_section').remove();
|
||||
$('#statistic_section').remove();
|
||||
$('#status_section').remove();
|
||||
$('#log_section').remove();
|
||||
$('#incognito').css('display', '');
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -207,26 +273,25 @@ 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');
|
||||
injectText('reportButton', 'popup_html_report_button', true);
|
||||
$('#donate').prop('title', translate('donate_button'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to inject the translated text and tooltip.
|
||||
*
|
||||
* @param {string} id ID of the HTML element
|
||||
* @param {string} attribute Name of the attribute used for localization
|
||||
* @param {boolean} tooltip
|
||||
*/
|
||||
* Helper function to inject the translated text and tooltip.
|
||||
*
|
||||
* @param {string} id ID of the HTML element
|
||||
* @param {string} attribute Name of the attribute used for localization
|
||||
* @param {boolean} tooltip
|
||||
*/
|
||||
function injectText(id, attribute, tooltip)
|
||||
{
|
||||
object = $('#'+id);
|
||||
object.text(translate(attribute));
|
||||
|
||||
/*
|
||||
This function will throw an error if no translation
|
||||
is found for the tooltip. This is a planned error.
|
||||
*/
|
||||
This function will throw an error if no translation
|
||||
is found for the tooltip. This is a planned error.
|
||||
*/
|
||||
tooltip = translate(attribute+"_title");
|
||||
|
||||
if(tooltip != "")
|
||||
@@ -245,22 +310,6 @@ function translate(string)
|
||||
return browser.i18n.getMessage(string);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send the url to the DB on clearurls.röb.it to checked for tracking fields.
|
||||
*/
|
||||
function reportURL()
|
||||
{
|
||||
$.ajax({
|
||||
url: reportServer+'/report_url.php?url='+encodeURI(currentURL),
|
||||
success: function(result) {
|
||||
BootstrapDialog.show({
|
||||
message: translate('success_report_url')
|
||||
});
|
||||
},
|
||||
error: function(result) {
|
||||
BootstrapDialog.show({
|
||||
message: translate('error_report_url')
|
||||
});
|
||||
}
|
||||
});
|
||||
function handleError(error) {
|
||||
console.log(`Error: ${error}`);
|
||||
}
|
||||
51
core_js/pureCleaning.js
Normal file
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
|
||||
/**
|
||||
* Cleans given links. Also do automatic redirection.
|
||||
*
|
||||
* @param {[type]} url url as string
|
||||
* @return {Array} redirectUrl or none
|
||||
*/
|
||||
function pureCleaning(url) {
|
||||
var cleanURL = url;
|
||||
|
||||
for (var i = 0; i < providers.length; i++) {
|
||||
var result = {
|
||||
"changes": false,
|
||||
"url": "",
|
||||
"redirect": false,
|
||||
"cancel": false
|
||||
};
|
||||
|
||||
if(providers[i].matchURL(cleanURL))
|
||||
{
|
||||
result = removeFieldsFormURL(providers[i], cleanURL);
|
||||
cleanURL = result.url;
|
||||
}
|
||||
|
||||
if(result.redirect)
|
||||
{
|
||||
return result.url;
|
||||
}
|
||||
}
|
||||
|
||||
return cleanURL;
|
||||
}
|
||||
@@ -1,8 +1,22 @@
|
||||
var settings = [];
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
var core = function (func) {
|
||||
return browser.runtime.getBackgroundPage().then(func);
|
||||
};
|
||||
var settings = [];
|
||||
|
||||
getData();
|
||||
|
||||
@@ -17,44 +31,87 @@ $(document).ready(function(){
|
||||
|
||||
$("#badged_color input").on("change", function () {
|
||||
settings.badged_color = $(this).val();
|
||||
core(function (ref){
|
||||
ref.setData('badged_color', settings.badged_color);
|
||||
ref.setBadgedStatus();
|
||||
ref.saveOnExit();
|
||||
});
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: ["badged_color", settings.badged_color]
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "setBadgedStatus",
|
||||
params: []
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "saveOnExit",
|
||||
params: []
|
||||
}).then(handleResponse, handleError);
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Reset everything.
|
||||
* Set everthing to the default values.
|
||||
*/
|
||||
* Reset everything.
|
||||
* Set everthing to the default values.
|
||||
*/
|
||||
function reset()
|
||||
{
|
||||
core(function (ref){
|
||||
ref.initSettings();
|
||||
ref.saveOnExit();
|
||||
ref.reload();
|
||||
});
|
||||
browser.runtime.sendMessage({
|
||||
function: "initSettings",
|
||||
params: []
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "saveOnExit",
|
||||
params: []
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "reload",
|
||||
params: []
|
||||
}).then(handleResponse, handleError);
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the settings.
|
||||
*/
|
||||
* Saves the settings.
|
||||
*/
|
||||
function save()
|
||||
{
|
||||
core(function (ref){
|
||||
ref.setData('badged_color', $('input[name=badged_color]').val());
|
||||
ref.setBadgedStatus();
|
||||
ref.setData('ruleURL', $('input[name=rule_url]').val());
|
||||
ref.setData('hashURL', $('input[name=hash_url]').val());
|
||||
ref.setData('types', $('input[name=types]').val());
|
||||
ref.setData('reportServer', $('input[name=report_server]').val());
|
||||
ref.saveOnExit();
|
||||
ref.reload();
|
||||
});
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: ["badged_color", $('input[name=badged_color]').val()]
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
location.reload();
|
||||
browser.runtime.sendMessage({
|
||||
function: "setBadgedStatus",
|
||||
params: []
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: ["ruleURL", $('input[name=rule_url]').val()]
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: ["hashURL", $('input[name=hash_url]').val()]
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: ["types", $('input[name=types]').val()]
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "saveOnExit",
|
||||
params: []
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "reload",
|
||||
params: []
|
||||
}).then(handleResponse, handleError);
|
||||
|
||||
//location.reload();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -68,38 +125,146 @@ function translate(string)
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data.
|
||||
*/
|
||||
* Get the data.
|
||||
*/
|
||||
function getData()
|
||||
{
|
||||
core(function (ref){
|
||||
settings.badged_color = ref.getData('badged_color');
|
||||
settings.rule_url = ref.getData('ruleURL');
|
||||
settings.hash_url = ref.getData('hashURL');
|
||||
settings.types = ref.getData('types');
|
||||
settings.reportServer = ref.getData('reportServer');
|
||||
});
|
||||
browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["badged_color"]
|
||||
}).then((data) => handleResponseData(data, "badged_color", "badged_color"), handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["ruleURL"]
|
||||
}).then((data) => handleResponseData(data, "rule_url", "rule_url"), handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["hashURL"]
|
||||
}).then((data) => handleResponseData(data, "hash_url", "hash_url"), handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["types"]
|
||||
}).then((data) => handleResponseData(data, "types", "types"), handleError);
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["contextMenuEnabled"]
|
||||
}).then((data) => {
|
||||
handleResponseData(data, "contextMenuEnabled", "contextMenuEnabled");
|
||||
browser.runtime.sendMessage({
|
||||
function: "getData",
|
||||
params: ["historyListenerEnabled"]
|
||||
}).then((data) => {
|
||||
handleResponseData(data, "historyListenerEnabled", "historyListenerEnabled");
|
||||
changeSwitchButton("contextMenuEnabled", "contextMenuEnabled");
|
||||
changeSwitchButton("historyListenerEnabled", "historyListenerEnabled");
|
||||
}, handleError);
|
||||
}, handleError);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the text for the UI.
|
||||
*/
|
||||
* Set the text for the UI.
|
||||
*/
|
||||
function setText()
|
||||
{
|
||||
document.title = translate('settings_html_page_title');
|
||||
$('#page_title').text(translate('settings_html_page_title'));
|
||||
$('#badged_color_label').text(translate('badged_color_label'));
|
||||
$('input[name=badged_color]').val(settings.badged_color);
|
||||
$('#reset_settings_btn').text(translate('setting_html_reset_button'));
|
||||
$('#reset_settings_btn').prop('title', translate('setting_html_reset_button_title'));
|
||||
$('#rule_url_label').text(translate('setting_rule_url_label'));
|
||||
$('input[name=rule_url]').val(settings.rule_url);
|
||||
$('#hash_url_label').text(translate('setting_hash_url_label'));
|
||||
$('input[name=hash_url]').val(settings.hash_url);
|
||||
$('#types_label').html(translate('setting_types_label'));
|
||||
$('input[name=types]').val(settings.types);
|
||||
$('#save_settings_btn').text(translate('settings_html_save_button'));
|
||||
$('#save_settings_btn').prop('title', translate('settings_html_save_button_title'));
|
||||
$('#report_server_label').html(translate('setting_report_server_label'));
|
||||
$('input[name=report_server]').val(settings.reportServer);
|
||||
injectText("context_menu_enabled", "context_menu_enabled");
|
||||
$('#history_listener_enabled').html(translate('history_listener_enabled'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the response from the storage and saves the data.
|
||||
* @param {JSON-Object} data Data JSON-Object
|
||||
*/
|
||||
function handleResponseData(data, varName, inputID)
|
||||
{
|
||||
settings[varName] = data.response;
|
||||
$('input[name='+inputID+']').val(data.response);
|
||||
}
|
||||
|
||||
function handleResponse(message) {
|
||||
console.log(`Message from the background script: ${message.response}`);
|
||||
}
|
||||
|
||||
function handleError(error) {
|
||||
console.log(`Error: ${error}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the value of a switch button.
|
||||
* @param {string} id HTML id
|
||||
* @param {string} storageID storage internal id
|
||||
*/
|
||||
function changeSwitchButton(id, storageID)
|
||||
{
|
||||
var element = $('#'+id);
|
||||
|
||||
element.on('change', function(){
|
||||
browser.runtime.sendMessage({
|
||||
function: "setData",
|
||||
params: [storageID, element.is(':checked')]
|
||||
}).then((data) => {
|
||||
if(storageID == "globalStatus"){
|
||||
browser.runtime.sendMessage({
|
||||
function: "changeIcon",
|
||||
params: []
|
||||
});
|
||||
}
|
||||
|
||||
browser.runtime.sendMessage({
|
||||
function: "saveOnExit",
|
||||
params: []
|
||||
});
|
||||
});
|
||||
});
|
||||
setSwitchButton(id, storageID);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to inject the translated text and tooltip.
|
||||
*
|
||||
* @param {string} id ID of the HTML element
|
||||
* @param {string} attribute Name of the attribute used for localization
|
||||
* @param {boolean} tooltip
|
||||
*/
|
||||
function injectText(id, attribute, tooltip)
|
||||
{
|
||||
object = $('#'+id);
|
||||
object.text(translate(attribute));
|
||||
|
||||
/*
|
||||
This function will throw an error if no translation
|
||||
is found for the tooltip. This is a planned error.
|
||||
*/
|
||||
tooltip = translate(attribute+"_title");
|
||||
|
||||
if(tooltip != "")
|
||||
{
|
||||
object.prop('title', tooltip);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of a switch button.
|
||||
* @param {string} id HTML id
|
||||
* @param {string} varname js internal variable name
|
||||
*/
|
||||
function setSwitchButton(id, varname)
|
||||
{
|
||||
var element = $('#'+id);
|
||||
element.prop('checked', settings[varname]);
|
||||
}
|
||||
|
||||
230
core_js/storage.js
Normal file
@@ -0,0 +1,230 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
/*
|
||||
* This script is responsible for the storage.
|
||||
*/
|
||||
var storage = [];
|
||||
|
||||
/**
|
||||
* Writes the storage variable to the disk.
|
||||
*/
|
||||
function saveOnExit()
|
||||
{
|
||||
var json = {};
|
||||
|
||||
Object.entries(storage).forEach(([key, value]) => {
|
||||
switch (key) {
|
||||
case "ClearURLsData":
|
||||
case "log":
|
||||
json[key] = JSON.stringify(value);
|
||||
break;
|
||||
case "types":
|
||||
json[key] = value.toString();
|
||||
break;
|
||||
default:
|
||||
json[key] = value;
|
||||
}
|
||||
});
|
||||
console.log(translate('core_save_on_disk'));
|
||||
browser.storage.local.set(json);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the value under the key on the disk.
|
||||
* @param {String} key
|
||||
* @param {Object} value
|
||||
*/
|
||||
function saveOnDisk(key, value)
|
||||
{
|
||||
browser.storage.local.set({key: value});
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve everything and save on the RAM.
|
||||
*/
|
||||
function getDataFromDisk()
|
||||
{
|
||||
browser.storage.local.get(null).then(initStorage, error);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the value under the key.
|
||||
* @param {String} key
|
||||
* @return {Object}
|
||||
*/
|
||||
function getData(key)
|
||||
{
|
||||
return storage[key];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the entire storage object.
|
||||
* @return {Object}
|
||||
*/
|
||||
function getEntireData()
|
||||
{
|
||||
return storage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the value under the key on the RAM.
|
||||
* @param {String} key
|
||||
* @param {Object} value
|
||||
*/
|
||||
function setData(key, value)
|
||||
{
|
||||
switch (key) {
|
||||
case "ClearURLsData":
|
||||
case "log":
|
||||
storage[key] = JSON.parse(value);
|
||||
break;
|
||||
case "hashURL":
|
||||
case "ruleURL":
|
||||
storage[key] = replaceOldURLs(value);
|
||||
break;
|
||||
case "types":
|
||||
storage[key] = value.split(',');
|
||||
break;
|
||||
default:
|
||||
storage[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write error on console.
|
||||
*/
|
||||
function error(e)
|
||||
{
|
||||
console.log(translate('core_error'));
|
||||
console.error(e);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set default values, if the storage is empty.
|
||||
* @param {Object} items
|
||||
*/
|
||||
function initStorage(items)
|
||||
{
|
||||
initSettings();
|
||||
|
||||
if(!isEmpty(items)) {
|
||||
Object.entries(items).forEach(([key, value]) => {
|
||||
setData(key, value);
|
||||
});
|
||||
}
|
||||
|
||||
// Start the clearurls.js
|
||||
start();
|
||||
|
||||
// Start the context_menu
|
||||
contextMenuStart();
|
||||
|
||||
// Start history listener
|
||||
historyListenerStart();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set default values for the settings.
|
||||
*/
|
||||
function initSettings()
|
||||
{
|
||||
storage.ClearURLsData = [];
|
||||
storage.dataHash = "";
|
||||
storage.badgedStatus = true;
|
||||
storage.globalStatus = true;
|
||||
storage.globalurlcounter = 0;
|
||||
storage.globalCounter = 0;
|
||||
storage.hashStatus = "error";
|
||||
storage.loggingStatus = false;
|
||||
storage.log = {"log": []};
|
||||
storage.statisticsStatus = true;
|
||||
storage.badged_color = "ffa500";
|
||||
storage.hashURL = "https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/rules.min.hash?job=hash%20rules";
|
||||
storage.ruleURL = "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.min.json";
|
||||
storage.contextMenuEnabled = true;
|
||||
storage.historyListenerEnabled = true;
|
||||
|
||||
if(getBrowser() === "Firefox") {
|
||||
storage.types = ["font", "image", "imageset", "main_frame", "media", "object", "object_subrequest", "other", "script", "stylesheet", "sub_frame", "websocket", "xbl", "xml_dtd", "xmlhttprequest", "xslt"];
|
||||
} else if (getBrowser() === "Chrome") {
|
||||
storage.types = ["main_frame", "sub_frame", "stylesheet", "script", "image", "font", "object", "xmlhttprequest", "ping", "csp_report", "media", "websocket", "other"];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace the old URLs with the
|
||||
* new GitLab URLs.
|
||||
*/
|
||||
function replaceOldURLs(url)
|
||||
{
|
||||
switch (url) {
|
||||
case "https://raw.githubusercontent.com/KevinRoebert/ClearUrls/master/data/rules.hash?flush_cache=true":
|
||||
return "https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/rules.min.hash?job=hash%20rules";
|
||||
case "https://raw.githubusercontent.com/KevinRoebert/ClearUrls/master/data/data.json?flush_cache=true":
|
||||
return "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.min.json";
|
||||
case "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/rules.hash":
|
||||
return "https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/rules.min.hash?job=hash%20rules";
|
||||
case "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.json":
|
||||
return "https://gitlab.com/KevinRoebert/ClearUrls/raw/master/data/data.min.json";
|
||||
default:
|
||||
return url;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load local saved data, if the browser is offline or
|
||||
* some other network trouble.
|
||||
*/
|
||||
function loadOldDataFromStore()
|
||||
{
|
||||
localDataHash = storage.dataHash;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the hash status to the local storage.
|
||||
* The status can have the following values:
|
||||
* 1 "up to date"
|
||||
* 2 "updated"
|
||||
* 3 "update available"
|
||||
* @param status_code the number for the status
|
||||
*/
|
||||
function storeHashStatus(status_code)
|
||||
{
|
||||
switch(status_code)
|
||||
{
|
||||
case 1: status_code = "hash_status_code_1";
|
||||
break;
|
||||
case 2: status_code = "hash_status_code_2";
|
||||
break;
|
||||
case 3: status_code = "hash_status_code_3";
|
||||
break;
|
||||
default: status_code = "hash_status_code_4";
|
||||
}
|
||||
|
||||
storage.hashStatus = status_code;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save every minute the temporary data to the disk.
|
||||
*/
|
||||
setInterval(saveOnExit, 60000);
|
||||
|
||||
// Start storage
|
||||
getDataFromDisk();
|
||||
269
core_js/tools.js
Normal file
@@ -0,0 +1,269 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
/*
|
||||
* This script is responsible for some tools.
|
||||
*/
|
||||
|
||||
/*
|
||||
* To support Waterfox.
|
||||
*/
|
||||
Array.prototype.rmEmpty = function() {
|
||||
return this.filter(v => v);
|
||||
};
|
||||
|
||||
/*
|
||||
* To support Waterfox.
|
||||
*/
|
||||
Array.prototype.flatten = function() {
|
||||
return this.reduce((a, b) => a.concat(b), []);
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if an object is empty.
|
||||
* @param {Object} obj
|
||||
* @return {Boolean}
|
||||
*/
|
||||
function isEmpty(obj)
|
||||
{
|
||||
return (Object.getOwnPropertyNames(obj).length === 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate a string with the i18n API.
|
||||
*
|
||||
* @param {string} string Name of the attribute used for localization
|
||||
*/
|
||||
function translate(string)
|
||||
{
|
||||
return browser.i18n.getMessage(string);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reloads the extension.
|
||||
*/
|
||||
function reload()
|
||||
{
|
||||
browser.runtime.reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if it is an android device.
|
||||
* @return bool
|
||||
*/
|
||||
function checkOSAndroid()
|
||||
{
|
||||
if(os === undefined || os === null || os === "") {
|
||||
chrome.runtime.getPlatformInfo(function(info) {
|
||||
os = info.os;
|
||||
});
|
||||
}
|
||||
|
||||
if(os == "android")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the number of parameters query strings.
|
||||
* @param {String} url URL as String
|
||||
* @return {int} Number of Parameters
|
||||
*/
|
||||
function countFields(url)
|
||||
{
|
||||
return extractFileds(url).length;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if fields exists.
|
||||
* @param {String} url URL as String
|
||||
* @return {boolean}
|
||||
*/
|
||||
function existsFields(url)
|
||||
{
|
||||
var matches = (url.match(/\?.+/i) || []);
|
||||
var count = matches.length;
|
||||
|
||||
return (count > 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract the fields from an url.
|
||||
* @param {String} url URL as String
|
||||
* @return {Array} Fields as array
|
||||
*/
|
||||
function extractFileds(url)
|
||||
{
|
||||
if(existsFields(url)) {
|
||||
var fields = url.replace(new RegExp(".*?\\?", "i"), "");
|
||||
if(existsFragments(url)) {
|
||||
fields = fields.replace(new RegExp("#.*", "i"), "");
|
||||
}
|
||||
|
||||
return (fields.match(/[^\/|\?|&]+=?[^&]*/gi) || []);
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the number of fragments query strings.
|
||||
* @param {String} url URL as String
|
||||
* @return {int} Number of fragments
|
||||
*/
|
||||
function countFragments(url)
|
||||
{
|
||||
return extractFragments(url).length;
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract the fragments from an url.
|
||||
* @param {String} url URL as String
|
||||
* @return {Array} fragments as array
|
||||
*/
|
||||
function extractFragments(url)
|
||||
{
|
||||
if(existsFragments(url)) {
|
||||
var fragments = url.replace(new RegExp(".*?#", "i"), "");
|
||||
return (fragments.match(/[^&]+=?[^&]*/gi) || []);
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if fragments exists.
|
||||
* @param {String} url URL as String
|
||||
* @return {boolean}
|
||||
*/
|
||||
function existsFragments(url)
|
||||
{
|
||||
var matches = (url.match(/\#.+/i) || []);
|
||||
var count = matches.length;
|
||||
|
||||
return (count > 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load local saved data, if the browser is offline or
|
||||
* some other network trouble.
|
||||
*/
|
||||
function loadOldDataFromStore()
|
||||
{
|
||||
localDataHash = storage.dataHash;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the hash status to the local storage.
|
||||
* The status can have the following values:
|
||||
* 1 "up to date"
|
||||
* 2 "updated"
|
||||
* 3 "update available"
|
||||
* @param status_code the number for the status
|
||||
*/
|
||||
function storeHashStatus(status_code)
|
||||
{
|
||||
switch(status_code)
|
||||
{
|
||||
case 1: status_code = "hash_status_code_1";
|
||||
break;
|
||||
case 2: status_code = "hash_status_code_2";
|
||||
break;
|
||||
case 3: status_code = "hash_status_code_3";
|
||||
break;
|
||||
default: status_code = "hash_status_code_4";
|
||||
}
|
||||
|
||||
storage.hashStatus = status_code;
|
||||
}
|
||||
|
||||
/**
|
||||
* Increase by {number} the GlobalURLCounter
|
||||
* @param {int} number
|
||||
*/
|
||||
function increaseGlobalURLCounter(number)
|
||||
{
|
||||
if(storage.statisticsStatus)
|
||||
{
|
||||
storage.globalurlcounter += number;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Increase by one the URLCounter
|
||||
*/
|
||||
function increaseURLCounter()
|
||||
{
|
||||
if(storage.statisticsStatus)
|
||||
{
|
||||
storage.globalCounter++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the icon.
|
||||
*/
|
||||
function changeIcon()
|
||||
{
|
||||
if(!checkOSAndroid()) {
|
||||
if(storage.globalStatus){
|
||||
browser.browserAction.setIcon({path: "img/clearurls_128x128.png"});
|
||||
} else{
|
||||
browser.browserAction.setIcon({path: "img/clearurls_gray_128x128.png"});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the badged status from the browser storage and put the value
|
||||
* into a local variable.
|
||||
*
|
||||
*/
|
||||
function setBadgedStatus()
|
||||
{
|
||||
if(!checkOSAndroid() && storage.badgedStatus){
|
||||
browser.browserAction.setBadgeBackgroundColor({
|
||||
'color': '#'+storage.badged_color
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current URL.
|
||||
* @return {String} [description]
|
||||
*/
|
||||
function getCurrentURL()
|
||||
{
|
||||
return currentURL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for browser.
|
||||
*/
|
||||
function getBrowser() {
|
||||
if(typeof InstallTrigger !== 'undefined') {
|
||||
return "Firefox";
|
||||
} else {
|
||||
return "Chrome";
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,21 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* This file writes only the version into every page.
|
||||
* @return version
|
||||
|
||||
22
css/core.css
@@ -1,3 +1,21 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
body {
|
||||
font-size: 13px;
|
||||
}
|
||||
@@ -15,6 +33,10 @@ body {
|
||||
margin-top: -10px;
|
||||
}
|
||||
|
||||
#body-popup {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
#donate {
|
||||
transition: 0.3s;
|
||||
opacity: 0.8;
|
||||
|
||||
372
css/semantic.min.css
vendored
Normal file
@@ -1,3 +1,21 @@
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Stylesheet for the switch buttons.
|
||||
*/
|
||||
|
||||
103
data/data.json
@@ -20,7 +20,8 @@
|
||||
"[^a-zA-Z%0-9]adId=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"qualifier=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"_encoding=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"smid=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
"smid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"field-lbr_brands_browse-bin=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [
|
||||
".*(amazon\\.).*(\\/gp).*\\/redirector.html\\/.*"
|
||||
@@ -63,7 +64,12 @@
|
||||
"sa=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"dpr=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"hl=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"btn[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
"btn[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"sa=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"usg=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"cd=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"cad=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"uact=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [
|
||||
".*(mail\\.google\\.).*(\\/mail\\/u\\/0).*",
|
||||
@@ -76,10 +82,13 @@
|
||||
".*(google\\.).*\\/complete\\/search\\?.*gs_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(google\\.).*\\/s\\?tbm=map.*gs_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(news\\.google\\.).*\\?hl=.*",
|
||||
".*(google\\.).*\\/setprefs\\?.*hl=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
".*(google\\.).*\\/setprefs\\?.*hl=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(google\\.).*\\/appsactivity\\/.*",
|
||||
".*(google\\.).*\\/recaptcha\\/.*"
|
||||
],
|
||||
"redirections": [
|
||||
".*google\\..*\\/.*url\\?.*url=([^&]*)"
|
||||
".*google\\..*\\/.*url\\?.*url=((https|http)[^&]*)",
|
||||
".*google\\..*\\/.*url\\?.*q=((https|http)[^&]*)"
|
||||
]
|
||||
},
|
||||
"googlesyndication": {
|
||||
@@ -115,6 +124,7 @@
|
||||
"fb_action_types=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"fb_source=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"fb_ref=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"fbclid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"action_object_map=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"action_type_map=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"action_ref_map=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
@@ -132,7 +142,8 @@
|
||||
".*([\\.]?prismic\\.io).*",
|
||||
".*([\\.]?gitlab\\.com).*",
|
||||
".*([\\.]?gcsip\\.com).*[\\?|&]ref[\\_]?=[^\\/|\\?|&]*.*",
|
||||
".*([\\.]?cloudflare\\.com).*"
|
||||
".*([\\.]?cloudflare\\.com).*",
|
||||
".*([\\.]?tv2\\.no)(\\/api)\\/.*"
|
||||
],
|
||||
"redirections": []
|
||||
},
|
||||
@@ -186,13 +197,18 @@
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(facebook)(\\.[a-zA-Z]{2,})(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"hc_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"[a-zA-Z]*ref[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
"hc_[a-zA-Z_\\[\\]0-9]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"[a-zA-Z]*ref[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"__tn__=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"eid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"__xts__%5B[0-9]%5D=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [
|
||||
".*(facebook\\.)\\w{2,}.*(\\/plugins\\/).*"
|
||||
],
|
||||
"redirections": []
|
||||
"redirections": [
|
||||
".*l\\.facebook\\..*\\/.*l\\.php\\?.*u=((https%3A%2F%2F|http%3A%2F%2F)[^&]*)"
|
||||
]
|
||||
},
|
||||
"twitter": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(twitter)(\\.[a-zA-Z]{2,})(.*\\?.*)",
|
||||
@@ -230,7 +246,9 @@
|
||||
"rules": [
|
||||
"ncid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"sr=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"sr_share=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
"sr_share=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"guccounter=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"guce_referrer_[a-z]+=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
@@ -312,7 +330,8 @@
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"_trkparms=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"_trksid=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
"_trksid=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"_from=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
@@ -373,6 +392,70 @@
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"youku.com": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youku\\.com)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"spm=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
"tpa=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"nytimes.com": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(nytimes\\.com)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"smid=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"tchibo.de": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(tchibo\\.de)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"wbdcd=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"steam": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(steampowered\\.com)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"snr=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
},
|
||||
"disq.us": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(disq\\.us)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*disq\\.us.*\\/.*url\\?.*url=((https%3A%2F%2F|http%3A%2F%2F).*)%3A"
|
||||
]
|
||||
},
|
||||
"mozaws.net": {
|
||||
"urlPattern": "https?://outgoing\\.prod\\.mozaws\\.net/.*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
"https?://[^/]+/v1/[0-9a-f]{64}/(.*)"
|
||||
]
|
||||
},
|
||||
"shutterstock.com": {
|
||||
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(shutterstock\\.com)(.*\\?.*)",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"src=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
|
||||
],
|
||||
"exceptions": [],
|
||||
"redirections": []
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
751
data/data.min.json
Normal file
@@ -0,0 +1,751 @@
|
||||
{
|
||||
"providers": {
|
||||
"amazon": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(amazon)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"pf_rd_[a-zA-Z]",
|
||||
"qid",
|
||||
"sr",
|
||||
"srs",
|
||||
"pd_rd_[a-zA-Z]*",
|
||||
"__mk_[a-zA-Z]{1,3}_[a-zA-Z]{1,3}",
|
||||
"spIA",
|
||||
"ms3_c",
|
||||
"[a-zA-Z%0-9]*ie",
|
||||
"refRID",
|
||||
"colid",
|
||||
"coliid",
|
||||
"[^a-zA-Z%0-9]adId",
|
||||
"qualifier",
|
||||
"_encoding",
|
||||
"smid",
|
||||
"field-lbr_brands_browse-bin",
|
||||
"ref_?"
|
||||
],
|
||||
"exceptions": [
|
||||
".*(amazon\\.).*(\\/gp).*\\/redirector.html\\/.*"
|
||||
],
|
||||
"rawRules": [
|
||||
"\\/ref=[^\\/|\\?]*"
|
||||
],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"fls-na.amazon": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(fls-na\\.amazon)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"google": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(google)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ved",
|
||||
"bi[a-zA-Z]*",
|
||||
"gfe_[a-zA-Z]*",
|
||||
"ei",
|
||||
"source",
|
||||
"gs_[a-zA-Z]*",
|
||||
"site",
|
||||
"oq",
|
||||
"esrc",
|
||||
"uact",
|
||||
"cd",
|
||||
"cad",
|
||||
"gws_[a-zA-Z]*",
|
||||
"atyp",
|
||||
"vet",
|
||||
"zx",
|
||||
"_u",
|
||||
"je",
|
||||
"dcr",
|
||||
"ie",
|
||||
"sei",
|
||||
"sa",
|
||||
"dpr",
|
||||
"btn[a-zA-Z]*",
|
||||
"sa",
|
||||
"usg",
|
||||
"cd",
|
||||
"cad",
|
||||
"uact"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [
|
||||
".*(mail\\.google\\.).*(\\/mail\\/u\\/0).*",
|
||||
".*(google\\.).*(\\/upload)?(\\/drive)\\/.*",
|
||||
".*(docs\\.google\\.).*\\/.*",
|
||||
".*(accounts\\.google\\.).*",
|
||||
".*(google\\.).*\\/searchbyimage\\?image_url=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(hangouts\\.google\\.).*\\/webchat.*zx=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(client-channel\\.google\\.).*\\/client-channel.*zx=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(google\\.).*\\/complete\\/search\\?.*gs_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(google\\.).*\\/s\\?tbm=map.*gs_[a-zA-Z]*=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(news\\.google\\.).*\\?hl=.*",
|
||||
".*(google\\.).*\\/setprefs\\?.*hl=[^\\/|\\?|&]*(\\/|&(amp;)?)?",
|
||||
".*(google\\.).*\\/appsactivity\\/.*"
|
||||
],
|
||||
"redirections": [
|
||||
".*google\\..*\\/.*url\\?.*url=((https|http)[^&]*)",
|
||||
".*google\\..*\\/.*url\\?.*q=((https|http)[^&]*)",
|
||||
".*google\\..*\\/.*adurl=([^&]*)"
|
||||
],
|
||||
"forceRedirection": true
|
||||
},
|
||||
"googlesyndication": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(googlesyndication)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"doubleclick": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(doubleclick)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*doubleclick\\..*\\/.*tag_for_child_directed_treatment=;%3F(.*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"googleadservices": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(googleadservices)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*googleadservices\\..*\\/.*adurl=([^&]*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"globalRules": {
|
||||
"urlPattern": ".*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"(%3F)?utm_[a-zA-Z]*",
|
||||
"(%3F)?ga_source",
|
||||
"(%3F)?ga_medium",
|
||||
"(%3F)?ga_term",
|
||||
"(%3F)?ga_content",
|
||||
"(%3F)?ga_campaign",
|
||||
"(%3F)?ga_place",
|
||||
"(%3F)?yclid",
|
||||
"(%3F)?_openstat",
|
||||
"(%3F)?fb_action_ids",
|
||||
"(%3F)?fb_action_types",
|
||||
"(%3F)?fb_source",
|
||||
"(%3F)?fb_ref",
|
||||
"(%3F)?fbclid",
|
||||
"(%3F)?action_object_map",
|
||||
"(%3F)?action_type_map",
|
||||
"(%3F)?action_ref_map",
|
||||
"(%3F)?gs_l",
|
||||
"(%3F)?mkt_tok",
|
||||
"(%3F)?hmb_campaign",
|
||||
"(%3F)?hmb_medium",
|
||||
"(%3F)?hmb_source",
|
||||
"(%3F)?[\\?|&]ref[\\_]?",
|
||||
"(%3F)?gclid"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [
|
||||
".*([\\.]?matrix\\.org)(\\/_matrix)\\/.*",
|
||||
".*([\\.]?prismic\\.io).*",
|
||||
".*([\\.]?gitlab\\.com).*",
|
||||
".*([\\.]?gcsip\\.com).*[\\?|&]ref[\\_]?=[^\\/|\\?|&]*.*",
|
||||
".*([\\.]?cloudflare\\.com).*",
|
||||
".*(myaccount.google\\.[a-zA-Z]{2,}).*",
|
||||
".*([\\.]?tangerine\\.ca).*"
|
||||
],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"adtech": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(adtech)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"contentpass.net": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(contentpass\\.net).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"bf-ad": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(bf-ad)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"amazon-adsystem": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(amazon-adsystem)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"adsensecustomsearchads": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(adsensecustomsearchads)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"youtube": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youtube)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"feature",
|
||||
"gclid",
|
||||
"kw"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*youtube\\..*\\/redirect?.*q=([^&]*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"youtube_pagead": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youtube)(\\.[a-zA-Z]{2,})\\/pagead",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"youtube_apiads": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youtube)(\\.[a-zA-Z]{2,})\\/api\\/stats\\/ads",
|
||||
"completeProvider": true,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"facebook": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(facebook)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"hc_[a-zA-Z_%\\[\\]0-9]*",
|
||||
"[a-zA-Z]*ref[a-zA-Z]*",
|
||||
"__tn__",
|
||||
"eid",
|
||||
"__xts__%5B[0-9]%5D",
|
||||
"__xts__\\[[0-9]\\]",
|
||||
"comment_tracking",
|
||||
"dti",
|
||||
"app",
|
||||
"video_source",
|
||||
"ftentidentifier",
|
||||
"pageid",
|
||||
"padding",
|
||||
"ls_ref",
|
||||
"action_history"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [
|
||||
".*(facebook\\.)\\w{2,}.*(\\/plugins\\/).*",
|
||||
".*(facebook\\.)\\w{2,}.*(\\/dialog\\/share).*"
|
||||
],
|
||||
"redirections": [
|
||||
".*l[a-zA-Z]?\\.facebook\\..*\\/.*l\\.php\\?.*u=((https%3A%2F%2F|http%3A%2F%2F)[^&]*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"twitter": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(twitter)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"(ref_?)?src",
|
||||
"s",
|
||||
"cn"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"reddit": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(reddit)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*out\\.reddit\\.\\w{2,}\\/.*url=([^&]*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
}
|
||||
,
|
||||
"netflix": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(netflix)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"trackId",
|
||||
"tctx",
|
||||
"jb[a-zA-Z]*"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"techcrunch": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?([\\.]?techcrunch\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ncid",
|
||||
"sr",
|
||||
"sr_share"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"bing": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(bing)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"cvid",
|
||||
"form",
|
||||
"sk",
|
||||
"sp",
|
||||
"sc",
|
||||
"qs",
|
||||
"qp"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"tweakers": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(tweakers\\.net).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"nb",
|
||||
"u"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"twitch": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(twitch)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"tt_medium",
|
||||
"tt_content"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"vivaldi": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(vivaldi\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"pk_campaign",
|
||||
"pk_kwd"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"indeed": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(indeed\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"from",
|
||||
"alid",
|
||||
"[a-zA-Z]*tk"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"hhdotru": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(hh\\.ru).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"vss",
|
||||
"t",
|
||||
"swnt",
|
||||
"grpos",
|
||||
"ptl",
|
||||
"stl",
|
||||
"exp",
|
||||
"plim"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"ebay": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(ebay)(\\.[a-zA-Z]{2,}).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"_trkparms",
|
||||
"_trksid",
|
||||
"_from"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"cnet": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(cnet\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ftag"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"imdb.com": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(imdb\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ref_",
|
||||
"pf_rd_[a-zA-Z]*"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"govdelivery.com": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(govdelivery\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*links\\.govdelivery\\.com.*\\/track\\?.*(http:\\/\\/.*)",
|
||||
".*links\\.govdelivery\\.com.*\\/track\\?.*(https:\\/\\/.*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"walmart.com": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(walmart\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"u1",
|
||||
"ath[a-zA-Z]*"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"net-parade.it": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(net\\-parade\\.it).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"pl"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"prvnizpravy.cz": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(prvnizpravy\\.cz).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"xid"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"youku.com": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youku\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"spm",
|
||||
"tpa"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"nytimes.com": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(nytimes\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"smid"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"tchibo.de": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(tchibo\\.de).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"wbdcd"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"steampowered": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(steampowered\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"snr"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"steamcommunity": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(steamcommunity\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*steamcommunity\\.com.*\\/linkfilter\\/\\?url=(.*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"disq.us": {
|
||||
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(disq\\.us).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*disq\\.us.*\\/.*url\\?.*url=((https%3A%2F%2F|http%3A%2F%2F).*)%3A"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"mozaws.net": {
|
||||
"urlPattern": "https?:\\/\\/outgoing\\.prod\\.mozaws\\.net/.*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
"https?:\\/\\/[^/]+/v1/[0-9a-f]{64}/(.*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"shutterstock.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(shutterstock\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"src"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"mozilla.org": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(mozilla\\.org).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"src",
|
||||
"platform"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"readdc.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(readdc\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ref"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"dailycodingproblem.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(dailycodingproblem\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"email"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"github.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(github\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"email_token",
|
||||
"email_source"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"deviantart.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(deviantart\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*deviantart\\.com.*outgoing\\?(.*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"site2.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(site2\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*site2\\.com.*\\?.*=(.*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"site.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(site\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*site\\.com.*\\?to=([^&]*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"site3.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(site3\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*site3\\.com.*\\?r=([^&]*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"aliexpress.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(aliexpress\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ws_ab_test",
|
||||
"btsid",
|
||||
"algo_expid",
|
||||
"algo_pvid",
|
||||
"spm",
|
||||
"gps-id",
|
||||
"scm[_a-zA-Z\\-]*",
|
||||
"pvid"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"mozillazine.org": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(mozillazine\\.org).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"sid"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"9gag.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(9gag\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ref"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"linksynergy.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(linksynergy\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*linksynergy\\.com.*\\/.*murl=([^&]*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"giphy.com": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(giphy\\.com).*",
|
||||
"completeProvider": false,
|
||||
"rules": [
|
||||
"ref"
|
||||
],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [],
|
||||
"forceRedirection": false
|
||||
},
|
||||
"gate.sc": {
|
||||
"urlPattern": "https?:\\/\\/([a-zA-Z0-9-]*\\.)?(gate\\.sc).*",
|
||||
"completeProvider": false,
|
||||
"rules": [],
|
||||
"rawRules": [],
|
||||
"exceptions": [],
|
||||
"redirections": [
|
||||
".*gate\\.sc.*\\/.*url=([^&]*)"
|
||||
],
|
||||
"forceRedirection": false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1 +1 @@
|
||||
90817dd44464af4bf7313e987e455e052501fe4e3c8b088934e65e75964f58a5
|
||||
b0e1fc948f5e391a53a57092b1c29e8cff474402d5411f4045cfb4a7db37d2bc
|
||||
|
||||
16
external_js/clipboard-helper.js
Normal file
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Source: https://github.com/mdn/webextensions-examples/tree/master/context-menu-copy-link-with-types
|
||||
*/
|
||||
function copyToClipboard(text) {
|
||||
function oncopy(event) {
|
||||
document.removeEventListener("copy", oncopy, true);
|
||||
|
||||
event.stopImmediatePropagation();
|
||||
|
||||
event.preventDefault();
|
||||
event.clipboardData.setData("text/plain", text);
|
||||
}
|
||||
document.addEventListener("copy", oncopy, true);
|
||||
|
||||
document.execCommand("copy");
|
||||
}
|
||||
11
external_js/semantic.min.js
vendored
Normal file
87
html/cleaningTool.html
Normal file
@@ -0,0 +1,87 @@
|
||||
<!--
|
||||
ClearURLs
|
||||
Copyright (c) 2017-2019 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
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-->
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Cleaning tool from ClearURLs</title>
|
||||
<!-- Required meta tags -->
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<link rel="icon" sizes="any" type="image/svg+xml" href="/img/clearurls.svg">
|
||||
|
||||
<!-- Bootstrap CSS -->
|
||||
<link rel="stylesheet" href="../css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../css/dataTables.bootstrap.min.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/core.css">
|
||||
<style>
|
||||
td {
|
||||
word-wrap: break-word;
|
||||
max-width: 200px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-inverse">
|
||||
<div class="container">
|
||||
<div class="navbar-header">
|
||||
<span class="navbar-brand">
|
||||
<span class="pull-left"><img src="../img/clearurls.svg"
|
||||
width="30" height="30" alt=""></span>
|
||||
<span style="color: #FF7800;" class="pull-right" id="page_title"></span><br />
|
||||
<span class="label label-warning pull-left small-version"
|
||||
id="version"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4 col-md-offset-4 text-center">
|
||||
<h4 id="cleaning_tool_description"></h4>
|
||||
|
||||
<br />
|
||||
|
||||
<div class="form-group">
|
||||
<label for="dirtyURLs" id="cleaning_tool_dirty_urls_label"></label>
|
||||
<textarea id="dirtyURLs" name="dirtyURLs" class="form-control" rows="8" cols="60"></textarea>
|
||||
</div>
|
||||
<br />
|
||||
<p class="text-center">
|
||||
<button type="button" id="cleaning_tool_btn"
|
||||
class="btn btn-success" title="Clean the URLs"></button>
|
||||
</p>
|
||||
<br />
|
||||
<div class="form-group">
|
||||
<label for="cleanURLs" id="cleaning_tool_clean_urls_label"></label>
|
||||
<textarea id="cleanURLs" name="cleanURLs" class="form-control" rows="8" cols="60" readonly></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Optional JavaScript -->
|
||||
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
|
||||
<script src="../browser-polyfill.js"></script>
|
||||
<script src="../external_js/jquery-3.2.1.min.js"></script>
|
||||
<script src="../external_js/bootstrap.min.js"></script>
|
||||
<script src="../core_js/cleaning_tool.js"></script>
|
||||
<script src="../core_js/write_version.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,3 +1,22 @@
|
||||
<!--
|
||||
ClearURLs
|
||||
Copyright (c) 2017-2019 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
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-->
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
|
||||
@@ -1,3 +1,22 @@
|
||||
<!--
|
||||
ClearURLs
|
||||
Copyright (c) 2017-2019 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
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-->
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
@@ -36,20 +55,13 @@
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="row" id="incognito" style="display:none;">
|
||||
<div class="col-sm-1">
|
||||
<b class="text-justify word-wrap" style="color: #FF7800;">
|
||||
The graphical elements of ClearURLs do not work in Incognito mode.<br />
|
||||
ClearURLs still cleans all URLs.<br />
|
||||
If you want to change settings, you must do so in a non-private tab.<br />
|
||||
These changes will then be taken over here.
|
||||
</b>
|
||||
</div>
|
||||
</div>
|
||||
<div id="dialog"></div>
|
||||
<div class="row" id="config_section">
|
||||
<div class="col-sm-1 text-center">
|
||||
<a id="cleaning_tools" target="_blank"><span class="glyphicon glyphicon-wrench" style="font-size: 1.5em; margin-right: 1em;"></span></a>
|
||||
<a id="settings" target="_blank"><span class="glyphicon glyphicon-cog" style="font-size: 1.5em"></span></a>
|
||||
</div>
|
||||
<div class="col-sm-1">
|
||||
<a id="settings" target="_blank"><span class="pull-right glyphicon glyphicon-cog"></span></a>
|
||||
<h5><b id="configs_head"></b></h5>
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="globalStatus">
|
||||
@@ -125,7 +137,7 @@
|
||||
<div class="col-sm-1">
|
||||
<h5><b id="rules_status_head"></b></h5>
|
||||
<div class="text-center">
|
||||
<a href="https://gitlab.com/KevinRoebert/ClearUrls/commits/master/data/data.json"
|
||||
<a href="https://gitlab.com/KevinRoebert/ClearUrls/commits/master/data/data.min.json"
|
||||
id="hashStatus" class="btn btn-primary btn-xs" target="_blank"></a>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
@@ -142,24 +154,15 @@
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<div class="row" id="report_section">
|
||||
<div class="col-sm-1">
|
||||
<div class="text-center">
|
||||
<a type="button" id="reportButton" target="_blank"
|
||||
class="btn btn-warning btn-sm btn-block"></a>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Optional JavaScript -->
|
||||
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
|
||||
<script type="application/javascript" src="../browser-polyfill.js"></script>
|
||||
<script src="../external_js/jquery-3.2.1.min.js"></script>
|
||||
<script src="../external_js/bootstrap.min.js"></script>
|
||||
<script src="../external_js/bootstrap-dialog.min.js"></script>
|
||||
<script src="../core_js/popup_new.js"></script>
|
||||
<script src="../core_js/write_version.js"></script>
|
||||
<!-- Optional JavaScript -->
|
||||
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
|
||||
<script type="application/javascript" src="../browser-polyfill.js"></script>
|
||||
<script src="../external_js/jquery-3.2.1.min.js"></script>
|
||||
<script src="../external_js/bootstrap.min.js"></script>
|
||||
<script src="../external_js/bootstrap-dialog.min.js"></script>
|
||||
<script src="../core_js/popup.js"></script>
|
||||
<script src="../core_js/write_version.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
166
html/popup_new.html
Normal file
@@ -0,0 +1,166 @@
|
||||
<!--
|
||||
ClearURLs
|
||||
Copyright (c) 2017-2019 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
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-->
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>ClearURLs</title>
|
||||
<!-- Required meta tags -->
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
|
||||
<!-- Bootstrap CSS -->
|
||||
<link rel="stylesheet" href="../css/semantic.min.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/switchButtons.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/core.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="body-popup">
|
||||
<div class="container-fluid"
|
||||
style="background: url('../img/img-noise-361x370.png');background-size: auto;">
|
||||
<div class="row">
|
||||
<nav class="col-sm-1 navbar navbar-inverse">
|
||||
<div class="container">
|
||||
<div class="navbar-header">
|
||||
<span class="navbar-brand">
|
||||
<span class="pull-left"><img src="../img/clearurls.svg"
|
||||
width="30" height="30" alt=""></span>
|
||||
<span style="color: #FF7800;" class="pull-right">
|
||||
ClearURLs
|
||||
</span><br />
|
||||
<span class="label label-warning pull-left small-version"
|
||||
id="version"></span>
|
||||
<a id="donate" target="_blank" href="https://www.paypal.me/KevinRoebert">
|
||||
<span class="pull-right glyphicon glyphicon-heart"></span>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
<div id="dialog"></div>
|
||||
<div class="row" id="config_section">
|
||||
<div class="col-sm-1 text-center">
|
||||
<a id="cleaning_tools" target="_blank"><span class="glyphicon glyphicon-wrench" style="font-size: 1.5em; margin-right: 1em;"></span></a>
|
||||
<a id="settings" target="_blank"><span class="glyphicon glyphicon-cog" style="font-size: 1.5em"></span></a>
|
||||
</div>
|
||||
<div class="col-sm-1">
|
||||
<h5><b id="configs_head"></b></h5>
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="globalStatus">
|
||||
<span class="slider round"></span>
|
||||
<label id="configs_switch_filter"></label>
|
||||
</label>
|
||||
<br>
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="logging">
|
||||
<span class="slider round"></span>
|
||||
<label id="configs_switch_log"></label>
|
||||
</label>
|
||||
<br>
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="tabcounter">
|
||||
<span class="slider round"></span>
|
||||
<label id="configs_switch_badges"></label>
|
||||
</label>
|
||||
<br>
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="statistics">
|
||||
<span class="slider round"></span>
|
||||
<label id="configs_switch_statistics"></label>
|
||||
</label>
|
||||
<div class="clearfix"></div>
|
||||
<br />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" id="statistic_section">
|
||||
<div class="col-sm-1">
|
||||
<h5><b id="statistics_head"></b></h5>
|
||||
|
||||
<div class="progress">
|
||||
<div class="progress-bar progress-bar-danger progress-bar-striped"
|
||||
role="progressbar" style="width: 0%" id="progress_blocked"></div>
|
||||
<div class="progress-bar progress-bar-info progress-bar-striped"
|
||||
role="progressbar" style="width: 100%" id="progress_non_blocked"></div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<span class="pull-left" id="statistics_elements"></span>
|
||||
<span class="pull-right text-info"
|
||||
id="statistics_total_elements"></span>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<span class="pull-left" id="statistics_blocked"></span>
|
||||
<span class="pull-right text-danger"
|
||||
id="statistics_value"></span>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<span class="pull-left" id="statistics_percentage"></span>
|
||||
<span class="pull-right text-success"
|
||||
id="statistics_value_global_percentage"></span>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
<br />
|
||||
<div class="text-center">
|
||||
<button type="button" id="reset_counter_btn"
|
||||
class="btn btn-danger btn-xs">
|
||||
</button>
|
||||
<div class="clearfix"></div>
|
||||
<br />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" id="status_section">
|
||||
<div class="col-sm-1">
|
||||
<h5><b id="rules_status_head"></b></h5>
|
||||
<div class="text-center">
|
||||
<a href="https://gitlab.com/KevinRoebert/ClearUrls/commits/master/data/data.min.json"
|
||||
id="hashStatus" class="btn btn-primary btn-xs" target="_blank"></a>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
<br />
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<div class="row" id="log_section">
|
||||
<div class="col-sm-1">
|
||||
<div class="text-center">
|
||||
<a type="button" id="loggingPage" target="_blank"
|
||||
class="btn btn-default btn-sm btn-block"></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
</div>
|
||||
|
||||
<!-- Optional JavaScript -->
|
||||
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
|
||||
<script type="application/javascript" src="../browser-polyfill.js"></script>
|
||||
<script src="../external_js/jquery-3.2.1.min.js"></script>
|
||||
<script src="../external_js/semantic.min.js"></script>
|
||||
<script src="../core_js/popup.js"></script>
|
||||
<script src="../core_js/write_version.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,3 +1,22 @@
|
||||
<!--
|
||||
ClearURLs
|
||||
Copyright (c) 2017-2019 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
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-->
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
@@ -10,13 +29,14 @@
|
||||
|
||||
<!-- Bootstrap CSS -->
|
||||
<link rel="stylesheet" href="../css/bootstrap.min.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/switchButtons.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/core.css">
|
||||
<link rel="stylesheet" href="../css/pick-a-color-1.2.3.min.css">
|
||||
<style>
|
||||
td {
|
||||
word-wrap: break-word;
|
||||
max-width: 200px;
|
||||
}
|
||||
td {
|
||||
word-wrap: break-word;
|
||||
max-width: 200px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -27,60 +47,71 @@
|
||||
<span class="navbar-brand">
|
||||
<span class="pull-left"><img src="../img/clearurls.svg"
|
||||
width="30" height="30" alt=""></span>
|
||||
<span style="color: #FF7800;" class="pull-right" id="page_title"></span><br />
|
||||
<span class="label label-warning pull-left small-version"
|
||||
id="version"></span>
|
||||
</span>
|
||||
<span style="color: #FF7800;" class="pull-right" id="page_title"></span><br />
|
||||
<span class="label label-warning pull-left small-version"
|
||||
id="version"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4 col-md-offset-4">
|
||||
<p class="text-center">
|
||||
<button type="button" id="reset_settings_btn"
|
||||
class="btn btn-danger" title="Reset everything settings"></button>
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<label id="badged_color_label"></label><br />
|
||||
<input type="text" id="badged_color" value="" name="badged_color" class="pick-a-color form-control">
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<label id="rule_url_label"></label><br />
|
||||
<input type="url" id="rule_url" value="" name="rule_url" class="form-control" />
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<label id="hash_url_label"></label><br />
|
||||
<input type="url" id="hash_url" value="" name="hash_url" class="form-control" />
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<label id="types_label"></label><br />
|
||||
<input type="text" id="types" value="" name="types" class="form-control" />
|
||||
|
||||
<br />
|
||||
|
||||
<label id="context_menu_enabled" style="font-weight: bold;"></label><br />
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="contextMenuEnabled">
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<label id="history_listener_enabled" style="font-weight: bold;"></label><br />
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="historyListenerEnabled">
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
</p>
|
||||
<br />
|
||||
<p class="text-center">
|
||||
<button type="button" id="save_settings_btn"
|
||||
class="btn btn-success" title="Save the settings"></button>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4 col-md-offset-4">
|
||||
<p class="text-center">
|
||||
<button type="button" id="reset_settings_btn"
|
||||
class="btn btn-danger" title="Reset everything settings"></button>
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<label id="badged_color_label"></label><br />
|
||||
<input type="text" id="badged_color" value="" name="badged_color" class="pick-a-color form-control">
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<label id="rule_url_label"></label><br />
|
||||
<input type="url" id="rule_url" value="" name="rule_url" class="form-control" />
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<label id="hash_url_label"></label><br />
|
||||
<input type="url" id="hash_url" value="" name="hash_url" class="form-control" />
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<label id="types_label"></label><br />
|
||||
<input type="text" id="types" value="" name="types" class="form-control" />
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<label id="report_server_label"></label><br />
|
||||
<input type="text" id="report_server" value="" name="report_server" class="form-control" />
|
||||
</p>
|
||||
<br />
|
||||
<p class="text-center">
|
||||
<button type="button" id="save_settings_btn"
|
||||
class="btn btn-success" title="Save the settings"></button>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Optional JavaScript -->
|
||||
<script src="../browser-polyfill.js"></script>
|
||||
<script src="../external_js/jquery-3.2.1.min.js"></script>
|
||||
<script src="../external_js/bootstrap.min.js"></script>
|
||||
<script src="../external_js/tinycolor-0.9.15.min.js"></script>
|
||||
<script src="../external_js/pick-a-color-1.2.3.min.js"></script>
|
||||
<script src="../core_js/settings.js"></script>
|
||||
<script src="../core_js/write_version.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
<!-- Optional JavaScript -->
|
||||
<script src="../browser-polyfill.js"></script>
|
||||
<script src="../external_js/jquery-3.2.1.min.js"></script>
|
||||
<script src="../external_js/bootstrap.min.js"></script>
|
||||
<script src="../external_js/tinycolor-0.9.15.min.js"></script>
|
||||
<script src="../external_js/pick-a-color-1.2.3.min.js"></script>
|
||||
<script src="../core_js/settings.js"></script>
|
||||
<script src="../core_js/write_version.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,3 +1,22 @@
|
||||
<!--
|
||||
ClearURLs
|
||||
Copyright (c) 2017-2019 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
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-->
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
|
||||
135
html/test.html
Normal file
@@ -0,0 +1,135 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<!-- Standard Meta -->
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
|
||||
|
||||
<!-- Site Properties -->
|
||||
<title>ClearURLs</title>
|
||||
|
||||
<link rel="stylesheet" href="../css/semantic.min.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/switchButtons.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/core.css">
|
||||
|
||||
<style type="text/css">
|
||||
body {
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
.main.container {
|
||||
margin-top: 7em;
|
||||
}
|
||||
.wireframe {
|
||||
margin-top: 2em;
|
||||
}
|
||||
.ui.footer.segment {
|
||||
margin: 5em 0em 0em;
|
||||
padding: 5em 0em;
|
||||
}
|
||||
</style>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="ui fixed inverted menu">
|
||||
<div class="ui container">
|
||||
<div class="header item">
|
||||
<div class="ui small image">
|
||||
<img src="../img/clearurls.svg" alt="" width="30" height="30">
|
||||
</div>
|
||||
<div class="content">
|
||||
<div style="color: #FF7800;" class="header">
|
||||
ClearURLs
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="item">Home</a>
|
||||
<div class="ui simple dropdown item">
|
||||
Dropdown <i class="dropdown icon"></i>
|
||||
<div class="menu">
|
||||
<a class="item" href="#">Link Item</a>
|
||||
<a class="item" href="#">Link Item</a>
|
||||
<div class="divider"></div>
|
||||
<div class="header">Header Item</div>
|
||||
<div class="item">
|
||||
<i class="dropdown icon"></i>
|
||||
Sub Menu
|
||||
<div class="menu">
|
||||
<a class="item" href="#">Link Item</a>
|
||||
<a class="item" href="#">Link Item</a>
|
||||
</div>
|
||||
</div>
|
||||
<a class="item" href="#">Link Item</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ui main text container">
|
||||
<h1 class="ui header">Semantic UI Fixed Template</h1>
|
||||
<p>This is a basic fixed menu template using fixed size containers.</p>
|
||||
<p>A text container is used for the main container, which is useful for single column layouts</p>
|
||||
<img class="wireframe" src="assets/images/wireframe/media-paragraph.png">
|
||||
<img class="wireframe" src="assets/images/wireframe/paragraph.png">
|
||||
<img class="wireframe" src="assets/images/wireframe/paragraph.png">
|
||||
<img class="wireframe" src="assets/images/wireframe/paragraph.png">
|
||||
<img class="wireframe" src="assets/images/wireframe/paragraph.png">
|
||||
<img class="wireframe" src="assets/images/wireframe/paragraph.png">
|
||||
<img class="wireframe" src="assets/images/wireframe/paragraph.png">
|
||||
</div>
|
||||
|
||||
<div class="ui inverted vertical footer segment">
|
||||
<div class="ui center aligned container">
|
||||
<div class="ui stackable inverted divided grid">
|
||||
<div class="three wide column">
|
||||
<h4 class="ui inverted header">Group 1</h4>
|
||||
<div class="ui inverted link list">
|
||||
<a href="#" class="item">Link One</a>
|
||||
<a href="#" class="item">Link Two</a>
|
||||
<a href="#" class="item">Link Three</a>
|
||||
<a href="#" class="item">Link Four</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="three wide column">
|
||||
<h4 class="ui inverted header">Group 2</h4>
|
||||
<div class="ui inverted link list">
|
||||
<a href="#" class="item">Link One</a>
|
||||
<a href="#" class="item">Link Two</a>
|
||||
<a href="#" class="item">Link Three</a>
|
||||
<a href="#" class="item">Link Four</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="three wide column">
|
||||
<h4 class="ui inverted header">Group 3</h4>
|
||||
<div class="ui inverted link list">
|
||||
<a href="#" class="item">Link One</a>
|
||||
<a href="#" class="item">Link Two</a>
|
||||
<a href="#" class="item">Link Three</a>
|
||||
<a href="#" class="item">Link Four</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="seven wide column">
|
||||
<h4 class="ui inverted header">Footer Header</h4>
|
||||
<p>Extra space for a call to action inside the footer that could help re-engage users.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui inverted section divider"></div>
|
||||
<img src="assets/images/logo.png" class="ui centered mini image">
|
||||
<div class="ui horizontal inverted small divided link list">
|
||||
<a class="item" href="#">Site Map</a>
|
||||
<a class="item" href="#">Contact Us</a>
|
||||
<a class="item" href="#">Terms and Conditions</a>
|
||||
<a class="item" href="#">Privacy Policy</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Optional JavaScript -->
|
||||
<script type="application/javascript" src="../browser-polyfill.js"></script>
|
||||
<script src="../external_js/jquery-3.2.1.min.js"></script>
|
||||
<script src="../external_js/semantic.min.js"></script>
|
||||
<script src="../core_js/popup.js"></script>
|
||||
<script src="../core_js/write_version.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
BIN
img/clearurls_128x128.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
img/clearurls_16x16.png
Normal file
|
After Width: | Height: | Size: 542 B |
BIN
img/clearurls_19x19.png
Normal file
|
After Width: | Height: | Size: 646 B |
BIN
img/clearurls_20x20.png
Normal file
|
After Width: | Height: | Size: 663 B |
BIN
img/clearurls_24x24.png
Normal file
|
After Width: | Height: | Size: 729 B |
BIN
img/clearurls_30x30.png
Normal file
|
After Width: | Height: | Size: 854 B |
BIN
img/clearurls_32x32.png
Normal file
|
After Width: | Height: | Size: 737 B |
BIN
img/clearurls_38x38.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
img/clearurls_48x48.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
img/clearurls_64x64.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
img/clearurls_96x96.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
img/clearurls_gray_128x128.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "ClearURLs",
|
||||
"version": "1.3.4.0",
|
||||
"version": "1.7.1",
|
||||
"author": "Kevin R.",
|
||||
"description": "Remove tracking elements form URLs.",
|
||||
"description": "Remove tracking elements from URLs.",
|
||||
"homepage_url": "https://gitlab.com/KevinRoebert/ClearUrls",
|
||||
"default_locale": "en",
|
||||
"applications": {
|
||||
@@ -12,34 +12,32 @@
|
||||
}
|
||||
},
|
||||
"icons": {
|
||||
"16": "img/clearurls.svg",
|
||||
"19": "img/clearurls.svg",
|
||||
"20": "img/clearurls.svg",
|
||||
"24": "img/clearurls.svg",
|
||||
"30": "img/clearurls.svg",
|
||||
"32": "img/clearurls.svg",
|
||||
"38": "img/clearurls.svg",
|
||||
"48": "img/clearurls.svg",
|
||||
"64": "img/clearurls.svg",
|
||||
"96": "img/clearurls.svg",
|
||||
"128": "img/clearurls.svg"
|
||||
|
||||
"16": "img/clearurls_16x16.png",
|
||||
"19": "img/clearurls_19x19.png",
|
||||
"20": "img/clearurls_20x20.png",
|
||||
"24": "img/clearurls_24x24.png",
|
||||
"30": "img/clearurls_30x30.png",
|
||||
"32": "img/clearurls_32x32.png",
|
||||
"38": "img/clearurls_38x38.png",
|
||||
"48": "img/clearurls_48x48.png",
|
||||
"64": "img/clearurls_64x64.png",
|
||||
"96": "img/clearurls_96x96.png",
|
||||
"128": "img/clearurls_128x128.png"
|
||||
},
|
||||
"browser_action": {
|
||||
"browser_style": true,
|
||||
"default_icon": {
|
||||
"16": "img/clearurls.svg",
|
||||
"19": "img/clearurls.svg",
|
||||
"20": "img/clearurls.svg",
|
||||
"24": "img/clearurls.svg",
|
||||
"30": "img/clearurls.svg",
|
||||
"32": "img/clearurls.svg",
|
||||
"38": "img/clearurls.svg",
|
||||
"48": "img/clearurls.svg",
|
||||
"64": "img/clearurls.svg",
|
||||
"96": "img/clearurls.svg",
|
||||
"128": "img/clearurls.svg"
|
||||
|
||||
"16": "img/clearurls_16x16.png",
|
||||
"19": "img/clearurls_19x19.png",
|
||||
"20": "img/clearurls_20x20.png",
|
||||
"24": "img/clearurls_24x24.png",
|
||||
"30": "img/clearurls_30x30.png",
|
||||
"32": "img/clearurls_32x32.png",
|
||||
"38": "img/clearurls_38x38.png",
|
||||
"48": "img/clearurls_48x48.png",
|
||||
"64": "img/clearurls_64x64.png",
|
||||
"96": "img/clearurls_96x96.png",
|
||||
"128": "img/clearurls_128x128.png"
|
||||
},
|
||||
"default_title": "ClearURLs Add-on",
|
||||
"default_popup": "html/popup.html"
|
||||
@@ -50,6 +48,10 @@
|
||||
"webRequest",
|
||||
"webRequestBlocking",
|
||||
"storage",
|
||||
"unlimitedStorage",
|
||||
"contextMenus",
|
||||
"clipboardWrite",
|
||||
"webNavigation",
|
||||
"tabs"
|
||||
],
|
||||
"background": {
|
||||
@@ -57,7 +59,13 @@
|
||||
"browser-polyfill.js",
|
||||
"external_js/jquery-3.2.1.min.js",
|
||||
"external_js/sha256.jquery.js",
|
||||
"clearurls.js"
|
||||
"core_js/message_handler.js",
|
||||
"core_js/tools.js",
|
||||
"core_js/storage.js",
|
||||
"clearurls.js",
|
||||
"core_js/pureCleaning.js",
|
||||
"core_js/context_menu.js",
|
||||
"core_js/historyListener.js"
|
||||
]
|
||||
},
|
||||
"content_scripts": [
|
||||
|
||||
8982
package-lock.json
generated
Normal file
74
package.json
@@ -1,40 +1,42 @@
|
||||
{
|
||||
"name": "ClearURLs",
|
||||
"description": "ClearURLs is an add-on based on the new WebExtensions technology and is optimized for Firefox. This add-on will remove the tracking fields form all URLs which are visited by the browser and use a rule file, namely data.json. This add-on protects your privacy and block the request from advertising services like doubleclick.net.",
|
||||
"version": "1.2.1.4",
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Kevin R.",
|
||||
"email": "clearurls_1@kevinroebert.de",
|
||||
"web": "https://gitlab.com/KevinRoebert"
|
||||
"name": "clearurls",
|
||||
"description": "Remove tracking elements from URLs.",
|
||||
"version": "1.7.1",
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Kevin R.",
|
||||
"email": "clearurls_1@kevinroebert.de",
|
||||
"web": "https://gitlab.com/KevinRoebert"
|
||||
}
|
||||
],
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "Kevin R.",
|
||||
"email": "clearurls_1@kevinroebert.de",
|
||||
"web": "https://gitlab.com/KevinRoebert"
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"react": "^16.8.6",
|
||||
"react-dom": "^16.8.6",
|
||||
"react-redux": "^7.1.0",
|
||||
"react-scripts": "0.9.x",
|
||||
"semantic-ui-css": "^2.4.1",
|
||||
"webext-redux": "^2.1.2",
|
||||
"semantic-ui-react": "^0.87.3"
|
||||
},
|
||||
{
|
||||
"name": "Arne",
|
||||
"email": "clearurls_1@kevinroebert.de",
|
||||
"web": "https://gitlab.com/astaar"
|
||||
"bugs": {
|
||||
"web": "https://gitlab.com/KevinRoebert/ClearUrls/issues/new"
|
||||
},
|
||||
"license": "LGPL-3.0-only",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://gitlab.com/KevinRoebert/ClearUrls.git"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "react-scripts start",
|
||||
"build": "INLINE_RUNTIME_CHUNK=false react-scripts build",
|
||||
"test": "react-scripts test --env=jsdom",
|
||||
"eject": "react-scripts eject"
|
||||
}
|
||||
],
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "Kevin R.",
|
||||
"email": "clearurls_1@kevinroebert.de",
|
||||
"web": "https://gitlab.com/KevinRoebert"
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"twbs/bootstrap": "3.3.7",
|
||||
"jquery/jquery": "3.2.1",
|
||||
"orsozed/sha256.jquery.plugin": "1.0",
|
||||
"DataTables/DataTables": "1.10.16",
|
||||
"lauren/pick-a-color": "1.2.3"
|
||||
},
|
||||
"bugs": {
|
||||
"web": "https://gitlab.com/KevinRoebert/ClearUrls/issues/new"
|
||||
},
|
||||
"licenses": [
|
||||
{
|
||||
"name": "QaPL v0.2",
|
||||
"url": "https://gitlab.com/KevinRoebert/ClearUrls/blob/master/LICENSE.md"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
BIN
promotion/screens/Popup_1.5.2.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
promotion/screens/Popup_1.5.2_chrome_store.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
promotion/screens/Popup_v_1.3.4.0.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
public/favicon.ico
Normal file
|
After Width: | Height: | Size: 24 KiB |
31
public/index.html
Normal file
@@ -0,0 +1,31 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
|
||||
<!--
|
||||
Notice the use of %PUBLIC_URL% in the tag above.
|
||||
It will be replaced with the URL of the `public` folder during the build.
|
||||
Only files inside the `public` folder can be referenced from the HTML.
|
||||
|
||||
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
|
||||
work correctly both with client-side routing and a non-root public URL.
|
||||
Learn how to configure a non-root public URL by running `npm run build`.
|
||||
-->
|
||||
<title>React App</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
<!--
|
||||
This HTML file is a template.
|
||||
If you open it directly in the browser, you will see an empty page.
|
||||
|
||||
You can add webfonts, meta tags, or analytics to this file.
|
||||
The build step will place the bundled scripts into the <body> tag.
|
||||
|
||||
To begin the development, run `npm start`.
|
||||
To create a production bundle, use `npm run build`.
|
||||
-->
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,4 +1,22 @@
|
||||
<?php
|
||||
/*
|
||||
* ClearURLs
|
||||
* Copyright (c) 2017-2019 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
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
$servername = "...";
|
||||
$username = "...";
|
||||
$password = "...";
|
||||
|
||||
24
src/App.css
Normal file
@@ -0,0 +1,24 @@
|
||||
.App {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.App-logo {
|
||||
animation: App-logo-spin infinite 20s linear;
|
||||
height: 80px;
|
||||
}
|
||||
|
||||
.App-header {
|
||||
background-color: #222;
|
||||
height: 150px;
|
||||
padding: 20px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.App-intro {
|
||||
font-size: large;
|
||||
}
|
||||
|
||||
@keyframes App-logo-spin {
|
||||
from { transform: rotate(0deg); }
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
21
src/App.js
Normal file
@@ -0,0 +1,21 @@
|
||||
import React, { Component } from 'react';
|
||||
import logo from '../img/clearurls.svg';
|
||||
import './App.css';
|
||||
import { Button } from 'semantic-ui-react'
|
||||
|
||||
class App extends Component {
|
||||
render() {
|
||||
return (
|
||||
<div className="App">
|
||||
<div className="App-header">
|
||||
<img src={logo} className="App-logo" alt="logo" />
|
||||
<h2>Welcome to ClearURLs</h2>
|
||||
</div>
|
||||
|
||||
<Button>Click Here</Button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default App;
|
||||
8
src/App.test.js
Normal file
@@ -0,0 +1,8 @@
|
||||
import React from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
import App from './App';
|
||||
|
||||
it('renders without crashing', () => {
|
||||
const div = document.createElement('div');
|
||||
ReactDOM.render(<App />, div);
|
||||
});
|
||||
5
src/index.css
Normal file
@@ -0,0 +1,5 @@
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
12
src/index.js
Normal file
@@ -0,0 +1,12 @@
|
||||
import React from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
import App from './App';
|
||||
import './index.css';
|
||||
import 'semantic-ui-css/semantic.min.css';
|
||||
import {Provider} from 'react-redux';
|
||||
import {Store} from 'webext-redux';
|
||||
|
||||
ReactDOM.render(
|
||||
<App />,
|
||||
document.getElementById('root')
|
||||
);
|
||||
7
src/logo.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3">
|
||||
<g fill="#61DAFB">
|
||||
<path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/>
|
||||
<circle cx="420.9" cy="296.5" r="45.7"/>
|
||||
<path d="M520.5 78.1z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
200
yarn.lock
Normal file
@@ -0,0 +1,200 @@
|
||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@babel/runtime@^7.1.2":
|
||||
version "7.5.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.5.tgz#74fba56d35efbeca444091c7850ccd494fd2f132"
|
||||
dependencies:
|
||||
regenerator-runtime "^0.13.2"
|
||||
|
||||
"@semantic-ui-react/event-stack@^3.1.0":
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@semantic-ui-react/event-stack/-/event-stack-3.1.0.tgz#aadbe4a28b0dd7703c5f451640d0fefe66dd9208"
|
||||
dependencies:
|
||||
exenv "^1.2.2"
|
||||
prop-types "^15.6.2"
|
||||
|
||||
asap@~2.0.3:
|
||||
version "2.0.6"
|
||||
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
|
||||
|
||||
classnames@^2.2.6:
|
||||
version "2.2.6"
|
||||
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
|
||||
|
||||
core-js@^1.0.0:
|
||||
version "1.2.7"
|
||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
|
||||
|
||||
create-react-context@<=0.2.2:
|
||||
version "0.2.2"
|
||||
resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.2.2.tgz#9836542f9aaa22868cd7d4a6f82667df38019dca"
|
||||
dependencies:
|
||||
fbjs "^0.8.0"
|
||||
gud "^1.0.0"
|
||||
|
||||
encoding@^0.1.11:
|
||||
version "0.1.12"
|
||||
resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
|
||||
dependencies:
|
||||
iconv-lite "~0.4.13"
|
||||
|
||||
exenv@^1.2.2:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d"
|
||||
|
||||
fbjs@^0.8.0:
|
||||
version "0.8.17"
|
||||
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
|
||||
dependencies:
|
||||
core-js "^1.0.0"
|
||||
isomorphic-fetch "^2.1.1"
|
||||
loose-envify "^1.0.0"
|
||||
object-assign "^4.1.0"
|
||||
promise "^7.1.1"
|
||||
setimmediate "^1.0.5"
|
||||
ua-parser-js "^0.7.18"
|
||||
|
||||
gud@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0"
|
||||
|
||||
iconv-lite@~0.4.13:
|
||||
version "0.4.24"
|
||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
||||
dependencies:
|
||||
safer-buffer ">= 2.1.2 < 3"
|
||||
|
||||
is-stream@^1.0.1:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
||||
|
||||
isomorphic-fetch@^2.1.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
|
||||
dependencies:
|
||||
node-fetch "^1.0.1"
|
||||
whatwg-fetch ">=0.10.0"
|
||||
|
||||
jquery@x.*:
|
||||
version "3.4.1"
|
||||
resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2"
|
||||
integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==
|
||||
|
||||
"js-tokens@^3.0.0 || ^4.0.0":
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||
|
||||
keyboard-key@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/keyboard-key/-/keyboard-key-1.0.4.tgz#52d8fa07b7e17757072aa22a67fb4ae85e4c46b0"
|
||||
|
||||
lodash@^4.17.11:
|
||||
version "4.17.15"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
|
||||
|
||||
loose-envify@^1.0.0, loose-envify@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
|
||||
dependencies:
|
||||
js-tokens "^3.0.0 || ^4.0.0"
|
||||
|
||||
node-fetch@^1.0.1:
|
||||
version "1.7.3"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
|
||||
dependencies:
|
||||
encoding "^0.1.11"
|
||||
is-stream "^1.0.1"
|
||||
|
||||
object-assign@^4.1.0, object-assign@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||
|
||||
popper.js@^1.14.4:
|
||||
version "1.15.0"
|
||||
resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.15.0.tgz#5560b99bbad7647e9faa475c6b8056621f5a4ff2"
|
||||
|
||||
promise@^7.1.1:
|
||||
version "7.3.1"
|
||||
resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
|
||||
dependencies:
|
||||
asap "~2.0.3"
|
||||
|
||||
prop-types@^15.6.1, prop-types@^15.6.2:
|
||||
version "15.7.2"
|
||||
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
|
||||
dependencies:
|
||||
loose-envify "^1.4.0"
|
||||
object-assign "^4.1.1"
|
||||
react-is "^16.8.1"
|
||||
|
||||
react-is@^16.7.0, react-is@^16.8.1:
|
||||
version "16.8.6"
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16"
|
||||
|
||||
react-popper@^1.3.3:
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.3.tgz#2c6cef7515a991256b4f0536cd4bdcb58a7b6af6"
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.1.2"
|
||||
create-react-context "<=0.2.2"
|
||||
popper.js "^1.14.4"
|
||||
prop-types "^15.6.1"
|
||||
typed-styles "^0.0.7"
|
||||
warning "^4.0.2"
|
||||
|
||||
regenerator-runtime@^0.13.2:
|
||||
version "0.13.3"
|
||||
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5"
|
||||
|
||||
"safer-buffer@>= 2.1.2 < 3":
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||
|
||||
semantic-ui-css@^2.4.1:
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/semantic-ui-css/-/semantic-ui-css-2.4.1.tgz#f5aea39fafb787cbd905ec724272a3f9cba9004a"
|
||||
integrity sha512-Pkp0p9oWOxlH0kODx7qFpIRYpK1T4WJOO4lNnpNPOoWKCrYsfHqYSKgk5fHfQtnWnsAKy7nLJMW02bgDWWFZFg==
|
||||
dependencies:
|
||||
jquery x.*
|
||||
|
||||
semantic-ui-react@^0.87.3:
|
||||
version "0.87.3"
|
||||
resolved "https://registry.yarnpkg.com/semantic-ui-react/-/semantic-ui-react-0.87.3.tgz#59b6e1ca52b202bf6deed4c65e81b170b4a12bf6"
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.1.2"
|
||||
"@semantic-ui-react/event-stack" "^3.1.0"
|
||||
classnames "^2.2.6"
|
||||
keyboard-key "^1.0.4"
|
||||
lodash "^4.17.11"
|
||||
prop-types "^15.6.2"
|
||||
react-is "^16.7.0"
|
||||
react-popper "^1.3.3"
|
||||
shallowequal "^1.1.0"
|
||||
|
||||
setimmediate@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
|
||||
|
||||
shallowequal@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
|
||||
|
||||
typed-styles@^0.0.7:
|
||||
version "0.0.7"
|
||||
resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9"
|
||||
|
||||
ua-parser-js@^0.7.18:
|
||||
version "0.7.20"
|
||||
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.20.tgz#7527178b82f6a62a0f243d1f94fd30e3e3c21098"
|
||||
|
||||
warning@^4.0.2:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
|
||||
dependencies:
|
||||
loose-envify "^1.0.0"
|
||||
|
||||
whatwg-fetch@>=0.10.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
|
||||