📝 Added entire config directory for backup purposes

This commit is contained in:
z3rOR0ne 2022-11-03 00:09:22 -07:00
parent 4b38e59bb6
commit 9b946e2d14
11091 changed files with 1440953 additions and 0 deletions

View file

@ -0,0 +1,373 @@
Mozilla Public License Version 2.0
==================================
1. Definitions
--------------
1.1. "Contributor"
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
1.4. "Covered Software"
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
means this document.
1.9. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.12. "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
controls, is controlled by, or is under common control with You. For
purposes of this definition, "control" means (a) the power, direct
or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or (b) ownership of more than
fifty percent (50%) of the outstanding shares or beneficial
ownership of such entity.
2. License Grants and Conditions
--------------------------------
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
(a) under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
3. Responsibilities
-------------------
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
(a) such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.
5. Termination
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
************************************************************************
* *
* 6. Disclaimer of Warranty *
* ------------------------- *
* *
* Covered Software is provided under this License on an "as is" *
* basis, without warranty of any kind, either expressed, implied, or *
* statutory, including, without limitation, warranties that the *
* Covered Software is free of defects, merchantable, fit for a *
* particular purpose or non-infringing. The entire risk as to the *
* quality and performance of the Covered Software is with You. *
* Should any Covered Software prove defective in any respect, You *
* (not any Contributor) assume the cost of any necessary servicing, *
* repair, or correction. This disclaimer of warranty constitutes an *
* essential part of this License. No use of any Covered Software is *
* authorized under this License except under this disclaimer. *
* *
************************************************************************
************************************************************************
* *
* 7. Limitation of Liability *
* -------------------------- *
* *
* Under no circumstances and under no legal theory, whether tort *
* (including negligence), contract, or otherwise, shall any *
* Contributor, or anyone who distributes Covered Software as *
* permitted above, be liable to You for any direct, indirect, *
* special, incidental, or consequential damages of any character *
* including, without limitation, damages for lost profits, loss of *
* goodwill, work stoppage, computer failure or malfunction, or any *
* and all other commercial damages or losses, even if such party *
* shall have been informed of the possibility of such damages. This *
* limitation of liability shall not apply to liability for death or *
* personal injury resulting from such party's negligence to the *
* extent applicable law prohibits such limitation. Some *
* jurisdictions do not allow the exclusion or limitation of *
* incidental or consequential damages, so this exclusion and *
* limitation may not apply to You. *
* *
************************************************************************
8. Litigation
-------------
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
9. Miscellaneous
----------------
This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
10. Versions of the License
---------------------------
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
Exhibit A - Source Code Form License Notice
-------------------------------------------
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.
You may add additional accurate notices of copyright ownership.
Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------
This Source Code Form is "Incompatible With Secondary Licenses", as
defined by the Mozilla Public License, v. 2.0.

View file

@ -0,0 +1,30 @@
Decentraleyes (Chromium)
=============
A [web browser extension](https://decentraleyes.org) that emulates Content Delivery Networks to improve your online privacy. It intercepts traffic, finds supported resources locally, and injects them into the environment. All of this happens automatically, so no prior configuration is required. Feel free to use the following [testing utility](https://decentraleyes.org/test/) to find out if you are properly protected. For more information, please read this [basic introduction](https://git.synz.io/Synzvato/decentraleyes/wikis/Simple-Introduction).
> **Note:** Decentraleyes is no silver bullet, but it does prevent a lot of websites from making you send these kinds of requests. Ultimately, you can make Decentraleyes block requests for any missing CDN resources, too.
## Contributing Code
Suggestions in the form of **Issues**, and contributions in the form of **Merge Requests**, are highly welcome. Code **Forks** can be requested from within issues, or via email. You can use the contact details and public PGP key on the extension's [contact page](https://decentraleyes.org/contact/) to get in touch.
#### Prerequisites
* Chromium / Chrome 58 *(or higher)*.
> **Note:** If you want to contribute to the Firefox Quantum extension, please check out the ```master``` branch. If you are looking for the Firefox legacy extension codebase, please see the ```legacy``` branch.
#### Running the Code
Please read this [developer guide](https://developer.chrome.com/extensions/getstarted) for information on how to run the extension from source.
> **Important:** All tagged commits since 26 October 2016 are signed with GPG. It's likely best to ignore unsigned commits, unless you really know what you're doing. Please send an email if you have any questions or security concerns.
## Submitting Translations
Do you master a non-supported language? Please help out by translating this add-on on [Crowdin](https://crowdin.com/project/decentraleyes).
## License
[MPL-2.0](https://www.mozilla.org/MPL/2.0).

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "متقدم"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "إجمالي موارد الـ CDN اللتي تم حقنها محليا منذ التثبيت."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "عداد محلي للموارد المحقونة"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "إلغاء طلب الموارد إذا كانت متوفرة محليا."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "حظر طلبات الموارد المفقودة"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "الحيلولة دون تسرّب الطلبات الممنوعة الى شبكات التوصيل."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "تعطيل الجلب المسبق للرابط"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "أوقف الحماية لهذا الموقع"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "فعّل الحماية"
},
"extensionDescription": {
"description": "Extension description.",
"message": "يحميك من التتبع المرتبط بالوصول للمحتوى \"مجاني\"، مركزية."
},
"optionsTitle": {
"description": "Options title.",
"message": "الخيارات"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "إظهار عدد الموارد المحقونة على أيقونة الملحق."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "عرض مجموع الحقن على الأيقونة"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "مسح البيانات الحساسة من طلبات CDN المسموحة لتحسين الخصوصية."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "إزالة بيانات التعريف من الطلبات المسموحة"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "حدد النطاقات التي سوف يتم تجاهلها. إفصل المداخل المتعددة بـفاصلة منقوطة (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "لا تتفحص النطاقات"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "За напреднали"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Количество на местни вмъквания на ресурси от началото на инсталацията."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Брояч за местно вмъкнати ресурси"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Отмяна на прехванатата заявка, ако изисквания ресурс не е наличен на местно ниво."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Блокиране на заявки за липсващи ресурси"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Предотвратява изтичането на забранени заявки към мрежи за доставка."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Изключване на предварителното извличане на препратки"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Изключване на защитата за страницата"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Включване на защита"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Защитава ви от следене чрез свободна, централизирана доставка на съдържание."
},
"optionsTitle": {
"description": "Options title.",
"message": "Настройки"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Показване на броя на вмъкнатите ресурси в иконката на разширението."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Показване на броя на вмъкванията в иконката"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Изтриване на чувствителни данни от допустимите заявки от МДС за подобряване на неприкосновеността."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Премахване на метаданните от разрешени заявки"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Въведете домейни, които да се добавят в белия списък. Отделете стойностите с точка и запетая."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Изключване на домейни от проверки"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "উন্নততর"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "ইনস্টলেশনের পর থেকে স্থানীয়ভাবে কনটেন্ট ডেলিভারি নেটওয়ার্কের ইনজেক্টকৃত রিসোর্সের পরিমান।"
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "স্থানীয়ভাবে ইনজেক্টকৃত রিসোর্সের গণনা"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "প্রয়োজনীয় রিসোর্স স্থানীয়ভাবে না পেলে অনুরোধ বাতিল করো।"
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "নিখোঁজ রিসোর্সের জন্য অনুরোধগুলো বন্ধ করো"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "বিতরণ নেটওয়ার্কগুলোতে অনুরোধগুলি ফাঁস হওয়া থেকে প্রতিরোধ করো।"
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "লিঙ্ক প্রিফেচিং বন্ধ করো"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "এই সাইটের জন্য নিরাপত্তা চালু/বন্ধ করো"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "নিরাপত্তা চালু করো"
},
"extensionDescription": {
"description": "Extension description.",
"message": "\"ফ্রি\", কেন্দ্রীয় কন্টেন্ট ডেলিভারি থেকে তোমাকে রক্ষা করে।"
},
"optionsTitle": {
"description": "Options title.",
"message": "অপশন"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "আইকনে ইনজেক্টকৃত রিসোর্সের সংখ্যা দেখাও"
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "ইনজেকসন সংখ্যা আইকনে দেখাও"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "উন্নত গোপনীয়তার জন্য অনুমোদিত সিডিএন অনুরোধগুলি থেকে সংবেদনশীল ডেটা মুছো।"
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "বৈধ রিকোয়েস্ট থেকে মেটাডাটা সরাও"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "তাদের প্রবেশ তালিকাভুক্ত করার জন্য ডোমেনগুলো দাও। একাধিক ভুক্তি সেমি-কোলন দিয়ে পৃথক করো(;)।"
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "পরিদর্শন থেকে ডোমেনগুলো বাদ দাও"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Avançat"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Quantitat d'injeccions de recursos locals de xarxes de distribució de continguts des de la instal·lació"
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Comptador de recursos injectats localment"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Cancel·la les peticions interceptades si el recurs sol·licitat no està disponible localment."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Bloqueja peticions per falta de recursos"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Prevenir que que les peticions no permeses s'escapin cap a les xarxes de distribució."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Deshabilitar pre-càrrega d'enllaços"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Deshabilitar protecció per aquest lloc"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Habilitar protecció"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Us protegeix contra el seguiment mitjançant un lliurament de contingut \"gratuït\" i centralitzat."
},
"optionsTitle": {
"description": "Options title.",
"message": "Opcions"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Mostra el número de recursos injectats a la icona de l'extensió"
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Mostrar la quantitat d'injeccions a la icona"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Esborrar dades sensibles de peticions CDN autorizades para millorar la privacitat."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Esborrar metadades de peticions permeses"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Introduir els dominis que seran ignorats. Separar més d'una entrada amb punt i coma (;)"
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Excloure dominis de les inspeccions"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Rozšířené"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Počet lokální uložených zdrojů vložených od instalace."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Počítadlo vložených lokálních zdrojů"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Zrušit požadavky na sledované zdroje, pokud nejsou lokálně dostupné."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Blokovat požadavky na chybějící zdroje"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Předejte nepovoleným požadavkům do sítí pro doručování obsahu."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Zakázat přednačítání odkazů"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Zakázat ochranu na této stránce"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Zapnout ochranu"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Chrání před sledováním skrze centrálně doručovaný obsah."
},
"optionsTitle": {
"description": "Options title.",
"message": "Možnosti"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Zobrazit počet vložených zdrojů u ikony rozšíření."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Zobrazovat počet vložení u ikony"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Pro zlepšení soukromí odstraní citlivá data z povolených požadavků na CDN."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Odstranit metadata z povolených požadavků"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Zadejte domény pro jejich vynechání z kontroly. Jednotlivé domény oddělujte pomocí středníků (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Nekontrolovat pro domény"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Avanceret"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Antal injektioner af lokale ressourcer siden installation."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Optælling af lokalt leverede ressourcer"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Annullerer en forespørgsel hvis den forespurgte ressource ikke findes lokalt."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Bloker forespørgsler efter manglende ressourcer"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Forhindrer ikke-tilladte forespørgsler i at blive lækket til leverandør-netværk."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Deaktiver forhåndshentning af link"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Deaktiver beskyttelse for dette websted"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Aktiver beskyttelse"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Beskytter dig imod sporing af \"gratis\", centraliserede indholdsleverandører."
},
"optionsTitle": {
"description": "Options title.",
"message": "Indstillinger"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Viser antallet af injicerede ressourcer på udvidelsens ikon."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Vis antal af injektioner på ikon"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Sletter følsomme data fra tilladte CDN-forespørgsler for at mindste eksponeringen."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Fjern metadata fra tilladte forespørgsler"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Tilføj domæner der ikke skal inspiceres. Separer flere med semikolon (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Udeluk disse domæner fra inspektion"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Erweitert"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Anzahl der lokalen Injektionen von den CDN-Ressourcen seit der Installation."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Zähler für lokal injizierte Ressourcen"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Abgefangene Anforderung unterbinden, falls angeforderte Datei nicht lokal verfügbar ist."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Blockiere Anfordern fehlender Inhalte"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Verhindere, dass unerlaubte Anfragen an die CDNs durchsickern."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Deaktiviere link prefetching"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Schutz für diese Seite deaktivieren"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Schutz aktivieren"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Schützt vor Tracking durch \"gratis\", zentralisiertes Abliefern von Content."
},
"optionsTitle": {
"description": "Options title.",
"message": "Einstellungen"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Zeige die Anzahl der injizierten Ressourcen im Erweiterungs-Icon."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Zeige Anzahl der Injektionen am Icon"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Lösche sensible Daten aus erlaubten CDN-Anfragen zur Verbesserung des Datenschutzes."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Entferne Metadaten von erlaubten Anfragen"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Gebe zu ignorierende Domains an. Trenne mehrere Einträge durch Semikolons (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Domains von Prüfung ausschließen"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Για προχωρημένους"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Ποσοστό εμβόλιμων τοπικών πόρων Δικτύων Παροχής Περιεχομένου από την στιγμή της εγκατάστασης."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Μετρητής εμβόλιμων τοπικών πόρων"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Ακύρωση απομακρυσμένης αίτησης, αν ο απαιτούμενος πόρος δεν είναι τοπικά διαθέσιμος."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Μπλοκ αιτήσεων για ανύπαρκτους πόρους"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Αποτροπή διαρροής αποκλεισμένων κλήσεων προς δίκτυα διανομής."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Απενεργοποίηση πρόωρης φόρτωσης συνδέσμου"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Απενεργοποίηση προστασίας για αυτή τη σελίδα"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Ενεργοποίηση προστασίας"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Προστατεύει από παρακολούθηση μέσω \"δωρεάν\" διανομής περιεχόμενου."
},
"optionsTitle": {
"description": "Options title.",
"message": "Επιλογές"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Προβολή του αριθμού των εμβόλιμων πόρων στο εικονίδιο του πρόσθετου."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Προβολή αριθμού εμβόλιμων πόρων στο εικονίδιο"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Διαγραφή ευαίσθητων δεδομένων από CDN αιτήσεις για ενίσχυση ασφάλειας."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Διαγραφή μεταδεδομένων από επιτρεπόμενες κλήσεις"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Εισαγωγή διευθύνσεων στις επιτρεπόμενες. Διαχωρίστε πολλαπλές καταχωρήσεις με ερωτηματικά (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Εξαίρεση διευθύνσεων από επιθεωρήσεις"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Advanced"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Amount of local Content Delivery Network resource injections since installation."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Counter for locally injected resources"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Cancel intercepted request if the required resource is not locally available."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Block requests for missing resources"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Prevent disallowed requests from leaking out to delivery networks."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Disable link prefetching"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Disable protection for this site"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Enable protection"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Protects you against tracking through \"free\", centralised, content delivery."
},
"optionsTitle": {
"description": "Options title.",
"message": "Options"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Show the number of injected resources on the extension icon."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Display injection counts on icon"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Erase sensitive data from allowed CDN-requests for improved privacy."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Strip metadata from allowed requests"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Enter domains to whitelist them. Separate multiple entries with semi-colons (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Exclude domains from inspections"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Advanced"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Amount of local Content Delivery Network resource injections since installation."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Counter for locally injected resources"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Cancel intercepted request if the required resource is not locally available."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Block requests for missing resources"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Prevent disallowed requests from leaking out to delivery networks."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Disable link prefetching"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Disable protection for this site"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Enable protection"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Protects you against tracking through \"free\", centralized, content delivery."
},
"optionsTitle": {
"description": "Options title.",
"message": "Options"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Show the number of injected resources on the extension icon."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Display injection counts on icon"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Erase sensitive data from allowed CDN requests for improved privacy."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Strip metadata from allowed requests"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Enter domains to whitelist them. Separate multiple entries with semi-colons (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Exclude domains from inspections"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Spertula"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Kvanto de lokaj CDN-risurcoj enmetitaj ekde instaliĝo."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Nombro de loke enmetitaj rimedoj"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Bloki petojn interkaptitajn se la petitan risurcon ne loke haveblas."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Bloki petojn por mankaj risurcoj"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Bloki malpermesatajn petojn por preventi tralasojn al enhav-proviz-retoj."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Ne antaŭlegi ligilojn"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Malaktivigi protekton por tiu ĉi retejo"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Aktivigi protekton"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Decentraleyes protektas vin kontraŭ sekvado per senkostaj, centraj enhav-proviz-retoj."
},
"optionsTitle": {
"description": "Options title.",
"message": "Elektebloj"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Montri nombron da enmetataj risurcoj sur la aldonaĵa piktogramo."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Montri nombrilon sur piktogramo"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Forviŝi delikatajn datumojn el permesataj CDN-petoj por plibonigi privatecon."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Forigi metadatumojn el permesataj petoj"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Entajpu demajnojn, kiujn Decentraleyes ne devas inspekti. Disigu domajnojn per punktokomoj (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Neinspektendaj domajnoj"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Avanzado"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Cantidad de inyecciones de recursos locales de redes de distribución de contenidos desde la instalación."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Contador de recursos inyectados localmente"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Cancelar las peticiones interceptadas cuando el recurso requerido no se encuentra localmente."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Bloquear peticiones de recursos faltantes"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Impedir que las peticiones no permitidas se escapen hacia redes de distribución."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Deshabilitar pre-carga de enlaces"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Deshabilitar protección en este sitio"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Habilitar protección"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Protege contra el rastreo con la entrega centralizada y «gratuita» de contenido."
},
"optionsTitle": {
"description": "Options title.",
"message": "Opciones"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Mostrar el número de recursos inyectados en el icono de la extensión."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Mostrar la cantidad de inyecciones en el icono"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Borrar datos sensibles de peticiones CDN autorizadas para mejorar la privacidad."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Borrar metadatos de peticiones permitidas"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Ingresa los dominios que serán ignorados. Separa múltiples entradas con punto y coma (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Excluir dominios de inspecciones"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Edasijõudnuile"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Kohalike sisuedastusvõrkude ressursisisestuste arv alates installimisest."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Kohalikult sisestatud ressursside loendur"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Tühista kinnipüütud taotlus, kui vajaminev ressurss ei ole kohalikult saadaval."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Blokeeri puuduvate ressursside taotlused"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Väldi keelatud taotluste väljalekkimist edastusvõrkudele."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Keela lingi eellaadimine"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Keela kaitse sellel saidil"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Luba kaitse"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Kaitseb sind \"tasuta\", tsentraliseeritud sisu edastamisest tuleneva jälitamise vastu."
},
"optionsTitle": {
"description": "Options title.",
"message": "Valikud"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Kuva sisestatud ressursside arvu laienduse ikoonil."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Kuva sisestuste arvu ikoonil"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Kustuta tundlikud andmed lubatud sisuedastusvõrkude taotlustest parema privaatsuse saamiseks."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Eemalda lubatud taotlustelt metaandmed"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Sisesta domeenid, et lisada need valgesse nimekirja. Eralda mitu üksust semikoolonitega (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Välista uuritavaid domeene"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Edistynyt"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Paikallisilla resursseilla korvattujen pyyntöjen määrä asennuksen jälkeen."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Paikallisesti korvattua resurssia"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Peru kaapattu pyyntö, jos tarvittavaa resurssia ei ole saatavilla paikallisesti."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Estä pyynnöt puuttuviin resursseihin"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Estä kiellettyjä pyyntöjä vuotamasta jakeluverkkoihin."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Poista linkkien esihaku käytöstä"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Poista suojaus käytöstä tällä sivustolla"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Ota suojaus käyttöön"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Suojaa sinua \"ilmaisen\", keskitetyn sisällön jakelun välityksellä tapahtuvalta seurannalta."
},
"optionsTitle": {
"description": "Options title.",
"message": "Asetukset"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Näyttää korvattujen resurssien määrän lisäosan kuvakkeessa."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Näytä korvausmäärä kuvakkeessa"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Poista arkaluontoiset tiedot jakeluverkkojen pyynnöistä yksityisyyden parantamiseksi."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Poista metatiedot sallituista pyynnöistä"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Syötä verkkotunnukset, joita ei tarkisteta. Erota useat verkkotunnukset puolipisteillä (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Tarkistuksesta poissuljettavat verkkotunnukset"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Avancé"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Quantité de ressources CDN injectées localement depuis l'installation."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Compteur de ressources injectées localement"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Annule la requête interceptée si la ressource requise n'est pas disponible localement."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Bloquer les requêtes de ressources manquantes"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Empêche que des requêtes non autorisées fuient vers les réseaux de distribution."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Désactiver le préchargement de lien"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Désactiver la protection pour ce site"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Activer la protection"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Protège du pistage lié aux diffuseurs de contenus «gratuits», centralisés."
},
"optionsTitle": {
"description": "Options title.",
"message": "Options"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Affiche le nombre de ressources injectées sur l'icône d'extension."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Afficher le nombre dinjections sur licône"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Efface les données sensibles des demandes de CDN autorisées pour améliorer la confidentialité."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Découper les métadonnées des requêtes autorisées"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Entrez des domaines pour la liste blanche. Séparez les entrées multiples par des points-virgules (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Exclure les domaines des inspections"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "מתקדם"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "כמות תוכן מקומי שהוזרק במקום רשתות אספקת תוכן מאז התקנת התוכנה."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "מונה משאבים מקומיים שהוזרקו"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "בטל בקשה מיורטת, אם המשאב הדרוש אינו זמין באופן מקומי."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "חסום בקשות למשאבים חסרים"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "מנע הדלפה של בקשות לא-מאושרות לתוך רשתות אספקת תכנים."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "בטל הורדה-מוקדמת של לינקים"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "נטרול ההגנה עבור אתר זה"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "הפעלת הגנה"
},
"extensionDescription": {
"description": "Extension description.",
"message": "מגן עליך מפני מעקב המבוצע דרך רשתות אספקת תוכן ריכוזיות ו\"חינמיות\"."
},
"optionsTitle": {
"description": "Options title.",
"message": "אפשרויות"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "הצג את מספר התכנים המוזרקים על סמלון התוספת."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "הצג מונה הזרקות תוכן על סמל התכנה"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "להגברת הפרטיות, מחק מידע רגיש מבקשות מאושרות לרשתות אספקת תוכן."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "מחק מטא-דאטה מבקשות שאושרו"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "הזן דומיינים שברצונך להוסיף לרשימת התרים. הפרד ערכים מרובים באמצעות נקודה-פסיק (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "אל תכלול דומיינים כחלק מהבדיקה"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Napredno"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Broj lokalno umetnutih resursa iz mreža za dostavu sadržaja (CDN-ova) od instalacije."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Brojač lokalno umetnutih resursa"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Otkazuje zahtjeve, ako potrebni resurs nije dostupan lokalno."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Blokiraj zahtjeve za resurse koji nedostaju"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Onemogući da nedopušteni zahtjevi iscure do mreža za dostavu sadržaja (CDN-ova)."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Onemogući predučitavanje poveznica"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Onemogući zaštitu na ovoj stranici"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Omogući zaštitu"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Štiti Vas od praćenja kroz \"besplatnu\", centraliziranu dostavu sadržaja."
},
"optionsTitle": {
"description": "Options title.",
"message": "Opcije"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Prikazuje broj umetnutih resursa na ikoni proširenja."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Prikaži broj umetanja na ikoni"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Za poboljšanu privatnost, briše senzitivne podatke iz dopuštenih zahtjeva za CDN-ove."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Ukloni meta-podatke iz dopuštenih zahtjeva"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Unesite domene za njihovo dodavanje na listu dopuštenih domena. Višestruke unose odvojite točka-zarezom (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Izuzmi domene od inspekcije"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Haladó"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Telepítés óta beszúrt helyi Content Delivery Network erőforrások száma."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Helyből beszúrt erőforrások számlálója"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Megszakított kérések blokkolása, amennyiben a kért erőforrás nem érhető el helyben."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Hiányzó erőforrások blokkolása"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Letiltott kérések kiszivárgásának megakadályozása."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Link prefetching letiltása"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Védelem kikapcsolása ezen az oldalon"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Védelem bekapcsolása"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Véd attól, hogy az „ingyenes”, centralizált tartalomszolgáltatók kövessenek."
},
"optionsTitle": {
"description": "Options title.",
"message": "Beállítások"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "A beszúrt erőforrások számának megjelenítése a bővítmény ikonján."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Beszúrások számlálójának megjelenítése az ikonon"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Érzékeny adatok törlése az engedélyezett CDN kérésekből."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Metaadatok törlése az engedélyezett kérésekből"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Írj be domaineket, amik ne legyenek megvizsgálva. Az elemeket pontosvesszővel (;) kell elválasztani."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Domainek vizsgálatának elhagyása"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Canggih"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Jumlah penyematan sumber daya Jaringan Distribusi Konten lokal sejak pemasangan."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Jumlah sumber daya lokal yang disematkan"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Batalkan pencegatan permintaan jika sumber daya yang dibutuhkan tidak tersedia secara lokal."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Blokir permintaan untuk sumber daya yang hilang"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Mencegah permintaan yang tidak diizinkan bocor ke jaringan pengiriman."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Nonaktifkan tautan pra pengambilan"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Nonaktifkan perlindungan untuk situs web ini"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Aktifkan perlindungan"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Melindungi Anda dari pelacakan distribusi konten \"gratis\" dan terpusat."
},
"optionsTitle": {
"description": "Options title.",
"message": "Opsi"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Tampilkan jumlah sumber yang disematkan pada ekstensi ikon."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Tampilkan jumlah penyematan pada ikon"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Hapus data sensitif dari permintaan CDN yang diizinkan untuk meningkatkan privasi."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Kupas metadata dari permintaan yang diizinkan"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Masukkan domain ke daftar putih. Pisahkan entri dengan titik koma (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Cegah pemeriksaan domain"
}
}

View file

@ -0,0 +1,70 @@
{
"extensionDescription": {
"message": "Verndar þig gegn eftirliti frá \"ókeypis\" miðlægum efnisveitum.",
"description": "Extension description."
},
"disableProtectionTitle": {
"message": "Slökkva á vörn fyrir þetta vefsvæði",
"description": "Disable protection title."
},
"enableProtectionTitle": {
"message": "Virkja vernd",
"description": "Enable protection title."
},
"amountInjectedTitle": {
"message": "Fjöldi staðvært inspýttra tilfanga",
"description": "Amount injected title."
},
"amountInjectedDescription": {
"message": "Fjöldi tilfanga frá miðlægum efnisveitum sem skipt hefur verið út síðan viðbótin var sett upp.",
"description": "Amount injected description."
},
"optionsTitle": {
"message": "Valkostir",
"description": "Options title."
},
"showIconBadgeTitle": {
"message": "Birta fjölda innspýtinga á táknmynd",
"description": "Show icon badge title."
},
"showIconBadgeDescription": {
"message": "Sýnir merki fyrir fjölda innspýttra tilfanga á táknmynd viðbótarinnar.",
"description": "Show icon badge description."
},
"blockMissingTitle": {
"message": "Loka á beiðnir vegna tilfanga sem vantar",
"description": "Block requests for missing resources title."
},
"blockMissingDescription": {
"message": "Hætta við veiddar beiðnir ef umbeðið tilfang er ekki til staðar á tölvunni.",
"description": "Block requests for missing resources description."
},
"disablePrefetchTitle": {
"message": "Gera forsöfnun tengla óvirka",
"description": "Disable prefetch title."
},
"disablePrefetchDescription": {
"message": "Kemur í veg fyrir að bannaðar beiðnir leki út til afhendingarveitna.",
"description": "Disable prefetch description."
},
"stripMetadataTitle": {
"message": "Hreinsa lýsigögn úr leyfðum beiðnum",
"description": "Strip metadata title."
},
"stripMetadataDescription": {
"message": "Þurrka viðkvæm gögn út úr leyfðum beiðnum til efnisveitna til að auka gagnaleynd.",
"description": "Strip metadata description."
},
"whitelistedDomainsTitle": {
"message": "Undanskilja lén frá athugun",
"description": "Whitelisted domains title."
},
"whitelistedDomainsDescription": {
"message": "Settu inn lén til að skrá þau á lista yfir leyfð lén. Aðgreindu færslur með semíkommum (;).",
"description": "Whitelisted domains description."
},
"advancedLabel": {
"message": "Ítarlegt",
"description": "Advanced label."
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Avanzate"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Quantità di iniezioni di risorse dalla Rete di Distribuzione di Contenuti locale sin dall'installazione."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Contatore per risorse iniettate localmente"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Annulla la richiesta intercettata se la risorsa necessaria non è disponibile localmente."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Bloccare richieste di risorse mancanti"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Impedisci alle richieste vietate di informare le reti di consegna."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Disabilita il prefetching dei link"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Disattiva protezione per questo sito"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Attiva protezione"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Protegge dal tracciamento tramite CDN centralizzato \"gratis\"."
},
"optionsTitle": {
"description": "Options title.",
"message": "Opzioni"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Mostra il numero di risorse iniettate sull'icona dell'estensione."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Mostra il numero di iniezioni sull'icona"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Cancella i dati sensibili dalle richieste CDN consentite per una migliore privacy."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Elimina i metadata dalle richieste consentite"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Inserire domini nella whitelist per escluderli. Separare voci multiple con punti e virgola (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Escludere domini dalle ispezioni"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "高度な設定"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "インストールしてからローカルのCDNリソースを使用した回数です。"
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "ローカルのリソースを使用した回数"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "必要なリソースがローカルで利用できない場合、リクエストを取り消します。"
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "アドオンに含まれないリソースへのリクエストをブロックする"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "許可されていないリクエストをネットワークに発行しないようにする"
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "リンクプリフェッチを無効にする"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "このサイトでは保護を無効にする"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "保護を有効にする"
},
"extensionDescription": {
"description": "Extension description.",
"message": "「無料」と称してあなたを追跡する大規模なCDNを迂回して、プライバシーを守ります。"
},
"optionsTitle": {
"description": "Options title.",
"message": "オプション"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "拡張機能のアイコンに、ローカルのリソースを使用した回数を表示します。"
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "ローカルのリソースを使用した回数をアイコンに表示する"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "プライバシー向上のために許可されたCDNリクエストから機密データを消去します。"
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "許可されたリクエストからメタデータを取り除く"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "ホワイトリストに登録したいドメインを入力してください。エントリが複数ある場合、セミコロン (;) で区切ってください。"
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "保護から除外するドメイン"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "고급"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Decentraleyes를 설치한 뒤, CDN에서 다운로드 하는 대신 로컬 자원을 사용한 횟수입니다."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "로컬 리소스로 대체한 요청 횟수"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "리소스를 로컬에서 가져올 수 없다면 리소스 요청을 취소합니다."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "존재하지 않는 리소스에 대한 요청을 차단"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "허가되지 않은 요청이 전달 네트워크(DN)로 전송되는 것을 차단합니다."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "링크 프리페치를 비활성화"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "이 사이트의 보호 비활성화"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "보호 활성화"
},
"extensionDescription": {
"description": "Extension description.",
"message": "\"무료\"라는 미끼로 당신을 추적하는 대규모 CDN을 사용하지 않음으로써 프라이버시를 지킵니다."
},
"optionsTitle": {
"description": "Options title.",
"message": "옵션"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "로컬 리소스로 대체한 요청 수를 확장 기능 아이콘에 표시합니다."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "차단한 횟수를 아이콘에 표시"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "프라이버시 보호를 위해 허가된 CDN 요청에서 민감한 데이터를 지웁니다."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "허용된 요청에서 메타데이터를 제거"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "화이트 리스트에 등록할 도메인을 입력하세요. 여러 개를 입력할 경우 세미콜론 (;) 을 이용해 구분합니다."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Decentraleyes를 사용하지 않을 도메인"
}
}

View file

@ -0,0 +1,70 @@
{
"extensionDescription": {
"message": "Schützt virun Tracking duerch \"gratis\" Content Delivery Networks.",
"description": "Extension description."
},
"disableProtectionTitle": {
"message": "Schutz fir dëse Site ausschalten",
"description": "Disable protection title."
},
"enableProtectionTitle": {
"message": "Schutz aktivéieren",
"description": "Enable protection title."
},
"amountInjectedTitle": {
"message": "Zieler fir lokal injizéierte Ressourcen",
"description": "Amount injected title."
},
"amountInjectedDescription": {
"message": "Unzuel vu lokalen Injektiounen vun CDN-Ressourcen säit der Installatioun.",
"description": "Amount injected description."
},
"optionsTitle": {
"message": "Astellungen",
"description": "Options title."
},
"showIconBadgeTitle": {
"message": "Unzuel vun Injektiounen op der Ikon uweisen",
"description": "Show icon badge title."
},
"showIconBadgeDescription": {
"message": "D'Unzuel vun injizéierte Ressourcen op der Decentraleyes-Ikon uweisen.",
"description": "Show icon badge description."
},
"blockMissingTitle": {
"message": "Eroflueden vu fehlenden Ressourcen blockéieren",
"description": "Block requests for missing resources title."
},
"blockMissingDescription": {
"message": "Ofgefaangen Ressourcen-Downloads blockéieren, wann déi ugefuerdert Datei net lokal um System verfügbar ass.",
"description": "Block requests for missing resources description."
},
"disablePrefetchTitle": {
"message": "\"Link Prefetching\" ausschalten",
"description": "Disable prefetch title."
},
"disablePrefetchDescription": {
"message": "Verhënnert, dass onerlaabten Ressourcen entgéint den aneren Astellungen trotzdeem ugefuerdert/erofgeluede ginn.",
"description": "Disable prefetch description."
},
"stripMetadataTitle": {
"message": "Metadaten aus den erlaabten Downloads erausläschen",
"description": "Strip metadata title."
},
"stripMetadataDescription": {
"message": "Läscht sensibel Daten aus den erlaabten CDN-Downloads fir den Dateschutz ze verbesseren.",
"description": "Strip metadata description."
},
"whitelistedDomainsTitle": {
"message": "Downloads fir dës Siten ëmmer erlaaben (Whitelist)",
"description": "Whitelisted domains title."
},
"whitelistedDomainsDescription": {
"message": "Gitt hei d'Domains un, deenen hir Downloads ëmmer sollen erlaabt ginn. Trennt déi eenzel Domains duerch e Semikolon (;).",
"description": "Whitelisted domains description."
},
"advancedLabel": {
"message": "Erweidert",
"description": "Advanced label."
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Avansert"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Antall lokale ressursinnsmettinger i innholdsleveringsnettverk siden installasjonen."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Teller for lokalt innsmettede ressurser"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Avbryt oppsnappede forespørsler dersom den påkrevde ressursen ikke er lokalt tilgjengelig."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Blokker forespørsler som spør etter manglende ressurser"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Hindre nektede forespørsler fra å lekke ut til leveringsnettverker."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Skru av forhåndsinnlasting av lenker"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Skru av beskyttelse på dette nettstedet"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Skru på beskyttelse"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Beskytter mot sporing gjort av \"gratis\" sentralisert innholdslevering."
},
"optionsTitle": {
"description": "Options title.",
"message": "Innstillinger"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Vis antall innsmettede ressurser oppå utvidelsens ikon."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Vis innsmettingstelleren oppå ikonet"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Slett sensitive data fra tillatte CDN-forespørsler for ytterligere privatliv."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Fjern metadata fra tillatte forespørsler"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Skriv inn domener her for å hviteliste dem. Adskill flere oppføringer med semikoloner (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Ekskluder domener fra inspeksjoner"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Geavanceerd"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Aantal lokale Content Delivery Network-bestandsinjecties sinds installatie."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Teller voor lokaal geïnjecteerde bestanden"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Annuleer een onderschept verzoek wanneer het bestand niet lokaal beschikbaar is."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Verzoeken voor ontbrekende items blokkeren"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Voorkom dat geweigerde verzoeken naar afleveringsnetwerken uitlekken."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Link prefetching uitschakelen"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Bescherming voor deze website uitschakelen"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Bescherming inschakelen"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Beschermt tegen tracking via het \"gratis\", gecentraliseerd, verzorgen van content."
},
"optionsTitle": {
"description": "Options title.",
"message": "Opties"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Toon het aantal geïnjecteerde bestanden op het extensie-icoon."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Getelde injecties op icoon weergeven"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Wis gevoelige gegevens uit toegestane CDN-verzoeken voor verbeterde privacy."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Metadata uit toegestane verzoeken verwijderen"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Voer de te negeren domeinen in. Scheid de waarden met puntkomma's (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Sluit domeinen uit van inspecties"
}
}

View file

@ -0,0 +1,70 @@
{
"extensionDescription": {
"message": "ਖੁਦ ਨੂੰ \"ਮੁਫ਼ਤ\", ਕੇਂਦਰੀਕ੍ਰਿਤ, ਸਮੱਗਰੀ ਪਹੁੰਚ ਰਾਹੀਂ ਟਰੈਕਿੰਗ ਤੋਂ ਸੁਰੱਖਿਅਤ ਕਰੋ।",
"description": "Extension description."
},
"disableProtectionTitle": {
"message": "ਇਸ ਸਾਈਟ ਲਈ ਸੁਰੱਖਿਆ ਅਸਮਰੱਥ ਕਰੋ",
"description": "Disable protection title."
},
"enableProtectionTitle": {
"message": "ਸੁਰੱਖਿਆ ਸਮਰੱਥ ਕਰੋ",
"description": "Enable protection title."
},
"amountInjectedTitle": {
"message": "ਲੋਕਲ ਪਾਏ ਸਰੋਤਾਂ ਦੀ ਗਿਣਤੀ",
"description": "Amount injected title."
},
"amountInjectedDescription": {
"message": "ਇੰਸਟਾਲੇਸ਼ਨ ਦੇ ਬਾਅਦ ਲੋਕਲ ਸਮੱਗਰੀ ਡਿਲਵਰੀ ਨੈੱਟਵਰਕ ਸਰੋਤਾਂ ਦੀ ਮਾਤਰਾ ਹੈ।",
"description": "Amount injected description."
},
"optionsTitle": {
"message": "ਚੋਣਾਂ",
"description": "Options title."
},
"showIconBadgeTitle": {
"message": "ਆਈਕਾਨ ਉੱਤੇ ਪਾਇਆ ਦੀ ਗਿਣਤੀ ਵੇਖਾਓ",
"description": "Show icon badge title."
},
"showIconBadgeDescription": {
"message": "Show the number of injected resources on the extension icon.",
"description": "Show icon badge description."
},
"blockMissingTitle": {
"message": "Block requests for missing resources",
"description": "Block requests for missing resources title."
},
"blockMissingDescription": {
"message": "Cancel intercepted request if the required resource is not locally available.",
"description": "Block requests for missing resources description."
},
"disablePrefetchTitle": {
"message": "Disable link prefetching",
"description": "Disable prefetch title."
},
"disablePrefetchDescription": {
"message": "Prevent disallowed requests from leaking out to delivery networks.",
"description": "Disable prefetch description."
},
"stripMetadataTitle": {
"message": "Strip metadata from allowed requests",
"description": "Strip metadata title."
},
"stripMetadataDescription": {
"message": "Erase sensitive data from allowed CDN requests for improved privacy.",
"description": "Strip metadata description."
},
"whitelistedDomainsTitle": {
"message": "Exclude domains from inspections",
"description": "Whitelisted domains title."
},
"whitelistedDomainsDescription": {
"message": "Enter domains to whitelist them. Separate multiple entries with semi-colons (;).",
"description": "Whitelisted domains description."
},
"advancedLabel": {
"message": "ਤਕਨੀਕੀ",
"description": "Advanced label."
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Zaawansowane"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Ilość wstrzyknięć z lokalnego Content Delivery Network od czasu instalacji."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Licznik zasobów podanych lokalnie"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Anuluj przechwycone żądania jeśli wymagany zasób nie jest dostępny lokalnie."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Blokuj żądania brakujących zasobów"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Zapobiegaj wyciekaniu zabronionych zapytań do systemów dostarczania."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Wyłącz wczesne pobieranie linków"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Wyłącz ochronę dla tej witryny"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Włącz ochronę"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Chroni przed śledzeniem przez ośrodki CDN."
},
"optionsTitle": {
"description": "Options title.",
"message": "Ustawienia"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Pokaż ilość wstrzykniętych zasobów na ikonie rozszerzenia."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Wyświetl licznik wstrzyknięć na ikonie"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Usuwaj wrażliwe dane z dozwolonych zapytań do CDN aby zwiększyć prywatność."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Usuwaj metadane z dozwolonych zapytań"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Podaj domeny aby dodać je do białej listy. Oddziel wpisy średnikami (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Wyklucz domeny z analizy"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Avançado"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Total de injeções locais de recursos de Redes de Distribuição de Conteúdo desde a instalação."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Contador de recursos injetados localmente"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Cancela requisições interceptadas se o recurso necessário não está disponível localmente."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Bloquear requisições a recursos faltosos"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Impede que requisições não permitidas vazem para as redes de distribuição de conteúdo."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Desabilitar pré-carregamento de links"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Desabilitar a proteção neste site"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Habilitar proteção"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Lhe protege de rastreamento feito usando centrais de disponibilização de conteúdo \"gratuitas\"."
},
"optionsTitle": {
"description": "Options title.",
"message": "Opções"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Mostra o total de injeções de recursos no ícone do complemento."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Exibir total de injeções no ícone"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Apaga dados sensíveis de requisições à CDNs permitidas visando melhorar a privacidade."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Remover metadados de requisições permitidas"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Digite os domínios que não devem ser analisados. Separe múltiplos domínios com ponto e vírgula (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Remover domínios das inspeções"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Avançado"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Quantidade de injeções de recurso Content Delivery Network locais desde a instalação."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Contador para recursos injetados localmente"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Cancelar pedido intercetado se o recurso necessário não estiver disponível localmente."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Bloquear pedidos por falta de recursos"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Impedir recursos não permitidos de vazar para as redes de entrega."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Desativar pré-obtenção de ligações"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Desativar proteção para este site"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Ativar proteção"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Protege contra monitorização através de entrega de conteúdo centralizado."
},
"optionsTitle": {
"description": "Options title.",
"message": "Opções"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Mostrar o número de recursos injetados no ícone da extensão."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Mostrar contagem de injeções no ícone"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Limpar dados sensíveis de recursos CDN permitidos para melhoria de privacidade."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Retirar metadados dos pedidos permitidos"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Insira domínios para os colocar na lista branca. Separe múltiplas entradas com pontos e vírgulas (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Excluir domínios de inspeções"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Avansat"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Cantitatea de resurse locale injectate de Rețelele care Livrează Conținut din momentul instalării."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Contor pentru resursele injectate local"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Anulează cererile interceptate dacă resursa solicitată nu este disponibilă local."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Blochează cererile pentru resursele care lipsesc"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Previne scurgerea request-uri nepermise către rețele de livrare."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Dezactivează pre-încărcarea de linkuri"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Dezactivează protecția pentru acest site"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Activează protecția"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Protejează împotriva urmăririi prin livrare de conținut gratuit, centralizat."
},
"optionsTitle": {
"description": "Options title.",
"message": "Opțiuni"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Afișează numărul de resurse înlocuite pe iconița extensiei."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Afișează numărul de dependențe înlocuite pe iconiță"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Șterge date sensibile din requesturi permise pentru îmbunătățirea confidențialității."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Scoate metadatele din requesturi permise"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Introduceți domeniile dorite în lista albă. Separați intrările multiple între ele prin punct și virgulă (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Exclude domeniile următoare de la inspecții"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Дополнительно"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Количество локально «доставленных» файлов с момента установки."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Счётчик файлов «доставленных» локально"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Отменить перехваченный запрос, если требуемый ресурс не доступен локально (может «ломать» сайты)."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Блокировать запросы недостающих ресурсов"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Не давать запрещенным запросам выходить за сети доставки."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Отключить предвыборку ссылок"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Отключить защиту для этого сайта"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Включить защиту"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Защищает Вас от отслеживания через «бесплатные», централизованные CDN."
},
"optionsTitle": {
"description": "Options title.",
"message": "Настройки"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Показывать количество «доставленных» локально ресурсов на значке расширения."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Показывать количество инъекций на значке"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Очистить дополнительные данные из разрешенных CDN запросов, для усиления приватности."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Удалить метаданные из допущенных запросов"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "«Белый список» доменов. Контент, расположенный на них не будет фильтроваться. Записи (при количестве более одной) разделяются точкой с запятой (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Исключить домены из проверки"
}
}

View file

@ -0,0 +1,70 @@
{
"extensionDescription": {
"message": "Protects you against tracking through \"free\", centralized, content delivery.",
"description": "Extension description."
},
"disableProtectionTitle": {
"message": "මෙම අඩවිය සඳහා ආරක්ෂාව අබල කරන්න",
"description": "Disable protection title."
},
"enableProtectionTitle": {
"message": "ආරක්ෂාව සබල කරන්න",
"description": "Enable protection title."
},
"amountInjectedTitle": {
"message": "Counter for locally injected resources",
"description": "Amount injected title."
},
"amountInjectedDescription": {
"message": "Amount of local Content Delivery Network resource injections since installation.",
"description": "Amount injected description."
},
"optionsTitle": {
"message": "විකල්ප",
"description": "Options title."
},
"showIconBadgeTitle": {
"message": "Display injection counts on icon",
"description": "Show icon badge title."
},
"showIconBadgeDescription": {
"message": "Show the number of injected resources on the extension icon.",
"description": "Show icon badge description."
},
"blockMissingTitle": {
"message": "Block requests for missing resources",
"description": "Block requests for missing resources title."
},
"blockMissingDescription": {
"message": "Cancel intercepted request if the required resource is not locally available.",
"description": "Block requests for missing resources description."
},
"disablePrefetchTitle": {
"message": "Disable link prefetching",
"description": "Disable prefetch title."
},
"disablePrefetchDescription": {
"message": "Prevent disallowed requests from leaking out to delivery networks.",
"description": "Disable prefetch description."
},
"stripMetadataTitle": {
"message": "Strip metadata from allowed requests",
"description": "Strip metadata title."
},
"stripMetadataDescription": {
"message": "Erase sensitive data from allowed CDN requests for improved privacy.",
"description": "Strip metadata description."
},
"whitelistedDomainsTitle": {
"message": "Exclude domains from inspections",
"description": "Whitelisted domains title."
},
"whitelistedDomainsDescription": {
"message": "Enter domains to whitelist them. Separate multiple entries with semi-colons (;).",
"description": "Whitelisted domains description."
},
"advancedLabel": {
"message": "වැඩිදුර",
"description": "Advanced label."
}
}

View file

@ -0,0 +1,70 @@
{
"extensionDescription": {
"message": "Ju mbron ju ndaj gjurmimet nëpërmjet dërguesve të përmbajtjeve \"Falas\" të çentralizuara.",
"description": "Extension description."
},
"disableProtectionTitle": {
"message": "Ndalo mbrojtjen për këtë faqe",
"description": "Disable protection title."
},
"enableProtectionTitle": {
"message": "Mundëso mbrojtjen",
"description": "Enable protection title."
},
"amountInjectedTitle": {
"message": "Numëruesi për burimet e injektuara lokalisht",
"description": "Amount injected title."
},
"amountInjectedDescription": {
"message": "Sasia e burimeve te injektuara lokalisht që prej instalimit.",
"description": "Amount injected description."
},
"optionsTitle": {
"message": "Mundësitë",
"description": "Options title."
},
"showIconBadgeTitle": {
"message": "Shfaq numrin e injektimeve tek ikona",
"description": "Show icon badge title."
},
"showIconBadgeDescription": {
"message": "Shfaq numrin e burimeve te injektuara tek ikona shtojcë.",
"description": "Show icon badge description."
},
"blockMissingTitle": {
"message": "Blloko kërkesat për burimet e munguara",
"description": "Block requests for missing resources title."
},
"blockMissingDescription": {
"message": "Anullo kërkesat e kapura nësë burimi i kërkuar nuk gjendet lokalisht.",
"description": "Block requests for missing resources description."
},
"disablePrefetchTitle": {
"message": "Ndalo parapërgatitjen e faqes",
"description": "Disable prefetch title."
},
"disablePrefetchDescription": {
"message": "Parandalo kërkesat e pa lejuara të rrjedhin të dhëna tek rrjetet dërguese.",
"description": "Disable prefetch description."
},
"stripMetadataTitle": {
"message": "Hiq etiketat nga kërkesat e lejuara",
"description": "Strip metadata title."
},
"stripMetadataDescription": {
"message": "Për një privatësi më të mirë, fshi të dhënat sensitive nga kërkesat e CDN të lejuara.",
"description": "Strip metadata description."
},
"whitelistedDomainsTitle": {
"message": "Përjashto domain -et nga kontrollet",
"description": "Whitelisted domains title."
},
"whitelistedDomainsDescription": {
"message": "Vendos domain -et që do të lejosh. Ndaji ato me pikëpresje (;).",
"description": "Whitelisted domains description."
},
"advancedLabel": {
"message": "I përparuar",
"description": "Advanced label."
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Напредно"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Број локално убризганих ресурса са мрежа за доставу садржаја од инсталације."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Бројач локално убризганих ресурса"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Откажи пресретнути захтев ако потребни ресурс није локално доступан."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Блокирај захтеве ка недостајућим ресурсима"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Спречи цурење недозвољених захтева ка мрежама за доставу."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Откажи преучитавање везе"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Онемогући заштиту на овом сајту"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Омогући заштиту"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Штити вас од праћења преко „бесплатних“, централизованих достава садржаја."
},
"optionsTitle": {
"description": "Options title.",
"message": "Опције"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Прикажи број убризганих ресурса на иконици проширења."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Прикажи број убризгавања на иконици"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Обриши осетљиве податке са дозвољених CDN захтева зарад веће приватности."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Скини мета-податке са дозвољених захтева"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Унесите домене да их ставите на бели списак. Одвојите више ставки са тачка-запетама (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Прескочи домене приликом провере"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Avancerat"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Mängden lokala resursinjektioner för innehållsleveransnätverk sedan installationen."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Räknare för lokalt insatta resurser"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Avbryt avlyssnad begäran om den nödvändiga resursen inte är lokalt tillgänglig."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Blockera förfrågningar när resurs saknas"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Förhindra otillåtna förfrågningar från att läcka ut till leveransnätverk."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Inaktivera länkförhandshämtning"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Inaktivera skydd för den här sidan"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Aktivera skydd"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Skyddar dig mot att spåras av \"gratis\" centraliserad innehållsleverans."
},
"optionsTitle": {
"description": "Options title.",
"message": "Alternativ"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Visa antalet insatta resurser på tilläggsikonen."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Visa insättningsantal på ikonen"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Radera känslig data från tillåtna CDN-förfrågningar för förbättrad integritet."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Skala bort metadata från tillåtna förfrågningar"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Ange domäner för vitlistning. Separera flera domänposter med semikolon (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Exkludera domäner från inspektioner"
}
}

View file

@ -0,0 +1,70 @@
{
"extensionDescription": {
"message": "Para protektahan ka laban sa pagsubaybay sa pamamagitan ng \"libre\", sentralisadong, paghahatid ng nilalaman.",
"description": "Extension description."
},
"disableProtectionTitle": {
"message": "Huwag paganahin ang proteksyon para sa sayt na ito",
"description": "Disable protection title."
},
"enableProtectionTitle": {
"message": "Paganahin ang proteksyon",
"description": "Enable protection title."
},
"amountInjectedTitle": {
"message": "Laban para sa mga lokal na iniksiyong mga mapagkukunan",
"description": "Amount injected title."
},
"amountInjectedDescription": {
"message": "Ang halaga ng mga lokal na Nilalaman sa Network ng Paghahatid ng pinagmulan sa pag-install mula noong pag-install.",
"description": "Amount injected description."
},
"optionsTitle": {
"message": "Ang mga pagpipilian",
"description": "Options title."
},
"showIconBadgeTitle": {
"message": "Ang naka-displey na ineksyon ay mabibilang sa imahe",
"description": "Show icon badge title."
},
"showIconBadgeDescription": {
"message": "Ipakita ang bilang ng mga injected na pinagmulan sa ekstensyon nang imahe.",
"description": "Show icon badge description."
},
"blockMissingTitle": {
"message": "Harangan ang mga kahilingan para sa mga nawawalang mapagkukunan",
"description": "Block requests for missing resources title."
},
"blockMissingDescription": {
"message": "Kanselahin ang kahilingan na intercepted kung ang mga kinakailangang mapagkukunan ay hindi available sa lokal.",
"description": "Block requests for missing resources description."
},
"disablePrefetchTitle": {
"message": "Huwag paganahin ang prefetching link",
"description": "Disable prefetch title."
},
"disablePrefetchDescription": {
"message": "Pigilan ang mga kahilingan na hindi pinayagan mula sa pagkalat sa paghahatid ng mga network.",
"description": "Disable prefetch description."
},
"stripMetadataTitle": {
"message": "Iliston ang metadata mula sa mga pinayagan na kahilingan",
"description": "Strip metadata title."
},
"stripMetadataDescription": {
"message": "Burahin ang sensitibong datus mula sa mga pinahihintulutang kahilingan ng CDN para sa pinahusay na pagiging pribado nito.",
"description": "Strip metadata description."
},
"whitelistedDomainsTitle": {
"message": "Ibukod ang mga domain mula sa mga iinspeksyon",
"description": "Whitelisted domains title."
},
"whitelistedDomainsDescription": {
"message": "Ipasok ang mga domain upang i-whitelist sila. Paghiwalayin ang maramihang mga entry na may tuldok kuwit (;).",
"description": "Whitelisted domains description."
},
"advancedLabel": {
"message": "Naka-usad",
"description": "Advanced label."
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Gelişmiş"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Kurulumdan bu yana yerel İçerik Dağıtım Ağı kaynak eklemelerinin miktarı."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Yerel olarak eklenen kaynaklar için sayaç"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "İstenilen kaynak yerel olarak mevcut değilse, yakalanan isteği iptal et."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Eksik kaynaklar için gelen istekleri engelle"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "İzin verilmeyen isteklerin dağıtım ağlarına sızmasını engelleyin."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Bağlantı önalımını devre dışı bırak"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Bu sitede korumayı devre dışı bırak"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Korumayı etkinleştir"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Sizi içerik dağıtımıyla yapılan merkezi ve \"ücretsiz\" takipten korur."
},
"optionsTitle": {
"description": "Options title.",
"message": "Seçenekler"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Enjekte edilen kaynakların sayısını uzantı simgesinde gösterin."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Simgede enjeksiyon sayaçlarını göster"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "İleri düzey gizlilik için, izin verilen CDN isteklerinden hassas verileri sil."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Meta verilerini izin verilen isteklerden ayır"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Beyaz listeye eklemek için alan adlarını girin. Birden çok girdiyi noktalı virgül (;) ile ayırın."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Alanları denetimlerden hariç tut"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Розширені"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Кількість ресурсів наданих локальною Мережею Розповсюдження Контенту (CDN) з початку встановлення."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Лічильник ресурсів замінених локальними"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Скасувати перехоплений запит, якщо необхідний ресурс відсутній локально."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Блокувати запити для відсутніх ресурсів"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Запобігти витік заборонених запитів в мережі розповсюдження."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Відключити попереднє завантаженя посилань"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Вимкнути захист на цій сторінці"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Увімкнути захист"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Захищає вас від стеження \"безкоштовними\", централізованими мережами розповсюдження ресурсів."
},
"optionsTitle": {
"description": "Options title.",
"message": "Налаштування"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Показувати кількість локально наданих ресурсів на іконці розширення."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Показувати кількість ін'єкцій на іконці"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Стерти чутливі дані з запитів до дозволених CDN для кращої приватності."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Видалити метадані з дозволених запитів"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Введіть домени для включення в білий список. У якості розділювача використовуйте крапку з комою (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Вимкнути перевірку для доменів"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "Nâng cao"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "Số lượng tài nguyên cục bộ đã chèn của mạng phân phối nội dung (CDN) kể từ khi cài đặt."
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "Đếm các tài nguyên cục bộ được chèn vào"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "Hủy yêu cầu bị chặn nếu tài nguyên cần tới không có sẵn."
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "Chặn yêu cầu cho tài nguyên bị thiếu"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "Ngăn chặn các yêu cầu không được phép rò rỉ ra ngoài mạng lưới phân phối."
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "Vô hiệu tìm nạp trước liên kết"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "Tắt bảo vệ cho trang này"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "Bật bảo vệ"
},
"extensionDescription": {
"description": "Extension description.",
"message": "Bảo vệ bạn khỏi bị theo dõi thông qua việc phân phối nội dung \"miễn phí\", tập trung."
},
"optionsTitle": {
"description": "Options title.",
"message": "Tùy chỉnh"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "Hiển thị số tài nguyên đã chèn trên biểu tượng của tiện ích."
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "Hển thị số lượng chèn trên biểu tượng"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "Xóa dữ liệu nhạy cảm khỏi các yêu cầu CDN được phép để cải thiện quyền riêng tư."
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "Loại bỏ siêu dữ liệu (metadata) khỏi các yêu cầu được phép"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "Nhập các miền để đưa vào danh sách trắng. Phân tách các mục nhập bằng dấu chấm phẩy (;)."
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "Loại trừ tên miền khỏi việc giám sát"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "高级"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "自安装以来,从本地的“内容交付网络”发送的资源总量。"
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "本地发送资源的计数器"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "取消被拦截的请求,如果请求的资源在本地不可用。"
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "阻止缺失资源的请求"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "避免本应禁止的请求发到网络。"
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "禁用链接预读取"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "在此网站上禁用保护"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "启用保护"
},
"extensionDescription": {
"description": "Extension description.",
"message": "保护您免受集中式的内容交付网络CDN的跟踪。"
},
"optionsTitle": {
"description": "Options title.",
"message": "选项"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "在扩展图标上显示已注入资源的数量。"
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "在图标上显示注入数量"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "被允许的 CDN 请求剥去敏感数据以保护隐私。"
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "允许的请求剥去元数据"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "输入白名单的域名。用分号 (;) 分隔多项。"
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "排除要检查的域名"
}
}

View file

@ -0,0 +1,70 @@
{
"advancedLabel": {
"description": "Advanced label.",
"message": "進階"
},
"amountInjectedDescription": {
"description": "Amount injected description.",
"message": "安裝以來,由本機檔案所取代的 CDN 資源數量。"
},
"amountInjectedTitle": {
"description": "Amount injected title.",
"message": "由本機提供的資源計數器"
},
"blockMissingDescription": {
"description": "Block requests for missing resources description.",
"message": "若本機沒有所請求的資源,就取消該請求。"
},
"blockMissingTitle": {
"description": "Block requests for missing resources title.",
"message": "封鎖缺少資源時的連線請求"
},
"disablePrefetchDescription": {
"description": "Disable prefetch description.",
"message": "防止發出不被允許的請求到 CDN 網路。"
},
"disablePrefetchTitle": {
"description": "Disable prefetch title.",
"message": "停用連結預讀功能"
},
"disableProtectionTitle": {
"description": "Disable protection title.",
"message": "為此網站停用保護"
},
"enableProtectionTitle": {
"description": "Enable protection title.",
"message": "啟用保護"
},
"extensionDescription": {
"description": "Extension description.",
"message": "保護您不受「免費」、中心化的內容傳遞網路CDN的追蹤。"
},
"optionsTitle": {
"description": "Options title.",
"message": "選項"
},
"showIconBadgeDescription": {
"description": "Show icon badge description.",
"message": "在擴充套件圖示上,顯示被取代的資源數量。"
},
"showIconBadgeTitle": {
"description": "Show icon badge title.",
"message": "在圖示上顯示被取代的資源數量"
},
"stripMetadataDescription": {
"description": "Strip metadata description.",
"message": "清除放行的 CDN 請求當中的敏感資料,以保護隱私權。"
},
"stripMetadataTitle": {
"description": "Strip metadata title.",
"message": "移除放行請求當中的後設資料"
},
"whitelistedDomainsDescription": {
"description": "Whitelisted domains description.",
"message": "輸入網域即可將其加入白名單。使用分號(;)分隔多個網域。"
},
"whitelistedDomainsTitle": {
"description": "Whitelisted domains title.",
"message": "要排除檢查的網域"
}
}

View file

@ -0,0 +1,18 @@
Introduction
------------
This audit script allows any user and extension reviewer to verify the integrity of the bundled resources. It automatically, and transparently, compares all bundled libraries to their original sources.
Usage Instructions (Unix)
------------------
1. Make sure you have Node.js installed on your machine.
2. Open up a terminal and ```cd``` into this directory.
3. Execute ```npm install``` to fetch any dependencies.
4. Run the audit script by executing ```node run```.
**Note:** If you'd like to save the report, run ```node run > report.txt```.

View file

@ -0,0 +1,13 @@
{
"name": "decentraleyes-audit",
"version": "1.7.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"source-map-url": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
}
}
}

View file

@ -0,0 +1,16 @@
{
"name": "decentraleyes-audit",
"version": "1.7.0",
"author": "Thomas Rientjes",
"license": "MPL-2.0",
"description": "Library audit tool for Decentraleyes.",
"repository": "https://addons.mozilla.org/firefox/addon/decentraleyes",
"keywords": [
"decentraleyes",
"audit"
],
"main": "run.js",
"dependencies": {
"source-map-url": "~0.4.0"
}
}

View file

@ -0,0 +1,228 @@
/**
* Resource Audit Script
* Belongs to Decentraleyes.
*
* @author Thomas Rientjes
* @since 2014-07-24
* @license MPL 2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/**
* Imports
*/
var fileSystem, crypto, https, sourceMappingURL;
fileSystem = require('fs');
crypto = require('crypto');
https = require('https');
sourceMappingURL = require('source-map-url');
/**
* Variables
*/
var localResourceLocation = '../resources';
var localResourceLocationLength = localResourceLocation.length;
var localResourcePaths = [];
var comparedResourceAmount = 0;
var resourceAmount = 0;
/**
* Functions
*/
function _fetchLocalResourcePaths (folderPath) {
fileSystem.readdirSync(folderPath).forEach(function (resourceName) {
var resourcePath = `${folderPath}/${resourceName}`;
var resourceStatistics = fileSystem.statSync(resourcePath);
if (resourceStatistics && resourceStatistics.isDirectory()) {
_fetchLocalResourcePaths(resourcePath);
} else {
localResourcePaths.push(resourcePath);
}
});
return localResourcePaths;
}
function _getLocalResourceContents (fileLocation, callback) {
fileSystem.exists(fileLocation, function (exists) {
if (exists) {
fileSystem.stat(fileLocation, function (error, statistics) {
fileSystem.open(fileLocation, 'r', function (error, fileDescriptor) {
var buffer = Buffer.alloc(statistics.size);
fileSystem.read(fileDescriptor, buffer, 0, buffer.length, null, function (error, bytesRead, buffer) {
var localFileContents = buffer.toString('utf8', 0, buffer.length);
fileSystem.close(fileDescriptor, function () {});
callback(localFileContents);
});
});
});
}
});
}
function _getRemoteResourceContents (remoteResourceRoute, callback) {
var resourceURL = `https://ajax.googleapis.com/ajax/libs/${remoteResourceRoute}`;
https.get(resourceURL, function (response) {
var resourceContents = '';
response.on('data', function (chunk) {
resourceContents += chunk;
});
response.on('end', function () {
if (response.statusCode === 200) {
callback(resourceContents, resourceURL);
} else {
resourceURL = `https://cdnjs.cloudflare.com/ajax/libs/${remoteResourceRoute}`;
https.get(resourceURL, function (response) {
resourceContents = '';
response.on('data', function (chunk) {
resourceContents += chunk;
});
response.on('end', function () {
if (response.statusCode !== 200) {
throw `Error: Resource ${remoteResourceRoute} could not be fetched.`;
}
callback(resourceContents, resourceURL);
});
});
}
});
});
}
function _hashFileContents (fileContents) {
var hash;
hash = crypto.createHash('sha512');
hash.setEncoding('hex');
hash.write(fileContents);
hash.end();
return hash.read();
}
function _showCompletedMessage () {
console.log();
console.log(' *** FILE INTEGRITY CHECKS COMPLETED');
console.log(` *** ${resourceAmount}/${resourceAmount} RESOURCES WERE ANALYZED`);
console.log();
}
function _incrementComparedResourceAmount () {
comparedResourceAmount++;
if (comparedResourceAmount === resourceAmount) {
setTimeout(function () {
_showCompletedMessage();
}, 500);
}
}
function _compareResources (localResourceContents, remoteResourceContents, URL) {
var hasSourceMappingURL = sourceMappingURL.existsIn(remoteResourceContents);
var sourceMappingNotice = '[ ] REMOTE RESOURCE HAD SOURCE MAPPING URL';
if (hasSourceMappingURL) {
remoteResourceContents = sourceMappingURL.removeFrom(remoteResourceContents);
sourceMappingNotice = '[X] REMOTE RESOURCE HAD SOURCE MAPPING URL';
}
var localResourceHash = _hashFileContents(localResourceContents);
var remoteResourceHash = _hashFileContents(remoteResourceContents);
console.log(`RESOURCE HASH (SHA512): ${localResourceHash}`);
console.log(`RESOURCE HASH (SHA512): ${remoteResourceHash}`);
var fileHashesMatch = (localResourceHash === remoteResourceHash);
if (!fileHashesMatch) {
console.log(URL);
console.log(remoteResourceContents);
throw 'Error: Decentraleyes resource hash mismatch.';
}
console.log();
console.log('[X] LOCAL AND REMOTE RESOURCE HASHES MATCH');
console.log(sourceMappingNotice);
_incrementComparedResourceAmount();
}
/**
* Initializations
*/
_fetchLocalResourcePaths(localResourceLocation);
resourceAmount = localResourcePaths.length;
/**
* Script
*/
localResourcePaths.forEach(function (resourcePath) {
var resourceRoute = resourcePath.substr(localResourceLocationLength + 1);
resourceRoute = resourceRoute.substring(0, resourceRoute.length - 1);
_getLocalResourceContents(resourcePath, function (localResourceContents) {
_getRemoteResourceContents(resourceRoute, function (remoteResourceContents, URL) {
console.log();
console.log(resourceRoute.toUpperCase());
console.log();
// Compare resource content hashes.
_compareResources(localResourceContents, remoteResourceContents, URL);
console.log();
console.log('------------------------------------------');
});
});
});

View file

@ -0,0 +1,83 @@
/**
* Global Constants
* Belongs to Decentraleyes.
*
* @author Thomas Rientjes
* @since 2017-10-27
* @license MPL 2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
'use strict';
/**
* Constants
*/
const Address = {
'ANY': '*://*/*',
'ANY_PATH': '/*',
'ANY_PROTOCOL': '*://',
'CHROME': 'chrome:',
'CHROME_EXTENSION': 'chrome-extension:',
'DECENTRALEYES': 'decentraleyes.org',
'EXAMPLE': 'example.org',
'HTTP': 'http:',
'HTTPS': 'https:',
'RESOURCE_PATH': '/resources',
'ROOT_PATH': '/',
'WWW_PREFIX': 'www.'
};
const Environment = {
'STABLE': 'stable',
'STAGING': 'staging'
};
const Header = {
'COOKIE': 'Cookie',
'ORIGIN': 'Origin',
'REFERER': 'Referer'
};
const MessageResponse = {
'ASYNCHRONOUS': true,
'SYNCHRONOUS': false
};
const Resource = {
'MAPPING_EXPRESSION': /\.map$/i,
'VERSION_EXPRESSION': /(?:\d{1,2}\.){1,3}\d{1,2}/,
'VERSION_PLACEHOLDER': '{version}'
};
const Setting = {
'AMOUNT_INJECTED': 'amountInjected',
'BLOCK_MISSING': 'blockMissing',
'DISABLE_PREFETCH': 'disablePrefetch',
'ENFORCE_STAGING': 'enforceStaging',
'SHOW_ICON_BADGE': 'showIconBadge',
'SHOW_RELEASE_NOTES': 'showReleaseNotes',
'STRIP_METADATA': 'stripMetadata',
'WHITELISTED_DOMAINS': 'whitelistedDomains',
'XHR_TEST_DOMAIN': 'xhrTestDomain'
};
const WebRequest = {
'GET': 'GET',
'BLOCKING': 'blocking',
'HEADERS': 'requestHeaders'
};
const WebRequestType = {
'MAIN_FRAME': 'main_frame',
'XHR': 'xmlhttprequest'
};
const Whitelist = {
'TRIM_EXPRESSION': /^;+|;+$/g,
'VALUE_SEPARATOR': ';'
};

View file

@ -0,0 +1,58 @@
/**
* File Guard
* Belongs to Decentraleyes.
*
* @see https://git.synz.io/Synzvato/decentraleyes/merge_requests/258
*
* @author Thomas Rientjes
* @since 2018-05-17
* @license MPL 2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
'use strict';
/**
* File Guard
*/
var fileGuard = {};
/**
* Private Methods
*/
fileGuard._startListening = function () {
let randomHexString = helpers.generateRandomHexString(24);
fileGuard.secret = `?_=${randomHexString}`;
chrome.webRequest.onBeforeRequest.addListener(
fileGuard._verifyRequest,
{'urls': [fileGuard.path + Address.ANY_PATH]},
[WebRequest.BLOCKING]
);
};
fileGuard._verifyRequest = function (requestDetails) {
let redirectUrl = chrome.runtime.getURL(Address.ROOT_PATH);
if (!requestDetails.url.endsWith(fileGuard.secret)) {
return {redirectUrl};
}
};
/**
* Initializations
*/
fileGuard.path = chrome.runtime.getURL(Address.RESOURCE_PATH);
fileGuard.secret = '';
if (fileGuard.path.startsWith(Address.CHROME_EXTENSION)) {
fileGuard._startListening();
}

View file

@ -0,0 +1,318 @@
/**
* Files
* Belongs to Decentraleyes.
*
* @author Thomas Rientjes
* @since 2014-07-24
* @license MPL 2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
'use strict';
/**
* Files
*/
var files = {
// Files [Stable]
[Environment.STABLE]: {
// AngularJS
'resources/angularjs/1.0.1/angular.min.jsm': true,
'resources/angularjs/1.0.2/angular.min.jsm': true,
'resources/angularjs/1.0.3/angular.min.jsm': true,
'resources/angularjs/1.0.4/angular.min.jsm': true,
'resources/angularjs/1.0.5/angular.min.jsm': true,
'resources/angularjs/1.0.6/angular.min.jsm': true,
'resources/angularjs/1.0.8/angular.min.jsm': true,
'resources/angularjs/1.2.0/angular.min.jsm': true,
'resources/angularjs/1.2.1/angular.min.jsm': true,
'resources/angularjs/1.2.10/angular.min.jsm': true,
'resources/angularjs/1.2.15/angular.min.jsm': true,
'resources/angularjs/1.2.16/angular.min.jsm': true,
'resources/angularjs/1.2.20/angular.min.jsm': true,
'resources/angularjs/1.2.23/angular.min.jsm': true,
'resources/angularjs/1.2.26/angular.min.jsm': true,
'resources/angularjs/1.2.28/angular.min.jsm': true,
'resources/angularjs/1.2.29/angular.min.jsm': true,
'resources/angularjs/1.3.0/angular.min.jsm': true,
'resources/angularjs/1.3.3/angular.min.jsm': true,
'resources/angularjs/1.3.8/angular.min.jsm': true,
'resources/angularjs/1.3.10/angular.min.jsm': true,
'resources/angularjs/1.3.11/angular.min.jsm': true,
'resources/angularjs/1.3.14/angular.min.jsm': true,
'resources/angularjs/1.3.15/angular.min.jsm': true,
'resources/angularjs/1.4.0/angular.min.jsm': true,
'resources/angularjs/1.4.2/angular.min.jsm': true,
'resources/angularjs/1.4.8/angular.min.jsm': true,
// Backbone.js
'resources/backbone.js/0.9.0/backbone-min.jsm': true,
'resources/backbone.js/0.9.1/backbone-min.jsm': true,
'resources/backbone.js/0.9.2/backbone-min.jsm': true,
'resources/backbone.js/0.9.9/backbone-min.jsm': true,
'resources/backbone.js/0.9.10/backbone-min.jsm': true,
'resources/backbone.js/1.0.0/backbone-min.jsm': true,
'resources/backbone.js/1.1.0/backbone-min.jsm': true,
'resources/backbone.js/1.1.1/backbone-min.jsm': true,
'resources/backbone.js/1.1.2/backbone-min.jsm': true,
'resources/backbone.js/1.2.0/backbone-min.jsm': true,
'resources/backbone.js/1.2.1/backbone-min.jsm': true,
'resources/backbone.js/1.2.2/backbone-min.jsm': true,
'resources/backbone.js/1.2.3/backbone-min.jsm': true,
// Dojo
'resources/dojo/1.4.1/dojo/dojo.jsm': true,
'resources/dojo/1.4.5/dojo/dojo.jsm': true,
'resources/dojo/1.5.0/dojo/dojo.jsm': true,
'resources/dojo/1.6.1/dojo/dojo.jsm': true,
'resources/dojo/1.7.5/dojo/dojo.jsm': true,
'resources/dojo/1.8.3/dojo/dojo.jsm': true,
'resources/dojo/1.8.7/dojo/dojo.jsm': true,
'resources/dojo/1.8.9/dojo/dojo.jsm': true,
'resources/dojo/1.9.1/dojo/dojo.jsm': true,
'resources/dojo/1.9.3/dojo/dojo.jsm': true,
'resources/dojo/1.9.7/dojo/dojo.jsm': true,
'resources/dojo/1.10.4/dojo/dojo.jsm': true,
// Ember.js
'resources/ember.js/1.0.1/ember.min.jsm': true,
'resources/ember.js/1.1.3/ember.min.jsm': true,
'resources/ember.js/1.2.2/ember.min.jsm': true,
'resources/ember.js/1.3.2/ember.min.jsm': true,
'resources/ember.js/1.4.0/ember.min.jsm': true,
'resources/ember.js/1.5.1/ember.min.jsm': true,
'resources/ember.js/2.0.0/ember.min.jsm': true,
'resources/ember.js/2.0.2/ember.min.jsm': true,
'resources/ember.js/2.1.0/ember.min.jsm': true,
// Ext Core
'resources/ext-core/3.0.0/ext-core.jsm': true,
'resources/ext-core/3.1.0/ext-core.jsm': true,
// jQuery
'resources/jquery/1.2.3/jquery.min.jsm': true,
'resources/jquery/1.2.6/jquery.min.jsm': true,
'resources/jquery/1.3.0/jquery.min.jsm': true,
'resources/jquery/1.3.1/jquery.min.jsm': true,
'resources/jquery/1.3.2/jquery.min.jsm': true,
'resources/jquery/1.4.0/jquery.min.jsm': true,
'resources/jquery/1.4.1/jquery.min.jsm': true,
'resources/jquery/1.4.2/jquery.min.jsm': true,
'resources/jquery/1.4.3/jquery.min.jsm': true,
'resources/jquery/1.4.4/jquery.min.jsm': true,
'resources/jquery/1.5.0/jquery.min.jsm': true,
'resources/jquery/1.5.1/jquery.min.jsm': true,
'resources/jquery/1.5.2/jquery.min.jsm': true,
'resources/jquery/1.6.0/jquery.min.jsm': true,
'resources/jquery/1.6.1/jquery.min.jsm': true,
'resources/jquery/1.6.2/jquery.min.jsm': true,
'resources/jquery/1.6.3/jquery.min.jsm': true,
'resources/jquery/1.6.4/jquery.min.jsm': true,
'resources/jquery/1.7.0/jquery.min.jsm': true,
'resources/jquery/1.7.1/jquery.min.jsm': true,
'resources/jquery/1.7.2/jquery.min.jsm': true,
'resources/jquery/1.8.0/jquery.min.jsm': true,
'resources/jquery/1.8.1/jquery.min.jsm': true,
'resources/jquery/1.8.2/jquery.min.jsm': true,
'resources/jquery/1.8.3/jquery.min.jsm': true,
'resources/jquery/1.9.0/jquery.min.jsm': true,
'resources/jquery/1.9.1/jquery.min.jsm': true,
'resources/jquery/1.10.0/jquery.min.jsm': true,
'resources/jquery/1.10.1/jquery.min.jsm': true,
'resources/jquery/1.10.2/jquery.min.jsm': true,
'resources/jquery/1.11.0/jquery.min.jsm': true,
'resources/jquery/1.11.1/jquery.min.jsm': true,
'resources/jquery/1.11.2/jquery.min.jsm': true,
'resources/jquery/1.11.3/jquery.min.jsm': true,
'resources/jquery/1.12.0/jquery.min.jsm': true,
'resources/jquery/1.12.1/jquery.min.jsm': true,
'resources/jquery/1.12.2/jquery.min.jsm': true,
'resources/jquery/1.12.3/jquery.min.jsm': true,
'resources/jquery/1.12.4/jquery.min.jsm': true,
'resources/jquery/2.0.0/jquery.min.jsm': true,
'resources/jquery/2.0.1/jquery.min.jsm': true,
'resources/jquery/2.0.2/jquery.min.jsm': true,
'resources/jquery/2.0.3/jquery.min.jsm': true,
'resources/jquery/2.1.0/jquery.min.jsm': true,
'resources/jquery/2.1.1/jquery.min.jsm': true,
'resources/jquery/2.1.3/jquery.min.jsm': true,
'resources/jquery/2.1.4/jquery.min.jsm': true,
// jQuery UI
'resources/jqueryui/1.5.3/jquery-ui.min.jsm': true,
'resources/jqueryui/1.6.0/jquery-ui.min.jsm': true,
'resources/jqueryui/1.7.3/jquery-ui.min.jsm': true,
'resources/jqueryui/1.8.24/jquery-ui.min.jsm': true,
'resources/jqueryui/1.9.2/jquery-ui.min.jsm': true,
'resources/jqueryui/1.10.4/jquery-ui.min.jsm': true,
'resources/jqueryui/1.11.0/jquery-ui.min.jsm': true,
'resources/jqueryui/1.11.1/jquery-ui.min.jsm': true,
'resources/jqueryui/1.11.2/jquery-ui.min.jsm': true,
'resources/jqueryui/1.11.3/jquery-ui.min.jsm': true,
'resources/jqueryui/1.11.4/jquery-ui.min.jsm': true,
// Modernizr
'resources/modernizr/2.6.2/modernizr.min.jsm': true,
'resources/modernizr/2.7.1/modernizr.min.jsm': true,
'resources/modernizr/2.7.2/modernizr.min.jsm': true,
'resources/modernizr/2.8.2/modernizr.min.jsm': true,
'resources/modernizr/2.8.3/modernizr.min.jsm': true,
// MooTools
'resources/mootools/1.1.1/mootools-yui-compressed.jsm': true,
'resources/mootools/1.1.2/mootools-yui-compressed.jsm': true,
'resources/mootools/1.2.1/mootools-yui-compressed.jsm': true,
'resources/mootools/1.2.3/mootools-yui-compressed.jsm': true,
'resources/mootools/1.2.4/mootools-yui-compressed.jsm': true,
'resources/mootools/1.2.5/mootools-yui-compressed.jsm': true,
'resources/mootools/1.3.0/mootools-yui-compressed.jsm': true,
'resources/mootools/1.3.1/mootools-yui-compressed.jsm': true,
'resources/mootools/1.3.2/mootools-yui-compressed.jsm': true,
'resources/mootools/1.4.1/mootools-yui-compressed.jsm': true,
'resources/mootools/1.4.5/mootools-yui-compressed.jsm': true,
'resources/mootools/1.5.0/mootools-yui-compressed.jsm': true,
'resources/mootools/1.5.1/mootools-yui-compressed.jsm': true,
// Prototype
'resources/prototype/1.6.0.2/prototype.jsm': true,
'resources/prototype/1.6.0.3/prototype.jsm': true,
'resources/prototype/1.6.1.0/prototype.jsm': true,
'resources/prototype/1.7.0.0/prototype.jsm': true,
'resources/prototype/1.7.1.0/prototype.jsm': true,
'resources/prototype/1.7.2.0/prototype.jsm': true,
'resources/prototype/1.7.3.0/prototype.jsm': true,
// Scriptaculous
'resources/scriptaculous/1.8.1/scriptaculous.jsm': true,
'resources/scriptaculous/1.8.2/scriptaculous.jsm': true,
'resources/scriptaculous/1.8.3/scriptaculous.jsm': true,
'resources/scriptaculous/1.9.0/scriptaculous.jsm': true,
// SWFObject
'resources/swfobject/2.1/swfobject.jsm': true,
'resources/swfobject/2.2/swfobject.jsm': true,
// Underscore.js
'resources/underscore.js/1.3.0/underscore-min.jsm': true,
'resources/underscore.js/1.3.1/underscore-min.jsm': true,
'resources/underscore.js/1.3.3/underscore-min.jsm': true,
'resources/underscore.js/1.4.0/underscore-min.jsm': true,
'resources/underscore.js/1.4.1/underscore-min.jsm': true,
'resources/underscore.js/1.4.2/underscore-min.jsm': true,
'resources/underscore.js/1.4.3/underscore-min.jsm': true,
'resources/underscore.js/1.4.4/underscore-min.jsm': true,
'resources/underscore.js/1.5.0/underscore-min.jsm': true,
'resources/underscore.js/1.5.1/underscore-min.jsm': true,
'resources/underscore.js/1.5.2/underscore-min.jsm': true,
'resources/underscore.js/1.6.0/underscore-min.jsm': true,
'resources/underscore.js/1.7.0/underscore-min.jsm': true,
'resources/underscore.js/1.8.0/underscore-min.jsm': true,
'resources/underscore.js/1.8.1/underscore-min.jsm': true,
'resources/underscore.js/1.8.2/underscore-min.jsm': true,
'resources/underscore.js/1.8.3/underscore-min.jsm': true,
// Web Font Loader
'resources/webfont/1.0.0/webfont.jsm': true,
'resources/webfont/1.0.1/webfont.jsm': true,
'resources/webfont/1.0.2/webfont.jsm': true,
'resources/webfont/1.0.3/webfont.jsm': true,
'resources/webfont/1.0.4/webfont.jsm': true,
'resources/webfont/1.0.5/webfont.jsm': true,
'resources/webfont/1.0.6/webfont.jsm': true,
'resources/webfont/1.0.9/webfont.jsm': true,
'resources/webfont/1.0.10/webfont.jsm': true,
'resources/webfont/1.0.11/webfont.jsm': true,
'resources/webfont/1.0.12/webfont.jsm': true,
'resources/webfont/1.0.13/webfont.jsm': true,
'resources/webfont/1.0.14/webfont.jsm': true,
'resources/webfont/1.0.15/webfont.jsm': true,
'resources/webfont/1.0.16/webfont.jsm': true,
'resources/webfont/1.0.17/webfont.jsm': true,
'resources/webfont/1.0.18/webfont.jsm': true,
'resources/webfont/1.0.19/webfont.jsm': true,
'resources/webfont/1.0.21/webfont.jsm': true,
'resources/webfont/1.0.22/webfont.jsm': true,
'resources/webfont/1.0.23/webfont.jsm': true,
'resources/webfont/1.0.24/webfont.jsm': true,
'resources/webfont/1.0.25/webfont.jsm': true,
'resources/webfont/1.0.26/webfont.jsm': true,
'resources/webfont/1.0.27/webfont.jsm': true,
'resources/webfont/1.0.28/webfont.jsm': true,
'resources/webfont/1.0.29/webfont.jsm': true,
'resources/webfont/1.0.30/webfont.jsm': true,
'resources/webfont/1.0.31/webfont.jsm': true,
'resources/webfont/1.1.0/webfont.jsm': true,
'resources/webfont/1.1.1/webfont.jsm': true,
'resources/webfont/1.1.2/webfont.jsm': true,
'resources/webfont/1.3.0/webfont.jsm': true,
'resources/webfont/1.4.2/webfont.jsm': true,
'resources/webfont/1.4.6/webfont.jsm': true,
'resources/webfont/1.4.7/webfont.jsm': true,
'resources/webfont/1.4.8/webfont.jsm': true,
'resources/webfont/1.4.10/webfont.jsm': true,
'resources/webfont/1.5.0/webfont.jsm': true,
'resources/webfont/1.5.2/webfont.jsm': true,
'resources/webfont/1.5.3/webfont.jsm': true,
'resources/webfont/1.5.6/webfont.jsm': true,
'resources/webfont/1.5.10/webfont.jsm': true,
'resources/webfont/1.5.18/webfont.jsm': true
},
// Files [Staging]
[Environment.STAGING]: {
// AngularJS
'resources/angularjs/1.5.8/angular.min.jsm': true,
'resources/angularjs/1.6.1/angular.min.jsm': true,
'resources/angularjs/1.6.5/angular.min.jsm': true,
// Backbone.js
'resources/backbone.js/1.3.3/backbone-min.jsm': true,
// jQuery
'resources/jquery/2.2.0/jquery.min.jsm': true,
'resources/jquery/2.2.1/jquery.min.jsm': true,
'resources/jquery/2.2.2/jquery.min.jsm': true,
'resources/jquery/2.2.3/jquery.min.jsm': true,
'resources/jquery/2.2.4/jquery.min.jsm': true,
'resources/jquery/3.0.0/jquery.min.jsm': true,
'resources/jquery/3.1.0/jquery.min.jsm': true,
'resources/jquery/3.1.1/jquery.min.jsm': true,
'resources/jquery/3.2.0/jquery.min.jsm': true,
'resources/jquery/3.2.1/jquery.min.jsm': true,
'resources/jquery/3.3.1/jquery.min.jsm': true,
'resources/jquery/3.4.0/jquery.min.jsm': true,
'resources/jquery/3.4.1/jquery.min.jsm': true,
'resources/jquery/3.5.0/jquery.min.jsm': true,
'resources/jquery/3.5.1/jquery.min.jsm': true,
// Moment.js
'resources/moment.js/2.8.3/moment.min.jsm': true,
'resources/moment.js/2.8.4/moment.min.jsm': true,
'resources/moment.js/2.10.2/moment.min.jsm': true,
'resources/moment.js/2.10.3/moment.min.jsm': true,
'resources/moment.js/2.10.6/moment.min.jsm': true,
'resources/moment.js/2.11.1/moment.min.jsm': true,
'resources/moment.js/2.11.2/moment.min.jsm': true,
'resources/moment.js/2.17.0/moment.min.jsm': true,
'resources/moment.js/2.17.1/moment.min.jsm': true,
'resources/moment.js/2.18.1/moment.min.jsm': true,
'resources/moment.js/2.19.1/moment.min.jsm': true,
'resources/moment.js/2.19.2/moment.min.jsm': true,
'resources/moment.js/2.19.3/moment.min.jsm': true,
'resources/moment.js/2.20.1/moment.min.jsm': true,
'resources/moment.js/2.22.0/moment.min.jsm': true,
'resources/moment.js/2.22.1/moment.min.jsm': true,
'resources/moment.js/2.22.2/moment.min.jsm': true,
// Underscore.js
'resources/underscore.js/1.9.0/underscore-min.jsm': true,
'resources/underscore.js/1.9.1/underscore-min.jsm': true
}
};

View file

@ -0,0 +1,521 @@
/**
* Interceptor
* Belongs to Decentraleyes.
*
* @author Thomas Rientjes
* @since 2016-04-06
* @license MPL 2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
'use strict';
/**
* Interceptor
*/
var interceptor = {};
/**
* Public Methods
*/
interceptor.handleRequest = function (requestDetails, tabIdentifier, tab) {
let validCandidate, tabDomain, targetDetails, targetPath;
validCandidate = requestAnalyzer.isValidCandidate(requestDetails, tab);
if (!validCandidate) {
return {
'cancel': false
};
}
tabDomain = helpers.extractDomainFromUrl(tab.url, true);
if (tabDomain === null) {
tabDomain = Address.EXAMPLE;
}
if (requestDetails.type === WebRequestType.XHR) {
if (tabDomain !== interceptor.xhrTestDomain) {
return interceptor._handleMissingCandidate(requestDetails.url);
}
}
if (interceptor.taintedDomains[tabDomain] || (/yandex\./).test(tabDomain) ||
(/wickedlocal\.com/).test(tabDomain)) {
return interceptor._handleMissingCandidate(requestDetails.url, true);
}
targetDetails = requestAnalyzer.getLocalTarget(requestDetails);
targetPath = targetDetails.path;
if (!targetPath) {
return interceptor._handleMissingCandidate(requestDetails.url);
}
if (!files.active[targetPath]) {
return interceptor._handleMissingCandidate(requestDetails.url);
}
stateManager.requests[requestDetails.requestId] = {
tabIdentifier, targetDetails
};
return {
'redirectUrl': chrome.runtime.getURL(targetPath + fileGuard.secret)
};
};
/**
* Private Methods
*/
interceptor._handleMissingCandidate = function (requestUrl, preserveUrl) {
let requestUrlSegments;
if (interceptor.blockMissing === true) {
return {
'cancel': true
};
}
if (preserveUrl === true) {
return {
'cancel': false
};
}
requestUrlSegments = new URL(requestUrl);
if (requestUrlSegments.protocol === Address.HTTP) {
requestUrlSegments.protocol = Address.HTTPS;
requestUrl = requestUrlSegments.toString();
return {
'redirectUrl': requestUrl
};
} else {
return {
'cancel': false
};
}
};
interceptor._handleStorageChanged = function (changes) {
if (Setting.XHR_TEST_DOMAIN in changes) {
interceptor.xhrTestDomain = changes.xhrTestDomain.newValue;
}
if (Setting.BLOCK_MISSING in changes) {
interceptor.blockMissing = changes.blockMissing.newValue;
}
};
/**
* Initializations
*/
// Temporary list of tainted domains.
interceptor.taintedDomains = {
'10fastfingers.com': true,
'ack.net': true,
'adelnews.com': true,
'adherent.lavilleavelo.org': true,
'advocatepress.com': true,
'aledotimesrecord.com': true,
'alicetx.com': true,
'amarillo.com': true,
'amestrib.com': true,
'amtrib.com': true,
'anyvan.com': true,
'apalachtimes.com': true,
'ardmoreite.com': true,
'augustachronicle.com': true,
'auroraadvertiser.net': true,
'barnesville-enterprise.com': true,
'barnstablepatriot.com': true,
'basissetexchange.org': true,
'bcdemocratonline.com': true,
'beauregarddailynews.net': true,
'blog.datawrapper.de': true,
'blueridgenow.com': true,
'blufftontoday.com': true,
'boonevilledemocrat.com': true,
'boonvilledailynews.com': true,
[`br.span${'kb'}ang.com`]: true,
'brownwoodtx.com': true,
'buckscountycouriertimes.com': true,
'bundleofholding.com': true,
'burlingtoncountytimes.com': true,
'butlercountytimesgazette.com': true,
'cambridgechron.com': true,
'cantondailyledger.com': true,
'cantonrep.com': true,
'capecodtimes.com': true,
'captcha.realtek.com': true,
'carmitimes.com': true,
'cdnjs.com': true,
'cellmapper.net': true,
'charlestonexpress.com': true,
'cheboygannews.com': true,
'chieftain.com': true,
'chillicothenews.com': true,
'chillicothetimesbulletin.com': true,
'chipleypaper.com': true,
'chronicle-express.com': true,
'circuitlab.com': true,
'cjonline.com': true,
'code.world': true,
'columbiadailyherald.com': true,
'columbiatribune.com': true,
'courier-tribune.com': true,
'creativecommons.org': true,
'crestviewbulletin.com': true,
'crookstontimes.com': true,
'csgostats.gg': true,
'daily-jeff.com': true,
'dailycomet.com': true,
'dailycommercial.com': true,
'dansvilleonline.com': true,
'de.sharkoon.com': true,
[`de.span${'kb'}ang.com`]: true,
'devilslakejournal.com': true,
'dispatch.com': true,
'docs.servicenow.com': true,
'dodgeglobe.com': true,
'donaldsonvillechief.com': true,
'doverpost.com': true,
'dropbox.com': true,
'eastpeoriatimescourier.com': true,
'echo-news.co.uk': true,
'echo-pilot.com': true,
'edinburgreview.com': true,
'ellwoodcityledger.com': true,
'en.sharkoon.com': true,
'enterprisenews.com': true,
'epey.com': true,
'es.sharkoon.com': true,
[`es.span${'kb'}ang.com`]: true,
'evoice.com': true,
'examiner-enterprise.com': true,
'examiner.net': true,
'fayobserver.com': true,
'fosters.com': true,
'fowlertribune.com': true,
'fr.sharkoon.com': true,
[`fr.span${'kb'}ang.com`]: true,
'freebusy.io': true,
'gadsdentimes.com': true,
'gainesville.com': true,
'galesburg.com': true,
'galvanews.com': true,
'gastongazette.com': true,
'gazetadopovo.com.br': true,
'gctelegram.com': true,
'gdt.oqlf.gouv.qc.ca': true,
'geneseorepublic.com': true,
'globetrotter.de': true,
'glowing-bear.org': true,
'goerie.com': true,
'goupstate.com': true,
'grandlakenews.com': true,
'granitefallsnews.com': true,
'greenwooddemocrat.com': true,
'hamburgreporter.com': true,
'hannibal.net': true,
'havenews.com': true,
'hdnews.net': true,
'helena-arkansas.com': true,
'heralddemocrat.com': true,
'heraldnews.com': true,
'heraldtribune.com': true,
'hillsdale.net': true,
'hockessincommunitynews.com': true,
'hollandsentinel.com': true,
'houmatoday.com': true,
'hsvvoice.com': true,
'hutchnews.com': true,
'ico.org.uk': true,
[`id.span${'kb'}ang.com`]: true,
'identi.ca': true,
[`in.span${'kb'}ang.com`]: true,
'indeonline.com': true,
'it.sharkoon.com': true,
[`it.span${'kb'}ang.com`]: true,
'ja.sharkoon.com': true,
'jacksonnewspapers.com': true,
'jacksonville.com': true,
'jdnews.com': true,
'journaldemocrat.com': true,
'journalstandard.com': true,
'joyfulnoiserecordings.com': true,
[`jp.span${'kb'}ang.com`]: true,
'kinston.com': true,
'kiowacountysignal.com': true,
'kirksvilledailyexpress.com': true,
'ko.sharkoon.com': true,
[`la.span${'kb'}ang.com`]: true,
'labdoor.com': true,
'lajuntatribunedemocrat.com': true,
'lakenewsonline.com': true,
'laziska.com.pl': true,
'leavenworthtimes.com': true,
'leesvilledailyleader.com': true,
'lemon-aid.de': true,
'lenconnect.com': true,
'leominsterchamp.com': true,
'lincolncourier.com': true,
'linkbostonhomes.com': true,
'linncountyleader.com': true,
'lubbockonline.com': true,
'm-ce.pl': true,
'manualslib.com': true,
'mcdonoughvoice.com': true,
'mcphersonsentinel.com': true,
'meslieux.paris.fr': true,
'metrowestdailynews.com': true,
'mexicoledger.com': true,
'mgm.gov.tr': true,
'miamiok.com': true,
'middletowntranscript.com': true,
'midlothianmirror.com': true,
'milfordbeacon.com': true,
'milforddailynews.com': true,
'millburysutton.com': true,
'minigames.mail.ru': true,
'miniquadtestbench.com': true,
'moberlymonitor.com': true,
'mojbytom.pl': true,
'mojchorzow.pl': true,
'mojegliwice.pl': true,
'mojekatowice.pl': true,
'mojetychy.pl': true,
'mojmikolow.pl': true,
'monroecopost.com': true,
'monroenews.com': true,
'montenews.com': true,
'morningsun.net': true,
'mortontimesnews.com': true,
'moscowvillager.com': true,
'mpnnow.com': true,
[`ms.span${'kb'}ang.com`]: true,
'mtshastanews.com': true,
'mytownneo.com': true,
'ncnewspress.com': true,
'neagle.com': true,
'neoshodailynews.com': true,
'nevadaiowajournal.com': true,
'newbernsj.com': true,
'newcomerstown-news.com': true,
'newlook.dteenergy.com': true,
'newportri.com': true,
'news-journalonline.com': true,
'news-star.com': true,
'newschief.com': true,
'newsherald.com': true,
'newsrepublican.com': true,
'newstribune.info': true,
'nhm.ac.uk': true,
'nl.sharkoon.com': true,
[`nl.span${'kb'}ang.com`]: true,
'northneighbornews.com': true,
'norwichbulletin.com': true,
'nwfdailynews.com': true,
'oakridger.com': true,
'ocala.com': true,
'ohio.com': true,
'olneydailymail.com': true,
'onlineathens.com': true,
'onwelo.com': true,
'opavote.com': true,
'opendata.cbs.nl': true,
'openweathermap.org': true,
'oriongazette.com': true,
'orzesze.com.pl': true,
'ottawaherald.com': true,
'palmbeachpost.com': true,
'pandoc.org': true,
'paris-express.com': true,
'patriotledger.com': true,
'pawhuskajournalcapital.com': true,
'pbcommercial.com': true,
'pekintimes.com': true,
'peoplefone.ch': true,
'piekaryslaskie.com.pl': true,
'pjstar.com': true,
'pl.sharkoon.com': true,
[`pl.span${'kb'}ang.com`]: true,
'poconorecord.com': true,
'poedb.tw': true,
'pontiacdailyleader.com': true,
'postsouth.com': true,
'pratttribune.com': true,
'pressargus.com': true,
'pressmentor.com': true,
'processtypefoundry.com': true,
'progress-index.com': true,
'prosperpressnews.com': true,
'providencejournal.com': true,
'pt.sharkoon.com': true,
[`pt.span${'kb'}ang.com`]: true,
'pyskowice.com.pl': true,
'qwertee.com': true,
'record-courier.com': true,
'recordnet.com': true,
'recordonline.com': true,
'recordstar.com': true,
'redwoodfallsgazette.com': true,
'regentgreymouth.co.nz': true,
'registerguard.com': true,
'report-uri.io': true,
'reviewatlas.com': true,
'ridgecrestca.com': true,
'rrstar.com': true,
'ru.sharkoon.com': true,
[`ru.span${'kb'}ang.com`]: true,
'rudaslaska.com.pl': true,
'runnelscountyregister.com': true,
'rybnicki.com': true,
'salina.com': true,
'savannahnow.com': true,
'scan.nextcloud.com': true,
'scotthelme.co.uk': true,
'scsuntimes.com': true,
[`se.span${'kb'}ang.com`]: true,
'seacoastonline.com': true,
'securityheaders.com': true,
'securityheaders.io': true,
'sekvoice.com': true,
'sentinel-standard.com': true,
'shelbystar.com': true,
'siemianowice.net.pl': true,
'signal.org': true,
'siskiyoudaily.com': true,
'sj-r.com': true,
'sjnewsonline.com': true,
'sleepyeyenews.com': true,
'somiibo.com': true,
'sooeveningnews.com': true,
'sosnowiecki.pl': true,
'southcoasttoday.com': true,
[`span${'kb'}ang.com`]: true,
'srpressgazette.com': true,
'stadium.se': true,
'starcourier.com': true,
'starfl.com': true,
'starnewsonline.com': true,
'statesman.com': true,
'staugustine.com': true,
'stefansundin.github.io': true,
'steubencourier.com': true,
'stjamesnews.com': true,
'sturgisjournal.com': true,
'stuttgartdailyleader.com': true,
'swiony.pl': true,
'swtimes.com': true,
'taftmidwaydriller.com': true,
'tauntongazette.com': true,
'telegram.com': true,
'teutopolispress.com': true,
[`th.span${'kb'}ang.com`]: true,
'the-daily-record.com': true,
'the-dispatch.com': true,
'the-leader.com': true,
'the-review.com': true,
'thecarbondalenews.com': true,
'thedailyreporter.com': true,
'thedestinlog.com': true,
'thegraftonnews.com': true,
'thegurdontimes.com': true,
'thehawkeye.com': true,
'theintell.com': true,
'thekansan.com': true,
'thelandmark.com': true,
'theledger.com': true,
'theperrychief.com': true,
'therecordherald.com': true,
'therolladailynews.com': true,
'thesuburbanite.com': true,
'thetimesnews.com': true,
'thisweeknews.com': true,
'times-gazette.com': true,
'timescale.com': true,
'timesonline.com': true,
'timesreporter.com': true,
'timestelegram.com': true,
'tones.be': true,
'topsailadvertiser.com': true,
'tr.sharkoon.com': true,
[`tr.span${'kb'}ang.com`]: true,
'transcend-info.com': true,
'tunemymusic.com': true,
'tuscaloosanews.com': true,
'udacity.com': true,
'unifiedportal-mem.epfindia.gov.in': true,
'uticaod.com': true,
'uworld.com': true,
'vanalstyneleader.com': true,
'viaplay.se': true,
'vvdailypress.com': true,
'waltonsun.com': true,
'washingtontimesreporter.com': true,
'waxahachietx.com': true,
'wayneindependent.com': true,
'waynepost.com': true,
'web-patient.dk': true,
'weeklycitizen.com': true,
'wellingtondailynews.com': true,
'wellsvilledaily.com': true,
'whitehalljournal.com': true,
'wodzislaw.com.pl': true,
'woodfordtimes.com': true,
'worcestermag.com': true,
'yadi.sk': true,
'yelp.com': true,
'yourglenrosetx.com': true,
'yourstephenvilletx.com': true,
'yourvalleyvoice.com': true,
'yourvotematters.co.uk': true,
'zabrze.com.pl': true,
'zh-hant.sharkoon.com': true,
'zory.com.pl': true
};
interceptor.amountInjected = 0;
interceptor.xhrTestDomain = Address.DECENTRALEYES;
interceptor.blockMissing = false;
interceptor.relatedSettings = [];
interceptor.relatedSettings.push(Setting.AMOUNT_INJECTED);
interceptor.relatedSettings.push(Setting.XHR_TEST_DOMAIN);
interceptor.relatedSettings.push(Setting.BLOCK_MISSING);
helpers.getStoredSettings(interceptor.relatedSettings, function (items) {
interceptor.amountInjected = items.amountInjected || 0;
interceptor.xhrTestDomain = items.xhrTestDomain || Address.DECENTRALEYES;
interceptor.blockMissing = items.blockMissing || false;
});
/**
* Event Handlers
*/
chrome.storage.onChanged.addListener(interceptor._handleStorageChanged);

View file

@ -0,0 +1,101 @@
/**
* Entry Point
* Belongs to Decentraleyes.
*
* @author Thomas Rientjes
* @since 2016-04-04
* @license MPL-2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
'use strict';
/**
* Main
*/
var main = {};
/**
* Private Methods
*/
main._initializeSettings = function () {
let settings = [
Setting.XHR_TEST_DOMAIN,
Setting.SHOW_ICON_BADGE,
Setting.BLOCK_MISSING,
Setting.DISABLE_PREFETCH,
Setting.ENFORCE_STAGING,
Setting.STRIP_METADATA,
Setting.WHITELISTED_DOMAINS
];
helpers.getStoredSettings(settings, function (items) {
if (items.blockMissing === true || items.enforceStaging === true) {
stateManager.updateEnvironment(Environment.STAGING);
} else {
stateManager.updateEnvironment(Environment.STABLE);
}
if (items.disablePrefetch !== false) {
chrome.privacy.network.networkPredictionEnabled.set({
'value': false
});
}
});
};
main._showReleaseNotes = function (details) {
let location, previousVersion, setting;
location = chrome.runtime.getURL('pages/welcome/welcome.html');
if (details.reason === chrome.runtime.OnInstalledReason.INSTALL ||
details.reason === chrome.runtime.OnInstalledReason.UPDATE) {
previousVersion = details.previousVersion;
setting = Setting.SHOW_RELEASE_NOTES;
if (previousVersion && previousVersion.charAt(0) === '2') {
return; // Do not show release notes after minor updates.
}
if (details.temporary === true) {
return; // Only show release notes on full installations.
}
helpers.getStoredSettings(setting, function (items) {
if (items.showReleaseNotes === true) {
chrome.tabs.create({
'url': location,
'active': false
});
}
});
}
};
/**
* Initializations
*/
chrome.runtime.onInstalled.addListener(main._showReleaseNotes);
main._initializeSettings();
wrappers.browserAction.setBadgeBackgroundColor({
'color': [74, 130, 108, 255]
});
wrappers.browserAction.setBadgeTextColor({
'color': [255, 255, 255, 255]
});

View file

@ -0,0 +1,301 @@
/**
* Mappings
* Belongs to Decentraleyes.
*
* @author Thomas Rientjes
* @since 2014-05-30
* @license MPL 2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
'use strict';
/**
* Mappings
*/
var mappings = {
// Google Hosted Libraries
'ajax.googleapis.com': {
'/ajax/libs/': {
'angularjs/{version}/angular.': resources.angular,
'dojo/{version}/dojo/dojo.': resources.dojo,
'ext-core/{version}/ext-core.': resources.extCore,
'ext-core/{version}/ext-core-debug.': resources.extCore,
'jquery/{version}/jquery.': resources.jQuery,
'jqueryui/{version}/jquery-ui.js': resources.jQueryUI,
'jqueryui/{version}/jquery-ui.min.js': resources.jQueryUI,
'mootools/{version}/mootools-yui-compressed.': resources.mootools,
'prototype/{version}/prototype.': resources.prototypeJS,
'scriptaculous/{version}/scriptaculous.': resources.scriptaculous,
'swfobject/{version}/swfobject.': resources.swfobject,
'webfont/{version}/webfont.': resources.webfont,
// Basic Shorthand Notations [Deprecated]
'dojo/1/dojo/dojo.': {
'path': 'resources/dojo/1.6.1/dojo/dojo.jsm',
'type': 'application/javascript'
},
'jquery/1/jquery.': {
'path': 'resources/jquery/1.11.1/jquery.min.jsm',
'type': 'application/javascript'
},
'jqueryui/1/jquery-ui.js': {
'path': 'resources/jqueryui/1.10.4/jquery-ui.min.jsm',
'type': 'application/javascript'
},
'jqueryui/1/jquery-ui.min.js': {
'path': 'resources/jqueryui/1.10.4/jquery-ui.min.jsm',
'type': 'application/javascript'
},
'mootools/1/mootools-yui-compressed.': {
'path': 'resources/mootools/1.1.2/mootools-yui-compressed.jsm',
'type': 'application/javascript'
},
'prototype/1/prototype.': {
'path': 'resources/prototype/1.7.1.0/prototype.jsm',
'type': 'application/javascript'
},
'scriptaculous/1/scriptaculous.': {
'path': 'resources/scriptaculous/1.9.0/scriptaculous.jsm',
'type': 'application/javascript'
},
'swfobject/2/swfobject.': {
'path': 'resources/swfobject/2.2/swfobject.jsm',
'type': 'application/javascript'
},
'webfont/1/webfont.': {
'path': 'resources/webfont/1.5.18/webfont.jsm',
'type': 'application/javascript'
}
}
},
// Microsoft Ajax CDN
'ajax.aspnetcdn.com': {
'/ajax/': {
'jQuery/jquery-{version}.': resources.jQuery,
'jquery/jquery-{version}.': resources.jQuery,
'modernizr/modernizr-{version}.': resources.modernizr
}
},
// Microsoft Ajax CDN [Deprecated]
'ajax.microsoft.com': {
'/ajax/': {
'jQuery/jquery-{version}.': resources.jQuery,
'jquery/jquery-{version}.': resources.jQuery,
'modernizr/modernizr-{version}.': resources.modernizr
}
},
// CDNJS (Cloudflare)
'cdnjs.cloudflare.com': {
'/ajax/libs/': {
'angular.js/{version}/angular.': resources.angular,
'backbone.js/{version}/backbone.': resources.backbone,
'backbone.js/{version}/backbone-min.': resources.backbone,
'dojo/{version}/dojo.': resources.dojo,
'ember.js/{version}/ember.': resources.ember,
'ext-core/{version}/ext-core.': resources.extCore,
'jquery/{version}/jquery.': resources.jQuery,
'jqueryui/{version}/jquery-ui.js': resources.jQueryUI,
'jqueryui/{version}/jquery-ui.min.js': resources.jQueryUI,
'modernizr/{version}/modernizr.': resources.modernizr,
'moment.js/{version}/moment.': resources.moment,
'mootools/{version}/mootools-core': resources.mootools,
'scriptaculous/{version}/scriptaculous.': resources.scriptaculous,
'swfobject/{version}/swfobject.': resources.swfobject,
'underscore.js/{version}/underscore.': resources.underscore,
'underscore.js/{version}/underscore-min.': resources.underscore,
'webfont/{version}/webfont': resources.webfont
}
},
// jQuery CDN (MaxCDN)
'code.jquery.com': {
'/': {
'jquery-{version}.': resources.jQuery,
'ui/{version}/jquery-ui.js': resources.jQueryUI,
'ui/{version}/jquery-ui.min.js': resources.jQueryUI,
// Basic Shorthand Notations [Deprecated]
'jquery-latest.': {
'path': 'resources/jquery/1.11.1/jquery.min.jsm',
'type': 'application/javascript'
},
'jquery.': {
'path': 'resources/jquery/1.11.1/jquery.min.jsm',
'type': 'application/javascript'
}
}
},
// jsDelivr (MaxCDN)
'cdn.jsdelivr.net': {
'/': {
'angularjs/{version}/angular.': resources.angular,
'backbonejs/{version}/backbone.': resources.backbone,
'backbonejs/{version}/backbone-min.': resources.backbone,
'dojo/{version}/dojo.': resources.dojo,
'emberjs/{version}/ember.': resources.ember,
'jquery/{version}/jquery.': resources.jQuery,
'jquery.ui/{version}/jquery-ui.js': resources.jQueryUI,
'jquery.ui/{version}/jquery-ui.min.js': resources.jQueryUI,
'momentjs/{version}/moment.': resources.moment,
'mootools/{version}/mootools-': resources.mootools,
'swfobject/{version}/swfobject.': resources.swfobject,
'underscorejs/{version}/underscore.': resources.underscore,
'underscorejs/{version}/underscore-min.': resources.underscore,
'webfontloader/{version}/webfont': resources.webfont
}
},
// Yandex CDN
'yastatic.net': {
'/': {
'angularjs/{version}/angular.': resources.angular,
'backbone/{version}/backbone.': resources.backbone,
'backbone/{version}/backbone-min.': resources.backbone,
'dojo/{version}/dojo/dojo.': resources.dojo,
'ext-core/{version}/ext-core.': resources.extCore,
'jquery/{version}/jquery.': resources.jQuery,
'jquery-ui/{version}/jquery-ui.js': resources.jQueryUI,
'jquery-ui/{version}/jquery-ui.min.js': resources.jQueryUI,
'modernizr/{version}/modernizr.': resources.modernizr,
'momentjs/{version}/moment.': resources.moment,
'prototype/{version}/prototype.': resources.prototypeJS,
'scriptaculous/{version}/scriptaculous.': resources.scriptaculous,
'swfobject/{version}/swfobject.': resources.swfobject,
'underscore/{version}/underscore.': resources.underscore,
'underscore/{version}/underscore-min.': resources.underscore
}
},
// Yandex CDN [Deprecated]
'yandex.st': {
'/': {
'angularjs/{version}/angular.': resources.angular,
'backbone/{version}/backbone.': resources.backbone,
'backbone/{version}/backbone-min.': resources.backbone,
'dojo/{version}/dojo/dojo.': resources.dojo,
'ext-core/{version}/ext-core.': resources.extCore,
'jquery/{version}/jquery.': resources.jQuery,
'jquery-ui/{version}/jquery-ui.js': resources.jQueryUI,
'jquery-ui/{version}/jquery-ui.min.js': resources.jQueryUI,
'modernizr/{version}/modernizr.': resources.modernizr,
'momentjs/{version}/moment.': resources.moment,
'prototype/{version}/prototype.': resources.prototypeJS,
'scriptaculous/{version}/scriptaculous.': resources.scriptaculous,
'swfobject/{version}/swfobject.': resources.swfobject,
'underscore/{version}/underscore.': resources.underscore,
'underscore/{version}/underscore-min.': resources.underscore
}
},
// Baidu CDN
'apps.bdimg.com': {
'/libs/': {
'angular.js/{version}/angular.': resources.angular,
'backbone.js/{version}/backbone.': resources.backbone,
'backbone.js/{version}/backbone-min.': resources.backbone,
'dojo/{version}/dojo.': resources.dojo,
'ember.js/{version}/ember.': resources.ember,
'ext-core/{version}/ext-core.': resources.extCore,
'jquery/{version}/jquery.': resources.jQuery,
'jqueryui/{version}/jquery-ui.js': resources.jQueryUI,
'jqueryui/{version}/jquery-ui.min.js': resources.jQueryUI,
'moment/{version}/moment.': resources.moment,
'mootools/{version}/mootools-yui-compressed.': resources.mootools,
'prototype/{version}/prototype.': resources.prototypeJS,
'scriptaculous/{version}/scriptaculous.': resources.scriptaculous,
'swfobject/{version}/swfobject.': resources.swfobject,
'swfobject/{version}/swfobject_src.': resources.swfobject,
'underscore.js/{version}/underscore.': resources.underscore,
'underscore.js/{version}/underscore-min.': resources.underscore,
'webfont/{version}/webfont.': resources.webfont,
'webfont/{version}/webfont_debug.': resources.webfont
}
},
// Baidu CDN [Deprecated]
'libs.baidu.com': {
'/': {
'backbone/{version}/backbone.': resources.backbone,
'backbone/{version}/backbone-min.': resources.backbone,
'dojo/{version}/dojo.': resources.dojo,
'ext-core/{version}/ext-core.': resources.extCore,
'jquery/{version}/jquery.': resources.jQuery,
'jqueryui/{version}/jquery-ui.js': resources.jQueryUI,
'jqueryui/{version}/jquery-ui.min.js': resources.jQueryUI,
'moment/{version}/moment.': resources.moment,
'mootools/{version}/mootools-yui-compressed.': resources.mootools,
'prototype/{version}/prototype.': resources.prototypeJS,
'scriptaculous/{version}/scriptaculous.': resources.scriptaculous,
'swfobject/{version}/swfobject.': resources.swfobject,
'underscore/{version}/underscore.': resources.underscore,
'underscore/{version}/underscore-min.': resources.underscore,
'webfont/{version}/webfont.': resources.webfont,
'webfont/{version}/webfont_debug.': resources.webfont
}
},
// Sina Public Resources
'lib.sinaapp.com': {
'/js/': {
'angular.js/angular-{version}/angular.': resources.angular,
'backbone/{version}/backbone.': resources.backbone,
'dojo/{version}/dojo.': resources.dojo,
'ext-core/{version}/ext-core.': resources.extCore,
'ext-core/{version}/ext-core-debug.': resources.extCore,
'jquery/{version}/jquery.': resources.jQuery,
'jquery-ui/{version}/jquery-ui.js': resources.jQueryUI,
'jquery-ui/{version}/jquery-ui.min.js': resources.jQueryUI,
'mootools/{version}/mootools.': resources.mootools,
'prototype/{version}/prototype.': resources.prototypeJS,
'scriptaculous/{version}/scriptaculous.': resources.scriptaculous,
'swfobject/{version}/swfobject.': resources.swfobject,
'underscore/{version}/underscore.': resources.underscore,
'underscore/{version}/underscore-min.': resources.underscore,
'webfont/{version}/webfont.': resources.webfont,
'webfont/{version}/webfont_debug.': resources.webfont
}
},
// UpYun Library
'upcdn.b0.upaiyun.com': {
'/libs/': {
'dojo/dojo-{version}.': resources.dojo,
'emberjs/emberjs-{version}.': resources.ember,
'jquery/jquery-{version}.': resources.jQuery,
'jqueryui/jquery.ui-{version}.js': resources.jQueryUI,
'jqueryui/jquery.ui-{version}.min.js': resources.jQueryUI,
'modernizr/modernizr-{version}.': resources.modernizr,
'mootoolscore/mootools.core-{version}.': resources.mootools
}
},
// BootCDN
'cdn.bootcss.com': {
'/': {
'angular.js/{version}/angular.': resources.angular,
'backbone.js/{version}/backbone.': resources.backbone,
'backbone.js/{version}/backbone-min.': resources.backbone,
'dojo/{version}/dojo.': resources.dojo,
'ember.js/{version}/ember.': resources.ember,
'ext-core/{version}/ext-core.': resources.extCore,
'jquery/{version}/jquery.': resources.jQuery,
'jqueryui/{version}/jquery-ui.js': resources.jQueryUI,
'jqueryui/{version}/jquery-ui.min.js': resources.jQueryUI,
'modernizr/{version}/modernizr.': resources.modernizr,
'moment.js/{version}/moment.': resources.moment,
'mootools/{version}/mootools-yui-compressed.': resources.mootools,
'prototype/{version}/prototype.': resources.prototypeJS,
'scriptaculous/{version}/scriptaculous.': resources.scriptaculous,
'swfobject/{version}/swfobject.': resources.swfobject,
'underscore.js/{version}/underscore.': resources.underscore,
'underscore.js/{version}/underscore-min.': resources.underscore,
'webfont/{version}/webfontloader.': resources.webfont
}
}
};
// Geekzu Public Service [Mirror]
mappings['sdn.geekzu.org'] = {
'/ajax/ajax/libs/': mappings['ajax.googleapis.com']['/ajax/libs/']
};
// USTC Linux User Group [Mirror]
mappings['ajax.proxy.ustclug.org'] = mappings['ajax.googleapis.com'];

View file

@ -0,0 +1,70 @@
/**
* Messenger
* Belongs to Decentraleyes.
*
* @author Thomas Rientjes
* @since 2018-05-28
* @license MPL 2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
'use strict';
/**
* Messenger
*/
var messenger = {};
/**
* Private Methods
*/
messenger._handleMessageReceived = function (message, sender, sendResponse) {
let topic, value;
topic = message.topic;
value = message.value;
if (topic === 'tab:fetch-injections') {
sendResponse({'value': stateManager.tabs[value].injections});
return MessageResponse.SYNCHRONOUS;
}
if (topic === 'domain:fetch-is-whitelisted') {
let whitelistRecord = requestAnalyzer.whitelistedDomains[value];
sendResponse({'value': Boolean(whitelistRecord)});
return MessageResponse.SYNCHRONOUS;
}
if (topic === 'whitelist:add-domain') {
stateManager.addDomainToWhitelist(value).then(function () {
sendResponse({'value': true});
});
return MessageResponse.ASYNCHRONOUS;
}
if (topic === 'whitelist:remove-domain') {
stateManager.removeDomainFromWhitelist(value).then(function () {
sendResponse({'value': true});
});
return MessageResponse.ASYNCHRONOUS;
}
};
/**
* Event Handlers
*/
chrome.runtime.onMessage.addListener(messenger._handleMessageReceived);

View file

@ -0,0 +1,151 @@
/**
* Request Analyzer
* Belongs to Decentraleyes.
*
* @author Thomas Rientjes
* @since 2016-04-11
* @license MPL 2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
'use strict';
/**
* Request Analyzer
*/
var requestAnalyzer = {};
/**
* Public Methods
*/
requestAnalyzer.isValidCandidate = function (requestDetails, tabDetails) {
let initiatorDomain, isWhitelisted;
initiatorDomain = helpers.extractDomainFromUrl(tabDetails.url, true);
if (initiatorDomain === null) {
initiatorDomain = Address.EXAMPLE;
}
isWhitelisted = requestAnalyzer.whitelistedDomains[initiatorDomain];
if (isWhitelisted) {
return false;
}
// Only requests of type GET can be valid candidates.
return requestDetails.method === WebRequest.GET;
};
requestAnalyzer.getLocalTarget = function (requestDetails) {
let destinationUrl, destinationHost, destinationPath, hostMappings, basePath, resourceMappings;
destinationUrl = new URL(requestDetails.url);
destinationHost = destinationUrl.host;
destinationPath = destinationUrl.pathname;
// Use the proper mappings for the targeted host.
hostMappings = mappings[destinationHost];
// Resource mapping files are never locally available.
if (Resource.MAPPING_EXPRESSION.test(destinationPath)) {
return false;
}
basePath = requestAnalyzer._matchBasePath(hostMappings, destinationPath);
resourceMappings = hostMappings[basePath];
if (!resourceMappings) {
return false;
}
// Return either the local target's path or false.
return requestAnalyzer._findLocalTarget(resourceMappings, basePath, destinationHost, destinationPath);
};
/**
* Private Methods
*/
requestAnalyzer._matchBasePath = function (hostMappings, channelPath) {
for (let basePath of Object.keys(hostMappings)) {
if (channelPath.startsWith(basePath)) {
return basePath;
}
}
return false;
};
requestAnalyzer._findLocalTarget = function (resourceMappings, basePath, channelHost, channelPath) {
let resourcePath, versionNumber, resourcePattern;
resourcePath = channelPath.replace(basePath, '');
versionNumber = resourcePath.match(Resource.VERSION_EXPRESSION);
resourcePattern = resourcePath.replace(versionNumber, Resource.VERSION_PLACEHOLDER);
for (let resourceMold of Object.keys(resourceMappings)) {
if (resourcePattern.startsWith(resourceMold)) {
let targetPath, hostShorthands, version;
targetPath = resourceMappings[resourceMold].path;
targetPath = targetPath.replace(Resource.VERSION_PLACEHOLDER, versionNumber);
hostShorthands = shorthands[channelHost];
if (hostShorthands && hostShorthands[targetPath]) {
let shorthand = hostShorthands[targetPath];
targetPath = shorthand.path;
version = shorthand.version;
} else {
version = versionNumber && versionNumber[0] || targetPath.match(Resource.VERSION_EXPRESSION);
}
// Prepare and return a local target.
return {
'source': channelHost,
'version': version,
'path': targetPath
};
}
}
return false;
};
requestAnalyzer._applyWhitelistedDomains = function () {
helpers.getStoredSettings(Setting.WHITELISTED_DOMAINS, function (items) {
requestAnalyzer.whitelistedDomains = items.whitelistedDomains || {};
});
};
/**
* Initializations
*/
requestAnalyzer.whitelistedDomains = {};
requestAnalyzer._applyWhitelistedDomains();
/**
* Event Handlers
*/
chrome.storage.onChanged.addListener(requestAnalyzer._applyWhitelistedDomains);

View file

@ -0,0 +1,73 @@
/**
* Request Sanitizer
* Belongs to Decentraleyes.
*
* @author Thomas Rientjes
* @since 2018-01-10
* @license MPL 2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
'use strict';
/**
* Request Sanitizer
*/
var requestSanitizer = {};
/**
* Public Methods
*/
requestSanitizer.enable = function () {
let onBeforeSendHeaders = chrome.webRequest.onBeforeSendHeaders;
onBeforeSendHeaders.addListener(requestSanitizer._stripMetadata, {
'urls': stateManager.validHosts
}, [WebRequest.BLOCKING, WebRequest.HEADERS]);
};
requestSanitizer.disable = function () {
let onBeforeSendHeaders = chrome.webRequest.onBeforeSendHeaders;
onBeforeSendHeaders.removeListener(requestSanitizer._stripMetadata, {
'urls': stateManager.validHosts
}, [WebRequest.BLOCKING, WebRequest.HEADERS]);
};
/**
* Private Methods
*/
requestSanitizer._stripMetadata = function (requestDetails) {
let sensitiveHeaders = [Header.COOKIE, Header.ORIGIN, Header.REFERER];
for (let i = 0; i < requestDetails.requestHeaders.length; ++i) {
if (sensitiveHeaders.indexOf(requestDetails.requestHeaders[i].name) > -1) {
requestDetails.requestHeaders.splice(i--, 1);
}
}
return {
[WebRequest.HEADERS]: requestDetails.requestHeaders
};
};
/**
* Initializations
*/
helpers.getStoredSettings(Setting.STRIP_METADATA, function (items) {
if (items === null || items.stripMetadata !== false) {
requestSanitizer.enable();
}
});

View file

@ -0,0 +1,97 @@
/**
* Resources
* Belongs to Decentraleyes.
*
* @author Thomas Rientjes
* @since 2014-05-30
* @license MPL 2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
'use strict';
/**
* Resources
*/
var resources = {
// AngularJS
'angular': {
'path': 'resources/angularjs/{version}/angular.min.jsm',
'type': 'application/javascript'
},
// Backbone.js
'backbone': {
'path': 'resources/backbone.js/{version}/backbone-min.jsm',
'type': 'application/javascript'
},
// Dojo
'dojo': {
'path': 'resources/dojo/{version}/dojo/dojo.jsm',
'type': 'application/javascript'
},
// Ember.js
'ember': {
'path': 'resources/ember.js/{version}/ember.min.jsm',
'type': 'application/javascript'
},
// Ext Core
'extCore': {
'path': 'resources/ext-core/{version}/ext-core.jsm',
'type': 'application/javascript'
},
// jQuery
'jQuery': {
'path': 'resources/jquery/{version}/jquery.min.jsm',
'type': 'application/javascript'
},
// jQuery UI
'jQueryUI': {
'path': 'resources/jqueryui/{version}/jquery-ui.min.jsm',
'type': 'application/javascript'
},
// Modernizr
'modernizr': {
'path': 'resources/modernizr/{version}/modernizr.min.jsm',
'type': 'application/javascript'
},
// Moment.js
'moment': {
'path': 'resources/moment.js/{version}/moment.min.jsm',
'type': 'application/javascript'
},
// MooTools
'mootools': {
'path': 'resources/mootools/{version}/mootools-yui-compressed.jsm',
'type': 'application/javascript'
},
// Prototype
'prototypeJS': {
'path': 'resources/prototype/{version}/prototype.jsm',
'type': 'application/javascript'
},
// Scriptaculous
'scriptaculous': {
'path': 'resources/scriptaculous/{version}/scriptaculous.jsm',
'type': 'application/javascript'
},
// SWFObject
'swfobject': {
'path': 'resources/swfobject/{version}/swfobject.jsm',
'type': 'application/javascript'
},
// Underscore.js
'underscore': {
'path': 'resources/underscore.js/{version}/underscore-min.jsm',
'type': 'application/javascript'
},
// Web Font Loader
'webfont': {
'path': 'resources/webfont/{version}/webfont.jsm',
'type': 'application/javascript'
}
};

View file

@ -0,0 +1,82 @@
/**
* Shorthands
* Belongs to Decentraleyes.
*
* @author Thomas Rientjes
* @since 2018-02-24
* @license MPL 2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
'use strict';
/**
* Shorthands
*/
var shorthands = {
// Google Hosted Libraries [Deprecated]
'ajax.googleapis.com': {
'resources/jquery/1.8/jquery.min.jsm': {
'path': 'resources/jquery/1.8.3/jquery.min.jsm',
'version': '1.8.3'
},
'resources/jquery/1.7/jquery.min.jsm': {
'path': 'resources/jquery/1.7.2/jquery.min.jsm',
'version': '1.7.2'
},
'resources/jquery/1.6/jquery.min.jsm': {
'path': 'resources/jquery/1.6.4/jquery.min.jsm',
'version': '1.6.4'
},
'resources/jquery/1.5/jquery.min.jsm': {
'path': 'resources/jquery/1.5.2/jquery.min.jsm',
'version': '1.5.2'
},
'resources/jquery/1.4/jquery.min.jsm': {
'path': 'resources/jquery/1.4.4/jquery.min.jsm',
'version': '1.4.4'
},
'resources/jquery/1.3/jquery.min.jsm': {
'path': 'resources/jquery/1.3.2/jquery.min.jsm',
'version': '1.3.2'
},
'resources/jquery/1.2/jquery.min.jsm': {
'path': 'resources/jquery/1.2.6/jquery.min.jsm',
'version': '1.2.6'
}
},
// jQuery CDN [Deprecated]
'code.jquery.com': {
'resources/jquery/1.7/jquery.min.jsm': {
'path': 'resources/jquery/1.7.0/jquery.min.jsm',
'version': '1.7.0'
},
'resources/jquery/1.6/jquery.min.jsm': {
'path': 'resources/jquery/1.6.0/jquery.min.jsm',
'version': '1.6.0'
},
'resources/jquery/1.5/jquery.min.jsm': {
'path': 'resources/jquery/1.5.0/jquery.min.jsm',
'version': '1.5.0'
},
'resources/jquery/1.4/jquery.min.jsm': {
'path': 'resources/jquery/1.4.0/jquery.min.jsm',
'version': '1.4.0'
},
'resources/jquery/1.3/jquery.min.jsm': {
'path': 'resources/jquery/1.3.0/jquery.min.jsm',
'version': '1.3.0'
}
}
};
// Geekzu Public Service [Mirror]
shorthands['sdn.geekzu.org'] = shorthands['ajax.googleapis.com'];
// USTC Linux User Group [Mirror]
shorthands['ajax.proxy.ustclug.org'] = shorthands['ajax.googleapis.com'];

View file

@ -0,0 +1,378 @@
/**
* State Manager
* Belongs to Decentraleyes.
*
* @author Thomas Rientjes
* @since 2017-03-10
* @license MPL 2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
'use strict';
/**
* State Manager
*/
var stateManager = {};
/**
* Public Methods
*/
stateManager.registerInjection = function (tabIdentifier, injection) {
let injectionIdentifier, registeredTab, injectionCount;
injectionIdentifier = injection.source + injection.path + injection.version;
registeredTab = stateManager.tabs[tabIdentifier];
registeredTab.injections[injectionIdentifier] = injection;
injectionCount = Object.keys(registeredTab.injections).length || 0;
if (injectionCount > 0) {
helpers.updateBrowserActionTitle({
'tabId': tabIdentifier,
'title': `Decentraleyes (${injectionCount})`
});
if (stateManager.showIconBadge === true) {
wrappers.browserAction.setBadgeText({
'tabId': tabIdentifier,
'text': injectionCount.toString()
});
}
}
if (isNaN(interceptor.amountInjected)) {
helpers.getStoredSettings(Setting.AMOUNT_INJECTED, function (items) {
interceptor.amountInjected = items.amountInjected;
chrome.storage.local.set({
[Setting.AMOUNT_INJECTED]: ++interceptor.amountInjected
});
});
} else {
chrome.storage.local.set({
[Setting.AMOUNT_INJECTED]: ++interceptor.amountInjected
});
}
};
stateManager.setEnvironment = function (environment) {
if (environment === Environment.STABLE) {
// Strike a balance between coverage and website stability.
files.active = files.stable;
} else if (environment === Environment.STAGING) {
// Improve coverage at the expense of website stability.
files.active = Object.assign({}, files.stable, files.staging);
}
};
stateManager.updateEnvironment = function (preferredEnvironment) {
return new Promise((resolve) => {
if (preferredEnvironment === Environment.STABLE) {
let requiredItems = [Setting.BLOCK_MISSING, Setting.ENFORCE_STAGING];
helpers.getStoredSettings(requiredItems, function (items) {
if (items.blockMissing === true || items.enforceStaging === true) {
stateManager.setEnvironment(Environment.STAGING);
} else {
stateManager.setEnvironment(Environment.STABLE);
}
resolve();
});
} else if (preferredEnvironment === Environment.STAGING) {
stateManager.setEnvironment(Environment.STAGING);
resolve();
}
});
};
stateManager.addDomainToWhitelist = function (domain) {
return new Promise((resolve) => {
let whitelistedDomains = requestAnalyzer.whitelistedDomains;
whitelistedDomains[domain] = true;
chrome.storage.local.set({whitelistedDomains}, resolve);
});
};
stateManager.removeDomainFromWhitelist = function (domain) {
return new Promise((resolve) => {
let whitelistedDomains = requestAnalyzer.whitelistedDomains;
delete whitelistedDomains[domain];
chrome.storage.local.set({whitelistedDomains}, resolve);
});
};
/**
* Private Methods
*/
stateManager._createTab = function (tab) {
let tabIdentifier = tab.id;
stateManager.tabs[tabIdentifier] = {
'injections': {}
};
};
stateManager._removeTab = function (tabIdentifier) {
delete stateManager.tabs[tabIdentifier];
};
stateManager._updateTab = function (details) {
let tabDomain, domainIsWhitelisted, frameIdentifier, tabIdentifier;
tabDomain = helpers.extractDomainFromUrl(details.url, true);
domainIsWhitelisted = stateManager._domainIsWhitelisted(tabDomain);
frameIdentifier = details.frameId;
tabIdentifier = details.tabId;
if (frameIdentifier !== 0 || tabIdentifier === -1) {
return;
}
helpers.updateBrowserActionTitle({
'tabId': tabIdentifier,
'title': 'Decentraleyes (0)'
});
if (domainIsWhitelisted) {
stateManager._setIconDisabled(tabIdentifier);
helpers.updateBrowserActionTitle({
'tabId': tabIdentifier,
'title': 'Decentraleyes ()'
});
} else {
stateManager._setIconDefault(tabIdentifier);
}
if (stateManager.showIconBadge === true) {
stateManager._clearBadgeText(tabIdentifier);
}
if (stateManager.tabs[tabIdentifier]) {
stateManager.tabs[tabIdentifier].injections = {};
}
};
stateManager._handleStorageChanged = function (changes) {
if (Setting.BLOCK_MISSING in changes) {
if (changes.blockMissing.newValue === true) {
stateManager.updateEnvironment(Environment.STAGING);
} else {
stateManager.updateEnvironment(Environment.STABLE);
}
}
if (Setting.ENFORCE_STAGING in changes) {
if (changes.enforceStaging.newValue === true) {
stateManager.updateEnvironment(Environment.STAGING);
} else {
stateManager.updateEnvironment(Environment.STABLE);
}
}
if (Setting.SHOW_ICON_BADGE in changes) {
stateManager.showIconBadge = changes.showIconBadge.newValue;
if (changes.showIconBadge.newValue !== true) {
chrome.tabs.query({}, function (tabs) {
tabs.forEach(stateManager._removeIconBadgeFromTab);
});
}
}
if (Setting.STRIP_METADATA in changes) {
requestSanitizer.disable();
if (changes.stripMetadata.newValue !== false) {
requestSanitizer.enable();
}
}
};
stateManager._clearBadgeText = function (tabIdentifier) {
wrappers.browserAction.setBadgeText({
'tabId': tabIdentifier,
'text': ''
});
};
stateManager._removeIconBadgeFromTab = function (tab) {
stateManager._clearBadgeText(tab.id);
};
stateManager._domainIsWhitelisted = function (domain) {
if (domain !== null) {
let whitelistRecord, isWhitelisted;
whitelistRecord = requestAnalyzer.whitelistedDomains[domain];
isWhitelisted = Boolean(whitelistRecord);
return isWhitelisted;
}
return false;
};
stateManager._setIconDefault = function (tabIdentifier) {
wrappers.browserAction.setIcon({
'path': stateManager.defaultIconPath,
'tabId': tabIdentifier
});
};
stateManager._setIconDisabled = function (tabIdentifier) {
wrappers.browserAction.setIcon({
'path': stateManager.disabledIconPath,
'tabId': tabIdentifier
});
};
/**
* Initializations
*/
stateManager.requests = {};
stateManager.tabs = {};
stateManager.defaultIconPath = {
'16': chrome.runtime.getURL('icons/action/icon16-default.png'),
'18': chrome.runtime.getURL('icons/action/icon18-default.png'),
'19': chrome.runtime.getURL('icons/action/icon19-default.png'),
'32': chrome.runtime.getURL('icons/action/icon32-default.png'),
'36': chrome.runtime.getURL('icons/action/icon36-default.png'),
'38': chrome.runtime.getURL('icons/action/icon38-default.png'),
'64': chrome.runtime.getURL('icons/action/icon64-default.png')
};
stateManager.disabledIconPath = {
'16': chrome.runtime.getURL('icons/action/icon16-disabled.png'),
'18': chrome.runtime.getURL('icons/action/icon18-disabled.png'),
'19': chrome.runtime.getURL('icons/action/icon19-disabled.png'),
'32': chrome.runtime.getURL('icons/action/icon32-disabled.png'),
'36': chrome.runtime.getURL('icons/action/icon36-disabled.png'),
'38': chrome.runtime.getURL('icons/action/icon38-disabled.png'),
'64': chrome.runtime.getURL('icons/action/icon64-disabled.png')
};
stateManager.validHosts = [];
for (let mapping in mappings) {
let supportedHost = Address.ANY_PROTOCOL + mapping + Address.ANY_PATH;
stateManager.validHosts.push(supportedHost);
}
stateManager.requestFilters = {
'urls': stateManager.validHosts
};
chrome.webRequest.onBeforeRequest.addListener(function (requestDetails) {
let tab = stateManager.tabs[requestDetails.tabId].details || {};
return interceptor.handleRequest(requestDetails, requestDetails.tabId, tab);
}, stateManager.requestFilters, [WebRequest.BLOCKING]);
chrome.tabs.query({}, function (tabs) {
tabs.forEach(stateManager._createTab);
});
helpers.getStoredSettings(Setting.SHOW_ICON_BADGE, function (items) {
if (items.showIconBadge === undefined) {
items.showIconBadge = true;
}
stateManager.showIconBadge = items.showIconBadge;
});
/**
* Event Handlers
*/
chrome.tabs.onCreated.addListener(stateManager._createTab);
chrome.tabs.onRemoved.addListener(stateManager._removeTab);
chrome.webRequest.onBeforeRequest.addListener(function (requestDetails) {
if (requestDetails.tabId !== -1 && stateManager.tabs[requestDetails.tabId]) {
stateManager.tabs[requestDetails.tabId].details = {
'url': requestDetails.url
};
}
}, {'types': [WebRequestType.MAIN_FRAME], 'urls': [Address.ANY]});
chrome.webNavigation.onCommitted.addListener(stateManager._updateTab, {
'url': [{'urlContains': ':'}]
});
chrome.webRequest.onErrorOccurred.addListener(function (requestDetails) {
if (stateManager.requests[requestDetails.requestId]) {
delete stateManager.requests[requestDetails.requestId];
}
}, {'urls': [Address.ANY]});
chrome.webRequest.onBeforeRedirect.addListener(function (requestDetails) {
let knownRequest = stateManager.requests[requestDetails.requestId];
if (knownRequest) {
stateManager.registerInjection(knownRequest.tabIdentifier, knownRequest.targetDetails);
delete stateManager.requests[requestDetails.requestId];
}
}, {'urls': [Address.ANY]});
chrome.storage.onChanged.addListener(stateManager._handleStorageChanged);

View file

@ -0,0 +1,65 @@
#
# API Configuration
#
"project_id" : "153483"
"base_url" : "https://api.crowdin.com"
#
# Directory Configuration
#
"preserve_hierarchy" : true
#
# File Configuration
#
files: [{
"source" : "/_locales/en_US/messages.json",
"translation" : "/_locales/%locale_with_underscore%/messages.json",
"export_only_approved" : true,
"languages_mapping" : {
"locale_with_underscore" : {
"ar" : "ar",
"bg" : "bg",
"bn" : "bn",
"ca" : "ca",
"cs" : "cs",
"da" : "da",
"de" : "de",
"el" : "el",
"eo" : "eo",
"es-ES" : "es",
"et" : "et",
"fi" : "fi",
"fr" : "fr",
"he" : "he",
"hr" : "hr",
"hu" : "hu",
"id" : "id",
"is" : "is",
"it" : "it",
"ja" : "ja",
"ko" : "ko",
"lb" : "lb",
"nb" : "nb",
"nl" : "nl",
"pa-IN" : "pa",
"pl" : "pl",
"ro" : "ro",
"ru" : "ru",
"si-LK" : "si",
"sq" : "sq",
"sr" : "sr",
"sv-SE" : "sv",
"tl" : "tl",
"tr" : "tr",
"uk" : "uk",
"vi" : "vi"
}
}
}]

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

View file

@ -0,0 +1,40 @@
{
"author": "Thomas Rientjes",
"background": {
"page": "pages/background/background.html"
},
"browser_action": {
"browser_style": false,
"default_icon": {
"16": "icons/action/icon16-default.png",
"18": "icons/action/icon18-default.png",
"19": "icons/action/icon19-default.png",
"32": "icons/action/icon32-default.png",
"36": "icons/action/icon36-default.png",
"38": "icons/action/icon38-default.png",
"64": "icons/action/icon64-default.png"
},
"default_popup": "pages/popup/popup.html"
},
"default_locale": "en_US",
"description": "__MSG_extensionDescription__",
"icons": {
"128": "icons/icon128.png",
"16": "icons/icon16.png",
"48": "icons/icon48.png",
"96": "icons/icon96.png"
},
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhu1cIJlIwhM5mXgaoEs9l7TXrn9LrNvR+P3lr7WpbN9Mn5hRgNPG+AEwnhgEoFSuxP8SnyMZARSbmH9neZ5qvAO8GHEKmmciQhak9mpwdy95dGFiYvXQ9MvsVVRuIGjdOR/K8DS9fN8xK4hp94PDA/u50q6xlU1/gz1UYxFWoQlQUa6zj1XGRzNSxymN+T4uym9L5s7fQQPySRblcZlP8iDXKT0b1LTrurONbDnoWB/50R7NL0xBKvlLbMcVGfXTGTGKvHYG4WwyriyCDNhHoJGtF9NB16dIyD1FXEV1f1gLK1LZlNrOPqCmaAEh7Jczob3HTgsUU3jaKvNYM/74MQIDAQAB",
"manifest_version": 2,
"name": "Decentraleyes",
"options_ui": {
"page": "pages/options/options.html"
},
"permissions": [ "*://*/*", "privacy", "storage", "unlimitedStorage", "webNavigation", "webRequest", "webRequestBlocking" ],
"storage": {
"managed_schema": "schema.json"
},
"update_url": "https://clients2.google.com/service/update2/crx",
"version": "2.0.17",
"web_accessible_resources": [ "resources/*" ]
}

View file

@ -0,0 +1,344 @@
/**
* Internal Helper Module
* Belongs to Decentraleyes.
*
* @author Thomas Rientjes
* @since 2017-10-26
* @license MPL 2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
'use strict';
/**
* Helpers
*/
var helpers = {};
/**
* Public Methods
*/
helpers.getStoredSettings = function (keys, callback) {
helpers.getSettingDefaults(keys, function (defaults) {
wrappers.storage.managed.get(defaults, function (managedItems) {
if (!window.chrome.runtime.lastError) {
defaults = managedItems || defaults;
}
chrome.storage.local.get(defaults, function (localItems) {
if (localItems === null) {
return callback(defaults);
}
callback(localItems);
});
});
});
};
helpers.getSettingDefaults = function (keys, callback) {
let defaults, defaultKeys, matches;
defaults = {
[Setting.AMOUNT_INJECTED]: 0,
[Setting.BLOCK_MISSING]: false,
[Setting.DISABLE_PREFETCH]: true,
[Setting.ENFORCE_STAGING]: false,
[Setting.SHOW_ICON_BADGE]: true,
[Setting.SHOW_RELEASE_NOTES]: true,
[Setting.STRIP_METADATA]: true,
[Setting.WHITELISTED_DOMAINS]: {},
[Setting.XHR_TEST_DOMAIN]: Address.DECENTRALEYES,
};
defaultKeys = Object.keys(defaults);
matches = defaultKeys.reduce(function (accumulator, currentValue) {
if (keys.includes(currentValue)) {
accumulator[currentValue] = defaults[currentValue];
}
return accumulator;
}, {});
callback(matches);
};
helpers.insertI18nContentIntoDocument = function (document) {
let scriptDirection, i18nElements;
scriptDirection = helpers.determineScriptDirection(navigator.language);
i18nElements = document.querySelectorAll('[data-i18n-content]');
i18nElements.forEach(function (i18nElement) {
let i18nMessageName = i18nElement.getAttribute('data-i18n-content');
i18nElement.innerText = chrome.i18n.getMessage(i18nMessageName);
i18nElement.setAttribute('dir', scriptDirection);
});
};
helpers.insertI18nTitlesIntoDocument = function (document) {
let scriptDirection, i18nElements;
scriptDirection = helpers.determineScriptDirection(navigator.language);
i18nElements = document.querySelectorAll('[data-i18n-title]');
i18nElements.forEach(function (i18nElement) {
let i18nMessageName = i18nElement.getAttribute('data-i18n-title');
i18nElement.setAttribute('title', chrome.i18n.getMessage(i18nMessageName));
i18nElement.setAttribute('dir', scriptDirection);
});
};
helpers.languageIsFullySupported = function (language) {
let languageSupported, supportedLanguages;
languageSupported = false;
supportedLanguages = [
'ar', 'bg', 'bn', 'cs', 'da', 'de', 'el', 'en',
'eo', 'es', 'et', 'fi', 'fr', 'he', 'hr', 'hu',
'id', 'is', 'it', 'ja', 'ko', 'nb', 'nl', 'pl',
'pt', 'ro', 'ru', 'sq', 'sv', 'tr', 'zh'
];
for (let supportedLanguage of supportedLanguages) {
if (language.search(supportedLanguage) !== -1) {
languageSupported = true;
}
}
return languageSupported;
};
helpers.enterOrSpaceKeyPressed = function (event) {
if (!event.isComposing && event.keyCode !== 229) {
return event.keyCode === 13 || event.keyCode === 32;
}
return false;
};
helpers.normalizeDomain = function (domain) {
domain = domain.toLowerCase().trim();
if (domain.startsWith(Address.WWW_PREFIX)) {
domain = domain.slice(Address.WWW_PREFIX.length);
}
return domain;
};
helpers.extractDomainFromUrl = function (url = '', normalize) {
let extractedDomain;
try {
extractedDomain = new URL(url).host;
} catch (exception) {
extractedDomain = null;
}
if (url.startsWith(Address.CHROME)) {
extractedDomain = null;
}
if (extractedDomain === '') {
extractedDomain = null;
}
if (extractedDomain !== null && normalize === true) {
extractedDomain = helpers.normalizeDomain(extractedDomain);
}
return extractedDomain;
};
helpers.extractFilenameFromPath = function (path) {
let pathSegments, filename;
pathSegments = path.split('/');
filename = pathSegments[pathSegments.length - 1];
return filename;
};
helpers.generateRandomHexString = function (length) {
let randomValues, randomHexString;
randomValues = crypto.getRandomValues(new Uint8Array(length));
randomHexString = '';
for (let value of randomValues) {
// eslint-disable-next-line no-bitwise
let hexValue = (0 ^ value & 15 >> 0 / 4).toString(16);
randomHexString += hexValue;
}
return randomHexString;
};
helpers.determineActiveTab = function () {
return new Promise((resolve) => {
let queryParameters = {'active': true, 'currentWindow': true};
chrome.tabs.query(queryParameters, function (tabs) {
if (tabs[0]) {
resolve(tabs[0]);
} else {
queryParameters = {'active': true};
chrome.tabs.query(queryParameters, function (tabs) {
resolve(tabs[0]);
});
}
});
});
};
helpers.determineCdnName = function (domainName) {
switch (domainName) {
case 'ajax.googleapis.com':
return 'Google Hosted Libraries';
case 'ajax.aspnetcdn.com':
return 'Microsoft Ajax CDN';
case 'ajax.microsoft.com':
return 'Microsoft Ajax CDN [Deprecated]';
case 'cdnjs.cloudflare.com':
return 'CDNJS (Cloudflare)';
case 'code.jquery.com':
return 'jQuery CDN (MaxCDN)';
case 'cdn.jsdelivr.net':
return 'jsDelivr (MaxCDN)';
case 'yastatic.net':
return 'Yandex CDN';
case 'yandex.st':
return 'Yandex CDN [Deprecated]';
case 'apps.bdimg.com':
return 'Baidu CDN';
case 'libs.baidu.com':
return 'Baidu CDN [Deprecated]';
case 'lib.sinaapp.com':
return 'Sina Public Resources';
case 'upcdn.b0.upaiyun.com':
return 'UpYun Library';
case 'cdn.bootcss.com':
return 'BootCDN';
case 'sdn.geekzu.org':
return 'Geekzu Public Service [Mirror]';
case 'ajax.proxy.ustclug.org':
return 'USTC Linux User Group [Mirror]';
default:
return 'Unknown';
}
};
helpers.determineResourceName = function (filename) {
switch (filename) {
case 'angular.min.jsm':
return 'AngularJS';
case 'backbone-min.jsm':
return 'Backbone.js';
case 'dojo.jsm':
return 'Dojo';
case 'ember.min.jsm':
return 'Ember.js';
case 'ext-core.jsm':
return 'Ext Core';
case 'jquery.min.jsm':
return 'jQuery';
case 'jquery-ui.min.jsm':
return 'jQuery UI';
case 'modernizr.min.jsm':
return 'Modernizr';
case 'mootools-yui-compressed.jsm':
return 'MooTools';
case 'prototype.jsm':
return 'Prototype';
case 'scriptaculous.jsm':
return 'Scriptaculous';
case 'swfobject.jsm':
return 'SWFObject';
case 'underscore-min.jsm':
return 'Underscore.js';
case 'webfont.jsm':
return 'Web Font Loader';
default:
return 'Unknown';
}
};
helpers.determineScriptDirection = function (language) {
let rightToLeftLanguages, scriptDirection;
rightToLeftLanguages = ['ar', 'he'];
if (rightToLeftLanguages.indexOf(language) === -1) {
scriptDirection = 'ltr';
} else {
scriptDirection = 'rtl';
}
return scriptDirection;
};
helpers.formatNumber = function (number) {
if (typeof number === 'number') {
return number.toLocaleString();
}
};
helpers.formatVersion = function (version) {
if (version.indexOf('beta') === -1) {
return version;
} else {
return 'BETA';
}
};
helpers.updateBrowserActionTitle = function (details) {
chrome.runtime.getPlatformInfo(function (information) {
if (information.os !== chrome.runtime.PlatformOs.ANDROID ||
chrome.browserAction.setBadgeText === undefined) {
chrome.browserAction.setTitle(details);
}
});
};

View file

@ -0,0 +1,109 @@
/**
* Font Awesome Free 5.0.1 by @fontawesome - http://fontawesome.com
* License - http://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
*
* This internal icon set is based on multiple Font Awesome icon sets (see "License").
*/
/* eslint-disable */
(function () {
'use strict';
var _WINDOW = {};
try {
if (typeof window !== 'undefined') _WINDOW = window;
} catch (e) {}
var _ref = _WINDOW.navigator || {};
var _ref$userAgent = _ref.userAgent;
var userAgent = _ref$userAgent === undefined ? '' : _ref$userAgent;
var WINDOW = _WINDOW;
var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');
var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';
var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);
var RESERVED_CLASSES = ['xs', 'sm', 'lg', 'fw', 'ul', 'li', 'border', 'pull-left', 'pull-right', 'spin', 'pulse', 'rotate-90', 'rotate-180', 'rotate-270', 'flip-horizontal', 'flip-vertical', 'stack', 'stack-1x', 'stack-2x', 'inverse', 'layers', 'layers-text', 'layers-counter'].concat(oneToTen.map(function (n) {
return n + 'x';
})).concat(oneToTwenty.map(function (n) {
return 'w-' + n;
}));
function bunker(fn) {
try {
fn();
} catch (e) {
}
}
var icons$1 = {
'cog': [512, 512, [], 'f013', 'M444.788 291.1l42.616 24.599c4.867 2.809 7.126 8.618 5.459 13.985-11.07 35.642-29.97 67.842-54.689 94.586a12.016 12.016 0 0 1-14.832 2.254l-42.584-24.595a191.577 191.577 0 0 1-60.759 35.13v49.182a12.01 12.01 0 0 1-9.377 11.718c-34.956 7.85-72.499 8.256-109.219.007-5.49-1.233-9.403-6.096-9.403-11.723v-49.184a191.555 191.555 0 0 1-60.759-35.13l-42.584 24.595a12.016 12.016 0 0 1-14.832-2.254c-24.718-26.744-43.619-58.944-54.689-94.586-1.667-5.366.592-11.175 5.459-13.985L67.212 291.1a193.48 193.48 0 0 1 0-70.199l-42.616-24.599c-4.867-2.809-7.126-8.618-5.459-13.985 11.07-35.642 29.97-67.842 54.689-94.586a12.016 12.016 0 0 1 14.832-2.254l42.584 24.595a191.577 191.577 0 0 1 60.759-35.13V25.759a12.01 12.01 0 0 1 9.377-11.718c34.956-7.85 72.499-8.256 109.219-.007 5.49 1.233 9.403 6.096 9.403 11.723v49.184a191.555 191.555 0 0 1 60.759 35.13l42.584-24.595a12.016 12.016 0 0 1 14.832 2.254c24.718 26.744 43.619 58.944 54.689 94.586 1.667 5.366-.592 11.175-5.459 13.985L444.788 220.9a193.485 193.485 0 0 1 0 70.2zM336 256c0-44.112-35.888-80-80-80s-80 35.888-80 80 35.888 80 80 80 80-35.888 80-80z'],
'cube': [512, 512, [], 'f1b2', 'M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z'],
'donate': [512, 512, [], 'f4b9', 'M256 416c114.9 0 208-93.1 208-208S370.9 0 256 0 48 93.1 48 208s93.1 208 208 208zM233.8 97.4V80.6c0-9.2 7.4-16.6 16.6-16.6h11.1c9.2 0 16.6 7.4 16.6 16.6v17c15.5.8 30.5 6.1 43 15.4 5.6 4.1 6.2 12.3 1.2 17.1L306 145.6c-3.8 3.7-9.5 3.8-14 1-5.4-3.4-11.4-5.1-17.8-5.1h-38.9c-9 0-16.3 8.2-16.3 18.3 0 8.2 5 15.5 12.1 17.6l62.3 18.7c25.7 7.7 43.7 32.4 43.7 60.1 0 34-26.4 61.5-59.1 62.4v16.8c0 9.2-7.4 16.6-16.6 16.6h-11.1c-9.2 0-16.6-7.4-16.6-16.6v-17c-15.5-.8-30.5-6.1-43-15.4-5.6-4.1-6.2-12.3-1.2-17.1l16.3-15.5c3.8-3.7 9.5-3.8 14-1 5.4 3.4 11.4 5.1 17.8 5.1h38.9c9 0 16.3-8.2 16.3-18.3 0-8.2-5-15.5-12.1-17.6l-62.3-18.7c-25.7-7.7-43.7-32.4-43.7-60.1.1-34 26.4-61.5 59.1-62.4zM480 352h-32.5c-19.6 26-44.6 47.7-73 64h63.8c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8h63.8c-28.4-16.3-53.3-38-73-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32z'],
'exclamation-triangle': [576, 512, [], 'f071', 'M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z'],
'gitlab': [512, 512, [], 'f296', 'M29.782 199.732L256 493.714 8.074 309.699c-6.856-5.142-9.712-13.996-7.141-21.993l28.849-87.974zm75.405-174.806c-3.142-8.854-15.709-8.854-18.851 0L29.782 199.732h131.961L105.187 24.926zm56.556 174.806L256 493.714l94.257-293.982H161.743zm349.324 87.974l-28.849-87.974L256 493.714l247.926-184.015c6.855-5.142 9.711-13.996 7.141-21.993zm-85.404-262.78c-3.142-8.854-15.709-8.854-18.851 0l-56.555 174.806h131.961L425.663 24.926z'],
'globe': [512, 512, [], 'f0ac', 'M364.215 192h131.43c5.439 20.419 8.354 41.868 8.354 64s-2.915 43.581-8.354 64h-131.43c5.154-43.049 4.939-86.746 0-128zM185.214 352c10.678 53.68 33.173 112.514 70.125 151.992.221.001.44.008.661.008s.44-.008.661-.008c37.012-39.543 59.467-98.414 70.125-151.992H185.214zm174.13-192h125.385C452.802 84.024 384.128 27.305 300.95 12.075c30.238 43.12 48.821 96.332 58.394 147.925zm-27.35 32H180.006c-5.339 41.914-5.345 86.037 0 128h151.989c5.339-41.915 5.345-86.037-.001-128zM152.656 352H27.271c31.926 75.976 100.6 132.695 183.778 147.925-30.246-43.136-48.823-96.35-58.393-147.925zm206.688 0c-9.575 51.605-28.163 104.814-58.394 147.925 83.178-15.23 151.852-71.949 183.778-147.925H359.344zm-32.558-192c-10.678-53.68-33.174-112.514-70.125-151.992-.221 0-.44-.008-.661-.008s-.44.008-.661.008C218.327 47.551 195.872 106.422 185.214 160h141.572zM16.355 192C10.915 212.419 8 233.868 8 256s2.915 43.581 8.355 64h131.43c-4.939-41.254-5.154-84.951 0-128H16.355zm136.301-32c9.575-51.602 28.161-104.81 58.394-147.925C127.872 27.305 59.198 84.024 27.271 160h125.385z'],
'power-off': [512, 512, [], 'f011', 'M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z'],
'shield-alt': [512, 512, [], 'f3ed', 'M496 128c0 221.282-135.934 344.645-221.539 380.308a48 48 0 0 1-36.923 0C130.495 463.713 16 326.487 16 128a48 48 0 0 1 29.539-44.308l192-80a48 48 0 0 1 36.923 0l192 80A48 48 0 0 1 496 128zM256 446.313l.066.034c93.735-46.689 172.497-156.308 175.817-307.729L256 65.333v380.98z'],
'user-circle': [496, 512, [], 'f2bd', 'M248 104c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96zm0 144c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-240C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-49.7 0-95.1-18.3-130.1-48.4 14.9-23 40.4-38.6 69.6-39.5 20.8 6.4 40.6 9.6 60.5 9.6s39.7-3.1 60.5-9.6c29.2 1 54.7 16.5 69.6 39.5-35 30.1-80.4 48.4-130.1 48.4zm162.7-84.1c-24.4-31.4-62.1-51.9-105.1-51.9-10.2 0-26 9.6-57.6 9.6-31.5 0-47.4-9.6-57.6-9.6-42.9 0-80.6 20.5-105.1 51.9C61.9 339.2 48 299.2 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 43.2-13.9 83.2-37.3 115.9z'],
'window-restore': [512, 512, [], 'f2d2', 'M512 48v288c0 26.5-21.5 48-48 48h-48V176c0-44.1-35.9-80-80-80H128V48c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zM384 176v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zm-68 28c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v52h252v-52z']
};
var w = WINDOW || {};
if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};
if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};
if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};
if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];
var namespace = w[NAMESPACE_IDENTIFIER];
var _extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
function define(prefix) {
if (typeof namespace.hooks.addPack === 'function') {
namespace.hooks.addPack(prefix, icons$1);
} else {
namespace.styles[prefix] = _extends({}, namespace.styles[prefix] || {}, icons$1);
}
}
bunker(function () {
define('fai');
});
}());
/* eslint-enable */

View file

@ -0,0 +1,70 @@
/**
* Internal API Wrapper Module
* Belongs to Decentraleyes.
*
* @author Thomas Rientjes
* @since 2017-12-03
* @license MPL 2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
'use strict';
/**
* Wrappers
*/
var wrappers = {};
/**
* Public Methods
*/
wrappers.browserAction = {
setBadgeBackgroundColor (details) {
if (chrome.browserAction.setBadgeBackgroundColor !== undefined) {
chrome.browserAction.setBadgeBackgroundColor(details);
}
},
setBadgeText (details) {
if (chrome.browserAction.setBadgeText !== undefined) {
chrome.browserAction.setBadgeText(details);
}
},
setBadgeTextColor (details) {
if (chrome.browserAction.setBadgeTextColor !== undefined) {
chrome.browserAction.setBadgeTextColor(details);
}
},
setIcon (details) {
if (chrome.browserAction.setIcon !== undefined) {
chrome.browserAction.setIcon(details);
}
}
};
wrappers.storage = {
'managed': {
get (defaults, callback) {
if (chrome.storage.managed === undefined) {
callback(defaults);
} else {
chrome.storage.managed.get(defaults, callback);
}
}
}
};

View file

@ -0,0 +1,985 @@
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"@babel/code-frame": {
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
"integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
"dev": true,
"requires": {
"@babel/highlight": "^7.10.4"
}
},
"@babel/helper-validator-identifier": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz",
"integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==",
"dev": true
},
"@babel/highlight": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
"integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.14.5",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
},
"dependencies": {
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
}
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
}
}
},
"@eslint/eslintrc": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz",
"integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
"debug": "^4.1.1",
"espree": "^7.3.0",
"globals": "^13.9.0",
"ignore": "^4.0.6",
"import-fresh": "^3.2.1",
"js-yaml": "^3.13.1",
"minimatch": "^3.0.4",
"strip-json-comments": "^3.1.1"
}
},
"@humanwhocodes/config-array": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
"integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
"dev": true,
"requires": {
"@humanwhocodes/object-schema": "^1.2.0",
"debug": "^4.1.1",
"minimatch": "^3.0.4"
}
},
"@humanwhocodes/object-schema": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
"integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
"dev": true
},
"acorn": {
"version": "7.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"dev": true
},
"acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true
},
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"ansi-colors": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
"integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
"dev": true
},
"ansi-regex": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
"dev": true
},
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
"sprintf-js": "~1.0.2"
}
},
"astral-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
"dev": true
},
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true
},
"chalk": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"requires": {
"color-name": "1.1.3"
}
},
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
"requires": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
}
},
"debug": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
"integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
"dev": true,
"requires": {
"ms": "2.1.2"
}
},
"deep-is": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
"dev": true
},
"doctrine": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
"dev": true,
"requires": {
"esutils": "^2.0.2"
}
},
"emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
"enquirer": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
"integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
"dev": true,
"requires": {
"ansi-colors": "^4.1.1"
}
},
"escape-string-regexp": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true
},
"eslint": {
"version": "7.30.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz",
"integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==",
"dev": true,
"requires": {
"@babel/code-frame": "7.12.11",
"@eslint/eslintrc": "^0.4.2",
"@humanwhocodes/config-array": "^0.5.0",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
"debug": "^4.0.1",
"doctrine": "^3.0.0",
"enquirer": "^2.3.5",
"escape-string-regexp": "^4.0.0",
"eslint-scope": "^5.1.1",
"eslint-utils": "^2.1.0",
"eslint-visitor-keys": "^2.0.0",
"espree": "^7.3.1",
"esquery": "^1.4.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
"functional-red-black-tree": "^1.0.1",
"glob-parent": "^5.1.2",
"globals": "^13.6.0",
"ignore": "^4.0.6",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
"js-yaml": "^3.13.1",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
"lodash.merge": "^4.6.2",
"minimatch": "^3.0.4",
"natural-compare": "^1.4.0",
"optionator": "^0.9.1",
"progress": "^2.0.0",
"regexpp": "^3.1.0",
"semver": "^7.2.1",
"strip-ansi": "^6.0.0",
"strip-json-comments": "^3.1.0",
"table": "^6.0.9",
"text-table": "^0.2.0",
"v8-compile-cache": "^2.0.3"
}
},
"eslint-plugin-no-unsanitized": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-3.1.5.tgz",
"integrity": "sha512-s/6w++p1590h/H/dE2Wo660bOkaM/3OEK14Y7xm1UT0bafxkKw1Cq0ksjxkxLdH/WWd014DlsLKuD6CyNrR2Dw==",
"dev": true
},
"eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"dev": true,
"requires": {
"esrecurse": "^4.3.0",
"estraverse": "^4.1.1"
}
},
"eslint-utils": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
"integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
"dev": true,
"requires": {
"eslint-visitor-keys": "^1.1.0"
},
"dependencies": {
"eslint-visitor-keys": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
"dev": true
}
}
},
"eslint-visitor-keys": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
"dev": true
},
"espree": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
"integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
"dev": true,
"requires": {
"acorn": "^7.4.0",
"acorn-jsx": "^5.3.1",
"eslint-visitor-keys": "^1.3.0"
},
"dependencies": {
"eslint-visitor-keys": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
"dev": true
}
}
},
"esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true
},
"esquery": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
"integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
"dev": true,
"requires": {
"estraverse": "^5.1.0"
},
"dependencies": {
"estraverse": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
"dev": true
}
}
},
"esrecurse": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
"requires": {
"estraverse": "^5.2.0"
},
"dependencies": {
"estraverse": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
"dev": true
}
}
},
"estraverse": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true
},
"esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
},
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
"fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true
},
"fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
"dev": true
},
"file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
"integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
"dev": true,
"requires": {
"flat-cache": "^3.0.4"
}
},
"flat-cache": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
"integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
"dev": true,
"requires": {
"flatted": "^3.1.0",
"rimraf": "^3.0.2"
}
},
"flatted": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz",
"integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==",
"dev": true
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
"functional-red-black-tree": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
"dev": true
},
"glob": {
"version": "7.1.7",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
"integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"requires": {
"is-glob": "^4.0.1"
}
},
"globals": {
"version": "13.10.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz",
"integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
}
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
"ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true
},
"import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
"dev": true,
"requires": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
}
},
"imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
"dev": true
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true
},
"is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true
},
"is-glob": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
"dev": true,
"requires": {
"is-extglob": "^2.1.1"
}
},
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
"dev": true
},
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
},
"js-yaml": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
}
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
"json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
"integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
"dev": true
},
"levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
"dev": true,
"requires": {
"prelude-ls": "^1.2.1",
"type-check": "~0.4.0"
}
},
"lodash.clonedeep": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
"integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
"dev": true
},
"lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true
},
"lodash.truncate": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
"integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
"dev": true
},
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"requires": {
"yallist": "^4.0.0"
}
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
"natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
"dev": true
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
"wrappy": "1"
}
},
"optionator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
"integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
"dev": true,
"requires": {
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
"levn": "^0.4.1",
"prelude-ls": "^1.2.1",
"type-check": "^0.4.0",
"word-wrap": "^1.2.3"
}
},
"parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true,
"requires": {
"callsites": "^3.0.0"
}
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
},
"path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true
},
"prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
"dev": true
},
"progress": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
"dev": true
},
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
},
"regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
"integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
"dev": true
},
"require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true
},
"resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true
},
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"requires": {
"glob": "^7.1.3"
}
},
"semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
}
},
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
"requires": {
"shebang-regex": "^3.0.0"
}
},
"shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
"slice-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
"integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
"dev": true,
"requires": {
"ansi-styles": "^4.0.0",
"astral-regex": "^2.0.0",
"is-fullwidth-code-point": "^3.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
}
}
},
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
},
"string-width": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
"integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
"dev": true,
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.0"
}
},
"strip-ansi": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
"dev": true,
"requires": {
"ansi-regex": "^5.0.0"
}
},
"strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true
},
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
},
"table": {
"version": "6.7.1",
"resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz",
"integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==",
"dev": true,
"requires": {
"ajv": "^8.0.1",
"lodash.clonedeep": "^4.5.0",
"lodash.truncate": "^4.4.2",
"slice-ansi": "^4.0.0",
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0"
},
"dependencies": {
"ajv": {
"version": "8.6.1",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz",
"integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==",
"dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
"uri-js": "^4.2.2"
}
},
"json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
}
}
},
"text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
"dev": true
},
"type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
"dev": true,
"requires": {
"prelude-ls": "^1.2.1"
}
},
"type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"dev": true
},
"uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dev": true,
"requires": {
"punycode": "^2.1.0"
}
},
"v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
"integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
"dev": true
},
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"requires": {
"isexe": "^2.0.0"
}
},
"word-wrap": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"dev": true
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
},
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
}
}
}

View file

@ -0,0 +1,8 @@
{
"repository": "https://git.synz.io/Synzvato/decentraleyes",
"license": "MPL-2.0",
"devDependencies": {
"eslint-plugin-no-unsanitized": "^3.1.5",
"eslint": "^7.30.0"
}
}

View file

@ -0,0 +1,32 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Decentraleyes Background</title>
<meta charset="utf-8" />
</head>
<body>
<script src="../../modules/internal/wrappers.js"></script>
<script src="../../modules/internal/helpers.js"></script>
<script src="../../core/constants.js"></script>
<script src="../../core/files.js"></script>
<script src="../../core/resources.js"></script>
<script src="../../core/mappings.js"></script>
<script src="../../core/shorthands.js"></script>
<script src="../../core/request-sanitizer.js"></script>
<script src="../../core/state-manager.js"></script>
<script src="../../core/request-analyzer.js"></script>
<script src="../../core/file-guard.js"></script>
<script src="../../core/messenger.js"></script>
<script src="../../core/interceptor.js"></script>
<script src="../../core/main.js"></script>
</body>
</html>

View file

@ -0,0 +1,278 @@
/**
* Sections
*/
body {
color: #555;
cursor: default;
font-family: 'Noto Sans', Arial, sans-serif !important;
font-size: 12px;
margin-bottom: 5px;
margin-top: -15px;
padding: 10px !important;
}
.option {
display: flex;
flex-direction: column;
margin-top: 25px;
}
.notice {
border-radius: 3px;
box-sizing: border-box;
margin-top: 25px;
max-width: 470px;
padding: 14px 16px;
}
.notice-default {
background-color: #f1f1f1;
border: 1px solid #d2d2d2;
color: #282828;
}
.notice-warning {
background-color: #ffd90f;
border: 1px solid #d2b115;
color: #463a02;
}
.notice-secondary {
margin-top: 50px;
}
/**
* Fonts
*/
@font-face {
font-family: 'Noto Sans';
font-style: normal;
font-weight: 400;
src: url('../../modules/noto-sans/noto-sans.woff2')
format('woff2');
}
@font-face {
font-family: 'Noto Sans';
font-style: normal;
font-weight: 600;
src: url('../../modules/noto-sans/noto-sans-bold.woff2')
format('woff2');
}
@font-face {
font-family: 'Noto Sans';
font-style: italic;
font-weight: 400;
src: url('../../modules/noto-sans/noto-sans-italic.woff2')
format('woff2');
}
/**
* Titles
*/
.title-option {
align-items: center;
display: flex;
font-weight: 600;
}
/**
* Controls
*/
.input-checkbox {
margin: 0 5px 0 0;
outline: 0;
}
.input-text {
margin-left: 29px;
max-width: 320px;
}
.text-label {
padding: 0 2px;
}
.input-checkbox:focus + .text-label {
outline: 1px dotted #000;
}
/**
* Icons
*/
.icon {
margin-right: 3px;
}
/**
* Buttons
*/
.button {
-moz-user-select: none;
background-color: #f5f5f5;
border-color: #cfcfcf;
border-radius: 2px;
border-style: solid;
border-width: 1px 1px 2px 1px;
color: #282828;
cursor: pointer;
float: right;
font-size: 12px;
outline: 0;
padding: 5px 22px;
text-decoration: none;
user-select: none;
white-space: nowrap;
}
.button:hover {
background-color: #fff;
}
.button:focus {
background-color: #fff;
border-color: #9a9a9a;
color: #000;
}
.button:active {
background-color: #dedede;
margin-top: 1px;
border-bottom-width: 1px;
}
.button-warning {
background-color: #ffef95;
border-color: #ae920d;
color: #1a1500;
}
.button-warning:hover {
background-color: #fffbde;
border-color: #a48b14;
color: #000;
}
.button-warning:focus {
background-color: #fff9d8;
border-color: #91790a;
color: #000;
}
.button-warning:active {
background-color: #d7b002;
border-color: #a48900;
color: #292100;
}
.button-notice {
margin-left: auto;
padding: 5px 9px;
}
/**
* Links
*/
.link-text {
color: #999;
}
/**
* Miscellaneous
*/
.description-option {
color: #757575;
font-style: italic;
padding-left: 29px;
}
.badge {
border-radius: 3px;
color: #fff;
font-size: 8px;
margin-left: 6px;
padding: 3px 5px;
text-transform: uppercase;
}
.badge-warning {
background-color: #ffd90f;
border: 1px solid #f0c600;
color: #463a02;
}
.hidden {
display: none !important;
}
.label-checkbox {
align-items: center;
display: flex;
}
.notice-head {
font-weight: 600;
margin-bottom: 6px;
}
.notice-body {
align-items: center;
display: flex;
}
.notice-message {
line-height: 1.3;
margin-right: 14px;
}
/**
* Right to Left
*/
body[dir="rtl"] .badge {
margin-left: 0;
margin-right: 6px;
}
body[dir="rtl"] .description-option {
margin-left: 0;
margin-right: 29px;
}
body[dir="rtl"] .input-checkbox {
margin: 0 0 0 4px;
}
body[dir="rtl"] .input-text {
margin-left: 0;
margin-right: 29px;
}
/**
* Compatibility
*/
@media (prefers-color-scheme: dark) {
body {
background-color: #23222b;
color: #f9f9fa;
}
.description-option {
color: #b1b1b3;
}
.input-checkbox:focus + .text-label {
outline: 1px dotted #f9f9fa;
}
}

View file

@ -0,0 +1,154 @@
<!DOCTYPE html>
<html>
<head>
<title>Decentraleyes Options</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="options.css">
<script defer src="../../modules/internal/icons.js"></script>
<script defer src="../../modules/fontawesome/fontawesome.min.js"></script>
</head>
<body>
<script src="../../core/constants.js"></script>
<script src="../../modules/internal/wrappers.js"></script>
<script src="../../modules/internal/helpers.js"></script>
<script src="options.js"></script>
<section class="notice notice-warning hidden" id="notice-block-missing">
<div class="notice-head">
<i class="fai fa-exclamation-triangle icon"></i>
<span data-i18n-content="blockMissingTitle"></span>
</div>
<div class="notice-body" dir="ltr">
<div class="notice-message">
This feature breaks websites. Do not leave it enabled, unless you are prepared to manually whitelist any affected domains.
</div>
<div class="button button-notice button-warning" id="button-block-missing" tabindex="0">
Disable
</div>
</div>
</section>
<section class="option">
<div class="title-option">
<label class="label-checkbox">
<input class="input-checkbox" data-option="showIconBadge" type="checkbox">
<span class="text-label" data-i18n-content="showIconBadgeTitle"></span>
</label>
</div>
<div class="description-option" data-i18n-content="showIconBadgeDescription"></div>
</section>
<section class="option">
<div class="title-option">
<label class="label-checkbox">
<input class="input-checkbox" data-option="blockMissing" type="checkbox">
<span class="text-label" data-i18n-content="blockMissingTitle"></span>
</label>
<span class="badge badge-warning" data-i18n-content="advancedLabel"></span>
</div>
<div class="description-option" data-i18n-content="blockMissingDescription"></div>
</section>
<section class="option">
<div class="title-option">
<label class="label-checkbox">
<input class="input-checkbox" data-option="disablePrefetch" type="checkbox">
<span class="text-label" data-i18n-content="disablePrefetchTitle"></span>
</label>
<span class="badge badge-warning" data-i18n-content="advancedLabel"></span>
</div>
<div class="description-option" data-i18n-content="disablePrefetchDescription"></div>
</section>
<section class="option">
<div class="title-option">
<label class="label-checkbox">
<input class="input-checkbox" data-option="stripMetadata" type="checkbox">
<span class="text-label" data-i18n-content="stripMetadataTitle"></span>
</label>
<span class="badge badge-warning" data-i18n-content="advancedLabel"></span>
</div>
<div class="description-option" data-i18n-content="stripMetadataDescription"></div>
</section>
<section class="option">
<label for="input-domains" class="title-option" data-i18n-content="whitelistedDomainsTitle"></label>
<input id="input-domains" class="input-text" data-option="whitelistedDomains" type="text">
<div class="description-option" data-i18n-content="whitelistedDomainsDescription"></div>
</section>
<section class="notice notice-default notice-secondary hidden" id="notice-locale">
<div class="notice-body" dir="ltr">
<div class="notice-message">
<i class="fai fa-exclamation-triangle icon"></i>
Your preferred language is not yet fully supported.
</div>
<a class="button button-notice" id="button-help-translate" tabindex="0">
Help Translate
</a>
</div>
</section>
</body>
</html>

View file

@ -0,0 +1,261 @@
/**
* Main Options Page
* Belongs to Decentraleyes.
*
* @author Thomas Rientjes
* @since 2016-08-09
* @license MPL 2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
'use strict';
/**
* Options
*/
var options = {};
/**
* Private Methods
*/
options._renderContents = function () {
document.body.setAttribute('dir', options._scriptDirection);
helpers.insertI18nContentIntoDocument(document);
options._determineOptionValues()
.then(options._renderOptionsPanel);
};
options._renderOptionsPanel = function () {
let whitelistedDomains, domainWhitelist, elements;
whitelistedDomains = options._optionValues.whitelistedDomains;
domainWhitelist = options._serializeWhitelistedDomains(whitelistedDomains);
elements = options._optionElements;
elements.showIconBadge.checked = options._optionValues.showIconBadge;
elements.blockMissing.checked = options._optionValues.blockMissing;
elements.disablePrefetch.checked = options._optionValues.disablePrefetch;
elements.stripMetadata.checked = options._optionValues.stripMetadata;
elements.whitelistedDomains.value = domainWhitelist;
options._registerOptionChangedEventListeners(elements);
options._registerMiscellaneousEventListeners();
if (options._optionValues.blockMissing === true) {
options._renderBlockMissingNotice();
}
if (options._languageSupported === false) {
options._renderLocaleNotice();
}
};
options._renderBlockMissingNotice = function () {
let blockMissingNoticeElement = document.getElementById('notice-block-missing');
blockMissingNoticeElement.setAttribute('class', 'notice notice-warning');
};
options._hideBlockMissingNotice = function () {
let blockMissingNoticeElement = document.getElementById('notice-block-missing');
blockMissingNoticeElement.setAttribute('class', 'notice notice-warning hidden');
};
options._renderLocaleNotice = function () {
let localeNoticeElement = document.getElementById('notice-locale');
localeNoticeElement.setAttribute('class', 'notice notice-default notice-secondary');
};
options._registerOptionChangedEventListeners = function (elements) {
elements.showIconBadge.addEventListener('change', options._onOptionChanged);
elements.blockMissing.addEventListener('change', options._onOptionChanged);
elements.disablePrefetch.addEventListener('change', options._onOptionChanged);
elements.stripMetadata.addEventListener('change', options._onOptionChanged);
elements.whitelistedDomains.addEventListener('keyup', options._onOptionChanged);
};
options._registerMiscellaneousEventListeners = function () {
let blockMissingButtonElement, helpTranslateButtonElement;
blockMissingButtonElement = document.getElementById('button-block-missing');
helpTranslateButtonElement = document.getElementById('button-help-translate');
blockMissingButtonElement.addEventListener('click', options._onDisableBlockMissing);
helpTranslateButtonElement.addEventListener('click', options._onHelpTranslate);
blockMissingButtonElement.addEventListener('keydown', function (event) {
let enterOrSpaceKeyPressed = helpers.enterOrSpaceKeyPressed(event);
if (enterOrSpaceKeyPressed) {
options._onDisableBlockMissing();
}
});
helpTranslateButtonElement.addEventListener('keydown', function (event) {
let enterOrSpaceKeyPressed = helpers.enterOrSpaceKeyPressed(event);
if (enterOrSpaceKeyPressed) {
options._onHelpTranslate();
}
});
};
options._determineOptionValues = function () {
return new Promise((resolve) => {
let optionKeys = Object.keys(options._optionElements);
helpers.getStoredSettings(optionKeys, function (items) {
options._optionValues = items;
resolve();
});
});
};
options._getOptionElement = function (optionKey) {
return document.querySelector(`[data-option=${optionKey}]`);
};
options._getOptionElements = function () {
return {
[Setting.SHOW_ICON_BADGE]: options._getOptionElement(Setting.SHOW_ICON_BADGE),
[Setting.BLOCK_MISSING]: options._getOptionElement(Setting.BLOCK_MISSING),
[Setting.DISABLE_PREFETCH]: options._getOptionElement(Setting.DISABLE_PREFETCH),
[Setting.STRIP_METADATA]: options._getOptionElement(Setting.STRIP_METADATA),
[Setting.WHITELISTED_DOMAINS]: options._getOptionElement(Setting.WHITELISTED_DOMAINS)
};
};
options._configureLinkPrefetching = function (value) {
if (value === false) {
// Restore default values of related preference values.
chrome.privacy.network.networkPredictionEnabled.clear({});
} else {
chrome.privacy.network.networkPredictionEnabled.set({
'value': false
});
}
};
options._serializeWhitelistedDomains = function (whitelistedDomains) {
let domainWhitelist, whitelistedDomainKeys;
whitelistedDomainKeys = Object.keys(whitelistedDomains);
domainWhitelist = '';
whitelistedDomainKeys.forEach(function (domain) {
domainWhitelist = `${domainWhitelist}${domain};`;
});
domainWhitelist = domainWhitelist.slice(0, -1);
domainWhitelist = domainWhitelist.replace(Whitelist.TRIM_EXPRESSION, '');
return domainWhitelist;
};
options._parseDomainWhitelist = function (domainWhitelist) {
let whitelistedDomains = {};
domainWhitelist.split(Whitelist.VALUE_SEPARATOR).forEach(function (domain) {
whitelistedDomains[helpers.normalizeDomain(domain)] = true;
});
return whitelistedDomains;
};
/**
* Event Handlers
*/
options._onDocumentLoaded = function () {
let language = navigator.language;
options._optionElements = options._getOptionElements();
options._languageSupported = helpers.languageIsFullySupported(language);
options._scriptDirection = helpers.determineScriptDirection(language);
options._renderContents();
};
options._onOptionChanged = function ({target}) {
let optionKey, optionType, optionValue;
optionKey = target.getAttribute('data-option');
optionType = target.getAttribute('type');
switch (optionType) {
case 'checkbox':
optionValue = target.checked;
break;
default:
optionValue = target.value;
}
if (optionKey === Setting.BLOCK_MISSING) {
if (optionValue === true) {
options._renderBlockMissingNotice();
} else {
options._hideBlockMissingNotice();
}
}
if (optionKey === Setting.DISABLE_PREFETCH) {
options._configureLinkPrefetching(optionValue);
}
if (optionKey === Setting.WHITELISTED_DOMAINS) {
optionValue = options._parseDomainWhitelist(optionValue);
}
chrome.storage.local.set({
[optionKey]: optionValue
});
};
options._onDisableBlockMissing = function () {
let changeEvent = new Event('change');
options._optionElements.blockMissing.checked = false;
options._optionElements.blockMissing.dispatchEvent(changeEvent);
};
options._onHelpTranslate = function () {
chrome.tabs.create({
'url': 'https://crowdin.com/project/decentraleyes'
});
};
/**
* Initializations
*/
document.addEventListener('DOMContentLoaded', options._onDocumentLoaded);

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="7.1673mm" width="7.2061mm" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 25.5334 25.395792">
<g transform="translate(177.77 -519.66)">
<path d="m-165 519.66c-2.6196 0-4.9735 0.71508-7.2323 2.1971-0.9279 0.60864-2.7283 2.4092-3.337 3.337-1.4712 2.2424-2.1972 4.6154-2.1972 7.1819 0 2.5788 0.7141 4.9223 2.1797 7.1552 0.6309 0.96123 2.4192 2.7501 3.3802 3.3808 1.4791 0.97083 3.2841 1.71 4.9268 2.0176 1.0838 0.20297 3.9457 0.15209 5.0159-0.0894 2.4596-0.55481 4.4742-1.6723 6.29-3.4887 2.4847-2.4856 3.7408-5.4989 3.7408-8.9756 0-3.4682-1.2629-6.498-3.7405-8.9756-2.4919-2.4919-5.5045-3.7404-9.0264-3.7404z" fill="#7db69f"/>
<path d="m-165.02 528.24c-0.8699 0-1.6514 0.23746-2.4016 0.72959-0.3081 0.20212-0.9061 0.80004-1.1081 1.1081-0.4886 0.74466-0.7298 1.5326-0.7298 2.3849 0 0.85636 0.2371 1.6346 0.724 2.3761 0.2094 0.3192 0.8033 0.91326 1.1224 1.1227 0.4911 0.32239 1.0906 0.56785 1.6361 0.67001 0.3598 0.0673 1.3102 0.0504 1.6658-0.0297 0.8167-0.18424 1.4856-0.55532 2.0886-1.1585 0.8251-0.8254 1.2423-1.826 1.2423-2.9806 0-1.1517-0.4195-2.1578-1.2421-2.9806-0.8277-0.82751-1.8279-1.2421-2.9976-1.2421z" fill="#4a826c"/>
<path d="m-2404.4 671.18c-3.2399-0.0194-6.3107 1.2365-8.6289 3.5547 0 0.002 0 0.004-0.01 0.006-1.9541 1.9569-3.1473 4.4242-3.4687 7.1758-0.1336 1.143-0.1324 1.8177 0.2265 2.3984 0.3941 0.63745 0.9181 0.94336 1.6758 0.94336 0.2981 0 0.6535-0.10695 0.916-0.24414 0.2434-0.12713 0.6126-0.46272 0.7539-0.69141 0.065-0.10555 0.202-0.39493 0.2403-0.56641 0.053-0.23546 0.061-0.41065 0.084-0.74218 0.088-1.2626 0.2865-2.0912 0.7089-3.0312 0.4385-0.97557 0.9254-1.6871 1.6778-2.4395 1.2078-1.2078 2.6659-1.965 4.3828-2.2754 0.3293-0.0595 0.7416-0.0624 1.2617-0.0684s1.0247-0.004 1.3828 0.0469c0.3661 0.0518 0.6053 0.0832 0.9219 0.0391 0.2645-0.0368 0.6003-0.19398 0.791-0.32031 0.8224-0.54467 1.1248-1.5151 0.707-2.4219a0.6513 0.6513 0 0 1 0 -0.002c-0.1439-0.31257-0.5075-0.75154-0.8496-0.92969-0.4136-0.21541-0.8031-0.27857-1.3769-0.3457-0.4667-0.0546-0.9332-0.0832-1.3985-0.0859zm9.3692 6.3516c-1.074-0.004-1.9883 0.87522-1.9883 1.957 0 1.3647 1.5564 2.3925 2.7988 1.8066 0.3338-0.1574 0.8593-0.69555 0.9922-1.0137 0.5288-1.2658-0.423-2.7422-1.8008-2.75zm-1.291 9.6602c-0.5015 0.009-1.1313 0.39448-1.4707 0.78906-0.7801 0.90716-0.9293 1.0694-1.2911 1.3887-1.0664 0.94113-2.4514 1.6118-3.957 1.9062-0.394 0.0771-0.8958 0.072-1.4824 0.0664-0.5866-0.006-1.0998-0.0118-1.4941-0.0957l0.1328 0.0137a0.6513 0.6513 0 0 1 -0.1328 -0.0137c-1.5797-0.33594-2.8091-0.96601-4.0195-2.0606-0.3529-0.31903-0.5674-0.50965-0.8692-0.67969-0.2288-0.12895-0.689-0.22851-0.8945-0.22851-1.03 0-1.951 0.94359-1.9551 1.9688v0.002a0.6513 0.6513 0 0 1 0 0.002c0 0.26313 0.1216 0.80286 0.3028 1.0781 0.2346 0.35637 0.5009 0.59192 0.957 0.99805 1.8218 1.622 4.2177 2.6942 6.6543 2.9746 0.7641 0.0879 1.9155 0.0871 2.6895 0.002 2.1894-0.23969 4.2945-1.0791 6.0489-2.4082 0.7055-0.53445 1.6855-1.491 2.2129-2.1816 0.2682-0.35126 0.4557-0.64063 0.5664-1.0176 0.098-0.33319 0.076-0.788-0.01-1.0938-0.1165-0.42605-0.279-0.59899-0.5546-0.85157-0.2646-0.24237-0.4858-0.39738-0.8809-0.49218-0.1798-0.0432-0.3602-0.0694-0.5527-0.0664z" fill-rule="evenodd" transform="matrix(.82404 0 0 .82404 1816.1 -30.489)" fill="#f1f7f5"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View file

@ -0,0 +1,399 @@
/**
* Sections
*/
body {
background-color: #f0f0f0;
color: #555;
cursor: default;
font-family: 'Noto Sans', Arial, sans-serif !important;
font-size: 75%;
margin: 0 auto;
overflow: hidden;
padding: 0;
max-width: 348px;
}
header {
align-items: center;
border-bottom: solid #d3d3d3 1px;
display: flex;
position: relative;
}
.panel {
overflow: hidden;
padding: 10px 8px;
}
.panel:not(:last-child) {
border-bottom: 1px solid #d8d8d8;
}
.subpanel {
padding-bottom: 6px;
}
footer {
overflow: hidden;
padding: 8px;
}
/**
* Fonts
*/
@font-face {
font-family: 'Noto Sans';
font-style: normal;
font-weight: 400;
src: url('../../modules/noto-sans/noto-sans.woff2')
format('woff2');
}
@font-face {
font-family: 'Noto Sans';
font-style: normal;
font-weight: 600;
src: url('../../modules/noto-sans/noto-sans-bold.woff2')
format('woff2');
}
@font-face {
font-family: 'Noto Sans';
font-style: italic;
font-weight: 400;
src: url('../../modules/noto-sans/noto-sans-italic.woff2')
format('woff2');
}
/**
* Headings
*/
.heading {
font-size: 14px;
font-weight: 600;
padding-left: 0;
}
.subheading {
font-weight: 600;
margin-bottom: 2px;
text-align: center;
}
/**
* Lists
*/
.list {
margin: 0;
padding: 8px 0 0;
}
.list-item {
background-color: #f7f7f7;
border: 1px solid #e4e4e4;
color: #555;
font-weight: 600;
list-style: none;
margin: 0;
padding: 10px;
}
.sublist {
align-items: center;
background-color: #ececec;
border: 1px solid #e0e0e0;
box-shadow: inset 0 2px 10px #e2e2e2;
list-style: none;
padding: 0;
}
.sublist:last-child {
border-bottom: 1px solid #e0e0e0;
}
.sublist-item {
border-bottom: 1px solid #e0e0e0;
color: #555;
font-weight: 600;
padding: 10px;
}
.sublist-item:last-child {
border-bottom: none;
}
/**
* Icons
*/
.icon {
margin-right: 6px;
}
.icon-logo {
height: 26px;
padding: 14px 6px 14px 8px;
width: 26px;
}
/**
* Buttons
*/
.button {
-moz-user-select: none;
background-color: #f5f5f5;
border-radius: 2px;
border: 1px solid #cfcfcf;
color: #5f5f5f;
cursor: pointer;
float: right;
font-size: 12px;
padding: 5px 22px;
user-select: none;
overflow: hidden;
}
.button-toggle {
border-color: #d8d8d8;
color: #bbb;
}
.button-toggle.active {
border-color: #cfcfcf;
color: #339a6f;
}
.button:hover {
background-color: #fff;
}
.button:focus {
background-color: #f9f9f9;
border: 1px solid #bbb;
box-shadow: 0 0 4px #b9b9b9;
outline: 0;
}
.button:active {
background-color: #dedede;
}
/**
* Links
*/
.link-text {
color: #6d6d6d;
cursor: pointer;
float: left;
font-size: 13px;
line-height: 1;
margin: 6px 0 0 2px;
padding: 1px 2px 4px;
text-decoration: none;
}
.link-text:hover {
color: #555;
text-decoration: underline;
}
.link-text:focus {
color: #555;
outline-color: #555;
text-decoration: underline;
}
/**
* Miscellaneous
*/
.badge {
background: #fbfbfb;
border-radius: 10px;
border: 2px solid #7db69f;
color: #4a7767;
font-family: monospace;
font-size: 13px;
font-weight: 600;
margin-right: 7px;
padding: 0 13px;
}
.counter {
font-size: 36px;
font-weight: 600;
margin-top: 4px;
text-align: center;
}
.description {
color: #6d6d6d;
font-style: italic;
margin: 0 6px;
text-align: center;
}
.hidden {
max-height: 0 !important;
padding: 0 !important;
visibility: hidden !important;
}
.label-version {
color: #457763;
font-size: 9px;
}
.label-domain {
color: #6d6d6d;
display: flex;
font-style: italic;
overflow: hidden;
padding: 6px 0 0 4px;
white-space: nowrap;
}
.side-note {
color: #646464;
font-style: italic;
font-weight: 400;
}
/**
* Compatibility
*/
@media screen and (-webkit-min-device-pixel-ratio: 0) {
body {
width: 348px;
}
}
@media (prefers-color-scheme: dark) {
/**
* Sections
*/
body {
background-color: #404040;
color: #f9f9fa;
}
header {
border-bottom-color: #292929;
}
/**
* Lists
*/
.list-item {
background-color: #484848;
border-color: #292929;
color: #f0f0f0;
}
.sublist {
background-color: #323232;
border-color: #292929;
box-shadow: inset 0 2px 10px #292929;
}
.sublist:last-child {
border-bottom-color: #292929;
}
.sublist-item {
border-bottom-color: #2c2c2c;
color: #f0f0f0;
}
/**
* Buttons
*/
.button {
background-color: #3c3c3c;
border-color: #292929;
color: #dadada;
}
.button:hover {
background-color: #434343;
}
.button:focus {
background-color: #434343;
border-color: #292929;
box-shadow: 0 0 4px #323232;
}
.button:active {
background-color: #393939;
}
.button-toggle {
border-color: #363636;
color: #636363;
}
.button-toggle.active {
border-color: #292929;
color: #3dbb87;
}
/**
* Links
*/
.link-text {
color: #dadada;
}
.link-text:hover {
color: #f9f9fa;
}
.link-text:focus {
color: #f9f9fa;
outline-color: #dadada;
}
/**
* Miscellaneous
*/
.badge {
background-color: #323232;
border-color: #4a826c;
color: #f9f9fa;
}
.description {
color: #dadada;
}
.label-version {
color: #93d7bc;
}
.label-domain {
color: #dadada;
}
.panel:not(:last-child) {
border-bottom-color: #292929;
}
.side-note {
color: #dadada;
}
}

View file

@ -0,0 +1,81 @@
<!DOCTYPE html>
<html>
<head>
<title>Decentraleyes Popup</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="popup.css">
<script defer src="../../modules/internal/icons.js"></script>
<script defer src="../../modules/fontawesome/fontawesome.min.js"></script>
</head>
<body>
<script src="../../core/constants.js"></script>
<script src="../../modules/internal/wrappers.js"></script>
<script src="../../modules/internal/helpers.js"></script>
<script src="popup.js"></script>
<div id="wrapper" class="hidden">
<header>
<img class="icon-logo" src="icon.svg" alt="Extension Icon">
<div class="heading">Decentraleyes <sup id="version-label" class="label-version"></sup></div>
</header>
<section class="content">
<div id="website-context" class="panel hidden">
<div class="subpanel">
<div id="protection-toggle-button" class="button button-toggle active" tabindex="0">
<i class="fai fa-power-off" data-fa-transform="grow-2 down-.5"></i>
</div>
<div class="label-domain">
<i class="icon fai fa-globe fa-lg" data-fa-transform="down-1"></i>
<span id="domain-indicator"></span>
</div>
</div>
</div>
<div id="extension-context" class="panel">
<div id="injection-counter" class="counter">0</div>
<div class="subheading" data-i18n-content="amountInjectedTitle"></div>
<div class="description" data-i18n-content="amountInjectedDescription"></div>
</div>
</section>
<footer>
<span id="testing-utility-link" class="link-text" tabindex="0">decentraleyes.org/test</span>
<div id="options-button" class="button" data-i18n-title="optionsTitle" tabindex="0">
<i class="fai fa-cog" data-fa-transform="grow-2 down-.5"></i>
</div>
</footer>
</div>
</body>
</html>

View file

@ -0,0 +1,429 @@
/**
* Main Popup Page
* Belongs to Decentraleyes.
*
* @author Thomas Rientjes
* @since 2016-08-09
* @license MPL 2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
'use strict';
/**
* Popup
*/
var popup = {};
/**
* Private Methods
*/
popup._renderContents = function () {
helpers.insertI18nContentIntoDocument(document);
helpers.insertI18nTitlesIntoDocument(document);
popup._renderNonContextualContents();
popup._determineTargetTab()
.then(popup._determineDomainWhitelistStatus)
.then(popup._determineResourceInjections)
.then(popup._renderContextualContents)
.then(popup._showRenderedContents);
};
popup._renderNonContextualContents = function () {
let versionLabelElement, counterElement, testingUtilityLinkElement, optionsButtonElement;
versionLabelElement = document.getElementById('version-label');
counterElement = document.getElementById('injection-counter');
testingUtilityLinkElement = document.getElementById('testing-utility-link');
optionsButtonElement = document.getElementById('options-button');
versionLabelElement.innerText = popup._version;
counterElement.innerText = helpers.formatNumber(popup._amountInjected);
testingUtilityLinkElement.addEventListener('mouseup', popup._onTestingUtilityLinkClicked);
optionsButtonElement.addEventListener('mouseup', popup._onOptionsButtonClicked);
testingUtilityLinkElement.addEventListener('keydown', function (event) {
let enterOrSpaceKeyPressed = helpers.enterOrSpaceKeyPressed(event);
if (enterOrSpaceKeyPressed) {
chrome.tabs.create({
'url': 'https://decentraleyes.org/test'
});
window.close();
}
});
optionsButtonElement.addEventListener('keydown', function (event) {
let enterOrSpaceKeyPressed = helpers.enterOrSpaceKeyPressed(event);
if (enterOrSpaceKeyPressed) {
chrome.runtime.openOptionsPage();
return window.close();
}
});
};
popup._renderContextualContents = function () {
if (popup._domain !== null) {
popup._renderDomainWhitelistPanel();
}
if (Object.keys(popup._resourceInjections).length > 0) {
popup._renderInjectionPanel(popup._resourceInjections);
}
};
popup._showRenderedContents = function () {
document.getElementById('wrapper').classList.remove('hidden');
};
popup._renderDomainWhitelistPanel = function () {
let websiteContextElement, protectionToggleElement, domainIndicatorElement;
websiteContextElement = document.getElementById('website-context');
protectionToggleElement = document.getElementById('protection-toggle-button');
domainIndicatorElement = document.getElementById('domain-indicator');
protectionToggleElement.setAttribute('dir', popup._scriptDirection);
domainIndicatorElement.innerText = popup._domain;
if (popup._domainIsWhitelisted === true) {
let enableProtectionTitle = chrome.i18n.getMessage('enableProtectionTitle');
protectionToggleElement.setAttribute('class', 'button button-toggle');
protectionToggleElement.addEventListener('click', popup._enableProtection);
protectionToggleElement.setAttribute('title', enableProtectionTitle);
protectionToggleElement.addEventListener('keydown', function (event) {
let enterOrSpaceKeyPressed = helpers.enterOrSpaceKeyPressed(event);
if (enterOrSpaceKeyPressed) {
popup._enableProtection();
}
});
} else {
let disableProtectionTitle = chrome.i18n.getMessage('disableProtectionTitle');
protectionToggleElement.setAttribute('class', 'button button-toggle active');
protectionToggleElement.addEventListener('click', popup._disableProtection);
protectionToggleElement.setAttribute('title', disableProtectionTitle);
protectionToggleElement.addEventListener('keydown', function (event) {
let enterOrSpaceKeyPressed = helpers.enterOrSpaceKeyPressed(event);
if (enterOrSpaceKeyPressed) {
popup._disableProtection();
}
});
}
websiteContextElement.setAttribute('class', 'panel');
};
popup._renderInjectionPanel = function (groupedInjections) {
let websiteContextElement, injectionOverviewElement;
websiteContextElement = document.getElementById('website-context');
injectionOverviewElement = popup._createInjectionOverviewElement(groupedInjections);
websiteContextElement.append(injectionOverviewElement);
};
popup._enableProtection = function () {
let message = {
'topic': 'whitelist:remove-domain',
'value': popup._domain
};
chrome.runtime.sendMessage(message, function () {
popup._onProtectionToggled();
});
};
popup._disableProtection = function () {
let message = {
'topic': 'whitelist:add-domain',
'value': popup._domain
};
chrome.runtime.sendMessage(message, function () {
popup._onProtectionToggled();
});
};
popup._determineDomainWhitelistStatus = function () {
return new Promise((resolve) => {
let message = {
'topic': 'domain:fetch-is-whitelisted',
'value': popup._domain
};
chrome.runtime.sendMessage(message, function (response) {
popup._domainIsWhitelisted = response.value;
resolve();
});
});
};
popup._determineResourceInjections = function () {
return new Promise((resolve) => {
let message = {
'topic': 'tab:fetch-injections',
'value': popup._targetTab.id
};
chrome.runtime.sendMessage(message, function (response) {
popup._resourceInjections = popup._groupResourceInjections(response.value);
resolve();
});
});
};
popup._determineTargetTab = function () {
return new Promise((resolve) => {
helpers.determineActiveTab().then((activeTab) => {
popup._targetTab = activeTab;
popup._domain = helpers.extractDomainFromUrl(activeTab.url, true);
resolve();
});
});
};
popup._determineAmountInjected = function () {
return new Promise((resolve) => {
helpers.getStoredSettings(Setting.AMOUNT_INJECTED, function (items) {
popup._amountInjected = items.amountInjected || 0;
resolve();
});
});
};
popup._groupResourceInjections = function (injections) {
let groupedInjections = {};
for (let index in injections) {
if (injections.hasOwnProperty(index)) {
let {source} = injections[index];
groupedInjections[source] = groupedInjections[source] || [];
groupedInjections[source].push(injections[index]);
}
}
return groupedInjections;
};
popup._createInjectionOverviewElement = function (groupedInjections) {
let injectionOverviewElement = document.createElement('ul');
injectionOverviewElement.setAttribute('class', 'list');
for (let source in groupedInjections) {
if (groupedInjections.hasOwnProperty(source)) {
let injectionGroupHeaderElement, injectionGroupElement, cdn;
cdn = groupedInjections[source];
injectionGroupHeaderElement = popup._createInjectionGroupHeaderElement(source, cdn);
injectionGroupElement = popup._createInjectionGroupElement(source, cdn);
injectionOverviewElement.appendChild(injectionGroupHeaderElement);
injectionOverviewElement.appendChild(injectionGroupElement);
}
}
return injectionOverviewElement;
};
popup._createInjectionGroupHeaderElement = function (source, cdn) {
let injectionGroupHeaderElement, badgeElement, badgeTextNode, cdnNameTextNode;
injectionGroupHeaderElement = document.createElement('li');
injectionGroupHeaderElement.setAttribute('class', 'list-item');
badgeElement = document.createElement('span');
badgeElement.setAttribute('class', 'badge');
badgeTextNode = document.createTextNode(cdn.length);
badgeElement.appendChild(badgeTextNode);
cdnNameTextNode = document.createTextNode(helpers.determineCdnName(source));
injectionGroupHeaderElement.appendChild(badgeElement);
injectionGroupHeaderElement.appendChild(cdnNameTextNode);
return injectionGroupHeaderElement;
};
popup._createInjectionGroupElement = function (source, cdn) {
let injectionGroupElement;
injectionGroupElement = document.createElement('ul');
injectionGroupElement.setAttribute('class', 'sublist');
for (let injection of cdn) {
let injectionElement = popup._createInjectionElement(injection);
injectionGroupElement.appendChild(injectionElement);
}
return injectionGroupElement;
};
popup._createInjectionElement = function (injection) {
let injectionElement, filename, name, nameTextNode, noteElement, noteTextNode;
injectionElement = document.createElement('li');
injectionElement.setAttribute('class', 'sublist-item');
filename = helpers.extractFilenameFromPath(injection.path);
name = helpers.determineResourceName(filename);
nameTextNode = document.createTextNode(`- ${name}`);
injectionElement.appendChild(nameTextNode);
noteElement = document.createElement('span');
noteElement.setAttribute('class', 'side-note');
noteTextNode = document.createTextNode(` v${injection.version}`);
noteElement.appendChild(noteTextNode);
injectionElement.appendChild(noteElement);
return injectionElement;
};
popup._close = function () {
chrome.runtime.getPlatformInfo(function (information) {
if (information.os === chrome.runtime.PlatformOs.ANDROID) {
chrome.tabs.getCurrent(function (activeTab) {
if (activeTab) {
chrome.tabs.remove(activeTab.id);
} else {
window.close();
}
});
} else {
window.close();
}
});
};
/**
* Event Handlers
*/
popup._onDocumentLoaded = function () {
let manifest, language;
manifest = chrome.runtime.getManifest();
language = navigator.language;
popup._version = helpers.formatVersion(manifest.version);
popup._scriptDirection = helpers.determineScriptDirection(language);
popup._determineAmountInjected()
.then(popup._renderContents);
};
popup._onTestingUtilityLinkClicked = function (event) {
if (event.button === 0 || event.button === 1) {
chrome.tabs.create({
'url': 'https://decentraleyes.org/test',
'active': (event.button === 0)
});
}
if (event.button === 0) {
window.close();
}
};
popup._onOptionsButtonClicked = function () {
chrome.runtime.getPlatformInfo(function (information) {
if (information.os === chrome.runtime.PlatformOs.ANDROID) {
chrome.tabs.create({
'url': chrome.runtime.getURL('pages/options/options.html'),
'active': true
});
return window.close();
} else {
chrome.runtime.openOptionsPage();
return window.close();
}
});
};
popup._onProtectionToggled = function () {
let bypassCache = (typeof browser === 'undefined');
chrome.tabs.reload(popup._targetTab.id, {bypassCache});
popup._close();
};
/**
* Initializations
*/
document.addEventListener('DOMContentLoaded', popup._onDocumentLoaded);

Some files were not shown because too many files have changed in this diff Show more