Version 1.6.5

This commit is contained in:
Kevin Röbert 2019-06-12 20:17:49 +02:00
parent 4d9e066781
commit f9289d9216
6 changed files with 178 additions and 109 deletions

View File

@ -4,6 +4,22 @@ 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.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

View File

@ -41,12 +41,20 @@ var lastVisited = "";
function removeFieldsFormURL(provider, pureUrl)
{
var url = pureUrl;
var domain = url.replace(new RegExp("\\?.*", "i"), "");
var domain = "";
var fragments = "";
var fields = "";
var rules = provider.getRules();
var changes = false;
var cancel = false;
if(existsFragments(url)) {
domain = url.replace(new RegExp("#.*", "i"), "");
}
if(existsFields(url)) {
domain = url.replace(new RegExp("\\?.*", "i"), "");
}
/*
* Expand the url by provider redirections. So no tracking on
* url redirections form sites to sites.
@ -65,28 +73,33 @@ function removeFieldsFormURL(provider, pureUrl)
}
/**
* Only test for matches, if there are fields that can be cleaned.
* Only test for matches, if there are fields or fragments that can be cleaned.
*/
if(existsFields(url))
if(existsFields(url) || existsFragments(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"), "");
fields = extractFileds(url).rmEmpty().join("&");
fragments = extractFragments(url).rmEmpty().join("&");
rules.forEach(function(rule) {
var beforReplace = fields;
var beforReplaceFragments = fragments;
fields = fields.replace(new RegExp(rule, "gi"), "");
fragments = fragments.replace(new RegExp(rule, "gi"), "");
if(beforReplace !== fields)
if(beforReplace !== fields || beforReplaceFragments !== fragments)
{
//Log the action
if(storage.loggingStatus)
{
pushToLog(domain+beforReplace, domain+"?"+extractFileds(fields).rmEmpty().join("&"), rule);
var tempURL = domain;
var tempBeforeURL = domain;
if(fields !== "") tempURL += "?"+fields;
if(fragments !== "") tempURL += "#"+fragments;
if(beforReplace !== "") tempBeforeURL += "?"+beforReplace;
if(beforReplaceFragments !== "") tempBeforeURL += "#"+beforReplaceFragments;
pushToLog(tempBeforeURL, tempURL, rule);
}
if(badges[tabid] == null) badges[tabid] = 0;
@ -107,21 +120,12 @@ function removeFieldsFormURL(provider, pureUrl)
}
});
var finalFields = extractFileds(fields).rmEmpty();
if(finalFields.length > 0)
{
url = domain+"?"+finalFields.join("&");
}
else{
url = domain;
}
}
else {
if(domain != url)
{
url = domain;
changes = true;
}
var finalURL = domain;
if(fields !== "") finalURL += "?"+fields;
if(fragments !== "") finalURL += "#"+fragments;
url = finalURL;
}
if(provider.isCaneling()){
@ -359,7 +363,7 @@ function start()
* @param {boolean} isActive Is this rule active?
*/
this.addRule = function(rule, isActive = true) {
rule = "([\\/|\\?]|(&|&))("+rule+"=[^\\/|\\?|&]*)";
rule = "([\\/]|(&|&))*("+rule+"=[^\\/|\\?|&]*)";
if(isActive)
{

View File

@ -46,7 +46,6 @@ function cleanURLs() {
}).then((data) => {
cleanedURLs.push(data.response);
if(i >= length-1) {
console.log("End of loop.");
cleanTArea.val(cleanedURLs.join('\n'));
}
}, handleError);

View File

@ -92,16 +92,6 @@ function countFields(url)
return extractFileds(url).length;
}
/**
* Extract the fields from an url.
* @param {String} url URL as String
* @return {Array} Fields as array
*/
function extractFileds(url)
{
return (url.match(/[^\/|\?|&]+=*[^\/|\?|&]+/gi) || []);
}
/**
* Returns true if fields exists.
* @param {String} url URL as String
@ -115,6 +105,63 @@ function existsFields(url)
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.

View File

@ -1,7 +1,7 @@
{
"providers": {
"amazon": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(amazon)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(amazon)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [
"pf_rd_[a-zA-Z]",
@ -36,7 +36,7 @@
"redirections": []
},
"google": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(google)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(google)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [
"ved",
@ -117,36 +117,38 @@
"urlPattern": ".*",
"completeProvider": false,
"rules": [
"utm_[a-zA-Z]*",
"ga_source",
"ga_medium",
"ga_term",
"ga_content",
"ga_campaign",
"ga_place",
"yclid",
"_openstat",
"fb_action_ids",
"fb_action_types",
"fb_source",
"fb_ref",
"fbclid",
"action_object_map",
"action_type_map",
"action_ref_map",
"gs_l",
"mkt_tok",
"hmb_campaign",
"hmb_medium",
"hmb_source",
"[\\?|&]ref[\\_]?"
"(%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[\\_]?"
],
"exceptions": [
".*([\\.]?matrix\\.org)(\\/_matrix)\\/.*",
".*([\\.]?prismic\\.io).*",
".*([\\.]?gitlab\\.com).*",
".*([\\.]?gcsip\\.com).*[\\?|&]ref[\\_]?=[^\\/|\\?|&]*.*",
".*([\\.]?cloudflare\\.com).*"
".*([\\.]?cloudflare\\.com).*",
".*(myaccount.google\\.[a-zA-Z]{2,}).*",
".*([\\.]?tangerine\\.ca).*"
],
"redirections": []
},
@ -186,7 +188,7 @@
"redirections": []
},
"youtube": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youtube)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youtube)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [
"feature",
@ -199,7 +201,7 @@
]
},
"facebook": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(facebook)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(facebook)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [
"hc_[a-zA-Z_%\\[\\]0-9]*",
@ -227,16 +229,17 @@
]
},
"twitter": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(twitter)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(twitter)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [
"(ref_)?src"
"(ref_)?src",
"s"
],
"exceptions": [],
"redirections": []
},
"reddit": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(reddit)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(reddit)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [],
"exceptions": [],
@ -246,7 +249,7 @@
}
,
"netflix": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(netflix)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(netflix)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [
"trackId",
@ -257,7 +260,7 @@
"redirections": []
},
"techcrunch": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?([\\.]?techcrunch\\.com)(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?([\\.]?techcrunch\\.com).*",
"completeProvider": false,
"rules": [
"ncid",
@ -268,7 +271,7 @@
"redirections": []
},
"bing": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(bing)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(bing)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [
"cvid",
@ -283,7 +286,7 @@
"redirections": []
},
"tweakers": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(tweakers\\.net)(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(tweakers\\.net).*",
"completeProvider": false,
"rules": [
"nb",
@ -293,7 +296,7 @@
"redirections": []
},
"twitch": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(twitch)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(twitch)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [
"tt_medium",
@ -303,7 +306,7 @@
"redirections": []
},
"vivaldi": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(vivaldi\\.com)(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(vivaldi\\.com).*",
"completeProvider": false,
"rules": [
"pk_campaign",
@ -313,7 +316,7 @@
"redirections": []
},
"indeed": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(indeed\\.com)(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(indeed\\.com).*",
"completeProvider": false,
"rules": [
"from",
@ -324,7 +327,7 @@
"redirections": []
},
"hhdotru": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(hh\\.ru)(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(hh\\.ru).*",
"completeProvider": false,
"rules": [
"vss",
@ -340,7 +343,7 @@
"redirections": []
},
"ebay": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(ebay)(\\.[a-zA-Z]{2,})(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(ebay)(\\.[a-zA-Z]{2,}).*",
"completeProvider": false,
"rules": [
"_trkparms",
@ -351,7 +354,7 @@
"redirections": []
},
"cnet": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(cnet\\.com)(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(cnet\\.com).*",
"completeProvider": false,
"rules": [
"ftag"
@ -360,7 +363,7 @@
"redirections": []
},
"imdb.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(imdb\\.com)(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(imdb\\.com).*",
"completeProvider": false,
"rules": [
"ref_",
@ -370,7 +373,7 @@
"redirections": []
},
"govdelivery.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(govdelivery\\.com)(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(govdelivery\\.com).*",
"completeProvider": false,
"rules": [],
"exceptions": [],
@ -380,7 +383,7 @@
]
},
"walmart.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(walmart\\.com)(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(walmart\\.com).*",
"completeProvider": false,
"rules": [
"u1",
@ -390,7 +393,7 @@
"redirections": []
},
"net-parade.it": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(net\\-parade\\.it)(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(net\\-parade\\.it).*",
"completeProvider": false,
"rules": [
"pl"
@ -399,7 +402,7 @@
"redirections": []
},
"prvnizpravy.cz": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(prvnizpravy\\.cz)(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(prvnizpravy\\.cz).*",
"completeProvider": false,
"rules": [
"xid"
@ -408,7 +411,7 @@
"redirections": []
},
"youku.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youku\\.com)(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(youku\\.com).*",
"completeProvider": false,
"rules": [
"spm",
@ -418,7 +421,7 @@
"redirections": []
},
"nytimes.com": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(nytimes\\.com)(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(nytimes\\.com).*",
"completeProvider": false,
"rules": [
"smid"
@ -427,7 +430,7 @@
"redirections": []
},
"tchibo.de": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(tchibo\\.de)(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(tchibo\\.de).*",
"completeProvider": false,
"rules": [
"wbdcd"
@ -436,7 +439,7 @@
"redirections": []
},
"steampowered": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(steampowered\\.com)(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(steampowered\\.com).*",
"completeProvider": false,
"rules": [
"snr=[^\\/|\\?|&]*(\\/|&(amp;)?)?"
@ -445,7 +448,7 @@
"redirections": []
},
"steamcommunity": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(steamcommunity\\.com)(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(steamcommunity\\.com).*",
"completeProvider": false,
"rules": [],
"exceptions": [],
@ -454,7 +457,7 @@
]
},
"disq.us": {
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(disq\\.us)(.*\\?.*)",
"urlPattern": "(https:\\/\\/|http:\\/\\/)([a-zA-Z0-9-]*\\.)?(disq\\.us).*",
"completeProvider": false,
"rules": [],
"exceptions": [],
@ -472,7 +475,7 @@
]
},
"shutterstock.com": {
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(shutterstock\\.com)(.*\\?.*)",
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(shutterstock\\.com).*",
"completeProvider": false,
"rules": [
"src"
@ -481,7 +484,7 @@
"redirections": []
},
"mozilla.org": {
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(mozilla\\.org)(.*\\?.*)",
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(mozilla\\.org).*",
"completeProvider": false,
"rules": [
"src",
@ -491,7 +494,7 @@
"redirections": []
},
"readdc.com": {
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(readdc\\.com)(.*\\?.*)",
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(readdc\\.com).*",
"completeProvider": false,
"rules": [
"ref"
@ -500,7 +503,7 @@
"redirections": []
},
"dailycodingproblem.com": {
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(dailycodingproblem\\.com)(.*\\?.*)",
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(dailycodingproblem\\.com).*",
"completeProvider": false,
"rules": [
"email"
@ -509,7 +512,7 @@
"redirections": []
},
"github.com": {
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(github\\.com)(.*\\?.*)",
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(github\\.com).*",
"completeProvider": false,
"rules": [
"email_token",
@ -519,7 +522,7 @@
"redirections": []
},
"deviantart.com": {
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(deviantart\\.com)(.*\\?.*)",
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(deviantart\\.com).*",
"completeProvider": false,
"rules": [],
"exceptions": [],
@ -528,7 +531,7 @@
]
},
"site2.com": {
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(site2\\.com)(.*\\?.*)",
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(site2\\.com).*",
"completeProvider": false,
"rules": [],
"exceptions": [],
@ -537,7 +540,7 @@
]
},
"site.com": {
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(site\\.com)(.*\\?.*)",
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(site\\.com).*",
"completeProvider": false,
"rules": [],
"exceptions": [],
@ -546,7 +549,7 @@
]
},
"site3.com": {
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(site3\\.com)(.*\\?.*)",
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(site3\\.com).*",
"completeProvider": false,
"rules": [],
"exceptions": [],
@ -555,7 +558,7 @@
]
},
"aliexpress.com": {
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(aliexpress\\.com)(.*\\?.*)",
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(aliexpress\\.com).*",
"completeProvider": false,
"rules": [
"ws_ab_test",
@ -567,7 +570,7 @@
"redirections": []
},
"mozillazine.org": {
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(mozillazine\\.org)(.*\\?.*)",
"urlPattern": "https?://([a-zA-Z0-9-]*\\.)?(mozillazine\\.org).*",
"completeProvider": false,
"rules": [
"sid"

View File

@ -1,7 +1,7 @@
{
"manifest_version": 2,
"name": "ClearURLs",
"version": "1.6.4",
"version": "1.6.5",
"author": "Kevin R.",
"description": "Remove tracking elements form URLs.",
"homepage_url": "https://gitlab.com/KevinRoebert/ClearUrls",