mirror of
https://github.com/gorhill/uMatrix.git
synced 2024-06-17 09:44:59 +12:00
Merge branch 'master' into master
This commit is contained in:
commit
4c9c799dba
6
dist/firefox/updates.json
vendored
6
dist/firefox/updates.json
vendored
|
@ -3,10 +3,10 @@
|
|||
"uMatrix@raymondhill.net": {
|
||||
"updates": [
|
||||
{
|
||||
"version": "1.3.3b9",
|
||||
"version": "1.3.5b4",
|
||||
"applications": { "gecko": { "strict_min_version": "56" } },
|
||||
"update_info_url": "https://github.com/gorhill/uMatrix/releases/tag/1.3.3b9",
|
||||
"update_link": "https://github.com/gorhill/uMatrix/releases/download/1.3.3b9/uMatrix.webext.signed.xpi"
|
||||
"update_info_url": "https://github.com/gorhill/uMatrix/releases/tag/1.3.5b4",
|
||||
"update_link": "https://github.com/gorhill/uMatrix/releases/download/1.3.5b4/uMatrix.webext.signed.xpi"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
2
dist/version
vendored
2
dist/version
vendored
|
@ -1 +1 @@
|
|||
1.3.4
|
||||
1.3.5.4
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistics",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "None",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacity",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "لم يتم العثور على أي صفحة ويب",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – إحصائيات",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "موقع",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "عند إغلاق المصفوفة، إعادة تحميل علامات التبويب هذه:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "لا شيء",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "الصفحة الحالية",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "الكل",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "كلما قمت بإجراء تغييرات في المصفوفة التي يمكن أن تؤثر على العرض و\/ أو سلوك صفحة واحدة أو أكثر،<i>uMatrix<\/i>سوف تحميل صفحات المتضررة تلقائيا عند إغلاق المصفوفة.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "الشفافية",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "انهيار نائبا من عناصر المحظورة",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "استيراد...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "تحذير! غير إعدادات الضبط الخام على مسؤوليتك الخاصة.",
|
||||
"description": ""
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
"description": "a tab in dashboard"
|
||||
},
|
||||
"rawSettingsPageName": {
|
||||
"message": "More",
|
||||
"message": "Още",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"aboutPageName": {
|
||||
|
@ -60,7 +60,7 @@
|
|||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"mediaPrettyName": {
|
||||
"message": "media",
|
||||
"message": "медия",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"pluginPrettyName": {
|
||||
|
@ -148,9 +148,17 @@
|
|||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixNoTabFound": {
|
||||
"message": "No web page found",
|
||||
"message": "Няма намерена уеб страница",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Запис на правилата",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Статистика",
|
||||
"description": ""
|
||||
|
@ -300,45 +308,17 @@
|
|||
"description": "Label for default scope level selector in Settings pane"
|
||||
},
|
||||
"settingsDefaultScopeLevel0": {
|
||||
"message": "Global",
|
||||
"message": "Глобално",
|
||||
"description": "Scope will be global"
|
||||
},
|
||||
"settingsDefaultScopeLevel1": {
|
||||
"message": "Domain",
|
||||
"message": "Домейн",
|
||||
"description": "Scope will be base domain"
|
||||
},
|
||||
"settingsDefaultScopeLevel2": {
|
||||
"message": "Site",
|
||||
"message": "Сайт",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "Затваряйки матрицата, започва умно презареждане на тези табове:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "None",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Текуща версия",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Всичко",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Блокирани рамки: Цвят",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Непрозрачност",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -356,7 +336,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"settingsMatrixNoTooltips": {
|
||||
"message": "Disable tooltips",
|
||||
"message": "Изключване на подсказките",
|
||||
"description": ""
|
||||
},
|
||||
"privacyPageTitle": {
|
||||
|
@ -388,7 +368,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStorageHelp": {
|
||||
"message": "TODO",
|
||||
"message": "Задачи за правене",
|
||||
"description": ""
|
||||
},
|
||||
"privacyClearCachePrompt1": {
|
||||
|
@ -539,8 +519,16 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"message": "Внимание! Промяната на тези настройки на конфигурацията е на ваш собствен риск.",
|
||||
"description": ""
|
||||
},
|
||||
"aboutChangelog": {
|
||||
|
@ -736,7 +724,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"message": "Прилагане на промените",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
}
|
||||
}
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uম্যাট্রিক্স – পরিসংখ্যান",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "ম্যাট্রিক্স যখন বন্ধ হয়ে যায়, স্মার্ট এই ট্যাবগুলি পুনঃলোড করে:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "কিছুই না",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "বর্তমান",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "সব",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "যখনই আপনি ম্যাট্রিক্সে পরিবর্তন করবেন এটি এক বা একাধিক পাতা প্রদর্শনের আচরণ প্রভাবিত করতে পারে, আপনি ম্যাট্রিক্স বন্ধ করলে <i>uম্যাট্রিক্স<\/i> স্বয়ংক্রিয়ভাবে প্রভাবিত পৃষ্ঠাগুলি পুনরায় লোড করবে।",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "অবরুদ্ধ ফ্রেম: রং",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "অস্বচ্ছতা",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "অবরুদ্ধ উপাদান সংকোচনের স্থানধারক",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistics",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "None",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacity",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "Žádné stránky nebyly nalezeny",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "µMatrix – Statistiky",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Stránka",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "Obnovit tyto stránky, jakmile je zavřena matice:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Žádné",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Aktuální",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Všechny",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blokované rámce: Barva",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Neprůhlednost",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Skrýt zástupné objekty zablokovaných prvků",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistik",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "Genindlæs disse faner \"smart\", når matricen er lukket:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Ingen",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Nuværende",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Alle",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Hver gang du ændrer noget i matricen, der kan have indflydelse på en eller flere siders udseende eller adfærd, vil <i>uMatrix<\/i> automatisk genindlæse de påvirkede sider, når du lukker matricen.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blokerede frames: Farve",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Uigennemsigtighed",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Sammenfold pladsholder for blokerede elementer",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "Keine Webseite gefunden",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Regeln importieren",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Regeln speichern",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "µMatrix – Statistik",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Seite",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "Intelligentes Neuladen folgender Tabs beim Schließen der Matrix:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Keine",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "den Aktuellen",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Alle",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Immer wenn du Änderungen in der Matrix durchführst, die die Anzeige und\/oder das Verhalten einer oder mehrerer Seiten beeinflusst, wird <i>uMatrix<\/i> die betroffenen Seiten automatisch neu laden, sobald du die Matrix schließt.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blockierte Frames: Farbe",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Undurchsuchtigkeit",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Verstecke die Platzhalter für blockierte Elemente",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Importieren...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "Meine Hostnamen",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "Meine Rezepte",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warnung! Die Änderung dieser Konfigurations-Einstellungen erfolgt auf eigenes Risiko.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Στατιστικά",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "None",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Όλα",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacity",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -159,6 +159,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip" : {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip" : {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
|
||||
"statsPageTitle" : {
|
||||
"message": "uMatrix – Statistics",
|
||||
|
@ -322,34 +330,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt" : {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone" : {
|
||||
"message": "None",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent" : {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll" : {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo" : {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and/or behavior of one or more pages, <i>uMatrix</i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor" : {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity" : {
|
||||
"message": "Opacity",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked" : {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistics",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "None",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Nuna",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opakeco",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No se encontró la página",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Estadísticas",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Sitio",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "Al cerrar la matriz, hacer recarga inteligente de las siguientes pestañas:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Ninguna",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Actuales",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Todas",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Cada vez que se hagan cambios en la matriz que puedan afectar la visualización y\/o el comportamiento de una o más páginas, <i>uMatrix<\/i> recargará automáticamente las páginas afectadas una vez se cierre la matriz.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "<i>Frames<\/i> bloqueados: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacidad",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Colapsar marcadores de posición de los elementos bloqueados",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Importar...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "¡Atención! Modifique estos parámetros bajo su propio riesgo.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "Lehekülge ei leitud",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "µMatrix – statistika",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Pole",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Kõik",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacity",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – آمارها",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "وقتی ماتریس بسته شد، تبها را هوشمندانه دوباره بارگذاری کن:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "هیچکدام",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "کنونی",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "همه",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "وضوح",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Tilastot",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Ei mitään",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Nykyinen",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Kaikki",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Läpinäkyvyys",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "Walang nakitang pahina ng web",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Istatistika",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "Kapag isinara ang matrix, ang smart na i-reload ang mga tab na ito:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Wala",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Kasalukuyan",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Lahat",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Sa tuwing gumawa ka ng mga pagbabago sa matrix na maaaring makaapekto sa display at \/ o pag-uugali ng isa o higit pang mga pahina, awtomatikong i-reload ng <i>uMatrix<\/i> ang mga apektadong pahina kapag isinara mo ang matris.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Kulay",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacity",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "I-collapse ang mga placeholder ng mga naka-block na elemento",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "Aucune page Web trouvée",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Importer les règles",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Enregistrer les règles",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistiques",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "À la fermeture post-édition de la matrice, recharger si nécessaire :",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Aucune page",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "La page courante",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Toutes les pages",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Lorsque vous avez modifié des permissions susceptibles d'affecter l'apparence et\/ou le comportement d'une page Web, <i>uMatrix<\/i> rechargera automatiquement une ou plusieurs page(s) Web concernée(s) à la fermeture de la matrice. Si l'option Aucune page est sélectionnée, vous devrez actualiser la page Web vous-même pour appliquer les modifications.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Couleur pour les <i>frames<\/i> bloquées :",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacité :",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Cacher les espaces réservés aux éléments bloqués",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Importer...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "Mes hôtes",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "Mes recettes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Attention, modifiez ces paramètres bruts à vos risques et périls.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistics",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "None",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacity",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "לא נמצא עמוד",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – סטטיסטיקות",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "אתר",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "לאחר סגירת המטריצה, טען מחדש בצורה חכמה את הלשוניות הבאות:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "ללא",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "נוכחי",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "כולם",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "בכל פעם שאתה עושה שינויים במטריצה אשר יכולים להשפיע על ההצגה ו\/או התנהגות של דף או יותר, <i>uMatrix<\/i> יטען מחדש את העמודים המושפעים אוטומטית כשתסגור את המטריצה.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "מסגרות חסומות: צבע",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "אטימות",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "הסתר את המקום שנשאר מחסימה של אלמנטים",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "ייבא...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "אזהרה! שנה הגדרות אלה על אחריותך בלבד.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistics",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "कोई नहीं",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacity",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistics",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "None",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacity",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "Nem található weboldal",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statisztika",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Weboldal",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "A mátrix bezárásával a következő lapok intelligens újratöltése:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Nincs",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Jelenlegi",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Mind",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Amennyiben a mátrixban olyan változtatások történnek, amelyek egy, vagy több oldal megjelenítését vagy működését befolyásolják, a mátrix bezárása után a <i>uMatrix<\/i> automatikusan újra fogja tölteni az érintett oldalakat.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blokkolt keret: Szín",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Áttetszőség",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Blokkolt elemek helyőrzőinek elrejtése",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Importálás...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Vigyázat! Ezen nyers beállítások megváltoztatása csak saját felelősségre.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "Laman web tidak ditemukan",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistik",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Situs",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "Ketika matriks ditutup, muat ulang dengan cerdas tab berikut:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Nihil",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Saat ini",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Semua",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Kapanpun anda membuat perubahan pada matriks yang dapat mempengaruhi tampilan dan\/atau perilaku satu atau lebih halaman, <i>uMatrix<\/i> akan memuat ulang halaman yang terdampak secara otomatis ketika anda menutup matriks.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Frame diblokir: Warna",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Kepekatan",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Sembunyikan wadah elemen yang diblokir",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Impor...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Peringatan! Ubah konfigurasi mentah ini dengan risiko anda sendiri.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "Nessuna pagina trovata",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistiche",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Sito",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "Quando la matrice è chiusa, ricarica queste schede:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Nessuna",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Pagina corrente",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Tutte",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Ogni volta che effettui modifiche nella matrice che possono influenzare la visualizzazione e\/o il comportamento di una o più pagine, <i>uMatrix<\/i> ricaricherà automaticamente le pagine in questione quando chiudi la matrice.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Frames bloccati: Colore",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacità",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Nascondi lo spazio riservato agli elementi bloccati",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Importa...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Attenzione! Modifica queste impostazioni grezze a tuo rischio.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "ページが見つかりません",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "このルールを読み込む",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "このルールを保存する",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – 統計",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "サイト",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "Matrix を閉じたとき、これらのタブを再読み込みする:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "なし",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "現在",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "すべて",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "1 ページ以上に影響を与える変更をしてから Matrix を閉じたときは、<i>uMatrix<\/i> は影響をうけるページを再読み込みします",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "ブロック中のframe: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "不透明度",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "ブロックした要素のプレースホルダを表示しない",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "追加...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My ホスト",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My ルールレシピ",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "警告! これらの内部設定はご自身のリスクにより変更すること。",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistics",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "None",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacity",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "웹 페이지를 찾을 수 없습니다.",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – 통계",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "사이트",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "없음",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "전체",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacity",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "차단 된 요청과 관련된 페이지 콘텐츠를 숨깁니다.",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "경고! 다음 설정은 고급 사용자만 설정하세요.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistics",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "None",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacity",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistics",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Neviens",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Necaurredzamība",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -32,11 +32,11 @@
|
|||
"description": "a tab in dashboard"
|
||||
},
|
||||
"ubiquitousRulesPageName": {
|
||||
"message": "Assets",
|
||||
"message": "അസറ്റുകൾ",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"rawSettingsPageName": {
|
||||
"message": "More",
|
||||
"message": "കൂടുതൽ",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"aboutPageName": {
|
||||
|
@ -60,7 +60,7 @@
|
|||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"mediaPrettyName": {
|
||||
"message": "media",
|
||||
"message": "മീഡിയ",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"pluginPrettyName": {
|
||||
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "യുമാട്രിക്സ് – സ്റ്ററ്റിസ്റ്റിക്സ്",
|
||||
"description": ""
|
||||
|
@ -300,45 +308,17 @@
|
|||
"description": "Label for default scope level selector in Settings pane"
|
||||
},
|
||||
"settingsDefaultScopeLevel0": {
|
||||
"message": "Global",
|
||||
"message": "ആഗോള",
|
||||
"description": "Scope will be global"
|
||||
},
|
||||
"settingsDefaultScopeLevel1": {
|
||||
"message": "Domain",
|
||||
"message": "ഡൊമൈന്",
|
||||
"description": "Scope will be base domain"
|
||||
},
|
||||
"settingsDefaultScopeLevel2": {
|
||||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "ഒന്നും അല്ല",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "ഇപ്പോഴത്തെത്",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "എല്ലാം",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "ഒപ്പാസിറ്റി",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistics",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "None",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacity",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistics",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "None",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacity",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "Ingen nettside ble funnet",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistikk",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Nettsted",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "Ved lukking av matrisen, utfør smart gjeninnlasting av disse fanene:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Ingen",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Gjeldende",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Alle",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Når du gjør endringer i matrisen som kan ha innvirkning på visningen og\/eller oppførselen til én eller flere sider vil <i>uMatrix<\/i> gjeninnlaste sider som omfattes av dette når du lukker matrisen.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blokkerte rammer: Farge",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Dekkevne",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Fold sammen plassholderen tilhørende blokkerte elementer",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Importer...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Advarsel! Du endrer disse rå oppsettsinnstillingene på din egen risiko.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "Geen webpagina gevonden",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Regels importeren",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Regels opslaan",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistieken",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Website",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "Wanneer de matrix wordt gesloten, deze tabbladen slim vernieuwen:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Geen",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Huidige",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Alle",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Als u wijzigingen aanbrengt die de weergave en\/of het gedrag van een of meer pagina’s kunnen beïnvloeden, zal <i>uMatrix<\/i> de betreffende pagina’s automatisch vernieuwen zodra u de matrix sluit.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Geblokkeerde frames: kleur",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Ondoorzichtigheid",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Tijdelijke aanduiding van geblokkeerde elementen samenvouwen",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Importeren...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "Mijn hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "Mijn recepten",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Waarschuwing! U wijzigt deze configuratie-instellingen op eigen risico.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "Nie znaleziono strony",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statystyki",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "strona",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "Kiedy okno uMatrix zostanie zamknięte, inteligentnie odśwież następujące karty:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Żaden",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Aktualny",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Wszystkie",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Kiedy wprowadzasz w matrycy zmiany, które mogą wpływać na wyświetlanie lub zachowanie jednej lub kilku stron, <i>uMatrix<\/i> odświeży te strony automatycznie, kiedy okno zostanie zamknięte.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Zablokowane ramki: Kolor",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Przezroczystość",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Ukryj symbole zastępcze zablokowanych elementów",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Importuj...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Ostrzeżenie! Te ustawienia zmieniasz na własne ryzyko.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "Nenhuma página de web encontrada",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Importar regras",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Salvar regras",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Estatísticas",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "Quando a matrix é fechada, recarregue inteligentemente essas abas:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Vazio",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Atual",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Todos",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Sempre que você fizer mudanças na matriz que podem afetar a visualização e\/ou comportamento de uma ou mais páginas, <i>uMatrix<\/i> recarregará páginas afetadas automaticamente quando você fechar a matriz.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Frames bloqueados: Cor",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacidade",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Agrupar espaços reservados à elementos bloqueados",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Importar...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "Meus hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "Minhas receitas",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Cuidado! Mude essas configurações por sua própria conta e risco.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "Nenhuma página encontrada",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Estatísticas",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "Quando a matriz é fechada, recarrega estas abas inteligentemente:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Nenhuma",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Atual",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Todas",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Quando fizer modificações na matriz que podem afectar a exibição e\/ou comportamento de uma, ou mais páginas, o <i>uMatrix<\/i> irá recarregar as páginas afectadas automaticamente quando fechar a matriz.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Frames bloqueadas: Cor",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacidade",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Colapsar espaço reservado dos elementos bloqueados ",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistici",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Nimic",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Tot",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Cadre blocate: Culoare",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacitate",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "Страница не найдена",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Импортировать правила",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Сохранить правила",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Статистика",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Сайт",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "Когда матрица закроется, обновить эти вкладки:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "(Пусто)",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Текущая версия",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Все",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Когда вы вносите изменения в матрицу запросов, которые могут повлиять на отображение и\/или поведение одной или нескольких страниц, <i>uMatrix<\/i> перезагрузит эти страницы автоматически, когда вы закроете панель.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Заблокированные фреймы: Цвет",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Непрозрачность",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Скрывать оставшееся от заблокированных элементов место",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Импортировать...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "Мои hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "Мои рецепты",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Внимание! Изменяйте эти настройки конфигурации на свой страх и риск.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistics",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "None",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacity",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistics",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "None",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacity",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "Ниједна веб страница није пронађена",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Увоз правила",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Чување правила",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Статистика",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Сајт",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "Приликом затварања матрице, паметно обнови ове картице:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Ниједан",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Тренутни",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Све",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Када год начините измене у матрици које могу утицати на приказ и\/или понашање једне или више страница, <i>uMatrix<\/i> ће аутоматски поново учитати погођене странице када будете затворили матрицу.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Блокираних оквира: Боја",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Непрозирност",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Скупи држач блокираних елемената",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -356,7 +336,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"settingsMatrixNoTooltips": {
|
||||
"message": "Disable tooltips",
|
||||
"message": "Онемогући описе алатки",
|
||||
"description": ""
|
||||
},
|
||||
"privacyPageTitle": {
|
||||
|
@ -472,7 +452,7 @@
|
|||
"description": "default file name to use"
|
||||
},
|
||||
"assetsHostsSection": {
|
||||
"message": "Hosts files",
|
||||
"message": "Хост датотеке",
|
||||
"description": "header to identify the hosts files section"
|
||||
},
|
||||
"hostsFilesPrompt": {
|
||||
|
@ -536,7 +516,15 @@
|
|||
"description": ""
|
||||
},
|
||||
"assetsImportLabel": {
|
||||
"message": "Import...",
|
||||
"message": "Увези...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "Ingen webbplats hittades",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistik",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Webbplats",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "När matrisen är stängd, ladda om dessa flikar intelligent:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Inga",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Aktuell",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Alla",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "När du gör ändringar i matrisen som påverkar hur andra sidor ser ut eller beter sig kommer <i>uMatrix<\/i> ladda om de berörda sidorna automatiskt när du stänger matrisen.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blockerade frames: Färg",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Genomskinlighet",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Kollapsa blockerade objekt",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Importera...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistics",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "None",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacity",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistics",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "None",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacity",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistics",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "ఏదీకాదు",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "ప్రస్తుత",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "అన్ని",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "స్పష్టత",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "నిరోధించబడిన అంశాలయోక్క సంగ్రాహకాలను దాచుము",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Statistics",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "When the matrix is closed, smart reload these tabs:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "None",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Current",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Whenever you make changes in the matrix which can affect the display and\/or behavior of one or more pages, <i>uMatrix<\/i> will reload affected pages automatically when you close the matrix.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Opacity",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "Hiçbir web sayfası bulunamadı",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Kuralları içe aktar",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Kuralları kaydet",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – İstatistikleri",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "Matris kapatıldığında şu sekmeleri yeniden yükle:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Hiçbiri",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Şu anki",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Tümü",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Matristen sayfa görünümünü ve\/veya davranışını etkileyebilecek değişiklikler yaptığınızda, <i>uMatrix<\/i> bunlardan etkilenen sayfaları matris kapatıldığında otomatik olarak yeniden yükleyecektir.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Engellenmiş çerçeveler: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Saydamlık",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Engellenmiş elementlerin yertutucularını daralt",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "İçe aktar...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "Alan adlarım",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "Tariflerim",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Uyarı! Bu ham yapılandırma ayarlarını değiştirmenin sorumluluğu size aittir.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – Статистика",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "Після закриття matrix перезавантажувати ці вкладки:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Жодних",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Поточний",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Усе",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Щоразу, коли ви робите зміни в матриці, які можуть змінити вигляд і\/або поведінку однієї, або більше сторінок <i>uMatrix<\/i> перевантажить змінені сторінки після закриття матриці.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Blocked frames: Color",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Затінення",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "Thống kê µMatrix",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "Khi đã đóng ma trận, tải lại thông minh những thẻ này:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "Không có",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "Hiện tại",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "Tất cả",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "Bất cứ khi nào bạn tạo ra thay đổi trong ma trận có thể ảnh hưởng đến việc hiển thị và\/hoặc hành vi của một hoặc nhiều trang, <i>µMatrix<\/i> sẽ tự tải lại trang được ảnh hưởng khi bạn đóng ma trận.",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "Đã chặn frame: Màu",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "Độ mờ",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,6 +519,14 @@
|
|||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "没有找到网页",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "导入规则",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "保存规则",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – 统计",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "网页域名",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "关闭 matrix 时智能重载这些标签页:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "无",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "当前",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "全部",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "任何时候当您做出可能影响一个或多个页面的显示或行为的变更时,<i>uMatrix<\/i> 将在您关闭 matrix 时自动重载受影响的页面。",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "已屏蔽的框架: 颜色",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "不透明度",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "隐藏已拦截请求所关联的页面内容",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,8 +519,16 @@
|
|||
"message": "导入…",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "我的 Hosts 名单",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "我的收集",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "警告!若要自行编辑原始设定数据则后果自负。",
|
||||
"message": "警告!可在此编辑原始设定数据。请自负风险。",
|
||||
"description": ""
|
||||
},
|
||||
"aboutChangelog": {
|
||||
|
|
|
@ -151,6 +151,14 @@
|
|||
"message": "沒有找到網頁",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "導入規則",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "儲存規則",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uMatrix – 統計",
|
||||
"description": ""
|
||||
|
@ -311,34 +319,6 @@
|
|||
"message": "網頁域名",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsMatrixAutoReloadPrompt": {
|
||||
"message": "關閉矩陣時重新載入以下分頁:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadNone": {
|
||||
"message": "無",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadCurrent": {
|
||||
"message": "現有",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadAll": {
|
||||
"message": "全部",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixAutoReloadInfo": {
|
||||
"message": "當你更改矩陣以致其將影響分頁之外觀或行為之時,<i>uMatrix<\/i>將於關閉矩陣時自動重新載入。",
|
||||
"description": ""
|
||||
},
|
||||
"settingsSubframeColor": {
|
||||
"message": "已封鎖之框架: 颜色",
|
||||
"description": "English: Blocked frames: Color"
|
||||
},
|
||||
"settingsSubframeOpacity": {
|
||||
"message": "不透明度",
|
||||
"description": "English: Opacity"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "隱藏已阻擋請求所關聯的頁面內容",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
|
@ -539,8 +519,16 @@
|
|||
"message": "導入…",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "我的 Hosts 名單",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "我的收集",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "警告!若要自行編輯原始設定數據則後果自負。",
|
||||
"message": "警告!可在此編輯原始設定數據。請自負风險。",
|
||||
"description": ""
|
||||
},
|
||||
"aboutChangelog": {
|
||||
|
|
|
@ -29,6 +29,10 @@ ul {
|
|||
<li><span data-i18n="aboutIssueContributors"></span> <a href="https://github.com/gorhill/uMatrix/issues?q=is%3Aissue">uMatrix</a>, <a href="https://github.com/gorhill/httpswitchboard/issues?q=is%3Aissue">HTTP Switchboard</a>
|
||||
<li><span data-i18n="aboutTranslationContributors"></span> <a href="https://github.com/gorhill/uMatrix/wiki/Translation-work-contributors">Crowdin</a>
|
||||
</ul>
|
||||
<li><a href="https://github.com/bestiejs/punycode.js" target="_blank">Punycode.js</a> by <a href="https://github.com/mathiasbynens">Mathias Bynens</a>
|
||||
<li><a href="https://fontawesome.com/" target="_blank">Font Awesome</a> by <a href="https://github.com/davegandy">Dave Gandy</a>
|
||||
<li><a href="https://codemirror.net/" target="_blank">CodeMirror</a> by <a href="https://github.com/marijnh">Marijn Haverbeke</a>
|
||||
<li><a href="https://github.com/Swatinem/diff" target="_blank">An implementation of Myers' diff algorithm</a> by <a href="https://github.com/Swatinem">Arpad Borsos</a>
|
||||
</ul>
|
||||
|
||||
<h2 data-i18n="aboutUserDataHeader"></h2>
|
||||
|
|
29
src/css/codemirror.css
Normal file
29
src/css/codemirror.css
Normal file
|
@ -0,0 +1,29 @@
|
|||
.codeMirrorContainer {
|
||||
font-size: 12px;
|
||||
line-height: 1.25;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
.CodeMirror {
|
||||
border: 1px solid #ddd;
|
||||
box-sizing: border-box;
|
||||
flex-grow: 1;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* For when panels are used */
|
||||
.codeMirrorContainer > div:not([class^="CodeMirror"]) {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-l-deleted {
|
||||
background-image: none;
|
||||
font-weight: bold;
|
||||
}
|
||||
.CodeMirror-merge-l-inserted {
|
||||
background-image: none;
|
||||
font-weight: bold;
|
||||
}
|
|
@ -1,8 +1,9 @@
|
|||
body {
|
||||
background-color: #fff;
|
||||
box-sizing: border-box;
|
||||
color: #000;
|
||||
margin: 0;
|
||||
padding: 0 0.5em 0 0.5em;
|
||||
padding: 0 0.5em 0.5em 0.5em;
|
||||
font: 14px/1.4 sans-serif;
|
||||
}
|
||||
body > *:first-child {
|
||||
|
|
|
@ -159,7 +159,7 @@ body .toolbar button.fa {
|
|||
}
|
||||
|
||||
.dropdown-menu-capture {
|
||||
background-color: transparent;
|
||||
background-color: rgba(0,0,0,0.2);
|
||||
border: 0;
|
||||
bottom: 0;
|
||||
display: none;
|
||||
|
@ -171,6 +171,10 @@ body .toolbar button.fa {
|
|||
top: 0;
|
||||
z-index: 300;
|
||||
}
|
||||
.dropdown-menu-capture.dropdown-menu-centered > .dropdown-menu {
|
||||
left: 4em;
|
||||
right: 4em;
|
||||
}
|
||||
.dropdown-menu-capture.show {
|
||||
display: block;
|
||||
}
|
||||
|
@ -211,14 +215,15 @@ body .toolbar button.fa {
|
|||
}
|
||||
|
||||
button > span.badge {
|
||||
padding: 1px 1px;
|
||||
display: inline-block;
|
||||
font-size: 40%;
|
||||
position: absolute;
|
||||
right: 1px;
|
||||
background-color: rgba(240,240,240,0.75);
|
||||
bottom: 1px;
|
||||
color: #000;
|
||||
background-color: rgba(240,240,240,0.75)
|
||||
display: inline-block;
|
||||
font-size: 40%;
|
||||
padding: 1px 1px;
|
||||
pointer-events: none;
|
||||
position: absolute;
|
||||
right: 1px;
|
||||
}
|
||||
button.disabled > span.badge {
|
||||
display: none;
|
||||
|
@ -238,7 +243,6 @@ button.disabled > span.badge {
|
|||
padding: 0;
|
||||
}
|
||||
.recipe {
|
||||
cursor: pointer;
|
||||
list-style-type: none;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
@ -266,15 +270,21 @@ button.disabled > span.badge {
|
|||
}
|
||||
.recipe .name {
|
||||
color: #000;
|
||||
cursor: default;
|
||||
flex-grow: 1;
|
||||
padding: 0.4em 0;
|
||||
}
|
||||
.recipe .importer,
|
||||
.recipe .committer {
|
||||
cursor: pointer;
|
||||
display: none;
|
||||
font-size: 120%;
|
||||
padding: 0.4em;
|
||||
width: 0.8em;
|
||||
text-align: center;
|
||||
width: 1em;
|
||||
}
|
||||
.recipe.mustCommit .committer {
|
||||
.recipe.mustImport .importer,
|
||||
.recipe.mustCommit:not(.mustImport) .committer {
|
||||
display: inline;
|
||||
}
|
||||
.recipe:hover {
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
div > p:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
div > p:last-child {
|
||||
margin-bottom: 0;
|
||||
body {
|
||||
height: 100vh;
|
||||
overflow: hidden;
|
||||
}
|
||||
#diff {
|
||||
border: 0;
|
||||
|
@ -10,152 +8,85 @@ div > p:last-child {
|
|||
padding: 0;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#diff > .pane {
|
||||
border: 0;
|
||||
box-sizing: box-border;
|
||||
display: inline-block;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
position: relative;
|
||||
vertical-align: top;
|
||||
width: calc(50% - 2px);
|
||||
#diff .tools > * {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
#diff > .pane > div {
|
||||
padding: 0 0 1em 0;
|
||||
#diff .ruleActions {
|
||||
border: 0;
|
||||
box-sizing: border-box;
|
||||
display: inline-block;
|
||||
padding: 0;
|
||||
text-align: center;
|
||||
vertical-align: top;
|
||||
width: 50%;
|
||||
}
|
||||
#diff .ruleActions h3 {
|
||||
font-weight: normal;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
#ruleFilter {
|
||||
direction: ltr;
|
||||
text-align: center;
|
||||
}
|
||||
#diff > .pane > div > span {
|
||||
float: left;
|
||||
#ruleFilter .fa {
|
||||
color: #888;
|
||||
}
|
||||
|
||||
#revertButton:after,
|
||||
#commitButton:before {
|
||||
font-family: FontAwesome;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
line-height: 1;
|
||||
vertical-align: baseline;
|
||||
display: inline-block;
|
||||
}
|
||||
body[dir="ltr"] #revertButton:after {
|
||||
content: '\2009\f061';
|
||||
font-family: FontAwesome;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
line-height: 1;
|
||||
vertical-align: baseline;
|
||||
display: inline-block;
|
||||
}
|
||||
body[dir="rtl"] #revertButton:after {
|
||||
content: '\2009\f060';
|
||||
font-family: FontAwesome;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
line-height: 1;
|
||||
vertical-align: baseline;
|
||||
display: inline-block;
|
||||
}
|
||||
body[dir="ltr"] #commitButton:before {
|
||||
content: '\f060\2009';
|
||||
font-family: FontAwesome;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
line-height: 1;
|
||||
vertical-align: baseline;
|
||||
display: inline-block;
|
||||
}
|
||||
body[dir="rtl"] #commitButton:before {
|
||||
content: '\f061\2009';
|
||||
font-family: FontAwesome;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
line-height: 1;
|
||||
vertical-align: baseline;
|
||||
display: inline-block;
|
||||
}
|
||||
#revertButton,
|
||||
#commitButton,
|
||||
#diff.edit #editEnterButton {
|
||||
#editSaveButton,
|
||||
#diff.editing #exportButton,
|
||||
#diff.editing #importButton {
|
||||
opacity: 0.25;
|
||||
pointer-events: none;
|
||||
}
|
||||
#editStopButton,
|
||||
#editCancelButton {
|
||||
display: none;
|
||||
}
|
||||
#diff.dirty:not(.edit) #revertButton,
|
||||
#diff.dirty:not(.edit) #commitButton {
|
||||
#diff.dirty:not(.editing) #revertButton,
|
||||
#diff.dirty:not(.editing) #commitButton,
|
||||
#diff.editing #editSaveButton {
|
||||
opacity: 1;
|
||||
pointer-events: auto;
|
||||
}
|
||||
#diff.edit #editStopButton,
|
||||
#diff.edit #editCancelButton {
|
||||
display: initial;
|
||||
|
||||
.codeMirrorContainer {
|
||||
box-sizing: border-box;
|
||||
padding: 0 0 0.5em 0;
|
||||
}
|
||||
#diff.edit #importButton,
|
||||
#diff.edit #exportButton {
|
||||
.CodeMirror-merge, .CodeMirror-merge-pane, .CodeMirror-merge .CodeMirror {
|
||||
box-sizing: border-box;
|
||||
height: 100%;
|
||||
}
|
||||
#diff.editing .CodeMirror-merge-copy,
|
||||
#diff.editing .CodeMirror-merge-copy-reverse {
|
||||
display: none;
|
||||
}
|
||||
#diff ul {
|
||||
border: 0;
|
||||
border-top: 1px solid #eee;
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
padding: 1em 0 0 0;
|
||||
}
|
||||
#diff ul,
|
||||
#diff textarea {
|
||||
font: 12px/1.8 monospace;
|
||||
}
|
||||
#diff.edit .right ul {
|
||||
visibility: hidden;
|
||||
}
|
||||
#diff .left {
|
||||
padding: 0 0 0 0;
|
||||
}
|
||||
#diff .right > ul {
|
||||
#diff.editing .CodeMirror-merge-left .CodeMirror {
|
||||
color: #888;
|
||||
}
|
||||
#diff li {
|
||||
background-color: white;
|
||||
direction: ltr;
|
||||
padding: 0;
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
#diff.editing .CodeMirror-merge-editor .CodeMirror {
|
||||
background-color: #ffe;
|
||||
}
|
||||
#diff li:nth-of-type(2n+0) {
|
||||
background-color: #eee;
|
||||
}
|
||||
#diff .right li {
|
||||
cursor: pointer;
|
||||
}
|
||||
#diff .right li:hover {
|
||||
background-color: #ffc;
|
||||
color: #000;
|
||||
}
|
||||
#diff .right li.notLeft {
|
||||
color: #000;
|
||||
}
|
||||
#diff .right li.notLeft:hover {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
#diff .right li.notRight {
|
||||
color: #000;
|
||||
}
|
||||
#diff .right li.toRemove {
|
||||
color: #000;
|
||||
text-decoration: line-through;
|
||||
}
|
||||
#diff textarea {
|
||||
border: 0;
|
||||
border-top: 1px solid #eee;
|
||||
direction: ltr;
|
||||
height: 100%;
|
||||
body[dir="rtl"] .CodeMirror-merge-pane-rightmost {
|
||||
right: unset;
|
||||
left: 0;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
overflow-y: auto;
|
||||
padding: 1em 0 0 0;
|
||||
position: absolute;
|
||||
resize: none;
|
||||
visibility: hidden;
|
||||
white-space: pre;
|
||||
width: 100%;
|
||||
}
|
||||
#diff.edit textarea {
|
||||
visibility: visible;
|
||||
}
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<div class="assets">
|
||||
<div data-i18n="assetsHostsSection"></div>
|
||||
<div>
|
||||
<p data-i18n="hostsFilesPrompt"></p>
|
||||
<p><span data-i18n="hostsFilesPrompt"></span> <a class="fa info" href="https://github.com/gorhill/uMatrix/wiki/Preset-whitelisted-and-blacklisted-domains#preset-blacklist-rules" target="_blank"></a></p>
|
||||
<p id="listsOfBlockedHostsPrompt"></p>
|
||||
<ul id="hosts">
|
||||
<li class="listEntry notAnAsset toImport"><input type="checkbox" id="importHosts"><label for="importHosts" data-i18n="assetsImportLabel"></label><!--
|
||||
|
@ -33,7 +33,7 @@
|
|||
<div class="assets">
|
||||
<div data-i18n="assetsRecipesSection"></div>
|
||||
<div>
|
||||
<p data-i18n="assetsRecipesSummary"></p>
|
||||
<p><span data-i18n="assetsRecipesSummary"></span> <a class="fa info" href="https://github.com/gorhill/uMatrix/wiki/Ruleset-recipes" target="_blank"></a></p>
|
||||
<ul id="recipes">
|
||||
<li class="listEntry notAnAsset toImport"><input type="checkbox" id="importRecipes"><label for="importRecipes" data-i18n="assetsImportLabel"></label><!--
|
||||
--><textarea dir="ltr" spellcheck="false" placeholder="hostsFilesExternalListsHint"></textarea>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uMatrix - a Chromium browser extension to black/white list requests.
|
||||
Copyright (C) 2013-2017 Raymond Hill
|
||||
uMatrix - a browser extension to black/white list requests.
|
||||
Copyright (C) 2013-2018 Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -184,64 +184,78 @@ var cookieMatchDomains = function(cookieKey, allHostnamesString) {
|
|||
|
||||
// Look for cookies to record for a specific web page
|
||||
|
||||
var recordPageCookiesAsync = function(pageStats) {
|
||||
var recordPageCookiesAsync = function(pageStore) {
|
||||
// Store the page stats objects so that it doesn't go away
|
||||
// before we handle the job.
|
||||
// rhill 2013-10-19: pageStats could be nil, for example, this can
|
||||
// rhill 2013-10-19: pageStore could be nil, for example, this can
|
||||
// happens if a file:// ... makes an xmlHttpRequest
|
||||
if ( !pageStats ) {
|
||||
return;
|
||||
}
|
||||
recordPageCookiesQueue.set(pageStats.pageUrl, pageStats);
|
||||
if ( processPageRecordQueueTimer === null ) {
|
||||
processPageRecordQueueTimer = vAPI.setTimeout(processPageRecordQueue, 1000);
|
||||
}
|
||||
if ( !pageStore ) { return; }
|
||||
recordPageCookiesQueue.set(pageStore.pageUrl, pageStore);
|
||||
if ( processPageRecordQueueTimer !== null ) { return; }
|
||||
processPageRecordQueueTimer = vAPI.setTimeout(processPageRecordQueue, 1000);
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var cookieLogEntryBuilder = [
|
||||
'',
|
||||
'{',
|
||||
'',
|
||||
'-cookie:',
|
||||
'',
|
||||
'}'
|
||||
];
|
||||
var recordPageCookie = (function() {
|
||||
let queue = new Map();
|
||||
let queueTimer;
|
||||
let cookieLogEntryBuilder = [ '', '{', '', '-cookie:', '', '}' ];
|
||||
|
||||
var recordPageCookie = function(pageStore, cookieKey) {
|
||||
if ( vAPI.isBehindTheSceneTabId(pageStore.tabId) ) { return; }
|
||||
let process = function() {
|
||||
queueTimer = undefined;
|
||||
for ( let qentry of queue ) {
|
||||
let pageStore = qentry[0];
|
||||
if ( pageStore.tabId === '' ) { continue; }
|
||||
for ( let cookieKey of qentry[1] ) {
|
||||
let cookieEntry = cookieDict.get(cookieKey);
|
||||
let block = µm.mustBlock(
|
||||
pageStore.pageHostname,
|
||||
cookieEntry.hostname,
|
||||
'cookie'
|
||||
);
|
||||
// https://github.com/gorhill/httpswitchboard/issues/60
|
||||
// Need to URL-encode cookie name
|
||||
cookieLogEntryBuilder[0] =
|
||||
cookieURLFromCookieEntry(cookieEntry);
|
||||
cookieLogEntryBuilder[2] =
|
||||
cookieEntry.session ? 'session' : 'persistent';
|
||||
cookieLogEntryBuilder[4] =
|
||||
encodeURIComponent(cookieEntry.name);
|
||||
let cookieURL = cookieLogEntryBuilder.join('');
|
||||
pageStore.recordRequest('cookie', cookieURL, block);
|
||||
µm.logger.writeOne(
|
||||
pageStore.tabId,
|
||||
'net',
|
||||
pageStore.pageHostname,
|
||||
cookieURL,
|
||||
'cookie',
|
||||
block
|
||||
);
|
||||
cookieEntry.usedOn.add(pageStore.pageHostname);
|
||||
if ( !block ) { continue; }
|
||||
if ( µm.userSettings.deleteCookies ) {
|
||||
removeCookieAsync(cookieKey);
|
||||
}
|
||||
µm.updateBadgeAsync(pageStore.tabId);
|
||||
}
|
||||
}
|
||||
queue.clear();
|
||||
};
|
||||
|
||||
var cookieEntry = cookieDict.get(cookieKey);
|
||||
var pageHostname = pageStore.pageHostname;
|
||||
var block = µm.mustBlock(pageHostname, cookieEntry.hostname, 'cookie');
|
||||
|
||||
cookieLogEntryBuilder[0] = cookieURLFromCookieEntry(cookieEntry);
|
||||
cookieLogEntryBuilder[2] = cookieEntry.session ? 'session' : 'persistent';
|
||||
cookieLogEntryBuilder[4] = encodeURIComponent(cookieEntry.name);
|
||||
|
||||
var cookieURL = cookieLogEntryBuilder.join('');
|
||||
|
||||
// rhill 2013-11-20:
|
||||
// https://github.com/gorhill/httpswitchboard/issues/60
|
||||
// Need to URL-encode cookie name
|
||||
pageStore.recordRequest('cookie', cookieURL, block);
|
||||
µm.logger.writeOne(pageStore.tabId, 'net', pageHostname, cookieURL, 'cookie', block);
|
||||
|
||||
cookieEntry.usedOn.add(pageHostname);
|
||||
|
||||
// rhill 2013-11-21:
|
||||
// https://github.com/gorhill/httpswitchboard/issues/65
|
||||
// Leave alone cookies from behind-the-scene requests if
|
||||
// behind-the-scene processing is disabled.
|
||||
if ( !block ) {
|
||||
return;
|
||||
}
|
||||
if ( !µm.userSettings.deleteCookies ) {
|
||||
return;
|
||||
}
|
||||
removeCookieAsync(cookieKey);
|
||||
};
|
||||
return function(pageStore, cookieKey) {
|
||||
if ( vAPI.isBehindTheSceneTabId(pageStore.tabId) ) { return; }
|
||||
let entry = queue.get(pageStore);
|
||||
if ( entry === undefined ) {
|
||||
queue.set(pageStore, (entry = new Set()));
|
||||
}
|
||||
if ( entry.has(cookieKey) ) { return; }
|
||||
entry.add(cookieKey);
|
||||
if ( queueTimer === undefined ) {
|
||||
queueTimer = vAPI.setTimeout(process, 277);
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
@ -473,35 +487,62 @@ var canRemoveCookie = function(cookieKey, srcHostnames) {
|
|||
/******************************************************************************/
|
||||
|
||||
// Listen to any change in cookieland, we will update page stats accordingly.
|
||||
//
|
||||
// https://github.com/gorhill/httpswitchboard/issues/79
|
||||
// If cookie value didn't change, no need to record.
|
||||
|
||||
vAPI.cookies.onChanged = function(cookie) {
|
||||
// rhill 2013-12-11: If cookie value didn't change, no need to record.
|
||||
// https://github.com/gorhill/httpswitchboard/issues/79
|
||||
var cookieKey = cookieKeyFromCookie(cookie);
|
||||
var cookieEntry = cookieDict.get(cookieKey);
|
||||
if ( cookieEntry === undefined ) {
|
||||
cookieEntry = addCookieToDict(cookie);
|
||||
} else {
|
||||
cookieEntry.tstamp = Date.now();
|
||||
if ( cookie.value === cookieEntry.value ) { return; }
|
||||
cookieEntry.value = cookie.value;
|
||||
}
|
||||
vAPI.cookies.onChanged = (function() {
|
||||
let queue = new Map();
|
||||
let queueTimer;
|
||||
|
||||
// Go through all pages and update if needed, as one cookie can be used
|
||||
// by many web pages, so they need to be recorded for all these pages.
|
||||
var pageStores = µm.pageStores;
|
||||
var pageStore;
|
||||
for ( var tabId in pageStores ) {
|
||||
if ( pageStores.hasOwnProperty(tabId) === false ) {
|
||||
continue;
|
||||
|
||||
let process = function() {
|
||||
queueTimer = undefined;
|
||||
let now = Date.now();
|
||||
let cookieKeys = [];
|
||||
for ( let qentry of queue ) {
|
||||
if ( qentry[1] > now ) { continue; }
|
||||
if ( cookieDict.has(qentry[0]) === false ) { continue; }
|
||||
cookieKeys.push(qentry[0]);
|
||||
queue.delete(qentry[0]);
|
||||
}
|
||||
pageStore = pageStores[tabId];
|
||||
if ( !cookieMatchDomains(cookieKey, pageStore.allHostnamesString) ) {
|
||||
continue;
|
||||
if ( cookieKeys.length !== 0 ) {
|
||||
let pageStores = µm.pageStores;
|
||||
for ( let tabId in pageStores ) {
|
||||
if ( pageStores.hasOwnProperty(tabId) === false ) { continue; }
|
||||
let pageStore = pageStores[tabId];
|
||||
let allHostnamesString = pageStore.allHostnamesString;
|
||||
for ( let cookieKey of cookieKeys ) {
|
||||
if ( cookieMatchDomains(cookieKey, allHostnamesString) ) {
|
||||
recordPageCookie(pageStore, cookieKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
recordPageCookie(pageStore, cookieKey);
|
||||
}
|
||||
};
|
||||
if ( queue.size !== 0 ) {
|
||||
queueTimer = vAPI.setTimeout(process, 797);
|
||||
}
|
||||
};
|
||||
|
||||
return function(cookie) {
|
||||
let cookieKey = cookieKeyFromCookie(cookie);
|
||||
let cookieEntry = cookieDict.get(cookieKey);
|
||||
if ( cookieEntry === undefined ) {
|
||||
cookieEntry = addCookieToDict(cookie);
|
||||
} else {
|
||||
cookieEntry.tstamp = Date.now();
|
||||
if ( cookie.value === cookieEntry.value ) { return; }
|
||||
cookieEntry.value = cookie.value;
|
||||
}
|
||||
if ( queue.has(cookieKey) ) { return; }
|
||||
queue.set(cookieKey, Date.now() + 653);
|
||||
if ( queueTimer === undefined ) {
|
||||
queueTimer = vAPI.setTimeout(process, 727);
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
|
191
src/js/matrix.js
191
src/js/matrix.js
|
@ -141,6 +141,18 @@ var isIPAddress = function(hostname) {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
var punycodeIf = function(hn) {
|
||||
return reNotASCII.test(hn) ? punycode.toASCII(hn) : hn;
|
||||
};
|
||||
|
||||
var unpunycodeIf = function(hn) {
|
||||
return hn.indexOf('xn--') !== -1 ? punycode.toUnicode(hn) : hn;
|
||||
};
|
||||
|
||||
var reNotASCII = /[^\x20-\x7F]/;
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var toBroaderHostname = function(hostname) {
|
||||
if ( hostname === '*' ) { return ''; }
|
||||
if ( isIPAddress(hostname) ) {
|
||||
|
@ -591,6 +603,51 @@ Matrix.prototype.extractAllSourceHostnames = (function() {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
// https://github.com/gorhill/uMatrix/issues/759
|
||||
// Backward compatibility: 'plugin' => 'media'
|
||||
|
||||
Matrix.prototype.partsFromLine = function(line) {
|
||||
let fields = line.split(/\s+/);
|
||||
if ( fields.length < 3 ) { return; }
|
||||
|
||||
// Switches
|
||||
if ( this.reSwitchRule.test(fields[0]) ) {
|
||||
fields[0] = fields[0].slice(0, -1);
|
||||
if ( switchBitOffsets.has(fields[0]) === false ) { return; }
|
||||
fields[1] = punycodeIf(fields[1]);
|
||||
fields[2] = nameToSwitchStateMap.get(fields[2]);
|
||||
if ( fields[2] === undefined ) { return; }
|
||||
fields.length = 3;
|
||||
return fields;
|
||||
}
|
||||
|
||||
// Rules
|
||||
if ( fields.length < 4 ) { return; }
|
||||
fields[0] = punycodeIf(fields[0]);
|
||||
fields[1] = punycodeIf(fields[1]);
|
||||
if ( fields[2] === 'plugin' ) { fields[2] = 'media'; }
|
||||
if ( typeBitOffsets.get(fields[2]) === undefined ) { return; }
|
||||
if ( nameToStateMap.hasOwnProperty(fields[3]) === false ) { return; }
|
||||
fields[3] = nameToStateMap[fields[3]];
|
||||
fields.length = 4;
|
||||
return fields;
|
||||
};
|
||||
|
||||
Matrix.prototype.reSwitchRule = /^[0-9a-z-]+:$/;
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
Matrix.prototype.fromArray = function(lines, append) {
|
||||
let matrix = append === true ? this : new Matrix();
|
||||
for ( let line of lines ) {
|
||||
matrix.addFromLine(line);
|
||||
}
|
||||
if ( append !== true ) {
|
||||
this.assign(matrix);
|
||||
}
|
||||
this.modifiedTime = Date.now();
|
||||
};
|
||||
|
||||
Matrix.prototype.toArray = function() {
|
||||
let out = [];
|
||||
for ( let rule of this.rules.keys() ) {
|
||||
|
@ -600,8 +657,8 @@ Matrix.prototype.toArray = function() {
|
|||
let val = this.evaluateCell(srcHostname, desHostname, type);
|
||||
if ( val === 0 ) { continue; }
|
||||
out.push(
|
||||
punycode.toUnicode(srcHostname) + ' ' +
|
||||
punycode.toUnicode(desHostname) + ' ' +
|
||||
unpunycodeIf(srcHostname) + ' ' +
|
||||
unpunycodeIf(desHostname) + ' ' +
|
||||
type + ' ' +
|
||||
stateToNameMap.get(val)
|
||||
);
|
||||
|
@ -623,25 +680,6 @@ Matrix.prototype.toArray = function() {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
Matrix.prototype.fromArray = function(lines, append) {
|
||||
let matrix = append === true ? this : new Matrix();
|
||||
for ( let line of lines ) {
|
||||
matrix.fromLine(line);
|
||||
}
|
||||
if ( append !== true ) {
|
||||
this.assign(matrix);
|
||||
}
|
||||
this.modifiedTime = Date.now();
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
Matrix.prototype.toString = function() {
|
||||
return this.toArray().join('\n');
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
Matrix.prototype.fromString = function(text, append) {
|
||||
let matrix = append === true ? this : new Matrix();
|
||||
let textEnd = text.length;
|
||||
|
@ -657,14 +695,12 @@ Matrix.prototype.fromString = function(text, append) {
|
|||
}
|
||||
let line = text.slice(lineBeg, lineEnd).trim();
|
||||
lineBeg = lineEnd + 1;
|
||||
|
||||
let pos = line.indexOf('# ');
|
||||
if ( pos !== -1 ) {
|
||||
line = line.slice(0, pos).trim();
|
||||
}
|
||||
if ( line === '' ) { continue; }
|
||||
|
||||
matrix.fromLine(line);
|
||||
matrix.addFromLine(line);
|
||||
}
|
||||
|
||||
if ( append !== true ) {
|
||||
|
@ -674,77 +710,38 @@ Matrix.prototype.fromString = function(text, append) {
|
|||
this.modifiedTime = Date.now();
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// https://github.com/gorhill/uMatrix/issues/759
|
||||
// Backward compatibility: 'plugin' => 'media'
|
||||
|
||||
Matrix.prototype.fromLine = function(line) {
|
||||
let fields = line.split(/\s+/);
|
||||
if ( fields.length < 3 ) { return false; }
|
||||
let field0 = fields[0];
|
||||
|
||||
// Switches
|
||||
if ( this.reSwitchRule.test(field0) ) {
|
||||
let switchName = field0.slice(0, -1);
|
||||
let srcHostname = punycode.toASCII(fields[1]);
|
||||
let state = fields[2];
|
||||
if (
|
||||
switchBitOffsets.has(switchName) === false ||
|
||||
nameToSwitchStateMap.has(state) === false
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
this.setSwitch(
|
||||
switchName,
|
||||
srcHostname,
|
||||
nameToSwitchStateMap.get(state)
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Rules
|
||||
if ( fields.length < 4 ) { return false; }
|
||||
|
||||
let srcHostname = punycode.toASCII(fields[0]);
|
||||
let desHostname = punycode.toASCII(fields[1]);
|
||||
let type = fields[2];
|
||||
|
||||
if ( type !== undefined ) {
|
||||
if ( type === 'plugin' ) {
|
||||
type = 'media';
|
||||
} else if ( typeBitOffsets.has(type) === false ) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
type = '*';
|
||||
}
|
||||
|
||||
let state = fields[3];
|
||||
|
||||
if ( state !== undefined ) {
|
||||
if ( nameToStateMap.hasOwnProperty(state) === false ) {
|
||||
return false;
|
||||
}
|
||||
state = nameToStateMap[state];
|
||||
} else {
|
||||
state = 2;
|
||||
}
|
||||
|
||||
this.setCell(srcHostname, desHostname, type, state);
|
||||
return true;
|
||||
Matrix.prototype.toString = function() {
|
||||
return this.toArray().join('\n');
|
||||
};
|
||||
|
||||
Matrix.prototype.reSwitchRule = /^[0-9a-z-]+:$/;
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
Matrix.prototype.toSelfie = function() {
|
||||
return {
|
||||
version: selfieVersion,
|
||||
switches: Array.from(this.switches),
|
||||
rules: Array.from(this.rules)
|
||||
};
|
||||
Matrix.prototype.addFromLine = function(line) {
|
||||
let fields = this.partsFromLine(line);
|
||||
if ( fields !== undefined ) {
|
||||
// Switches
|
||||
if ( fields.length === 3 ) {
|
||||
return this.setSwitch(fields[0], fields[1], fields[2]);
|
||||
}
|
||||
// Rules
|
||||
if ( fields.length === 4 ) {
|
||||
return this.setCell(fields[0], fields[1], fields[2], fields[3]);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Matrix.prototype.removeFromLine = function(line) {
|
||||
let fields = this.partsFromLine(line);
|
||||
if ( fields !== undefined ) {
|
||||
// Switches
|
||||
if ( fields.length === 3 ) {
|
||||
return this.setSwitch(fields[0], fields[1], 0);
|
||||
}
|
||||
// Rules
|
||||
if ( fields.length === 4 ) {
|
||||
return this.setCell(fields[0], fields[1], fields[2], 0);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
@ -757,6 +754,14 @@ Matrix.prototype.fromSelfie = function(selfie) {
|
|||
return true;
|
||||
};
|
||||
|
||||
Matrix.prototype.toSelfie = function() {
|
||||
return {
|
||||
version: selfieVersion,
|
||||
switches: Array.from(this.switches),
|
||||
rules: Array.from(this.rules)
|
||||
};
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
Matrix.prototype.diff = function(other, srcHostname, desHostnames) {
|
||||
|
@ -790,9 +795,7 @@ Matrix.prototype.diff = function(other, srcHostname, desHostnames) {
|
|||
}
|
||||
}
|
||||
srcHostname = toBroaderHostname(srcHostname);
|
||||
if ( srcHostname === '' ) {
|
||||
break;
|
||||
}
|
||||
if ( srcHostname === '' ) { break; }
|
||||
}
|
||||
return out;
|
||||
};
|
||||
|
|
|
@ -349,7 +349,7 @@ var onMessage = function(request, sender, callback) {
|
|||
break;
|
||||
|
||||
case 'fetchRecipeCommitStatuses':
|
||||
response = µm.recipeManager.commitStatuses(request);
|
||||
response = µm.recipeManager.statuses(request);
|
||||
break;
|
||||
|
||||
case 'toggleMatrixSwitch':
|
||||
|
@ -677,6 +677,22 @@ vAPI.messaging.listen('cloud-ui.js', onMessage);
|
|||
|
||||
var µm = µMatrix;
|
||||
|
||||
var modifyRuleset = function(details) {
|
||||
let ruleset = details.permanent ? µm.pMatrix : µm.tMatrix,
|
||||
modifiedTime = ruleset.modifiedTime;
|
||||
let toRemove = new Set(details.toRemove.trim().split(/\s*[\n\r]+\s*/));
|
||||
for ( let rule of toRemove ) {
|
||||
ruleset.removeFromLine(rule);
|
||||
}
|
||||
let toAdd = new Set(details.toAdd.trim().split(/\s*[\n\r]+\s*/));
|
||||
for ( let rule of toAdd ) {
|
||||
ruleset.addFromLine(rule);
|
||||
}
|
||||
if ( details.permanent && ruleset.modifiedTime !== modifiedTime ) {
|
||||
µm.saveMatrix();
|
||||
}
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var onMessage = function(request, sender, callback) {
|
||||
|
@ -691,24 +707,14 @@ var onMessage = function(request, sender, callback) {
|
|||
var response;
|
||||
|
||||
switch ( request.what ) {
|
||||
case 'getUserRules':
|
||||
response = {
|
||||
temporaryRules: µm.tMatrix.toString(),
|
||||
permanentRules: µm.pMatrix.toString()
|
||||
};
|
||||
break;
|
||||
case 'modifyRuleset':
|
||||
modifyRuleset(request);
|
||||
/* falls through */
|
||||
|
||||
case 'setUserRules':
|
||||
if ( typeof request.temporaryRules === 'string' ) {
|
||||
µm.tMatrix.fromString(request.temporaryRules);
|
||||
}
|
||||
if ( typeof request.permanentRules === 'string' ) {
|
||||
µm.pMatrix.fromString(request.permanentRules);
|
||||
µm.saveMatrix();
|
||||
}
|
||||
case 'getRuleset':
|
||||
response = {
|
||||
temporaryRules: µm.tMatrix.toString(),
|
||||
permanentRules: µm.pMatrix.toString()
|
||||
temporaryRules: µm.tMatrix.toArray(),
|
||||
permanentRules: µm.pMatrix.toArray()
|
||||
};
|
||||
break;
|
||||
|
||||
|
|
|
@ -134,6 +134,7 @@ PageStore.prototype = {
|
|||
},
|
||||
|
||||
dispose: function() {
|
||||
this.tabId = '';
|
||||
this.rawUrl = '';
|
||||
this.pageUrl = '';
|
||||
this.pageHostname = '';
|
||||
|
|
|
@ -1310,10 +1310,19 @@ let recipeManager = (function() {
|
|||
}
|
||||
|
||||
function apply(ev) {
|
||||
if ( ev.target.classList.contains('expander') ) {
|
||||
if (
|
||||
ev.target.classList.contains('expander') ||
|
||||
ev.target.classList.contains('name')
|
||||
) {
|
||||
ev.currentTarget.classList.toggle('expanded');
|
||||
return;
|
||||
}
|
||||
if (
|
||||
ev.target.classList.contains('importer') === false &&
|
||||
ev.target.classList.contains('committer') === false
|
||||
) {
|
||||
return;
|
||||
}
|
||||
let root = ev.currentTarget;
|
||||
let ruleset = root.querySelector('.ruleset');
|
||||
let commit = ev.target.classList.contains('committer');
|
||||
|
@ -1326,6 +1335,7 @@ let recipeManager = (function() {
|
|||
},
|
||||
updateMatrixSnapshot
|
||||
);
|
||||
root.classList.remove('mustImport');
|
||||
if ( commit ) {
|
||||
root.classList.remove('mustCommit');
|
||||
}
|
||||
|
@ -1341,6 +1351,7 @@ let recipeManager = (function() {
|
|||
recipe.ruleset.replace(reScopeAlias, '$1' + details.scope + '$2'),
|
||||
ul
|
||||
);
|
||||
li.classList.toggle('mustImport', recipe.mustImport === true);
|
||||
li.classList.toggle('mustCommit', recipe.mustCommit === true);
|
||||
li.addEventListener('click', apply);
|
||||
}
|
||||
|
@ -1448,8 +1459,10 @@ function dropDownMenuShow(button) {
|
|||
var menu = menuOverlay.querySelector('.dropdown-menu');
|
||||
var menuRect = menu.getBoundingClientRect();
|
||||
var menuLeft = butnNormalLeft * (viewRect.width - menuRect.width);
|
||||
menu.style.left = menuLeft.toFixed(0) + 'px';
|
||||
menu.style.top = butnRect.bottom + 'px';
|
||||
if ( menuOverlay.classList.contains('dropdown-menu-centered') === false ) {
|
||||
menu.style.left = menuLeft.toFixed(0) + 'px';
|
||||
}
|
||||
}
|
||||
|
||||
function dropDownMenuHide() {
|
||||
|
|
|
@ -148,99 +148,118 @@
|
|||
rawRecipes = [];
|
||||
};
|
||||
|
||||
return {
|
||||
apply: function(details) {
|
||||
let µm = µMatrix;
|
||||
let tMatrix = µm.tMatrix;
|
||||
let pMatrix = µm.pMatrix;
|
||||
let mustPersist = false;
|
||||
for ( let rule of details.ruleset.split('\n') ) {
|
||||
let parts = rule.split(/\s+/);
|
||||
if ( parts.length < 2 ) { continue; }
|
||||
let f0 = parts[0];
|
||||
let f1 = parts[1];
|
||||
// Switch
|
||||
if ( f0.endsWith(':') ) {
|
||||
f0 = f0.slice(0, -1);
|
||||
if ( tMatrix.evaluateSwitchZ(f0, f1) !== false ) {
|
||||
tMatrix.setSwitchZ(f0, f1, false);
|
||||
if ( details.commit ) {
|
||||
pMatrix.setSwitchZ(f0, f1, false);
|
||||
mustPersist = true;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
// Rule
|
||||
if ( parts.length < 3 ) { continue; }
|
||||
let f2 = parts[2];
|
||||
let action = tMatrix.evaluateCellZXY(f0, f1, f2);
|
||||
if ( (action & 3) === 1 ) {
|
||||
tMatrix.whitelistCell(f0, f1, f2);
|
||||
}
|
||||
if ( details.commit !== true ) { continue; }
|
||||
action = pMatrix.evaluateCellZXY(f0, f1, f2);
|
||||
if ( (action & 3) === 1 ) {
|
||||
pMatrix.whitelistCell(f0, f1, f2);
|
||||
mustPersist = true;
|
||||
}
|
||||
}
|
||||
if ( mustPersist ) {
|
||||
µm.saveMatrix();
|
||||
}
|
||||
},
|
||||
fetch: function(srcHostname, desHostnames, callback) {
|
||||
fromPendingStrings();
|
||||
let out = [];
|
||||
let fetched = new Set();
|
||||
let tokens = getTokens(srcHostname + ' ' + desHostnames.join(' '));
|
||||
for ( let token of tokens ) {
|
||||
let recipes = recipeBook.get(token);
|
||||
if ( recipes === undefined ) { continue; }
|
||||
for ( let recipe of recipes ) {
|
||||
if ( fetched.has(recipe.id) ) { continue; }
|
||||
if (
|
||||
conditionMatch(
|
||||
recipe.condition,
|
||||
srcHostname,
|
||||
desHostnames
|
||||
)
|
||||
) {
|
||||
out.push(recipe);
|
||||
fetched.add(recipe.id);
|
||||
// true = blocked, false = not blocked
|
||||
var evaluateRuleParts = function(matrix, scope, parts) {
|
||||
if ( parts[0].endsWith(':') ) {
|
||||
return matrix.evaluateSwitchZ(parts[0].slice(0, -1), scope);
|
||||
}
|
||||
return matrix.evaluateCellZXY(scope, parts[1], parts[2]) === 1;
|
||||
};
|
||||
|
||||
var api = {};
|
||||
|
||||
api.apply = function(details) {
|
||||
let µm = µMatrix;
|
||||
let tMatrix = µm.tMatrix;
|
||||
let pMatrix = µm.pMatrix;
|
||||
let mustPersist = false;
|
||||
for ( let rule of details.ruleset.split('\n') ) {
|
||||
let parts = rule.split(/\s+/);
|
||||
if ( parts.length < 2 ) { continue; }
|
||||
let f0 = parts[0];
|
||||
let f1 = parts[1];
|
||||
// Switch
|
||||
if ( f0.endsWith(':') ) {
|
||||
f0 = f0.slice(0, -1);
|
||||
if ( tMatrix.evaluateSwitchZ(f0, f1) !== false ) {
|
||||
tMatrix.setSwitchZ(f0, f1, false);
|
||||
if ( details.commit ) {
|
||||
pMatrix.setSwitchZ(f0, f1, false);
|
||||
mustPersist = true;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
callback(out);
|
||||
},
|
||||
commitStatuses: function(details) {
|
||||
let matrix = µMatrix.pMatrix;
|
||||
for ( let recipe of details.recipes ) {
|
||||
let ruleIter = new µMatrix.LineIterator(recipe.ruleset);
|
||||
while ( ruleIter.eot() === false ) {
|
||||
let parts = ruleIter.next().split(/\s+/);
|
||||
if (
|
||||
matrix.evaluateCellZXY(
|
||||
details.scope,
|
||||
parts[1],
|
||||
parts[2]
|
||||
) === 1
|
||||
) {
|
||||
recipe.mustCommit = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Rule
|
||||
if ( parts.length < 3 ) { continue; }
|
||||
let f2 = parts[2];
|
||||
let action = tMatrix.evaluateCellZXY(f0, f1, f2);
|
||||
if ( (action & 3) === 1 ) {
|
||||
tMatrix.whitelistCell(f0, f1, f2);
|
||||
}
|
||||
return details;
|
||||
},
|
||||
fromString: function(raw) {
|
||||
rawRecipes.push(raw);
|
||||
},
|
||||
reset: function() {
|
||||
rawRecipes.length = 0;
|
||||
recipeBook.clear();
|
||||
if ( details.commit !== true ) { continue; }
|
||||
action = pMatrix.evaluateCellZXY(f0, f1, f2);
|
||||
if ( (action & 3) === 1 ) {
|
||||
pMatrix.whitelistCell(f0, f1, f2);
|
||||
mustPersist = true;
|
||||
}
|
||||
}
|
||||
if ( mustPersist ) {
|
||||
µm.saveMatrix();
|
||||
}
|
||||
};
|
||||
|
||||
api.fetch = function(srcHostname, desHostnames, callback) {
|
||||
fromPendingStrings();
|
||||
let out = [];
|
||||
let fetched = new Set();
|
||||
let tokens = getTokens(srcHostname + ' ' + desHostnames.join(' '));
|
||||
for ( let token of tokens ) {
|
||||
let recipes = recipeBook.get(token);
|
||||
if ( recipes === undefined ) { continue; }
|
||||
for ( let recipe of recipes ) {
|
||||
if ( fetched.has(recipe.id) ) { continue; }
|
||||
if (
|
||||
conditionMatch(
|
||||
recipe.condition,
|
||||
srcHostname,
|
||||
desHostnames
|
||||
)
|
||||
) {
|
||||
out.push(recipe);
|
||||
fetched.add(recipe.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
callback(out);
|
||||
};
|
||||
|
||||
api.statuses = function(details) {
|
||||
let pMatrix = µMatrix.pMatrix,
|
||||
tMatrix = µMatrix.tMatrix;
|
||||
for ( let recipe of details.recipes ) {
|
||||
let ruleIter = new µMatrix.LineIterator(recipe.ruleset);
|
||||
while ( ruleIter.eot() === false ) {
|
||||
let parts = ruleIter.next().split(/\s+/);
|
||||
if (
|
||||
recipe.mustCommit !== true &&
|
||||
evaluateRuleParts(pMatrix, details.scope, parts)
|
||||
) {
|
||||
recipe.mustCommit = true;
|
||||
if ( recipe.mustImport ) { break; }
|
||||
}
|
||||
if (
|
||||
recipe.mustImport !== true &&
|
||||
evaluateRuleParts(tMatrix, details.scope, parts)
|
||||
) {
|
||||
recipe.mustImport = true;
|
||||
if ( recipe.mustCommit ) { break; }
|
||||
}
|
||||
}
|
||||
}
|
||||
return details;
|
||||
};
|
||||
|
||||
api.fromString = function(raw) {
|
||||
rawRecipes.push(raw);
|
||||
};
|
||||
|
||||
api.reset = function() {
|
||||
rawRecipes.length = 0;
|
||||
recipeBook.clear();
|
||||
};
|
||||
|
||||
return api;
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uMatrix - a Chromium browser extension to black/white list requests.
|
||||
uMatrix - a browser extension to black/white list requests.
|
||||
Copyright (C) 2014-2018 Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
|
@ -296,9 +296,11 @@ var onBeforeSendHeadersHandler = function(details) {
|
|||
}
|
||||
}
|
||||
|
||||
if ( modified ) {
|
||||
return { requestHeaders: requestHeaders };
|
||||
}
|
||||
if ( modified !== true ) { return; }
|
||||
|
||||
µm.updateBadgeAsync(tabId);
|
||||
|
||||
return { requestHeaders: requestHeaders };
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
@ -354,36 +356,54 @@ var onHeadersReceived = function(details) {
|
|||
cspReport.push(cspNoWorker);
|
||||
}
|
||||
|
||||
var headers = details.responseHeaders,
|
||||
cspDirectives, i;
|
||||
if ( csp.length === 0 && cspReport.length === 0 ) { return; }
|
||||
|
||||
// https://github.com/gorhill/uMatrix/issues/967
|
||||
// Inject a new CSP header rather than modify an existing one, except
|
||||
// if the current environment does not support merging headers:
|
||||
// Firefox 58/webext and less can't merge CSP headers, so we will merge
|
||||
// them here.
|
||||
var headers = details.responseHeaders;
|
||||
|
||||
if ( csp.length !== 0 ) {
|
||||
cspDirectives = csp.join(',');
|
||||
i = headerIndexFromName('content-security-policy', headers);
|
||||
if ( i !== -1 ) {
|
||||
headers[i].value += ',' + cspDirectives;
|
||||
} else {
|
||||
headers.push({
|
||||
name: 'Content-Security-Policy',
|
||||
value: cspDirectives
|
||||
});
|
||||
let cspRight = csp.join(', ');
|
||||
let cspTotal = cspRight;
|
||||
if ( cantMergeCSPHeaders ) {
|
||||
let i = headerIndexFromName(
|
||||
'content-security-policy',
|
||||
headers
|
||||
);
|
||||
if ( i !== -1 ) {
|
||||
cspTotal = headers[i].value.trim() + ', ' + cspTotal;
|
||||
headers.splice(i, 1);
|
||||
}
|
||||
}
|
||||
headers.push({
|
||||
name: 'Content-Security-Policy',
|
||||
value: cspTotal
|
||||
});
|
||||
if ( requestType === 'doc' ) {
|
||||
µm.logger.writeOne(tabId, 'net', '', cspDirectives, 'CSP', false);
|
||||
µm.logger.writeOne(tabId, 'net', '', cspRight, 'CSP', false);
|
||||
}
|
||||
}
|
||||
|
||||
if ( cspReport.length !== 0 ) {
|
||||
cspDirectives = cspReport.join(',');
|
||||
i = headerIndexFromName('content-security-policy-report-only', headers);
|
||||
if ( i !== -1 ) {
|
||||
headers[i].value += ',' + cspDirectives;
|
||||
} else {
|
||||
headers.push({
|
||||
name: 'Content-Security-Policy-Report-Only',
|
||||
value: cspDirectives
|
||||
});
|
||||
let cspRight = cspReport.join(', ');
|
||||
let cspTotal = cspRight;
|
||||
if ( cantMergeCSPHeaders ) {
|
||||
let i = headerIndexFromName(
|
||||
'content-security-policy-report-only',
|
||||
headers
|
||||
);
|
||||
if ( i !== -1 ) {
|
||||
cspTotal = headers[i].value.trim() + ', ' + cspTotal;
|
||||
headers.splice(i, 1);
|
||||
}
|
||||
}
|
||||
headers.push({
|
||||
name: 'Content-Security-Policy-Report-Only',
|
||||
value: cspTotal
|
||||
});
|
||||
}
|
||||
|
||||
return { responseHeaders: headers };
|
||||
|
@ -391,6 +411,25 @@ var onHeadersReceived = function(details) {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
// https://github.com/gorhill/uMatrix/issues/967#issuecomment-373002011
|
||||
// This can be removed once Firefox 60 ESR is released.
|
||||
var cantMergeCSPHeaders = (function() {
|
||||
if (
|
||||
self.browser instanceof Object &&
|
||||
typeof self.browser.runtime.getBrowserInfo === 'function'
|
||||
) {
|
||||
self.browser.runtime.getBrowserInfo().then(function(info) {
|
||||
cantMergeCSPHeaders =
|
||||
info.vendor === 'Mozilla' &&
|
||||
info.name === 'Firefox' &&
|
||||
parseInt(info.version, 10) < 59;
|
||||
});
|
||||
}
|
||||
return false;
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var cspNoWorkerInit = function() {
|
||||
if ( vAPI.webextFlavor === undefined ) {
|
||||
return "child-src 'none'; frame-src data: blob: *; report-uri about:blank";
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uMatrix - a Chromium browser extension to block requests.
|
||||
Copyright (C) 2014-2017 Raymond Hill
|
||||
Copyright (C) 2014-2018 Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -19,7 +19,7 @@
|
|||
Home: https://github.com/gorhill/uMatrix
|
||||
*/
|
||||
|
||||
/* global uDom */
|
||||
/* global diff_match_patch, CodeMirror, uDom */
|
||||
|
||||
'use strict';
|
||||
|
||||
|
@ -29,11 +29,174 @@
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
// Switches before, rules after
|
||||
// Move to dashboard-common.js if needed
|
||||
|
||||
(function() {
|
||||
if ( document.querySelector('.vfill-available') === null ) { return; }
|
||||
var timer;
|
||||
var resize = function() {
|
||||
timer = undefined;
|
||||
let prect = document.body.getBoundingClientRect();
|
||||
let child = document.querySelector('.vfill-available');
|
||||
let crect = child.getBoundingClientRect();
|
||||
let height = Math.max(prect.bottom - crect.top, 80);
|
||||
child.style.height = height + 'px';
|
||||
};
|
||||
resize();
|
||||
window.addEventListener('resize', function() {
|
||||
if ( timer === undefined ) {
|
||||
timer = vAPI.setTimeout(resize, 66);
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var mergeView = new CodeMirror.MergeView(
|
||||
document.querySelector('.codeMirrorMergeContainer'),
|
||||
{
|
||||
allowEditingOriginals: true,
|
||||
connect: 'align',
|
||||
inputStyle: 'contenteditable',
|
||||
lineNumbers: true,
|
||||
lineWrapping: false,
|
||||
origLeft: '',
|
||||
revertButtons: true,
|
||||
value: ''
|
||||
}
|
||||
);
|
||||
mergeView.editor().setOption('styleActiveLine', true);
|
||||
mergeView.editor().setOption('lineNumbers', false);
|
||||
mergeView.leftOriginal().setOption('readOnly', 'nocursor');
|
||||
|
||||
var unfilteredRules = {
|
||||
orig: { doc: mergeView.leftOriginal(), rules: [] },
|
||||
edit: { doc: mergeView.editor(), rules: [] }
|
||||
};
|
||||
|
||||
var cleanEditToken = 0;
|
||||
var cleanEditText = '';
|
||||
|
||||
var differ;
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// Borrowed from...
|
||||
// https://github.com/codemirror/CodeMirror/blob/3e1bb5fff682f8f6cbfaef0e56c61d62403d4798/addon/search/search.js#L22
|
||||
// ... and modified as needed.
|
||||
|
||||
var updateOverlay = (function() {
|
||||
var reFilter;
|
||||
var mode = {
|
||||
token: function(stream) {
|
||||
if ( reFilter !== undefined ) {
|
||||
reFilter.lastIndex = stream.pos;
|
||||
var match = reFilter.exec(stream.string);
|
||||
if ( match !== null ) {
|
||||
if ( match.index === stream.pos ) {
|
||||
stream.pos += match[0].length || 1;
|
||||
return 'searching';
|
||||
}
|
||||
stream.pos = match.index;
|
||||
return;
|
||||
}
|
||||
}
|
||||
stream.skipToEnd();
|
||||
}
|
||||
};
|
||||
return function(filter) {
|
||||
reFilter = typeof filter === 'string' && filter !== '' ?
|
||||
new RegExp(filter.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'gi') :
|
||||
undefined;
|
||||
return mode;
|
||||
};
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// Incrementally update text in a CodeMirror editor for best user experience:
|
||||
// - Scroll position preserved
|
||||
// - Minimum amount of text updated
|
||||
|
||||
var rulesToDoc = function(clearHistory) {
|
||||
for ( var key in unfilteredRules ) {
|
||||
if ( unfilteredRules.hasOwnProperty(key) === false ) { continue; }
|
||||
var doc = unfilteredRules[key].doc;
|
||||
var rules = filterRules(key);
|
||||
if ( doc.lineCount() === 1 && doc.getValue() === '' || rules.length === 0 ) {
|
||||
doc.setValue(rules.length !== 0 ? rules.join('\n') : '');
|
||||
continue;
|
||||
}
|
||||
if ( differ === undefined ) { differ = new diff_match_patch(); }
|
||||
var beforeText = doc.getValue();
|
||||
var afterText = rules.join('\n');
|
||||
var diffs = differ.diff_main(beforeText, afterText);
|
||||
doc.startOperation();
|
||||
var i = diffs.length,
|
||||
iedit = beforeText.length;
|
||||
while ( i-- ) {
|
||||
var diff = diffs[i];
|
||||
if ( diff[0] === 0 ) {
|
||||
iedit -= diff[1].length;
|
||||
continue;
|
||||
}
|
||||
var end = doc.posFromIndex(iedit);
|
||||
if ( diff[0] === 1 ) {
|
||||
doc.replaceRange(diff[1], end, end);
|
||||
continue;
|
||||
}
|
||||
/* diff[0] === -1 */
|
||||
iedit -= diff[1].length;
|
||||
var beg = doc.posFromIndex(iedit);
|
||||
doc.replaceRange('', beg, end);
|
||||
}
|
||||
doc.endOperation();
|
||||
}
|
||||
cleanEditText = mergeView.editor().getValue().trim();
|
||||
cleanEditToken = mergeView.editor().changeGeneration();
|
||||
if ( clearHistory ) {
|
||||
mergeView.editor().clearHistory();
|
||||
}
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var filterRules = function(key) {
|
||||
var rules = unfilteredRules[key].rules;
|
||||
var filter = uDom('#ruleFilter input').val();
|
||||
if ( filter !== '' ) {
|
||||
rules = rules.slice();
|
||||
var i = rules.length;
|
||||
while ( i-- ) {
|
||||
if ( rules[i].indexOf(filter) === -1 ) {
|
||||
rules.splice(i, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
return rules;
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var renderRules = (function() {
|
||||
var firstVisit = true;
|
||||
|
||||
return function(details) {
|
||||
unfilteredRules.orig.rules = details.permanentRules.sort(directiveSort);
|
||||
unfilteredRules.edit.rules = details.temporaryRules.sort(directiveSort);
|
||||
rulesToDoc(firstVisit);
|
||||
if ( firstVisit ) {
|
||||
firstVisit = false;
|
||||
mergeView.editor().execCommand('goNextDiff');
|
||||
}
|
||||
onTextChanged(true);
|
||||
};
|
||||
})();
|
||||
|
||||
// Switches before, rules after
|
||||
var directiveSort = function(a, b) {
|
||||
var aIsSwitch = a.indexOf(':') !== -1;
|
||||
var bIsSwitch = b.indexOf(':') !== -1;
|
||||
var aIsSwitch = a.indexOf(': ') !== -1;
|
||||
var bIsSwitch = b.indexOf(': ') !== -1;
|
||||
if ( aIsSwitch === bIsSwitch ) {
|
||||
return a.localeCompare(b);
|
||||
}
|
||||
|
@ -42,72 +205,49 @@ var directiveSort = function(a, b) {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
var processUserRules = function(response) {
|
||||
var rules, rule, i;
|
||||
var allRules = {};
|
||||
var permanentRules = {};
|
||||
var temporaryRules = {};
|
||||
var onLeft, onRight;
|
||||
var applyDiff = function(permanent, toAdd, toRemove) {
|
||||
vAPI.messaging.send(
|
||||
'user-rules.js',
|
||||
{
|
||||
what: 'modifyRuleset',
|
||||
permanent: permanent,
|
||||
toAdd: toAdd,
|
||||
toRemove: toRemove
|
||||
},
|
||||
renderRules
|
||||
);
|
||||
};
|
||||
|
||||
rules = response.permanentRules.split(/\n+/);
|
||||
i = rules.length;
|
||||
while ( i-- ) {
|
||||
rule = rules[i].trim();
|
||||
if ( rule.length !== 0 ) {
|
||||
permanentRules[rule] = allRules[rule] = true;
|
||||
}
|
||||
/******************************************************************************/
|
||||
|
||||
// CodeMirror quirk: sometimes fromStart.ch and/or toStart.ch is undefined.
|
||||
// When this happens, use 0.
|
||||
|
||||
mergeView.options.revertChunk = function(
|
||||
mv,
|
||||
from, fromStart, fromEnd,
|
||||
to, toStart, toEnd
|
||||
) {
|
||||
// https://github.com/gorhill/uBlock/issues/3611
|
||||
if ( document.body.getAttribute('dir') === 'rtl' ) {
|
||||
var tmp;
|
||||
tmp = from; from = to; to = tmp;
|
||||
tmp = fromStart; fromStart = toStart; toStart = tmp;
|
||||
tmp = fromEnd; fromEnd = toEnd; toEnd = tmp;
|
||||
}
|
||||
rules = response.temporaryRules.split(/\n+/);
|
||||
i = rules.length;
|
||||
while ( i-- ) {
|
||||
rule = rules[i].trim();
|
||||
if ( rule.length !== 0 ) {
|
||||
temporaryRules[rule] = allRules[rule] = true;
|
||||
}
|
||||
}
|
||||
|
||||
var permanentList = document.createDocumentFragment(),
|
||||
temporaryList = document.createDocumentFragment(),
|
||||
li;
|
||||
|
||||
rules = Object.keys(allRules).sort(directiveSort);
|
||||
for ( i = 0; i < rules.length; i++ ) {
|
||||
rule = rules[i];
|
||||
onLeft = permanentRules.hasOwnProperty(rule);
|
||||
onRight = temporaryRules.hasOwnProperty(rule);
|
||||
if ( onLeft && onRight ) {
|
||||
li = document.createElement('li');
|
||||
li.textContent = rule;
|
||||
permanentList.appendChild(li);
|
||||
li = document.createElement('li');
|
||||
li.textContent = rule;
|
||||
temporaryList.appendChild(li);
|
||||
} else if ( onLeft ) {
|
||||
li = document.createElement('li');
|
||||
li.textContent = rule;
|
||||
permanentList.appendChild(li);
|
||||
li = document.createElement('li');
|
||||
li.textContent = rule;
|
||||
li.className = 'notRight toRemove';
|
||||
temporaryList.appendChild(li);
|
||||
} else if ( onRight ) {
|
||||
li = document.createElement('li');
|
||||
li.textContent = '\xA0';
|
||||
permanentList.appendChild(li);
|
||||
li = document.createElement('li');
|
||||
li.textContent = rule;
|
||||
li.className = 'notLeft';
|
||||
temporaryList.appendChild(li);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: build incrementally.
|
||||
|
||||
uDom('#diff > .left > ul > li').remove();
|
||||
document.querySelector('#diff > .left > ul').appendChild(permanentList);
|
||||
uDom('#diff > .right > ul > li').remove();
|
||||
document.querySelector('#diff > .right > ul').appendChild(temporaryList);
|
||||
uDom('#diff').toggleClass('dirty', response.temporaryRules !== response.permanentRules);
|
||||
if ( typeof fromStart.ch !== 'number' ) { fromStart.ch = 0; }
|
||||
if ( fromEnd.ch !== 0 ) { fromEnd.line += 1; }
|
||||
var toAdd = from.getRange(
|
||||
{ line: fromStart.line, ch: 0 },
|
||||
{ line: fromEnd.line, ch: 0 }
|
||||
);
|
||||
if ( typeof toStart.ch !== 'number' ) { toStart.ch = 0; }
|
||||
if ( toEnd.ch !== 0 ) { toEnd.line += 1; }
|
||||
var toRemove = to.getRange(
|
||||
{ line: toStart.line, ch: 0 },
|
||||
{ line: toEnd.line, ch: 0 }
|
||||
);
|
||||
applyDiff(from === mv.editor(), toAdd, toRemove);
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
@ -117,9 +257,7 @@ var processUserRules = function(response) {
|
|||
|
||||
var fromRequestPolicy = function(content) {
|
||||
var matches = /\[origins-to-destinations\]([^\[]+)/.exec(content);
|
||||
if ( matches === null || matches.length !== 2 ) {
|
||||
return;
|
||||
}
|
||||
if ( matches === null || matches.length !== 2 ) { return; }
|
||||
return matches[1].trim()
|
||||
.replace(/\|/g, ' ')
|
||||
.replace(/\n/g, ' * allow\n');
|
||||
|
@ -153,12 +291,8 @@ var fromNoScript = function(content) {
|
|||
var directive, matches;
|
||||
while ( i-- ) {
|
||||
directive = directives[i].trim();
|
||||
if ( directive === '' ) {
|
||||
continue;
|
||||
}
|
||||
if ( reBad.test(directive) ) {
|
||||
continue;
|
||||
}
|
||||
if ( directive === '' ) { continue; }
|
||||
if ( reBad.test(directive) ) { continue; }
|
||||
matches = reURL.exec(directive);
|
||||
if ( matches !== null ) {
|
||||
directive = matches[1];
|
||||
|
@ -185,16 +319,10 @@ var handleImportFilePicker = function() {
|
|||
}
|
||||
}
|
||||
if ( this.result === '' ) { return; }
|
||||
var request = {
|
||||
'what': 'setUserRules',
|
||||
'temporaryRules': rulesFromHTML('#diff .right li') + '\n' + result
|
||||
};
|
||||
vAPI.messaging.send('user-rules.js', request, processUserRules);
|
||||
applyDiff(false, result, '');
|
||||
};
|
||||
var file = this.files[0];
|
||||
if ( file === undefined || file.name === '' ) {
|
||||
return;
|
||||
}
|
||||
if ( file === undefined || file.name === '' ) { return; }
|
||||
if ( file.type.indexOf('text') !== 0 && file.type !== 'application/json') {
|
||||
return;
|
||||
}
|
||||
|
@ -218,121 +346,174 @@ var startImportFilePicker = function() {
|
|||
|
||||
function exportUserRulesToFile() {
|
||||
vAPI.download({
|
||||
'url': 'data:text/plain,' + encodeURIComponent(rulesFromHTML('#diff .left li') + '\n'),
|
||||
'filename': uDom('[data-i18n="userRulesDefaultFileName"]').text()
|
||||
url: 'data:text/plain,' + encodeURIComponent(
|
||||
mergeView.leftOriginal().getValue().trim() + '\n'
|
||||
),
|
||||
filename: uDom('[data-i18n="userRulesDefaultFileName"]').text()
|
||||
});
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var rulesFromHTML = function(selector) {
|
||||
var rules = [];
|
||||
var lis = uDom(selector);
|
||||
var li;
|
||||
for ( var i = 0; i < lis.length; i++ ) {
|
||||
li = lis.at(i);
|
||||
if ( li.hasClassName('toRemove') ) {
|
||||
rules.push('');
|
||||
var onFilterChanged = (function() {
|
||||
var timer,
|
||||
overlay = null,
|
||||
last = '';
|
||||
|
||||
var process = function() {
|
||||
timer = undefined;
|
||||
if ( mergeView.editor().isClean(cleanEditToken) === false ) { return; }
|
||||
var filter = uDom('#ruleFilter input').val();
|
||||
if ( filter === last ) { return; }
|
||||
last = filter;
|
||||
if ( overlay !== null ) {
|
||||
mergeView.leftOriginal().removeOverlay(overlay);
|
||||
mergeView.editor().removeOverlay(overlay);
|
||||
overlay = null;
|
||||
}
|
||||
if ( filter !== '' ) {
|
||||
overlay = updateOverlay(filter);
|
||||
mergeView.leftOriginal().addOverlay(overlay);
|
||||
mergeView.editor().addOverlay(overlay);
|
||||
}
|
||||
rulesToDoc(true);
|
||||
};
|
||||
|
||||
return function() {
|
||||
if ( timer !== undefined ) { clearTimeout(timer); }
|
||||
timer = vAPI.setTimeout(process, 773);
|
||||
};
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var onTextChanged = (function() {
|
||||
var timer;
|
||||
|
||||
var process = function(now) {
|
||||
timer = undefined;
|
||||
var isClean = mergeView.editor().isClean(cleanEditToken);
|
||||
var diff = document.getElementById('diff');
|
||||
if (
|
||||
now &&
|
||||
isClean === false &&
|
||||
mergeView.editor().getValue().trim() === cleanEditText
|
||||
) {
|
||||
cleanEditToken = mergeView.editor().changeGeneration();
|
||||
isClean = true;
|
||||
}
|
||||
diff.classList.toggle('editing', isClean === false);
|
||||
diff.classList.toggle('dirty', mergeView.leftChunks().length !== 0);
|
||||
var input = document.querySelector('#ruleFilter input');
|
||||
if ( isClean ) {
|
||||
input.removeAttribute('disabled');
|
||||
CodeMirror.commands.save = undefined;
|
||||
} else {
|
||||
rules.push(li.text());
|
||||
input.setAttribute('disabled', '');
|
||||
CodeMirror.commands.save = editSaveHandler;
|
||||
}
|
||||
};
|
||||
|
||||
return function(now) {
|
||||
if ( timer !== undefined ) { clearTimeout(timer); }
|
||||
timer = now ? process(now) : vAPI.setTimeout(process, 57);
|
||||
};
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var revertAllHandler = function() {
|
||||
var toAdd = [], toRemove = [];
|
||||
var left = mergeView.leftOriginal(),
|
||||
edit = mergeView.editor();
|
||||
for ( var chunk of mergeView.leftChunks() ) {
|
||||
var addedLines = left.getRange(
|
||||
{ line: chunk.origFrom, ch: 0 },
|
||||
{ line: chunk.origTo, ch: 0 }
|
||||
);
|
||||
var removedLines = edit.getRange(
|
||||
{ line: chunk.editFrom, ch: 0 },
|
||||
{ line: chunk.editTo, ch: 0 }
|
||||
);
|
||||
toAdd.push(addedLines.trim());
|
||||
toRemove.push(removedLines.trim());
|
||||
}
|
||||
applyDiff(false, toAdd.join('\n'), toRemove.join('\n'));
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var commitAllHandler = function() {
|
||||
var toAdd = [], toRemove = [];
|
||||
var left = mergeView.leftOriginal(),
|
||||
edit = mergeView.editor();
|
||||
for ( var chunk of mergeView.leftChunks() ) {
|
||||
var addedLines = edit.getRange(
|
||||
{ line: chunk.editFrom, ch: 0 },
|
||||
{ line: chunk.editTo, ch: 0 }
|
||||
);
|
||||
var removedLines = left.getRange(
|
||||
{ line: chunk.origFrom, ch: 0 },
|
||||
{ line: chunk.origTo, ch: 0 }
|
||||
);
|
||||
toAdd.push(addedLines.trim());
|
||||
toRemove.push(removedLines.trim());
|
||||
}
|
||||
applyDiff(true, toAdd.join('\n'), toRemove.join('\n'));
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var editSaveHandler = function() {
|
||||
var editor = mergeView.editor();
|
||||
var editText = editor.getValue().trim();
|
||||
if ( editText === cleanEditText ) {
|
||||
onTextChanged(true);
|
||||
return;
|
||||
}
|
||||
if ( differ === undefined ) { differ = new diff_match_patch(); }
|
||||
var toAdd = [], toRemove = [];
|
||||
var diffs = differ.diff_main(cleanEditText, editText);
|
||||
for ( var diff of diffs ) {
|
||||
if ( diff[0] === 1 ) {
|
||||
toAdd.push(diff[1]);
|
||||
} else if ( diff[0] === -1 ) {
|
||||
toRemove.push(diff[1]);
|
||||
}
|
||||
}
|
||||
return rules.join('\n');
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var revertHandler = function() {
|
||||
var request = {
|
||||
'what': 'setUserRules',
|
||||
'temporaryRules': rulesFromHTML('#diff .left li')
|
||||
};
|
||||
vAPI.messaging.send('user-rules.js', request, processUserRules);
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var commitHandler = function() {
|
||||
var request = {
|
||||
'what': 'setUserRules',
|
||||
'permanentRules': rulesFromHTML('#diff .right li')
|
||||
};
|
||||
vAPI.messaging.send('user-rules.js', request, processUserRules);
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var editStartHandler = function() {
|
||||
uDom('#diff .right textarea').val(rulesFromHTML('#diff .right li'));
|
||||
var parent = uDom(this).ancestors('#diff');
|
||||
parent.toggleClass('edit', true);
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var editStopHandler = function() {
|
||||
var parent = uDom(this).ancestors('#diff');
|
||||
parent.toggleClass('edit', false);
|
||||
var request = {
|
||||
'what': 'setUserRules',
|
||||
'temporaryRules': uDom('#diff .right textarea').val()
|
||||
};
|
||||
vAPI.messaging.send('user-rules.js', request, processUserRules);
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var editCancelHandler = function() {
|
||||
var parent = uDom(this).ancestors('#diff');
|
||||
parent.toggleClass('edit', false);
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var temporaryRulesToggler = function() {
|
||||
var li = uDom(this);
|
||||
li.toggleClass('toRemove');
|
||||
var request = {
|
||||
'what': 'setUserRules',
|
||||
'temporaryRules': rulesFromHTML('#diff .right li')
|
||||
};
|
||||
vAPI.messaging.send('user-rules.js', request, processUserRules);
|
||||
applyDiff(false, toAdd.join(''), toRemove.join(''));
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
self.cloud.onPush = function() {
|
||||
return rulesFromHTML('#diff .left li');
|
||||
return mergeView.leftOriginal().getValue().trim();
|
||||
};
|
||||
|
||||
self.cloud.onPull = function(data, append) {
|
||||
if ( typeof data !== 'string' ) { return; }
|
||||
if ( append ) {
|
||||
data = rulesFromHTML('#diff .right li') + '\n' + data;
|
||||
}
|
||||
var request = {
|
||||
'what': 'setUserRules',
|
||||
'temporaryRules': data
|
||||
};
|
||||
vAPI.messaging.send('user-rules.js', request, processUserRules);
|
||||
applyDiff(
|
||||
false,
|
||||
data,
|
||||
append ? '' : mergeView.editor().getValue().trim()
|
||||
);
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
uDom.onLoad(function() {
|
||||
// Handle user interaction
|
||||
uDom('#importButton').on('click', startImportFilePicker);
|
||||
uDom('#importFilePicker').on('change', handleImportFilePicker);
|
||||
uDom('#exportButton').on('click', exportUserRulesToFile);
|
||||
uDom('#revertButton').on('click', revertHandler);
|
||||
uDom('#commitButton').on('click', commitHandler);
|
||||
uDom('#editEnterButton').on('click', editStartHandler);
|
||||
uDom('#editStopButton').on('click', editStopHandler);
|
||||
uDom('#editCancelButton').on('click', editCancelHandler);
|
||||
uDom('#diff > .right > ul').on('click', 'li', temporaryRulesToggler);
|
||||
// Handle user interaction
|
||||
uDom('#exportButton').on('click', exportUserRulesToFile);
|
||||
uDom('#revertButton').on('click', revertAllHandler);
|
||||
uDom('#commitButton').on('click', commitAllHandler);
|
||||
uDom('#importButton').on('click', startImportFilePicker);
|
||||
uDom('#importFilePicker').on('change', handleImportFilePicker);
|
||||
uDom('#editSaveButton').on('click', editSaveHandler);
|
||||
uDom('#ruleFilter input').on('input', onFilterChanged);
|
||||
|
||||
vAPI.messaging.send('user-rules.js', { what: 'getUserRules' }, processUserRules);
|
||||
});
|
||||
// https://groups.google.com/forum/#!topic/codemirror/UQkTrt078Vs
|
||||
mergeView.editor().on('updateDiff', function() { onTextChanged(); });
|
||||
|
||||
vAPI.messaging.send('user-rules.js', { what: 'getRuleset' }, renderRules);
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
|
21
src/lib/codemirror/LICENSE
Normal file
21
src/lib/codemirror/LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (C) 2017 by Marijn Haverbeke <marijnh@gmail.com> and others
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
35
src/lib/codemirror/README.md
Normal file
35
src/lib/codemirror/README.md
Normal file
|
@ -0,0 +1,35 @@
|
|||
# CodeMirror
|
||||
[![Build Status](https://travis-ci.org/codemirror/CodeMirror.svg)](https://travis-ci.org/codemirror/CodeMirror)
|
||||
[![NPM version](https://img.shields.io/npm/v/codemirror.svg)](https://www.npmjs.org/package/codemirror)
|
||||
[![Join the chat at https://gitter.im/codemirror/CodeMirror](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/codemirror/CodeMirror)
|
||||
[Funding status: ![maintainer happiness](https://marijnhaverbeke.nl/fund/status_s.png?again)](https://marijnhaverbeke.nl/fund/)
|
||||
|
||||
CodeMirror is a versatile text editor implemented in JavaScript for
|
||||
the browser. It is specialized for editing code, and comes with over
|
||||
100 language modes and various addons that implement more advanced
|
||||
editing functionality. Every language comes with fully-featured code
|
||||
and syntax highlighting to help with reading and editing complex code.
|
||||
|
||||
A rich programming API and a CSS theming system are available for
|
||||
customizing CodeMirror to fit your application, and extending it with
|
||||
new functionality.
|
||||
|
||||
You can find more information (and the
|
||||
[manual](http://codemirror.net/doc/manual.html)) on the [project
|
||||
page](http://codemirror.net). For questions and discussion, use the
|
||||
[discussion forum](https://discuss.codemirror.net/).
|
||||
|
||||
See
|
||||
[CONTRIBUTING.md](https://github.com/codemirror/CodeMirror/blob/master/CONTRIBUTING.md)
|
||||
for contributing guidelines.
|
||||
|
||||
The CodeMirror community aims to be welcoming to everybody. We use the
|
||||
[Contributor Covenant
|
||||
(1.1)](http://contributor-covenant.org/version/1/1/0/) as our code of
|
||||
conduct.
|
||||
|
||||
### Quickstart
|
||||
|
||||
To build the project, make sure you have Node.js installed (at least version 6)
|
||||
and then `npm install`. To run, just open `index.html` in your
|
||||
browser (you don't need to run a webserver). Run the tests with `npm test`.
|
119
src/lib/codemirror/addon/merge/merge.css
vendored
Normal file
119
src/lib/codemirror/addon/merge/merge.css
vendored
Normal file
|
@ -0,0 +1,119 @@
|
|||
.CodeMirror-merge {
|
||||
position: relative;
|
||||
border: 1px solid #ddd;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
.CodeMirror-merge, .CodeMirror-merge .CodeMirror {
|
||||
height: 350px;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-2pane .CodeMirror-merge-pane { width: 47%; }
|
||||
.CodeMirror-merge-2pane .CodeMirror-merge-gap { width: 6%; }
|
||||
.CodeMirror-merge-3pane .CodeMirror-merge-pane { width: 31%; }
|
||||
.CodeMirror-merge-3pane .CodeMirror-merge-gap { width: 3.5%; }
|
||||
|
||||
.CodeMirror-merge-pane {
|
||||
display: inline-block;
|
||||
white-space: normal;
|
||||
vertical-align: top;
|
||||
}
|
||||
.CodeMirror-merge-pane-rightmost {
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-gap {
|
||||
z-index: 2;
|
||||
display: inline-block;
|
||||
height: 100%;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
border-left: 1px solid #ddd;
|
||||
border-right: 1px solid #ddd;
|
||||
position: relative;
|
||||
background: #f8f8f8;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-scrolllock-wrap {
|
||||
position: absolute;
|
||||
bottom: 0; left: 50%;
|
||||
}
|
||||
.CodeMirror-merge-scrolllock {
|
||||
position: relative;
|
||||
left: -50%;
|
||||
cursor: pointer;
|
||||
color: #555;
|
||||
line-height: 1;
|
||||
}
|
||||
.CodeMirror-merge-scrolllock:after {
|
||||
content: "\21db\00a0\00a0\21da";
|
||||
}
|
||||
.CodeMirror-merge-scrolllock.CodeMirror-merge-scrolllock-enabled:after {
|
||||
content: "\21db\21da";
|
||||
}
|
||||
|
||||
.CodeMirror-merge-copybuttons-left, .CodeMirror-merge-copybuttons-right {
|
||||
position: absolute;
|
||||
left: 0; top: 0;
|
||||
right: 0; bottom: 0;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-copy {
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
color: #44c;
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-copy-reverse {
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
color: #44c;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-copybuttons-left .CodeMirror-merge-copy { left: 2px; }
|
||||
.CodeMirror-merge-copybuttons-right .CodeMirror-merge-copy { right: 2px; }
|
||||
|
||||
.CodeMirror-merge-r-inserted, .CodeMirror-merge-l-inserted {
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12MwuCXy3+CWyH8GBgYGJgYkAABZbAQ9ELXurwAAAABJRU5ErkJggg==);
|
||||
background-position: bottom left;
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-r-deleted, .CodeMirror-merge-l-deleted {
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12M4Kyb2/6yY2H8GBgYGJgYkAABURgPz6Ks7wQAAAABJRU5ErkJggg==);
|
||||
background-position: bottom left;
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-r-chunk { background: #ffffe0; }
|
||||
.CodeMirror-merge-r-chunk-start { border-top: 1px solid #ee8; }
|
||||
.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #ee8; }
|
||||
.CodeMirror-merge-r-connect { fill: #ffffe0; stroke: #ee8; stroke-width: 1px; }
|
||||
|
||||
.CodeMirror-merge-l-chunk { background: #eef; }
|
||||
.CodeMirror-merge-l-chunk-start { border-top: 1px solid #88e; }
|
||||
.CodeMirror-merge-l-chunk-end { border-bottom: 1px solid #88e; }
|
||||
.CodeMirror-merge-l-connect { fill: #eef; stroke: #88e; stroke-width: 1px; }
|
||||
|
||||
.CodeMirror-merge-l-chunk.CodeMirror-merge-r-chunk { background: #dfd; }
|
||||
.CodeMirror-merge-l-chunk-start.CodeMirror-merge-r-chunk-start { border-top: 1px solid #4e4; }
|
||||
.CodeMirror-merge-l-chunk-end.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #4e4; }
|
||||
|
||||
.CodeMirror-merge-collapsed-widget:before {
|
||||
content: "(...)";
|
||||
}
|
||||
.CodeMirror-merge-collapsed-widget {
|
||||
cursor: pointer;
|
||||
color: #88b;
|
||||
background: #eef;
|
||||
border: 1px solid #ddf;
|
||||
font-size: 90%;
|
||||
padding: 0 3px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.CodeMirror-merge-collapsed-line .CodeMirror-gutter-elt { display: none; }
|
1002
src/lib/codemirror/addon/merge/merge.js
vendored
Normal file
1002
src/lib/codemirror/addon/merge/merge.js
vendored
Normal file
File diff suppressed because it is too large
Load diff
72
src/lib/codemirror/addon/selection/active-line.js
vendored
Normal file
72
src/lib/codemirror/addon/selection/active-line.js
vendored
Normal file
|
@ -0,0 +1,72 @@
|
|||
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
||||
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
||||
|
||||
(function(mod) {
|
||||
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
||||
mod(require("../../lib/codemirror"));
|
||||
else if (typeof define == "function" && define.amd) // AMD
|
||||
define(["../../lib/codemirror"], mod);
|
||||
else // Plain browser env
|
||||
mod(CodeMirror);
|
||||
})(function(CodeMirror) {
|
||||
"use strict";
|
||||
var WRAP_CLASS = "CodeMirror-activeline";
|
||||
var BACK_CLASS = "CodeMirror-activeline-background";
|
||||
var GUTT_CLASS = "CodeMirror-activeline-gutter";
|
||||
|
||||
CodeMirror.defineOption("styleActiveLine", false, function(cm, val, old) {
|
||||
var prev = old == CodeMirror.Init ? false : old;
|
||||
if (val == prev) return
|
||||
if (prev) {
|
||||
cm.off("beforeSelectionChange", selectionChange);
|
||||
clearActiveLines(cm);
|
||||
delete cm.state.activeLines;
|
||||
}
|
||||
if (val) {
|
||||
cm.state.activeLines = [];
|
||||
updateActiveLines(cm, cm.listSelections());
|
||||
cm.on("beforeSelectionChange", selectionChange);
|
||||
}
|
||||
});
|
||||
|
||||
function clearActiveLines(cm) {
|
||||
for (var i = 0; i < cm.state.activeLines.length; i++) {
|
||||
cm.removeLineClass(cm.state.activeLines[i], "wrap", WRAP_CLASS);
|
||||
cm.removeLineClass(cm.state.activeLines[i], "background", BACK_CLASS);
|
||||
cm.removeLineClass(cm.state.activeLines[i], "gutter", GUTT_CLASS);
|
||||
}
|
||||
}
|
||||
|
||||
function sameArray(a, b) {
|
||||
if (a.length != b.length) return false;
|
||||
for (var i = 0; i < a.length; i++)
|
||||
if (a[i] != b[i]) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
function updateActiveLines(cm, ranges) {
|
||||
var active = [];
|
||||
for (var i = 0; i < ranges.length; i++) {
|
||||
var range = ranges[i];
|
||||
var option = cm.getOption("styleActiveLine");
|
||||
if (typeof option == "object" && option.nonEmpty ? range.anchor.line != range.head.line : !range.empty())
|
||||
continue
|
||||
var line = cm.getLineHandleVisualStart(range.head.line);
|
||||
if (active[active.length - 1] != line) active.push(line);
|
||||
}
|
||||
if (sameArray(cm.state.activeLines, active)) return;
|
||||
cm.operation(function() {
|
||||
clearActiveLines(cm);
|
||||
for (var i = 0; i < active.length; i++) {
|
||||
cm.addLineClass(active[i], "wrap", WRAP_CLASS);
|
||||
cm.addLineClass(active[i], "background", BACK_CLASS);
|
||||
cm.addLineClass(active[i], "gutter", GUTT_CLASS);
|
||||
}
|
||||
cm.state.activeLines = active;
|
||||
});
|
||||
}
|
||||
|
||||
function selectionChange(cm, sel) {
|
||||
updateActiveLines(cm, sel.ranges);
|
||||
}
|
||||
});
|
346
src/lib/codemirror/lib/codemirror.css
vendored
Normal file
346
src/lib/codemirror/lib/codemirror.css
vendored
Normal file
|
@ -0,0 +1,346 @@
|
|||
/* BASICS */
|
||||
|
||||
.CodeMirror {
|
||||
/* Set height, width, borders, and global font properties here */
|
||||
font-family: monospace;
|
||||
height: 300px;
|
||||
color: black;
|
||||
direction: ltr;
|
||||
}
|
||||
|
||||
/* PADDING */
|
||||
|
||||
.CodeMirror-lines {
|
||||
padding: 4px 0; /* Vertical padding around content */
|
||||
}
|
||||
.CodeMirror pre {
|
||||
padding: 0 4px; /* Horizontal padding of content */
|
||||
}
|
||||
|
||||
.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
|
||||
background-color: white; /* The little square between H and V scrollbars */
|
||||
}
|
||||
|
||||
/* GUTTER */
|
||||
|
||||
.CodeMirror-gutters {
|
||||
border-right: 1px solid #ddd;
|
||||
background-color: #f7f7f7;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.CodeMirror-linenumbers {}
|
||||
.CodeMirror-linenumber {
|
||||
padding: 0 3px 0 5px;
|
||||
min-width: 20px;
|
||||
text-align: right;
|
||||
color: #999;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.CodeMirror-guttermarker { color: black; }
|
||||
.CodeMirror-guttermarker-subtle { color: #999; }
|
||||
|
||||
/* CURSOR */
|
||||
|
||||
.CodeMirror-cursor {
|
||||
border-left: 1px solid black;
|
||||
border-right: none;
|
||||
width: 0;
|
||||
}
|
||||
/* Shown when moving in bi-directional text */
|
||||
.CodeMirror div.CodeMirror-secondarycursor {
|
||||
border-left: 1px solid silver;
|
||||
}
|
||||
.cm-fat-cursor .CodeMirror-cursor {
|
||||
width: auto;
|
||||
border: 0 !important;
|
||||
background: #7e7;
|
||||
}
|
||||
.cm-fat-cursor div.CodeMirror-cursors {
|
||||
z-index: 1;
|
||||
}
|
||||
.cm-fat-cursor-mark {
|
||||
background-color: rgba(20, 255, 20, 0.5);
|
||||
-webkit-animation: blink 1.06s steps(1) infinite;
|
||||
-moz-animation: blink 1.06s steps(1) infinite;
|
||||
animation: blink 1.06s steps(1) infinite;
|
||||
}
|
||||
.cm-animate-fat-cursor {
|
||||
width: auto;
|
||||
border: 0;
|
||||
-webkit-animation: blink 1.06s steps(1) infinite;
|
||||
-moz-animation: blink 1.06s steps(1) infinite;
|
||||
animation: blink 1.06s steps(1) infinite;
|
||||
background-color: #7e7;
|
||||
}
|
||||
@-moz-keyframes blink {
|
||||
0% {}
|
||||
50% { background-color: transparent; }
|
||||
100% {}
|
||||
}
|
||||
@-webkit-keyframes blink {
|
||||
0% {}
|
||||
50% { background-color: transparent; }
|
||||
100% {}
|
||||
}
|
||||
@keyframes blink {
|
||||
0% {}
|
||||
50% { background-color: transparent; }
|
||||
100% {}
|
||||
}
|
||||
|
||||
/* Can style cursor different in overwrite (non-insert) mode */
|
||||
.CodeMirror-overwrite .CodeMirror-cursor {}
|
||||
|
||||
.cm-tab { display: inline-block; text-decoration: inherit; }
|
||||
|
||||
.CodeMirror-rulers {
|
||||
position: absolute;
|
||||
left: 0; right: 0; top: -50px; bottom: -20px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.CodeMirror-ruler {
|
||||
border-left: 1px solid #ccc;
|
||||
top: 0; bottom: 0;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
/* DEFAULT THEME */
|
||||
|
||||
.cm-s-default .cm-header {color: blue;}
|
||||
.cm-s-default .cm-quote {color: #090;}
|
||||
.cm-negative {color: #d44;}
|
||||
.cm-positive {color: #292;}
|
||||
.cm-header, .cm-strong {font-weight: bold;}
|
||||
.cm-em {font-style: italic;}
|
||||
.cm-link {text-decoration: underline;}
|
||||
.cm-strikethrough {text-decoration: line-through;}
|
||||
|
||||
.cm-s-default .cm-keyword {color: #708;}
|
||||
.cm-s-default .cm-atom {color: #219;}
|
||||
.cm-s-default .cm-number {color: #164;}
|
||||
.cm-s-default .cm-def {color: #00f;}
|
||||
.cm-s-default .cm-variable,
|
||||
.cm-s-default .cm-punctuation,
|
||||
.cm-s-default .cm-property,
|
||||
.cm-s-default .cm-operator {}
|
||||
.cm-s-default .cm-variable-2 {color: #05a;}
|
||||
.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;}
|
||||
.cm-s-default .cm-comment {color: #a50;}
|
||||
.cm-s-default .cm-string {color: #a11;}
|
||||
.cm-s-default .cm-string-2 {color: #f50;}
|
||||
.cm-s-default .cm-meta {color: #555;}
|
||||
.cm-s-default .cm-qualifier {color: #555;}
|
||||
.cm-s-default .cm-builtin {color: #30a;}
|
||||
.cm-s-default .cm-bracket {color: #997;}
|
||||
.cm-s-default .cm-tag {color: #170;}
|
||||
.cm-s-default .cm-attribute {color: #00c;}
|
||||
.cm-s-default .cm-hr {color: #999;}
|
||||
.cm-s-default .cm-link {color: #00c;}
|
||||
|
||||
.cm-s-default .cm-error {color: #f00;}
|
||||
.cm-invalidchar {color: #f00;}
|
||||
|
||||
.CodeMirror-composing { border-bottom: 2px solid; }
|
||||
|
||||
/* Default styles for common addons */
|
||||
|
||||
div.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;}
|
||||
div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;}
|
||||
.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }
|
||||
.CodeMirror-activeline-background {background: #e8f2ff;}
|
||||
|
||||
/* STOP */
|
||||
|
||||
/* The rest of this file contains styles related to the mechanics of
|
||||
the editor. You probably shouldn't touch them. */
|
||||
|
||||
.CodeMirror {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
background: white;
|
||||
}
|
||||
|
||||
.CodeMirror-scroll {
|
||||
overflow: scroll !important; /* Things will break if this is overridden */
|
||||
/* 30px is the magic margin used to hide the element's real scrollbars */
|
||||
/* See overflow: hidden in .CodeMirror */
|
||||
margin-bottom: -30px; margin-right: -30px;
|
||||
padding-bottom: 30px;
|
||||
height: 100%;
|
||||
outline: none; /* Prevent dragging from highlighting the element */
|
||||
position: relative;
|
||||
}
|
||||
.CodeMirror-sizer {
|
||||
position: relative;
|
||||
border-right: 30px solid transparent;
|
||||
}
|
||||
|
||||
/* The fake, visible scrollbars. Used to force redraw during scrolling
|
||||
before actual scrolling happens, thus preventing shaking and
|
||||
flickering artifacts. */
|
||||
.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
|
||||
position: absolute;
|
||||
z-index: 6;
|
||||
display: none;
|
||||
}
|
||||
.CodeMirror-vscrollbar {
|
||||
right: 0; top: 0;
|
||||
overflow-x: hidden;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
.CodeMirror-hscrollbar {
|
||||
bottom: 0; left: 0;
|
||||
overflow-y: hidden;
|
||||
overflow-x: scroll;
|
||||
}
|
||||
.CodeMirror-scrollbar-filler {
|
||||
right: 0; bottom: 0;
|
||||
}
|
||||
.CodeMirror-gutter-filler {
|
||||
left: 0; bottom: 0;
|
||||
}
|
||||
|
||||
.CodeMirror-gutters {
|
||||
position: absolute; left: 0; top: 0;
|
||||
min-height: 100%;
|
||||
z-index: 3;
|
||||
}
|
||||
.CodeMirror-gutter {
|
||||
white-space: normal;
|
||||
height: 100%;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
margin-bottom: -30px;
|
||||
}
|
||||
.CodeMirror-gutter-wrapper {
|
||||
position: absolute;
|
||||
z-index: 4;
|
||||
background: none !important;
|
||||
border: none !important;
|
||||
}
|
||||
.CodeMirror-gutter-background {
|
||||
position: absolute;
|
||||
top: 0; bottom: 0;
|
||||
z-index: 4;
|
||||
}
|
||||
.CodeMirror-gutter-elt {
|
||||
position: absolute;
|
||||
cursor: default;
|
||||
z-index: 4;
|
||||
}
|
||||
.CodeMirror-gutter-wrapper ::selection { background-color: transparent }
|
||||
.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }
|
||||
|
||||
.CodeMirror-lines {
|
||||
cursor: text;
|
||||
min-height: 1px; /* prevents collapsing before first draw */
|
||||
}
|
||||
.CodeMirror pre {
|
||||
/* Reset some styles that the rest of the page might have set */
|
||||
-moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
|
||||
border-width: 0;
|
||||
background: transparent;
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
margin: 0;
|
||||
white-space: pre;
|
||||
word-wrap: normal;
|
||||
line-height: inherit;
|
||||
color: inherit;
|
||||
z-index: 2;
|
||||
position: relative;
|
||||
overflow: visible;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
-webkit-font-variant-ligatures: contextual;
|
||||
font-variant-ligatures: contextual;
|
||||
}
|
||||
.CodeMirror-wrap pre {
|
||||
word-wrap: break-word;
|
||||
white-space: pre-wrap;
|
||||
word-break: normal;
|
||||
}
|
||||
|
||||
.CodeMirror-linebackground {
|
||||
position: absolute;
|
||||
left: 0; right: 0; top: 0; bottom: 0;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
.CodeMirror-linewidget {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
padding: 0.1px; /* Force widget margins to stay inside of the container */
|
||||
}
|
||||
|
||||
.CodeMirror-widget {}
|
||||
|
||||
.CodeMirror-rtl pre { direction: rtl; }
|
||||
|
||||
.CodeMirror-code {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
/* Force content-box sizing for the elements where we expect it */
|
||||
.CodeMirror-scroll,
|
||||
.CodeMirror-sizer,
|
||||
.CodeMirror-gutter,
|
||||
.CodeMirror-gutters,
|
||||
.CodeMirror-linenumber {
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
.CodeMirror-measure {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.CodeMirror-cursor {
|
||||
position: absolute;
|
||||
pointer-events: none;
|
||||
}
|
||||
.CodeMirror-measure pre { position: static; }
|
||||
|
||||
div.CodeMirror-cursors {
|
||||
visibility: hidden;
|
||||
position: relative;
|
||||
z-index: 3;
|
||||
}
|
||||
div.CodeMirror-dragcursors {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.CodeMirror-focused div.CodeMirror-cursors {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.CodeMirror-selected { background: #d9d9d9; }
|
||||
.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
|
||||
.CodeMirror-crosshair { cursor: crosshair; }
|
||||
.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }
|
||||
.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }
|
||||
|
||||
.cm-searching {
|
||||
background-color: #ffa;
|
||||
background-color: rgba(255, 255, 0, .4);
|
||||
}
|
||||
|
||||
/* Used to force a border model for a node */
|
||||
.cm-force-border { padding-right: .1px; }
|
||||
|
||||
@media print {
|
||||
/* Hide the cursor when printing */
|
||||
.CodeMirror div.CodeMirror-cursors {
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
/* See issue #2901 */
|
||||
.cm-tab-wrap-hack:after { content: ''; }
|
||||
|
||||
/* Help users use markselection to safely style text background */
|
||||
span.CodeMirror-selectedtext { background: none; }
|
9660
src/lib/codemirror/lib/codemirror.js
vendored
Normal file
9660
src/lib/codemirror/lib/codemirror.js
vendored
Normal file
File diff suppressed because it is too large
Load diff
34
src/lib/diff/README.md
Normal file
34
src/lib/diff/README.md
Normal file
|
@ -0,0 +1,34 @@
|
|||
# diff
|
||||
|
||||
implementation of myers diff algorithm
|
||||
|
||||
[![Build Status](https://travis-ci.org/Swatinem/diff.png?branch=master)](https://travis-ci.org/Swatinem/diff)
|
||||
[![Coverage Status](https://coveralls.io/repos/Swatinem/diff/badge.png?branch=master)](https://coveralls.io/r/Swatinem/diff)
|
||||
[![Dependency Status](https://gemnasium.com/Swatinem/diff.png)](https://gemnasium.com/Swatinem/diff)
|
||||
|
||||
|
||||
This uses the [*An O(ND) Difference Algorithm and Its Variations*](http://www.xmailserver.org/diff2.pdf)
|
||||
Also see http://simplygenius.net/Article/DiffTutorial2 and
|
||||
http://www.mathertel.de/Diff/ViewSrc.aspx for more inspiration
|
||||
|
||||
## Installation
|
||||
|
||||
$ npm install diff
|
||||
$ component install Swatinem/diff
|
||||
|
||||
## Usage
|
||||
|
||||
### diff(a, b, [eql(a, b)])
|
||||
|
||||
Given two arrays (or array-likes, such as strings) `a` and `b` and an optional
|
||||
equal function `eql`, this will return an array with the following operations:
|
||||
* *nop* the element is in both arrays
|
||||
* *ins* the element is only in array `b` and will be inserted
|
||||
* *del* the element in only in array `a` and will be removed
|
||||
* *rep* the element from `a` will be replaced by the element from `b`.
|
||||
This is essentially the same as a del+ins
|
||||
|
||||
## License
|
||||
|
||||
LGPLv3
|
||||
|
207
src/lib/diff/swatinem_diff.js
Normal file
207
src/lib/diff/swatinem_diff.js
Normal file
|
@ -0,0 +1,207 @@
|
|||
/*******************************************************************************
|
||||
|
||||
Key portions of code below was borrowed from:
|
||||
https://github.com/Swatinem/diff
|
||||
|
||||
License is LGPL3 (thanks!) as per:
|
||||
https://github.com/Swatinem/diff/blob/b58391504759/README.md
|
||||
|
||||
I chose to pick this implementation over
|
||||
https://github.com/google/diff-match-patch as suggested by CodeMirror
|
||||
because:
|
||||
|
||||
- Code is clean and simple to read -- useful when unfamiliar with the diff
|
||||
algorithm, this makes changing the code easier if/when needed.
|
||||
|
||||
- Smaller -- diff_match_patch comes with an extended API most of which is
|
||||
of no use to the current project.
|
||||
- diff_match_patch uncompressed: 74.7 KB
|
||||
- Swatinem's diff uncompressed: 3.66 KB
|
||||
|
||||
- I can easily adapt Swatinem's diff to deal with arrays of strings, which
|
||||
is best suited for the current project -- it natively work with arrays.
|
||||
|
||||
I removed portions of code which are of no use for the current project.
|
||||
|
||||
I modified the diff script generator (Diff.prototype.editscript) since I
|
||||
need to generate a script which is compatible with the output of the
|
||||
diff_match_patch, as expected by CodeMirror.
|
||||
|
||||
**/
|
||||
|
||||
'use strict';
|
||||
|
||||
(function(context) {
|
||||
|
||||
// CodeMirror expect these globals:
|
||||
context.DIFF_INSERT = 1;
|
||||
context.DIFF_DELETE = -1;
|
||||
context.DIFF_EQUAL = 0;
|
||||
context.diff_match_patch = function(){};
|
||||
|
||||
context.diff_match_patch.prototype.diff_main = function(a, b) {
|
||||
if ( a === b ) { return [ [ 0, a ] ]; }
|
||||
var aa = a.match(/\n|[^\n]+\n?/g) || [];
|
||||
var bb = b.match(/\n|[^\n]+\n?/g) || [];
|
||||
var d = new Diff(aa, bb, eqlDefault);
|
||||
return d.editscript();
|
||||
};
|
||||
|
||||
function eqlDefault(a, b) { return a === b; }
|
||||
|
||||
function Diff(a, b, eql) {
|
||||
this.a = a;
|
||||
this.b = b;
|
||||
this.eql = eql;
|
||||
|
||||
this.moda = Array.apply(null, new Array(a.length)).map(true.valueOf, false);
|
||||
this.modb = Array.apply(null, new Array(b.length)).map(true.valueOf, false);
|
||||
|
||||
// just to save some allocations:
|
||||
this.down = {};
|
||||
this.up = {};
|
||||
|
||||
this.lcs(0, a.length, 0, b.length);
|
||||
}
|
||||
|
||||
Diff.prototype.editscript = function Diff_editscript() {
|
||||
var moda = this.moda, modb = this.modb;
|
||||
var astart = 0, aend = moda.length;
|
||||
var bstart = 0, bend = modb.length;
|
||||
var result = [];
|
||||
while (astart < aend || bstart < bend) {
|
||||
if (astart < aend && bstart < bend) {
|
||||
if (!moda[astart] && !modb[bstart]) {
|
||||
result.push([ 0, this.a[astart] ]);
|
||||
astart++; bstart++;
|
||||
continue;
|
||||
} else if (moda[astart] && modb[bstart]) {
|
||||
result.push([ -1, this.a[astart] ]);
|
||||
result.push([ 1, this.b[bstart] ]);
|
||||
astart++; bstart++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (astart < aend && (bstart >= bend || moda[astart])) {
|
||||
result.push([ -1, this.a[astart] ]);
|
||||
astart++;
|
||||
}
|
||||
if (bstart < bend && (astart >= aend || modb[bstart])) {
|
||||
result.push([ 1, this.b[bstart] ]);
|
||||
bstart++;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
Diff.prototype.lcs = function Diff_lcs(astart, aend, bstart, bend) {
|
||||
var a = this.a, b = this.b, eql = this.eql;
|
||||
// separate common head
|
||||
while (astart < aend && bstart < bend && eql(a[astart], b[bstart])) {
|
||||
astart++; bstart++;
|
||||
}
|
||||
// separate common tail
|
||||
while (astart < aend && bstart < bend && eql(a[aend - 1], b[bend - 1])) {
|
||||
aend--; bend--;
|
||||
}
|
||||
|
||||
if (astart === aend) {
|
||||
// only insertions
|
||||
while (bstart < bend) {
|
||||
this.modb[bstart] = true;
|
||||
bstart++;
|
||||
}
|
||||
} else if (bend === bstart) {
|
||||
// only deletions
|
||||
while (astart < aend) {
|
||||
this.moda[astart] = true;
|
||||
astart++;
|
||||
}
|
||||
} else {
|
||||
var snake = this.snake(astart, aend, bstart, bend);
|
||||
|
||||
this.lcs(astart, snake.x, bstart, snake.y);
|
||||
this.lcs(snake.u, aend, snake.v, bend);
|
||||
}
|
||||
};
|
||||
|
||||
Diff.prototype.snake = function Diff_snake(astart, aend, bstart, bend) {
|
||||
var a = this.a, b = this.b, eql = this.eql;
|
||||
|
||||
var N = aend - astart,
|
||||
M = bend - bstart;
|
||||
|
||||
var kdown = astart - bstart;
|
||||
var kup = aend - bend;
|
||||
|
||||
var delta = N - M;
|
||||
var deltaOdd = delta & 1;
|
||||
|
||||
var down = this.down;
|
||||
down[kdown + 1] = astart;
|
||||
var up = this.up;
|
||||
up[kup - 1] = aend;
|
||||
|
||||
var Dmax = (N + M + 1) / 2;
|
||||
for (var D = 0; D <= Dmax; D++) {
|
||||
var k, x, y;
|
||||
// forward path
|
||||
for (k = kdown - D; k <= kdown + D; k += 2) {
|
||||
if (k === kdown - D) {
|
||||
x = down[k + 1]; // down
|
||||
} else {
|
||||
x = down[k - 1] + 1; // right
|
||||
if ((k < kdown + D) && (down[k + 1] >= x)) {
|
||||
x = down[k + 1]; // down
|
||||
}
|
||||
}
|
||||
y = x - k;
|
||||
|
||||
while (x < aend && y < bend && eql(a[x], b[y])) {
|
||||
x++; y++; // diagonal
|
||||
}
|
||||
down[k] = x;
|
||||
|
||||
if (deltaOdd && (kup - D < k) && (k < kup + D) &&
|
||||
up[k] <= down[k]) {
|
||||
return {
|
||||
x: down[k],
|
||||
y: down[k] - k,
|
||||
u: up[k],
|
||||
v: up[k] - k,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// reverse path
|
||||
for (k = kup - D; k <= kup + D; k += 2) {
|
||||
if (k === kup + D) {
|
||||
x = up[k - 1]; // up
|
||||
} else {
|
||||
x = up[k + 1] - 1; // left
|
||||
if ((k > kup - D) && (up[k - 1] < x)) {
|
||||
x = up[k - 1]; // up
|
||||
}
|
||||
}
|
||||
y = x - k;
|
||||
|
||||
while (x > astart && y > bstart && eql(a[x - 1], b[y - 1])) {
|
||||
x--; y--; // diagonal
|
||||
}
|
||||
up[k] = x;
|
||||
|
||||
if (!deltaOdd && (kdown - D <= k) && (k <= kdown + D) &&
|
||||
up[k] <= down[k]) {
|
||||
return {
|
||||
x: down[k],
|
||||
y: down[k] - k,
|
||||
u: up[k],
|
||||
v: up[k] - k,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return Diff;
|
||||
})(self);
|
|
@ -19,9 +19,9 @@
|
|||
--><span class="scope" id="globalScope" data-scope="*" data-i18n-tip="matrixGlobalScopeTip"><span><span>∗</span></span></span>
|
||||
<button id="mtxSwitch_matrix-off" type="button" class="fa scopeRel tip-anchor-left" data-i18n-tip="matrixMtxButtonTip"><span class="badge"></span></button>
|
||||
<button id="buttonMtxSwitches" type="button" class="fa scopeRel" tabindex="-1" data-dropdown-menu="dropDownMenuSwitches"><span class="badge"></span></button>
|
||||
<button id="buttonRecipes" type="button" class="fa scopeRel tip-anchor-right" data-i18n-tip="matrixRecipesButtonTip" data-dropdown-menu="dropDownMenuRecipes"><span class="badge"></span></button>
|
||||
<button id="buttonPersist" type="button" class="fa scopeRel tip-anchor-left" data-i18n-tip="matrixPersistButtonTip"><span class="badge"></span></button>
|
||||
<button id="buttonRevertScope" type="button" class="fa scopeRel tip-anchor-left" tabindex="-1" data-i18n-tip="matrixRevertButtonTip"></button>
|
||||
<button id="buttonRecipes" type="button" class="fa scopeRel tip-anchor-right" data-i18n-tip="matrixRecipesButtonTip" data-dropdown-menu="dropDownMenuRecipes"><span class="badge"></span></button>
|
||||
</div>
|
||||
<div class="toolbar">
|
||||
<button id="buttonReload" type="button" class="fa tip-anchor-left" data-i18n-tip="matrixReloadButton"></button>
|
||||
|
@ -74,7 +74,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="dropDownMenuRecipes" class="dropdown-menu-capture">
|
||||
<div id="dropDownMenuRecipes" class="dropdown-menu-capture dropdown-menu-centered">
|
||||
<div class="dropdown-menu">
|
||||
<ul></ul>
|
||||
</div>
|
||||
|
@ -111,7 +111,7 @@
|
|||
</symbol>
|
||||
</svg>
|
||||
-->
|
||||
<li class="recipe"><div><span class="expander"></span><span class="name"></span><span class="fa committer"></span></div><div class="ruleset"></div></li>
|
||||
<li class="recipe"><div><span class="expander"></span><span class="name"></span><span class="fa importer" title="matrixRecipeImportTip"></span><span class="fa committer" title="matrixRecipeSaveTip"></span></div><div class="ruleset"></div></li>
|
||||
</div>
|
||||
|
||||
<script src="lib/punycode.js"></script>
|
||||
|
|
|
@ -1,12 +1,17 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>uMatrix — Your rules</title>
|
||||
<link rel="stylesheet" type="text/css" href="lib/codemirror/lib/codemirror.css">
|
||||
<link rel="stylesheet" type="text/css" href="lib/codemirror/addon/merge/merge.css">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="css/common.css">
|
||||
<link rel="stylesheet" type="text/css" href="css/dashboard-common.css">
|
||||
<link rel="stylesheet" type="text/css" href="css/cloud-ui.css">
|
||||
<link rel="stylesheet" type="text/css" href="css/user-rules.css">
|
||||
<link rel="stylesheet" type="text/css" href="css/codemirror.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
@ -15,30 +20,32 @@
|
|||
|
||||
<!-- <p data-i18n="userRulesFormatHint"></p> -->
|
||||
<div id="diff">
|
||||
<div class="pane left">
|
||||
<div>
|
||||
<h2 data-i18n="userRulesPermanentHeader"></h2>
|
||||
<div class="tools">
|
||||
<div class="ruleActions">
|
||||
<h3 data-i18n="userRulesPermanentHeader"></h3>
|
||||
<button type="button" id="exportButton" data-i18n="userRulesExport"></button>
|
||||
<button type="button" id="revertButton" data-i18n="userRulesRevert"></button>
|
||||
</div>
|
||||
<ul></ul>
|
||||
</div>
|
||||
<div class="pane right">
|
||||
<div>
|
||||
<h2 data-i18n="userRulesTemporaryHeader"></h2>
|
||||
<div class="ruleActions">
|
||||
<h3 data-i18n="userRulesTemporaryHeader"></h3>
|
||||
<button type="button" id="commitButton" data-i18n="userRulesCommit"></button>
|
||||
<button type="button" id="editEnterButton" data-i18n="userRulesEdit"></button>
|
||||
<button type="button" id="editStopButton" data-i18n="userRulesEditSave"></button>
|
||||
<button type="button" id="editCancelButton" data-i18n="userRulesEditDicard"></button>
|
||||
<button type="button" id="importButton" data-i18n="userRulesImport"></button>
|
||||
</div>
|
||||
<textarea spellcheck="false"></textarea>
|
||||
<ul></ul>
|
||||
<button type="button" id="editSaveButton" data-i18n="userRulesEditSave"></button>
|
||||
</div>
|
||||
<div id="ruleFilter"><span class="fa"></span> <input type="text" size="32"></div>
|
||||
</div>
|
||||
<div class="codeMirrorContainer codeMirrorMergeContainer vfill-available"></div>
|
||||
</div>
|
||||
|
||||
<input class="hidden" id="importFilePicker" type="file" accept="text/plain">
|
||||
<span class="hidden" data-i18n="userRulesDefaultFileName"></span>
|
||||
<div style="display: none;">
|
||||
<input id="importFilePicker" type="file" accept="text/plain">
|
||||
<span data-i18n="userRulesDefaultFileName"></span>
|
||||
</div>
|
||||
|
||||
<script src="lib/diff/swatinem_diff.js"></script>
|
||||
<script src="lib/codemirror/lib/codemirror.js"></script>
|
||||
<script src="lib/codemirror/addon/merge/merge.js"></script>
|
||||
<script src="lib/codemirror/addon/selection/active-line.js"></script>
|
||||
|
||||
<script src="js/vapi-common.js"></script>
|
||||
<script src="js/vapi-client.js"></script>
|
||||
|
|
|
@ -3,5 +3,5 @@
|
|||
# This script assumes a linux environment
|
||||
|
||||
echo "*** uMatrix(Chromium): Cleaning."
|
||||
rm -R ./dist/*
|
||||
rm -R ./dist/build
|
||||
echo "*** uMatrix(Chromium): Cleaned."
|
||||
|
|
Loading…
Reference in a new issue