mirror of
https://gitlab.com/KevinRoebert/ClearUrls
synced 2025-12-18 23:25:36 +07:00
Compare commits
2 Commits
m3-migrati
...
pr-214
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0365f020f9 | ||
|
|
783f1fc99a |
@@ -24,26 +24,26 @@ hash rules:
|
|||||||
- data.minify.json
|
- data.minify.json
|
||||||
- rules.minify.hash
|
- rules.minify.hash
|
||||||
|
|
||||||
bundle addon:
|
bundle addon firefox:
|
||||||
stage: build
|
stage: build
|
||||||
script:
|
script:
|
||||||
- zip ClearURLs -r -FS clearurls.js browser-polyfill.js manifest.json img/* external_js/* html/* core_js/* css/* fonts/* _locales/*
|
- zip ClearURLs-firefox -r -FS clearurls.js browser-polyfill.js manifest.json img/* external_js/* html/* core_js/* css/* fonts/* _locales/*
|
||||||
only:
|
only:
|
||||||
- master
|
- master
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- ClearURLs.zip
|
- ClearURLs-firefox.zip
|
||||||
|
|
||||||
#bundle addon chrome:
|
bundle addon chrome:
|
||||||
#stage: build
|
stage: build
|
||||||
#script:
|
script:
|
||||||
#- jq 'del(.applications)' manifest.json > manifest.json.tmp && mv manifest.json.tmp manifest.json
|
- jq 'del(.applications)' manifest.json > manifest.json.tmp && mv manifest.json.tmp manifest.json
|
||||||
#- zip ClearURLs-chrome -r -FS clearurls.js browser-polyfill.js manifest.json img/* external_js/* html/* core_js/* css/* fonts/* _locales/*
|
- zip ClearURLs-chrome -r -FS clearurls.js browser-polyfill.js manifest.json img/* external_js/* html/* core_js/* css/* fonts/* _locales/*
|
||||||
#only:
|
only:
|
||||||
# - master
|
- master
|
||||||
#artifacts:
|
artifacts:
|
||||||
# paths:
|
paths:
|
||||||
# - ClearURLs-chrome.zip
|
- ClearURLs-chrome.zip
|
||||||
|
|
||||||
pages:
|
pages:
|
||||||
stage: deploy
|
stage: deploy
|
||||||
|
|||||||
38
CHANGELOG.md
38
CHANGELOG.md
@@ -15,48 +15,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- Require Firefox >= 55
|
- Require Firefox >= 55
|
||||||
- Require Chrome >= 37
|
- Require Chrome >= 37
|
||||||
|
|
||||||
## [1.27.0] - 2023-XX-XX
|
## [1.25.0] - 2022-XX-XX
|
||||||
|
|
||||||
### Fixed
|
|
||||||
- [#276](https://github.com/ClearURLs/Addon/issues/276)
|
|
||||||
- [#196](https://github.com/ClearURLs/Addon/issues/196)
|
|
||||||
|
|
||||||
# Removed
|
|
||||||
- ETag filtering for Firefox. Since Firefox 85, ETags can no longer be used for tracking users over multiple sites.
|
|
||||||
|
|
||||||
### Compatibility note
|
|
||||||
- Require Firefox >= 55
|
|
||||||
- Require Chrome >= 37
|
|
||||||
|
|
||||||
## [1.26.0] - 2022-11-18
|
|
||||||
|
|
||||||
### Compatibility note
|
### Compatibility note
|
||||||
- Require Firefox >= 55
|
- Require Firefox >= 55
|
||||||
- Require Chrome >= 37
|
- Require Chrome >= 37
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- The popup window is now responsive
|
- Incoming etags are no longer filtered, but outgoing responses are. This should fix some bugs with filtered etags. See [#124](https://github.com/ClearURLs/Addon/pull/214)
|
||||||
|
|
||||||
## [1.25.0] - 2022-07-27
|
|
||||||
|
|
||||||
### Compatibility note
|
|
||||||
- Require Firefox >= 55
|
|
||||||
- Require Chrome >= 37
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
- ETag filtering now generates random values and does no longer delete the header. As a result, filtering also works under Chrome-based browsers
|
|
||||||
- ETag filtering no longer increases the counter
|
|
||||||
- ETag filtering is now disabled by default
|
|
||||||
- Updated rules URL href
|
|
||||||
- Updated translations. Big update by [IHatePineapples](https://github.com/IHatePineapples)
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
- [524](https://gitlab.com/KevinRoebert/ClearUrls/-/issues/524)
|
|
||||||
- [67](https://github.com/ClearURLs/Addon/issues/67)
|
|
||||||
- [138](https://github.com/ClearURLs/Addon/issues/138)
|
|
||||||
- [1177](https://gitlab.com/KevinRoebert/ClearUrls/-/issues/1177)
|
|
||||||
- [234](https://github.com/ClearURLs/Addon/issues/234)
|
|
||||||
- [191](https://github.com/ClearURLs/Addon/issues/191)
|
|
||||||
|
|
||||||
## [1.24.1] - 2022-03-25
|
## [1.24.1] - 2022-03-25
|
||||||
|
|
||||||
|
|||||||
11
README.md
11
README.md
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
[<img src="https://blog.mozilla.org/addons/files/2020/04/get-the-addon-fx-apr-2020.svg" alt="for Firefox" height="60px">](https://addons.mozilla.org/firefox/addon/clearurls/) [<img src="https://docs.clearurls.xyz/1.22.0/assets/img/MEA-button.png" alt="for Edge" height="60px">](https://microsoftedge.microsoft.com/addons/detail/mdkdmaickkfdekbjdoojfalpbkgaddei) [<img src="https://storage.googleapis.com/chrome-gcs-uploader.appspot.com/image/WlD8wC6g8khYWPJUsQceQkhXSlv1/HRs9MPufa1J1h5glNhut.png" alt="for Chrome" height="60px">](https://chrome.google.com/webstore/detail/clearurls/lckanjgmijmafbedllaakclkaicjfmnk)
|
[<img src="https://blog.mozilla.org/addons/files/2020/04/get-the-addon-fx-apr-2020.svg" alt="for Firefox" height="60px">](https://addons.mozilla.org/firefox/addon/clearurls/) [<img src="https://docs.clearurls.xyz/1.22.0/assets/img/MEA-button.png" alt="for Edge" height="60px">](https://microsoftedge.microsoft.com/addons/detail/mdkdmaickkfdekbjdoojfalpbkgaddei) [<img src="https://storage.googleapis.com/chrome-gcs-uploader.appspot.com/image/WlD8wC6g8khYWPJUsQceQkhXSlv1/HRs9MPufa1J1h5glNhut.png" alt="for Chrome" height="60px">](https://chrome.google.com/webstore/detail/clearurls/lckanjgmijmafbedllaakclkaicjfmnk)
|
||||||
|
|
||||||
# <sub><img src="https://gitlab.com/ClearURLs/ClearUrls/raw/master/img/clearurls.svg" width="64px" height="64px"></sub> ClearURLs [](https://gitter.im/ClearURLs/ClearURLs)
|
# <sub><img src="https://gitlab.com/KevinRoebert/ClearUrls/raw/master/img/clearurls.svg" width="64px" height="64px"></sub> ClearURLs [](https://gitter.im/ClearURLs/ClearURLs)
|
||||||
|
|
||||||
**ClearURLs** is an add-on based on the new WebExtensions technology and is optimized for *Firefox* and *Chrome* based browsers.
|
**ClearURLs** is an add-on based on the new WebExtensions technology and is optimized for *Firefox* and *Chrome* based browsers.
|
||||||
|
|
||||||
@@ -37,7 +37,7 @@ Indeed most of the above URL is tracking code. Once ClearURLs has cleaned the ad
|
|||||||
* Prevents Yandex from rewriting the search results (to include tracking elements)
|
* Prevents Yandex from rewriting the search results (to include tracking elements)
|
||||||
|
|
||||||
## Permissons
|
## Permissons
|
||||||
Reasoning for needed permissions can be found under [here](https://gitlab.com/ClearURLs/ClearUrls/issues/159).
|
Reasoning for needed permissions can be found under [here](https://gitlab.com/KevinRoebert/ClearUrls/issues/159).
|
||||||
|
|
||||||
## Screenshot
|
## Screenshot
|
||||||

|

|
||||||
@@ -45,13 +45,14 @@ Reasoning for needed permissions can be found under [here](https://gitlab.com/Cl
|
|||||||
## CI/CD Artifacts Download (for Firefox- and Chrome-Dev only)
|
## CI/CD Artifacts Download (for Firefox- and Chrome-Dev only)
|
||||||
Here you can download the packed files for the Firefox- and Chrome-Dev:
|
Here you can download the packed files for the Firefox- and Chrome-Dev:
|
||||||
|
|
||||||
- [ClearURLs.zip](https://gitlab.com/ClearURLs/ClearUrls/-/jobs/artifacts/master/raw/ClearURLs.zip?job=bundle%20addon)
|
- [ClearURLs-firefox.zip](https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/ClearURLs-firefox.zip?job=bundle%20addon%20firefox)
|
||||||
|
- [ClearURLs-chrome.zip](https://gitlab.com/KevinRoebert/ClearUrls/-/jobs/artifacts/master/raw/ClearURLs-chrome.zip?job=bundle%20addon%20chrome)
|
||||||
|
|
||||||
## Test
|
## Test
|
||||||
If you want to test whether ClearURLs works correctly on your system, you can go to this test page: [https://test.clearurls.xyz/](https://test.clearurls.xyz/)
|
If you want to test whether ClearURLs works correctly on your system, you can go to this test page: [https://test.clearurls.xyz/](https://test.clearurls.xyz/)
|
||||||
|
|
||||||
## Contribute
|
## Contribute
|
||||||
If you have any suggestions or complaints, please [create an issue.](https://gitlab.com/ClearURLs/ClearUrls/issues/new)
|
If you have any suggestions or complaints, please [create an issue.](https://gitlab.com/KevinRoebert/ClearUrls/issues/new)
|
||||||
|
|
||||||
**Note: If you have any suggestions or complaints regarding the rules, please [create an issue in this repo](https://gitlab.com/anti-tracking/ClearURLs/rules/-/issues/new) or email us rules.support (at) clearurls.xyz (this mail will automatically create a new issue in this repo).**
|
**Note: If you have any suggestions or complaints regarding the rules, please [create an issue in this repo](https://gitlab.com/anti-tracking/ClearURLs/rules/-/issues/new) or email us rules.support (at) clearurls.xyz (this mail will automatically create a new issue in this repo).**
|
||||||
|
|
||||||
@@ -64,7 +65,7 @@ You can choose between two options to contribute. You can create a merge request
|
|||||||
It is not necessary to translate the description field; in the most cases it is empty.*
|
It is not necessary to translate the description field; in the most cases it is empty.*
|
||||||
|
|
||||||
#### Merge request
|
#### Merge request
|
||||||
If you want to create a merge request, you must open the path [`_locales/en/messages.json`](https://gitlab.com/ClearURLs/ClearUrls/-/blob/master/_locales/en/messages.json) in the ClearURLs repo
|
If you want to create a merge request, you must open the path [`_locales/en/messages.json`](https://github.com/KevinRoebert/ClearUrls/blob/master/_locales/en/messages.json) in the ClearURLs repo
|
||||||
and translate the english terms into terms of your language. Once you have translated all the terms, you make a pull request of your translation.
|
and translate the english terms into terms of your language. Once you have translated all the terms, you make a pull request of your translation.
|
||||||
Please push your translation into the folder `_locales/{language code}/messages.json`.
|
Please push your translation into the folder `_locales/{language code}/messages.json`.
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
"description": "Dieser Statuscode besagt, dass beim Aktualisieren der ClearURLs-Regeln ein Fehler aufgetreten ist."
|
"description": "Dieser Statuscode besagt, dass beim Aktualisieren der ClearURLs-Regeln ein Fehler aufgetreten ist."
|
||||||
},
|
},
|
||||||
"log_redirect": {
|
"log_redirect": {
|
||||||
"message": "Diese URL wurde weitergeleitet",
|
"message": "Diese URL wurde weiter geleitet",
|
||||||
"description": "Diese Zeichenfolge wird für Umleitungen im ClearURL-Protokoll verwendet."
|
"description": "Diese Zeichenfolge wird für Umleitungen im ClearURL-Protokoll verwendet."
|
||||||
},
|
},
|
||||||
"log_domain_blocked": {
|
"log_domain_blocked": {
|
||||||
@@ -176,11 +176,11 @@
|
|||||||
"description": "Diese Zeichenfolge wird als Titel für die Schaltfläche zum Speichern und erneuten Laden auf der Einstellungsseite verwendet."
|
"description": "Diese Zeichenfolge wird als Titel für die Schaltfläche zum Speichern und erneuten Laden auf der Einstellungsseite verwendet."
|
||||||
},
|
},
|
||||||
"setting_hash_url_label": {
|
"setting_hash_url_label": {
|
||||||
"message": "Die URL zu der rules.hash-Datei (Hash)",
|
"message": "Die Url zu der rules.hash Datei (Hash)",
|
||||||
"description": "Diese Zeichenfolge wird als Name für die rule.hash-URL verwendet."
|
"description": "Diese Zeichenfolge wird als Name für die rule.hash URL verwendet."
|
||||||
},
|
},
|
||||||
"setting_types_label": {
|
"setting_types_label": {
|
||||||
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Anfragetypen</a> (Expertenniveau)",
|
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Request types</a> (Expertenniveau)",
|
||||||
"description": "Diese Zeichenfolge wird als Name für die Typenbezeichnung verwendet."
|
"description": "Diese Zeichenfolge wird als Name für die Typenbezeichnung verwendet."
|
||||||
},
|
},
|
||||||
"setting_report_server_label": {
|
"setting_report_server_label": {
|
||||||
@@ -312,11 +312,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"domain_blocking_enabled": {
|
"domain_blocking_enabled": {
|
||||||
"message": "Erlaube Domain-Blocking (kann zu Problemen auf Seiten führen, die AdBlocker nicht erlauben)",
|
"message": "Erlaube Domain-Blocking (Kann zu Problemen auf Seiten führen, die AdBlocker nicht erlauben)",
|
||||||
"description": "Diese Zeichenkette wird als Beschreibung für das Domain-Blocking verwendet."
|
"description": "Diese Zeichenkette wird als Beschreibung für das Domain-Blocking verwendet."
|
||||||
},
|
},
|
||||||
"domain_blocking_enabled_title": {
|
"domain_blocking_enabled_title": {
|
||||||
"message": "Erlaube Domain-Blocking (kann zu Problemen auf Seiten führen, die AdBlocker nicht erlauben)",
|
"message": "Erlaube Domain-Blocking (Kann zu Problemen auf Seiten führen, die AdBlocker nicht erlauben)",
|
||||||
"description": "Diese Zeichenkette wird als Titel für das Domain-Blocking verwendet."
|
"description": "Diese Zeichenkette wird als Titel für das Domain-Blocking verwendet."
|
||||||
},
|
},
|
||||||
"log_ping_blocked": {
|
"log_ping_blocked": {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"hash_status_code_1": {
|
"hash_status_code_1": {
|
||||||
"message": "à jour",
|
"message": "à jour",
|
||||||
"description": "Les règles ClearURLs sont à jour."
|
"description": "Les règles ClearURLs sont parfaitement à jour."
|
||||||
},
|
},
|
||||||
"hash_status_code_2": {
|
"hash_status_code_2": {
|
||||||
"message": "mis à jour",
|
"message": "mis à jour",
|
||||||
@@ -9,271 +9,271 @@
|
|||||||
},
|
},
|
||||||
"hash_status_code_3": {
|
"hash_status_code_3": {
|
||||||
"message": "mise à jour disponible",
|
"message": "mise à jour disponible",
|
||||||
"description": "Une mise à jour des règles de ClearURLs est disponible."
|
"description": "Une mis à jour pour les règles de ClearURLs sont disponibles."
|
||||||
},
|
},
|
||||||
"hash_status_code_4": {
|
"hash_status_code_4": {
|
||||||
"message": "erreur",
|
"message": "erreur",
|
||||||
"description": "ClearURLs n’a pas pu démarrer correctement."
|
"description": "ClearURLs n’a pas pu démarrer adéquatement pour son bon fonctionnement."
|
||||||
},
|
},
|
||||||
"hash_status_code_5": {
|
"hash_status_code_5": {
|
||||||
"message": "Oh non! Un problème est survenu!",
|
"message": "Quelque chose a dysfonctionné",
|
||||||
"description": "Un problème est survenu pendant la mis à jour des règles ClearURLs"
|
"description": "Pendant la mis à jour des règles ClearURLs un dysfonctionnement est survenue."
|
||||||
},
|
},
|
||||||
"log_redirect": {
|
"log_redirect": {
|
||||||
"message": "Cette URL a été redirigée",
|
"message": "Cette URL a été redirigée",
|
||||||
"description": "Cette ligne est pour les redirections par le protocole ClearURL."
|
"description": "Cette chaîne est utilisée pour les redirections dans le protocole ClearURL."
|
||||||
},
|
},
|
||||||
"log_domain_blocked": {
|
"log_domain_blocked": {
|
||||||
"message": "Ce domaine est bloqué",
|
"message": "Ce domaine est bloqué",
|
||||||
"description": "Cette ligne est pour les domaines bloqués dans le journal de ClearURLs."
|
"description": "Cette chaîne est utilisée sur les domaines bloqués dans le journal de ClearURLs."
|
||||||
},
|
},
|
||||||
"check_os_log": {
|
"check_os_log": {
|
||||||
"message": "[ClearURLs]: Une base de données pour les URL a été ajoutée",
|
"message": "[ClearURLs]: Une base de données pour les URL a été ajoutée",
|
||||||
"description": "Cette ligne est utilisée au démarrage du journal de ClearURL."
|
"description": "Cette chaîne est utilisée au démarrage du journal de ClearURL."
|
||||||
},
|
},
|
||||||
"log_html_page_title": {
|
"log_html_page_title": {
|
||||||
"message": "Journal d'événements de ClearURLs",
|
"message": "Journaux de ClearURLs",
|
||||||
"description": "Cette ligne est utilisée comme en-tête sur la page de journal."
|
"description": "Cette chaîne est utilisée comme en-tête sur la page de journal."
|
||||||
},
|
},
|
||||||
"log_html_table_head_1": {
|
"log_html_table_head_1": {
|
||||||
"message": "Avant traitement",
|
"message": "Avant traitement",
|
||||||
"description": "Cette ligne est utilisée comme titre de tableau sur la page du journal."
|
"description": "Cette chaîne est utilisée comme titre de tableau sur la page de journal."
|
||||||
},
|
},
|
||||||
"log_html_table_head_2": {
|
"log_html_table_head_2": {
|
||||||
"message": "Après traitement",
|
"message": "Après traitement. ",
|
||||||
"description": "Cette ligne est utilisée comme titre de tableau sur la page du journal."
|
"description": "Cette chaîne est utilisée comme titre de tableau sur la page de journal."
|
||||||
},
|
},
|
||||||
"log_html_table_head_3": {
|
"log_html_table_head_3": {
|
||||||
"message": "Règle",
|
"message": "Règle",
|
||||||
"description": "Cette ligne est utilisée comme titre de tableau sur la page du journal."
|
"description": "Cette chaîne est utilisée comme titre de tableau sur la page de journal."
|
||||||
},
|
},
|
||||||
"log_html_table_head_4": {
|
"log_html_table_head_4": {
|
||||||
"message": "Date",
|
"message": "Temps",
|
||||||
"description": "Cette ligne est utilisée comme titre de tableau sur la page du journal."
|
"description": "Cette chaîne est utilisée comme titre de tableau sur la page de journal."
|
||||||
},
|
},
|
||||||
"log_html_reset_button": {
|
"log_html_reset_button": {
|
||||||
"message": "Remise à zéro",
|
"message": "Remise à zéro",
|
||||||
"description": "Cette ligne est utilisée comme titre de tableau sur la page du journal."
|
"description": "Cette chaîne est utilisée comme titre de tableau sur la page de journal."
|
||||||
},
|
},
|
||||||
"log_html_reset_button_title": {
|
"log_html_reset_button_title": {
|
||||||
"message": "Réinitialiser entièrement le journal",
|
"message": "Réinitialiser les journaux globaux",
|
||||||
"description": "Cette ligne est utilisée comme titre pour le bouton de réinitialisation sur la page de journal."
|
"description": "Cette chaîne est utilisée comme titre pour le bouton de réinitialisation sur la page de journal."
|
||||||
},
|
},
|
||||||
"popup_html_configs_head": {
|
"popup_html_configs_head": {
|
||||||
"message": "Paramétres",
|
"message": "Paramétrages",
|
||||||
"description": "Cette ligne est utilisée comme titre pour les paramétres de la page des options."
|
"description": "Cette chaîne est utilisée comme titre pour les paramétrages sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"popup_html_configs_switch_filter": {
|
"popup_html_configs_switch_filter": {
|
||||||
"message": "Filtre",
|
"message": "Filtre",
|
||||||
"description": "Cette ligne est utilisée comme nom pour le bouton de changement de filtre de la page des options."
|
"description": "Cette chaîne est utilisée comme nom pour le bouton de changement de filtre sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"popup_html_configs_switch_filter_title": {
|
"popup_html_configs_switch_filter_title": {
|
||||||
"message": "L'interrupteur de l'extension active ou désactive la fonction de nettoyage de ClearURLs",
|
"message": "Le commutateur de l'extension active ou désactive la fonction de nettoyage de ClearURLs",
|
||||||
"description": "Cette ligne est utilisée comme titre pour le bouton de changement de filtre sur la page des options."
|
"description": "Cette chaîne est utilisée comme titre pour le bouton de changement de filtre sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"popup_html_configs_switch_log": {
|
"popup_html_configs_switch_log": {
|
||||||
"message": "Journalisation",
|
"message": "Journalisation",
|
||||||
"description": "Cette ligne est utilisée comme nom pour le bouton du interrupteur de journalisation d'evenements sur la page des options."
|
"description": "Cette chaîne est utilisée comme nom pour le bouton du commutateur de journalisation sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"popup_html_configs_switch_log_title": {
|
"popup_html_configs_switch_log_title": {
|
||||||
"message": "Le journal est sauvé localement. Si vous n’avez pas besoin de le consulter, nous vous 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": "Cette ligne est utilisée comme titre pour le bouton du interrupteur de journalisation sur la page des options."
|
"description": "Cette chaîne est utilisée comme titre pour le bouton du commutateur de journalisation sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"popup_html_configs_switch_badges": {
|
"popup_html_configs_switch_badges": {
|
||||||
"message": "Compteur",
|
"message": "Compteur",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"popup_html_configs_switch_badges_title": {
|
"popup_html_configs_switch_badges_title": {
|
||||||
"message": "Afficher le nombre d'URL nettoyées",
|
"message": "Afficher le nombre d'URL nettoyées",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"popup_html_statistics_head": {
|
"popup_html_statistics_head": {
|
||||||
"message": "Statistiques",
|
"message": "Statistiques",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"popup_html_statistics_elements": {
|
"popup_html_statistics_elements": {
|
||||||
"message": "Éléments",
|
"message": "Éléments",
|
||||||
"description": "Sert à afficher la de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"popup_html_statistics_blocked": {
|
"popup_html_statistics_blocked": {
|
||||||
"message": "Nb. de bloqués",
|
"message": "Nb. de bloqués",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"popup_html_statistics_percentage": {
|
"popup_html_statistics_percentage": {
|
||||||
"message": "Pourcentage",
|
"message": "Pourcentage",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"popup_html_statistics_reset_button": {
|
"popup_html_statistics_reset_button": {
|
||||||
"message": "Remettre à zéro",
|
"message": "Remettre à zéro",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"popup_html_statistics_reset_button_title": {
|
"popup_html_statistics_reset_button_title": {
|
||||||
"message": "Remettre à zéro les statistiques globales",
|
"message": "Remettre à zéro les statistiques globales",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"popup_html_rules_status_head": {
|
"popup_html_rules_status_head": {
|
||||||
"message": "Règles de la base de données",
|
"message": "Règles de la base de données",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"popup_html_log_head": {
|
"popup_html_log_head": {
|
||||||
"message": "Journal",
|
"message": "Journaux",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"popup_html_log_head_title": {
|
"popup_html_log_head_title": {
|
||||||
"message": "Consulter le journal",
|
"message": "Ouvrir les journaux",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"popup_html_report_button": {
|
"popup_html_report_button": {
|
||||||
"message": "Signaler cette URL",
|
"message": "Signaler cette URL",
|
||||||
"description": "Annotation : actuellement non utilisé."
|
"description": "Annotation : actuellement non utilisé."
|
||||||
},
|
},
|
||||||
"popup_html_report_button_title": {
|
"popup_html_report_button_title": {
|
||||||
"message": "Signaler un problème sur cette URL",
|
"message": "Signaler un dysfonctionnement sur cette URL",
|
||||||
"description": "actuellement non utilisé."
|
"description": "actuellement non utilisé."
|
||||||
},
|
},
|
||||||
"core_save_on_disk": {
|
"core_save_on_disk": {
|
||||||
"message": "[ClearURLs]: Sauvegarder sur le disque.",
|
"message": "[ClearURLs]: Sauvegarder sur le disque.",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"core_error": {
|
"core_error": {
|
||||||
"message": "[ClearURLs]: L’extension n’a pas pu démarrer.",
|
"message": "[ClearURLs]: L’extension n’a pu être démarrée.",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"configs_switch_statistics": {
|
"configs_switch_statistics": {
|
||||||
"message": "Statistiques",
|
"message": "Statistiques",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"configs_switch_statistics_title": {
|
"configs_switch_statistics_title": {
|
||||||
"message": "Activer ou désactiver les statistiques",
|
"message": "Activer ou désactiver les statistiques",
|
||||||
"description": "Sert à afficher la descriptio de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"settings_html_page_title": {
|
"settings_html_page_title": {
|
||||||
"message": "Paramétrages de ClearURLs",
|
"message": "Paramétrages de ClearURLs",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"badged_color_label": {
|
"badged_color_label": {
|
||||||
"message": "Couleur du compteur",
|
"message": "Couleur du compteur",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"setting_html_reset_button": {
|
"setting_html_reset_button": {
|
||||||
"message": "Remettre à l’état initial",
|
"message": "Remettre à l’état initial",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"setting_html_reset_button_title": {
|
"setting_html_reset_button_title": {
|
||||||
"message": "Réinitialisation de tous les paramètres",
|
"message": "Réinitialisation de tous les paramètres",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"setting_rule_url_label": {
|
"setting_rule_url_label": {
|
||||||
"message": "L'URL du fichier data.json (règles)",
|
"message": "L'URL du fichier data.json (règles)",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"settings_html_save_button": {
|
"settings_html_save_button": {
|
||||||
"message": "Sauvegarder et redémarrer l’extension",
|
"message": "Sauvegarder et redémarrer l’extension",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"settings_html_save_button_title": {
|
"settings_html_save_button_title": {
|
||||||
"message": "Sauvegarde les paramétres",
|
"message": "Sauvegarde les paramétrages",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"setting_hash_url_label": {
|
"setting_hash_url_label": {
|
||||||
"message": "L'URL du fichier rules.hash (signature de contrôle)",
|
"message": "L'URL du fichier rules.hash (signature de contrôle)",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"setting_types_label": {
|
"setting_types_label": {
|
||||||
"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)",
|
"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": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"setting_report_server_label": {
|
"setting_report_server_label": {
|
||||||
"message": "Serveur pour signaler des URL",
|
"message": "Serveur pour signaler des URL",
|
||||||
"description": "Note : actuellement non utilisé."
|
"description": "Annotation : actuellement non utilisé."
|
||||||
},
|
},
|
||||||
"success_report_url": {
|
"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": "Note : actuellement non utilisé."
|
"description": "Annotation : actuellement non utilisé."
|
||||||
},
|
},
|
||||||
"error_report_url": {
|
"error_report_url": {
|
||||||
"message": "Il semble que cette URL a déjà été signalé.",
|
"message": "Il semble que cette URL a déjà été signalée.",
|
||||||
"description": "Note : actuellement non utilisé."
|
"description": "Annotation : actuellement non utilisé."
|
||||||
},
|
},
|
||||||
"donate_button": {
|
"donate_button": {
|
||||||
"message": "Soutenir le créateur de ClearURLs.",
|
"message": "Subventionner le créateur de ClearURLs.",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"clipboard_copy_link": {
|
"clipboard_copy_link": {
|
||||||
"message": "Copier l’URL sans les traqueurs",
|
"message": "Copier l’URL sans le traqueur",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"context_menu_enabled": {
|
"context_menu_enabled": {
|
||||||
"message": "Activer ClearUrls dans le menu contextuel (le clic droit sur une page)",
|
"message": "Activer ClearUrls dans le menu contextuel (le clic droit sur une page)",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"history_listener_enabled": {
|
"history_listener_enabled": {
|
||||||
"message": "Empêcher les sites d’aller fouiner dans l'historique. (<a href='https://developer.mozilla.org/fr/docs/Web/Guide/DOM/Manipuler_historique_du_navigateur' target='_blank'>La méthode utilisée est replaceState()</a>)",
|
"message": "Empêcher les sites d’aller fouiner dans l'historique. (<a href='https://developer.mozilla.org/fr/docs/Web/Guide/DOM/Manipuler_historique_du_navigateur' target='_blank'>La méthode utilisée est replaceState()</a>)",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"cleaning_tool_page_title": {
|
"cleaning_tool_page_title": {
|
||||||
"message": "Outil de nettoyage pour ClearURLs",
|
"message": "Outil de nettoyage pour ClearURLs",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"cleaning_tool_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.",
|
"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": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"cleaning_tool_btn": {
|
"cleaning_tool_btn": {
|
||||||
"message": "Nettoyer les URL",
|
"message": "Nettoyer les URL",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"cleaning_tool_dirty_urls_label": {
|
"cleaning_tool_dirty_urls_label": {
|
||||||
"message": "Coller ici les URL à nettoyer :",
|
"message": "Coller ici les URL à nettoyer :",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"cleaning_tool_clean_urls_label": {
|
"cleaning_tool_clean_urls_label": {
|
||||||
"message": "Vous trouverez ici les URL nettoyées :",
|
"message": "Vous trouverez ici les URL nettoyées :",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"local_hosts_skipping": {
|
"local_hosts_skipping": {
|
||||||
"message": "Ignorer les IP des hôtes locaux, Box, routeurs, serveurs, etc. (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost)",
|
"message": "Ignorer les IP sur les hôtes locaux, Box, routeur, serveur, etc. (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost)",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"local_hosts_skipping_title": {
|
"local_hosts_skipping_title": {
|
||||||
"message": "Ignorer les IP ou URL sur les hôtes locaux, Box, routeur, serveur ...",
|
"message": "Ignorer les IP ou URL sur les hôtes locaux, Box, routeur, serveur ...",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"log_html_export_button": {
|
"log_html_export_button": {
|
||||||
"message": "Exporter",
|
"message": "Exporter",
|
||||||
"description": "Cette ligne est utilisée pour le bouton d'exportation sur la page du journal."
|
"description": "Cette chaîne est utilisée pour le bouton d'exportation sur la page du journal."
|
||||||
},
|
},
|
||||||
"log_html_export_button_title": {
|
"log_html_export_button_title": {
|
||||||
"message": "Exporter le journal",
|
"message": "Exporter le journal",
|
||||||
"description": "Cette ligne est utilisée comme titre pour le bouton d'exportation de la page du journal."
|
"description": "Cette chaîne est utilisée comme titre pour le bouton d'exportation de la page du journal."
|
||||||
},
|
},
|
||||||
"log_html_import_button": {
|
"log_html_import_button": {
|
||||||
"message": "Importer",
|
"message": "Importer",
|
||||||
"description": "Cette ligne est utilisée pour le bouton d'importation sur la page de journal."
|
"description": "Cette chaîne est utilisée pour le bouton d'importation sur la page de journal."
|
||||||
},
|
},
|
||||||
"log_html_import_button_title": {
|
"log_html_import_button_title": {
|
||||||
"message": "Importer le journal",
|
"message": "Importer le journal",
|
||||||
"description": "Cette ligne est utilisée comme titre pour le bouton d'importation sur la page de journal."
|
"description": "Cette chaîne est utilisée comme titre pour le bouton d'importation sur la page de journal."
|
||||||
},
|
},
|
||||||
"setting_html_export_button": {
|
"setting_html_export_button": {
|
||||||
"message": "Exporter",
|
"message": "Exporter",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"setting_html_export_button_title": {
|
"setting_html_export_button_title": {
|
||||||
"message": "Tout exporter",
|
"message": "Tout exporter",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"setting_html_import_button": {
|
"setting_html_import_button": {
|
||||||
"message": "Importer",
|
"message": "Importer",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"setting_html_import_button_title": {
|
"setting_html_import_button_title": {
|
||||||
"message": "Tout importer",
|
"message": "Tout importer",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"setting_log_limit_label": {
|
"setting_log_limit_label": {
|
||||||
"message": "Nombre d’éléments à enregistrer dans le journal, $LIMIT$ de -1 à l’infini",
|
"message": "Nombre d’éléments à enregistrer dans le journal, $LIMIT$ de -1 à l’infini",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options.",
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options.",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"limit": {
|
"limit": {
|
||||||
"content": "$1",
|
"content": "$1",
|
||||||
@@ -283,27 +283,27 @@
|
|||||||
},
|
},
|
||||||
"blocked_html_title": {
|
"blocked_html_title": {
|
||||||
"message": "Site Internet bloqué par <b>ClearURLs</b>",
|
"message": "Site Internet bloqué par <b>ClearURLs</b>",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"blocked_html_body": {
|
"blocked_html_body": {
|
||||||
"message": "Ce site Internet a été bloqué par l’extension <b>ClearURLs</b> ; il est identifié comme étant problématique, soit publicitaire, soit d’espionnage ; vous pouvez désactiver temporairement le blocage du site soit dans les paramétres, soit dans l’extension afin de vous y connecter. Il vous faudra raffraichir la page, soit par le navigateur, soit avec le bouton ci-dessous.",
|
"message": "Ce site Internet a été bloqué par l’extension <b>ClearURLs</b> ; il est identifié comme étant problématique, soit publicitaire, soit d’espionnage ; vous pouvez désactiver temporairement le blocage du site dans les paramétrages, soit l’extension, afin de vous y connecter. Il vous faudra recharger la page, soit par le navigateur, soit avec le bouton ci-dessous.",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"blocked_html_button": {
|
"blocked_html_button": {
|
||||||
"message": "Se connecter",
|
"message": "Se connecter",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"referral_marketing_enabled": {
|
"referral_marketing_enabled": {
|
||||||
"message": "Permettre certaines actions commerciales",
|
"message": "Permettre certaines actions commerciales",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"referral_marketing_enabled_title": {
|
"referral_marketing_enabled_title": {
|
||||||
"message": "Permettre certaines actions commerciales",
|
"message": "Permettre certaines actions commerciales",
|
||||||
"description": "Sert à afficher la description de la fonction sur la switch."
|
"description": "Sert à afficher la signification de la fonction sur la switch"
|
||||||
},
|
},
|
||||||
"watchdog": {
|
"watchdog": {
|
||||||
"message": "[ClearURLs]: Watchdog, très petit programme qui surveille les attaques de la mémoire vive, a détecté $TIMES$ problème(s)",
|
"message": "[ClearURLs]: Watchdog, très petit programme qui surveille les attaques de la mémoire vive, a détecté $TIMES$ problème(s)",
|
||||||
"description": "Utilisé pour la description du Watchdog.",
|
"description": "Utilisé pour un texte explicatif du Watchdog",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"times": {
|
"times": {
|
||||||
"content": "$1",
|
"content": "$1",
|
||||||
@@ -312,67 +312,39 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"domain_blocking_enabled": {
|
"domain_blocking_enabled": {
|
||||||
"message": "Bloquer les atteintes à la vie privée. Cependant, des sites peuvent detecter cette technique et refuser de marcher délibérément voire même afficher des avertissements",
|
"message": "Bloquer les atteintes à la vie privée. Cependant, des sites décèlent la technique de protection et dysfonctionnent délibérément ou affichent des avertissements",
|
||||||
"description": "Sert à afficher la description de la fonction sur la page des options."
|
"description": "Sert à afficher la signification de la fonction sur la page qui affiche les options."
|
||||||
},
|
},
|
||||||
"domain_blocking_enabled_title": {
|
"domain_blocking_enabled_title": {
|
||||||
"message": "Autoriser le blocage par domaine (ex : example.com) ; peut poser des problèmes d'affichage sur des sites refusant les bloqueurs de contenu",
|
"message": "Autoriser le blocage de domaine (ex : example.com) ; peut poser des problèmes d'affichage sur des sites refusant les bloqueurs de contenu",
|
||||||
"description": "Cette ligne est utilisée comme titre pour le bouton de blocage de domaine."
|
"description": "Cette chaîne est utilisée comme titre pour le commutateur de blocage de domaine"
|
||||||
},
|
},
|
||||||
"log_ping_blocked": {
|
"log_ping_blocked": {
|
||||||
"message": "Bloquer l'audit des clics souris sur les liens hypertextes",
|
"message": "Bloquer l’espionnage des clics souris sur les liens hypertextes",
|
||||||
"description": "Cette ligne est utilisée pour de l'audit (espionnage) des liens hypertextes dans le journal ClearURLs."
|
"description": "Cette chaîne est utilisée pour de l'audit (espionnage) des liens hypertextes dans le journal ClearURLs."
|
||||||
},
|
},
|
||||||
"ping_blocking_enabled": {
|
"ping_blocking_enabled": {
|
||||||
"message": "Bloquer l'audit des clics souris sur les liens hypertextes (voyez <a href='https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing' target='_blank'>cet article en anglais</a>)",
|
"message": "Bloquer l’espionnage des clics souris sur les liens hypertextes (voyez <a href='https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing' target='_blank'>cet article en anglais</a>)",
|
||||||
"description": "Utilisé pour le bouton activer/désactiver l'audit (espionnages) des liens hypertextes."
|
"description": "Utilisé pour le bouton activer/désactiver l'audit (espionnages) des liens hypertextes"
|
||||||
},
|
},
|
||||||
"ping_blocking_enabled_title": {
|
"ping_blocking_enabled_title": {
|
||||||
"message": "Bloquer l’espionnage par audit",
|
"message": "Bloquer l’espionnage auditing",
|
||||||
"description": "Utilisé comme titre pour le bouton de l’audit des liens hypertextes."
|
"description": "Utilisé comme titre pour le bouton, commutateur, de l’audit des liens hypertextes"
|
||||||
},
|
},
|
||||||
"extension_description": {
|
"extension_description": {
|
||||||
"message": "Retirer les traqueurs dans les adresses Internet.",
|
"message": "Retirer les espions dans les adresses Internet.",
|
||||||
"description": "Description des fonctions ; utilisez maximum 132 caractères."
|
"description": "Description des fonctions ; utilisez au maximum 132 caractères."
|
||||||
},
|
},
|
||||||
"eTag_filtering_log": {
|
"eTag_filtering_log": {
|
||||||
"message": "L’identification ETag a été supprimée",
|
"message": "L’identification ETag a été supprimée",
|
||||||
"description": "Utilisé par le journal de ClearUrls et indiquer ce qui a été nettoyé"
|
"description": "Utilisé pour le journal de ClearUrls et indiquer ce qui a été nettoyé"
|
||||||
},
|
},
|
||||||
"eTag_filtering_enabled": {
|
"eTag_filtering_enabled": {
|
||||||
"message": "Filtrer ETag ; les sites mettent dans le cache du Navigateur, ou Système d’Exploitation, un identifiant pour vous espionner",
|
"message": "Filtrer ETag ; les sites mettent dans le cache du Navigateur, ou Système d’Exploitation, un identifiant pour vous pister",
|
||||||
"description": "Titre par le bouton de filtrage ETag"
|
"description": "Titre pour le bouton de filtrage ETag"
|
||||||
},
|
},
|
||||||
"eTag_filtering_enabled_title": {
|
"eTag_filtering_enabled_title": {
|
||||||
"message": "Filtre les identifications ETag, vous devez vider le cache lors de la premiere utilisation",
|
"message": "Filtre les identifications ETag, mais pour la première utilisation, veuillez vider le cache",
|
||||||
"description": "Titre par le bouton de filtrage ETag"
|
"description": "Titre pour le bouton de filtrage ETag"
|
||||||
},
|
|
||||||
"popup_html_rules_status_head_title": {
|
|
||||||
"message": " ",
|
|
||||||
"description": "pas nécessaire, seulement pour éviter les exceptions"
|
|
||||||
},
|
|
||||||
"popup_html_statistics_percentage_title": {
|
|
||||||
"message": " ",
|
|
||||||
"description": "pas nécessaire, seulement pour éviter les exceptions"
|
|
||||||
},
|
|
||||||
"popup_html_statistics_blocked_title": {
|
|
||||||
"message": " ",
|
|
||||||
"description": "pas nécessaire, seulement pour éviter les exceptions"
|
|
||||||
},
|
|
||||||
"popup_html_statistics_elements_title": {
|
|
||||||
"message": " ",
|
|
||||||
"description": "pas nécessaire, seulement pour éviter les exceptions"
|
|
||||||
},
|
|
||||||
"popup_html_statistics_head_title": {
|
|
||||||
"message": " ",
|
|
||||||
"description": "pas nécessaire, seulement pour éviter les exceptions"
|
|
||||||
},
|
|
||||||
"popup_html_configs_head_title": {
|
|
||||||
"message": " ",
|
|
||||||
"description": "pas nécessaire, seulement pour éviter les exceptions"
|
|
||||||
},
|
|
||||||
"context_menu_enabled_title": {
|
|
||||||
"message": " ",
|
|
||||||
"description": "pas nécessaire, seulement pour éviter les exceptions"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,38 +1,38 @@
|
|||||||
{
|
{
|
||||||
"hash_status_code_1": {
|
"hash_status_code_1": {
|
||||||
"message": "Atualizadas",
|
"message": "atualizado",
|
||||||
"description": "This status code says, that no update is available for the ClearURLs rules and everything is up to date."
|
"description": "This status code says, that no update is available for the ClearURLs rules and everything is up to date."
|
||||||
},
|
},
|
||||||
"hash_status_code_2": {
|
"hash_status_code_2": {
|
||||||
"message": "Atualizadas",
|
"message": "atualizado",
|
||||||
"description": "This status code says, that the ClearURLs rules are successfully updated."
|
"description": "This status code says, that the ClearURLs rules are successfully updated."
|
||||||
},
|
},
|
||||||
"hash_status_code_3": {
|
"hash_status_code_3": {
|
||||||
"message": "Atualização disponível",
|
"message": "atualização disponível",
|
||||||
"description": "This status code says, that an update is available for the ClearURLs rules."
|
"description": "Este código de status diz que uma atualização está disponível para as regras ClearURLs."
|
||||||
},
|
},
|
||||||
"hash_status_code_4": {
|
"hash_status_code_4": {
|
||||||
"message": "Erro",
|
"message": "erro",
|
||||||
"description": "This status code says, that the ClearURLs could not be started correctly."
|
"description": "Este código de estado diz que ClearURLs não pôde ser iniciado corretamente."
|
||||||
},
|
},
|
||||||
"hash_status_code_5": {
|
"hash_status_code_5": {
|
||||||
"message": "Ops! Algo deu errado.",
|
"message": "Oops, algo deu errado!",
|
||||||
"description": "This status code says, that an error occurred while updating the ClearURLs rules."
|
"description": "Este código de estado diz que ocorreu um erro ao atualizar as regras da ClearURLs."
|
||||||
},
|
},
|
||||||
"log_redirect": {
|
"log_redirect": {
|
||||||
"message": "URL redirecionado",
|
"message": "Esta URL foi redirecionada",
|
||||||
"description": "This string is used on redirections in the ClearURLs log."
|
"description": "This string is used on redirections in the ClearURLs log."
|
||||||
},
|
},
|
||||||
"log_domain_blocked": {
|
"log_domain_blocked": {
|
||||||
"message": "Domínio bloqueado",
|
"message": "Este domínio foi bloqueado",
|
||||||
"description": "This string is used on blocked domains in the ClearURLs log."
|
"description": "Esta string é usada em redirecionamentos no log ClearURLs. "
|
||||||
},
|
},
|
||||||
"check_os_log": {
|
"check_os_log": {
|
||||||
"message": "[ClearURLs]: auditor de registros implementado.",
|
"message": "[ClearURLs]: Examinador de registro (log) foi adicionado.",
|
||||||
"description": "This string is used on ClearURLs log startup."
|
"description": "This string is used on ClearURLs log startup."
|
||||||
},
|
},
|
||||||
"log_html_page_title": {
|
"log_html_page_title": {
|
||||||
"message": "Registros do ClearURLs",
|
"message": "Registro (log) do ClearURLs",
|
||||||
"description": "This string is used as header on the log page."
|
"description": "This string is used as header on the log page."
|
||||||
},
|
},
|
||||||
"log_html_table_head_1": {
|
"log_html_table_head_1": {
|
||||||
@@ -52,11 +52,11 @@
|
|||||||
"description": "This string is used as table title on the log page."
|
"description": "This string is used as table title on the log page."
|
||||||
},
|
},
|
||||||
"log_html_reset_button": {
|
"log_html_reset_button": {
|
||||||
"message": "Redefinir",
|
"message": "Resetar",
|
||||||
"description": "This string is used for the reset button on the log page."
|
"description": "This string is used for the reset button on the log page."
|
||||||
},
|
},
|
||||||
"log_html_reset_button_title": {
|
"log_html_reset_button_title": {
|
||||||
"message": "Redefinir o registro global",
|
"message": "Resetar o registro global",
|
||||||
"description": "This string is used as title for the reset button on the log page."
|
"description": "This string is used as title for the reset button on the log page."
|
||||||
},
|
},
|
||||||
"popup_html_configs_head": {
|
"popup_html_configs_head": {
|
||||||
@@ -64,11 +64,11 @@
|
|||||||
"description": "This string is used as title for the configs on the popup page."
|
"description": "This string is used as title for the configs on the popup page."
|
||||||
},
|
},
|
||||||
"popup_html_configs_switch_filter": {
|
"popup_html_configs_switch_filter": {
|
||||||
"message": "Filtro",
|
"message": "Filtrar",
|
||||||
"description": "This string is used as name for the filter switch button on the popup page."
|
"description": "This string is used as name for the filter switch button on the popup page."
|
||||||
},
|
},
|
||||||
"popup_html_configs_switch_filter_title": {
|
"popup_html_configs_switch_filter_title": {
|
||||||
"message": "O interruptor de filtros ativa a funcionalidade de limpeza do ClearURLs. Se essa opção for desativada, a extensão não funcionará.",
|
"message": "O switch de filtros ativa a funcionalidade de limpeza do ClearURLs. Se você desabilitar essa opção, toda a extensão será desativada",
|
||||||
"description": "This string is used as title for the filter switch button on the popup page."
|
"description": "This string is used as title for the filter switch button on the popup page."
|
||||||
},
|
},
|
||||||
"popup_html_configs_switch_log": {
|
"popup_html_configs_switch_log": {
|
||||||
@@ -76,7 +76,7 @@
|
|||||||
"description": "This string is used as name for the logging switch button on the popup page."
|
"description": "This string is used as name for the logging switch button on the popup page."
|
||||||
},
|
},
|
||||||
"popup_html_configs_switch_log_title": {
|
"popup_html_configs_switch_log_title": {
|
||||||
"message": "O registro é salvo apenas localmente. Recomendamos desativá-lo caso não precise dele.",
|
"message": "O registro (log) é salvo apenas localmente. Não recomendamos esse recurso se você não precisa dele",
|
||||||
"description": "This string is used as title for the logging switch button on the popup page."
|
"description": "This string is used as title for the logging switch button on the popup page."
|
||||||
},
|
},
|
||||||
"popup_html_configs_switch_badges": {
|
"popup_html_configs_switch_badges": {
|
||||||
@@ -84,7 +84,7 @@
|
|||||||
"description": "This string is used as name for the badges switch button on the popup page."
|
"description": "This string is used as name for the badges switch button on the popup page."
|
||||||
},
|
},
|
||||||
"popup_html_configs_switch_badges_title": {
|
"popup_html_configs_switch_badges_title": {
|
||||||
"message": "Exibir a quantidade de URLs que foram limpos.",
|
"message": "Mostrar o número de URLs limpas",
|
||||||
"description": "This string is used as title for the badges switch button on the popup page."
|
"description": "This string is used as title for the badges switch button on the popup page."
|
||||||
},
|
},
|
||||||
"popup_html_statistics_head": {
|
"popup_html_statistics_head": {
|
||||||
@@ -104,11 +104,11 @@
|
|||||||
"description": "This string is used as name for the percentage of blocked elements on the popup page."
|
"description": "This string is used as name for the percentage of blocked elements on the popup page."
|
||||||
},
|
},
|
||||||
"popup_html_statistics_reset_button": {
|
"popup_html_statistics_reset_button": {
|
||||||
"message": "Redefinir",
|
"message": "Resetar",
|
||||||
"description": "This string is used as name for the statistics reset button on the popup page."
|
"description": "This string is used as name for the statistics reset button on the popup page."
|
||||||
},
|
},
|
||||||
"popup_html_statistics_reset_button_title": {
|
"popup_html_statistics_reset_button_title": {
|
||||||
"message": "Redefinir as estatísticas globais",
|
"message": "Resetar as estatísticas globais",
|
||||||
"description": "This string is used as title for the statistics reset button on the popup page."
|
"description": "This string is used as title for the statistics reset button on the popup page."
|
||||||
},
|
},
|
||||||
"popup_html_rules_status_head": {
|
"popup_html_rules_status_head": {
|
||||||
@@ -120,23 +120,23 @@
|
|||||||
"description": "This string is used as name for the log button on the popup page."
|
"description": "This string is used as name for the log button on the popup page."
|
||||||
},
|
},
|
||||||
"popup_html_log_head_title": {
|
"popup_html_log_head_title": {
|
||||||
"message": "Abrir o registro",
|
"message": "Abrir o registro (log)",
|
||||||
"description": "This string is used as title for the log button on the popup page."
|
"description": "This string is used as title for the log button on the popup page."
|
||||||
},
|
},
|
||||||
"popup_html_report_button": {
|
"popup_html_report_button": {
|
||||||
"message": "Denunciar URL atual",
|
"message": "Reportar URL atual",
|
||||||
"description": "Note: Currently not used."
|
"description": "Note: Currently not used."
|
||||||
},
|
},
|
||||||
"popup_html_report_button_title": {
|
"popup_html_report_button_title": {
|
||||||
"message": "Denunciar o URL atual desta aba.",
|
"message": "Reportar a URL atual desta aba.",
|
||||||
"description": "Currently not used."
|
"description": "Currently not used."
|
||||||
},
|
},
|
||||||
"core_save_on_disk": {
|
"core_save_on_disk": {
|
||||||
"message": "[ClearURLs]: salvar no disco.",
|
"message": "[ClearURLs]: Salvar no disco.",
|
||||||
"description": "This string is used to tell the user, that ClearURLs saved the settings on disk."
|
"description": "This string is used to tell the user, that ClearURLs saved the settings on disk."
|
||||||
},
|
},
|
||||||
"core_error": {
|
"core_error": {
|
||||||
"message": "[ClearURLs]: a extensão não pôde ser inicializada.",
|
"message": "[ClearURLs]: A extensão não pôde ser inicializada.",
|
||||||
"description": "This string is used to tell the user, that ClearURLs could not be started."
|
"description": "This string is used to tell the user, that ClearURLs could not be started."
|
||||||
},
|
},
|
||||||
"configs_switch_statistics": {
|
"configs_switch_statistics": {
|
||||||
@@ -144,7 +144,7 @@
|
|||||||
"description": "This string is used as name for the statistics switch button on the popup page."
|
"description": "This string is used as name for the statistics switch button on the popup page."
|
||||||
},
|
},
|
||||||
"configs_switch_statistics_title": {
|
"configs_switch_statistics_title": {
|
||||||
"message": "Ativar ou desativar a função de estatísticas.",
|
"message": "Ativar ou desativar função de estatísticas",
|
||||||
"description": "This string is used as title for the statistics switch button on the popup page."
|
"description": "This string is used as title for the statistics switch button on the popup page."
|
||||||
},
|
},
|
||||||
"settings_html_page_title": {
|
"settings_html_page_title": {
|
||||||
@@ -156,23 +156,23 @@
|
|||||||
"description": "This string is used as name for the badged color label."
|
"description": "This string is used as name for the badged color label."
|
||||||
},
|
},
|
||||||
"setting_html_reset_button": {
|
"setting_html_reset_button": {
|
||||||
"message": "Redefinir",
|
"message": "Resetar",
|
||||||
"description": "This string is used as name for the reset button on the settings page."
|
"description": "This string is used as name for the reset button on the settings page."
|
||||||
},
|
},
|
||||||
"setting_html_reset_button_title": {
|
"setting_html_reset_button_title": {
|
||||||
"message": "Redefinir tudo",
|
"message": "Resetar tudo",
|
||||||
"description": "This string is used as title for the reset button on the settings page."
|
"description": "This string is used as title for the reset button on the settings page."
|
||||||
},
|
},
|
||||||
"setting_rule_url_label": {
|
"setting_rule_url_label": {
|
||||||
"message": "URL do arquivo data.json (regras)",
|
"message": "URL do arquivo data.json (regras)",
|
||||||
"description": "This string is used as name for the rule url label."
|
"description": "Esta string é usada como nome para o rótulo da URL de regra."
|
||||||
},
|
},
|
||||||
"settings_html_save_button": {
|
"settings_html_save_button": {
|
||||||
"message": "Salvar e recarregar extensão",
|
"message": "Salvar e recarregar extensão",
|
||||||
"description": "This string is used as name for the save&reload button on the settings page."
|
"description": "This string is used as name for the save&reload button on the settings page."
|
||||||
},
|
},
|
||||||
"settings_html_save_button_title": {
|
"settings_html_save_button_title": {
|
||||||
"message": "Salvar as configurações",
|
"message": "Salva as configurações",
|
||||||
"description": "This string is used as title for the save&reload button on the settings page."
|
"description": "This string is used as title for the save&reload button on the settings page."
|
||||||
},
|
},
|
||||||
"setting_hash_url_label": {
|
"setting_hash_url_label": {
|
||||||
@@ -180,35 +180,35 @@
|
|||||||
"description": "This string is used as name for the rule.hash url label."
|
"description": "This string is used as name for the rule.hash url label."
|
||||||
},
|
},
|
||||||
"setting_types_label": {
|
"setting_types_label": {
|
||||||
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Tipos de solicitações</a> (nível expert) — em inglês",
|
"message": "<a href='https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType' target='_blank'>Tipos de pedidos</a> (nível expert)",
|
||||||
"description": "This string is used as name for the types label."
|
"description": "This string is used as name for the types label."
|
||||||
},
|
},
|
||||||
"setting_report_server_label": {
|
"setting_report_server_label": {
|
||||||
"message": "Denunciar URLs deste servidor",
|
"message": "Reportar servidor para URLs",
|
||||||
"description": "Note: Currently not used."
|
"description": "Note: Currently not used."
|
||||||
},
|
},
|
||||||
"success_report_url": {
|
"success_report_url": {
|
||||||
"message": "O URL foi denunciado com sucesso. Verificaremos em breve.",
|
"message": "A URL foi reportada com sucesso. Verificaremos essa URL em breve.",
|
||||||
"description": "Note: Currently not used."
|
"description": "Nota: Atualmente não usado."
|
||||||
},
|
},
|
||||||
"error_report_url": {
|
"error_report_url": {
|
||||||
"message": "Parece que este URL já foi denunciado.",
|
"message": "Parece que essa URL ja foi reportada.",
|
||||||
"description": "Note: Currently not used."
|
"description": "Nota: Atualmente não usado."
|
||||||
},
|
},
|
||||||
"donate_button": {
|
"donate_button": {
|
||||||
"message": "Uma doação para o criador do ClearURLs.",
|
"message": "Uma doação para o criador do ClearURLs.",
|
||||||
"description": "This string is used to refer to a donation page."
|
"description": "This string is used to refer to a donation page."
|
||||||
},
|
},
|
||||||
"clipboard_copy_link": {
|
"clipboard_copy_link": {
|
||||||
"message": "Copiar endereço limpo do link",
|
"message": "Copiar local do link limpo",
|
||||||
"description": "This string is used in the context menu to copy clean links."
|
"description": "This string is used in the context menu to copy clean links."
|
||||||
},
|
},
|
||||||
"context_menu_enabled": {
|
"context_menu_enabled": {
|
||||||
"message": "Exibir entrada no menu contextual",
|
"message": "Mostrar entrada do menu de contexto",
|
||||||
"description": "This string is used toggle the context menu entry to copy clean links."
|
"description": "This string is used toggle the context menu entry to copy clean links."
|
||||||
},
|
},
|
||||||
"history_listener_enabled": {
|
"history_listener_enabled": {
|
||||||
"message": "Impedir a injeção de rastreamento sobre a API de histórico (veja também: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>O método replaceState()</a> — em inglês)",
|
"message": "Impedir a injeção de rastreamento sobre a API de histórico (vide: <a href='https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method' target='_blank'>Método replaceState()</a>)",
|
||||||
"description": "This string is used as name for the history API listener label."
|
"description": "This string is used as name for the history API listener label."
|
||||||
},
|
},
|
||||||
"cleaning_tool_page_title": {
|
"cleaning_tool_page_title": {
|
||||||
@@ -216,7 +216,7 @@
|
|||||||
"description": "This string is used as title on the cleaning tool page."
|
"description": "This string is used as title on the cleaning tool page."
|
||||||
},
|
},
|
||||||
"cleaning_tool_description": {
|
"cleaning_tool_description": {
|
||||||
"message": "Com esta ferramenta, você pode colar URLs e o ClearURLs limpá-los-á após clicar no botão verde. É possível colar múltiplos URLs de uma só vez, mas cada URL deve estar em uma linha separada.",
|
"message": "Com esta ferramenta, você pode colar URLs e ClearURLs as limpará após um clique no botão verde. Você pode colar várias URLs de uma só vez, mas cada URL deve estar em uma linha separada.",
|
||||||
"description": "This string is used as description of the cleaning tool."
|
"description": "This string is used as description of the cleaning tool."
|
||||||
},
|
},
|
||||||
"cleaning_tool_btn": {
|
"cleaning_tool_btn": {
|
||||||
@@ -224,56 +224,56 @@
|
|||||||
"description": "This string is used as name for the clean url button."
|
"description": "This string is used as name for the clean url button."
|
||||||
},
|
},
|
||||||
"cleaning_tool_dirty_urls_label": {
|
"cleaning_tool_dirty_urls_label": {
|
||||||
"message": "Cole aqui os URLs para limpeza:",
|
"message": "Aqui você pode colar as URLs que deseja limpar:",
|
||||||
"description": "This string is used as title on the cleaning tool page for the dirty URLs."
|
"description": "This string is used as title on the cleaning tool page for the dirty URLs."
|
||||||
},
|
},
|
||||||
"cleaning_tool_clean_urls_label": {
|
"cleaning_tool_clean_urls_label": {
|
||||||
"message": "URLs limpos:",
|
"message": "Aqui você pode encontrar as URLs limpas:",
|
||||||
"description": "This string is used as title on the cleaning tool page for the clean URLs."
|
"description": "This string is used as title on the cleaning tool page for the clean URLs."
|
||||||
},
|
},
|
||||||
"local_hosts_skipping": {
|
"local_hosts_skipping": {
|
||||||
"message": "Ignorar URLs em hosts locais (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost)",
|
"message": "Pular URLs em hosts locais (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 127.0.0.1, localhost)",
|
||||||
"description": "This string is used as label for the local host skipping switch"
|
"description": "Esta string é usada como rótulo para o switch de salto do host local"
|
||||||
},
|
},
|
||||||
"local_hosts_skipping_title": {
|
"local_hosts_skipping_title": {
|
||||||
"message": "Ignorar URLs em hosts locais",
|
"message": "Pula URLs em hosts locais",
|
||||||
"description": "This string is used as title for the local host skipping switch"
|
"description": "Esta string é usada como título para o switch de salto do host local"
|
||||||
},
|
},
|
||||||
"log_html_export_button": {
|
"log_html_export_button": {
|
||||||
"message": "Exportar",
|
"message": "Exportar",
|
||||||
"description": "This string is used for the export button on the log page."
|
"description": "Essa string é usada para o botão de exportação na página de log."
|
||||||
},
|
},
|
||||||
"log_html_export_button_title": {
|
"log_html_export_button_title": {
|
||||||
"message": "Exportar o registro global",
|
"message": "Exporta o log global",
|
||||||
"description": "This string is used as title for the export button on the log page."
|
"description": "Essa string é usada como título para o botão de exportação na página de log."
|
||||||
},
|
},
|
||||||
"log_html_import_button": {
|
"log_html_import_button": {
|
||||||
"message": "Importar",
|
"message": "Importar",
|
||||||
"description": "This string is used for the import button on the log page."
|
"description": "Essa string é usada para o botão de importação na página de log."
|
||||||
},
|
},
|
||||||
"log_html_import_button_title": {
|
"log_html_import_button_title": {
|
||||||
"message": "Importar o registro global",
|
"message": "Importar o registro global",
|
||||||
"description": "This string is used as title for the import button on the log page."
|
"description": "Esta string é usada como título para o botão de importação na página de log."
|
||||||
},
|
},
|
||||||
"setting_html_export_button": {
|
"setting_html_export_button": {
|
||||||
"message": "Exportar",
|
"message": "Exportar",
|
||||||
"description": "This string is used as name for the export button on the settings page."
|
"description": "Essa string é usada como nome para o botão de exportação na página de configurações."
|
||||||
},
|
},
|
||||||
"setting_html_export_button_title": {
|
"setting_html_export_button_title": {
|
||||||
"message": "Exportar tudo",
|
"message": "Exporta tudo",
|
||||||
"description": "This string is used as title for the export button on the settings page."
|
"description": "Esta string é usada como título para o botão de exportação na página de configurações."
|
||||||
},
|
},
|
||||||
"setting_html_import_button": {
|
"setting_html_import_button": {
|
||||||
"message": "Importar",
|
"message": "Importar",
|
||||||
"description": "This string is used as name for the reset button on the settings page."
|
"description": "Esta string é usada como nome para o botão de reset na página de configurações."
|
||||||
},
|
},
|
||||||
"setting_html_import_button_title": {
|
"setting_html_import_button_title": {
|
||||||
"message": "Importar tudo",
|
"message": "Importa tudo",
|
||||||
"description": "This string is used as title for the import button on the settings page."
|
"description": "Esta string é usada como título para o botão de importação na página de configurações."
|
||||||
},
|
},
|
||||||
"setting_log_limit_label": {
|
"setting_log_limit_label": {
|
||||||
"message": "Limitar o registro a $LIMIT$ item(ns).",
|
"message": "Limitar o registro (log) a $LIMIT$ itens.",
|
||||||
"description": "This string is used as name for the log limit label.",
|
"description": "Essa string é usada como nome para o rótulo de limite de log.",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"limit": {
|
"limit": {
|
||||||
"content": "$1",
|
"content": "$1",
|
||||||
@@ -282,28 +282,28 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"blocked_html_title": {
|
"blocked_html_title": {
|
||||||
"message": "Este site foi bloqueado pelo <b>ClearURLs</b>",
|
"message": "Este site foi bloqueado por <b>ClearURLs</b>",
|
||||||
"description": "This string is used as title on the blocked site page."
|
"description": "Essa string é usada como título na página do site bloqueada."
|
||||||
},
|
},
|
||||||
"blocked_html_body": {
|
"blocked_html_body": {
|
||||||
"message": "Este site foi bloqueado pela extensão <b>ClearURLs</b>, pois é considerado como um serviço de anúncios e/ou rastreamento. Para acessá-lo, será necessário desativar temporariamente a extensão ou desativar o bloqueio de domínios nas configurações do ClearURLs. Após isso, clique no botão abaixo para carregar a página.",
|
"message": "Este site foi bloqueado pela extensão <b>ClearURLs</b> porque o identificamos como um serviço de publicidade ou rastreamento. Para visitar este site, você deve desativar temporariamente a extensão ou desabilitar o bloqueio de domínio nas configurações de ClearURLs. Depois disso, você pode clicar no botão abaixo para carregar a página.",
|
||||||
"description": "This string is used as body on the blocked site page."
|
"description": "Essa string é usada como corpo na página do site bloqueado."
|
||||||
},
|
},
|
||||||
"blocked_html_button": {
|
"blocked_html_button": {
|
||||||
"message": "Acessar página",
|
"message": "Visitar a página",
|
||||||
"description": "This string is used as button on the blocked site page."
|
"description": "Essa string é usada como botão na página do site bloqueado."
|
||||||
},
|
},
|
||||||
"referral_marketing_enabled": {
|
"referral_marketing_enabled": {
|
||||||
"message": "Permitir marketing de referência (\"referral\")",
|
"message": "Permitir marketing de referência (\"referral\")",
|
||||||
"description": "This string is used as label for the referral marketing switch"
|
"description": "Essa string é usada como rótulo para a opção de marketing de referência"
|
||||||
},
|
},
|
||||||
"referral_marketing_enabled_title": {
|
"referral_marketing_enabled_title": {
|
||||||
"message": "Permitir marketing de referência (\"referral\")",
|
"message": "Permite marketing de referência (\"referral\")",
|
||||||
"description": "This string is used as title for the referral marketing switch"
|
"description": "Esta string é usada como título para a opção de marketing de referência"
|
||||||
},
|
},
|
||||||
"watchdog": {
|
"watchdog": {
|
||||||
"message": "[ClearURLs]: a vigilância encontrou um problema e já falhou $TIMES$ vez(es).",
|
"message": "[ClearURLs]: O watchdog detectou um problema e já falhou $TIMES$ vezes.",
|
||||||
"description": "This string is used as text for the watchdog",
|
"description": "Esta string é usada como texto para o watchdog",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"times": {
|
"times": {
|
||||||
"content": "$1",
|
"content": "$1",
|
||||||
@@ -312,67 +312,67 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"domain_blocking_enabled": {
|
"domain_blocking_enabled": {
|
||||||
"message": "Permitir bloqueio de domínios (pode causar problemas em páginas que não permitem bloqueadores de anúncios)",
|
"message": "Permitir bloqueio de domínio (pode causar problemas em páginas que não permitem AdBlockers)",
|
||||||
"description": "This string is used as label for the domain blocking switch"
|
"description": "Esta string é usada como rótulo para o switch de bloqueio de domínio"
|
||||||
},
|
},
|
||||||
"domain_blocking_enabled_title": {
|
"domain_blocking_enabled_title": {
|
||||||
"message": "Permitir bloqueio de domínios (pode causar problemas em páginas que não permitem bloqueadores de anúncios)",
|
"message": "Permitir bloqueio de domínio (pode causar problemas em páginas que não permitem AdBlockers)",
|
||||||
"description": "This string is used as title for the domain blocking switch"
|
"description": "Esta string é usada como título para a chave de bloqueio de domínio"
|
||||||
},
|
},
|
||||||
"log_ping_blocked": {
|
"log_ping_blocked": {
|
||||||
"message": "Auditoria de hyperlink bloqueada",
|
"message": "Esta auditoria de hiperlink foi bloqueada",
|
||||||
"description": "This string is used on hyperlink auditing in the ClearURLs log."
|
"description": "Essa string é usada na auditoria de hiperlink no log ClearURLs."
|
||||||
},
|
},
|
||||||
"ping_blocking_enabled": {
|
"ping_blocking_enabled": {
|
||||||
"message": "Bloquear auditoria de hyperlink (mais informações <a href='https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing' target='_blank'>aqui</a> — em inglês)",
|
"message": "Bloquear auditoria de hiperlink (vide <a href='https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing' target='_blank'>artigo sobre \"Hyperlink auditing\"</a>)",
|
||||||
"description": "This string is used as label for the hyperlink auditing blocking switch"
|
"description": "Esta string é usada como rótulo para o switch de bloqueio de auditoria de hiperlink"
|
||||||
},
|
},
|
||||||
"ping_blocking_enabled_title": {
|
"ping_blocking_enabled_title": {
|
||||||
"message": "Bloquear auditoria de hiperlink",
|
"message": "Bloquear auditoria de hiperlink",
|
||||||
"description": "This string is used as title for the hyperlink auditing blocking switch"
|
"description": "Esta string é usada como título para a chave de bloqueio de auditoria de hiperlink"
|
||||||
},
|
},
|
||||||
"extension_description": {
|
"extension_description": {
|
||||||
"message": "Remova elementos de rastreamento de URLs.",
|
"message": "Remover os elementos de rastreamento de URLs. ",
|
||||||
"description": "Extension description (max. 132 characters)"
|
"description": "Descrição da extensão (máx. 132 caracteres)"
|
||||||
},
|
},
|
||||||
"eTag_filtering_log": {
|
"eTag_filtering_log": {
|
||||||
"message": "Cabeçalho ETag removido",
|
"message": "O cabeçalho ETag foi removido deste pedido",
|
||||||
"description": "This string is used on ETag header filtering in the ClearURLs log."
|
"description": "Essa string é usada na filtragem de cabeçalho ETag no log ClearURLs."
|
||||||
},
|
},
|
||||||
"eTag_filtering_enabled": {
|
"eTag_filtering_enabled": {
|
||||||
"message": "Filtrar cabeçalhos ETag de solicitações (mais informações <a href='https://en.wikipedia.org/wiki/HTTP_ETag#Tracking_using_ETags' target='_blank'>aqui</a> — em inglês)",
|
"message": "Filtra cabeçalhos ETag de pedidos (vide <a href='https://en.wikipedia.org/wiki/HTTP_ETag#Tracking_using_ETags' target='_blank'>artigo sobre \"HTTP ETag\"</a>)",
|
||||||
"description": "This string is used as label for the ETag header filtering switch"
|
"description": "Esta string é usada como rótulo para a opção de filtragem de cabeçalho ETag"
|
||||||
},
|
},
|
||||||
"eTag_filtering_enabled_title": {
|
"eTag_filtering_enabled_title": {
|
||||||
"message": "Filtrar cabeçalhos ETag. Dica: o cache deve ser limpo antes do primeiro uso.",
|
"message": "Filtra cabeçalhos ETag de pedidos. Dica: o cache deve ser limpo antes do primeiro uso.",
|
||||||
"description": "This string is used as title for the ETag header filtering switch"
|
"description": "Esta string é usada como título para a opção de filtragem de cabeçalho ETag"
|
||||||
},
|
},
|
||||||
"popup_html_rules_status_head_title": {
|
"popup_html_rules_status_head_title": {
|
||||||
"message": " ",
|
"message": " ",
|
||||||
"description": "not needed, only to prevent exceptions"
|
"description": "não necessário, apenas para evitar exceções"
|
||||||
},
|
},
|
||||||
"popup_html_statistics_percentage_title": {
|
"popup_html_statistics_percentage_title": {
|
||||||
"message": " ",
|
"message": " ",
|
||||||
"description": "not needed, only to prevent exceptions"
|
"description": "não é necessário, apenas para evitar exceções"
|
||||||
},
|
},
|
||||||
"popup_html_statistics_blocked_title": {
|
"popup_html_statistics_blocked_title": {
|
||||||
"message": " ",
|
"message": " ",
|
||||||
"description": "not needed, only to prevent exceptions"
|
"description": "não é necessário, apenas para evitar exceções"
|
||||||
},
|
},
|
||||||
"popup_html_statistics_elements_title": {
|
"popup_html_statistics_elements_title": {
|
||||||
"message": " ",
|
"message": " ",
|
||||||
"description": "not needed, only to prevent exceptions"
|
"description": "não é necessário, apenas para evitar exceções"
|
||||||
},
|
},
|
||||||
"popup_html_statistics_head_title": {
|
"popup_html_statistics_head_title": {
|
||||||
"message": " ",
|
"message": " ",
|
||||||
"description": "not needed, only to prevent exceptions"
|
"description": "não é necessário, apenas para evitar exceções"
|
||||||
},
|
},
|
||||||
"popup_html_configs_head_title": {
|
"popup_html_configs_head_title": {
|
||||||
"message": " ",
|
"message": " ",
|
||||||
"description": "not needed, only to prevent exceptions"
|
"description": "não é necessário, apenas para evitar exceções"
|
||||||
},
|
},
|
||||||
"context_menu_enabled_title": {
|
"context_menu_enabled_title": {
|
||||||
"message": " ",
|
"message": " ",
|
||||||
"description": "not needed, only to prevent exceptions"
|
"description": "não é necessário, apenas para evitar exceções"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -346,26 +346,5 @@
|
|||||||
"eTag_filtering_enabled_title": {
|
"eTag_filtering_enabled_title": {
|
||||||
"message": "Фільтри заголовків ETag. \nПідказка: Кеш повинен бути скинутим перед першим використанням.",
|
"message": "Фільтри заголовків ETag. \nПідказка: Кеш повинен бути скинутим перед першим використанням.",
|
||||||
"description": "Цей рядок використовується, як заголовок для перемикача фільтра заголовка ETag"
|
"description": "Цей рядок використовується, як заголовок для перемикача фільтра заголовка ETag"
|
||||||
},
|
|
||||||
"popup_html_rules_status_head_title": {
|
|
||||||
"message": " "
|
|
||||||
},
|
|
||||||
"popup_html_statistics_percentage_title": {
|
|
||||||
"message": " "
|
|
||||||
},
|
|
||||||
"popup_html_statistics_blocked_title": {
|
|
||||||
"message": " "
|
|
||||||
},
|
|
||||||
"popup_html_statistics_elements_title": {
|
|
||||||
"message": " "
|
|
||||||
},
|
|
||||||
"popup_html_statistics_head_title": {
|
|
||||||
"message": " "
|
|
||||||
},
|
|
||||||
"popup_html_configs_head_title": {
|
|
||||||
"message": " "
|
|
||||||
},
|
|
||||||
"context_menu_enabled_title": {
|
|
||||||
"message": " "
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
76
clearurls.js
76
clearurls.js
@@ -44,6 +44,7 @@ function removeFieldsFormURL(provider, pureUrl, quiet = false, request = null) {
|
|||||||
let fields = "";
|
let fields = "";
|
||||||
let rules = provider.getRules();
|
let rules = provider.getRules();
|
||||||
let changes = false;
|
let changes = false;
|
||||||
|
let cancel = false;
|
||||||
let rawRules = provider.getRawRules();
|
let rawRules = provider.getRawRules();
|
||||||
let urlObject = new URL(url);
|
let urlObject = new URL(url);
|
||||||
|
|
||||||
@@ -55,37 +56,6 @@ function removeFieldsFormURL(provider, pureUrl, quiet = false, request = null) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Expand the url by provider redirections. So no tracking on
|
|
||||||
* url redirections form sites to sites.
|
|
||||||
*/
|
|
||||||
let re = provider.getRedirection(url);
|
|
||||||
if (re !== null) {
|
|
||||||
url = decodeURL(re);
|
|
||||||
|
|
||||||
//Log the action
|
|
||||||
if (!quiet) {
|
|
||||||
pushToLog(pureUrl, url, translate('log_redirect'));
|
|
||||||
increaseTotalCounter(1);
|
|
||||||
increaseBadged(false, request)
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
"redirect": true,
|
|
||||||
"url": url
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (provider.isCaneling() && storage.domainBlocking) {
|
|
||||||
if (!quiet) pushToLog(pureUrl, pureUrl, translate('log_domain_blocked'));
|
|
||||||
increaseTotalCounter(1);
|
|
||||||
increaseBadged(quiet, request);
|
|
||||||
return {
|
|
||||||
"cancel": true,
|
|
||||||
"url": url
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Apply raw rules to the URL.
|
* Apply raw rules to the URL.
|
||||||
*/
|
*/
|
||||||
@@ -105,6 +75,28 @@ function removeFieldsFormURL(provider, pureUrl, quiet = false, request = null) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
urlObject = new URL(url);
|
urlObject = new URL(url);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Expand the url by provider redirections. So no tracking on
|
||||||
|
* url redirections form sites to sites.
|
||||||
|
*/
|
||||||
|
let re = provider.getRedirection(url);
|
||||||
|
if (re !== null) {
|
||||||
|
url = decodeURL(re);
|
||||||
|
|
||||||
|
//Log the action
|
||||||
|
if (!quiet) {
|
||||||
|
pushToLog(pureUrl, url, translate('log_redirect'));
|
||||||
|
increaseGlobalURLCounter(1);
|
||||||
|
increaseBadged(false, request)
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
"redirect": true,
|
||||||
|
"url": url
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fields = urlObject.searchParams;
|
fields = urlObject.searchParams;
|
||||||
fragments = extractFragments(urlObject);
|
fragments = extractFragments(urlObject);
|
||||||
domain = urlWithoutParamsAndHash(urlObject).toString();
|
domain = urlWithoutParamsAndHash(urlObject).toString();
|
||||||
@@ -152,17 +144,23 @@ function removeFieldsFormURL(provider, pureUrl, quiet = false, request = null) {
|
|||||||
|
|
||||||
let finalURL = domain;
|
let finalURL = domain;
|
||||||
|
|
||||||
if (fields.toString() !== "") finalURL += "?" + urlSearchParamsToString(fields);
|
if (fields.toString() !== "") finalURL += "?" + fields.toString();
|
||||||
if (fragments.toString() !== "") finalURL += "#" + fragments.toString();
|
if (fragments.toString() !== "") finalURL += "#" + fragments.toString();
|
||||||
|
|
||||||
url = finalURL.replace(new RegExp("\\?&"), "?").replace(new RegExp("#&"), "#");
|
url = finalURL.replace(new RegExp("\\?&"), "?").replace(new RegExp("#&"), "#");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (provider.isCaneling() && storage.domainBlocking) {
|
||||||
|
if (!quiet) pushToLog(pureUrl, pureUrl, translate('log_domain_blocked'));
|
||||||
|
increaseGlobalURLCounter(1);
|
||||||
|
increaseBadged(quiet, request);
|
||||||
|
cancel = true;
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"changes": changes,
|
"changes": changes,
|
||||||
"url": url
|
"url": url,
|
||||||
|
"cancel": cancel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -609,7 +607,7 @@ function start() {
|
|||||||
const URLbeforeReplaceCount = countFields(request.url);
|
const URLbeforeReplaceCount = countFields(request.url);
|
||||||
|
|
||||||
//Add Fields form Request to global url counter
|
//Add Fields form Request to global url counter
|
||||||
increaseTotalCounter(URLbeforeReplaceCount);
|
increaseGlobalURLCounter(URLbeforeReplaceCount);
|
||||||
|
|
||||||
if (storage.globalStatus) {
|
if (storage.globalStatus) {
|
||||||
let result = {
|
let result = {
|
||||||
@@ -622,7 +620,7 @@ function start() {
|
|||||||
if (storage.pingBlocking && storage.pingRequestTypes.includes(request.type)) {
|
if (storage.pingBlocking && storage.pingRequestTypes.includes(request.type)) {
|
||||||
pushToLog(request.url, request.url, translate('log_ping_blocked'));
|
pushToLog(request.url, request.url, translate('log_ping_blocked'));
|
||||||
increaseBadged(false, request);
|
increaseBadged(false, request);
|
||||||
increaseTotalCounter(1);
|
increaseGlobalURLCounter(1);
|
||||||
return {cancel: true};
|
return {cancel: true};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -727,9 +725,3 @@ function start() {
|
|||||||
["blocking"]
|
["blocking"]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Must be asked after install
|
|
||||||
browser.permissions.request({
|
|
||||||
permissions: ["webRequest", "webRequestBlocking", "tabs", "scripting", "webNavigation"],
|
|
||||||
origins: ["<all_urls>"],
|
|
||||||
});
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ let badges = {};
|
|||||||
* Increases the badged by one.
|
* Increases the badged by one.
|
||||||
*/
|
*/
|
||||||
function increaseBadged(quiet = false, request) {
|
function increaseBadged(quiet = false, request) {
|
||||||
if (!quiet) increaseCleanedCounter();
|
if (!quiet) increaseURLCounter();
|
||||||
|
|
||||||
if(request === null) return;
|
if(request === null) return;
|
||||||
|
|
||||||
@@ -48,9 +48,9 @@ function increaseBadged(quiet = false, request) {
|
|||||||
checkOSAndroid().then((res) => {
|
checkOSAndroid().then((res) => {
|
||||||
if (!res) {
|
if (!res) {
|
||||||
if (storage.badgedStatus && !quiet) {
|
if (storage.badgedStatus && !quiet) {
|
||||||
browser.action.setBadgeText({text: (badges[tabId]).counter.toString(), tabId: tabId}).catch(handleError);
|
browser.browserAction.setBadgeText({text: (badges[tabId]).counter.toString(), tabId: tabId}).catch(handleError);
|
||||||
} else {
|
} else {
|
||||||
browser.action.setBadgeText({text: "", tabId: tabId}).catch(handleError);
|
browser.browserAction.setBadgeText({text: "", tabId: tabId}).catch(handleError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -22,9 +22,8 @@
|
|||||||
* and based on: https://github.com/mdn/webextensions-examples/tree/master/context-menu-copy-link-with-types
|
* and based on: https://github.com/mdn/webextensions-examples/tree/master/context-menu-copy-link-with-types
|
||||||
*/
|
*/
|
||||||
|
|
||||||
browser.runtime.onInstalled.addListener(contextMenuStart);
|
function contextMenuStart() {
|
||||||
|
if(storage.contextMenuEnabled) {
|
||||||
function contextMenuStart(details) {
|
|
||||||
browser.contextMenus.create({
|
browser.contextMenus.create({
|
||||||
id: "copy-link-to-clipboard",
|
id: "copy-link-to-clipboard",
|
||||||
title: translate("clipboard_copy_link"),
|
title: translate("clipboard_copy_link"),
|
||||||
@@ -34,17 +33,25 @@ function contextMenuStart(details) {
|
|||||||
browser.contextMenus.onClicked.addListener((info, tab) => {
|
browser.contextMenus.onClicked.addListener((info, tab) => {
|
||||||
if (info.menuItemId === "copy-link-to-clipboard") {
|
if (info.menuItemId === "copy-link-to-clipboard") {
|
||||||
const url = pureCleaning(info.linkUrl);
|
const url = pureCleaning(info.linkUrl);
|
||||||
|
const code = "copyToClipboard(" +
|
||||||
|
JSON.stringify(url)+");";
|
||||||
|
|
||||||
browser.scripting.executeScript({
|
browser.tabs.executeScript({
|
||||||
target: {
|
code: "typeof copyToClipboard === 'function';",
|
||||||
tabId: tab.id,
|
}).then((results) => {
|
||||||
allFrames: true
|
if (!results || results[0] !== true) {
|
||||||
},
|
return browser.tabs.executeScript(tab.id, {
|
||||||
func: (text) => navigator.clipboard.writeText(text),
|
file: "/external_js/clipboard-helper.js",
|
||||||
args: [
|
}).catch(handleError);
|
||||||
url
|
}
|
||||||
]
|
}).then(() => {
|
||||||
|
return browser.tabs.executeScript(tab.id, {
|
||||||
|
code,
|
||||||
|
});
|
||||||
|
}).catch((error) => {
|
||||||
|
console.error("Failed to copy text: " + error);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,60 +19,29 @@
|
|||||||
/*jshint esversion: 6 */
|
/*jshint esversion: 6 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filters eTag headers from web requests.
|
* Filters headers containing eTag values from web requests.
|
||||||
*/
|
*/
|
||||||
function eTagFilter(requestDetails) {
|
function eTagFilter(requestDetails) {
|
||||||
if(!requestDetails.responseHeaders || !storage.eTagFiltering
|
if(!requestDetails.requestHeaders || !storage.eTagFiltering
|
||||||
|| storage.localHostsSkipping && checkLocalURL(new URL(requestDetails.url))) return {};
|
|| storage.localHostsSkipping && checkLocalURL(new URL(requestDetails.url))) return {};
|
||||||
for(let i=0; i < requestDetails.responseHeaders.length; i++) {
|
const requestHeaders = requestDetails.requestHeaders;
|
||||||
const header = requestDetails.responseHeaders[i];
|
|
||||||
|
|
||||||
if(header.name.toString().toLowerCase() !== "etag") {
|
const filteredHeaders = requestHeaders.filter(header => {
|
||||||
continue;
|
// Browsers may automatically send an If-None-Match header with
|
||||||
}
|
return header.name.toLowerCase() !== "if-none-match";
|
||||||
|
});
|
||||||
const etag = header.value.toLowerCase();
|
|
||||||
const w = etag.startsWith('w');
|
|
||||||
const quotes = etag.endsWith('"');
|
|
||||||
|
|
||||||
let len = etag.length;
|
|
||||||
if (w) len -= 2;
|
|
||||||
if (quotes) len -= 2;
|
|
||||||
|
|
||||||
// insert dummy etag
|
|
||||||
requestDetails.responseHeaders[i].value = generateDummyEtag(len, quotes, w);
|
|
||||||
|
|
||||||
|
if(filteredHeaders.length < requestHeaders.length) {
|
||||||
pushToLog(requestDetails.url, requestDetails.url, translate("eTag_filtering_log"));
|
pushToLog(requestDetails.url, requestDetails.url, translate("eTag_filtering_log"));
|
||||||
|
increaseBadged(false, requestDetails);
|
||||||
|
increaseGlobalURLCounter(1);
|
||||||
|
|
||||||
break;
|
return {requestHeaders: filteredHeaders};
|
||||||
}
|
}
|
||||||
|
|
||||||
return {responseHeaders: requestDetails.responseHeaders};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
browser.webRequest.onBeforeSendHeaders.addListener(
|
||||||
* Generates a random ETag.
|
|
||||||
*
|
|
||||||
* Must be ASCII characters placed between double quotes.
|
|
||||||
* See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag
|
|
||||||
*/
|
|
||||||
function generateDummyEtag(len, quotes = true, w = false) {
|
|
||||||
let rtn = randomASCII(len);
|
|
||||||
|
|
||||||
if (quotes) rtn = '"' + rtn + '"';
|
|
||||||
if (w) rtn = 'W/' + rtn;
|
|
||||||
|
|
||||||
return rtn;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Since Firefox 85, eTags can no longer be
|
|
||||||
* used for tracking users over multiple sites.
|
|
||||||
*/
|
|
||||||
if(getBrowser() !== "Firefox") {
|
|
||||||
browser.webRequest.onHeadersReceived.addListener(
|
|
||||||
eTagFilter,
|
eTagFilter,
|
||||||
{urls: ["<all_urls>"]},
|
{urls: ["<all_urls>"]},
|
||||||
["blocking", "responseHeaders"]
|
["blocking", "requestHeaders"]
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|||||||
@@ -17,45 +17,35 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*jshint esversion: 6 */
|
/*jshint esversion: 6 */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This script is responsible for listen on history changes.
|
* This script is responsible for listen on history changes.
|
||||||
* This technique is often used to inject tracking code into the location bar,
|
* This technique is often used to inject tracking code into the location bar,
|
||||||
* because all feature events will use the updated URL.
|
* because all feature events will use the updated URL.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
browser.webNavigation.onHistoryStateUpdated.addListener(historyCleaner);
|
|
||||||
|
|
||||||
function historyListenerStart() {
|
function historyListenerStart() {
|
||||||
|
if(storage.historyListenerEnabled) {
|
||||||
|
browser.webNavigation.onHistoryStateUpdated.addListener(historyCleaner);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function that is triggered on history changes. Injects script into page
|
* Function that is triggered on history changes. Injects script into page
|
||||||
* to clean links that were pushed to the history stack with the
|
* to clean links that were pushed to the history stack with the
|
||||||
* history.replaceState method.
|
* history.replaceState method.
|
||||||
* @param {state object} details The state object is a JavaScript object
|
* @param {state object} details The state object is a JavaScript object
|
||||||
* which is associated with the new history entry created by replaceState()
|
* which is associated with the new history entry created by replaceState()
|
||||||
*/
|
*/
|
||||||
function historyCleaner(details) {
|
function historyCleaner(details) {
|
||||||
if (storage.globalStatus && storage.historyListenerEnabled) {
|
if(storage.globalStatus) {
|
||||||
const urlBefore = details.url;
|
const urlBefore = details.url;
|
||||||
const urlAfter = pureCleaning(details.url);
|
const urlAfter = pureCleaning(details.url);
|
||||||
|
|
||||||
if (urlBefore !== urlAfter) {
|
if(urlBefore !== urlAfter) {
|
||||||
browser.scripting.executeScript({
|
browser.tabs.executeScript(details.tabId, {
|
||||||
target: {
|
frameId: details.frameId,
|
||||||
tabId: details.tabId,
|
code: 'history.replaceState({state: "cleaned_history"},"",'+JSON.stringify(urlAfter)+');'
|
||||||
frameIds: [
|
}).then(() => {}, onError);
|
||||||
details.frameId
|
|
||||||
]
|
|
||||||
},
|
|
||||||
func: (url) => history.replaceState({state: null}, "", url),
|
|
||||||
args: [
|
|
||||||
urlAfter
|
|
||||||
]
|
|
||||||
}).then(() => {
|
|
||||||
}, onError);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ var elProgressbar_blocked = document.getElementById('progress_blocked');
|
|||||||
var elProgressbar_non_blocked = document.getElementById('progress_non_blocked');
|
var elProgressbar_non_blocked = document.getElementById('progress_non_blocked');
|
||||||
var elTotal = document.getElementById('statistics_total_elements');
|
var elTotal = document.getElementById('statistics_total_elements');
|
||||||
var globalPercentage = 0;
|
var globalPercentage = 0;
|
||||||
var cleanedCounter;
|
var globalCounter;
|
||||||
var totalCounter;
|
var globalurlcounter;
|
||||||
var globalStatus;
|
var globalStatus;
|
||||||
var badgedStatus;
|
var badgedStatus;
|
||||||
var hashStatus;
|
var hashStatus;
|
||||||
@@ -47,19 +47,19 @@ function init()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the cleanedCounter and totalCounter value from the storage
|
* Get the globalCounter and globalurlcounter value from the storage
|
||||||
*/
|
*/
|
||||||
function changeStatistics()
|
function changeStatistics()
|
||||||
{
|
{
|
||||||
globalPercentage = ((cleanedCounter/totalCounter)*100).toFixed(3);
|
globalPercentage = ((globalCounter/globalurlcounter)*100).toFixed(3);
|
||||||
|
|
||||||
if(isNaN(Number(globalPercentage))) globalPercentage = 0;
|
if(isNaN(Number(globalPercentage))) globalPercentage = 0;
|
||||||
|
|
||||||
element.textContent = cleanedCounter.toLocaleString();
|
element.textContent = globalCounter.toLocaleString();
|
||||||
elGlobalPercentage.textContent = globalPercentage+"%";
|
elGlobalPercentage.textContent = globalPercentage+"%";
|
||||||
elProgressbar_blocked.style.width = globalPercentage+'%';
|
elProgressbar_blocked.style.width = globalPercentage+'%';
|
||||||
elProgressbar_non_blocked.style.width = (100-globalPercentage)+'%';
|
elProgressbar_non_blocked.style.width = (100-globalPercentage)+'%';
|
||||||
elTotal.textContent = totalCounter.toLocaleString();
|
elTotal.textContent = globalurlcounter.toLocaleString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -161,12 +161,12 @@ function setSwitchButton(id, varname)
|
|||||||
function resetGlobalCounter(){
|
function resetGlobalCounter(){
|
||||||
browser.runtime.sendMessage({
|
browser.runtime.sendMessage({
|
||||||
function: "setData",
|
function: "setData",
|
||||||
params: ['cleanedCounter', 0]
|
params: ['globalCounter', 0]
|
||||||
}).catch(handleError);
|
}).catch(handleError);
|
||||||
|
|
||||||
browser.runtime.sendMessage({
|
browser.runtime.sendMessage({
|
||||||
function: "setData",
|
function: "setData",
|
||||||
params: ['totalCounter', 0]
|
params: ['globalurlcounter', 0]
|
||||||
}).catch(handleError);
|
}).catch(handleError);
|
||||||
|
|
||||||
browser.runtime.sendMessage({
|
browser.runtime.sendMessage({
|
||||||
@@ -174,15 +174,15 @@ function resetGlobalCounter(){
|
|||||||
params: []
|
params: []
|
||||||
}).catch(handleError);
|
}).catch(handleError);
|
||||||
|
|
||||||
cleanedCounter = 0;
|
globalCounter = 0;
|
||||||
totalCounter = 0;
|
globalurlcounter = 0;
|
||||||
|
|
||||||
changeStatistics();
|
changeStatistics();
|
||||||
}
|
}
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
loadData("cleanedCounter")
|
loadData("globalCounter")
|
||||||
.then(() => loadData("totalCounter"))
|
.then(() => loadData("globalurlcounter"))
|
||||||
.then(() => loadData("globalStatus"))
|
.then(() => loadData("globalStatus"))
|
||||||
.then(() => loadData("badgedStatus"))
|
.then(() => loadData("badgedStatus"))
|
||||||
.then(() => loadData("hashStatus"))
|
.then(() => loadData("hashStatus"))
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ function _cleaning(url, quiet = false) {
|
|||||||
|
|
||||||
if (!quiet) {
|
if (!quiet) {
|
||||||
//Add Fields form Request to global url counter
|
//Add Fields form Request to global url counter
|
||||||
increaseTotalCounter(URLbeforeReplaceCount);
|
increaseGlobalURLCounter(URLbeforeReplaceCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let i = 0; i < providers.length; i++) {
|
for (let i = 0; i < providers.length; i++) {
|
||||||
|
|||||||
@@ -132,7 +132,8 @@ function getData() {
|
|||||||
}
|
}
|
||||||
}).catch(handleError);
|
}).catch(handleError);
|
||||||
|
|
||||||
loadData("historyListenerEnabled")
|
loadData("contextMenuEnabled")
|
||||||
|
.then(() => loadData("historyListenerEnabled"))
|
||||||
.then(() => loadData("localHostsSkipping"))
|
.then(() => loadData("localHostsSkipping"))
|
||||||
.then(() => loadData("referralMarketing"))
|
.then(() => loadData("referralMarketing"))
|
||||||
.then(() => loadData("domainBlocking"))
|
.then(() => loadData("domainBlocking"))
|
||||||
@@ -141,24 +142,11 @@ function getData() {
|
|||||||
.then(() => {
|
.then(() => {
|
||||||
changeSwitchButton("localHostsSkipping", "localHostsSkipping");
|
changeSwitchButton("localHostsSkipping", "localHostsSkipping");
|
||||||
changeSwitchButton("historyListenerEnabled", "historyListenerEnabled");
|
changeSwitchButton("historyListenerEnabled", "historyListenerEnabled");
|
||||||
|
changeSwitchButton("contextMenuEnabled", "contextMenuEnabled");
|
||||||
changeSwitchButton("referralMarketing", "referralMarketing");
|
changeSwitchButton("referralMarketing", "referralMarketing");
|
||||||
changeSwitchButton("domainBlocking", "domainBlocking");
|
changeSwitchButton("domainBlocking", "domainBlocking");
|
||||||
changeSwitchButton("pingBlocking", "pingBlocking");
|
changeSwitchButton("pingBlocking", "pingBlocking");
|
||||||
changeSwitchButton("eTagFiltering", "eTagFiltering");
|
changeSwitchButton("eTagFiltering", "eTagFiltering");
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
/**
|
|
||||||
* Since Firefox 85, eTags can no longer be
|
|
||||||
* used for tracking users over multiple sites.
|
|
||||||
*/
|
|
||||||
browser.runtime.sendMessage({
|
|
||||||
function: "getBrowser",
|
|
||||||
params: []
|
|
||||||
}).then(resp => {
|
|
||||||
if(resp.response === "Firefox") {
|
|
||||||
document.getElementById('etag_p').remove();
|
|
||||||
}
|
|
||||||
}, null);
|
|
||||||
}).catch(handleError);
|
}).catch(handleError);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -217,6 +205,7 @@ function setText() {
|
|||||||
document.getElementById('types_label').innerHTML = translate('setting_types_label');
|
document.getElementById('types_label').innerHTML = translate('setting_types_label');
|
||||||
document.getElementById('save_settings_btn').textContent = translate('settings_html_save_button');
|
document.getElementById('save_settings_btn').textContent = translate('settings_html_save_button');
|
||||||
document.getElementById('save_settings_btn').setAttribute('title', translate('settings_html_save_button_title'));
|
document.getElementById('save_settings_btn').setAttribute('title', translate('settings_html_save_button_title'));
|
||||||
|
injectText("context_menu_enabled", "context_menu_enabled");
|
||||||
document.getElementById('history_listener_enabled').innerHTML = translate('history_listener_enabled');
|
document.getElementById('history_listener_enabled').innerHTML = translate('history_listener_enabled');
|
||||||
injectText("local_hosts_skipping", "local_hosts_skipping");
|
injectText("local_hosts_skipping", "local_hosts_skipping");
|
||||||
document.getElementById('export_settings_btn_text').textContent = translate('setting_html_export_button');
|
document.getElementById('export_settings_btn_text').textContent = translate('setting_html_export_button');
|
||||||
|
|||||||
@@ -63,13 +63,6 @@ function storageDataAsString(key) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete key from browser storage.
|
|
||||||
*/
|
|
||||||
function deleteFromDisk(key) {
|
|
||||||
browser.storage.local.remove(key).catch(handleError);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save multiple keys on the disk.
|
* Save multiple keys on the disk.
|
||||||
* @param {String[]} keys
|
* @param {String[]} keys
|
||||||
@@ -86,7 +79,7 @@ function saveOnDisk(keys) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Schedule to save a key to disk in 60 seconds.
|
* Schedule to save a key to disk in 30 seconds.
|
||||||
* @param {String} key
|
* @param {String} key
|
||||||
*/
|
*/
|
||||||
function deferSaveOnDisk(key) {
|
function deferSaveOnDisk(key) {
|
||||||
@@ -95,20 +88,13 @@ function deferSaveOnDisk(key) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
browser.alarms.create("deferSaveOnDisk", {
|
setTimeout(function () {
|
||||||
delayInMinutes: 1
|
|
||||||
});
|
|
||||||
|
|
||||||
hasPendingSaves = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
browser.alarms.onAlarm.addListener(function (alarmInfo) {
|
|
||||||
if (alarmInfo.name === "deferSaveOnDisk") {
|
|
||||||
saveOnDisk(Array.from(pendingSaves));
|
saveOnDisk(Array.from(pendingSaves));
|
||||||
pendingSaves.clear();
|
pendingSaves.clear();
|
||||||
hasPendingSaves = false;
|
hasPendingSaves = false;
|
||||||
}
|
}, 30000);
|
||||||
});
|
hasPendingSaves = true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start sequence for ClearURLs.
|
* Start sequence for ClearURLs.
|
||||||
@@ -122,6 +108,12 @@ function genesis() {
|
|||||||
|
|
||||||
//Set correct icon on startup
|
//Set correct icon on startup
|
||||||
changeIcon();
|
changeIcon();
|
||||||
|
|
||||||
|
// Start the context_menu
|
||||||
|
contextMenuStart();
|
||||||
|
|
||||||
|
// Start history listener
|
||||||
|
historyListenerStart();
|
||||||
}, handleError);
|
}, handleError);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,20 +159,6 @@ function setData(key, value) {
|
|||||||
case "logLimit":
|
case "logLimit":
|
||||||
storage[key] = Math.max(0, Number(value));
|
storage[key] = Math.max(0, Number(value));
|
||||||
break;
|
break;
|
||||||
case "globalurlcounter":
|
|
||||||
// migrate from old key
|
|
||||||
storage["totalCounter"] = value;
|
|
||||||
delete storage[key];
|
|
||||||
deleteFromDisk(key);
|
|
||||||
saveOnExit();
|
|
||||||
break;
|
|
||||||
case "globalCounter":
|
|
||||||
// migrate from old key
|
|
||||||
storage["cleanedCounter"] = value;
|
|
||||||
delete storage[key];
|
|
||||||
deleteFromDisk(key);
|
|
||||||
saveOnExit();
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
storage[key] = value;
|
storage[key] = value;
|
||||||
}
|
}
|
||||||
@@ -208,8 +186,8 @@ function initSettings() {
|
|||||||
storage.dataHash = "";
|
storage.dataHash = "";
|
||||||
storage.badgedStatus = true;
|
storage.badgedStatus = true;
|
||||||
storage.globalStatus = true;
|
storage.globalStatus = true;
|
||||||
storage.totalCounter = 0;
|
storage.globalurlcounter = 0;
|
||||||
storage.cleanedCounter = 0;
|
storage.globalCounter = 0;
|
||||||
storage.hashStatus = "error";
|
storage.hashStatus = "error";
|
||||||
storage.loggingStatus = false;
|
storage.loggingStatus = false;
|
||||||
storage.log = {"log": []};
|
storage.log = {"log": []};
|
||||||
@@ -217,13 +195,14 @@ function initSettings() {
|
|||||||
storage.badged_color = "#ffa500";
|
storage.badged_color = "#ffa500";
|
||||||
storage.hashURL = "https://rules2.clearurls.xyz/rules.minify.hash";
|
storage.hashURL = "https://rules2.clearurls.xyz/rules.minify.hash";
|
||||||
storage.ruleURL = "https://rules2.clearurls.xyz/data.minify.json";
|
storage.ruleURL = "https://rules2.clearurls.xyz/data.minify.json";
|
||||||
|
storage.contextMenuEnabled = true;
|
||||||
storage.historyListenerEnabled = true;
|
storage.historyListenerEnabled = true;
|
||||||
storage.localHostsSkipping = true;
|
storage.localHostsSkipping = true;
|
||||||
storage.referralMarketing = false;
|
storage.referralMarketing = false;
|
||||||
storage.logLimit = 100;
|
storage.logLimit = 100;
|
||||||
storage.domainBlocking = true;
|
storage.domainBlocking = true;
|
||||||
storage.pingBlocking = true;
|
storage.pingBlocking = true;
|
||||||
storage.eTagFiltering = false;
|
storage.eTagFiltering = true;
|
||||||
storage.watchDogErrorCount = 0;
|
storage.watchDogErrorCount = 0;
|
||||||
|
|
||||||
if (getBrowser() === "Firefox") {
|
if (getBrowser() === "Firefox") {
|
||||||
|
|||||||
@@ -114,16 +114,20 @@ function checkLocalURL(url) {
|
|||||||
* @return {int} Number of Parameters
|
* @return {int} Number of Parameters
|
||||||
*/
|
*/
|
||||||
function countFields(url) {
|
function countFields(url) {
|
||||||
return [...new URL(url).searchParams].length
|
return new URL(url).searchParams.entries.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extract the fragments from an url.
|
* Extract the fragments from an url.
|
||||||
* @param {URL} url URL as object
|
* @param {URL} url URL as object
|
||||||
* @return {URLHashParams} fragments as URLSearchParams object
|
* @return {URLSearchParams} fragments as URLSearchParams object
|
||||||
*/
|
*/
|
||||||
function extractFragments(url) {
|
function extractFragments(url) {
|
||||||
return new URLHashParams(url)
|
if (url.hash) {
|
||||||
|
return new URLSearchParams(url.hash.slice(1));
|
||||||
|
} else {
|
||||||
|
return new URLSearchParams();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -154,23 +158,23 @@ function loadOldDataFromStore() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Increase by {number} the total counter
|
* Increase by {number} the GlobalURLCounter
|
||||||
* @param {int} number
|
* @param {int} number
|
||||||
*/
|
*/
|
||||||
function increaseTotalCounter(number) {
|
function increaseGlobalURLCounter(number) {
|
||||||
if (storage.statisticsStatus) {
|
if (storage.statisticsStatus) {
|
||||||
storage.totalCounter += number;
|
storage.globalurlcounter += number;
|
||||||
deferSaveOnDisk('totalCounter');
|
deferSaveOnDisk('globalurlcounter');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Increase by one the cleaned counter
|
* Increase by one the URLCounter
|
||||||
*/
|
*/
|
||||||
function increaseCleanedCounter() {
|
function increaseURLCounter() {
|
||||||
if (storage.statisticsStatus) {
|
if (storage.statisticsStatus) {
|
||||||
storage.cleanedCounter++;
|
storage.globalCounter++;
|
||||||
deferSaveOnDisk('cleanedCounter');
|
deferSaveOnDisk('globalCounter');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,9 +185,9 @@ function changeIcon() {
|
|||||||
checkOSAndroid().then((res) => {
|
checkOSAndroid().then((res) => {
|
||||||
if (!res) {
|
if (!res) {
|
||||||
if (storage.globalStatus) {
|
if (storage.globalStatus) {
|
||||||
browser.action.setIcon({path: "img/clearurls_128x128.png"}).catch(handleError);
|
browser.browserAction.setIcon({path: "img/clearurls_128x128.png"}).catch(handleError);
|
||||||
} else {
|
} else {
|
||||||
browser.action.setIcon({path: "img/clearurls_gray_128x128.png"}).catch(handleError);
|
browser.browserAction.setIcon({path: "img/clearurls_gray_128x128.png"}).catch(handleError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -200,13 +204,13 @@ function setBadgedStatus() {
|
|||||||
let color = storage.badged_color;
|
let color = storage.badged_color;
|
||||||
if (storage.badged_color.charAt(0) !== '#')
|
if (storage.badged_color.charAt(0) !== '#')
|
||||||
color = '#' + storage.badged_color;
|
color = '#' + storage.badged_color;
|
||||||
browser.action.setBadgeBackgroundColor({
|
browser.browserAction.setBadgeBackgroundColor({
|
||||||
'color': color
|
'color': color
|
||||||
}).catch(handleError);
|
}).catch(handleError);
|
||||||
|
|
||||||
// Works only in Firefox: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/action/setBadgeTextColor#Browser_compatibility
|
// Works only in Firefox: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserAction/setBadgeTextColor#Browser_compatibility
|
||||||
if (getBrowser() === "Firefox") {
|
if (getBrowser() === "Firefox") {
|
||||||
browser.action.setBadgeTextColor({
|
browser.browserAction.setBadgeTextColor({
|
||||||
color: "#FFFFFF"
|
color: "#FFFFFF"
|
||||||
}).catch(handleError);
|
}).catch(handleError);
|
||||||
}
|
}
|
||||||
@@ -328,30 +332,3 @@ async function sha256(message) {
|
|||||||
|
|
||||||
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
|
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates a non-secure random ASCII string of length {@code len}.
|
|
||||||
*
|
|
||||||
* @returns non-secure random ASCII
|
|
||||||
*/
|
|
||||||
function randomASCII(len) {
|
|
||||||
return [...Array(len)].map(() => (~~(Math.random() * 36)).toString(36)).join('');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns an URLSearchParams as string.
|
|
||||||
* Does handle spaces correctly.
|
|
||||||
*/
|
|
||||||
function urlSearchParamsToString(searchParams) {
|
|
||||||
const rtn = []
|
|
||||||
|
|
||||||
searchParams.forEach((value, key) => {
|
|
||||||
if (value) {
|
|
||||||
rtn.push(key + '=' + value)
|
|
||||||
} else {
|
|
||||||
rtn.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
return rtn.join('&')
|
|
||||||
}
|
|
||||||
|
|||||||
21
core_js/utils/Multimap.d.ts
vendored
21
core_js/utils/Multimap.d.ts
vendored
@@ -1,21 +0,0 @@
|
|||||||
/**
|
|
||||||
* Models a multimap backed by a {@link Set}.
|
|
||||||
*/
|
|
||||||
export default class Multimap<K, V> implements Iterable<[K, V]> {
|
|
||||||
private _map;
|
|
||||||
private _size;
|
|
||||||
constructor();
|
|
||||||
get size(): number;
|
|
||||||
get(key: K): Set<V>;
|
|
||||||
put(key: K, value: V): boolean;
|
|
||||||
has(key: K): boolean;
|
|
||||||
hasEntry(key: K, value: V): boolean;
|
|
||||||
delete(key: K): boolean;
|
|
||||||
deleteEntry(key: K, value: V): boolean;
|
|
||||||
clear(): void;
|
|
||||||
entries(): IterableIterator<[K, V]>;
|
|
||||||
values(): IterableIterator<V>;
|
|
||||||
keys(): IterableIterator<K>;
|
|
||||||
forEach<T>(callback: (this: T | this, key: K, value: V, map: this) => void, thisArg?: T): void;
|
|
||||||
[Symbol.iterator](): IterableIterator<[K, V]>;
|
|
||||||
}
|
|
||||||
@@ -1,130 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
/*
|
|
||||||
* ClearURLs
|
|
||||||
* Copyright (c) 2017-2022 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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Models a multimap backed by a {@link Set}.
|
|
||||||
*/
|
|
||||||
class Multimap {
|
|
||||||
constructor() {
|
|
||||||
Object.defineProperty(this, "_map", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: void 0
|
|
||||||
});
|
|
||||||
Object.defineProperty(this, "_size", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: void 0
|
|
||||||
});
|
|
||||||
this._size = 0;
|
|
||||||
this._map = new Map();
|
|
||||||
}
|
|
||||||
get size() {
|
|
||||||
return this._size;
|
|
||||||
}
|
|
||||||
get(key) {
|
|
||||||
const values = this._map.get(key);
|
|
||||||
if (values) {
|
|
||||||
return new Set(values);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return new Set();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
put(key, value) {
|
|
||||||
let values = this._map.get(key);
|
|
||||||
if (!values) {
|
|
||||||
values = new Set();
|
|
||||||
}
|
|
||||||
const count = values.size;
|
|
||||||
values.add(value);
|
|
||||||
if (values.size === count) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
this._map.set(key, values);
|
|
||||||
this._size++;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
has(key) {
|
|
||||||
return this._map.has(key);
|
|
||||||
}
|
|
||||||
hasEntry(key, value) {
|
|
||||||
const values = this._map.get(key);
|
|
||||||
if (!values) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return values.has(value);
|
|
||||||
}
|
|
||||||
delete(key) {
|
|
||||||
const values = this._map.get(key);
|
|
||||||
if (values && this._map.delete(key)) {
|
|
||||||
this._size -= values.size;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
deleteEntry(key, value) {
|
|
||||||
const values = this._map.get(key);
|
|
||||||
if (values) {
|
|
||||||
if (!values.delete(value)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
this._size--;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
clear() {
|
|
||||||
this._map.clear();
|
|
||||||
this._size = 0;
|
|
||||||
}
|
|
||||||
entries() {
|
|
||||||
const self = this;
|
|
||||||
function* gen() {
|
|
||||||
for (const [key, values] of self._map.entries()) {
|
|
||||||
for (const value of values) {
|
|
||||||
yield [key, value];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return gen();
|
|
||||||
}
|
|
||||||
values() {
|
|
||||||
const self = this;
|
|
||||||
function* gen() {
|
|
||||||
for (const [, value] of self.entries()) {
|
|
||||||
yield value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return gen();
|
|
||||||
}
|
|
||||||
keys() {
|
|
||||||
return this._map.keys();
|
|
||||||
}
|
|
||||||
forEach(callback, thisArg) {
|
|
||||||
for (const [key, value] of this.entries()) {
|
|
||||||
callback.call(thisArg === undefined ? this : thisArg, key, value, this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[Symbol.iterator]() {
|
|
||||||
return this.entries();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
13
core_js/utils/URLHashParams.d.ts
vendored
13
core_js/utils/URLHashParams.d.ts
vendored
@@ -1,13 +0,0 @@
|
|||||||
/**
|
|
||||||
* Models a hash parameter of a given {@link URL}.
|
|
||||||
*/
|
|
||||||
export default class URLHashParams {
|
|
||||||
private _params;
|
|
||||||
constructor(url: URL);
|
|
||||||
append(name: string, value?: string | null): void;
|
|
||||||
delete(name: string): void;
|
|
||||||
get(name: string): string | null;
|
|
||||||
getAll(name: string): Set<string | null>;
|
|
||||||
keys(): IterableIterator<string>;
|
|
||||||
toString(): string;
|
|
||||||
}
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
/*
|
|
||||||
* ClearURLs
|
|
||||||
* Copyright (c) 2017-2022 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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Models a hash parameter of a given {@link URL}.
|
|
||||||
*/
|
|
||||||
class URLHashParams {
|
|
||||||
constructor(url) {
|
|
||||||
Object.defineProperty(this, "_params", {
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: void 0
|
|
||||||
});
|
|
||||||
this._params = new Multimap();
|
|
||||||
const hash = url.hash.slice(1);
|
|
||||||
const params = hash.split('&');
|
|
||||||
for (const p of params) {
|
|
||||||
const param = p.split('=');
|
|
||||||
if (!param[0])
|
|
||||||
continue;
|
|
||||||
const key = param[0];
|
|
||||||
let value = null;
|
|
||||||
if (param.length === 2 && param[1]) {
|
|
||||||
value = param[1];
|
|
||||||
}
|
|
||||||
this._params.put(key, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
append(name, value = null) {
|
|
||||||
this._params.put(name, value);
|
|
||||||
}
|
|
||||||
delete(name) {
|
|
||||||
this._params.delete(name);
|
|
||||||
}
|
|
||||||
get(name) {
|
|
||||||
const [first] = this._params.get(name);
|
|
||||||
if (first) {
|
|
||||||
return first;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
getAll(name) {
|
|
||||||
return this._params.get(name);
|
|
||||||
}
|
|
||||||
keys() {
|
|
||||||
return this._params.keys();
|
|
||||||
}
|
|
||||||
toString() {
|
|
||||||
const rtn = [];
|
|
||||||
this._params.forEach((key, value) => {
|
|
||||||
if (value) {
|
|
||||||
rtn.push(key + '=' + value);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
rtn.push(key);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return rtn.join('&');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -24,23 +24,20 @@
|
|||||||
*
|
*
|
||||||
* This watchdog restarts the whole Add-on, when the check fails.
|
* This watchdog restarts the whole Add-on, when the check fails.
|
||||||
*/
|
*/
|
||||||
|
const CHECK_INTERVAL = 60000;
|
||||||
const __dirtyURL = "https://clearurls.roebert.eu?utm_source=addon";
|
const __dirtyURL = "https://clearurls.roebert.eu?utm_source=addon";
|
||||||
const __cleanURL = new URL("https://clearurls.roebert.eu").toString();
|
const __cleanURL = new URL("https://clearurls.roebert.eu").toString();
|
||||||
|
|
||||||
browser.alarms.create("watchdog", {
|
setInterval(function() {
|
||||||
periodInMinutes: 1,
|
if(isStorageAvailable() && storage.globalStatus) {
|
||||||
});
|
if(new URL(pureCleaning(__dirtyURL, true)).toString() !== __cleanURL) {
|
||||||
|
|
||||||
browser.alarms.onAlarm.addListener(function (alarmInfo) {
|
|
||||||
if (alarmInfo.name === "watchdog" && isStorageAvailable() && storage.globalStatus) {
|
|
||||||
if (new URL(pureCleaning(__dirtyURL, true)).toString() !== __cleanURL) {
|
|
||||||
storage.watchDogErrorCount += 1;
|
storage.watchDogErrorCount += 1;
|
||||||
console.log(translate('watchdog', storage.watchDogErrorCount));
|
console.log(translate('watchdog', storage.watchDogErrorCount));
|
||||||
saveOnExit();
|
saveOnExit();
|
||||||
if (storage.watchDogErrorCount < 3) reload();
|
if(storage.watchDogErrorCount < 3) reload();
|
||||||
} else if (storage.watchDogErrorCount > 0) {
|
} else if(storage.watchDogErrorCount > 0){
|
||||||
storage.watchDogErrorCount = 0;
|
storage.watchDogErrorCount = 0;
|
||||||
saveOnExit();
|
saveOnExit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}, CHECK_INTERVAL);
|
||||||
|
|||||||
24
css/core.css
24
css/core.css
@@ -42,10 +42,6 @@ body {
|
|||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
table {
|
|
||||||
color: var(--page-fg-color) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.form-control,
|
.form-control,
|
||||||
.form-control:disabled,
|
.form-control:disabled,
|
||||||
.form-control:focus,
|
.form-control:focus,
|
||||||
@@ -79,20 +75,18 @@ table {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.btn-default {
|
.btn-default {
|
||||||
color: #333;
|
color:#333;
|
||||||
background-color: #fff;
|
background-color:#fff;
|
||||||
border-color: #ccc
|
border-color:#ccc
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-default.focus,
|
.btn-default.focus,
|
||||||
.btn-default:focus {
|
.btn-default:focus {
|
||||||
color: #333;
|
color:#333;
|
||||||
background-color: #e6e6e6;
|
background-color:#e6e6e6;
|
||||||
border-color: #8c8c8c
|
border-color:#8c8c8c
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-default:hover {
|
.btn-default:hover {
|
||||||
color: #333;
|
color:#333;
|
||||||
background-color: #e6e6e6;
|
background-color:#e6e6e6;
|
||||||
border-color: #adadad
|
border-color:#adadad
|
||||||
}
|
}
|
||||||
16
external_js/clipboard-helper.js
Normal file
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");
|
||||||
|
}
|
||||||
@@ -32,9 +32,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="container-fluid"
|
<div class="container-fluid"
|
||||||
style="min-width: 200px">
|
style="min-width: 200px;">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<nav class="col-sm-12 navbar-margin navbar navbar-dark bg-dark">
|
<nav class="col-sm-1 navbar-margin navbar navbar-dark bg-dark">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<span class="navbar-brand">
|
<span class="navbar-brand">
|
||||||
<span class="float-left"><img src="../img/clearurls.svg"
|
<span class="float-left"><img src="../img/clearurls.svg"
|
||||||
@@ -53,14 +53,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row" id="references_section">
|
<div class="row" id="references_section">
|
||||||
<div class="col-sm-4 offset-sm-4 text-center">
|
<div class="col-sm-1 text-center">
|
||||||
<a id="cleaning_tools" target="_blank"><span class="fas fa-tools" style="font-size: 1.5em; margin-right: 1em;"></span></a>
|
<a id="cleaning_tools" target="_blank"><span class="fas fa-tools" style="font-size: 1.5em; margin-right: 1em;"></span></a>
|
||||||
<a id="settings" target="_blank"><span class="fas fa-cog" style="font-size: 1.5em"></span></a>
|
<a id="settings" target="_blank"><span class="fas fa-cog" style="font-size: 1.5em"></span></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row" id="config_section">
|
<div class="row" id="config_section">
|
||||||
<div class="col-sm-4 offset-sm-4">
|
<div class="col-sm-1">
|
||||||
<h5><b id="configs_head"></b></h5>
|
<h5><b id="configs_head"></b></h5>
|
||||||
<label class="switch">
|
<label class="switch">
|
||||||
<input type="checkbox" id="globalStatus">
|
<input type="checkbox" id="globalStatus">
|
||||||
@@ -91,7 +91,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row" id="statistic_section">
|
<div class="row" id="statistic_section">
|
||||||
<div class="col-sm-4 offset-sm-4">
|
<div class="col-sm-1">
|
||||||
<h5><b id="statistics_head"></b></h5>
|
<h5><b id="statistics_head"></b></h5>
|
||||||
|
|
||||||
<div class="progress">
|
<div class="progress">
|
||||||
@@ -133,10 +133,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row" id="status_section">
|
<div class="row" id="status_section">
|
||||||
<div class="col-sm-4 offset-sm-4">
|
<div class="col-sm-1">
|
||||||
<h5><b id="rules_status_head"></b></h5>
|
<h5><b id="rules_status_head"></b></h5>
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<a href="https://gitlab.com/ClearURLs/rules/-/commits/master/data.min.json"
|
<a href="https://gitlab.com/anti-tracking/ClearURLs/rules/commits/master/data.min.json"
|
||||||
id="hashStatus" class="btn btn-primary btn-sm text-wrap" target="_blank"></a>
|
id="hashStatus" class="btn btn-primary btn-sm text-wrap" target="_blank"></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="clearfix"></div>
|
<div class="clearfix"></div>
|
||||||
@@ -145,7 +145,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<div class="row" id="log_section">
|
<div class="row" id="log_section">
|
||||||
<div class="col-sm-4 offset-sm-4">
|
<div class="col-sm-1">
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<a id="loggingPage" target="_blank"
|
<a id="loggingPage" target="_blank"
|
||||||
class="btn btn-default btn-sm btn-block text-wrap"></a>
|
class="btn btn-default btn-sm btn-block text-wrap"></a>
|
||||||
|
|||||||
@@ -136,6 +136,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
<span class="slider round"></span>
|
<span class="slider round"></span>
|
||||||
</label>
|
</label>
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
<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>
|
||||||
<p>
|
<p>
|
||||||
<label id="referral_marketing_enabled" style="font-weight: bold;"></label><br />
|
<label id="referral_marketing_enabled" style="font-weight: bold;"></label><br />
|
||||||
<label class="switch">
|
<label class="switch">
|
||||||
@@ -150,7 +157,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
<span class="slider round"></span>
|
<span class="slider round"></span>
|
||||||
</label>
|
</label>
|
||||||
</p>
|
</p>
|
||||||
<p id="etag_p">
|
<p>
|
||||||
<label id="eTag_filtering_enabled" style="font-weight: bold;"></label><br />
|
<label id="eTag_filtering_enabled" style="font-weight: bold;"></label><br />
|
||||||
<label class="switch">
|
<label class="switch">
|
||||||
<input type="checkbox" id="eTagFiltering">
|
<input type="checkbox" id="eTagFiltering">
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 3,
|
"manifest_version": 2,
|
||||||
"name": "ClearURLs",
|
"name": "ClearURLs",
|
||||||
"version": "1.28.0",
|
"version": "1.25.0",
|
||||||
"author": "Kevin Roebert",
|
"author": "Kevin Roebert",
|
||||||
"description": "__MSG_extension_description__",
|
"description": "__MSG_extension_description__",
|
||||||
"homepage_url": "https://docs.clearurls.xyz",
|
"homepage_url": "https://docs.clearurls.xyz",
|
||||||
"default_locale": "en",
|
"default_locale": "en",
|
||||||
"content_security_policy": {
|
"content_security_policy": "script-src 'self'; object-src 'none'",
|
||||||
"extension_pages": "script-src 'self'; object-src 'none'"
|
"applications": {
|
||||||
},
|
|
||||||
"browser_specific_settings": {
|
|
||||||
"gecko": {
|
"gecko": {
|
||||||
"id": "{74145f27-f039-47ce-a470-a662b129930a}"
|
"id": "{74145f27-f039-47ce-a470-a662b129930a}"
|
||||||
}
|
}
|
||||||
@@ -27,7 +25,8 @@
|
|||||||
"96": "img/clearurls_96x96.png",
|
"96": "img/clearurls_96x96.png",
|
||||||
"128": "img/clearurls_128x128.png"
|
"128": "img/clearurls_128x128.png"
|
||||||
},
|
},
|
||||||
"action": {
|
"browser_action": {
|
||||||
|
"browser_style": true,
|
||||||
"default_icon": {
|
"default_icon": {
|
||||||
"16": "img/clearurls_16x16.png",
|
"16": "img/clearurls_16x16.png",
|
||||||
"19": "img/clearurls_19x19.png",
|
"19": "img/clearurls_19x19.png",
|
||||||
@@ -45,6 +44,7 @@
|
|||||||
"default_popup": "html/popup.html"
|
"default_popup": "html/popup.html"
|
||||||
},
|
},
|
||||||
"permissions": [
|
"permissions": [
|
||||||
|
"<all_urls>",
|
||||||
"webRequest",
|
"webRequest",
|
||||||
"webRequestBlocking",
|
"webRequestBlocking",
|
||||||
"storage",
|
"storage",
|
||||||
@@ -52,18 +52,11 @@
|
|||||||
"contextMenus",
|
"contextMenus",
|
||||||
"webNavigation",
|
"webNavigation",
|
||||||
"tabs",
|
"tabs",
|
||||||
"downloads",
|
"downloads"
|
||||||
"scripting",
|
|
||||||
"alarms"
|
|
||||||
],
|
|
||||||
"host_permissions": [
|
|
||||||
"<all_urls>"
|
|
||||||
],
|
],
|
||||||
"background": {
|
"background": {
|
||||||
"scripts": [
|
"scripts": [
|
||||||
"browser-polyfill.js",
|
"browser-polyfill.js",
|
||||||
"core_js/utils/Multimap.js",
|
|
||||||
"core_js/utils/URLHashParams.js",
|
|
||||||
"core_js/message_handler.js",
|
"core_js/message_handler.js",
|
||||||
"external_js/ip-range-check.js",
|
"external_js/ip-range-check.js",
|
||||||
"core_js/tools.js",
|
"core_js/tools.js",
|
||||||
|
|||||||
Reference in New Issue
Block a user