aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/_locales/en/messages.json6
-rw-r--r--src/_locales/ru/messages.json8
-rw-r--r--src/_locales/sk/messages.json562
-rw-r--r--src/css/3p-filters.css16
-rw-r--r--src/css/popup.css9
-rw-r--r--src/img/browsericons/icon16-off.pngbin195 -> 0 bytes
-rw-r--r--src/img/browsericons/icon16-off.svg1
-rw-r--r--src/img/browsericons/icon16-off@2x.pngbin344 -> 0 bytes
-rw-r--r--src/img/browsericons/icon16.pngbin401 -> 0 bytes
-rw-r--r--src/img/browsericons/icon16.svg1
-rw-r--r--src/img/browsericons/icon16@2x.pngbin661 -> 0 bytes
-rw-r--r--src/img/browsericons/icon19-off.pngbin273 -> 0 bytes
-rw-r--r--src/img/browsericons/icon19.pngbin308 -> 0 bytes
-rw-r--r--src/img/browsericons/icon38-off.pngbin421 -> 0 bytes
-rw-r--r--src/img/browsericons/icon38.pngbin399 -> 0 bytes
-rw-r--r--src/img/icon_128.pngbin880 -> 938 bytes
-rw-r--r--src/img/icon_16.pngbin275 -> 527 bytes
-rw-r--r--src/img/ublock.svg103
-rw-r--r--src/js/3p-filters.js23
-rw-r--r--src/js/messaging.js3
-rw-r--r--src/js/popup.js15
-rw-r--r--src/js/subscriber.js3
-rw-r--r--src/js/tab.js2
-rw-r--r--src/js/udom.js23
24 files changed, 650 insertions, 125 deletions
diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json
index 145c33f..2cd88b5 100644
--- a/src/_locales/en/messages.json
+++ b/src/_locales/en/messages.json
@@ -557,15 +557,15 @@
},
"showDashboardButton":{
"message":"Show Dashboard",
- "description":"English: Show Dashboard"
+ "description":"Firefox/Fennec-specific: Show Dashboard"
},
"showNetworkLogButton":{
"message":"Show Network Request Log",
- "description":"English: Show Network Request Log"
+ "description":"Firefox/Fennec-specific: Show Network Request Log"
},
"fennecMenuItemBlockingOff": {
"message": "off",
- "description": "Appears as µBlock (off)"
+ "description": "Firefox-specific: appears as 'uBlock (off)'"
},
"dummy":{
"message":"This entry must be the last one",
diff --git a/src/_locales/ru/messages.json b/src/_locales/ru/messages.json
index f9fec71..eefd30e 100644
--- a/src/_locales/ru/messages.json
+++ b/src/_locales/ru/messages.json
@@ -32,7 +32,7 @@
"description":"appears as tab name in dashboard"
},
"statsPageName":{
- "message":"Журнал сетевых запросов µBlock",
+ "message":"µBlock — Журнал сетевых запросов",
"description":"Title for the network request log window"
},
"aboutPageName":{
@@ -408,7 +408,7 @@
"description":"English: dynamic rule syntax and full documentation."
},
"whitelistPrompt":{
- "message":"Ваш список доменов которые проигнорирует µBlock. Одна запись на строку. Некорректные записи будут тихо проигнорированы.",
+ "message":"Список доменов, которые проигнорирует µBlock. Одна запись на строку. Некорректные записи будут проигнорированы.",
"description":"English: Your list of host names for which uBlock will be disabled. One host name per line. Invalid host names will be silently ignored."
},
"whitelistImport":{
@@ -432,7 +432,7 @@
"description":"English: Enable the logging of network requests"
},
"logNetRequestsHelp":{
- "message":"Вы можете исследовать сведения о сетевых запросах, включив эту опцию. Журналирование сетевых запросов увеличивает расход памяти µBlock. Функция по умолчанию отключена, поскольку большинство пользователей не используют её.",
+ "message":"Вы можете проверить детали сетевых запросов, включив эту опцию. Журналирование сетевых запросов увеличивает расход памяти µBlock. Функция по умолчанию отключена, поскольку большинство пользователей не используют её.",
"description":"English: see _locales\/en\/messages.log"
},
"logBlockedRequestsHeader":{
@@ -520,7 +520,7 @@
"description":"Message to display when an error occurred during restore"
},
"aboutResetDataConfirm":{
- "message":"Все ваши настройки будут удалены, µBlock будет перезапущен. \n\nСбросить на настройки по умолчанию?",
+ "message":"Все ваши настройки будут удалены, µBlock будет перезапущен. \n\nВосстановить настройки по умолчанию?",
"description":"Message asking user to confirm reset"
},
"errorCantConnectTo":{
diff --git a/src/_locales/sk/messages.json b/src/_locales/sk/messages.json
new file mode 100644
index 0000000..53374e9
--- /dev/null
+++ b/src/_locales/sk/messages.json
@@ -0,0 +1,562 @@
+{
+ "extName":{
+ "message":"uBlock",
+ "description":"extension name."
+ },
+ "extShortDesc":{
+ "message":"Konečne efektívny blokovač, ktorý nezaťažuje CPU a pamäť.",
+ "description":"this will be in the chrome web store: must be 132 characters or less"
+ },
+ "dashboardName":{
+ "message":"uBlock — Ovládací panel",
+ "description":"English: uBlock — Dashboard"
+ },
+ "settingsPageName":{
+ "message":"Nastavenia",
+ "description":"appears as tab name in dashboard"
+ },
+ "3pPageName":{
+ "message":"Filtre tretích strán",
+ "description":"appears as tab name in dashboard"
+ },
+ "1pPageName":{
+ "message":"Moje filtre",
+ "description":"appears as tab name in dashboard"
+ },
+ "rulesPageName":{
+ "message":"Moje pravidlá",
+ "description":"appears as tab name in dashboard"
+ },
+ "whitelistPageName":{
+ "message":"Biela listina",
+ "description":"appears as tab name in dashboard"
+ },
+ "statsPageName":{
+ "message":"uBlock — Záznam sieťových požiadavok",
+ "description":"Title for the network request log window"
+ },
+ "aboutPageName":{
+ "message":"O doplnku",
+ "description":"appears as tab name in dashboard"
+ },
+ "popupPowerSwitchInfo":{
+ "message":"Kliknutie: zakázať\/povoliť uBlock pre túto stránku.\n\nCtrl+kliknutie: zakázať uBlock len pre túto stránku.",
+ "description":"English: Click: disable\/enable uBlock for this site.\n\nCtrl+click: disable uBlock only on this page."
+ },
+ "popupBlockedRequestPrompt":{
+ "message":"zablokované požiadavky",
+ "description":"English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt":{
+ "message":"na tejto stránke",
+ "description":"English: on this page"
+ },
+ "popupBlockedStats":{
+ "message":"{{count}} alebo {{percent}}%",
+ "description":"Example: 15 or 13%"
+ },
+ "popupBlockedSinceInstallPrompt":{
+ "message":"od inštalácie",
+ "description":"English: since install"
+ },
+ "popupOr":{
+ "message":"alebo",
+ "description":"English: or"
+ },
+ "popupTipDashboard":{
+ "message":"Kliknite sem pre otvorenie ovládacieho panela",
+ "description":"English: Click to open the dashboard"
+ },
+ "popupTipPicker":{
+ "message":"Prejsť do režimu výberu prvku",
+ "description":"English: Enter element picker mode"
+ },
+ "popupTipLog":{
+ "message":"Prejsť na záznam požiadaviek",
+ "description":"English: Go to request log"
+ },
+ "popupSiteInlineScriptEnabled":{
+ "message":"Inline <code>script<\/code> tags are <b>allowed<\/b> on this site",
+ "description":""
+ },
+ "popupSiteInlineScriptDisabled":{
+ "message":"Inline <code>script<\/code> tags are <b>blocked<\/b> on this site",
+ "description":""
+ },
+ "popupSite1pScriptEnabled":{
+ "message":"1st-party scripts are <b>allowed<\/b> on this site",
+ "description":""
+ },
+ "popupSite1pScriptDisabled":{
+ "message":"1st-party scripts are <b>blocked<\/b> on this site",
+ "description":""
+ },
+ "popupSite3pScriptEnabled":{
+ "message":"3rd-party scripts are <b>allowed<\/b> on this site",
+ "description":""
+ },
+ "popupSite3pScriptDisabled":{
+ "message":"3rd-party scripts are <b>blocked<\/b> on this site",
+ "description":""
+ },
+ "popupSite1pFrameEnabled":{
+ "message":"1st-party frames are <b>allowed<\/b> on this site",
+ "description":""
+ },
+ "popupSite1pFrameDisabled":{
+ "message":"1st-party frames are <b>blocked<\/b> on this site",
+ "description":""
+ },
+ "popupSite3pFrameEnabled":{
+ "message":"3rd-party frames are <b>allowed<\/b> on this site",
+ "description":""
+ },
+ "popupSite3pFrameDisabled":{
+ "message":"3rd-party frames are <b>blocked<\/b> on this site",
+ "description":""
+ },
+ "popupDefaultInlineScriptEnabled":{
+ "message":"Inline <code>script<\/code> tags are <b>allowed<\/b> everywhere by default",
+ "description":""
+ },
+ "popupDefaultInlineScriptDisabled":{
+ "message":"Inline <code>script<\/code> tags are <b>blocked<\/b> everywhere by default",
+ "description":""
+ },
+ "popupDefault1pScriptEnabled":{
+ "message":"1st-party scripts are <b>allowed<\/b> everywhere by default",
+ "description":""
+ },
+ "popupDefault1pScriptDisabled":{
+ "message":"1st-party scripts are <b>blocked<\/b> everywhere by default",
+ "description":""
+ },
+ "popupDefault3pScriptEnabled":{
+ "message":"3rd-party scripts are <b>allowed<\/b> everywhere by default",
+ "description":""
+ },
+ "popupDefault3pScriptDisabled":{
+ "message":"3rd-party scripts are <b>blocked<\/b> everywhere by default",
+ "description":""
+ },
+ "popupDefault1pFrameEnabled":{
+ "message":"1st-party frames are <b>allowed<\/b> everywhere by default",
+ "description":""
+ },
+ "popupDefault1pFrameDisabled":{
+ "message":"1st-party frames are <b>blocked<\/b> everywhere by default",
+ "description":""
+ },
+ "popupDefault3pFrameEnabled":{
+ "message":"3rd-party frames are <b>allowed<\/b> everywhere by default",
+ "description":""
+ },
+ "popupDefault3pFrameDisabled":{
+ "message":"3rd-party frames are <b>blocked<\/b> everywhere by default",
+ "description":""
+ },
+ "popupAnyRulePrompt":{
+ "message":"všetko",
+ "description":""
+ },
+ "popupImageRulePrompt":{
+ "message":"obrázky",
+ "description":""
+ },
+ "popup3pAnyRulePrompt":{
+ "message":"z tretej strany",
+ "description":""
+ },
+ "popupInlineScriptRulePrompt":{
+ "message":"vstavané skripty",
+ "description":""
+ },
+ "popup1pScriptRulePrompt":{
+ "message":"skripty prvej triedy",
+ "description":""
+ },
+ "popup3pScriptRulePrompt":{
+ "message":"skripty tretej triedy",
+ "description":""
+ },
+ "popup3pFrameRulePrompt":{
+ "message":"rámy tretej triedy",
+ "description":""
+ },
+ "popupHitDomainCountPrompt":{
+ "message":"pripojené domény",
+ "description":"appears in popup"
+ },
+ "popupHitDomainCount":{
+ "message":"{{count}} z {{total}}",
+ "description":"appears in popup"
+ },
+ "pickerCreate":{
+ "message":"Vytvoriť",
+ "description":"English: Create"
+ },
+ "pickerPick":{
+ "message":"Vybrať",
+ "description":"English: Pick"
+ },
+ "pickerQuit":{
+ "message":"Ukončiť",
+ "description":"English: Quit"
+ },
+ "pickerNetFilters":{
+ "message":"Sieťové filtre",
+ "description":"English: Net filters"
+ },
+ "pickerCosmeticFilters":{
+ "message":"Kozmetické filtre",
+ "description":"English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint":{
+ "message":"Kliknutie, Ctrl-kliknutie",
+ "description":"English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry":{
+ "message":"Zablokovať prvok",
+ "description":"English: Block element"
+ },
+ "settingsCollapseBlockedPrompt":{
+ "message":"Skryť zástupcov zablokovaných prvkov",
+ "description":"English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt":{
+ "message":"Zobraziť počet zablokovaných požiadaviek na ikone",
+ "description":"English: Show the number of blocked requests on the icon"
+ },
+ "settingsContextMenuPrompt":{
+ "message":"Používať kontextovú ponuku v prípade potreby",
+ "description":"English: Make use of context menu where appropriate"
+ },
+ "settingsAdvancedUserPrompt":{
+ "message":"Som pokročilý používateľ (<a href='https:\/\/github.com\/gorhill\/uBlock\/wiki\/Advanced-user-features'>Povinne prečítať<\/a>)",
+ "description":"English: "
+ },
+ "settingsExperimentalPrompt":{
+ "message":"Povoliť experimentálne funkcie (<a href='https:\/\/github.com\/gorhill\/uBlock\/wiki\/Experimental-features'>Popis<\/a>)",
+ "description":"English: Enable experimental features"
+ },
+ "settingsStorageUsed":{
+ "message":"Využité miesto: {{value}} bajtov",
+ "description":"English: Storage used: {{}} bytes"
+ },
+ "settingsLastRestorePrompt":{
+ "message":"Posledná obnova:",
+ "description":"English: Last restore:"
+ },
+ "settingsLastBackupPrompt":{
+ "message":"Posledná záloha:",
+ "description":"English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt":{
+ "message":"{{netFilterCount}} sieťových filtrov + {{cosmeticFilterCount}} kozmetických filtrov z:",
+ "description":"English: {{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:"
+ },
+ "3pListsOfBlockedHostsPerListStats":{
+ "message":"{{used}} použitých z {{total}}",
+ "description":"English: {{used}} used out of {{total}}"
+ },
+ "3pAutoUpdatePrompt1":{
+ "message":"Automaticky aktualizovať zoznamy filtrov.",
+ "description":"English: Auto-update filter lists."
+ },
+ "3pUpdateNow":{
+ "message":"Aktualizovať teraz",
+ "description":"English: Update now"
+ },
+ "3pPurgeAll":{
+ "message":"Vyčistiť celú vyrovnávaciu pamäť",
+ "description":"English: Purge all caches"
+ },
+ "3pParseAllABPHideFiltersPrompt1":{
+ "message":"Analyzovať a vynútiť kozmetické filtre.",
+ "description":"English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo":{
+ "message":"<p>Táto možnosť povoľuje analyzovanie a vynútenie <a href=\"https:\/\/adblockplus.org\/en\/faq_internal#elemhide\">filtrov &ldquo;skrývajúcich prvky&rdquo; a kompatibilných s Adblock Plus<\/a>. Tieto filtre sú prevažne kozmetické. Skrývajú prvky webových stránok, ktoré sú vizuálne otravné a nemôžu byť zablokované filtrovaním sieťových požiadavkov.<\/p><p>Povolenie tejto funkcie zvyšujte nároky <i>uBlock<\/i>na pamäť.<\/p>",
+ "description":"English: see English messages.json"
+ },
+ "3pListsOfBlockedHostsHeader":{
+ "message":"Zoznamy zablokovaných hostiteľov",
+ "description":"English: Lists of blocked hosts"
+ },
+ "3pApplyChanges":{
+ "message":"Použiť zmeny",
+ "description":"English: Apply changes"
+ },
+ "3pGroupAds":{
+ "message":"Reklamy",
+ "description":"English: Ads"
+ },
+ "3pGroupPrivacy":{
+ "message":"Súkromie",
+ "description":"English: Privacy"
+ },
+ "3pGroupMalware":{
+ "message":"Domény malvéru",
+ "description":"English: Malware domains"
+ },
+ "3pGroupSocial":{
+ "message":"Sociálne",
+ "description":"English: Social"
+ },
+ "3pGroupMultipurpose":{
+ "message":"Viacúčelové",
+ "description":"English: Multipurpose"
+ },
+ "3pGroupRegions":{
+ "message":"Regióny, jazyky",
+ "description":"English: Regions, languages"
+ },
+ "3pGroupCustom":{
+ "message":"Vlastné",
+ "description":"English: Custom"
+ },
+ "3pExternalListsHint":{
+ "message":"Jedna URL na riadok. Riadky začínajúce s &lsquo;!&rsquo; budú ignorované. Neplatné URL budú potichu ignorované.",
+ "description":"English: One URL per line. Lines prefixed with &lsquo;!&rsquo; will be ignored. Invalid URLs will be silently ignored."
+ },
+ "3pExternalListsApply":{
+ "message":"Analyzovať",
+ "description":"English: Parse"
+ },
+ "3pExternalListPurge":{
+ "message":"vyčistiť vyrovnávaciu pamäť",
+ "description":"English: purge cache"
+ },
+ "3pExternalListNew":{
+ "message":"dostupná nová verzia",
+ "description":"English: new version available"
+ },
+ "3pExternalListObsolete":{
+ "message":"zastarané",
+ "description":"English: outdated"
+ },
+ "3pLastUpdate":{
+ "message":"Posledná aktualizácia: {{ago}}",
+ "description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'"
+ },
+ "1pFormatHint":{
+ "message":"Jeden filter na riadok. Filter môže byť jednoduchý názov hostiteľa alebo filter kompatibilný s Adblock Plus. Riadky začínajúce s &lsquo;!&rsquo; budú ignorované.",
+ "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with &lsquo;!&rsquo; will be ignored."
+ },
+ "1pImport":{
+ "message":"Importovať a pripojiť",
+ "description":"English: Import and append"
+ },
+ "1pExport":{
+ "message":"Exportovať",
+ "description":"English: Export"
+ },
+ "1pExportFilename":{
+ "message":"ublock-moje-statické-filtre_{{datetime}}.txt",
+ "description":"English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges":{
+ "message":"Použiť zmeny",
+ "description":"English: Apply changes"
+ },
+ "rulesPermanentHeader":{
+ "message":"Trvalé pravidlá",
+ "description":"header"
+ },
+ "rulesTemporaryHeader":{
+ "message":"Dočasné pravidlá",
+ "description":"header"
+ },
+ "rulesRevert":{
+ "message":"Vrátiť",
+ "description":"This will remove all temporary rules"
+ },
+ "rulesCommit":{
+ "message":"Potvrdiť",
+ "description":"This will persist temporary rules"
+ },
+ "rulesEdit":{
+ "message":"Upraviť",
+ "description":"Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave":{
+ "message":"Uložiť",
+ "description":"Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard":{
+ "message":"Zahodiť",
+ "description":"Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport":{
+ "message":"Importovať zo súboru...",
+ "description":""
+ },
+ "rulesExport":{
+ "message":"Exportovať zo súboru",
+ "description":""
+ },
+ "rulesDefaultFileName":{
+ "message":"ublock-moje-dynamické-pravidlá_{{datetime}}.txt",
+ "description":"default file name to use"
+ },
+ "rulesHint":{
+ "message":"Zoznam vašich dynamických filtrovacích pravidiel.",
+ "description":"English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint":{
+ "message":"Syntax pravidla: <code>zdroj cieľ typ akcia<\/code> (<a href='https:\/\/github.com\/gorhill\/uBlock\/wiki\/Dynamic-filtering:-rule-syntax'>úplná dokumentácia<\/a>).",
+ "description":"English: dynamic rule syntax and full documentation."
+ },
+ "whitelistPrompt":{
+ "message":"Váš zoznam názvov hostiteľov, pre ktoré bude uBlock zakázaný. Jedna položka na riadok. Neplatné názvy hostiteľov budú ignorované.",
+ "description":"English: Your list of host names for which uBlock will be disabled. One host name per line. Invalid host names will be silently ignored."
+ },
+ "whitelistImport":{
+ "message":"Importovať a pripojiť",
+ "description":"English: Import and append"
+ },
+ "whitelistExport":{
+ "message":"Exportovať",
+ "description":"English: Export"
+ },
+ "whitelistExportFilename":{
+ "message":"ublock-moja-biela-listina_{{datetime}}.txt",
+ "description":"English: my-ublock-whitelist_{{datetime}}.txt"
+ },
+ "whitelistApply":{
+ "message":"Použiť zmeny",
+ "description":"English: Apply changes"
+ },
+ "logNetRequestsPrompt":{
+ "message":"Povoliť zaznamenávanie sieťových požiadavok",
+ "description":"English: Enable the logging of network requests"
+ },
+ "logNetRequestsHelp":{
+ "message":"Ak si chcete prezrieť podrobnosti o sieťových požiadavkách, povoľte túto možnosť. voľby. Zaznamenávanie sieťových požiadavok zvyšuje nároky uBlock na pamäť. Vzhľadom k tomu, že mnoho používateľov nikdy nebude používať túto funkciu, je v predvolenom nastavení zakázaná.",
+ "description":"English: see _locales\/en\/messages.log"
+ },
+ "logBlockedRequestsHeader":{
+ "message":"Zablokované požiadavky",
+ "description":"English: Blocked requests"
+ },
+ "logAllowedRequestsHeader":{
+ "message":"Povolené požiadavky",
+ "description":"English: Allowed requests"
+ },
+ "logRequestsHeaderType":{
+ "message":"Typ",
+ "description":"English: Type"
+ },
+ "logRequestsHeaderDomain":{
+ "message":"Doména",
+ "description":"English: Domain"
+ },
+ "logRequestsHeaderURL":{
+ "message":"URL",
+ "description":"English: URL"
+ },
+ "logRequestsHeaderFilter":{
+ "message":"Filter",
+ "description":"English: Filter"
+ },
+ "logBlockedRequestsEmpty":{
+ "message":"Žiadne zablokované požiadavky pre túto stránku",
+ "description":"English: No blocked requests logged for this page"
+ },
+ "logAllowedRequestsEmpty":{
+ "message":"Žiadne nezablokované požiadavky pre túto stránku",
+ "description":"English: No non-blocked requests logged for this page"
+ },
+ "logBehindTheScene":{
+ "message":"Za oponou",
+ "description":"Pretty name for behind-the-scene network requests"
+ },
+ "logFilterPrompt":{
+ "message":"filtrovať položky v zázname",
+ "description":"English: filter log entries"
+ },
+ "logMaxEntriesTip":{
+ "message":"Maximálny počet položiek v zázname",
+ "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log"
+ },
+ "aboutChangelog":{
+ "message":"Zoznam zmien",
+ "description":"English: Change log"
+ },
+ "aboutWiki":{
+ "message":"Wiki",
+ "description":"English: project' wiki on Github"
+ },
+ "aboutCode":{
+ "message":"Zdrojový kód (GPLv3)",
+ "description":"English: Source code (GPLv3)"
+ },
+ "aboutContributors":{
+ "message":"Prispievatelia",
+ "description":"English: Contributors"
+ },
+ "aboutBackupDataButton":{
+ "message":"Zálohovať do súboru",
+ "description":"English: Backup to file"
+ },
+ "aboutBackupFilename":{
+ "message":"ublock-moja-záloha_{{datetime}}.txt",
+ "description":"English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton":{
+ "message":"Obnoviť zo súboru...",
+ "description":"English: Restore from file..."
+ },
+ "aboutResetDataButton":{
+ "message":"Obnoviť na predvolené nastavenia...",
+ "description":"English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm":{
+ "message":"Všetky vaše nastavenia budú prepísané pomocou dáta zálohovaných dňa {{time}} a uBlock sa reštartne.\n\nPrepísať všetky existujúce nastavenia pomocou zálohovaných dát?",
+ "description":"Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError":{
+ "message":"Dáta sa nepodarilo načítať alebo sú neplatné",
+ "description":"Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm":{
+ "message":"Všetky vaše nastavenia budú odstránené a uBlock sa reštartne.\n\nObnoviť uBlock na predvolené nastavenia?",
+ "description":"Message asking user to confirm reset"
+ },
+ "errorCantConnectTo":{
+ "message":"Nie je možné sa pripojiť k {{url}}",
+ "description":"English: Network error: unable to connect to {{url}}"
+ },
+ "subscriberConfirm":{
+ "message":"uBlock: Pridať nasledujúcu URL do zoznamu vlastných filtrov?\n\nNázov: \"{{title}}\"\nURL: {{url}}",
+ "description":"English: The message seen by the user to confirm subscription to a ABP filter list"
+ },
+ "elapsedOneMinuteAgo":{
+ "message":"pred minútou",
+ "description":"English: a minute ago"
+ },
+ "elapsedManyMinutesAgo":{
+ "message":"pred {{value}} minútami",
+ "description":"English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo":{
+ "message":"pred hodinou",
+ "description":"English: an hour ago"
+ },
+ "elapsedManyHoursAgo":{
+ "message":"pred {{value}} hodinami",
+ "description":"English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo":{
+ "message":"pred dňom",
+ "description":"English: a day ago"
+ },
+ "elapsedManyDaysAgo":{
+ "message":"pred {{value}} dňami",
+ "description":"English: {{value}} days ago"
+ },
+ "dummy":{
+ "message":"This entry must be the last one",
+ "description":"so we dont need to deal with comma for last entry"
+ }
+} \ No newline at end of file
diff --git a/src/css/3p-filters.css b/src/css/3p-filters.css
index b0b24ba..9bab31d 100644
--- a/src/css/3p-filters.css
+++ b/src/css/3p-filters.css
@@ -22,12 +22,24 @@ body[dir=rtl] #lists {
padding: 0;
list-style-type: none;
}
-#lists > li > span {
+#lists > .groupEntry > span {
+ cursor: pointer;
font-size: 15px;
}
-#lists > li > ul {
+#lists > .groupEntry:not(:first-child) > span:before {
+ color: #aaa;
+ content: '\2212 ';
+ }
+#lists > .groupEntry.collapsed > span:before {
+ color: #aaa;
+ content: '+ ';
+ }
+#lists > .groupEntry > ul {
margin: 0.25em 0 0 0;
}
+#lists > .groupEntry.collapsed > ul {
+ display: none;
+ }
li.listEntry {
font-size: 14px;
margin: 0 auto 0 auto;
diff --git a/src/css/popup.css b/src/css/popup.css
index 67b83be..981a843 100644
--- a/src/css/popup.css
+++ b/src/css/popup.css
@@ -62,9 +62,9 @@ body[dir="rtl"] #panes > div {
direction: rtl;
}
#panes > div:nth-of-type(2) {
- overflow-y: hidden;
+ overflow-y: auto;
overflow-x: hidden;
- width: 0;
+ width: 320px;
}
body[dir="ltr"] #panes > div:nth-of-type(2) {
direction: rtl; /* scroll bar to the left */
@@ -75,11 +75,6 @@ body[dir="rtl"] #panes > div:nth-of-type(2) {
#panes:not(.dfEnabled) > div:nth-of-type(2) {
display: none;
}
-#panes.dfEnabled > div:nth-of-type(2) {
- overflow-y: auto;
- width: 320px;
- }
-
#panes > div:nth-of-type(1) {
min-width: 150px;
padding: 4px 1px;
diff --git a/src/img/browsericons/icon16-off.png b/src/img/browsericons/icon16-off.png
deleted file mode 100644
index 5658e96..0000000
--- a/src/img/browsericons/icon16-off.png
+++ /dev/null
Binary files differ
diff --git a/src/img/browsericons/icon16-off.svg b/src/img/browsericons/icon16-off.svg
deleted file mode 100644
index 026fda2..0000000
--- a/src/img/browsericons/icon16-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0" y="0" width="16" height="16" viewBox="0 0 16 16" xml:space="preserve"><path fill="#7C7C7C" d="M0.7 5V11L5 15.3H11l4.3-4.3V4.9l-4.2-4.2H4.9L0.7 5z"/><path fill="#FFFFFF" d="M5.6 12.9h1.6v-1.5l-0.1-1c0.1 0.1 0.2 0.2 0.3 0.2 0.1 0 0.2 0.1 0.4 0 0.2 0 0.5-0.1 0.7-0.2 0.2-0.1 0.4-0.3 0.5-0.6h0l0.1 0.8h1.3V5H8.8v3.7C8.7 8.9 8.5 9.1 8.4 9.2 8.2 9.3 8.1 9.4 7.9 9.4c-0.2 0-0.4-0.1-0.5-0.2C7.2 9 7.2 8.7 7.2 8.3V5H5.6L5.6 12.9z"/></svg> \ No newline at end of file
diff --git a/src/img/browsericons/icon16-off@2x.png b/src/img/browsericons/icon16-off@2x.png
deleted file mode 100644
index a7130c8..0000000
--- a/src/img/browsericons/icon16-off@2x.png
+++ /dev/null
Binary files differ
diff --git a/src/img/browsericons/icon16.png b/src/img/browsericons/icon16.png
deleted file mode 100644
index 292855b..0000000
--- a/src/img/browsericons/icon16.png
+++ /dev/null
Binary files differ
diff --git a/src/img/browsericons/icon16.svg b/src/img/browsericons/icon16.svg
deleted file mode 100644
index 72073c1..0000000
--- a/src/img/browsericons/icon16.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0" y="0" width="16" height="16" viewBox="0 0 16 16" xml:space="preserve"><path fill="#800000" d="M0.7 5V11L5 15.3H11l4.3-4.3V4.9l-4.2-4.2H4.9L0.7 5z"/><path fill="#FFFFFF" d="M5.6 12.9h1.6v-1.5l-0.1-1c0.1 0.1 0.2 0.2 0.3 0.2 0.1 0 0.2 0.1 0.4 0 0.2 0 0.5-0.1 0.7-0.2 0.2-0.1 0.4-0.3 0.5-0.6h0l0.1 0.8h1.3V5H8.8v3.7C8.7 8.9 8.5 9.1 8.4 9.2 8.2 9.3 8.1 9.4 7.9 9.4c-0.2 0-0.4-0.1-0.5-0.2C7.2 9 7.2 8.7 7.2 8.3V5H5.6L5.6 12.9z"/></svg> \ No newline at end of file
diff --git a/src/img/browsericons/icon16@2x.png b/src/img/browsericons/icon16@2x.png
deleted file mode 100644
index 1a92000..0000000
--- a/src/img/browsericons/icon16@2x.png
+++ /dev/null
Binary files differ
diff --git a/src/img/browsericons/icon19-off.png b/src/img/browsericons/icon19-off.png
deleted file mode 100644
index f978164..0000000
--- a/src/img/browsericons/icon19-off.png
+++ /dev/null
Binary files differ
diff --git a/src/img/browsericons/icon19.png b/src/img/browsericons/icon19.png
deleted file mode 100644
index 53a7250..0000000
--- a/src/img/browsericons/icon19.png
+++ /dev/null
Binary files differ
diff --git a/src/img/browsericons/icon38-off.png b/src/img/browsericons/icon38-off.png
deleted file mode 100644
index 8932c9c..0000000
--- a/src/img/browsericons/icon38-off.png
+++ /dev/null
Binary files differ
diff --git a/src/img/browsericons/icon38.png b/src/img/browsericons/icon38.png
deleted file mode 100644
index ebbe79d..0000000
--- a/src/img/browsericons/icon38.png
+++ /dev/null
Binary files differ
diff --git a/src/img/icon_128.png b/src/img/icon_128.png
index 165e37d..0d00503 100644
--- a/src/img/icon_128.png
+++ b/src/img/icon_128.png
Binary files differ
diff --git a/src/img/icon_16.png b/src/img/icon_16.png
index 8ab836f..16527c3 100644
--- a/src/img/icon_16.png
+++ b/src/img/icon_16.png
Binary files differ
diff --git a/src/img/ublock.svg b/src/img/ublock.svg
deleted file mode 100644
index 963b3cd..0000000
--- a/src/img/ublock.svg
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="603.11639"
- height="603.88739"
- id="svg2"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="ublock.svg"
- inkscape:export-filename="/home/rhill/permahome/workshop/ublock/private/badge-1400x560.png"
- inkscape:export-xdpi="83.459267"
- inkscape:export-ydpi="83.459267">
- <defs
- id="defs4">
- <inkscape:path-effect
- is_visible="true"
- id="path-effect3995"
- effect="spiro" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#404040"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:zoom="0.9899495"
- inkscape:cx="373.81573"
- inkscape:cy="359.14259"
- inkscape:document-units="px"
- inkscape:current-layer="layer5"
- showgrid="false"
- inkscape:window-width="1375"
- inkscape:window-height="967"
- inkscape:window-x="249"
- inkscape:window-y="69"
- inkscape:window-maximized="0"
- fit-margin-top="20"
- fit-margin-left="20"
- fit-margin-right="20"
- fit-margin-bottom="20" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="polygon"
- inkscape:groupmode="layer"
- id="layer1"
- style="display:inline"
- transform="translate(-2.9000336,4.3318037)">
- <g
- id="g3003"
- transform="matrix(4.4946163,0,0,4.4784113,-1996.8254,-3025.1919)"
- inkscape:export-xdpi="20.430607"
- inkscape:export-ydpi="20.430607">
- <g
- style="display:inline"
- inkscape:label="polygon"
- id="layer2">
- <path
- inkscape:connector-curvature="0"
- id="path3788"
- d="m 450.58474,716.40132 0,51.00389 35.87406,36.2877 51.05503,0 35.91927,-36.3334 0,-51.68942 -35.03824,-35.44222 -52.20713,0 z"
- style="fill:#800000;fill-opacity:1;stroke:#ffffff;stroke-width:2.44291782;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
- </g>
- </g>
- </g>
- <g
- inkscape:groupmode="layer"
- id="layer5"
- inkscape:label="text"
- style="display:inline"
- transform="translate(-2.9000336,4.3318037)">
- <g
- transform="matrix(0.97521805,0,0,1.0217146,0,0.07624875)"
- style="font-size:421.6192627px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Source Sans Pro;-inkscape-font-specification:Sans Bold"
- id="text3053"
- inkscape:export-xdpi="20.430607"
- inkscape:export-ydpi="20.430607">
- <path
- d="m 218.83305,472.64625 61.97723,0 0,-53.96657 -3.79453,-37.94524 c 3.59241,3.70669 7.58016,6.20123 11.96329,7.48364 4.38293,1.28241 9.10851,1.8797 14.17677,1.79186 9.372,-0.0176 18.03265,-2.61752 25.98195,-7.79986 7.94903,-5.18233 14.60701,-12.84164 19.97396,-22.97795 l 1.68646,0 4.63775,29.09136 50.59366,0 0,-209.12047 -61.97724,0 0,138.28934 c -5.93788,8.16005 -11.7702,14.08021 -17.49698,17.76048 -5.72704,3.68038 -12.40259,5.48981 -20.02665,5.42828 -8.81887,0.21964 -15.31875,-2.64382 -19.49965,-8.59038 -4.18109,-5.94645 -6.25402,-16.29355 -6.21879,-31.04132 l 0,-121.8464 -61.97723,0 z"
- id="path3058"
- inkscape:connector-curvature="0" />
- </g>
- </g>
-</svg>
diff --git a/src/js/3p-filters.js b/src/js/3p-filters.js
index 276706e..b5daf83 100644
--- a/src/js/3p-filters.js
+++ b/src/js/3p-filters.js
@@ -185,7 +185,7 @@ var renderFilterLists = function() {
hasCachedContent = false;
// Visually split the filter lists in purpose-based groups
- var ulLists = uDom('#lists').empty();
+ var ulLists = uDom('#lists').empty(), liGroup;
var groups = groupsFromLists(details.available);
var groupKey, i;
var groupKeys = [
@@ -200,7 +200,12 @@ var renderFilterLists = function() {
];
for ( i = 0; i < groupKeys.length; i++ ) {
groupKey = groupKeys[i];
- ulLists.append(liFromListGroup(groupKey, groups[groupKey]));
+ liGroup = liFromListGroup(groupKey, groups[groupKey]);
+ liGroup.toggleClass(
+ 'collapsed',
+ vAPI.localStorage.getItem('collapseGroup' + (i + 1)) === 'y'
+ );
+ ulLists.append(liGroup);
delete groups[groupKey];
}
// For all groups not covered above (if any left)
@@ -485,6 +490,19 @@ var externalListsApplyHandler = function() {
/******************************************************************************/
+var groupEntryClickHandler = function() {
+ var li = uDom(this).ancestors('.groupEntry');
+ li.toggleClass('collapsed');
+ var key = 'collapseGroup' + li.nthOfType();
+ if ( li.hasClass('collapsed') ) {
+ vAPI.localStorage.setItem(key, 'y');
+ } else {
+ vAPI.localStorage.removeItem(key);
+ }
+};
+
+/******************************************************************************/
+
uDom.onLoad(function() {
uDom('#autoUpdate').on('change', autoUpdateCheckboxChanged);
uDom('#parseCosmeticFilters').on('change', cosmeticSwitchChanged);
@@ -496,6 +514,7 @@ uDom.onLoad(function() {
uDom('#lists').on('click', 'span.purge', onPurgeClicked);
uDom('#externalLists').on('input', externalListsChangeHandler);
uDom('#externalListsApply').on('click', externalListsApplyHandler);
+ uDom('#lists').on('click', '.groupEntry > span', groupEntryClickHandler);
renderFilterLists();
renderExternalLists();
diff --git a/src/js/messaging.js b/src/js/messaging.js
index ed598fb..eea5110 100644
--- a/src/js/messaging.js
+++ b/src/js/messaging.js
@@ -282,7 +282,8 @@ var onMessage = function(request, sender, callback) {
switch ( request.what ) {
case 'getPopupData':
vAPI.tabs.get(request.tabId, function(tab) {
- callback(getStats(getTargetTabId(tab), tab.title));
+ // https://github.com/gorhill/uBlock/issues/1012
+ callback(getStats(getTargetTabId(tab), tab ? tab.title : ''));
});
return;
diff --git a/src/js/popup.js b/src/js/popup.js
index 891f8ce..ad8668b 100644
--- a/src/js/popup.js
+++ b/src/js/popup.js
@@ -29,6 +29,16 @@
/******************************************************************************/
+// https://github.com/gorhill/uBlock/issues/996
+// Experimental: mitigate glitchy popup UI: immediately set the firewall pane
+// visibility to its last known state. By default the pane is hidden.
+// Will remove if it makes no difference.
+if ( vAPI.localStorage.getItem('popupFirewallPane') === 'true' ) {
+ uDom('#panes').addClass('dfEnabled');
+}
+
+/******************************************************************************/
+
var popupData;
var dfPaneBuilt = false;
var popupHeight;
@@ -493,6 +503,11 @@ var toggleFirewallPane = function() {
if ( popupData.dfEnabled && dfPaneBuilt === false ) {
buildAllFirewallRows();
}
+
+ // https://github.com/gorhill/uBlock/issues/996
+ // Experimental: Remember the last state of the firewall pane.
+ // Will remove if it makes no difference.
+ vAPI.localStorage.setItem('popupFirewallPane', popupData.dfEnabled);
};
/******************************************************************************/
diff --git a/src/js/subscriber.js b/src/js/subscriber.js
index 0f53193..b98b4f4 100644
--- a/src/js/subscriber.js
+++ b/src/js/subscriber.js
@@ -63,6 +63,9 @@ var messager = vAPI.messaging.channel('subscriber.js');
/******************************************************************************/
var onAbpLinkClicked = function(ev) {
+ if ( ev.button !== 0 ) {
+ return;
+ }
var receiver = ev.target;
if ( receiver === null ) {
return;
diff --git a/src/js/tab.js b/src/js/tab.js
index 57f4158..ccf2a5d 100644
--- a/src/js/tab.js
+++ b/src/js/tab.js
@@ -48,7 +48,7 @@ vAPI.tabs.onNavigation = function(details) {
// The hostname of the bound document must always be present in the
// mini-matrix. That's the best place I could find for the fix, all other
// options had bad side-effects or complications.
- // TODO: Evantually, we will have to use an API to check whether a scheme
+ // TODO: Eventually, we will have to use an API to check whether a scheme
// is supported as I suspect we are going to start to see `ws`, `wss`
// as well soon.
if ( pageStore && details.url.lastIndexOf('http', 0) === 0 ) {
diff --git a/src/js/udom.js b/src/js/udom.js
index 32e857d..8d5b6a0 100644
--- a/src/js/udom.js
+++ b/src/js/udom.js
@@ -19,6 +19,7 @@
Home: https://github.com/gorhill/uBlock
*/
+/* global DOMTokenList */
/* exported uDom */
/******************************************************************************/
@@ -488,6 +489,28 @@ DOMList.prototype.clone = function(notDeep) {
/******************************************************************************/
+DOMList.prototype.nthOfType = function() {
+ if ( this.nodes.length === 0 ) {
+ return 0;
+ }
+ var node = this.nodes[0];
+ var tagName = node.tagName;
+ var i = 1;
+ while ( node.previousElementSibling !== null ) {
+ node = node.previousElementSibling;
+ if ( typeof node.tagName !== 'string' ) {
+ continue;
+ }
+ if ( node.tagName !== tagName ) {
+ continue;
+ }
+ i++;
+ }
+ return i;
+};
+
+/******************************************************************************/
+
DOMList.prototype.attr = function(attr, value) {
var i = this.nodes.length;
if ( value === undefined && typeof attr !== 'object' ) {