diff options
Diffstat (limited to 'src')
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 “skrývajúcich prvky” 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 ‘!’ budú ignorované. Neplatné URL budú potichu ignorované.", + "description":"English: One URL per line. Lines prefixed with ‘!’ 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 ‘!’ budú ignorované.", + "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ 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 Binary files differdeleted file mode 100644 index 5658e96..0000000 --- a/src/img/browsericons/icon16-off.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index a7130c8..0000000 --- a/src/img/browsericons/icon16-off@2x.png +++ /dev/null diff --git a/src/img/browsericons/icon16.png b/src/img/browsericons/icon16.png Binary files differdeleted file mode 100644 index 292855b..0000000 --- a/src/img/browsericons/icon16.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 1a92000..0000000 --- a/src/img/browsericons/icon16@2x.png +++ /dev/null diff --git a/src/img/browsericons/icon19-off.png b/src/img/browsericons/icon19-off.png Binary files differdeleted file mode 100644 index f978164..0000000 --- a/src/img/browsericons/icon19-off.png +++ /dev/null diff --git a/src/img/browsericons/icon19.png b/src/img/browsericons/icon19.png Binary files differdeleted file mode 100644 index 53a7250..0000000 --- a/src/img/browsericons/icon19.png +++ /dev/null diff --git a/src/img/browsericons/icon38-off.png b/src/img/browsericons/icon38-off.png Binary files differdeleted file mode 100644 index 8932c9c..0000000 --- a/src/img/browsericons/icon38-off.png +++ /dev/null diff --git a/src/img/browsericons/icon38.png b/src/img/browsericons/icon38.png Binary files differdeleted file mode 100644 index ebbe79d..0000000 --- a/src/img/browsericons/icon38.png +++ /dev/null diff --git a/src/img/icon_128.png b/src/img/icon_128.png Binary files differindex 165e37d..0d00503 100644 --- a/src/img/icon_128.png +++ b/src/img/icon_128.png diff --git a/src/img/icon_16.png b/src/img/icon_16.png Binary files differindex 8ab836f..16527c3 100644 --- a/src/img/icon_16.png +++ b/src/img/icon_16.png 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' ) { |