Compare commits
62 Commits
v2.0.0beta
...
v2.0.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6d6a7b68ad | ||
|
|
74e6c6fa98 | ||
|
|
440def810d | ||
|
|
cd0c06c5bc | ||
|
|
be533e8953 | ||
|
|
7ec143efbf | ||
|
|
bce5e9f58e | ||
|
|
3b941ed077 | ||
|
|
449bf8c064 | ||
|
|
861ba95dee | ||
|
|
b3931febc2 | ||
|
|
391eb4e6d2 | ||
|
|
91f32afa59 | ||
|
|
7883d5f2c7 | ||
|
|
62bd811bbf | ||
|
|
c9c2d4ddc1 | ||
|
|
208a17e30d | ||
|
|
5ed5765f29 | ||
|
|
cd67505cbb | ||
|
|
040fd8f9bd | ||
|
|
e33f5c85f4 | ||
|
|
edff269b25 | ||
|
|
87bf73f97b | ||
|
|
51183abe58 | ||
|
|
4e9dcea6ab | ||
|
|
2b67d92140 | ||
|
|
009902d692 | ||
|
|
cc928e3148 | ||
|
|
7186599ff7 | ||
|
|
bda683e584 | ||
|
|
27ad608d91 | ||
|
|
770e6fb54d | ||
|
|
2bf0bfe669 | ||
|
|
4b8167686d | ||
|
|
280cd3f105 | ||
|
|
906ba1ffd9 | ||
|
|
45824cb25b | ||
|
|
e3d9163ff9 | ||
|
|
5e4dbe4a74 | ||
|
|
deed173dd1 | ||
|
|
295a545a65 | ||
|
|
5399d86af7 | ||
|
|
87b2f51e00 | ||
|
|
a45c55b4d4 | ||
|
|
f92a9852ae | ||
|
|
27608f49e7 | ||
|
|
e8bf2cf7a0 | ||
|
|
b20a41750e | ||
|
|
d5e6304b70 | ||
|
|
69514bc25f | ||
|
|
0444f702f7 | ||
|
|
5a83bbd163 | ||
|
|
d1613ace37 | ||
|
|
c48e96a75e | ||
|
|
08934108d8 | ||
|
|
89d0191e1d | ||
|
|
ab6c387b2c | ||
|
|
0f786092c0 | ||
|
|
569bbcbd70 | ||
|
|
05be55ff10 | ||
|
|
01f6dc6416 | ||
|
|
576ca7f627 |
6
.eslintignore
Normal file
@@ -0,0 +1,6 @@
|
||||
_locales
|
||||
audit
|
||||
icons
|
||||
modules/*
|
||||
!modules/internal
|
||||
resources
|
||||
166
.eslintrc
Normal file
@@ -0,0 +1,166 @@
|
||||
{
|
||||
"env": {
|
||||
"browser": true,
|
||||
"es6": true,
|
||||
"webextensions": true
|
||||
},
|
||||
"extends": "eslint:recommended",
|
||||
"globals": {
|
||||
"Address": true,
|
||||
"files": true,
|
||||
"helpers": true,
|
||||
"interceptor": true,
|
||||
"mappings": true,
|
||||
"requestAnalyzer": true,
|
||||
"Resource": true,
|
||||
"resources": true,
|
||||
"Setting": true,
|
||||
"stateManager": true,
|
||||
"WebRequest": true,
|
||||
"Whitelist": true,
|
||||
"wrappers": true
|
||||
},
|
||||
"overrides": {
|
||||
"files": [
|
||||
"core/constants.js",
|
||||
"core/files.js",
|
||||
"core/mappings.js",
|
||||
"core/resources.js"
|
||||
],
|
||||
"rules": {
|
||||
"no-unused-vars": "off"
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
"array-bracket-newline": "error",
|
||||
"array-bracket-spacing": "error",
|
||||
"arrow-body-style": "error",
|
||||
"arrow-parens": "error",
|
||||
"arrow-spacing": "error",
|
||||
"block-spacing": "error",
|
||||
"brace-style": "error",
|
||||
"camelcase": "error",
|
||||
"comma-spacing": "error",
|
||||
"comma-style": "error",
|
||||
"computed-property-spacing": "error",
|
||||
"consistent-this": "error",
|
||||
"curly": "error",
|
||||
"eol-last": "error",
|
||||
"eqeqeq": "error",
|
||||
"func-call-spacing": "error",
|
||||
"function-paren-newline": "error",
|
||||
"generator-star-spacing": "error",
|
||||
"indent": [
|
||||
"error",
|
||||
4
|
||||
],
|
||||
"key-spacing": "error",
|
||||
"keyword-spacing": "error",
|
||||
"linebreak-style": [
|
||||
"error",
|
||||
"unix"
|
||||
],
|
||||
"new-cap": "error",
|
||||
"new-parens": "error",
|
||||
"no-array-constructor": "error",
|
||||
"no-bitwise": "error",
|
||||
"no-confusing-arrow": "error",
|
||||
"no-continue": "error",
|
||||
"no-duplicate-imports": "error",
|
||||
"no-eval": "error",
|
||||
"no-extend-native": "error",
|
||||
"no-implicit-coercion": "error",
|
||||
"no-implied-eval": "error",
|
||||
"no-invalid-this": "error",
|
||||
"no-iterator": "error",
|
||||
"no-label-var": "error",
|
||||
"no-labels": "error",
|
||||
"no-lone-blocks": "error",
|
||||
"no-loop-func": "error",
|
||||
"no-multi-spaces": "error",
|
||||
"no-multi-str": "error",
|
||||
"no-multiple-empty-lines": [
|
||||
"error", {
|
||||
"max": 1,
|
||||
"maxEOF": 1,
|
||||
"maxBOF": 0
|
||||
}
|
||||
],
|
||||
"max-len": [
|
||||
"error", {
|
||||
"code": 120
|
||||
}
|
||||
],
|
||||
"no-negated-condition": "error",
|
||||
"no-new": "error",
|
||||
"no-new-func": "error",
|
||||
"no-new-object": "error",
|
||||
"no-new-wrappers": "error",
|
||||
"no-octal-escape": "error",
|
||||
"no-proto": "error",
|
||||
"no-return-assign": "error",
|
||||
"no-return-await": "error",
|
||||
"no-script-url": "error",
|
||||
"no-self-compare": "error",
|
||||
"no-sequences": "error",
|
||||
"no-shadow-restricted-names": "error",
|
||||
"no-tabs": "error",
|
||||
"no-ternary": "error",
|
||||
"no-throw-literal": "error",
|
||||
"no-trailing-spaces": "error",
|
||||
"no-undef-init": "error",
|
||||
"no-unmodified-loop-condition": "error",
|
||||
"no-unused-expressions": "error",
|
||||
"no-use-before-define": "error",
|
||||
"no-useless-call": "error",
|
||||
"no-useless-concat": "error",
|
||||
"no-useless-constructor": "error",
|
||||
"no-useless-rename": "error",
|
||||
"no-useless-return": "error",
|
||||
"no-void": "error",
|
||||
"no-warning-comments": "warn",
|
||||
"no-whitespace-before-property": "error",
|
||||
"no-with": "error",
|
||||
"object-curly-spacing": "error",
|
||||
"object-shorthand": [
|
||||
"error",
|
||||
"consistent-as-needed"
|
||||
],
|
||||
"operator-assignment": "error",
|
||||
"operator-linebreak": "error",
|
||||
"prefer-numeric-literals": "error",
|
||||
"prefer-promise-reject-errors": "error",
|
||||
"quote-props": "error",
|
||||
"prefer-rest-params": "error",
|
||||
"prefer-spread": "error",
|
||||
"prefer-template": "error",
|
||||
"quotes": [
|
||||
"error",
|
||||
"single"
|
||||
],
|
||||
"rest-spread-spacing": "error",
|
||||
"require-await": "error",
|
||||
"semi": "error",
|
||||
"semi-spacing": "error",
|
||||
"semi-style": "error",
|
||||
"space-before-blocks": "error",
|
||||
"space-before-function-paren": "error",
|
||||
"space-in-parens": "error",
|
||||
"space-infix-ops": "error",
|
||||
"space-unary-ops": "error",
|
||||
"spaced-comment": "error",
|
||||
"strict": [
|
||||
"error",
|
||||
"global"
|
||||
],
|
||||
"switch-colon-spacing": "error",
|
||||
"symbol-description": "error",
|
||||
"template-curly-spacing": "error",
|
||||
"template-tag-spacing": "error",
|
||||
"unicode-bom": "error",
|
||||
"vars-on-top": "error",
|
||||
"wrap-regex": "error",
|
||||
"yield-star-spacing": "error",
|
||||
"yoda": "error"
|
||||
}
|
||||
}
|
||||
70
_locales/ar/messages.json
Normal 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":"إجمالي موارد الـ CDN اللتي تم حقنها محليا منذ التثبيت.",
|
||||
"description":"Amount injected description."
|
||||
},
|
||||
"optionsTitle":{
|
||||
"message":"الخيارات",
|
||||
"description":"Options title."
|
||||
},
|
||||
"showIconBadgeTitle":{
|
||||
"message":"عرض مجموع الحقن على الأيقونة",
|
||||
"description":"Show icon badge title."
|
||||
},
|
||||
"showIconBadgeDescription":{
|
||||
"message":"إظهار عدد الموارد المحقونة على أيقونة الملحق.",
|
||||
"description":"Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle":{
|
||||
"message":"حظر طلبات الموارد المفقودة",
|
||||
"description":"Block requests for missing resources title."
|
||||
},
|
||||
"blockMissingDescription":{
|
||||
"message":"إلغاء طلب الموارد إذا كانت متوفرة محليا.",
|
||||
"description":"Block requests for missing resources description."
|
||||
},
|
||||
"disablePrefetchTitle":{
|
||||
"message":"تعطيل الجلب المسبق للرابط",
|
||||
"description":"Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription":{
|
||||
"message":"الحيلولة دون تسرّب الطلبات الممنوعة الى شبكات التوصيل.",
|
||||
"description":"Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle":{
|
||||
"message":"إزالة بيانات التعريف من الطلبات المسموحة",
|
||||
"description":"Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription":{
|
||||
"message":"مسح البيانات الحساسة من طلبات CDN المسموحة لتحسين الخصوصية.",
|
||||
"description":"Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle":{
|
||||
"message":"لا تتفحص النطاقات",
|
||||
"description":"Whitelisted domains title."
|
||||
},
|
||||
"whitelistedDomainsDescription":{
|
||||
"message":"حدد النطاقات التي سوف يتم تجاهلها. إفصل المداخل المتعددة بـفاصلة منقوطة (;).",
|
||||
"description":"Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel":{
|
||||
"message":"متقدم",
|
||||
"description":"Advanced label."
|
||||
}
|
||||
}
|
||||
@@ -1,46 +1,70 @@
|
||||
{
|
||||
"extensionDescription": {
|
||||
"message": "Защитава ви от следене чрез свободна, централизирана доставка на съдържание.",
|
||||
"description": "Extension description."
|
||||
"extensionDescription":{
|
||||
"message":"Защитава ви от следене чрез свободна, централизирана доставка на съдържание.",
|
||||
"description":"Extension description."
|
||||
},
|
||||
"disableProtectionTitle": {
|
||||
"message": "Изключване на защитата за страницата",
|
||||
"description": "Disable protection title."
|
||||
"disableProtectionTitle":{
|
||||
"message":"Изключване на защитата за страницата",
|
||||
"description":"Disable protection title."
|
||||
},
|
||||
"enableProtectionTitle": {
|
||||
"message": "Включване на защита",
|
||||
"description": "Enable protection title."
|
||||
"enableProtectionTitle":{
|
||||
"message":"Включване на защита",
|
||||
"description":"Enable protection title."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "Настройки",
|
||||
"description": "Options title."
|
||||
"amountInjectedTitle":{
|
||||
"message":"Брояч за местно вмъкнати ресурси",
|
||||
"description":"Amount injected title."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Блокиране на заявки за липсващи ресурси",
|
||||
"description": "Block requests for missing resources title."
|
||||
"amountInjectedDescription":{
|
||||
"message":"Количество на местни вмъквания на ресурси от началото на инсталацията.",
|
||||
"description":"Amount injected description."
|
||||
},
|
||||
"blockMissingDescription": {
|
||||
"message": "Отмяна на прехванатата заявка, ако изисквания ресурс не е наличен на местно ниво.",
|
||||
"description": "Block requests for missing resources description."
|
||||
"optionsTitle":{
|
||||
"message":"Настройки",
|
||||
"description":"Options title."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"message": "Изключване на домейните от инспекции",
|
||||
"description": "Domain whitelist title."
|
||||
"showIconBadgeTitle":{
|
||||
"message":"Показване на броя на вмъкванията в иконката",
|
||||
"description":"Show icon badge title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"message": "Въведете домейни, които да се добавят в белия списък. Отделете стойностите с точка и запетая.",
|
||||
"description": "Domain whitelist description."
|
||||
"showIconBadgeDescription":{
|
||||
"message":"Показване на броя на вмъкнатите ресурси в иконката на разширението.",
|
||||
"description":"Show icon badge description."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Брояч за местно вмъкнати ресурси",
|
||||
"description": "Amount injected title."
|
||||
"blockMissingTitle":{
|
||||
"message":"Блокиране на заявки за липсващи ресурси",
|
||||
"description":"Block requests for missing resources title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "Количество на местни вмъквания на ресурси от началото на инсталацията.",
|
||||
"description": "Amount injected description."
|
||||
"blockMissingDescription":{
|
||||
"message":"Отмяна на прехванатата заявка, ако изисквания ресурс не е наличен на местно ниво.",
|
||||
"description":"Block requests for missing resources description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "Подробности",
|
||||
"description": "Advanced label."
|
||||
"disablePrefetchTitle":{
|
||||
"message":"Изключване на предварителното извличане на препратки",
|
||||
"description":"Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription":{
|
||||
"message":"Предотвратява изтичането на забранени заявки към мрежи за доставка.",
|
||||
"description":"Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle":{
|
||||
"message":"Премахване на метаданните от разрешени заявки",
|
||||
"description":"Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription":{
|
||||
"message":"Изтриване на чувствителни данни от допустимите заявки от МДС за подобряване на неприкосновеността.",
|
||||
"description":"Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle":{
|
||||
"message":"Изключване на домейни от проверки",
|
||||
"description":"Whitelisted domains title."
|
||||
},
|
||||
"whitelistedDomainsDescription":{
|
||||
"message":"Въведете домейни, които да се добавят в белия списък. Отделете стойностите с точка и запетая.",
|
||||
"description":"Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel":{
|
||||
"message":"Подробности",
|
||||
"description":"Advanced label."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,26 +11,6 @@
|
||||
"message": "Aktiver beskyttelse",
|
||||
"description": "Enable protection title."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "Indstillinger",
|
||||
"description": "Options title."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Bloker anmodninger om manglende ressourcer",
|
||||
"description": "Block requests for missing resources title."
|
||||
},
|
||||
"blockMissingDescription": {
|
||||
"message": "Annullerer en anmodning hvis den forespurgte ressource ikke findes lokalt.",
|
||||
"description": "Block requests for missing resources description."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"message": "Udeluk disse domæner fra inspektion",
|
||||
"description": "Domain whitelist title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"message": "Tilføj domæner der ikke skal opfanges. Separer flere med semikolon (;).",
|
||||
"description": "Domain whitelist description."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Optælling af lokalt leverede ressourcer",
|
||||
"description": "Amount injected title."
|
||||
@@ -39,8 +19,52 @@
|
||||
"message": "Antal injektioner af lokale ressourcer siden installation.",
|
||||
"description": "Amount injected description."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "Indstillinger",
|
||||
"description": "Options title."
|
||||
},
|
||||
"showIconBadgeTitle": {
|
||||
"message": "Vis antal af injektioner på ikon",
|
||||
"description": "Show icon badge title."
|
||||
},
|
||||
"showIconBadgeDescription": {
|
||||
"message": "Viser antallet af injicerede ressourcer på udvidelsens ikon.",
|
||||
"description": "Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Bloker forespørgsler efter manglende ressourcer",
|
||||
"description": "Block requests for missing resources title."
|
||||
},
|
||||
"blockMissingDescription": {
|
||||
"message": "Annullerer en forespørgsel hvis den forespurgte ressource ikke findes lokalt.",
|
||||
"description": "Block requests for missing resources description."
|
||||
},
|
||||
"disablePrefetchTitle": {
|
||||
"message": "Deaktiver forhåndshentning af link",
|
||||
"description": "Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription": {
|
||||
"message": "Forhindrer ikke-tilladte forespørgsler i at blive lækket til leverandør-netværk.",
|
||||
"description": "Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle": {
|
||||
"message": "Fjern metadata fra tilladte forespørgsler",
|
||||
"description": "Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription": {
|
||||
"message": "Sletter følsomme data fra tilladte CDN-forespørgsler for at mindste eksponeringen.",
|
||||
"description": "Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle": {
|
||||
"message": "Udeluk disse domæner fra inspektion",
|
||||
"description": "Whitelisted domains title."
|
||||
},
|
||||
"whitelistedDomainsDescription": {
|
||||
"message": "Tilføj domæner der ikke skal inspiceres. Separer flere med semikolon (;).",
|
||||
"description": "Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "Avanceret",
|
||||
"description": "Advanced label."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,10 +11,26 @@
|
||||
"message": "Schutz aktivieren",
|
||||
"description": "Enable protection title."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Zähler für lokal injizierte Ressourcen",
|
||||
"description": "Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "Anzahl der lokalen Injektionen von den CDN-Ressourcen seit der Installation.",
|
||||
"description": "Amount injected description."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "Einstellungen",
|
||||
"description": "Options title."
|
||||
},
|
||||
"showIconBadgeTitle": {
|
||||
"message": "Zeige Anzahl der Injektionen am Icon",
|
||||
"description": "Show icon badge title."
|
||||
},
|
||||
"showIconBadgeDescription": {
|
||||
"message": "Zeige die Anzahl der injizierten Ressourcen im Erweiterungs-Icon.",
|
||||
"description": "Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Blockiere Anfordern fehlender Inhalte",
|
||||
"description": "Block requests for missing resources title."
|
||||
@@ -23,24 +39,32 @@
|
||||
"message": "Abgefangene Anforderung unterbinden, falls angeforderte Datei nicht lokal verfügbar ist.",
|
||||
"description": "Block requests for missing resources description."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"disablePrefetchTitle": {
|
||||
"message": "Deaktiviere link prefetching",
|
||||
"description": "Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription": {
|
||||
"message": "Verhindere, dass unerlaubte Anfragen an die CDNs durchsickern.",
|
||||
"description": "Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle": {
|
||||
"message": "Entferne Metadaten von erlaubten Anfragen",
|
||||
"description": "Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription": {
|
||||
"message": "Lösche sensible Daten aus erlaubten CDN-Anfragen zur Verbesserung des Datenschutzes.",
|
||||
"description": "Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle": {
|
||||
"message": "Domains von Prüfung ausschließen",
|
||||
"description": "Domain whitelist title."
|
||||
"description": "Whitelisted domains title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"whitelistedDomainsDescription": {
|
||||
"message": "Gebe zu ignorierende Domains an. Trenne mehrere Einträge durch Semikolons (;).",
|
||||
"description": "Domain whitelist description."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Zähler für lokal injizierte Ressourcen",
|
||||
"description": "Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "Anzahl der lokalen Injektionen von den CDN-Ressourcen seit der Installation.",
|
||||
"description": "Amount injected description."
|
||||
"description": "Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "Erweitert",
|
||||
"description": "Advanced label."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,10 +11,26 @@
|
||||
"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": "Προβολή του αριθμού των εμβόλιμων πόρων στο εικονίδιο του πρόσθετου.",
|
||||
"description": "Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Μπλοκ αιτήσεων για ανύπαρκτους πόρους",
|
||||
"description": "Block requests for missing resources title."
|
||||
@@ -23,24 +39,32 @@
|
||||
"message": "Ακύρωση απομακρυσμένης αίτησης, αν ο απαιτούμενος πόρος δεν είναι τοπικά διαθέσιμος.",
|
||||
"description": "Block requests for missing resources description."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"disablePrefetchTitle": {
|
||||
"message": "Απενεργοποίηση πρόωρης φόρτωσης συνδέσμου",
|
||||
"description": "Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription": {
|
||||
"message": "Αποτροπή διαρροής αποκλεισμένων κλήσεων προς δίκτυα διανομής.",
|
||||
"description": "Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle": {
|
||||
"message": "Διαγραφή μεταδεδομένων από επιτρεπόμενες κλήσεις",
|
||||
"description": "Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription": {
|
||||
"message": "Διαγραφή ευαίσθητων δεδομένων από CDN αιτήσεις για ενίσχυση ασφάλειας.",
|
||||
"description": "Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle": {
|
||||
"message": "Εξαίρεση διευθύνσεων από επιθεωρήσεις",
|
||||
"description": "Domain whitelist title."
|
||||
"description": "Whitelisted domains title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"whitelistedDomainsDescription": {
|
||||
"message": "Εισαγωγή διευθύνσεων στις επιτρεπόμενες. Διαχωρίστε πολλαπλές καταχωρήσεις με ερωτηματικά (;).",
|
||||
"description": "Domain whitelist description."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Μετρητής εμβόλιμων τοπικών πόρων",
|
||||
"description": "Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "Ποσοστό εμβόλιμων τοπικών πόρων Δικτύων Παροχής Περιεχομένου από την στιγμή της εγκατάστασης.",
|
||||
"description": "Amount injected description."
|
||||
"description": "Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "Για προχωρημένους",
|
||||
"description": "Advanced label."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,46 +1,70 @@
|
||||
{
|
||||
"extensionDescription": {
|
||||
"message": "Protects you against tracking through \"free\", centralised, content delivery.",
|
||||
"description": "Extension description."
|
||||
"extensionDescription":{
|
||||
"message":"Protects you against tracking through \"free\", centralised, content delivery.",
|
||||
"description":"Extension description."
|
||||
},
|
||||
"disableProtectionTitle": {
|
||||
"message": "Disable protection for this site",
|
||||
"description": "Disable protection title."
|
||||
"disableProtectionTitle":{
|
||||
"message":"Disable protection for this site",
|
||||
"description":"Disable protection title."
|
||||
},
|
||||
"enableProtectionTitle": {
|
||||
"message": "Enable protection",
|
||||
"description": "Enable protection title."
|
||||
"enableProtectionTitle":{
|
||||
"message":"Enable protection",
|
||||
"description":"Enable protection title."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "Options",
|
||||
"description": "Options title."
|
||||
"amountInjectedTitle":{
|
||||
"message":"Counter for locally injected resources",
|
||||
"description":"Amount injected title."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Block requests for missing resources",
|
||||
"description": "Block requests for missing resources title."
|
||||
"amountInjectedDescription":{
|
||||
"message":"Amount of local Content Delivery Network resource injections since installation.",
|
||||
"description":"Amount injected description."
|
||||
},
|
||||
"blockMissingDescription": {
|
||||
"message": "Cancel intercepted request if the required resource is not locally available.",
|
||||
"description": "Block requests for missing resources description."
|
||||
"optionsTitle":{
|
||||
"message":"Options",
|
||||
"description":"Options title."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"message": "Exclude domains from inspections",
|
||||
"description": "Domain whitelist title."
|
||||
"showIconBadgeTitle":{
|
||||
"message":"Display injection counts on icon",
|
||||
"description":"Show icon badge title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"message": "Enter domains to whitelist them. Separate multiple entries with semi-colons (;).",
|
||||
"description": "Domain whitelist description."
|
||||
"showIconBadgeDescription":{
|
||||
"message":"Show the number of injected resources on the extension icon.",
|
||||
"description":"Show icon badge description."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Counter for locally injected resources",
|
||||
"description": "Amount injected title."
|
||||
"blockMissingTitle":{
|
||||
"message":"Block requests for missing resources",
|
||||
"description":"Block requests for missing resources title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "Amount of local Content Delivery Network resource injections since installation.",
|
||||
"description": "Amount injected description."
|
||||
"blockMissingDescription":{
|
||||
"message":"Cancel intercepted request if the required resource is not locally available.",
|
||||
"description":"Block requests for missing resources description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "Advanced",
|
||||
"description": "Advanced label."
|
||||
"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":"Advanced",
|
||||
"description":"Advanced label."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,10 +11,26 @@
|
||||
"message": "Enable protection",
|
||||
"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": "Options",
|
||||
"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."
|
||||
@@ -23,24 +39,32 @@
|
||||
"message": "Cancel intercepted request if the required resource is not locally available.",
|
||||
"description": "Block requests for missing resources description."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"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": "Domain whitelist title."
|
||||
"description": "Whitelisted domains title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"whitelistedDomainsDescription": {
|
||||
"message": "Enter domains to whitelist them. Separate multiple entries with semi-colons (;).",
|
||||
"description": "Domain whitelist description."
|
||||
},
|
||||
"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."
|
||||
"description": "Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "Advanced",
|
||||
"description": "Advanced label."
|
||||
}
|
||||
}
|
||||
}
|
||||
70
_locales/eo/messages.json
Normal file
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"extensionDescription":{
|
||||
"message":"Decentraleyes protektas vin kontraŭ sekvado per senkosta, centra enhavoprovizado.",
|
||||
"description":"Extension description."
|
||||
},
|
||||
"disableProtectionTitle":{
|
||||
"message":"Malaktivigi protekton por tiu ĉi retejo",
|
||||
"description":"Disable protection title."
|
||||
},
|
||||
"enableProtectionTitle":{
|
||||
"message":"Aktivigi protekton",
|
||||
"description":"Enable protection title."
|
||||
},
|
||||
"amountInjectedTitle":{
|
||||
"message":"Nombrilo de loke enmetiaj risurcoj",
|
||||
"description":"Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription":{
|
||||
"message":"Kvanto de lokaj CDN-risurcoj enmetitaj ekde instaliĝo.",
|
||||
"description":"Amount injected description."
|
||||
},
|
||||
"optionsTitle":{
|
||||
"message":"Elektebloj",
|
||||
"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":"Bloki petojn por mankaj risurcoj",
|
||||
"description":"Block requests for missing resources title."
|
||||
},
|
||||
"blockMissingDescription":{
|
||||
"message":"Bloki petojn interkaptitajn se la petitan risurcon ne loke haveblas.",
|
||||
"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":"Neinspektendaj domajnoj",
|
||||
"description":"Whitelisted domains title."
|
||||
},
|
||||
"whitelistedDomainsDescription":{
|
||||
"message":"Entajpu demajnojn, kiujn Decentraleyes ne devas inspekti. Disigu domajnojn per punktokomoj (;).",
|
||||
"description":"Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel":{
|
||||
"message":"Spertula",
|
||||
"description":"Advanced label."
|
||||
}
|
||||
}
|
||||
@@ -1,46 +1,70 @@
|
||||
{
|
||||
"extensionDescription": {
|
||||
"message": "Protégete contra rastreo a través de entrega de contenido centralizado \"gratis\".",
|
||||
"description": "Extension description."
|
||||
"extensionDescription":{
|
||||
"message":"Protégete contra rastreo a través de entrega de contenido centralizado \"gratis\".",
|
||||
"description":"Extension description."
|
||||
},
|
||||
"disableProtectionTitle": {
|
||||
"message": "Desactivar protección en este sitio",
|
||||
"description": "Disable protection title."
|
||||
"disableProtectionTitle":{
|
||||
"message":"Desactivar protección en este sitio",
|
||||
"description":"Disable protection title."
|
||||
},
|
||||
"enableProtectionTitle": {
|
||||
"message": "Activar protección",
|
||||
"description": "Enable protection title."
|
||||
"enableProtectionTitle":{
|
||||
"message":"Activar protección",
|
||||
"description":"Enable protection title."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "Opciones",
|
||||
"description": "Options title."
|
||||
"amountInjectedTitle":{
|
||||
"message":"Contador para fuentes inyectadas localmente",
|
||||
"description":"Amount injected title."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Bloquear peticiones de fuentes faltantes",
|
||||
"description": "Block requests for missing resources title."
|
||||
"amountInjectedDescription":{
|
||||
"message":"Cifra de inyecciones de fuentes de Redes de Entrega de Contenido desde instalación.",
|
||||
"description":"Amount injected description."
|
||||
},
|
||||
"blockMissingDescription": {
|
||||
"message": "Cancelar peticiones detenidas si la fuente requerida no se encuentra localmente.",
|
||||
"description": "Block requests for missing resources description."
|
||||
"optionsTitle":{
|
||||
"message":"Opciones",
|
||||
"description":"Options title."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"message": "Excluir dominios de inspecciones",
|
||||
"description": "Domain whitelist title."
|
||||
"showIconBadgeTitle":{
|
||||
"message":"Mostrar el conteo de inyecciones en el icono",
|
||||
"description":"Show icon badge title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"message": "Ingresar dominios a ser ignorados. Separar múltiples entradas con punto y coma (;).",
|
||||
"description": "Domain whitelist description."
|
||||
"showIconBadgeDescription":{
|
||||
"message":"Mostrar el número de recursos inyectados en el icono de extensión.",
|
||||
"description":"Show icon badge description."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Contador para fuentes inyectadas localmente",
|
||||
"description": "Amount injected title."
|
||||
"blockMissingTitle":{
|
||||
"message":"Bloquear peticiones de fuentes faltantes",
|
||||
"description":"Block requests for missing resources title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "Cifra de inyecciones de fuentes de Redes de Entrega de Contenido desde instalación.",
|
||||
"description": "Amount injected description."
|
||||
"blockMissingDescription":{
|
||||
"message":"Cancelar peticiones detenidas si la fuente requerida no se encuentra localmente.",
|
||||
"description":"Block requests for missing resources description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "Avanzado",
|
||||
"description": "Advanced label."
|
||||
"disablePrefetchTitle":{
|
||||
"message":"Deshabilitar la captura previa de enlaces",
|
||||
"description":"Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription":{
|
||||
"message":"Prevenir que las solicitudes no permitidas se escapen hacia redes de distribución.",
|
||||
"description":"Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle":{
|
||||
"message":"Remover metadatos de las solicitudes permitidas",
|
||||
"description":"Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription":{
|
||||
"message":"Borrar datos sensibles de solicitudes CDN autorizadas para mejorar la privacidad.",
|
||||
"description":"Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle":{
|
||||
"message":"Excluir dominios de inspecciones",
|
||||
"description":"Whitelisted domains title."
|
||||
},
|
||||
"whitelistedDomainsDescription":{
|
||||
"message":"Ingresar dominios a ser ignorados. Separar múltiples entradas con punto y coma (;).",
|
||||
"description":"Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel":{
|
||||
"message":"Avanzado",
|
||||
"description":"Advanced label."
|
||||
}
|
||||
}
|
||||
}
|
||||
70
_locales/et/messages.json
Normal file
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"extensionDescription":{
|
||||
"message":"Kaitseb sind \"tasuta\", tsentraliseeritud sisu edastamisest tuleneva jälitamise vastu.",
|
||||
"description":"Extension description."
|
||||
},
|
||||
"disableProtectionTitle":{
|
||||
"message":"Keela kaitse sellel saidil",
|
||||
"description":"Disable protection title."
|
||||
},
|
||||
"enableProtectionTitle":{
|
||||
"message":"Luba kaitse",
|
||||
"description":"Enable protection title."
|
||||
},
|
||||
"amountInjectedTitle":{
|
||||
"message":"Kohalikult sisestatud ressursside loendur",
|
||||
"description":"Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription":{
|
||||
"message":"Kohalike sisuedastusvõrkude ressursisisestuste arv alates installimisest.",
|
||||
"description":"Amount injected description."
|
||||
},
|
||||
"optionsTitle":{
|
||||
"message":"Valikud",
|
||||
"description":"Options title."
|
||||
},
|
||||
"showIconBadgeTitle":{
|
||||
"message":"Kuva sisestuste arvu ikoonil",
|
||||
"description":"Show icon badge title."
|
||||
},
|
||||
"showIconBadgeDescription":{
|
||||
"message":"Kuva sisestatud ressursside arvu laienduse ikoonil.",
|
||||
"description":"Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle":{
|
||||
"message":"Blokeeri puuduvate ressursside taotlused",
|
||||
"description":"Block requests for missing resources title."
|
||||
},
|
||||
"blockMissingDescription":{
|
||||
"message":"Tühista kinnipüütud taotlus, kui vajaminev ressurss ei ole kohalikult saadaval.",
|
||||
"description":"Block requests for missing resources description."
|
||||
},
|
||||
"disablePrefetchTitle":{
|
||||
"message":"Keela lingi eellaadimine",
|
||||
"description":"Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription":{
|
||||
"message":"Väldi keelatud taotluste väljalekkimist edastusvõrkudele.",
|
||||
"description":"Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle":{
|
||||
"message":"Eemalda lubatud taotlustelt metaandmed",
|
||||
"description":"Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription":{
|
||||
"message":"Kustuta tundlikud andmed lubatud sisuedastusvõrkude taotlustest parema privaatsuse saamiseks.",
|
||||
"description":"Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle":{
|
||||
"message":"Välista uuritavaid domeene",
|
||||
"description":"Whitelisted domains title."
|
||||
},
|
||||
"whitelistedDomainsDescription":{
|
||||
"message":"Sisesta domeenid, et lisada need valgesse nimekirja. Eralda mitu üksust semikoolonitega (;).",
|
||||
"description":"Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel":{
|
||||
"message":"Edasijõudnuile",
|
||||
"description":"Advanced label."
|
||||
}
|
||||
}
|
||||
@@ -11,10 +11,26 @@
|
||||
"message": "Ota suojaus käyttöön",
|
||||
"description": "Enable protection title."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Korvatut pyynnöt",
|
||||
"description": "Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "Korvatut sisältöpyynnöt lisäosan asennuksen jälkeen.",
|
||||
"description": "Amount injected description."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "Asetukset",
|
||||
"description": "Options title."
|
||||
},
|
||||
"showIconBadgeTitle": {
|
||||
"message": "Näytä kohteiden määrä kuvakkeessa",
|
||||
"description": "Show icon badge title."
|
||||
},
|
||||
"showIconBadgeDescription": {
|
||||
"message": "Näyttää turvattujen kohteiden määrän lisäosan kuvakkeessa.",
|
||||
"description": "Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Estä pyynnöt puuttuviin resursseihin",
|
||||
"description": "Block requests for missing resources title."
|
||||
@@ -23,24 +39,32 @@
|
||||
"message": "Estää pyynnöt jos paikallista sisältöä ei ole saatavilla.",
|
||||
"description": "Block requests for missing resources description."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"disablePrefetchTitle": {
|
||||
"message": "Estä linkkien esihaku",
|
||||
"description": "Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription": {
|
||||
"message": "Estä kiellettyjä sisältöpyyntöjä vuotamasta keskitettyihin jakeluverkkoihin.",
|
||||
"description": "Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle": {
|
||||
"message": "Poista metatiedot sallituista sisältöpyynnöistä",
|
||||
"description": "Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription": {
|
||||
"message": "Poista arkaluontoiset tiedot jakeluverkkojen sisältöpyynnöistä yksityisyyden parantamiseksi.",
|
||||
"description": "Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle": {
|
||||
"message": "Poissulje verkkotunnukset",
|
||||
"description": "Domain whitelist title."
|
||||
"description": "Whitelisted domains title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"whitelistedDomainsDescription": {
|
||||
"message": "Lisää verkkotunnus jottei sitä korvata. Erota rivit puolipisteellä (;).",
|
||||
"description": "Domain whitelist description."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Korvatut pyynnöt",
|
||||
"description": "Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "Korvatut sisältöpyynnöt lisäosan asennuksen jälkeen.",
|
||||
"description": "Amount injected description."
|
||||
"description": "Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "Yksityiskohdat",
|
||||
"message": "Edistynyt",
|
||||
"description": "Advanced label."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,46 +1,70 @@
|
||||
{
|
||||
"extensionDescription": {
|
||||
"message": "Protège du pistage lié à l'accès à des contenus \"gratuits\", centralisés.",
|
||||
"description": "Extension description."
|
||||
"extensionDescription":{
|
||||
"message":"Protège du pistage lié aux diffuseurs de contenus \"gratuits\", centralisés.",
|
||||
"description":"Extension description."
|
||||
},
|
||||
"disableProtectionTitle": {
|
||||
"message": "Désactiver la protection pour ce site",
|
||||
"description": "Disable protection title."
|
||||
"disableProtectionTitle":{
|
||||
"message":"Désactiver la protection pour ce site",
|
||||
"description":"Disable protection title."
|
||||
},
|
||||
"enableProtectionTitle": {
|
||||
"message": "Activer la protection",
|
||||
"description": "Enable protection title."
|
||||
"enableProtectionTitle":{
|
||||
"message":"Activer la protection",
|
||||
"description":"Enable protection title."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "Options",
|
||||
"description": "Options title."
|
||||
"amountInjectedTitle":{
|
||||
"message":"Compteur de ressources injectées localement",
|
||||
"description":"Amount injected title."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Bloquer les ressources manquantes",
|
||||
"description": "Block requests for missing resources title."
|
||||
"amountInjectedDescription":{
|
||||
"message":"Quantité de ressource CDN injectées localement depuis l'installation.",
|
||||
"description":"Amount injected description."
|
||||
},
|
||||
"blockMissingDescription": {
|
||||
"message": "Annuler une demande de ressource si elle est indisponible localement.",
|
||||
"description": "Block requests for missing resources description."
|
||||
"optionsTitle":{
|
||||
"message":"Options",
|
||||
"description":"Options title."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"message": "Ne pas inspecter certains domaines",
|
||||
"description": "Domain whitelist title."
|
||||
"showIconBadgeTitle":{
|
||||
"message":"Affichage du nombre d'injections sur l'icône",
|
||||
"description":"Show icon badge title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"message": "Indiquez les domaines à exclure. Séparer les noms par un point-virgule (;).",
|
||||
"description": "Domain whitelist description."
|
||||
"showIconBadgeDescription":{
|
||||
"message":"Affiche le nombre de ressources injectées sur l'icône d'extension.",
|
||||
"description":"Show icon badge description."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Compteur des ressources injectées",
|
||||
"description": "Amount injected title."
|
||||
"blockMissingTitle":{
|
||||
"message":"Bloquer les requêtes de ressources manquantes",
|
||||
"description":"Block requests for missing resources title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "Total des ressources des CDN injectées localement depuis l'installation.",
|
||||
"description": "Amount injected description."
|
||||
"blockMissingDescription":{
|
||||
"message":"Annule la requête interceptée si la ressource requise n'est pas disponible localement.",
|
||||
"description":"Block requests for missing resources description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "Avancé",
|
||||
"description": "Advanced label."
|
||||
"disablePrefetchTitle":{
|
||||
"message":"Désactiver le préchargement de lien",
|
||||
"description":"Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription":{
|
||||
"message":"Empêcher que des requêtes non autorisées fuit du réseaux de distribution.",
|
||||
"description":"Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle":{
|
||||
"message":"Découper les métadonnées des requêtes autorisées",
|
||||
"description":"Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription":{
|
||||
"message":"Efface les données sensibles des demandes de CDN autorisées pour améliorer la confidentialité.",
|
||||
"description":"Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle":{
|
||||
"message":"Exclure les domaines des inspections",
|
||||
"description":"Whitelisted domains title."
|
||||
},
|
||||
"whitelistedDomainsDescription":{
|
||||
"message":"Entrez des domaines pour la liste blanche. Séparez les entrées multiples par des points-virgules (;).",
|
||||
"description":"Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel":{
|
||||
"message":"Avancé",
|
||||
"description":"Advanced label."
|
||||
}
|
||||
}
|
||||
}
|
||||
70
_locales/he/messages.json
Normal 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": "הצג את מספר התכנים המוזרקים על סמלון התוספת.",
|
||||
"description": "Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "חסום בקשות למשאבים חסרים",
|
||||
"description": "Block requests for missing resources title."
|
||||
},
|
||||
"blockMissingDescription": {
|
||||
"message": "בטל בקשה מיורטת, אם המשאב הדרוש אינו זמין באופן מקומי.",
|
||||
"description": "Block requests for missing resources description."
|
||||
},
|
||||
"disablePrefetchTitle": {
|
||||
"message": "בטל הורדה-מוקדמת של לינקים",
|
||||
"description": "Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription": {
|
||||
"message": "מנע הדלפה של בקשות לא-מאושרות לתוך רשתות אספקת תכנים.",
|
||||
"description": "Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle": {
|
||||
"message": "מחק מטא-דאטה מבקשות שאושרו",
|
||||
"description": "Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription": {
|
||||
"message": "להגברת הפרטיות, מחק מידע רגיש מבקשות מאושרות לרשתות אספקת תוכן.",
|
||||
"description": "Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle": {
|
||||
"message": "אל תכלול דומיינים כחלק מהבדיקה",
|
||||
"description": "Whitelisted domains title."
|
||||
},
|
||||
"whitelistedDomainsDescription": {
|
||||
"message": "הזן דומיינים שברצונך להוסיף לרשימת התרים. הפרד ערכים מרובים באמצעות נקודה-פסיק (;).",
|
||||
"description": "Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "מתקדם",
|
||||
"description": "Advanced label."
|
||||
}
|
||||
}
|
||||
70
_locales/hu/messages.json
Normal file
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"extensionDescription":{
|
||||
"message":"Védelem az \"ingyenes\" centralizált content delivery hálózatok megfigyelésétől.",
|
||||
"description":"Extension description."
|
||||
},
|
||||
"disableProtectionTitle":{
|
||||
"message":"Védelem kikapcsolása ezen az oldalon",
|
||||
"description":"Disable protection title."
|
||||
},
|
||||
"enableProtectionTitle":{
|
||||
"message":"Védelem bekapcsolása",
|
||||
"description":"Enable protection title."
|
||||
},
|
||||
"amountInjectedTitle":{
|
||||
"message":"Helyből beszúrt erőforrások számlálója",
|
||||
"description":"Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription":{
|
||||
"message":"Telepítés óta beszúrt helyi Content Delivery Network erőforrások száma.",
|
||||
"description":"Amount injected description."
|
||||
},
|
||||
"optionsTitle":{
|
||||
"message":"Beállítások",
|
||||
"description":"Options title."
|
||||
},
|
||||
"showIconBadgeTitle":{
|
||||
"message":"Beszúrások számlálójának megjelenítése az ikonon",
|
||||
"description":"Show icon badge title."
|
||||
},
|
||||
"showIconBadgeDescription":{
|
||||
"message":"A beszúrt erőforrások számának megjelenítése a bővítmény ikonján.",
|
||||
"description":"Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle":{
|
||||
"message":"Hiányzó erőforrások blokkolása",
|
||||
"description":"Block requests for missing resources title."
|
||||
},
|
||||
"blockMissingDescription":{
|
||||
"message":"Megszakított kérések blokkolása, amennyiben a kért erőforrás nem érhető el helyben.",
|
||||
"description":"Block requests for missing resources description."
|
||||
},
|
||||
"disablePrefetchTitle":{
|
||||
"message":"Link prefetching letiltása",
|
||||
"description":"Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription":{
|
||||
"message":"Letiltott kérések kiszivárgásának megakadályozása.",
|
||||
"description":"Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle":{
|
||||
"message":"Metaadatok törlése az engedélyezett kérésekből",
|
||||
"description":"Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription":{
|
||||
"message":"Érzékeny adatok törlése az engedélyezett CDN kérésekből.",
|
||||
"description":"Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle":{
|
||||
"message":"Domainek vizsgálatának elhagyása",
|
||||
"description":"Whitelisted domains title."
|
||||
},
|
||||
"whitelistedDomainsDescription":{
|
||||
"message":"Írj be domaineket, amik ne legyenek megvizsgálva. Az egyes elemeket pontosvesszővel (;) kell elválasztani.",
|
||||
"description":"Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel":{
|
||||
"message":"Speciális",
|
||||
"description":"Advanced label."
|
||||
}
|
||||
}
|
||||
@@ -1,46 +1,70 @@
|
||||
{
|
||||
"extensionDescription": {
|
||||
"message": "Melindungi dari pelacakan melalui distribusi konten yang bebas dan terpusat.",
|
||||
"description": "Extension description."
|
||||
"extensionDescription":{
|
||||
"message":"Melindungi Anda dari pelacakan distribusi konten \"gratis\" dan terpusat.",
|
||||
"description":"Extension description."
|
||||
},
|
||||
"disableProtectionTitle": {
|
||||
"message": "Nonaktifkan perlindungan untuk situs web ini",
|
||||
"description": "Disable protection title."
|
||||
"disableProtectionTitle":{
|
||||
"message":"Nonaktifkan perlindungan untuk situs web ini",
|
||||
"description":"Disable protection title."
|
||||
},
|
||||
"enableProtectionTitle": {
|
||||
"message": "Aktifkan perlindungan",
|
||||
"description": "Enable protection title."
|
||||
"enableProtectionTitle":{
|
||||
"message":"Aktifkan perlindungan",
|
||||
"description":"Enable protection title."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "Opsi",
|
||||
"description": "Options title."
|
||||
"amountInjectedTitle":{
|
||||
"message":"Jumlah sumber daya lokal yang disematkan",
|
||||
"description":"Amount injected title."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Blokir permintaan untuk sumber daya yang hilang",
|
||||
"description": "Block requests for missing resources title."
|
||||
"amountInjectedDescription":{
|
||||
"message":"Jumlah penyematan sumber daya Jaringan Distribusi Konten lokal sejak pemasangan.",
|
||||
"description":"Amount injected description."
|
||||
},
|
||||
"blockMissingDescription": {
|
||||
"message": "Batalkan intersep permintaan jika sumber daya yang dibutuhkan tidak tersedia secara lokal.",
|
||||
"description": "Block requests for missing resources description."
|
||||
"optionsTitle":{
|
||||
"message":"Opsi",
|
||||
"description":"Options title."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"message": "Cegah inspeksi domain",
|
||||
"description": "Domain whitelist title."
|
||||
"showIconBadgeTitle":{
|
||||
"message":"Tampilkan jumlah penyematan pada ikon",
|
||||
"description":"Show icon badge title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"message": "Masukkan domain ke daftar putih. Pisahkan entri dengan titik koma (;).",
|
||||
"description": "Domain whitelist description."
|
||||
"showIconBadgeDescription":{
|
||||
"message":"Tampilkan jumlah sumber yang disematkan pada ekstensi ikon.",
|
||||
"description":"Show icon badge description."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Sumber daya lokal yang disematkan",
|
||||
"description": "Amount injected title."
|
||||
"blockMissingTitle":{
|
||||
"message":"Blokir permintaan untuk sumber daya yang hilang",
|
||||
"description":"Block requests for missing resources title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "Jumlah penyematan sumber daya Jaringan Distribusi Konten lokal sejak pemasangan.",
|
||||
"description": "Amount injected description."
|
||||
"blockMissingDescription":{
|
||||
"message":"Batalkan pencegatan permintaan jika sumber daya yang dibutuhkan tidak tersedia secara lokal.",
|
||||
"description":"Block requests for missing resources description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "Canggih",
|
||||
"description": "Advanced label."
|
||||
"disablePrefetchTitle":{
|
||||
"message":"Nonaktifkan tautan pra pengambilan",
|
||||
"description":"Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription":{
|
||||
"message":"Mencegah permintaan yang tidak diizinkan bocor ke jaringan pengiriman.",
|
||||
"description":"Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle":{
|
||||
"message":"Kupas metadata dari permintaan yang diizinkan",
|
||||
"description":"Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription":{
|
||||
"message":"Hapus data sensitif dari permintaan CDN yang diizinkan untuk meningkatkan privasi.",
|
||||
"description":"Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle":{
|
||||
"message":"Cegah pemeriksaan domain",
|
||||
"description":"Whitelisted domains title."
|
||||
},
|
||||
"whitelistedDomainsDescription":{
|
||||
"message":"Masukkan domain ke daftar putih. Pisahkan entri dengan titik koma (;).",
|
||||
"description":"Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel":{
|
||||
"message":"Canggih",
|
||||
"description":"Advanced label."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,46 +1,70 @@
|
||||
{
|
||||
"extensionDescription": {
|
||||
"message": "Verndar þig gegn eftirliti frá \"ókeypis\" miðlægum efnisveitum.",
|
||||
"description": "Extension description."
|
||||
"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."
|
||||
"disableProtectionTitle":{
|
||||
"message":"Slökkva á vörn fyrir þetta vefsvæði",
|
||||
"description":"Disable protection title."
|
||||
},
|
||||
"enableProtectionTitle": {
|
||||
"message": "Virkja vernd",
|
||||
"description": "Enable protection title."
|
||||
"enableProtectionTitle":{
|
||||
"message":"Virkja vernd",
|
||||
"description":"Enable protection title."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "Valkostir",
|
||||
"description": "Options title."
|
||||
"amountInjectedTitle":{
|
||||
"message":"Fjöldi staðvært inspýttra tilfanga",
|
||||
"description":"Amount injected title."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Loka á beiðnir vegna tilfanga sem vantar",
|
||||
"description": "Block requests for missing resources 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."
|
||||
},
|
||||
"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."
|
||||
"optionsTitle":{
|
||||
"message":"Valkostir",
|
||||
"description":"Options title."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"message": "Undanskilja lén frá athugun",
|
||||
"description": "Domain whitelist title."
|
||||
"showIconBadgeTitle":{
|
||||
"message":"Birta fjölda innspýtinga á táknmynd",
|
||||
"description":"Show icon badge title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"message": "Settu inn lén til að skrá þau á lista yfir leyfð lén. Aðgreindu færslur með semíkommum (;).",
|
||||
"description": "Domain whitelist description."
|
||||
"showIconBadgeDescription":{
|
||||
"message":"Sýnir merki fyrir fjölda innspýttra tilfanga á táknmynd viðbótarinnar.",
|
||||
"description":"Show icon badge description."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Fjöldi staðvært inspýttra tilfanga",
|
||||
"description": "Amount injected title."
|
||||
"blockMissingTitle":{
|
||||
"message":"Loka á beiðnir vegna tilfanga sem vantar",
|
||||
"description":"Block requests for missing resources 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."
|
||||
"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."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "Ítarlegt",
|
||||
"description": "Advanced label."
|
||||
"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."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,10 +11,26 @@
|
||||
"message": "Attiva protezione",
|
||||
"description": "Enable protection title."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Contatore per risorse iniettate localmente",
|
||||
"description": "Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "Quantità di iniezioni di risorse dalla Rete di Distribuzione di Contenuti locale sin dall'installazione.",
|
||||
"description": "Amount injected description."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "Opzioni",
|
||||
"description": "Options title."
|
||||
},
|
||||
"showIconBadgeTitle": {
|
||||
"message": "Mostra il numero di iniezioni sull'icona",
|
||||
"description": "Show icon badge title."
|
||||
},
|
||||
"showIconBadgeDescription": {
|
||||
"message": "Mostra il numero di risorse iniettate sull'icona dell'estensione.",
|
||||
"description": "Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Bloccare richieste di risorse mancanti",
|
||||
"description": "Block requests for missing resources title."
|
||||
@@ -23,24 +39,32 @@
|
||||
"message": "Annulla la richiesta intercettata se la risorsa necessaria non è disponibile localmente.",
|
||||
"description": "Block requests for missing resources description."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"disablePrefetchTitle": {
|
||||
"message": "Disabilita il prefetching dei link",
|
||||
"description": "Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription": {
|
||||
"message": "Impedisci alle richieste vietate di informare le reti di consegna.",
|
||||
"description": "Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle": {
|
||||
"message": "Elimina i metadata dalle richieste consentite",
|
||||
"description": "Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription": {
|
||||
"message": "Cancella i dati sensibili dalle richieste CDN consentite per una migliore privacy.",
|
||||
"description": "Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle": {
|
||||
"message": "Escludere domini dalle ispezioni",
|
||||
"description": "Domain whitelist title."
|
||||
"description": "Whitelisted domains title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"whitelistedDomainsDescription": {
|
||||
"message": "Inserire domini nella whitelist per escluderli. Separare voci multiple con punti e virgola (;).",
|
||||
"description": "Domain whitelist description."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Contatore per risorse iniettate localmente",
|
||||
"description": "Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "Quantità di iniezioni di risorse dalla Rete di Distribuzione di Contenuti locale sin dall'installazione.",
|
||||
"description": "Amount injected description."
|
||||
"description": "Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "Avanzate",
|
||||
"description": "Advanced label."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,10 +11,26 @@
|
||||
"message": "保護を有効にする",
|
||||
"description": "Enable protection title."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "ローカルのリソースを使用した回数",
|
||||
"description": "Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "インストール後にローカルのCDNリソースを使用した回数です。",
|
||||
"description": "Amount injected description."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "オプション",
|
||||
"description": "Options title."
|
||||
},
|
||||
"showIconBadgeTitle": {
|
||||
"message": "ローカルのリソースを使用した回数をアイコンに表示する",
|
||||
"description": "Show icon badge title."
|
||||
},
|
||||
"showIconBadgeDescription": {
|
||||
"message": "拡張機能のアイコンに、ローカルのリソースを使用した回数を表示します。",
|
||||
"description": "Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "アドオンに含まれないリソースへのリクエストをブロックする",
|
||||
"description": "Block requests for missing resources title."
|
||||
@@ -23,24 +39,32 @@
|
||||
"message": "必要なリソースがローカルで利用できない場合、リクエストを取り消します。",
|
||||
"description": "Block requests for missing resources description."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"disablePrefetchTitle": {
|
||||
"message": "リンクプリフェッチを無効にする",
|
||||
"description": "Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription": {
|
||||
"message": "配信ネットワークに許可されていないリクエストの漏れから予防する。",
|
||||
"description": "Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle": {
|
||||
"message": "許可されていたるリクエストからメタデータを取り除く",
|
||||
"description": "Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription": {
|
||||
"message": "プライバシー向上のために許可されたCDNリクエストから機密データを消去する。",
|
||||
"description": "Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle": {
|
||||
"message": "保護から除外するドメイン",
|
||||
"description": "Domain whitelist title."
|
||||
"description": "Whitelisted domains title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"whitelistedDomainsDescription": {
|
||||
"message": "ホワイトリストに登録したいドメインを入力してください。エントリが複数ある場合、セミコロン (;) で区切ってください。",
|
||||
"description": "Domain whitelist description."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "ローカルのリソースを使用した回数",
|
||||
"description": "Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "インストール後にローカルのCDNリソースを使用した回数です。",
|
||||
"description": "Amount injected description."
|
||||
"description": "Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "エラー内容",
|
||||
"description": "Advanced label."
|
||||
}
|
||||
}
|
||||
}
|
||||
70
_locales/ko/messages.json
Normal file
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"extensionDescription": {
|
||||
"message": "\"무료\"라는 미끼로 당신을 추적하는 대규모 CDN을 사용하지 않음으로써 개인 정보를 지킵니다.",
|
||||
"description": "Extension description."
|
||||
},
|
||||
"disableProtectionTitle": {
|
||||
"message": "이 사이트의 보호 비활성화",
|
||||
"description": "Disable protection title."
|
||||
},
|
||||
"enableProtectionTitle": {
|
||||
"message": "보호 활성화",
|
||||
"description": "Enable protection title."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "로컬 리소스로 대체한 요청 횟수",
|
||||
"description": "Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "Decentraleyes를 설치한 뒤, CDN에서 다운로드 하는 대신 로컬 자원을 사용한 횟수입니다.",
|
||||
"description": "Amount injected description."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "옵션",
|
||||
"description": "Options title."
|
||||
},
|
||||
"showIconBadgeTitle": {
|
||||
"message": "차단한 횟수를 아이콘에 표시",
|
||||
"description": "Show icon badge title."
|
||||
},
|
||||
"showIconBadgeDescription": {
|
||||
"message": "로컬 리소스로 대체한 요청 수를 확장 기능 아이콘에 표시합니다.",
|
||||
"description": "Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "존재하지 않는 리소스에 대한 요청을 차단",
|
||||
"description": "Block requests for missing resources title."
|
||||
},
|
||||
"blockMissingDescription": {
|
||||
"message": "리소스를 로컬에서 가져올 수 없다면 리소스 요청을 취소합니다.",
|
||||
"description": "Block requests for missing resources description."
|
||||
},
|
||||
"disablePrefetchTitle": {
|
||||
"message": "링크 프리페치를 비활성화",
|
||||
"description": "Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription": {
|
||||
"message": "허가되지 않은 요청이 전달 네트워크(DN)로 전송되는 것을 차단합니다.",
|
||||
"description": "Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle": {
|
||||
"message": "허용된 요청에서 메타데이터를 제거",
|
||||
"description": "Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription": {
|
||||
"message": "프라이버시 보호를 위해 허가된 CDN 요청에서 민감한 데이터를 지웁니다.",
|
||||
"description": "Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle": {
|
||||
"message": "Decentraleyes를 사용하지 않을 도메인",
|
||||
"description": "Whitelisted domains title."
|
||||
},
|
||||
"whitelistedDomainsDescription": {
|
||||
"message": "화이트 리스트에 등록할 도메인을 입력하세요. 여러 개를 입력할 경우 세미콜론 (;) 을 이용해 구분합니다.",
|
||||
"description": "Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "고급",
|
||||
"description": "Advanced label."
|
||||
}
|
||||
}
|
||||
@@ -11,26 +11,6 @@
|
||||
"message": "Bescherming inschakelen",
|
||||
"description": "Enable protection title."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "Opties",
|
||||
"description": "Options title."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Stop verzoeken voor ontbrekende items",
|
||||
"description": "Block requests for missing resources title."
|
||||
},
|
||||
"blockMissingDescription": {
|
||||
"message": "Annuleer een onderschept verzoek wanneer het bestand niet lokaal beschikbaar is.",
|
||||
"description": "Block requests for missing resources description."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"message": "Sluit domeinen uit van inspecties",
|
||||
"description": "Domain whitelist title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"message": "Voer de te negeren domeinen in. Scheid de waarden met puntkomma's (;).",
|
||||
"description": "Domain whitelist description."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Teller voor lokaal geïnjecteerde bestanden",
|
||||
"description": "Amount injected title."
|
||||
@@ -39,8 +19,52 @@
|
||||
"message": "Aantal lokale Content Delivery Network-bestandsinjecties sinds installatie.",
|
||||
"description": "Amount injected description."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "Opties",
|
||||
"description": "Options title."
|
||||
},
|
||||
"showIconBadgeTitle": {
|
||||
"message": "Getelde injecties op icoon weergeven",
|
||||
"description": "Show icon badge title."
|
||||
},
|
||||
"showIconBadgeDescription": {
|
||||
"message": "Toon het aantal geïnjecteerde bestanden op het extensie-icoon.",
|
||||
"description": "Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Verzoeken voor ontbrekende items blokkeren",
|
||||
"description": "Block requests for missing resources title."
|
||||
},
|
||||
"blockMissingDescription": {
|
||||
"message": "Annuleer een onderschept verzoek wanneer het bestand niet lokaal beschikbaar is.",
|
||||
"description": "Block requests for missing resources description."
|
||||
},
|
||||
"disablePrefetchTitle": {
|
||||
"message": "Link prefetching uitschakelen",
|
||||
"description": "Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription": {
|
||||
"message": "Voorkom dat geweigerde verzoeken naar afleveringsnetwerken uitlekken.",
|
||||
"description": "Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle": {
|
||||
"message": "Metadata uit toegestane verzoeken verwijderen",
|
||||
"description": "Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription": {
|
||||
"message": "Wis gevoelige gegevens uit toegestane CDN-verzoeken voor verbeterde privacy.",
|
||||
"description": "Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle": {
|
||||
"message": "Sluit domeinen uit van inspecties",
|
||||
"description": "Whitelisted domains title."
|
||||
},
|
||||
"whitelistedDomainsDescription": {
|
||||
"message": "Voer de te negeren domeinen in. Scheid de waarden met puntkomma's (;).",
|
||||
"description": "Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "Geavanceerd",
|
||||
"description": "Advanced label."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,46 +1,70 @@
|
||||
{
|
||||
"extensionDescription": {
|
||||
"message": "Chroni przed śledzeniem przez ośrodki CDN.",
|
||||
"description": "Extension description."
|
||||
"extensionDescription":{
|
||||
"message":"Chroni przed śledzeniem przez ośrodki CDN.",
|
||||
"description":"Extension description."
|
||||
},
|
||||
"disableProtectionTitle": {
|
||||
"message": "Wyłącz ochronę dla tej witryny",
|
||||
"description": "Disable protection title."
|
||||
"disableProtectionTitle":{
|
||||
"message":"Wyłącz ochronę dla tej witryny",
|
||||
"description":"Disable protection title."
|
||||
},
|
||||
"enableProtectionTitle": {
|
||||
"message": "Włącz ochronę",
|
||||
"description": "Enable protection title."
|
||||
"enableProtectionTitle":{
|
||||
"message":"Włącz ochronę",
|
||||
"description":"Enable protection title."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "Ustawienia",
|
||||
"description": "Options title."
|
||||
"amountInjectedTitle":{
|
||||
"message":"Licznik zasobów podanych lokalnie",
|
||||
"description":"Amount injected title."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Blokuj żądania brakujących zasobów",
|
||||
"description": "Block requests for missing resources title."
|
||||
"amountInjectedDescription":{
|
||||
"message":"Ilość wstrzyknięć z lokalnego Content Delivery Network od czasu instalacji.",
|
||||
"description":"Amount injected description."
|
||||
},
|
||||
"blockMissingDescription": {
|
||||
"message": "Anuluj przechwycone żądania jeśli wymagany zasób nie jest dostępny lokalnie.",
|
||||
"description": "Block requests for missing resources description."
|
||||
"optionsTitle":{
|
||||
"message":"Ustawienia",
|
||||
"description":"Options title."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"message": "Wyklucz domeny z analizy",
|
||||
"description": "Domain whitelist title."
|
||||
"showIconBadgeTitle":{
|
||||
"message":"Wyświetl licznik wstrzyknięć na ikonie",
|
||||
"description":"Show icon badge title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"message": "Podaj domeny aby dodać je do białej listy. Oddziel wpisy średnikami (;).",
|
||||
"description": "Domain whitelist description."
|
||||
"showIconBadgeDescription":{
|
||||
"message":"Pokaż ilość wstrzykniętych zasobów na ikonie rozszerzenia.",
|
||||
"description":"Show icon badge description."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Licznik zasobów podanych lokalnie",
|
||||
"description": "Amount injected title."
|
||||
"blockMissingTitle":{
|
||||
"message":"Blokuj żądania brakujących zasobów",
|
||||
"description":"Block requests for missing resources title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "Ilość wstrzyknięć z lokalnego Content Delivery Network od czasu instalacji.",
|
||||
"description": "Amount injected description."
|
||||
"blockMissingDescription":{
|
||||
"message":"Anuluj przechwycone żądania jeśli wymagany zasób nie jest dostępny lokalnie.",
|
||||
"description":"Block requests for missing resources description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "Zaawansowane",
|
||||
"description": "Advanced label."
|
||||
"disablePrefetchTitle":{
|
||||
"message":"Wyłącz wczesne pobieranie linków",
|
||||
"description":"Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription":{
|
||||
"message":"Zapobiegaj wyciekaniu zabronionych zapytań do systemów dostarczania.",
|
||||
"description":"Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle":{
|
||||
"message":"Usuwaj metadane z dozwolonych zapytań",
|
||||
"description":"Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription":{
|
||||
"message":"Usuwaj wrażliwe dane z dozwolonych zapytań do CDN aby zwiększyć prywatność.",
|
||||
"description":"Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle":{
|
||||
"message":"Wyklucz domeny z analizy",
|
||||
"description":"Whitelisted domains title."
|
||||
},
|
||||
"whitelistedDomainsDescription":{
|
||||
"message":"Podaj domeny aby dodać je do białej listy. Oddziel wpisy średnikami (;).",
|
||||
"description":"Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel":{
|
||||
"message":"Zaawansowane",
|
||||
"description":"Advanced label."
|
||||
}
|
||||
}
|
||||
}
|
||||
70
_locales/pt_BR/messages.json
Normal file
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"extensionDescription": {
|
||||
"message": "Lhe protege de rastreamento feito usando centrais de disponibilização de conteúdo \"gratuitas\".",
|
||||
"description": "Extension description."
|
||||
},
|
||||
"disableProtectionTitle": {
|
||||
"message": "Desabilitar a proteção neste site",
|
||||
"description": "Disable protection title."
|
||||
},
|
||||
"enableProtectionTitle": {
|
||||
"message": "Habilitar proteção",
|
||||
"description": "Enable protection title."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Contador de recursos injetados localmente",
|
||||
"description": "Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "Total de injeções locais de recursos de Redes de Distribuição de Conteúdo desde a instalação.",
|
||||
"description": "Amount injected description."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "Opções",
|
||||
"description": "Options title."
|
||||
},
|
||||
"showIconBadgeTitle": {
|
||||
"message": "Exibir total de injeções no ícone",
|
||||
"description": "Show icon badge title."
|
||||
},
|
||||
"showIconBadgeDescription": {
|
||||
"message": "Mostra o total de injeções de recursos no ícone do complemento.",
|
||||
"description": "Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Bloquear requisições a recursos faltosos",
|
||||
"description": "Block requests for missing resources title."
|
||||
},
|
||||
"blockMissingDescription": {
|
||||
"message": "Cancela requisições interceptadas se o recurso necessário não está disponível localmente.",
|
||||
"description": "Block requests for missing resources description."
|
||||
},
|
||||
"disablePrefetchTitle": {
|
||||
"message": "Desabilitar pré-carregamento de links",
|
||||
"description": "Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription": {
|
||||
"message": "Impede que requisições não permitidas vazem para as redes de distribuição de conteúdo.",
|
||||
"description": "Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle": {
|
||||
"message": "Remover metadados de requisições permitidas",
|
||||
"description": "Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription": {
|
||||
"message": "Apaga dados sensíveis de requisições à CDNs permitidas visando melhorar a privacidade.",
|
||||
"description": "Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle": {
|
||||
"message": "Remover domínios das inspeções",
|
||||
"description": "Whitelisted domains title."
|
||||
},
|
||||
"whitelistedDomainsDescription": {
|
||||
"message": "Digite os domínios que não devem ser analisados. Separe múltiplos domínios com ponto e vírgula (;).",
|
||||
"description": "Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "Avançado",
|
||||
"description": "Advanced label."
|
||||
}
|
||||
}
|
||||
@@ -1,46 +1,70 @@
|
||||
{
|
||||
"extensionDescription": {
|
||||
"message": "Protege contra monitorização através de entrega de conteúdo centralizado.",
|
||||
"description": "Extension description."
|
||||
"extensionDescription":{
|
||||
"message":"Protege contra monitorização através de entrega de conteúdo centralizado.",
|
||||
"description":"Extension description."
|
||||
},
|
||||
"disableProtectionTitle": {
|
||||
"message": "Desativar proteção para este site",
|
||||
"description": "Disable protection title."
|
||||
"disableProtectionTitle":{
|
||||
"message":"Desativar proteção para este site",
|
||||
"description":"Disable protection title."
|
||||
},
|
||||
"enableProtectionTitle": {
|
||||
"message": "Ativar proteção",
|
||||
"description": "Enable protection title."
|
||||
"enableProtectionTitle":{
|
||||
"message":"Ativar proteção",
|
||||
"description":"Enable protection title."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "Opções",
|
||||
"description": "Options title."
|
||||
"amountInjectedTitle":{
|
||||
"message":"Contador para recursos injetados localmente",
|
||||
"description":"Amount injected title."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Bloquear pedidos por falta de recursos",
|
||||
"description": "Block requests for missing resources title."
|
||||
"amountInjectedDescription":{
|
||||
"message":"Quantidade de injeções de recurso Content Delivery Network locais desde a instalação.",
|
||||
"description":"Amount injected description."
|
||||
},
|
||||
"blockMissingDescription": {
|
||||
"message": "Cancelar pedido intercetado se o recurso necessário não estiver disponível localmente.",
|
||||
"description": "Block requests for missing resources description."
|
||||
"optionsTitle":{
|
||||
"message":"Opções",
|
||||
"description":"Options title."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"message": "Excluir domínios de inspeções",
|
||||
"description": "Domain whitelist title."
|
||||
"showIconBadgeTitle":{
|
||||
"message":"Mostrar contagem de injeções no ícone",
|
||||
"description":"Show icon badge title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"message": "Insira domínios para os colocar na lista branca. Separe múltiplas entradas com pontos e vírgulas (;).",
|
||||
"description": "Domain whitelist description."
|
||||
"showIconBadgeDescription":{
|
||||
"message":"Mostrar o número de recursos injetados no ícone da extensão.",
|
||||
"description":"Show icon badge description."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Contador para recursos injetados localmente",
|
||||
"description": "Amount injected title."
|
||||
"blockMissingTitle":{
|
||||
"message":"Bloquear pedidos por falta de recursos",
|
||||
"description":"Block requests for missing resources title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "Quantidade de injeções de recurso Content Delivery Network locais desde a instalação.",
|
||||
"description": "Amount injected description."
|
||||
"blockMissingDescription":{
|
||||
"message":"Cancelar pedido intercetado se o recurso necessário não estiver disponível localmente.",
|
||||
"description":"Block requests for missing resources description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "Avançado",
|
||||
"description": "Advanced label."
|
||||
"disablePrefetchTitle":{
|
||||
"message":"Desativar pré-obtenção de ligações",
|
||||
"description":"Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription":{
|
||||
"message":"Impedir recursos não permitidos de vazar para as redes de entrega.",
|
||||
"description":"Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle":{
|
||||
"message":"Retirar metadados dos pedidos permitidos",
|
||||
"description":"Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription":{
|
||||
"message":"Limpar dados sensíveis de recursos CDN permitidos para melhoria de privacidade.",
|
||||
"description":"Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle":{
|
||||
"message":"Excluir domínios de inspeções",
|
||||
"description":"Whitelisted domains title."
|
||||
},
|
||||
"whitelistedDomainsDescription":{
|
||||
"message":"Insira domínios para os colocar na lista branca. Separe múltiplas entradas com pontos e vírgulas (;).",
|
||||
"description":"Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel":{
|
||||
"message":"Avançado",
|
||||
"description":"Advanced label."
|
||||
}
|
||||
}
|
||||
}
|
||||
70
_locales/ro/messages.json
Normal file
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"extensionDescription":{
|
||||
"message":"Te protejează împotriva urmăririi prin livrare \"gratuită\" de conținut centralizat.",
|
||||
"description":"Extension description."
|
||||
},
|
||||
"disableProtectionTitle":{
|
||||
"message":"Dezactivează protecția pentru acest site",
|
||||
"description":"Disable protection title."
|
||||
},
|
||||
"enableProtectionTitle":{
|
||||
"message":"Activează protecția",
|
||||
"description":"Enable protection title."
|
||||
},
|
||||
"amountInjectedTitle":{
|
||||
"message":"Contor pentru resursele injectate local",
|
||||
"description":"Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription":{
|
||||
"message":"Cantitatea de resurse locale injectate de Rețelele care Livrează Conținut din momentul instalării.",
|
||||
"description":"Amount injected description."
|
||||
},
|
||||
"optionsTitle":{
|
||||
"message":"Opțiuni",
|
||||
"description":"Options title."
|
||||
},
|
||||
"showIconBadgeTitle":{
|
||||
"message":"Afișează numărul de dependențe înlocuite pe iconiță",
|
||||
"description":"Show icon badge title."
|
||||
},
|
||||
"showIconBadgeDescription":{
|
||||
"message":"Afișează numărul de resurse înlocuite pe iconița extensiei.",
|
||||
"description":"Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle":{
|
||||
"message":"Blochează cererile pentru resursele care lipsesc",
|
||||
"description":"Block requests for missing resources title."
|
||||
},
|
||||
"blockMissingDescription":{
|
||||
"message":"Anulează cererile interceptate dacă resursa solicitată nu este disponibilă local.",
|
||||
"description":"Block requests for missing resources description."
|
||||
},
|
||||
"disablePrefetchTitle":{
|
||||
"message":"Dezactivează pre-încărcarea de linkuri",
|
||||
"description":"Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription":{
|
||||
"message":"Previne scurgerea request-uri nepermise către rețele de livrare.",
|
||||
"description":"Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle":{
|
||||
"message":"Scoate metadatele din requesturi permise",
|
||||
"description":"Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription":{
|
||||
"message":"Șterge date sensibile din requesturi permise pentru îmbunătățirea confidențialității.",
|
||||
"description":"Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle":{
|
||||
"message":"Exclude domeniile următoare de la inspecții",
|
||||
"description":"Whitelisted domains title."
|
||||
},
|
||||
"whitelistedDomainsDescription":{
|
||||
"message":"Introduceți domeniile dorite în lista albă. Separați intrările multiple între ele prin punct și virgulă (;).",
|
||||
"description":"Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel":{
|
||||
"message":"Avansat",
|
||||
"description":"Advanced label."
|
||||
}
|
||||
}
|
||||
@@ -11,10 +11,26 @@
|
||||
"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": "Показывать количество «доставленных» локально ресурсов на значке расширения.",
|
||||
"description": "Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Блокировать запросы недостающих ресурсов",
|
||||
"description": "Block requests for missing resources title."
|
||||
@@ -23,24 +39,32 @@
|
||||
"message": "Отменить перехваченный запрос, если требуемый ресурс не доступен локально (может «ломать» сайты).",
|
||||
"description": "Block requests for missing resources description."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"disablePrefetchTitle": {
|
||||
"message": "Отключить предвыборку ссылок",
|
||||
"description": "Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription": {
|
||||
"message": "Не давать запрещенным запросам выходить за сети доставки.",
|
||||
"description": "Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle": {
|
||||
"message": "Удалить метаданные из допущенных запросов",
|
||||
"description": "Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription": {
|
||||
"message": "Очистить дополнительные данные из разрешенных CDN запросов, для усиления приватности.",
|
||||
"description": "Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle": {
|
||||
"message": "Исключить домены из проверки",
|
||||
"description": "Domain whitelist title."
|
||||
"description": "Whitelisted domains title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"whitelistedDomainsDescription": {
|
||||
"message": "«Белый список» доменов. Контент, расположенный на них не будет фильтроваться. Записи (при количестве более одной) разделяются точкой с запятой (;).",
|
||||
"description": "Domain whitelist description."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Счётчик файлов «доставленных» локально",
|
||||
"description": "Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "Количество местных инъекций ресурсов сети доставки контента с момента установки.",
|
||||
"description": "Amount injected description."
|
||||
"description": "Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "Дополнительно",
|
||||
"description": "Advanced label."
|
||||
}
|
||||
}
|
||||
}
|
||||
70
_locales/sr/messages.json
Normal 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": "Прикажи број убризганих ресурса на иконици проширења.",
|
||||
"description": "Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Блокирај захтеве ка недостајућим ресурсима",
|
||||
"description": "Block requests for missing resources title."
|
||||
},
|
||||
"blockMissingDescription": {
|
||||
"message": "Откажи пресретнути захтев ако потребни ресурс није локално доступан.",
|
||||
"description": "Block requests for missing resources description."
|
||||
},
|
||||
"disablePrefetchTitle": {
|
||||
"message": "Откажи преучитавање везе",
|
||||
"description": "Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription": {
|
||||
"message": "Спречи цурење недозвољених захтева ка мрежама за доставу.",
|
||||
"description": "Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle": {
|
||||
"message": "Скини мета-податке са дозвољених захтева",
|
||||
"description": "Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription": {
|
||||
"message": "Обриши осетљиве податке са дозвољених CDN захтева зарад веће приватности.",
|
||||
"description": "Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle": {
|
||||
"message": "Прескочи домене приликом провере",
|
||||
"description": "Whitelisted domains title."
|
||||
},
|
||||
"whitelistedDomainsDescription": {
|
||||
"message": "Унесите домене да их ставите на бели списак. Више одвојених ставки са тачка-запетама (;).",
|
||||
"description": "Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "Напредно",
|
||||
"description": "Advanced label."
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"extensionDescription": {
|
||||
"message": "Skyddar dig mot att spåras av \"gratis\", centraliserat, innehållsleverans.",
|
||||
"message": "Skyddar dig mot att spåras av \"gratis\", centraliserad, innehållsleverans.",
|
||||
"description": "Extension description."
|
||||
},
|
||||
"disableProtectionTitle": {
|
||||
@@ -11,26 +11,6 @@
|
||||
"message": "Aktivera skydd",
|
||||
"description": "Enable protection title."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "Inställningar",
|
||||
"description": "Options title."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Blockera förfrågningar när resurs saknas",
|
||||
"description": "Block requests for missing resources title."
|
||||
},
|
||||
"blockMissingDescription": {
|
||||
"message": "Avbryt uppsnappning om resurs inte finns lokalt.",
|
||||
"description": "Block requests for missing resources description."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"message": "Utelämna domäner från uppsnappningar",
|
||||
"description": "Domain whitelist title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"message": "Ange domäner för vitlistning. Spearera domänerna med semikolon (;).",
|
||||
"description": "Domain whitelist description."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "Räknare för lokalt insatta resurser",
|
||||
"description": "Amount injected title."
|
||||
@@ -39,8 +19,52 @@
|
||||
"message": "Antalet insatta Content Delivery Network-resurser sedan installationen.",
|
||||
"description": "Amount injected description."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "Inställningar",
|
||||
"description": "Options title."
|
||||
},
|
||||
"showIconBadgeTitle": {
|
||||
"message": "Visa insättningsantal på ikonen",
|
||||
"description": "Show icon badge title."
|
||||
},
|
||||
"showIconBadgeDescription": {
|
||||
"message": "Visa antalet insatta resurser på tilläggsikonen.",
|
||||
"description": "Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "Blockera förfrågningar när resurs saknas",
|
||||
"description": "Block requests for missing resources title."
|
||||
},
|
||||
"blockMissingDescription": {
|
||||
"message": "Avbryt avlyssnad begäran om den begärda resursen inte finns lokalt.",
|
||||
"description": "Block requests for missing resources description."
|
||||
},
|
||||
"disablePrefetchTitle": {
|
||||
"message": "Inaktivera länkförhandshämtning",
|
||||
"description": "Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription": {
|
||||
"message": "Förhindra otillåtna förfrågningar från att läcka ut till leveransnätverk.",
|
||||
"description": "Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle": {
|
||||
"message": "Skala bort metadata från tillåtna förfrågningar",
|
||||
"description": "Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription": {
|
||||
"message": "Radera känslig data från tillåtna CDN-förfrågningar för förbättrad integritet.",
|
||||
"description": "Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle": {
|
||||
"message": "Exkludera domäner från inspektioner",
|
||||
"description": "Whitelisted domains title."
|
||||
},
|
||||
"whitelistedDomainsDescription": {
|
||||
"message": "Ange domäner för vitlistning. Separera flera domänposter med semikolon (;).",
|
||||
"description": "Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "Avancerad",
|
||||
"description": "Advanced label."
|
||||
}
|
||||
}
|
||||
}
|
||||
70
_locales/tr/messages.json
Normal file
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"extensionDescription":{
|
||||
"message":"Sizi, \"ücretsiz\", merkezi, içerik dağıtımı aracılığıyla yapılan takipten korur.",
|
||||
"description":"Extension description."
|
||||
},
|
||||
"disableProtectionTitle":{
|
||||
"message":"Bu sitede korumayı devre dışı bırak",
|
||||
"description":"Disable protection title."
|
||||
},
|
||||
"enableProtectionTitle":{
|
||||
"message":"Korumayı etkinleştir",
|
||||
"description":"Enable protection title."
|
||||
},
|
||||
"amountInjectedTitle":{
|
||||
"message":"Yerel olarak eklenen kaynaklar için sayaç",
|
||||
"description":"Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription":{
|
||||
"message":"Kurulumdan bu yana yerel İçerik Dağıtım Ağı kaynak eklemelerinin miktarı.",
|
||||
"description":"Amount injected description."
|
||||
},
|
||||
"optionsTitle":{
|
||||
"message":"Seçenekler",
|
||||
"description":"Options title."
|
||||
},
|
||||
"showIconBadgeTitle":{
|
||||
"message":"Simgede enjeksiyon sayaçlarını göster",
|
||||
"description":"Show icon badge title."
|
||||
},
|
||||
"showIconBadgeDescription":{
|
||||
"message":"Enjekte edilen kaynakların sayısını uzantı simgesinde gösterin.",
|
||||
"description":"Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle":{
|
||||
"message":"Eksik kaynaklar için gelen istekleri engelle",
|
||||
"description":"Block requests for missing resources title."
|
||||
},
|
||||
"blockMissingDescription":{
|
||||
"message":"İstenilen kaynak yerel olarak mevcut değilse, yakalanan isteği iptal et.",
|
||||
"description":"Block requests for missing resources description."
|
||||
},
|
||||
"disablePrefetchTitle":{
|
||||
"message":"Bağlantı önalımını devre dışı bırak",
|
||||
"description":"Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription":{
|
||||
"message":"İzin verilmeyen isteklerin dağıtım ağlarına sızmasını engelleyin.",
|
||||
"description":"Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle":{
|
||||
"message":"Meta verilerini izin verilen isteklerden ayır",
|
||||
"description":"Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription":{
|
||||
"message":"İzin verilen CDN isteklerine duyarlı verileri gelişmiş gizlilik için silin.",
|
||||
"description":"Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle":{
|
||||
"message":"Alanları denetimlerden hariç tut",
|
||||
"description":"Whitelisted domains title."
|
||||
},
|
||||
"whitelistedDomainsDescription":{
|
||||
"message":"Beyaz listeye eklemek için alan adlarını girin. Birden çok girdiyi noktalı virgül (;) ile ayırın.",
|
||||
"description":"Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel":{
|
||||
"message":"Gelişmiş",
|
||||
"description":"Advanced label."
|
||||
}
|
||||
}
|
||||
@@ -11,10 +11,26 @@
|
||||
"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": "在扩展图标上显示已注入资源的数量。",
|
||||
"description": "Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "阻止缺失资源的请求",
|
||||
"description": "Block requests for missing resources title."
|
||||
@@ -23,24 +39,32 @@
|
||||
"message": "取消被拦截的请求,如果请求的资源在本地不可用。",
|
||||
"description": "Block requests for missing resources description."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"disablePrefetchTitle": {
|
||||
"message": "禁用链接预读取",
|
||||
"description": "Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription": {
|
||||
"message": "避免本应禁止的请求发到网络。",
|
||||
"description": "Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle": {
|
||||
"message": "允许的请求剥去元数据",
|
||||
"description": "Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription": {
|
||||
"message": "被允许的 CDN 请求剥去敏感数据以保护隐私。",
|
||||
"description": "Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle": {
|
||||
"message": "排除要检查的域名",
|
||||
"description": "Domain whitelist title."
|
||||
"description": "Whitelisted domains title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"whitelistedDomainsDescription": {
|
||||
"message": "输入白名单的域名。用分号 (;) 分隔多项。",
|
||||
"description": "Domain whitelist description."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "本地发送资源的计数器",
|
||||
"description": "Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "自安装以来,从本地的“内容交付网络”发送的资源总量。",
|
||||
"description": "Amount injected description."
|
||||
"description": "Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "高级",
|
||||
"description": "Advanced label."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,10 +11,26 @@
|
||||
"message": "啟用保護",
|
||||
"description": "Enable protection title."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "由本機提供的資源計數器",
|
||||
"description": "Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "安裝以來,由本機檔案所取代的 CDN 資源數量。",
|
||||
"description": "Amount injected description."
|
||||
},
|
||||
"optionsTitle": {
|
||||
"message": "選項",
|
||||
"description": "Options title."
|
||||
},
|
||||
"showIconBadgeTitle": {
|
||||
"message": "在圖示上顯示被取代的資源數量",
|
||||
"description": "Show icon badge title."
|
||||
},
|
||||
"showIconBadgeDescription": {
|
||||
"message": "在擴充套件圖示上,顯示被取代的資源數量。",
|
||||
"description": "Show icon badge description."
|
||||
},
|
||||
"blockMissingTitle": {
|
||||
"message": "封鎖缺少資源時的連線請求",
|
||||
"description": "Block requests for missing resources title."
|
||||
@@ -23,24 +39,32 @@
|
||||
"message": "若本機沒有所請求的資源,就取消該請求。",
|
||||
"description": "Block requests for missing resources description."
|
||||
},
|
||||
"domainWhitelistTitle": {
|
||||
"disablePrefetchTitle": {
|
||||
"message": "停用連結預讀功能",
|
||||
"description": "Disable prefetch title."
|
||||
},
|
||||
"disablePrefetchDescription": {
|
||||
"message": "防止發出不被允許的請求到 CDN 網路。",
|
||||
"description": "Disable prefetch description."
|
||||
},
|
||||
"stripMetadataTitle": {
|
||||
"message": "移除放行請求當中的後設資料",
|
||||
"description": "Strip metadata title."
|
||||
},
|
||||
"stripMetadataDescription": {
|
||||
"message": "清除放行的 CDN 請求當中的敏感資料,以保護隱私權。",
|
||||
"description": "Strip metadata description."
|
||||
},
|
||||
"whitelistedDomainsTitle": {
|
||||
"message": "要排除檢查的網域",
|
||||
"description": "Domain whitelist title."
|
||||
"description": "Whitelisted domains title."
|
||||
},
|
||||
"domainWhitelistDescription": {
|
||||
"whitelistedDomainsDescription": {
|
||||
"message": "輸入網域即可將其加入白名單。使用分號(;)分隔多個網域。",
|
||||
"description": "Domain whitelist description."
|
||||
},
|
||||
"amountInjectedTitle": {
|
||||
"message": "由本機提供的資源計數器",
|
||||
"description": "Amount injected title."
|
||||
},
|
||||
"amountInjectedDescription": {
|
||||
"message": "安裝以來,由本機檔案所取代的 CDN 資源數量。",
|
||||
"description": "Amount injected description."
|
||||
"description": "Whitelisted domains description."
|
||||
},
|
||||
"advancedLabel": {
|
||||
"message": "進階",
|
||||
"description": "Advanced label."
|
||||
}
|
||||
}
|
||||
}
|
||||
136
audit/.eslintrc
Normal file
@@ -0,0 +1,136 @@
|
||||
{
|
||||
"env": {
|
||||
"es6": true,
|
||||
"node": true
|
||||
},
|
||||
"extends": "eslint:recommended",
|
||||
"parserOptions": {
|
||||
"sourceType": "module"
|
||||
},
|
||||
"rules": {
|
||||
"array-bracket-newline": "error",
|
||||
"array-bracket-spacing": "error",
|
||||
"arrow-body-style": "error",
|
||||
"arrow-parens": "error",
|
||||
"arrow-spacing": "error",
|
||||
"block-spacing": "error",
|
||||
"brace-style": "error",
|
||||
"camelcase": "error",
|
||||
"comma-spacing": "error",
|
||||
"comma-style": "error",
|
||||
"computed-property-spacing": "error",
|
||||
"consistent-this": "error",
|
||||
"curly": "error",
|
||||
"eol-last": "error",
|
||||
"eqeqeq": "error",
|
||||
"func-call-spacing": "error",
|
||||
"function-paren-newline": "error",
|
||||
"generator-star-spacing": "error",
|
||||
"indent": [
|
||||
"error",
|
||||
4
|
||||
],
|
||||
"key-spacing": "error",
|
||||
"keyword-spacing": "error",
|
||||
"linebreak-style": [
|
||||
"error",
|
||||
"unix"
|
||||
],
|
||||
"new-cap": "error",
|
||||
"new-parens": "error",
|
||||
"no-array-constructor": "error",
|
||||
"no-bitwise": "error",
|
||||
"no-confusing-arrow": "error",
|
||||
"no-console": "off",
|
||||
"no-continue": "error",
|
||||
"no-duplicate-imports": "error",
|
||||
"no-eval": "error",
|
||||
"no-extend-native": "error",
|
||||
"no-implicit-coercion": "error",
|
||||
"no-implied-eval": "error",
|
||||
"no-invalid-this": "error",
|
||||
"no-iterator": "error",
|
||||
"no-label-var": "error",
|
||||
"no-labels": "error",
|
||||
"no-lone-blocks": "error",
|
||||
"no-loop-func": "error",
|
||||
"no-multi-spaces": "error",
|
||||
"no-multi-str": "error",
|
||||
"no-multiple-empty-lines": [
|
||||
"error", {
|
||||
"max": 1,
|
||||
"maxEOF": 1,
|
||||
"maxBOF": 0
|
||||
}
|
||||
],
|
||||
"no-negated-condition": "error",
|
||||
"no-new": "error",
|
||||
"no-new-func": "error",
|
||||
"no-new-object": "error",
|
||||
"no-new-wrappers": "error",
|
||||
"no-octal-escape": "error",
|
||||
"no-proto": "error",
|
||||
"no-return-assign": "error",
|
||||
"no-return-await": "error",
|
||||
"no-script-url": "error",
|
||||
"no-self-compare": "error",
|
||||
"no-sequences": "error",
|
||||
"no-shadow-restricted-names": "error",
|
||||
"no-tabs": "error",
|
||||
"no-ternary": "error",
|
||||
"no-trailing-spaces": "error",
|
||||
"no-undef-init": "error",
|
||||
"no-unmodified-loop-condition": "error",
|
||||
"no-unused-expressions": "error",
|
||||
"no-use-before-define": "error",
|
||||
"no-useless-call": "error",
|
||||
"no-useless-concat": "error",
|
||||
"no-useless-constructor": "error",
|
||||
"no-useless-rename": "error",
|
||||
"no-useless-return": "error",
|
||||
"no-void": "error",
|
||||
"no-warning-comments": "warn",
|
||||
"no-whitespace-before-property": "error",
|
||||
"no-with": "error",
|
||||
"object-curly-spacing": "error",
|
||||
"object-shorthand": [
|
||||
"error",
|
||||
"consistent-as-needed"
|
||||
],
|
||||
"operator-assignment": "error",
|
||||
"operator-linebreak": "error",
|
||||
"prefer-numeric-literals": "error",
|
||||
"prefer-promise-reject-errors": "error",
|
||||
"prefer-rest-params": "error",
|
||||
"prefer-spread": "error",
|
||||
"prefer-template": "error",
|
||||
"quote-props": "error",
|
||||
"quotes": [
|
||||
"error",
|
||||
"single"
|
||||
],
|
||||
"require-await": "error",
|
||||
"rest-spread-spacing": "error",
|
||||
"semi": "error",
|
||||
"semi-spacing": "error",
|
||||
"semi-style": "error",
|
||||
"space-before-blocks": "error",
|
||||
"space-before-function-paren": "error",
|
||||
"space-in-parens": "error",
|
||||
"space-infix-ops": "error",
|
||||
"space-unary-ops": "error",
|
||||
"spaced-comment": "error",
|
||||
"strict": [
|
||||
"error",
|
||||
"global"
|
||||
],
|
||||
"switch-colon-spacing": "error",
|
||||
"symbol-description": "error",
|
||||
"template-curly-spacing": "error",
|
||||
"template-tag-spacing": "error",
|
||||
"unicode-bom": "error",
|
||||
"wrap-regex": "error",
|
||||
"yield-star-spacing": "error",
|
||||
"yoda": "error"
|
||||
}
|
||||
}
|
||||
71
audit/run.js
@@ -15,12 +15,11 @@
|
||||
* Imports
|
||||
*/
|
||||
|
||||
var fileSystem, crypto, http, path, sourceMappingURL;
|
||||
var fileSystem, crypto, https, sourceMappingURL;
|
||||
|
||||
fileSystem = require('fs');
|
||||
crypto = require('crypto');
|
||||
https = require('https');
|
||||
path = require('path');
|
||||
|
||||
sourceMappingURL = require('source-map-url');
|
||||
|
||||
@@ -38,11 +37,11 @@ var resourceAmount = 0;
|
||||
* Functions
|
||||
*/
|
||||
|
||||
function _fetchLocalResourcePaths(folderPath) {
|
||||
function _fetchLocalResourcePaths (folderPath) {
|
||||
|
||||
fileSystem.readdirSync(folderPath).forEach(function (resourceName) {
|
||||
|
||||
var resourcePath = folderPath + '/' + resourceName;
|
||||
var resourcePath = `${folderPath}/${resourceName}`;
|
||||
var resourceStatistics = fileSystem.statSync(resourcePath);
|
||||
|
||||
if (resourceStatistics && resourceStatistics.isDirectory()) {
|
||||
@@ -56,7 +55,7 @@ function _fetchLocalResourcePaths(folderPath) {
|
||||
return localResourcePaths;
|
||||
}
|
||||
|
||||
function _getLocalResourceContents(fileLocation, callback) {
|
||||
function _getLocalResourceContents (fileLocation, callback) {
|
||||
|
||||
fileSystem.exists(fileLocation, function (exists) {
|
||||
|
||||
@@ -82,16 +81,16 @@ function _getLocalResourceContents(fileLocation, callback) {
|
||||
});
|
||||
}
|
||||
|
||||
function _getRemoteResourceContents(remoteResourceRoute, callback) {
|
||||
function _getRemoteResourceContents (remoteResourceRoute, callback) {
|
||||
|
||||
var resourceURL = 'https://ajax.googleapis.com/ajax/libs/' + remoteResourceRoute;
|
||||
var resourceURL = `https://ajax.googleapis.com/ajax/libs/${remoteResourceRoute}`;
|
||||
|
||||
https.get(resourceURL, function (response) {
|
||||
|
||||
var resourceContents = '';
|
||||
|
||||
response.on('data', function (chunk) {
|
||||
resourceContents = resourceContents + chunk;
|
||||
resourceContents += chunk;
|
||||
});
|
||||
|
||||
response.on('end', function () {
|
||||
@@ -102,20 +101,20 @@ function _getRemoteResourceContents(remoteResourceRoute, callback) {
|
||||
|
||||
} else {
|
||||
|
||||
resourceURL = 'https://cdnjs.cloudflare.com/ajax/libs/' + remoteResourceRoute;
|
||||
resourceURL = `https://cdnjs.cloudflare.com/ajax/libs/${remoteResourceRoute}`;
|
||||
|
||||
https.get(resourceURL, function (response) {
|
||||
|
||||
resourceContents = '';
|
||||
|
||||
response.on('data', function (chunk) {
|
||||
resourceContents = resourceContents + chunk;
|
||||
resourceContents += chunk;
|
||||
});
|
||||
|
||||
response.on('end', function () {
|
||||
|
||||
if (response.statusCode !== 200) {
|
||||
throw 'Error: Resource ' + remoteResourceRoute + ' could not be fetched.';
|
||||
throw `Error: Resource ${remoteResourceRoute} could not be fetched.`;
|
||||
}
|
||||
|
||||
callback(resourceContents, resourceURL);
|
||||
@@ -130,7 +129,7 @@ function _getRemoteResourceContents(remoteResourceRoute, callback) {
|
||||
});
|
||||
}
|
||||
|
||||
function _hashFileContents(fileContents) {
|
||||
function _hashFileContents (fileContents) {
|
||||
|
||||
var hash;
|
||||
|
||||
@@ -143,7 +142,27 @@ function _hashFileContents(fileContents) {
|
||||
return hash.read();
|
||||
}
|
||||
|
||||
function _compareResources(localResourceContents, remoteResourceContents, URL) {
|
||||
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';
|
||||
@@ -156,8 +175,8 @@ function _compareResources(localResourceContents, remoteResourceContents, URL) {
|
||||
var localResourceHash = _hashFileContents(localResourceContents);
|
||||
var remoteResourceHash = _hashFileContents(remoteResourceContents);
|
||||
|
||||
console.log('RESOURCE HASH (SHA512): ' + localResourceHash);
|
||||
console.log('RESOURCE HASH (SHA512): ' + remoteResourceHash);
|
||||
console.log(`RESOURCE HASH (SHA512): ${localResourceHash}`);
|
||||
console.log(`RESOURCE HASH (SHA512): ${remoteResourceHash}`);
|
||||
|
||||
var fileHashesMatch = (localResourceHash === remoteResourceHash);
|
||||
|
||||
@@ -174,26 +193,6 @@ function _compareResources(localResourceContents, remoteResourceContents, URL) {
|
||||
_incrementComparedResourceAmount();
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializations
|
||||
*/
|
||||
@@ -205,7 +204,7 @@ resourceAmount = localResourcePaths.length;
|
||||
* Script
|
||||
*/
|
||||
|
||||
localResourcePaths.forEach(function (resourcePath, index) {
|
||||
localResourcePaths.forEach(function (resourcePath) {
|
||||
|
||||
var resourceRoute = resourcePath.substr(localResourceLocationLength + 1);
|
||||
resourceRoute = resourceRoute.substring(0, resourceRoute.length - 4);
|
||||
|
||||
56
core/constants.js
Normal file
@@ -0,0 +1,56 @@
|
||||
/**
|
||||
* 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': '*://',
|
||||
'EXAMPLE': 'example.org',
|
||||
'HTTP': 'http:',
|
||||
'HTTPS': 'https:',
|
||||
'WWW_PREFIX': 'www.'
|
||||
};
|
||||
|
||||
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',
|
||||
'SHOW_ICON_BADGE': 'showIconBadge',
|
||||
'STRIP_METADATA': 'stripMetadata',
|
||||
'WHITELISTED_DOMAINS': 'whitelistedDomains'
|
||||
};
|
||||
|
||||
const WebRequest = {
|
||||
'GET': 'GET',
|
||||
'BLOCKING': 'blocking',
|
||||
'HEADERS': 'requestHeaders',
|
||||
'ORIGIN_HEADER': 'Origin',
|
||||
'REFERER_HEADER': 'Referer'
|
||||
};
|
||||
|
||||
const Whitelist = {
|
||||
'TRIM_EXPRESSION': /^;+|;+$/g,
|
||||
'VALUE_SEPARATOR': ';'
|
||||
};
|
||||
@@ -19,19 +19,13 @@
|
||||
|
||||
var interceptor = {};
|
||||
|
||||
/**
|
||||
* Constants
|
||||
*/
|
||||
|
||||
const HTTP_EXPRESSION = /^http?:\/\//;
|
||||
|
||||
/**
|
||||
* Public Methods
|
||||
*/
|
||||
|
||||
interceptor.handleRequest = function (requestDetails, tabIdentifier, tab) {
|
||||
|
||||
let validCandidate, targetDetails, targetPath;
|
||||
let validCandidate, tabDomain, targetDetails, targetPath;
|
||||
|
||||
validCandidate = requestAnalyzer.isValidCandidate(requestDetails, tab);
|
||||
|
||||
@@ -42,6 +36,37 @@ interceptor.handleRequest = function (requestDetails, tabIdentifier, tab) {
|
||||
};
|
||||
}
|
||||
|
||||
tabDomain = helpers.extractDomainFromUrl(tab.url, true);
|
||||
|
||||
if (tabDomain === null) {
|
||||
tabDomain = Address.EXAMPLE;
|
||||
}
|
||||
|
||||
// Temporary list of undetectable tainted domains.
|
||||
let undetectableTaintedDomains = {
|
||||
'10fastfingers.com': true,
|
||||
'cdnjs.com': true,
|
||||
'dropbox.com': true,
|
||||
'glowing-bear.org': true,
|
||||
'minigames.mail.ru': true,
|
||||
'miniquadtestbench.com': true,
|
||||
'qwertee.com': true,
|
||||
'report-uri.io': true,
|
||||
'scotthelme.co.uk': true,
|
||||
'securityheaders.io': true,
|
||||
'stefansundin.github.io': true,
|
||||
'udacity.com': true,
|
||||
'yadi.sk': true,
|
||||
'yourvotematters.co.uk': true
|
||||
};
|
||||
|
||||
if (undetectableTaintedDomains[tabDomain] || (/yandex\./).test(tabDomain)) {
|
||||
|
||||
if (tabDomain !== 'yandex.ru') {
|
||||
return interceptor._handleMissingCandidate(requestDetails.url);
|
||||
}
|
||||
}
|
||||
|
||||
targetDetails = requestAnalyzer.getLocalTarget(requestDetails);
|
||||
targetPath = targetDetails.path;
|
||||
|
||||
@@ -54,8 +79,7 @@ interceptor.handleRequest = function (requestDetails, tabIdentifier, tab) {
|
||||
}
|
||||
|
||||
stateManager.requests[requestDetails.requestId] = {
|
||||
'tabIdentifier': tabIdentifier,
|
||||
'targetDetails': targetDetails
|
||||
tabIdentifier, targetDetails
|
||||
};
|
||||
|
||||
return {
|
||||
@@ -76,9 +100,12 @@ interceptor._handleMissingCandidate = function (requestUrl) {
|
||||
};
|
||||
}
|
||||
|
||||
if (requestUrl.match(HTTP_EXPRESSION)) {
|
||||
let requestUrlSegments = new URL(requestUrl);
|
||||
|
||||
requestUrl = requestUrl.replace(HTTP_EXPRESSION, 'https://');
|
||||
if (requestUrlSegments.protocol === Address.HTTP) {
|
||||
|
||||
requestUrlSegments.protocol = Address.HTTPS;
|
||||
requestUrl = requestUrlSegments.toString();
|
||||
|
||||
return {
|
||||
'redirectUrl': requestUrl
|
||||
@@ -94,7 +121,7 @@ interceptor._handleMissingCandidate = function (requestUrl) {
|
||||
|
||||
interceptor._handleStorageChanged = function (changes) {
|
||||
|
||||
if ('blockMissing' in changes) {
|
||||
if (Setting.BLOCK_MISSING in changes) {
|
||||
interceptor.blockMissing = changes.blockMissing.newValue;
|
||||
}
|
||||
};
|
||||
@@ -106,7 +133,7 @@ interceptor._handleStorageChanged = function (changes) {
|
||||
interceptor.amountInjected = 0;
|
||||
interceptor.blockMissing = false;
|
||||
|
||||
chrome.storage.local.get(['amountInjected', 'blockMissing'], function (items) {
|
||||
chrome.storage.local.get([Setting.AMOUNT_INJECTED, Setting.BLOCK_MISSING], function (items) {
|
||||
|
||||
interceptor.amountInjected = items.amountInjected || 0;
|
||||
interceptor.blockMissing = items.blockMissing || false;
|
||||
|
||||
87
core/main.js
@@ -19,30 +19,77 @@
|
||||
|
||||
var main = {};
|
||||
|
||||
/**
|
||||
* Private Methods
|
||||
*/
|
||||
|
||||
main._initializeOptions = function () {
|
||||
|
||||
let optionDefaults = {
|
||||
'showIconBadge': true,
|
||||
'blockMissing': false,
|
||||
'disablePrefetch': true,
|
||||
'stripMetadata': true,
|
||||
'whitelistedDomains': {}
|
||||
};
|
||||
|
||||
chrome.storage.local.get(optionDefaults, function (options) {
|
||||
|
||||
if (options === null) {
|
||||
options = optionDefaults;
|
||||
}
|
||||
|
||||
if (options.disablePrefetch !== false) {
|
||||
|
||||
chrome.privacy.network.networkPredictionEnabled.set({
|
||||
'value': false
|
||||
});
|
||||
}
|
||||
|
||||
chrome.storage.local.set(options);
|
||||
});
|
||||
};
|
||||
|
||||
main._showReleaseNotes = function (details) {
|
||||
|
||||
let location, previousVersion;
|
||||
|
||||
location = chrome.extension.getURL('pages/welcome/welcome.html');
|
||||
|
||||
if (details.reason === chrome.runtime.OnInstalledReason.INSTALL ||
|
||||
details.reason === chrome.runtime.OnInstalledReason.UPDATE) {
|
||||
|
||||
previousVersion = details.previousVersion;
|
||||
|
||||
if (previousVersion && previousVersion.charAt(0) === '2') {
|
||||
return; // Do not show release notes after minor updates.
|
||||
}
|
||||
|
||||
if (details.temporary !== true) {
|
||||
|
||||
chrome.storage.local.get({
|
||||
'showReleaseNotes': true
|
||||
}, function (options) {
|
||||
|
||||
if (options.showReleaseNotes === true) {
|
||||
|
||||
chrome.tabs.create({
|
||||
'url': location,
|
||||
'active': false
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Initializations
|
||||
*/
|
||||
|
||||
chrome.runtime.getPlatformInfo(function (information) {
|
||||
main.operatingSystem = information.os;
|
||||
});
|
||||
chrome.runtime.onInstalled.addListener(main._showReleaseNotes);
|
||||
main._initializeOptions();
|
||||
|
||||
if (typeof chrome.browserAction.setBadgeBackgroundColor !== 'function') {
|
||||
|
||||
chrome.browserAction.setBadgeBackgroundColor = function () {};
|
||||
chrome.browserAction.setBadgeText = function () {};
|
||||
|
||||
chrome.browserAction.onClicked.addListener(function () {
|
||||
|
||||
chrome.tabs.create({
|
||||
'url': chrome.extension.getURL('pages/popup/popup.html'),
|
||||
'active': false
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
chrome.privacy.network.networkPredictionEnabled.set({'value': false});
|
||||
|
||||
chrome.browserAction.setBadgeBackgroundColor({
|
||||
wrappers.setBadgeBackgroundColor({
|
||||
'color': [74, 130, 108, 255]
|
||||
});
|
||||
|
||||
@@ -37,40 +37,40 @@ var mappings = {
|
||||
|
||||
// Common Shorthand Notations [Deprecated]
|
||||
'dojo/1/dojo/dojo.': {
|
||||
path: 'resources/dojo/1.6.1/dojo/dojo.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/dojo/1.6.1/dojo/dojo.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
'jquery/1/jquery.': {
|
||||
path: 'resources/jquery/1.11.1/jquery.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/jquery/1.11.1/jquery.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
'jqueryui/1/jquery-ui.js': {
|
||||
path: 'resources/jqueryui/1.10.4/jquery-ui.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/jqueryui/1.10.4/jquery-ui.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
'jqueryui/1/jquery-ui.min.js': {
|
||||
path: 'resources/jqueryui/1.10.4/jquery-ui.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/jqueryui/1.10.4/jquery-ui.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
'mootools/1/mootools-yui-compressed.': {
|
||||
path: 'resources/mootools/1.1.2/mootools-yui-compressed.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/mootools/1.1.2/mootools-yui-compressed.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
'prototype/1/prototype.': {
|
||||
path: 'resources/prototype/1.7.1.0/prototype.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/prototype/1.7.1.0/prototype.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
'scriptaculous/1/scriptaculous.': {
|
||||
path: 'resources/scriptaculous/1.9.0/scriptaculous.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/scriptaculous/1.9.0/scriptaculous.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
'swfobject/2/swfobject.': {
|
||||
path: 'resources/swfobject/2.2/swfobject.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/swfobject/2.2/swfobject.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
'webfont/1/webfont.': {
|
||||
path: 'resources/webfont/1.5.18/webfont.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/webfont/1.5.18/webfont.js.dec',
|
||||
'type': 'application/javascript'
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -118,52 +118,52 @@ var mappings = {
|
||||
|
||||
// Common Shorthand Notations [Deprecated]
|
||||
'jquery-latest.': {
|
||||
path: 'resources/jquery/1.11.1/jquery.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/jquery/1.11.1/jquery.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
'jquery.': {
|
||||
path: 'resources/jquery/1.11.1/jquery.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/jquery/1.11.1/jquery.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
'jquery-1.3.min.js': {
|
||||
path: 'resources/jquery/1.3.0/jquery.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/jquery/1.3.0/jquery.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
'jquery-1.3.js': {
|
||||
path: 'resources/jquery/1.3.0/jquery.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/jquery/1.3.0/jquery.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
'jquery-1.4.min.js': {
|
||||
path: 'resources/jquery/1.4.0/jquery.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/jquery/1.4.0/jquery.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
'jquery-1.4.js': {
|
||||
path: 'resources/jquery/1.4.0/jquery.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/jquery/1.4.0/jquery.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
'jquery-1.5.min.js': {
|
||||
path: 'resources/jquery/1.5.0/jquery.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/jquery/1.5.0/jquery.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
'jquery-1.5.js': {
|
||||
path: 'resources/jquery/1.5.0/jquery.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/jquery/1.5.0/jquery.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
'jquery-1.6.min.js': {
|
||||
path: 'resources/jquery/1.6.0/jquery.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/jquery/1.6.0/jquery.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
'jquery-1.6.js': {
|
||||
path: 'resources/jquery/1.6.0/jquery.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/jquery/1.6.0/jquery.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
'jquery-1.7.min.js': {
|
||||
path: 'resources/jquery/1.7.0/jquery.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/jquery/1.7.0/jquery.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
'jquery-1.7.js': {
|
||||
path: 'resources/jquery/1.7.0/jquery.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'path': 'resources/jquery/1.7.0/jquery.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -19,51 +19,44 @@
|
||||
|
||||
var requestAnalyzer = {};
|
||||
|
||||
/**
|
||||
* Constants
|
||||
*/
|
||||
|
||||
const MAPPING_FILE_EXPRESSION = new RegExp('\.map$', 'i');
|
||||
const VERSION_EXPRESSION = /(?:\d{1,2}\.){1,3}\d{1,2}/;
|
||||
const VERSION_PLACEHOLDER = '{version}';
|
||||
const WEB_DOMAIN_EXPRESSION = /:\/\/(.[^\/]+)(.*)/;
|
||||
const WEB_PREFIX_VALUE = 'www.';
|
||||
const WEB_PREFIX_LENGTH = WEB_PREFIX_VALUE.length;
|
||||
|
||||
/**
|
||||
* Public Methods
|
||||
*/
|
||||
|
||||
requestAnalyzer.isValidCandidate = function (requestDetails, tabDetails) {
|
||||
|
||||
let initiatorHost;
|
||||
let initiatorDomain, isWhitelisted;
|
||||
|
||||
try {
|
||||
initiatorHost = tabDetails.url.match(WEB_DOMAIN_EXPRESSION)[1];
|
||||
} catch (exception) {
|
||||
initiatorHost = 'example.org';
|
||||
initiatorDomain = helpers.extractDomainFromUrl(tabDetails.url, true);
|
||||
|
||||
if (initiatorDomain === null) {
|
||||
initiatorDomain = Address.EXAMPLE;
|
||||
}
|
||||
|
||||
if (initiatorHost && requestAnalyzer.whitelistedDomains[requestAnalyzer._normalizeDomain(initiatorHost)]) {
|
||||
isWhitelisted = requestAnalyzer.whitelistedDomains[initiatorDomain];
|
||||
|
||||
if (isWhitelisted) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Only requests of type GET can be valid candidates.
|
||||
return requestDetails.method === 'GET';
|
||||
return requestDetails.method === WebRequest.GET;
|
||||
};
|
||||
|
||||
requestAnalyzer.getLocalTarget = function (requestDetails) {
|
||||
|
||||
let destinationHost, destinationPath, hostMappings, basePath, resourceMappings;
|
||||
let destinationUrl, destinationHost, destinationPath, hostMappings, basePath, resourceMappings;
|
||||
|
||||
destinationHost = requestDetails.url.match(WEB_DOMAIN_EXPRESSION)[1];
|
||||
destinationPath = requestDetails.url.match(WEB_DOMAIN_EXPRESSION)[2];
|
||||
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 (MAPPING_FILE_EXPRESSION.test(destinationPath)) {
|
||||
if (Resource.MAPPING_EXPRESSION.test(destinationPath)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -96,12 +89,12 @@ requestAnalyzer._matchBasePath = function (hostMappings, channelPath) {
|
||||
|
||||
requestAnalyzer._findLocalTarget = function (resourceMappings, basePath, channelHost, channelPath) {
|
||||
|
||||
var resourcePath, versionNumber, resourcePattern;
|
||||
let resourcePath, versionNumber, resourcePattern;
|
||||
|
||||
resourcePath = channelPath.replace(basePath, '');
|
||||
|
||||
versionNumber = resourcePath.match(VERSION_EXPRESSION);
|
||||
resourcePattern = resourcePath.replace(versionNumber, VERSION_PLACEHOLDER);
|
||||
versionNumber = resourcePath.match(Resource.VERSION_EXPRESSION);
|
||||
resourcePattern = resourcePath.replace(versionNumber, Resource.VERSION_PLACEHOLDER);
|
||||
|
||||
for (let resourceMold of Object.keys(resourceMappings)) {
|
||||
|
||||
@@ -110,15 +103,15 @@ requestAnalyzer._findLocalTarget = function (resourceMappings, basePath, channel
|
||||
let targetPath, version;
|
||||
|
||||
targetPath = resourceMappings[resourceMold].path;
|
||||
targetPath = targetPath.replace(VERSION_PLACEHOLDER, versionNumber);
|
||||
targetPath = targetPath.replace(Resource.VERSION_PLACEHOLDER, versionNumber);
|
||||
|
||||
version = versionNumber && versionNumber[0] || targetPath.match(VERSION_EXPRESSION);
|
||||
version = versionNumber && versionNumber[0] || targetPath.match(Resource.VERSION_EXPRESSION);
|
||||
|
||||
// Prepare and return a local target.
|
||||
return {
|
||||
source: channelHost,
|
||||
version: version,
|
||||
path: targetPath
|
||||
'source': channelHost,
|
||||
'version': version,
|
||||
'path': targetPath
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -128,23 +121,11 @@ requestAnalyzer._findLocalTarget = function (resourceMappings, basePath, channel
|
||||
|
||||
requestAnalyzer._applyWhitelistedDomains = function () {
|
||||
|
||||
//noinspection JSUnresolvedVariable
|
||||
chrome.storage.local.get('whitelistedDomains', function (items) {
|
||||
chrome.storage.local.get(Setting.WHITELISTED_DOMAINS, function (items) {
|
||||
requestAnalyzer.whitelistedDomains = items.whitelistedDomains || {};
|
||||
});
|
||||
};
|
||||
|
||||
requestAnalyzer._normalizeDomain = function (domain) {
|
||||
|
||||
domain = domain.toLowerCase().trim();
|
||||
|
||||
if (domain.startsWith(WEB_PREFIX_VALUE)) {
|
||||
domain = domain.slice(WEB_PREFIX_LENGTH);
|
||||
}
|
||||
|
||||
return domain;
|
||||
};
|
||||
|
||||
/**
|
||||
* Initializations
|
||||
*/
|
||||
|
||||
@@ -20,73 +20,73 @@
|
||||
var resources = {
|
||||
|
||||
// AngularJS
|
||||
angular: {
|
||||
path: 'resources/angularjs/{version}/angular.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'angular': {
|
||||
'path': 'resources/angularjs/{version}/angular.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
// Backbone.js
|
||||
backbone: {
|
||||
path: 'resources/backbone.js/{version}/backbone-min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'backbone': {
|
||||
'path': 'resources/backbone.js/{version}/backbone-min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
// Dojo
|
||||
dojo: {
|
||||
path: 'resources/dojo/{version}/dojo/dojo.js.dec',
|
||||
type: 'application/javascript'
|
||||
'dojo': {
|
||||
'path': 'resources/dojo/{version}/dojo/dojo.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
// Ember.js
|
||||
ember: {
|
||||
path: 'resources/ember.js/{version}/ember.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'ember': {
|
||||
'path': 'resources/ember.js/{version}/ember.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
// Ext Core
|
||||
extCore: {
|
||||
path: 'resources/ext-core/{version}/ext-core.js.dec',
|
||||
type: 'application/javascript'
|
||||
'extCore': {
|
||||
'path': 'resources/ext-core/{version}/ext-core.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
// jQuery
|
||||
jQuery: {
|
||||
path: 'resources/jquery/{version}/jquery.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'jQuery': {
|
||||
'path': 'resources/jquery/{version}/jquery.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
// jQuery UI
|
||||
jQueryUI: {
|
||||
path: 'resources/jqueryui/{version}/jquery-ui.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'jQueryUI': {
|
||||
'path': 'resources/jqueryui/{version}/jquery-ui.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
// Modernizr
|
||||
modernizr: {
|
||||
path: 'resources/modernizr/{version}/modernizr.min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'modernizr': {
|
||||
'path': 'resources/modernizr/{version}/modernizr.min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
// MooTools
|
||||
mootools: {
|
||||
path: 'resources/mootools/{version}/mootools-yui-compressed.js.dec',
|
||||
type: 'application/javascript'
|
||||
'mootools': {
|
||||
'path': 'resources/mootools/{version}/mootools-yui-compressed.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
// Prototype
|
||||
prototypeJS: {
|
||||
path: 'resources/prototype/{version}/prototype.js.dec',
|
||||
type: 'application/javascript'
|
||||
'prototypeJS': {
|
||||
'path': 'resources/prototype/{version}/prototype.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
// Scriptaculous
|
||||
scriptaculous: {
|
||||
path: 'resources/scriptaculous/{version}/scriptaculous.js.dec',
|
||||
type: 'application/javascript'
|
||||
'scriptaculous': {
|
||||
'path': 'resources/scriptaculous/{version}/scriptaculous.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
// SWFObject
|
||||
swfobject: {
|
||||
path: 'resources/swfobject/{version}/swfobject.js.dec',
|
||||
type: 'application/javascript'
|
||||
'swfobject': {
|
||||
'path': 'resources/swfobject/{version}/swfobject.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
// Underscore.js
|
||||
underscore: {
|
||||
path: 'resources/underscore.js/{version}/underscore-min.js.dec',
|
||||
type: 'application/javascript'
|
||||
'underscore': {
|
||||
'path': 'resources/underscore.js/{version}/underscore-min.js.dec',
|
||||
'type': 'application/javascript'
|
||||
},
|
||||
// Web Font Loader
|
||||
webfont: {
|
||||
path: 'resources/webfont/{version}/webfont.js.dec',
|
||||
type: 'application/javascript'
|
||||
'webfont': {
|
||||
'path': 'resources/webfont/{version}/webfont.js.dec',
|
||||
'type': 'application/javascript'
|
||||
}
|
||||
};
|
||||
|
||||
@@ -19,17 +19,6 @@
|
||||
|
||||
var stateManager = {};
|
||||
|
||||
/**
|
||||
* Constants
|
||||
*/
|
||||
|
||||
const BLOCKING_ACTION = 'blocking';
|
||||
const HOST_PREFIX = '*://';
|
||||
const HOST_SUFFIX = '/*';
|
||||
const JAVASCRIPT_REQUEST_TYPE = 'script';
|
||||
const REQUEST_HEADERS = 'requestHeaders';
|
||||
const XML_HTTP_REQUEST_TYPE = 'xmlhttprequest';
|
||||
|
||||
/**
|
||||
* Public Methods
|
||||
*/
|
||||
@@ -44,24 +33,27 @@ stateManager.registerInjection = function (tabIdentifier, injection) {
|
||||
registeredTab.injections[injectionIdentifier] = injection;
|
||||
injectionCount = Object.keys(registeredTab.injections).length || 0;
|
||||
|
||||
if (injectionCount > 0) {
|
||||
if (stateManager.showIconBadge === true) {
|
||||
|
||||
chrome.browserAction.setBadgeText({
|
||||
tabId: tabIdentifier,
|
||||
text: injectionCount.toString()
|
||||
});
|
||||
if (injectionCount > 0) {
|
||||
|
||||
} else {
|
||||
wrappers.setBadgeText({
|
||||
'tabId': tabIdentifier,
|
||||
'text': injectionCount.toString()
|
||||
});
|
||||
|
||||
chrome.browserAction.setBadgeText({
|
||||
tabId: tabIdentifier,
|
||||
text: ''
|
||||
});
|
||||
} else {
|
||||
|
||||
wrappers.setBadgeText({
|
||||
'tabId': tabIdentifier,
|
||||
'text': ''
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (isNaN(interceptor.amountInjected)) {
|
||||
|
||||
chrome.storage.local.get('amountInjected', function (items) {
|
||||
chrome.storage.local.get(Setting.AMOUNT_INJECTED, function (items) {
|
||||
|
||||
interceptor.amountInjected = items.amountInjected;
|
||||
|
||||
@@ -117,20 +109,15 @@ stateManager._createTab = function (tab) {
|
||||
requestFilters = {
|
||||
|
||||
'tabId': tabIdentifier,
|
||||
'types': stateManager.validTypes,
|
||||
'urls': stateManager.validHosts
|
||||
};
|
||||
|
||||
chrome.webRequest.onBeforeRequest.addListener(function (requestDetails) {
|
||||
|
||||
return new Promise((resolve) => {
|
||||
let tab = stateManager.tabs[tabIdentifier].details || {};
|
||||
return interceptor.handleRequest(requestDetails, tabIdentifier, tab);
|
||||
|
||||
browser.tabs.get(tabIdentifier).then(function (tab) {
|
||||
resolve(interceptor.handleRequest(requestDetails, tabIdentifier, tab));
|
||||
});
|
||||
});
|
||||
|
||||
}, requestFilters, [BLOCKING_ACTION]);
|
||||
}, requestFilters, [WebRequest.BLOCKING]);
|
||||
};
|
||||
|
||||
stateManager._removeTab = function (tabIdentifier) {
|
||||
@@ -148,38 +135,87 @@ stateManager._updateTab = function (details) {
|
||||
return;
|
||||
}
|
||||
|
||||
chrome.browserAction.setBadgeText({
|
||||
tabId: tabIdentifier,
|
||||
text: ''
|
||||
});
|
||||
if (stateManager.showIconBadge === true) {
|
||||
|
||||
wrappers.setBadgeText({
|
||||
'tabId': tabIdentifier,
|
||||
'text': ''
|
||||
});
|
||||
}
|
||||
|
||||
if (stateManager.tabs[tabIdentifier]) {
|
||||
stateManager.tabs[tabIdentifier].injections = {};
|
||||
}
|
||||
};
|
||||
|
||||
stateManager._stripMetadata = function (requestDetails) {
|
||||
|
||||
for (let i = 0; i < requestDetails.requestHeaders.length; ++i) {
|
||||
|
||||
if (requestDetails.requestHeaders[i].name === WebRequest.ORIGIN_HEADER) {
|
||||
requestDetails.requestHeaders.splice(i--, 1);
|
||||
} else if (requestDetails.requestHeaders[i].name === WebRequest.REFERER_HEADER) {
|
||||
requestDetails.requestHeaders.splice(i--, 1);
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
'requestHeaders': requestDetails.requestHeaders
|
||||
};
|
||||
};
|
||||
|
||||
stateManager._handleStorageChanged = function (changes) {
|
||||
|
||||
if ('showIconBadge' in changes) {
|
||||
|
||||
stateManager.showIconBadge = changes.showIconBadge.newValue;
|
||||
|
||||
if (changes.showIconBadge.newValue !== true) {
|
||||
|
||||
chrome.tabs.query({}, function (tabs) {
|
||||
tabs.forEach(stateManager._removeIconBadgeFromTab);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if ('stripMetadata' in changes) {
|
||||
|
||||
let onBeforeSendHeaders;
|
||||
|
||||
onBeforeSendHeaders = chrome.webRequest.onBeforeSendHeaders;
|
||||
|
||||
onBeforeSendHeaders.removeListener(stateManager._stripMetadata, {
|
||||
'urls': stateManager.validHosts
|
||||
}, [WebRequest.BLOCKING, WebRequest.HEADERS]);
|
||||
|
||||
if (changes.stripMetadata.newValue !== false) {
|
||||
|
||||
onBeforeSendHeaders.addListener(stateManager._stripMetadata, {
|
||||
'urls': stateManager.validHosts
|
||||
}, [WebRequest.BLOCKING, WebRequest.HEADERS]);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
stateManager._removeIconBadgeFromTab = function (tab) {
|
||||
|
||||
wrappers.setBadgeText({
|
||||
'tabId': tab.id,
|
||||
'text': ''
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Initializations
|
||||
*/
|
||||
|
||||
stateManager.requests = {};
|
||||
stateManager.tabs = {};
|
||||
|
||||
stateManager.validTypes = [
|
||||
|
||||
JAVASCRIPT_REQUEST_TYPE,
|
||||
XML_HTTP_REQUEST_TYPE
|
||||
];
|
||||
|
||||
stateManager.validHosts = [];
|
||||
|
||||
for (let mapping in mappings) {
|
||||
|
||||
if (!mappings.hasOwnProperty(mapping)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
let supportedHost = HOST_PREFIX + mapping + HOST_SUFFIX;
|
||||
let supportedHost = Address.ANY_PROTOCOL + mapping + Address.ANY_PATH;
|
||||
stateManager.validHosts.push(supportedHost);
|
||||
}
|
||||
|
||||
@@ -187,6 +223,10 @@ chrome.tabs.query({}, function (tabs) {
|
||||
tabs.forEach(stateManager._createTab);
|
||||
});
|
||||
|
||||
chrome.storage.local.get('showIconBadge', function (items) {
|
||||
stateManager.showIconBadge = items.showIconBadge || true;
|
||||
});
|
||||
|
||||
/**
|
||||
* Event Handlers
|
||||
*/
|
||||
@@ -194,8 +234,19 @@ chrome.tabs.query({}, function (tabs) {
|
||||
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].details = {
|
||||
'url': requestDetails.url
|
||||
};
|
||||
}
|
||||
|
||||
}, {'types': ['main_frame'], 'urls': [Address.ANY]});
|
||||
|
||||
chrome.webNavigation.onCommitted.addListener(stateManager._updateTab, {
|
||||
url: [{urlContains: ':'}]
|
||||
'url': [{'urlContains': ':'}]
|
||||
});
|
||||
|
||||
chrome.webRequest.onErrorOccurred.addListener(function (requestDetails) {
|
||||
@@ -204,7 +255,7 @@ chrome.webRequest.onErrorOccurred.addListener(function (requestDetails) {
|
||||
delete stateManager.requests[requestDetails.requestId];
|
||||
}
|
||||
|
||||
}, {'urls': ['*://*/*']});
|
||||
}, {'urls': [Address.ANY]});
|
||||
|
||||
chrome.webRequest.onBeforeRedirect.addListener(function (requestDetails) {
|
||||
|
||||
@@ -216,19 +267,16 @@ chrome.webRequest.onBeforeRedirect.addListener(function (requestDetails) {
|
||||
delete stateManager.requests[requestDetails.requestId];
|
||||
}
|
||||
|
||||
}, {'urls': ['*://*/*']});
|
||||
}, {'urls': [Address.ANY]});
|
||||
|
||||
chrome.webRequest.onBeforeSendHeaders.addListener(function (requestDetails) {
|
||||
chrome.storage.local.get({'stripMetadata': true}, function (options) {
|
||||
|
||||
for (let i = 0; i < requestDetails.requestHeaders.length; ++i) {
|
||||
if (options === null || options.stripMetadata !== false) {
|
||||
|
||||
if (requestDetails.requestHeaders[i].name === 'Origin') {
|
||||
requestDetails.requestHeaders.splice(i, 1);
|
||||
} else if (requestDetails.requestHeaders[i].name === 'Referer') {
|
||||
requestDetails.requestHeaders.splice(i, 1);
|
||||
}
|
||||
chrome.webRequest.onBeforeSendHeaders.addListener(stateManager._stripMetadata, {
|
||||
'urls': stateManager.validHosts
|
||||
}, [WebRequest.BLOCKING, WebRequest.HEADERS]);
|
||||
}
|
||||
});
|
||||
|
||||
return {requestHeaders: requestDetails.requestHeaders};
|
||||
|
||||
}, {urls: stateManager.validHosts}, [BLOCKING_ACTION, REQUEST_HEADERS]);
|
||||
chrome.storage.onChanged.addListener(stateManager._handleStorageChanged);
|
||||
|
||||
32
crowdin.yaml
Normal file
@@ -0,0 +1,32 @@
|
||||
"project_identifier": "decentraleyes"
|
||||
"preserve_hierarchy": true
|
||||
"files":
|
||||
-
|
||||
"source": "/_locales/en_US/messages.json"
|
||||
"translation": "/_locales/%locale_with_underscore%/messages.json"
|
||||
"languages_mapping":
|
||||
"locale_with_underscore":
|
||||
"ar": "ar"
|
||||
"bg": "bg"
|
||||
"da": "da"
|
||||
"de": "de"
|
||||
"el": "el"
|
||||
"et": "et"
|
||||
"eo": "eo"
|
||||
"es-ES": "es"
|
||||
"fi": "fi"
|
||||
"fr": "fr"
|
||||
"he": "he"
|
||||
"hu": "hu"
|
||||
"id": "id"
|
||||
"is": "is"
|
||||
"it": "it"
|
||||
"ja": "ja"
|
||||
"ko": "ko"
|
||||
"nl": "nl"
|
||||
"pl": "pl"
|
||||
"ro": "ro"
|
||||
"ru": "ru"
|
||||
"sr": "sr"
|
||||
"sv-SE": "sv"
|
||||
"tr": "tr"
|
||||
|
Before Width: | Height: | Size: 925 B After Width: | Height: | Size: 671 B |
|
Before Width: | Height: | Size: 1001 B After Width: | Height: | Size: 713 B |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 7.7 KiB |
BIN
icons/icon16.png
|
Before Width: | Height: | Size: 859 B After Width: | Height: | Size: 608 B |
BIN
icons/icon48.png
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 2.8 KiB |
BIN
icons/icon96.png
|
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 5.6 KiB |
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "Decentraleyes",
|
||||
"version": "2.0.0beta2",
|
||||
"version": "2.0.2",
|
||||
|
||||
"author": "Thomas Rientjes",
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
"*://*/*",
|
||||
"privacy",
|
||||
"storage",
|
||||
"unlimitedStorage",
|
||||
"tabs",
|
||||
"webNavigation",
|
||||
"webRequest",
|
||||
@@ -38,20 +39,18 @@
|
||||
"38": "icons/action/icon38.png",
|
||||
"64": "icons/action/icon64.png"
|
||||
},
|
||||
"default_popup": "pages/popup/popup.html",
|
||||
"browser_style": false
|
||||
"default_popup": "pages/popup/popup.html",
|
||||
"browser_style": false
|
||||
},
|
||||
|
||||
"options_ui": {
|
||||
"page": "pages/options/options.html",
|
||||
"browser_style": true,
|
||||
"chrome_style": true
|
||||
"page": "pages/options/options.html"
|
||||
},
|
||||
|
||||
"applications": {
|
||||
"gecko": {
|
||||
"id": "jid1-BoFifL9Vbdl2zQ@jetpack",
|
||||
"strict_min_version": "56.0a1"
|
||||
"id": "jid1-BoFifL9Vbdl2zQ@jetpack",
|
||||
"strict_min_version": "56.0a1"
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
5
modules/fontawesome/fontawesome.min.js
vendored
Normal file
5
modules/fontawesome/icon-bundle.min.js
vendored
Normal file
@@ -1 +0,0 @@
|
||||
!function(){"use strict";function c(c){if(null===c||void 0===c)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(c)}function l(c){"function"==typeof V.hooks.addPack?V.hooks.addPack(c,h):V.packs[c]=a({},V.packs[c]||{},h)}var h={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"],"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"],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"],"shield-alt":[512,512,[],"f3ca","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"]},v=Object.getOwnPropertySymbols,z=Object.prototype.hasOwnProperty,H=Object.prototype.propertyIsEnumerable,a=function(){try{if(!Object.assign)return!1;var c=new String("abc");if(c[5]="de","5"===Object.getOwnPropertyNames(c)[0])return!1;for(var l={},h=0;h<10;h++)l["_"+String.fromCharCode(h)]=h;if("0123456789"!==Object.getOwnPropertyNames(l).map(function(c){return l[c]}).join(""))return!1;var v={};return"abcdefghijklmnopqrst".split("").forEach(function(c){v[c]=c}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},v)).join("")}catch(c){return!1}}()?Object.assign:function(l,h){for(var a,M,V=c(l),f=1;f<arguments.length;f++){a=Object(arguments[f]);for(var e in a)z.call(a,e)&&(V[e]=a[e]);if(v){M=v(a);for(var m=0;m<M.length;m++)H.call(a,M[m])&&(V[M[m]]=a[M[m]])}}return V},M=a({},{namespace:"___FONT_AWESOME___",familyPrefix:"fa",replacementClass:"svg-inline--fa",autoReplaceSvg:!0,autoA11y:!0,observeMutations:!0,keepOriginalSource:!0,measurePerformance:!1},window.FontAwesomeConfig||{});M.autoReplaceSvg||(M.observeMutations=!1),window[M.namespace]||(window[M.namespace]={}),window[M.namespace].packs||(window[M.namespace].packs={}),window[M.namespace].hooks||(window[M.namespace].hooks={}),window[M.namespace].shims||(window[M.namespace].shims=[]);var V=window[M.namespace];l("fas"),l("fa")}();
|
||||
211
modules/internal/helpers.js
Normal file
@@ -0,0 +1,211 @@
|
||||
/**
|
||||
* 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.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', 'zh', 'da', 'nl', 'en', 'et', 'fi', 'fr', 'de', 'el', 'is',
|
||||
'id', 'it', 'ja', 'ko', 'pl', 'pt', 'ro', 'ru', 'es', 'sv', 'tr'
|
||||
];
|
||||
|
||||
for (let supportedLanguage of supportedLanguages) {
|
||||
|
||||
if (language.search(supportedLanguage) !== -1) {
|
||||
languageSupported = true;
|
||||
}
|
||||
}
|
||||
|
||||
return languageSupported;
|
||||
};
|
||||
|
||||
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 (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.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 'libs.baidu.com':
|
||||
return 'Baidu CDN';
|
||||
case 'lib.sinaapp.com':
|
||||
return 'Sina Public Resources';
|
||||
case 'upcdn.b0.upaiyun.com':
|
||||
return 'UpYun Library';
|
||||
default:
|
||||
return 'Unknown';
|
||||
}
|
||||
};
|
||||
|
||||
helpers.determineResourceName = function (filename) {
|
||||
|
||||
switch (filename) {
|
||||
|
||||
case 'angular.min.js.dec':
|
||||
return 'AngularJS';
|
||||
case 'backbone-min.js.dec':
|
||||
return 'Backbone.js';
|
||||
case 'dojo.js.dec':
|
||||
return 'Dojo';
|
||||
case 'ember.min.js.dec':
|
||||
return 'Ember.js';
|
||||
case 'ext-core.js.dec':
|
||||
return 'Ext Core';
|
||||
case 'jquery.min.js.dec':
|
||||
return 'jQuery';
|
||||
case 'jquery-ui.min.js.dec':
|
||||
return 'jQuery UI';
|
||||
case 'modernizr.min.js.dec':
|
||||
return 'Modernizr';
|
||||
case 'mootools-yui-compressed.js.dec':
|
||||
return 'MooTools';
|
||||
case 'prototype.js.dec':
|
||||
return 'Prototype';
|
||||
case 'scriptaculous.js.dec':
|
||||
return 'Scriptaculous';
|
||||
case 'swfobject.js.dec':
|
||||
return 'SWFObject';
|
||||
case 'underscore-min.js.dec':
|
||||
return 'Underscore.js';
|
||||
case 'webfont.js.dec':
|
||||
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.formatVersion = function (version) {
|
||||
|
||||
if (version.indexOf('beta') === -1) {
|
||||
return version;
|
||||
} else {
|
||||
return 'BETA';
|
||||
}
|
||||
};
|
||||
38
modules/internal/wrappers.js
Normal file
@@ -0,0 +1,38 @@
|
||||
/**
|
||||
* 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.setBadgeBackgroundColor = function (details) {
|
||||
|
||||
if (chrome.browserAction.setBadgeBackgroundColor !== undefined) {
|
||||
chrome.browserAction.setBadgeBackgroundColor(details);
|
||||
}
|
||||
};
|
||||
|
||||
wrappers.setBadgeText = function (details) {
|
||||
|
||||
if (chrome.browserAction.setBadgeText !== undefined) {
|
||||
chrome.browserAction.setBadgeText(details);
|
||||
}
|
||||
};
|
||||
@@ -10,6 +10,10 @@
|
||||
|
||||
<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>
|
||||
|
||||
@@ -4,8 +4,18 @@
|
||||
|
||||
body {
|
||||
color: #555;
|
||||
cursor: default;
|
||||
font-family: 'Noto Sans', Arial, sans-serif !important;
|
||||
font-size: 12px;
|
||||
padding: 10px !important;
|
||||
}
|
||||
|
||||
.option {
|
||||
margin-bottom: 22px;
|
||||
}
|
||||
|
||||
.notice {
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -13,27 +23,27 @@ body {
|
||||
*/
|
||||
|
||||
@font-face {
|
||||
font-family: 'Noto Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url('../../modules/noto-sans/noto-sans.woff2')
|
||||
format('woff2');
|
||||
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-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');
|
||||
font-family: 'Noto Sans';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: url('../../modules/noto-sans/noto-sans-italic.woff2')
|
||||
format('woff2');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -52,10 +62,28 @@ body {
|
||||
|
||||
.input-checkbox {
|
||||
margin: 0 4px 0 0;
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
.input-text {
|
||||
margin-left: 29px !important;
|
||||
margin-left: 29px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Icons
|
||||
*/
|
||||
|
||||
.icon {
|
||||
color: #777;
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Links
|
||||
*/
|
||||
|
||||
.link-text {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -65,11 +93,10 @@ body {
|
||||
.description-option {
|
||||
color: #777;
|
||||
font-style: italic;
|
||||
margin-bottom: 18px;
|
||||
padding-left: 29px;
|
||||
}
|
||||
|
||||
.label {
|
||||
.badge {
|
||||
border-radius: 3px;
|
||||
color: #fff;
|
||||
font-size: 8px;
|
||||
@@ -78,6 +105,48 @@ body {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.label-warning {
|
||||
.badge-warning {
|
||||
background-color: #ffa500;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.label-checkbox {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.notice-body {
|
||||
background-color: #fbfbfb;
|
||||
border-radius: 3px;
|
||||
border: 1px solid #e7e7e7;
|
||||
color: #595959;
|
||||
display: inline-block;
|
||||
font-size: 11px;
|
||||
padding: 8px 10px;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
|
||||
@@ -11,31 +11,111 @@
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="options.css">
|
||||
|
||||
<script defer src="../../modules/fontawesome/icon-bundle.min.js"></script>
|
||||
<script defer src="../../modules/fontawesome/fontawesome.min.js"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<script src="../../core/constants.js"></script>
|
||||
<script src="../../modules/internal/helpers.js"></script>
|
||||
|
||||
<script src="options.js"></script>
|
||||
|
||||
<section>
|
||||
<section class="option">
|
||||
|
||||
<label class="title-option">
|
||||
<div class="title-option">
|
||||
|
||||
<input class="input-checkbox" data-option="blockMissing" type="checkbox">
|
||||
<span data-i18n-content="blockMissingTitle"></span>
|
||||
<span class="label label-warning" data-i18n-content="advancedLabel"></span>
|
||||
<label class="label-checkbox">
|
||||
|
||||
</label>
|
||||
<input class="input-checkbox" data-option="showIconBadge" type="checkbox">
|
||||
<span 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 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>
|
||||
<section class="option">
|
||||
|
||||
<div class="title-option" data-i18n-content="domainWhitelistTitle"></div>
|
||||
<input class="input-text" data-option="domainWhitelist" type="text">
|
||||
<div class="description-option" data-i18n-content="domainWhitelistDescription"></div>
|
||||
<div class="title-option">
|
||||
|
||||
<label class="label-checkbox">
|
||||
|
||||
<input class="input-checkbox" data-option="disablePrefetch" type="checkbox">
|
||||
<span 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 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">
|
||||
|
||||
<div class="title-option" data-i18n-content="whitelistedDomainsTitle"></div>
|
||||
<input class="input-text" data-option="whitelistedDomains" type="text">
|
||||
<div class="description-option" data-i18n-content="whitelistedDomainsDescription"></div>
|
||||
|
||||
</section>
|
||||
|
||||
<section class="notice hidden" id="notice-locale">
|
||||
|
||||
<div class="notice-body" dir="ltr">
|
||||
|
||||
<i class="fai fa-exclamation-triangle icon"></i>
|
||||
Your preferred language is not yet fully supported.
|
||||
<a class="link-text" href="https://crowdin.com/project/decentraleyes" target="_blank">
|
||||
Help Translate
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
@@ -14,77 +14,180 @@
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Constants
|
||||
* Options
|
||||
*/
|
||||
|
||||
const WEB_PREFIX_VALUE = 'www.';
|
||||
const WEB_PREFIX_LENGTH = WEB_PREFIX_VALUE.length;
|
||||
const VALUE_SEPARATOR = ';';
|
||||
|
||||
/**
|
||||
* Initializations
|
||||
*/
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
|
||||
let i18nElements, blockMissingElement, domainWhitelistElement;
|
||||
|
||||
i18nElements = document.querySelectorAll('[data-i18n-content]');
|
||||
|
||||
i18nElements.forEach(function (i18nElement) {
|
||||
|
||||
let i18nMessageName = i18nElement.getAttribute('data-i18n-content');
|
||||
i18nElement.innerText = chrome.i18n.getMessage(i18nMessageName);
|
||||
});
|
||||
|
||||
blockMissingElement = document.querySelector('[data-option=blockMissing]');
|
||||
domainWhitelistElement = document.querySelector('[data-option=domainWhitelist]');
|
||||
|
||||
chrome.storage.local.get(['blockMissing', 'whitelistedDomains'], function (items) {
|
||||
|
||||
let whitelistedDomains = items.whitelistedDomains || {};
|
||||
let domainWhitelist = '';
|
||||
|
||||
Object.keys(whitelistedDomains).forEach(function (domain) {
|
||||
domainWhitelist = domainWhitelist + domain + ';';
|
||||
});
|
||||
|
||||
domainWhitelist = domainWhitelist.slice(0, -1);
|
||||
|
||||
blockMissingElement.checked = items.blockMissing || false;
|
||||
domainWhitelistElement.value = domainWhitelist || '';
|
||||
});
|
||||
|
||||
let optionChangedHandler = function () {
|
||||
|
||||
let whitelistedDomains = {};
|
||||
|
||||
domainWhitelistElement.value.split(VALUE_SEPARATOR).forEach(function (domain) {
|
||||
whitelistedDomains[_normalizeDomain(domain)] = true;
|
||||
});
|
||||
|
||||
chrome.storage.local.set({
|
||||
|
||||
'blockMissing': blockMissingElement.checked,
|
||||
'whitelistedDomains': whitelistedDomains
|
||||
});
|
||||
};
|
||||
|
||||
blockMissingElement.addEventListener('change', optionChangedHandler);
|
||||
domainWhitelistElement.addEventListener('keyup', optionChangedHandler);
|
||||
});
|
||||
var options = {};
|
||||
|
||||
/**
|
||||
* Private Methods
|
||||
*/
|
||||
|
||||
function _normalizeDomain(domain) {
|
||||
options._renderContents = function () {
|
||||
|
||||
domain = domain.toLowerCase().trim();
|
||||
document.body.setAttribute('dir', options._scriptDirection);
|
||||
helpers.insertI18nContentIntoDocument(document);
|
||||
|
||||
if (domain.startsWith(WEB_PREFIX_VALUE)) {
|
||||
domain = domain.slice(WEB_PREFIX_LENGTH);
|
||||
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);
|
||||
|
||||
if (options._languageSupported === false) {
|
||||
options._renderLocaleNotice();
|
||||
}
|
||||
};
|
||||
|
||||
options._renderLocaleNotice = function () {
|
||||
|
||||
let localeNoticeElement = document.getElementById('notice-locale');
|
||||
localeNoticeElement.setAttribute('class', 'notice');
|
||||
};
|
||||
|
||||
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._determineOptionValues = function () {
|
||||
|
||||
return new Promise((resolve) => {
|
||||
|
||||
let optionKeys = Object.keys(options._optionElements);
|
||||
|
||||
chrome.storage.local.get(optionKeys, function (items) {
|
||||
|
||||
options._optionValues = items;
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
options._getOptionElement = function (optionKey) {
|
||||
return document.querySelector(`[data-option=${optionKey}]`);
|
||||
};
|
||||
|
||||
options._getOptionElements = function () {
|
||||
|
||||
let optionElements = {
|
||||
'showIconBadge': options._getOptionElement(Setting.SHOW_ICON_BADGE),
|
||||
'blockMissing': options._getOptionElement(Setting.BLOCK_MISSING),
|
||||
'disablePrefetch': options._getOptionElement(Setting.DISABLE_PREFETCH),
|
||||
'stripMetadata': options._getOptionElement(Setting.STRIP_METADATA),
|
||||
'whitelistedDomains': options._getOptionElement(Setting.WHITELISTED_DOMAINS)
|
||||
};
|
||||
|
||||
return optionElements;
|
||||
};
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
return domain;
|
||||
}
|
||||
if (optionKey === Setting.DISABLE_PREFETCH) {
|
||||
options._configureLinkPrefetching(optionValue);
|
||||
}
|
||||
|
||||
if (optionKey === Setting.WHITELISTED_DOMAINS) {
|
||||
optionValue = options._parseDomainWhitelist(optionValue);
|
||||
}
|
||||
|
||||
chrome.storage.local.set({
|
||||
[optionKey]: optionValue
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Initializations
|
||||
*/
|
||||
|
||||
document.addEventListener('DOMContentLoaded', options._onDocumentLoaded);
|
||||
|
||||
@@ -11,7 +11,7 @@ body {
|
||||
margin: 0 auto;
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
width: 348px;
|
||||
max-width: 348px;
|
||||
}
|
||||
|
||||
header {
|
||||
@@ -228,7 +228,7 @@ footer {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.label-beta {
|
||||
.label-version {
|
||||
color: #6aac91;
|
||||
font-size: 9px;
|
||||
}
|
||||
@@ -247,3 +247,14 @@ footer {
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compatibility
|
||||
*/
|
||||
|
||||
@media screen and (-webkit-min-device-pixel-ratio: 0) {
|
||||
|
||||
body {
|
||||
width: 348px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,71 +2,74 @@
|
||||
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<head>
|
||||
|
||||
<title>Decentraleyes Popup</title>
|
||||
<title>Decentraleyes Popup</title>
|
||||
|
||||
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
|
||||
<meta charset="utf-8" />
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="popup.css">
|
||||
<link rel="stylesheet" type="text/css" href="popup.css">
|
||||
|
||||
<script defer src="../../modules/fontawesome/packs/solid.js"></script>
|
||||
<script defer src="../../modules/fontawesome/fontawesome.js"></script>
|
||||
<script defer src="../../modules/fontawesome/icon-bundle.min.js"></script>
|
||||
<script defer src="../../modules/fontawesome/fontawesome.min.js"></script>
|
||||
|
||||
</head>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<body>
|
||||
|
||||
<script src="popup.js"></script>
|
||||
<script src="../../core/constants.js"></script>
|
||||
<script src="../../modules/internal/helpers.js"></script>
|
||||
|
||||
<header>
|
||||
<script src="popup.js"></script>
|
||||
|
||||
<img class="icon-logo" src="icon.svg" alt="Extension Icon">
|
||||
<div class="heading">Decentraleyes <sup class="label-beta">BETA</sup></div>
|
||||
<header>
|
||||
|
||||
</header>
|
||||
<img class="icon-logo" src="icon.svg" alt="Extension Icon">
|
||||
<div class="heading">Decentraleyes <sup id="version-label" class="label-version"></sup></div>
|
||||
|
||||
<section class="content">
|
||||
</header>
|
||||
|
||||
<div id="website-context" class="panel hidden">
|
||||
<section class="content">
|
||||
|
||||
<div class="subpanel">
|
||||
<div id="website-context" class="panel hidden">
|
||||
|
||||
<div id="protection-toggle-button" class="button button-toggle active">
|
||||
<i class="fas fa-power-off" data-fa-transform="grow-2"></i>
|
||||
</div>
|
||||
<div class="subpanel">
|
||||
|
||||
<div id="protection-toggle-button" class="button button-toggle active">
|
||||
<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 class="label-domain">
|
||||
<i class="icon fas 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="extension-context" class="panel">
|
||||
<div id="injection-counter" class="counter">0</div>
|
||||
|
||||
<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 class="subheading" data-i18n-content="amountInjectedTitle"></div>
|
||||
<div class="description" data-i18n-content="amountInjectedDescription"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</section>
|
||||
<footer>
|
||||
|
||||
<footer>
|
||||
<span id="testing-utility-link" class="link-text">decentraleyes.org/test</span>
|
||||
|
||||
<span id="testing-utility-link" class="link-text">decentraleyes.org/test</span>
|
||||
<div id="options-button" class="button" data-i18n-title="optionsTitle">
|
||||
<i class="fai fa-cog" data-fa-transform="grow-2 down-.5"></i>
|
||||
</div>
|
||||
|
||||
<div id="options-button" class="button">
|
||||
<i class="fas fa-cog" data-fa-transform="grow-2"></i>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -20,323 +20,314 @@
|
||||
var popup = {};
|
||||
|
||||
/**
|
||||
* Constants
|
||||
* Private Methods
|
||||
*/
|
||||
|
||||
const WEB_DOMAIN_EXPRESSION = /:\/\/(.[^\/]+)(.*)/;
|
||||
const WEB_PREFIX_VALUE = 'www.';
|
||||
const WEB_PREFIX_LENGTH = WEB_PREFIX_VALUE.length;
|
||||
popup._renderContents = function () {
|
||||
|
||||
helpers.insertI18nContentIntoDocument(document);
|
||||
helpers.insertI18nTitlesIntoDocument(document);
|
||||
|
||||
popup._renderNonContextualContents();
|
||||
|
||||
if (popup._backgroundPage !== null) {
|
||||
|
||||
popup._determineTargetTab()
|
||||
.then(popup._renderContextualContents);
|
||||
}
|
||||
};
|
||||
|
||||
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 = popup._amountInjected;
|
||||
|
||||
testingUtilityLinkElement.addEventListener('mouseup', popup._onTestingUtilityLinkClicked);
|
||||
optionsButtonElement.addEventListener('mouseup', popup._onOptionsButtonClicked);
|
||||
};
|
||||
|
||||
popup._renderContextualContents = function () {
|
||||
|
||||
let injections, groupedInjections;
|
||||
|
||||
popup._domain = helpers.extractDomainFromUrl(popup._targetTab.url);
|
||||
|
||||
popup._requestAnalyzer = popup._backgroundPage.requestAnalyzer;
|
||||
popup._stateManager = popup._backgroundPage.stateManager;
|
||||
|
||||
if (popup._domain !== null) {
|
||||
|
||||
popup._domain = helpers.normalizeDomain(popup._domain);
|
||||
popup._renderDomainWhitelistPanel();
|
||||
}
|
||||
|
||||
injections = popup._stateManager.tabs[popup._targetTab.id].injections;
|
||||
groupedInjections = popup._groupResourceInjections(injections);
|
||||
|
||||
if (Object.keys(groupedInjections).length > 0) {
|
||||
popup._renderInjectionPanel(groupedInjections);
|
||||
}
|
||||
};
|
||||
|
||||
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._requestAnalyzer.whitelistedDomains[popup._domain]) {
|
||||
|
||||
let enableProtectionTitle = chrome.i18n.getMessage('enableProtectionTitle');
|
||||
|
||||
protectionToggleElement.setAttribute('class', 'button button-toggle');
|
||||
protectionToggleElement.addEventListener('click', popup._enableProtection);
|
||||
protectionToggleElement.setAttribute('title', enableProtectionTitle);
|
||||
|
||||
} else {
|
||||
|
||||
let disableProtectionTitle = chrome.i18n.getMessage('disableProtectionTitle');
|
||||
|
||||
protectionToggleElement.setAttribute('class', 'button button-toggle active');
|
||||
protectionToggleElement.addEventListener('click', popup._disableProtection);
|
||||
protectionToggleElement.setAttribute('title', disableProtectionTitle);
|
||||
}
|
||||
|
||||
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 () {
|
||||
|
||||
popup._stateManager.deleteDomainFromWhitelist(popup._domain)
|
||||
.then(popup._onProtectionToggled);
|
||||
};
|
||||
|
||||
popup._disableProtection = function () {
|
||||
|
||||
popup._stateManager.addDomainToWhitelist(popup._domain)
|
||||
.then(popup._onProtectionToggled);
|
||||
};
|
||||
|
||||
popup._determineBackgroundPage = function () {
|
||||
|
||||
return new Promise((resolve) => {
|
||||
|
||||
chrome.runtime.getBackgroundPage(function (backgroundPage) {
|
||||
|
||||
popup._backgroundPage = backgroundPage;
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
popup._determineTargetTab = function () {
|
||||
|
||||
return new Promise((resolve) => {
|
||||
|
||||
chrome.tabs.query({'active': true, 'currentWindow': true}, function (tabs) {
|
||||
|
||||
popup._targetTab = tabs[0];
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
popup._determineAmountInjected = function () {
|
||||
|
||||
return new Promise((resolve) => {
|
||||
|
||||
chrome.storage.local.get('amountInjected', function (items) {
|
||||
|
||||
popup._amountInjected = items.amountInjected || 0;
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
popup._groupResourceInjections = function (injections) {
|
||||
|
||||
let groupedInjections = {};
|
||||
|
||||
for (let index in injections) {
|
||||
|
||||
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) {
|
||||
|
||||
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 (tab) {
|
||||
chrome.tabs.remove(tab.id);
|
||||
});
|
||||
|
||||
} 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._determineBackgroundPage()
|
||||
.then(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.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', function () {
|
||||
|
||||
let optionsButtonElement, i18nElements;
|
||||
|
||||
optionsButtonElement = document.getElementById('options-button');
|
||||
|
||||
let optionsTitle = chrome.i18n.getMessage('optionsTitle');
|
||||
optionsButtonElement.setAttribute('title', optionsTitle);
|
||||
|
||||
i18nElements = document.querySelectorAll('[data-i18n-content]');
|
||||
|
||||
i18nElements.forEach(function (i18nElement) {
|
||||
|
||||
let i18nMessageName = i18nElement.getAttribute('data-i18n-content');
|
||||
i18nElement.innerText = chrome.i18n.getMessage(i18nMessageName);
|
||||
});
|
||||
|
||||
chrome.storage.local.get('amountInjected', function (items) {
|
||||
|
||||
let amountInjected = items.amountInjected || 0;
|
||||
document.getElementById('injection-counter').innerText = amountInjected;
|
||||
|
||||
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
|
||||
|
||||
browser.runtime.getBackgroundPage().then(function (backgroundPage) {
|
||||
|
||||
if (backgroundPage === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
popup.backgroundPage = backgroundPage;
|
||||
|
||||
if (backgroundPage.main.operatingSystem === 'android') {
|
||||
|
||||
browser.tabs.getCurrent().then(function (tab) {
|
||||
|
||||
browser.tabs.update(tab.id, {
|
||||
'active': true
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
let injections, injectionOverview, domain;
|
||||
|
||||
injections = backgroundPage.stateManager.tabs[tabs[0].id].injections;
|
||||
injectionOverview = {};
|
||||
|
||||
try {
|
||||
domain = tabs[0].url.match(WEB_DOMAIN_EXPRESSION)[1];
|
||||
} catch (exception) {
|
||||
domain = null;
|
||||
}
|
||||
|
||||
if (domain !== null) {
|
||||
|
||||
let websiteContextElement, protectionToggleElement, domainIndicatorElement;
|
||||
|
||||
websiteContextElement = document.getElementById('website-context');
|
||||
protectionToggleElement = document.getElementById('protection-toggle-button');
|
||||
domainIndicatorElement = document.getElementById('domain-indicator');
|
||||
|
||||
if (domain.startsWith(WEB_PREFIX_VALUE)) {
|
||||
domain = domain.slice(WEB_PREFIX_LENGTH);
|
||||
}
|
||||
|
||||
domainIndicatorElement.innerText = domain;
|
||||
|
||||
if (!backgroundPage.requestAnalyzer.whitelistedDomains[domain]) {
|
||||
|
||||
protectionToggleElement.setAttribute('class', 'button button-toggle active');
|
||||
|
||||
let disableProtectionTitle = chrome.i18n.getMessage('disableProtectionTitle');
|
||||
protectionToggleElement.setAttribute('title', disableProtectionTitle);
|
||||
|
||||
protectionToggleElement.addEventListener('click', function () {
|
||||
|
||||
backgroundPage.stateManager.addDomainToWhitelist(domain).then(function () {
|
||||
|
||||
chrome.tabs.reload(tabs[0].id);
|
||||
|
||||
if (backgroundPage.main.operatingSystem === 'android') {
|
||||
|
||||
return browser.tabs.getCurrent().then(function (tab) {
|
||||
browser.tabs.remove(tab.id);
|
||||
});
|
||||
}
|
||||
|
||||
return window.close();
|
||||
});
|
||||
});
|
||||
|
||||
} else {
|
||||
|
||||
protectionToggleElement.setAttribute('class', 'button button-toggle');
|
||||
|
||||
let enableProtectionTitle = chrome.i18n.getMessage('enableProtectionTitle');
|
||||
protectionToggleElement.setAttribute('title', enableProtectionTitle);
|
||||
|
||||
protectionToggleElement.addEventListener('click', function () {
|
||||
|
||||
backgroundPage.stateManager.deleteDomainFromWhitelist(domain).then(function () {
|
||||
|
||||
chrome.tabs.reload(tabs[0].id);
|
||||
|
||||
if (backgroundPage.main.operatingSystem === 'android') {
|
||||
|
||||
return browser.tabs.getCurrent().then(function (tab) {
|
||||
browser.tabs.remove(tab.id);
|
||||
});
|
||||
}
|
||||
|
||||
return window.close();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
websiteContextElement.setAttribute('class', 'panel');
|
||||
}
|
||||
|
||||
for (let injection in injections) {
|
||||
|
||||
injection = injections[injection];
|
||||
|
||||
let injectionSource = injection.source;
|
||||
injectionOverview[injectionSource] = injectionOverview[injectionSource] || [];
|
||||
|
||||
injectionOverview[injectionSource].push({
|
||||
'path': injection.path,
|
||||
'version': injection.version,
|
||||
'source': injection.source
|
||||
});
|
||||
}
|
||||
|
||||
let listElement = document.createElement('ul');
|
||||
listElement.setAttribute('class', 'list');
|
||||
|
||||
for (let injectionSource in injectionOverview) {
|
||||
|
||||
let cdn, listItemElement, badgeElement, badgeTextNode, cdnName, cdnNameTextNode, subListElement;
|
||||
|
||||
cdn = injectionOverview[injectionSource];
|
||||
|
||||
listItemElement = document.createElement('li');
|
||||
listItemElement.setAttribute('class', 'list-item');
|
||||
|
||||
badgeElement = document.createElement('span');
|
||||
badgeElement.setAttribute('class', 'badge');
|
||||
|
||||
badgeTextNode = document.createTextNode(cdn.length);
|
||||
badgeElement.appendChild(badgeTextNode);
|
||||
|
||||
switch (injectionSource) {
|
||||
|
||||
case 'ajax.googleapis.com':
|
||||
cdnName = 'Google Hosted Libraries';
|
||||
break;
|
||||
case 'ajax.aspnetcdn.com':
|
||||
cdnName = 'Microsoft Ajax CDN';
|
||||
break;
|
||||
case 'ajax.microsoft.com':
|
||||
cdnName = 'Microsoft Ajax CDN [Deprecated]';
|
||||
break;
|
||||
case 'cdnjs.cloudflare.com':
|
||||
cdnName = 'CDNJS (Cloudflare)';
|
||||
break;
|
||||
case 'code.jquery.com':
|
||||
cdnName = 'jQuery CDN (MaxCDN)';
|
||||
break;
|
||||
case 'cdn.jsdelivr.net':
|
||||
cdnName = 'jsDelivr (MaxCDN)';
|
||||
break;
|
||||
case 'yastatic.net':
|
||||
cdnName = 'Yandex CDN';
|
||||
break;
|
||||
case 'yandex.st':
|
||||
cdnName = 'Yandex CDN [Deprecated]';
|
||||
break;
|
||||
case 'libs.baidu.com':
|
||||
cdnName = 'Baidu CDN';
|
||||
break;
|
||||
case 'lib.sinaapp.com':
|
||||
cdnName = 'Sina Public Resources';
|
||||
break;
|
||||
case 'upcdn.b0.upaiyun.com':
|
||||
cdnName = 'UpYun Library';
|
||||
break;
|
||||
}
|
||||
|
||||
cdnNameTextNode = document.createTextNode(cdnName);
|
||||
|
||||
listItemElement.appendChild(badgeElement);
|
||||
listItemElement.appendChild(cdnNameTextNode);
|
||||
|
||||
listElement.appendChild(listItemElement);
|
||||
|
||||
subListElement = document.createElement('ul');
|
||||
subListElement.setAttribute('class', 'sublist');
|
||||
|
||||
listElement.appendChild(subListElement);
|
||||
|
||||
for (let injection of cdn) {
|
||||
|
||||
let subListItemElement, resourcePathDetails, resourceFilename, resourceName,
|
||||
resourceNameTextNode, sideNoteElement, sideNoteTextNode;
|
||||
|
||||
subListItemElement = document.createElement('li');
|
||||
subListItemElement.setAttribute('class', 'sublist-item');
|
||||
|
||||
resourcePathDetails = injection.path.split('/');
|
||||
resourceFilename = resourcePathDetails[resourcePathDetails.length - 1];
|
||||
|
||||
switch (resourceFilename) {
|
||||
|
||||
case 'angular.min.js.dec':
|
||||
resourceName = 'AngularJS';
|
||||
break;
|
||||
case 'backbone-min.js.dec':
|
||||
resourceName = 'Backbone.js';
|
||||
break;
|
||||
case 'dojo.js.dec':
|
||||
resourceName = 'Dojo';
|
||||
break;
|
||||
case 'ember.min.js.dec':
|
||||
resourceName = 'Ember.js';
|
||||
break;
|
||||
case 'ext-core.js.dec':
|
||||
resourceName = 'Ext Core';
|
||||
break;
|
||||
case 'jquery.min.js.dec':
|
||||
resourceName = 'jQuery';
|
||||
break;
|
||||
case 'jquery-ui.min.js.dec':
|
||||
resourceName = 'jQuery UI';
|
||||
break;
|
||||
case 'modernizr.min.js.dec':
|
||||
resourceName = 'Modernizr';
|
||||
break;
|
||||
case 'mootools-yui-compressed.js.dec':
|
||||
resourceName = 'MooTools';
|
||||
break;
|
||||
case 'prototype.js.dec':
|
||||
resourceName = 'Prototype';
|
||||
break;
|
||||
case 'scriptaculous.js.dec':
|
||||
resourceName = 'Scriptaculous';
|
||||
break;
|
||||
case 'swfobject.js.dec':
|
||||
resourceName = 'SWFObject';
|
||||
break;
|
||||
case 'underscore-min.js.dec':
|
||||
resourceName = 'Underscore.js';
|
||||
break;
|
||||
case 'webfont.js.dec':
|
||||
resourceName = 'Web Font Loader';
|
||||
break;
|
||||
}
|
||||
|
||||
resourceNameTextNode = document.createTextNode('- ' + resourceName);
|
||||
subListItemElement.appendChild(resourceNameTextNode);
|
||||
|
||||
sideNoteElement = document.createElement('span');
|
||||
sideNoteElement.setAttribute('class', 'side-note');
|
||||
|
||||
sideNoteTextNode = document.createTextNode(' v' + injection.version);
|
||||
|
||||
sideNoteElement.appendChild(sideNoteTextNode);
|
||||
subListItemElement.appendChild(sideNoteElement);
|
||||
|
||||
subListElement.appendChild(subListItemElement);
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(injectionOverview).length > 0) {
|
||||
|
||||
let websiteContextElement = document.getElementById('website-context');
|
||||
websiteContextElement.append(listElement);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
optionsButtonElement.addEventListener('mouseup', function () {
|
||||
|
||||
if (popup.backgroundPage.main.operatingSystem === 'android') {
|
||||
|
||||
return chrome.tabs.create({
|
||||
'url': chrome.extension.getURL('pages/options/options.html')
|
||||
});
|
||||
}
|
||||
|
||||
chrome.runtime.openOptionsPage();
|
||||
return window.close();
|
||||
});
|
||||
|
||||
document.getElementById('testing-utility-link').addEventListener('mouseup', function (event) {
|
||||
|
||||
if (event.button === 0 || event.button === 1) {
|
||||
|
||||
browser.tabs.create({
|
||||
'url': 'https://decentraleyes.org/test',
|
||||
'active': (event.button === 0)
|
||||
});
|
||||
}
|
||||
|
||||
if (event.button === 0) {
|
||||
window.close();
|
||||
}
|
||||
});
|
||||
});
|
||||
document.addEventListener('DOMContentLoaded', popup._onDocumentLoaded);
|
||||
|
||||
BIN
pages/welcome/favicon.ico
Normal file
|
After Width: | Height: | Size: 22 KiB |
40
pages/welcome/logo.svg
Normal file
@@ -0,0 +1,40 @@
|
||||
<?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="139.98mm" width="213.68mm" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 757.14843 495.97448" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs>
|
||||
<linearGradient id="a" y2="-1041.7" gradientUnits="userSpaceOnUse" x2="-2153.9" gradientTransform="matrix(.73610 0 0 1.1184 971.67 1120)" y1="-1983.7" x1="-2153.9">
|
||||
<stop stop-color="#7c9437" offset="0"/>
|
||||
<stop stop-color="#eff4e2" offset="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g transform="translate(1012.9 489.91)">
|
||||
<path d="m-633.52-289.08c-4.2555-0.0136-8.5155 0-12.777 0.0312-127.91 0.89658-252.53 19.355-365.63 52.92a378.57 378.57 0 0 0 -0.9259 18.506 378.57 378.57 0 0 0 0.9472 26.779 378.57 378.57 0 0 0 4.5606 37.566 378.57 378.57 0 0 0 8.2871 36.924 378.57 378.57 0 0 0 11.934 35.91 378.57 378.57 0 0 0 15.457 34.541 378.57 378.57 0 0 0 18.83 32.824 378.57 378.57 0 0 0 13.689 19.143h609.77a378.57 378.57 0 0 0 7.5468 -9.9279 378.57 378.57 0 0 0 19.779 -32.262 378.57 378.57 0 0 0 16.459 -34.074 378.57 378.57 0 0 0 12.977 -35.547 378.57 378.57 0 0 0 9.3634 -36.666 378.57 378.57 0 0 0 5.6543 -37.416 378.57 378.57 0 0 0 1.8905 -37.795 378.57 378.57 0 0 0 -0.60143 -17.018c-116.53-35.116-245.29-54.153-377.21-54.44z" fill-rule="evenodd" fill="url(#a)"/>
|
||||
<g transform="translate(-3065.9 1490.7)">
|
||||
<path d="m-8140.9-2348.7a274.29 274.29 0 0 0 -266.58 211.04c7.1369-1.3966 14.205-2.9209 21.4-4.2051 15.036-2.6835 30.198-5.1201 45.469-7.3067 15.271-2.1865 30.653-4.1238 46.129-5.8046 15.476-1.6809 31.048-3.1051 46.699-4.2715 15.651-1.1665 31.383-2.0735 47.18-2.7168 15.797-0.6434 31.658-1.0233 47.57-1.1348 16.954-0.1188 33.863 0.067 50.707 0.5527 16.844 0.4858 33.623 1.2711 50.32 2.3516s33.313 2.4557 49.826 4.1211 32.926 3.6208 49.219 5.8613c16.293 2.2406 32.467 4.7664 48.504 7.5723 10.201 1.7849 20.245 3.8763 30.33 5.8867a274.29 274.29 0 0 0 -266.77 -211.94z" transform="translate(10572 368.09)" fill="#69ab90"/>
|
||||
<path d="m-8140.5-2258.2a184.16 184.16 0 0 0 -165.9 104.74c3.9985-0.4699 7.9455-1.0683 11.957-1.5039 15.476-1.6809 31.048-3.1051 46.699-4.2715 15.651-1.1665 31.383-2.0735 47.18-2.7168 15.797-0.6434 31.658-1.0233 47.57-1.1348 16.954-0.1188 33.863 0.067 50.707 0.5527 16.844 0.4858 33.623 1.2711 50.32 2.3516s33.313 2.4557 49.826 4.1211c9.3701 0.945 18.626 2.1953 27.928 3.3262a184.16 184.16 0 0 0 -166.29 -105.46z" transform="translate(10572 368.09)" fill="#4a856d"/>
|
||||
<path d="m-8140.9-2237c-57.78 0.068-111.19 30.788-140.3 80.699 42.151-4.1659 84.969-6.4492 128.16-6.752 51.484-0.3609 102.54 2.0951 152.66 7.2168-29.034-50.162-82.569-81.082-140.53-81.164z" transform="translate(10572 368.09)" fill="#d9ccb5"/>
|
||||
<path d="m-8139.6-2326.4c-68.213-0.4078-132.43 25.777-181.27 74.619-31.322 31.322-53.165 68.409-64.869 109.85 21.087-3.7573 42.424-7.0203 63.961-9.7968 0.1062-0.2386 0.2051-0.474 0.3125-0.7129 10.523-23.415 22.717-41.107 40.772-59.162 29.234-29.234 64.842-47.747 106.23-55.229 14.678-2.6535 47.206-2.9306 64.086-0.5429 14.755 2.0871 19.279 1.4609 27.205-3.7891 11.038-7.311 15.491-22.356 10.088-34.086-5.7671-12.52-13.568-16.585-37.066-19.334-9.8746-1.1551-19.702-1.7562-29.447-1.8145zm209.14 141.75c-15.595-0.072-28.373 12.42-28.373 27.73 0 2.0809 0.2081 4.0855 0.5879 6.0059 17.56 2.3451 34.986 5.0152 52.252 8.0156 0.3927-0.7733 0.7686-1.5899 1.1309-2.457 7.6967-18.421-5.8421-39.204-25.598-39.295z" fill-rule="evenodd" transform="translate(10572 368.09)" fill="#e1eee9"/>
|
||||
<path d="m2566.6-1883.9c-3.0097 3.1329-6.9452 2.2975-14.708-2.4482-4.0467-2.2446-5.5995-3.6343-9.6847-5.7832l-6.0229-3.1961-2.0305 3.9932-2.0327 3.9906-3.4678-4.969c-8.9934-12.89-18.056-26.474-17.742-26.592 4.2273-0.3503 19.763-1.3532 37.471-2.7026 0 0-1.0853 2.1672-2.2943 4.5888l-2.0055 4.2775 6.5539 3.5215c3.6047 1.9372 9.4209 5.7407 12.927 8.4524 1.0018 0.7747 1.7262 1.4006 2.4531 2.0301 4.5629 4.4076 4.9708 7.6508 2.557 12.032-0.6314 1.1465-1.2782 2.081-1.9728 2.8041z" fill="#fff"/>
|
||||
<path d="m-432.68-16.955c-0.92625 0.11186-1.7636 0.61843-2.5957 1.4668-2.5338 2.583-1.7893 5.0501 3.1855 10.545 2.4906 2.751 6.0466 6.7358 7.9004 8.8555 3.7538 4.2926 5.5909 4.8261 8.1582 2.3672 2.8579-2.737 2.1581-5.0574-3.6914-12.246-6.6046-8.1165-10.178-11.324-12.957-10.988z" transform="matrix(1.9024 0 0 1.9024 3412 -1843.7)" fill="#fff"/>
|
||||
</g>
|
||||
<path style="color-rendering:auto;text-decoration-color:#000000;color:#000000;isolation:auto;mix-blend-mode:normal;shape-rendering:auto;solid-color:#000000;block-progression:tb;text-decoration-line:none;text-decoration-style:solid;image-rendering:auto;white-space:normal;text-indent:0;text-transform:none" d="m-1011-254.39a378.57 378.57 0 0 0 -0.9141 18.264c113.1-33.564 237.73-52.023 365.63-52.92 136.38-0.95605 269.7 18.16 389.99 54.408a378.57 378.57 0 0 0 -0.34565 -9.7598 378.57 378.57 0 0 0 -1.0644 -8.7656c-120.38-35.545-253.06-54.097-388.7-53.147-127.3 0.89224-251.38 18.941-364.6 51.92z" fill="#4a856d"/>
|
||||
<g fill="#69ab90">
|
||||
<path d="m-596.16-130.58h-14.32v72.537h14.32v-30.165h14.789v30.165h14.32v-72.537h-14.32v29.93h-14.789v-29.93z"/>
|
||||
<path d="m-556.38-130.58v72.537h39.203v-12.442h-24.883v-17.723h19.719v-12.442h-19.719v-17.489h24.883v-12.442h-39.203z"/>
|
||||
<path d="m-472.89-58.044v-12.442h-21.714v-60.095h-14.32v72.537h36.034z"/>
|
||||
<path d="m-430.48-58.044v-12.442h-21.714v-60.095h-14.32v72.537h36.034z"/>
|
||||
<path d="m-403.8-69.781c-2.2301 0-3.9907-0.93899-4.9297-2.3475-1.2911-1.878-1.6432-4.8123-1.6432-7.2772v-29.696c0-2.5822 0.23475-5.2818 1.5259-7.2772 0.93899-1.4085 2.817-2.4648 5.0471-2.4648h1.4085c2.3475 0 4.2254 0.93899 5.1644 2.3475 1.2911 1.9954 1.4085 4.8123 1.4085 7.3946v29.696c0 2.4648-0.23475 5.3992-1.5259 7.2772-0.93899 1.4085-2.6996 2.3475-5.0471 2.3475h-1.4085zm-20.893-11.385c0 5.7513 0.58687 12.089 4.1081 16.784 3.4038 4.5776 9.1552 7.0424 17.489 7.0424 8.3335 0 14.085-2.6996 17.489-7.2772 3.5212-4.695 4.2255-11.033 4.2255-16.667v-26.174c0-5.7513-0.70425-12.089-4.2255-16.784-3.4038-4.5776-9.1552-6.925-17.489-6.925-8.3335 0-13.967 2.6996-17.371 7.2772-3.5212 4.695-4.2254 10.916-4.2254 16.667v26.057z"/>
|
||||
</g>
|
||||
<g fill="#69ab90">
|
||||
<path d="m-613.41-201.17c0 5.7513 1.1737 9.8594 3.8733 13.498 4.1081 5.2818 11.268 8.3335 16.902 11.62 1.7606 0.93899 3.1691 1.878 4.2254 3.0517 0.93899 1.2911 1.6432 2.6996 1.6432 4.5776 0.11738 2.5822-0.58686 4.8123-1.9954 6.2208-1.4085 1.5259-3.5212 2.3475-6.3382 2.3475h-1.4085c-4.5776 0-8.6856-1.0564-13.967-2.6996l-2.1127 11.855c4.4602 1.878 11.503 3.5212 17.606 3.5212 7.5119-0.11737 14.789-2.1127 18.545-7.3945 3.1691-4.3428 3.9907-9.5073 3.9907-14.554 0-5.7513-1.4085-9.6246-3.8733-12.559-1.1737-1.4085-2.5822-2.5822-4.3428-3.6386-4.695-3.0517-10.564-4.9297-14.906-7.9814-2.3475-1.7606-3.8733-3.8733-3.8733-6.925 0-2.6996 0.58687-4.5776 1.7606-5.8687 1.2911-1.4085 3.1691-1.9954 5.8687-1.9954 4.695 0 8.6857 0.93899 13.146 2.1127l2.1127-11.62c-5.1644-1.9954-10.798-3.0517-16.432-2.9343-6.925 0.11737-12.442 2.2301-15.963 6.3382-2.6996 3.0517-4.4602 7.7467-4.4602 13.028z"/>
|
||||
<path d="m-536-160.79 2.3475 13.146h14.202v-3.0517l-15.141-69.485h-18.076l-15.024 68.898v3.6386h13.85l2.3475-13.146h15.493zm-7.7467-43.663 5.5166 31.221h-11.033l5.5166-31.221z"/>
|
||||
<path d="m-474.6-216.55v-3.6386h-12.676l-9.8594 31.574-9.9768-31.574h-13.381v3.756l16.198 44.367v24.414h14.437v-25.118l15.259-43.78z"/>
|
||||
<path d="m-471.74-201.17c0 5.7513 1.1737 9.8594 3.8733 13.498 4.1081 5.2818 11.268 8.3335 16.902 11.62 1.7606 0.93899 3.1691 1.878 4.2255 3.0517 0.93899 1.2911 1.6432 2.6996 1.6432 4.5776 0.11737 2.5822-0.58687 4.8123-1.9954 6.2208-1.4085 1.5259-3.5212 2.3475-6.3382 2.3475h-1.4085c-4.5776 0-8.6856-1.0564-13.967-2.6996l-2.1127 11.855c4.4602 1.878 11.503 3.5212 17.606 3.5212 7.5119-0.11737 14.789-2.1127 18.545-7.3945 3.1691-4.3428 3.9907-9.5073 3.9907-14.554 0-5.7513-1.4085-9.6246-3.8733-12.559-1.1737-1.4085-2.5822-2.5822-4.3428-3.6386-4.695-3.0517-10.564-4.9297-14.906-7.9814-2.3475-1.7606-3.8733-3.8733-3.8733-6.925 0-2.6996 0.58687-4.5776 1.7606-5.8687 1.2911-1.4085 3.1691-1.9954 5.8687-1.9954 4.695 0 8.6857 0.93899 13.146 2.1127l2.1127-11.62c-5.1644-1.9954-10.798-3.0517-16.432-2.9343-6.925 0.11737-12.442 2.2301-15.963 6.3382-2.6996 3.0517-4.4602 7.7467-4.4602 13.028z"/>
|
||||
</g>
|
||||
<path d="m-642.99-219.72h8.3121v161.84h-8.3121z" fill="#4a856d"/>
|
||||
<g fill="#4a856d">
|
||||
<path d="m-887.97-91.967v12.157h70.466v-23.864h-34.895l21.162-34.895c8.5549-13.958 16.209-27.466 16.209-44.351 0-13.283-4.2775-22.963-11.932-28.817-6.5288-5.178-15.759-7.6544-27.241-7.8795-10.356-0.22513-18.01 1.801-27.916 5.8534l4.0523 22.063c8.5549-2.2513 12.382-4.0523 21.387-4.0523 5.178 0 10.131 1.801 12.832 6.7539 1.5759 2.7016 2.2513 6.0785 2.0262 9.9057-0.22513 10.581-5.8534 22.288-11.482 31.068l-34.67 56.057z"/>
|
||||
<path d="m-770.65-107.05h-26.34v27.241h26.34v-27.241z"/>
|
||||
<path d="m-750.43-124.39c0 11.031 1.3508 23.188 8.1047 32.194 6.5288 8.7801 16.434 13.508 32.419 13.508 15.984 0 25.89-5.178 32.419-13.958 6.7539-9.0052 8.1047-21.162 8.1047-31.968v-49.754c0-11.031-1.3508-23.188-8.1047-32.194-6.5288-8.7801-16.434-13.283-32.419-13.283-15.984 0-25.89 4.9529-32.419 13.733-6.7539 9.0052-8.1047 21.162-8.1047 32.194v49.529zm39.848 21.838c-4.2775 0-7.4293-1.801-9.2303-4.5026-2.4764-3.6021-3.1518-9.2303-3.1518-13.958v-56.508c0-4.9529 0.67539-10.356 3.1518-14.183 1.801-2.7016 4.9528-4.5026 9.2303-4.5026h1.3508c4.2775 0 7.4293 1.801 9.2303 4.5026 2.4764 3.8272 3.1518 9.2303 3.1518 14.183v56.508c0 4.7277-0.67539 10.356-3.1518 13.958-1.801 2.7016-4.9529 4.5026-9.2303 4.5026h-1.3508z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.4 KiB |
180
pages/welcome/welcome.css
Normal file
@@ -0,0 +1,180 @@
|
||||
/**
|
||||
* Sections
|
||||
*/
|
||||
|
||||
body {
|
||||
background-color: #eff4e2;
|
||||
color: #777;
|
||||
font-size: 14px;
|
||||
min-width: 256px;
|
||||
padding: 25px 10px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-family: 'Noto Sans', Arial, sans-serif;
|
||||
font-size: 24px;
|
||||
font-weight: 400;
|
||||
margin: 15px auto 20px;
|
||||
max-width: 750px;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #777;
|
||||
}
|
||||
|
||||
.btn-panel {
|
||||
font-family: 'Noto Sans', Arial, sans-serif;
|
||||
margin: 35px auto;
|
||||
max-width: 750px;
|
||||
}
|
||||
|
||||
.topic-badge {
|
||||
background-color: #fcfcfc;
|
||||
border-radius: 100px;
|
||||
border: 4px solid #e6e6e6;
|
||||
color: #5a8f79;
|
||||
display: inline-block;
|
||||
font-size: 48px;
|
||||
line-height: 0;
|
||||
margin: 0 20px 20px;
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
.topic-badge:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.topic-badge:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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');
|
||||
}
|
||||
|
||||
/**
|
||||
* Buttons
|
||||
*/
|
||||
|
||||
.btn {
|
||||
color: #fff;
|
||||
font-weight: 600;
|
||||
margin-right: 15px;
|
||||
padding: 11px 17px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.btn-text {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.btn-github {
|
||||
background-color: #24292e;
|
||||
}
|
||||
|
||||
.btn-github:hover {
|
||||
background-color: #42474c;
|
||||
}
|
||||
|
||||
.btn-website {
|
||||
background-color: #169cff;
|
||||
}
|
||||
|
||||
.btn-website:hover {
|
||||
background-color: #008ff5;
|
||||
}
|
||||
|
||||
.btn-bitcoin {
|
||||
background-color: #f7931a;
|
||||
}
|
||||
|
||||
.btn-bitcoin:hover {
|
||||
background-color: #f58700;
|
||||
}
|
||||
|
||||
.btn-monero {
|
||||
background-color: #f26822;
|
||||
}
|
||||
|
||||
.btn-monero:hover {
|
||||
background-color: #ed5407;
|
||||
}
|
||||
|
||||
/**
|
||||
* Miscellaneous
|
||||
*/
|
||||
|
||||
.notice {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
font-family: 'Noto Sans', Arial, sans-serif;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
max-width: 750px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.logo {
|
||||
display: block;
|
||||
height: 145px;
|
||||
margin: 15px auto 50px;
|
||||
}
|
||||
|
||||
.subtle-hint {
|
||||
background-color: #fcfcfc;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #e6e6e6;
|
||||
color: #777;
|
||||
font-size: 14px;
|
||||
margin-bottom: 20px;
|
||||
padding: 8px 11px;
|
||||
}
|
||||
|
||||
.topic-label {
|
||||
color: #5a8f79;
|
||||
font-style: normal;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.color-purple {
|
||||
color: #9e608e;
|
||||
}
|
||||
|
||||
/**
|
||||
* Media Queries
|
||||
*/
|
||||
|
||||
@media screen and (max-width: 550px) {
|
||||
|
||||
.btn {
|
||||
padding: 13px 18px 12px
|
||||
}
|
||||
|
||||
.btn-text {
|
||||
display: none
|
||||
}
|
||||
}
|
||||
80
pages/welcome/welcome.html
Normal file
@@ -0,0 +1,80 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
|
||||
<head>
|
||||
|
||||
<title>2.0 Says Hello - Decentraleyes</title>
|
||||
|
||||
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
|
||||
<meta charset="utf-8">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="welcome.css">
|
||||
|
||||
<script defer src="../../modules/fontawesome/icon-bundle.min.js"></script>
|
||||
<script defer src="../../modules/fontawesome/fontawesome.min.js"></script>
|
||||
|
||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
|
||||
<link rel="icon" href="favicon.ico" type="image/x-icon">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<img src="logo.svg" alt="Decentraleyes" class="logo"/>
|
||||
|
||||
<div class="container">
|
||||
|
||||
<h1>What's new in version 2.0?</h1>
|
||||
|
||||
<div class="notice">
|
||||
|
||||
<span class="subtle-hint"><span class="topic-label">A Completely New Foundation</span><br>Decentraleyes has been fully rebuilt, on top of cutting-edge web technologies. As a result, it's even faster, more capable, and ready for upcoming versions of Firefox.</span>
|
||||
|
||||
<div class="topic-badge"><i class="fai fa-cube"></i></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="notice">
|
||||
|
||||
<div class="topic-badge color-purple"><i class="fai fa-window-restore fa-flip-horizontal"></i></div>
|
||||
|
||||
<span class="subtle-hint"><span class="topic-label color-purple">A Clear User Interface</span><br>The extension is finally less shy about what it does to protect you. It shows you what exactly it injects into given pages, and puts all available features right at your fingertips.</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="notice">
|
||||
|
||||
<span class="subtle-hint"><span class="topic-label">Improved Configurability</span><br>The options screen has been updated to give you more control over the extension. Settings that impact privacy, or website functionality, are now explicitly labeled as advanced.</span>
|
||||
|
||||
<div class="topic-badge"><i class="fai fa-cog"></i></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="notice">
|
||||
|
||||
<div class="topic-badge color-purple"><i class="fai fa-power-off"></i></div>
|
||||
|
||||
<span class="subtle-hint"><span class="topic-label color-purple">Simplified Whitelist Management</span><br>Excluding the domain you're visiting from inspections is now easier than ever. Just open up the popup panel, and use the dedicated button, to disable protection for said site.</span>
|
||||
|
||||
</div>
|
||||
|
||||
<h1>Learn more, or contribute</h1>
|
||||
|
||||
<div class="btn-panel">
|
||||
|
||||
<a class="btn btn-website" href="https://decentraleyes.org" target="_blank"><i class="btn-icon fai fa-globe" data-fa-transform="grow-2"></i><span class="btn-text">Website</span></a>
|
||||
|
||||
<a class="btn btn-github" href="https://github.com/Synzvato/decentraleyes" target="_blank"><i class="btn-icon fai fa-github-alt" data-fa-transform="grow-2"></i><span class="btn-text">GitHub</span></a>
|
||||
|
||||
<a class="btn btn-bitcoin" href="https://decentraleyes.org/donate/bitcoin/" target="_blank"><i class="btn-icon fai fa-btc" data-fa-transform="grow-2"></i><span class="btn-text">Bitcoin</span></a>
|
||||
|
||||
<a class="btn btn-monero" href="https://decentraleyes.org/donate/monero/" target="_blank"><i class="btn-icon fai fa-monero" data-fa-transform="grow-2"></i><span class="btn-text">Monero</span></a>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||