diff options
Diffstat (limited to 'platform')
94 files changed, 1018 insertions, 274 deletions
diff --git a/platform/chromium/manifest.json b/platform/chromium/manifest.json index 28ceec5..df686a0 100644 --- a/platform/chromium/manifest.json +++ b/platform/chromium/manifest.json @@ -30,6 +30,9 @@ }, "toggle-cosmetic-filtering": { "description": "__MSG_toggleCosmeticFiltering__" + }, + "toggle-javascript": { + "description": "__MSG_toggleJavascript__" } }, "content_scripts": [ @@ -94,6 +97,7 @@ "open_in_tab": true }, "permissions": [ + "alarms", "contextMenus", "privacy", "storage", diff --git a/platform/chromium/webext.js b/platform/chromium/webext.js index 851b653..f044649 100644 --- a/platform/chromium/webext.js +++ b/platform/chromium/webext.js @@ -19,8 +19,6 @@ Home: https://github.com/gorhill/uBlock */ -'use strict'; - // `webext` is a promisified api of `chrome`. Entries are added as // the promisification of uBO progress. @@ -54,6 +52,15 @@ const promisify = function(thisArg, fnName) { }; const webext = { + // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/alarms + alarms: { + clear: promisifyNoFail(chrome.alarms, 'clear'), + clearAll: promisifyNoFail(chrome.alarms, 'clearAll'), + create: promisifyNoFail(chrome.alarms, 'create'), + get: promisifyNoFail(chrome.alarms, 'get'), + getAll: promisifyNoFail(chrome.alarms, 'getAll'), + onAlarm: chrome.alarms.onAlarm, + }, // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserAction browserAction: { setBadgeBackgroundColor: promisifyNoFail(chrome.browserAction, 'setBadgeBackgroundColor'), @@ -95,6 +102,7 @@ const webext = { query: promisifyNoFail(chrome.tabs, 'query', tabs => Array.isArray(tabs) ? tabs : []), reload: promisifyNoFail(chrome.tabs, 'reload'), remove: promisifyNoFail(chrome.tabs, 'remove'), + sendMessage: promisifyNoFail(chrome.tabs, 'sendMessage'), update: promisifyNoFail(chrome.tabs, 'update', tab => tab instanceof Object ? tab : null), }, // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webNavigation diff --git a/platform/common/vapi-background.js b/platform/common/vapi-background.js index 0d6fcdd..2ff99ac 100644 --- a/platform/common/vapi-background.js +++ b/platform/common/vapi-background.js @@ -87,6 +87,19 @@ vAPI.app = { }, }; +/******************************************************************************/ + +// Generate segments of random six alphanumeric characters, thus one segment +// is a value out of 36^6 = over 2x10^9 values. + +vAPI.generateSecret = (size = 1) => { + let secret = ''; + while ( size-- ) { + secret += (Math.floor(Math.random() * 2176782336) + 2176782336).toString(36).slice(1); + } + return secret; +}; + /******************************************************************************* * * https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/storage/session @@ -96,9 +109,9 @@ vAPI.app = { * * */ -vAPI.sessionStorage = { +vAPI.sessionStorage = browser.storage.session || { get() { - return Promise.resolve({}); + return Promise.resolve(); }, set() { return Promise.resolve(); @@ -109,7 +122,7 @@ vAPI.sessionStorage = { clear() { return Promise.resolve(); }, - implemented: false, + unavailable: true, }; /******************************************************************************* @@ -124,46 +137,21 @@ vAPI.sessionStorage = { vAPI.storage = { get(key, ...args) { - if ( vAPI.sessionStorage.implemented !== true ) { - return webext.storage.local.get(key, ...args).catch(reason => { - console.log(reason); - }); - } - return vAPI.sessionStorage.get(key, ...args).then(bin => { - const size = Object.keys(bin).length; - if ( size === 1 && typeof key === 'string' && bin[key] === null ) { - return {}; - } - if ( size !== 0 ) { return bin; } - return webext.storage.local.get(key, ...args).then(bin => { - if ( bin instanceof Object === false ) { return bin; } - // Mirror empty result as null value in order to prevent - // from falling back to storage.local when there is no need. - const tomirror = Object.assign({}, bin); - if ( typeof key === 'string' && Object.keys(bin).length === 0 ) { - Object.assign(tomirror, { [key]: null }); - } - vAPI.sessionStorage.set(tomirror); - return bin; - }).catch(reason => { - console.log(reason); - }); + return webext.storage.local.get(key, ...args).catch(reason => { + console.log(reason); }); }, set(...args) { - vAPI.sessionStorage.set(...args); return webext.storage.local.set(...args).catch(reason => { console.log(reason); }); }, remove(...args) { - vAPI.sessionStorage.remove(...args); return webext.storage.local.remove(...args).catch(reason => { console.log(reason); }); }, clear(...args) { - vAPI.sessionStorage.clear(...args); return webext.storage.local.clear(...args).catch(reason => { console.log(reason); }); @@ -328,10 +316,10 @@ vAPI.Tabs = class { }); } - async executeScript() { + async executeScript(...args) { let result; try { - result = await webext.tabs.executeScript(...arguments); + result = await webext.tabs.executeScript(...args); } catch(reason) { } @@ -445,22 +433,26 @@ vAPI.Tabs = class { // For some reasons, some platforms do not honor the left,top // position when specified. I found that further calling // windows.update again with the same position _may_ help. + // + // https://github.com/uBlockOrigin/uBlock-issues/issues/2249 + // Mind that the creation of the popup window might fail. if ( details.popup !== undefined && vAPI.windows instanceof Object ) { - const createDetails = { + const basicDetails = { url: details.url, type: details.popup, }; - if ( details.box instanceof Object ) { - Object.assign(createDetails, details.box); + const shouldRestorePosition = details.box instanceof Object; + const extraDetails = shouldRestorePosition + ? Object.assign({}, basicDetails, details.box) + : basicDetails; + const win = await vAPI.windows.create(extraDetails); + if ( win === null ) { + if ( shouldRestorePosition === false ) { return; } + return vAPI.windows.create(basicDetails); } - const win = await vAPI.windows.create(createDetails); - if ( win === null ) { return; } - if ( details.box instanceof Object === false ) { return; } - if ( - win.left === details.box.left && - win.top === details.box.top - ) { - return; + if ( shouldRestorePosition === false ) { return; } + if ( win.left === details.box.left ) { + if ( win.top === details.box.top ) { return; } } vAPI.windows.update(win.id, { left: details.box.left, @@ -556,7 +548,7 @@ vAPI.Tabs = class { targetURL = vAPI.getURL(targetURL); } - vAPI.tabs.update(tabId, { url: targetURL }); + return vAPI.tabs.update(tabId, { url: targetURL }); } async remove(tabId) { @@ -1165,11 +1157,6 @@ vAPI.messaging = { // Support using a new secret for every network request. { - // Generate a 6-character alphanumeric string, thus one random value out - // of 36^6 = over 2x10^9 values. - const generateSecret = ( ) => - (Math.floor(Math.random() * 2176782336) + 2176782336).toString(36).slice(1); - const root = vAPI.getURL('/'); const reSecret = /\?secret=(\w+)/; const shortSecrets = []; @@ -1207,7 +1194,7 @@ vAPI.messaging = { } } lastShortSecretTime = Date.now(); - const secret = generateSecret(); + const secret = vAPI.generateSecret(); shortSecrets.push(secret); return secret; }, @@ -1215,7 +1202,7 @@ vAPI.messaging = { if ( previous !== undefined ) { longSecrets.delete(previous); } - const secret = `${generateSecret()}${generateSecret()}${generateSecret()}`; + const secret = vAPI.generateSecret(3); longSecrets.add(secret); return secret; }, @@ -1663,10 +1650,7 @@ vAPI.cloud = (( ) => { const push = async function(details) { const { datakey, data, encode } = details; - if ( - data === undefined || - typeof data === 'string' && data === '' - ) { + if ( data === undefined || typeof data === 'string' && data === '' ) { return deleteChunks(datakey, 0); } const item = { @@ -1674,10 +1658,9 @@ vAPI.cloud = (( ) => { tstamp: Date.now(), data, }; - const json = JSON.stringify(item); const encoded = encode instanceof Function - ? await encode(json) - : json; + ? await encode(item) + : JSON.stringify(item); // Chunkify taking into account QUOTA_BYTES_PER_ITEM: // https://developer.chrome.com/extensions/storage#property-sync @@ -1742,13 +1725,16 @@ vAPI.cloud = (( ) => { i += 1; } encoded = encoded.join(''); - const json = decode instanceof Function - ? await decode(encoded) - : encoded; + let entry = null; try { - entry = JSON.parse(json); - } catch(ex) { + if ( decode instanceof Function ) { + entry = await decode(encoded) || null; + } + if ( typeof entry === 'string' ) { + entry = JSON.parse(entry); + } + } catch(_) { } return entry; }; @@ -1797,15 +1783,24 @@ vAPI.cloud = (( ) => { /******************************************************************************/ /******************************************************************************/ -vAPI.alarms = browser.alarms || { - create() { +vAPI.alarms = { + create(...args) { + webext.alarms.create(...args); }, - clear() { + createIfNotPresent(name, ...args) { + webext.alarms.get(name).then(details => { + if ( details !== undefined ) { return; } + webext.alarms.create(name, ...args); + }); + }, + async clear(...args) { + return webext.alarms.clear(...args); }, onAlarm: { - addListener() { - } - } + addListener(...args) { + webext.alarms.onAlarm.addListener(...args); + }, + }, }; /******************************************************************************/ diff --git a/platform/common/vapi-client.js b/platform/common/vapi-client.js index 9375e88..a6d46c6 100644 --- a/platform/common/vapi-client.js +++ b/platform/common/vapi-client.js @@ -22,10 +22,6 @@ // For non-background page -/* globals browser */ - -'use strict'; - /******************************************************************************/ // https://github.com/chrisaljoudi/uBlock/issues/456 @@ -85,6 +81,7 @@ vAPI.messaging = { portTimerDelay: 10000, msgIdGenerator: 1, pending: new Map(), + waitStartTime: 0, shuttingDown: false, shutdown: function() { @@ -115,16 +112,11 @@ vAPI.messaging = { // revisited to isolate the picker dialog DOM from the page DOM. messageListener: function(details) { if ( typeof details !== 'object' || details === null ) { return; } - - // Response to specific message previously sent - if ( details.msgId !== undefined ) { - const resolver = this.pending.get(details.msgId); - if ( resolver !== undefined ) { - this.pending.delete(details.msgId); - resolver(details.msg); - return; - } - } + if ( details.msgId === undefined ) { return; } + const resolver = this.pending.get(details.msgId); + if ( resolver === undefined ) { return; } + this.pending.delete(details.msgId); + resolver(details.msg); }, messageListenerBound: null, @@ -203,13 +195,18 @@ vAPI.messaging = { // the main process is no longer reachable: memory leaks and bad // performance become a risk -- especially for long-lived, dynamic // pages. Guard against this. - if ( this.pending.size > 50 ) { - vAPI.shutdown.exec(); + if ( this.pending.size > 64 ) { + if ( (Date.now() - this.waitStartTime) > 60000 ) { + vAPI.shutdown.exec(); + } } const port = this.getPort(); if ( port === null ) { return Promise.resolve(); } + if ( this.pending.size === 0 ) { + this.waitStartTime = Date.now(); + } const msgId = this.msgIdGenerator++; const promise = new Promise(resolve => { this.pending.set(msgId, resolve); diff --git a/platform/firefox/manifest.json b/platform/firefox/manifest.json index 4ee0b56..db021f2 100644 --- a/platform/firefox/manifest.json +++ b/platform/firefox/manifest.json @@ -43,6 +43,9 @@ }, "toggle-cosmetic-filtering": { "description": "__MSG_toggleCosmeticFiltering__" + }, + "toggle-javascript": { + "description": "__MSG_toggleJavascript__" } }, "content_scripts": [ diff --git a/platform/mv3/description/webstore.be.txt b/platform/mv3/description/webstore.be.txt index e03fa80..d5a2e98 100644 --- a/platform/mv3/description/webstore.be.txt +++ b/platform/mv3/description/webstore.be.txt @@ -27,4 +27,4 @@ Keep in mind this is still a work in progress, with these end goals: - No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. -- Entirely declarative for reliability and CPU/memory efficiency. +- Цалкам дэкларатыўная ацэнка надзейнасці і эфектыўнасці работы працэсара/памяці. diff --git a/platform/mv3/description/webstore.br_FR.txt b/platform/mv3/description/webstore.br_FR.txt index bfc4ce6..0335493 100644 --- a/platform/mv3/description/webstore.br_FR.txt +++ b/platform/mv3/description/webstore.br_FR.txt @@ -1,4 +1,4 @@ -uBO Lite (uBOL) zo ur stanker noazadurioù *hep aotreoù* diazezet war ar manifesto MV3. +uBO Lite (uBOL) zo ur stanker noazadurioù *hep aotre rekis ebet* diazezet war ar manifesto MV3. Ar reolennoù dre ziouer a glot gant silañ dre ziouer uBlock Origin: diff --git a/platform/mv3/description/webstore.cy.txt b/platform/mv3/description/webstore.cy.txt new file mode 100644 index 0000000..e03fa80 --- /dev/null +++ b/platform/mv3/description/webstore.cy.txt @@ -0,0 +1,30 @@ +uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. + +The default ruleset corresponds to uBlock Origin's default filterset: + +- uBlock Origin's built-in filter lists +- EasyList +- EasyPrivacy +- Peter Lowe’s Ad and tracking server list + +You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. + +uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. + +uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. + +However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. + +To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. + +The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. + +If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. + +You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. + +Keep in mind this is still a work in progress, with these end goals: + +- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. + +- Entirely declarative for reliability and CPU/memory efficiency. diff --git a/platform/mv3/description/webstore.et.txt b/platform/mv3/description/webstore.et.txt index d3bf236..520e4ce 100644 --- a/platform/mv3/description/webstore.et.txt +++ b/platform/mv3/description/webstore.et.txt @@ -17,14 +17,14 @@ Kuid uBOL võimaldab *selgesõnaliselt* anda täpsemaid lubasid teie valitud vee Veebilehele täpsustatud lubade andmiseks ava hüpikpaneel ja vali põhjalikum filtreerimisrežiim, näiteks Optimaalne või Põhjalik. -Seejärel hoiatab brauser teid praeguse saidi laienduse taotletud täiendavate õiguste andmise tagajärgede eest ja peate brauserile ütlema, kas nõustute taotlusega või keeldute sellest. +Seejärel hoiatab veebilehitseja praeguse veebilehe laienduse taotletud täiendavate õiguste andmise tagajärgede eest ja peate veebilehitsejale ütlema, kas nõustute taotlusega või keeldute sellest. -Kui nõustute uBOLi taotlusega täiendavate õiguste saamiseks praegusel saidil, saab see praeguse saidi sisu paremini filtreerida. +Kui nõustute uBOLi taotlusega täiendavate õiguste saamiseks praegusel veebilehel, saab see praeguse veebilehe sisu paremini filtreerida. -Vaikimisi filtreerimisrežiimi saate määrata uBOLi suvandite lehelt Kui määrate optimaalse või põhjaliku režiimi tavaliseks, peate andma uBOLile loa kõikide veebilehtede andmete lugemiseks ja muutmiseks. +Fltreerimise tavarežiimi saate määrata uBOLi valikute lehelt. Kui määrate optimaalse või põhjaliku režiimi tavaliseks, peate andma uBOLile loa kõikide veebilehtede andmete lugemiseks ja muutmiseks. -Pidage meeles, et see on veel pooleliolev töö, mille lõppeesmärgid on järgmised: +Pidage meeles, et see on veel arendamisel, mille lõppeesmärgid on järgmised: -- Installimise ajal laialdased hostiõigused puuduvad – kasutaja annab laiendatud load selgesõnaliselt saidipõhiselt. +- Paigaldamise ajal laialdased hostiõigused puuduvad – kasutaja annab laiendatud load selgesõnaliselt ja veebilehe põhiselt. - Täiesti deklaratiivne töökindluse ja protsessori/mälu tõhususe osas. diff --git a/platform/mv3/description/webstore.ms.txt b/platform/mv3/description/webstore.ms.txt index e03fa80..2a48cf6 100644 --- a/platform/mv3/description/webstore.ms.txt +++ b/platform/mv3/description/webstore.ms.txt @@ -1,30 +1,30 @@ -uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. +uBO Lite (uBOL) ialah penyekat kandungan berasaskan MV3. -The default ruleset corresponds to uBlock Origin's default filterset: +Set peraturan lalai sepadan dengan set penapis lalai uBlock Origin: -- uBlock Origin's built-in filter lists +- Senarai penapis terbina dalam uBlock Origin - EasyList - EasyPrivacy -- Peter Lowe’s Ad and tracking server list +- Senarai pelayan iklan dan penjejakan 'Peter Lowe' -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +Anda boleh menambah lebih banyak set peraturan dengan melawat halaman pilihan -- klik the _Cogs_ icon pada panel timbul. -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. +uBOL adalah deklaratif sepenuhnya, bermakna tidak ada keperluan untuk proses uBOL kekal untuk penapisan berlaku, dan penapisan kandungan berasaskan suntikan CSS/JS dilakukan sepenuhnya oleh penyemak imbas itu sendiri dan bukannya oleh sambungan. Ini bermakna uBOL sendiri tidak menggunakan sumber CPU/memori semasa penyekatan kandungan sedang berjalan -- proses pekerja perkhidmatan uBOL diperlukan _hanya_ apabila anda berinteraksi dengan panel timbul atau halaman pilihan. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOL tidak memerlukan kebenaran "baca dan ubah suai data" yang luas pada masa pemasangan, oleh itu keupayaan terhadnya di luar kotak berbanding dengan uBlock Origin atau penyekat kandungan lain yang memerlukan kebenaran "baca dan ubah suai data" yang luas pada masa pemasangan. -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +Walau bagaimanapun, uBOL membenarkan anda *dengan jelas* memberikan kebenaran lanjutan pada tapak tertentu pilihan anda supaya ia boleh menapis dengan lebih baik pada tapak tersebut menggunakan penapisan kosmetik dan suntikan skrip. -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +Untuk memberikan kebenaran lanjutan pada tapak tertentu, buka panel timbul dan pilih mod penapisan yang lebih tinggi seperti Optimum atau Lengkap. -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +Penyemak imbas kemudian akan memberi amaran kepada anda tentang kesan pemberian kebenaran tambahan yang diminta oleh sambungan pada tapak semasa dan anda perlu memberitahu penyemak imbas sama ada anda menerima atau menolak permintaan tersebut. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +Jika anda menerima permintaan uBOL untuk mendapatkan kebenaran tambahan pada tapak semasa, ia akan dapat menapis kandungan dengan lebih baik untuk tapak semasa. -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +Anda boleh menetapkan mod penapisan lalai dari halaman pilihan 'uBOL'. Jika anda memilih mod Optimum atau Lengkap sebagai mod lalai, anda perlu memberikan uBOL kebenaran untuk membaca dan mengubah suai data pada semua tapak web. -Keep in mind this is still a work in progress, with these end goals: +Perlu diingat bahawa ini masih dalam proses, dengan matlamat akhir ini: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +- Tiada kebenaran hos pada masa pemasangan -- kebenaran lanjutan diberikan secara eksplisit oleh pengguna pada asas setiap tapak. -- Entirely declarative for reliability and CPU/memory efficiency. +- Deklaratif sepenuhnya untuk kebolehpercayaan dan kecekapan CPU/memori. diff --git a/platform/mv3/description/webstore.pl.txt b/platform/mv3/description/webstore.pl.txt index a65d0db..4f5c524 100644 --- a/platform/mv3/description/webstore.pl.txt +++ b/platform/mv3/description/webstore.pl.txt @@ -1,13 +1,13 @@ -uBO Lite (uBOL) to *niewymagający uprawnień* bloker treści bazujący na MV3. +uBO Lite (uBOL) to *niewymagający uprawnień* bloker treści oparty na MV3. Domyślny zestaw reguł odpowiada domyślnemu zestawowi filtrów uBlock Origin: -– wbudowane listy filtrów uBlock Origin +– wbudowane listy filtrów rozszerzenia uBlock Origin – EasyList – EasyPrivacy – lista serwerów śledzących i reklam Petera Lowe'a -Możesz dodać więcej zestawów reguł, odwiedzając stronę opcji – kliknij ikonę _Trybika_ w wyskakującym panelu. +Możesz dodać więcej zestawów reguł, odwiedzając stronę opcji – kliknij ikonę _koła zębatego_ w wyskakującym panelu. uBOL jest całkowicie deklaratywny, co oznacza, że nie jest potrzebny stały proces uBOL w celu filtrowania, a filtrowanie treści oparte na wstrzykiwaniu CSS/JS jest wykonywane niezawodnie przez samą przeglądarkę, a nie przez rozszerzenie. Oznacza to, że sam uBOL nie zużywa zasobów procesora/pamięci, gdy trwa blokowanie treści – proces Service Worker uBOL jest wymagany _tylko_ podczas interakcji z panelem wyskakującym lub stronami opcji. diff --git a/platform/mv3/description/webstore.pt_PT.txt b/platform/mv3/description/webstore.pt_PT.txt index f390d5d..fcd3823 100644 --- a/platform/mv3/description/webstore.pt_PT.txt +++ b/platform/mv3/description/webstore.pt_PT.txt @@ -7,7 +7,7 @@ O conjunto de regras padrão corresponde ao conjunto de filtros padrão do uBloc - EasyPrivacy - Peter Lowe’s Ad and tracking server list -Pode adicionar mais conjuntos de regras visitando a página de opções -- clique no ícone _Cogs_ no painel pop-up. +Pode adicionar mais conjuntos de regras visitando a página de opções -- clique no ícone _Cogs_ na janela flutuante. O uBOL é totalmente declarativo, o que elimina a necessidade de um processo ativo constante para a filtragem ocorrer. A injeção de CSS e JS para filtragem de conteúdo é efetuada de maneira confiável pelo navegador, não dependendo da extensão. Isso significa que o uBOL por si só não gasta recursos de CPU/memória enquanto o bloqueio de conteúdo está a acontecer -- o processo do trabalhador de serviço do uBOL é necessário apenas quando se interage com a janela flutuante ou as páginas de opções. @@ -25,6 +25,6 @@ Pode definir o modo de filtragem padrão na página de opções do uBOL. Se esco Tenha em mente que este ainda é um trabalho em curso, com estes objetivos finais: -Sem permissões amplas de anfitrião no momento da instalação -- permissões estendidas são concedidas explicitamente pelo utilizador numa base por site. +- Sem permissões amplas de anfitrião no momento da instalação -- permissões estendidas são concedidas explicitamente pelo utilizador numa base por site. - Totalmente declarativo para fiabilidade e eficiência de CPU/memória diff --git a/platform/mv3/extension/_locales/ar/messages.json b/platform/mv3/extension/_locales/ar/messages.json index d907faa..6b6b476 100644 --- a/platform/mv3/extension/_locales/ar/messages.json +++ b/platform/mv3/extension/_locales/ar/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "إعادة تحميل الصفحة تلقائيًا عند تغيير وضع التصفية", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "إظهار عدد الطلبات المحظورة على أيقونة شريط الأدوات", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/az/messages.json b/platform/mv3/extension/_locales/az/messages.json index 59b7d81..deef8d2 100644 --- a/platform/mv3/extension/_locales/az/messages.json +++ b/platform/mv3/extension/_locales/az/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/be/messages.json b/platform/mv3/extension/_locales/be/messages.json index 795f961..3e96e72 100644 --- a/platform/mv3/extension/_locales/be/messages.json +++ b/platform/mv3/extension/_locales/be/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Аўтаматычна абнаўляць старонку пры змене рэжыму фільтравання", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/bg/messages.json b/platform/mv3/extension/_locales/bg/messages.json index c440a4b..f4606dd 100644 --- a/platform/mv3/extension/_locales/bg/messages.json +++ b/platform/mv3/extension/_locales/bg/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Автоматично презареждане на страницата при промяна на режима на филтриране", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Показване на брояч в иконката за блокираните заявки", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/bn/messages.json b/platform/mv3/extension/_locales/bn/messages.json index ba12b5d..1232fc7 100644 --- a/platform/mv3/extension/_locales/bn/messages.json +++ b/platform/mv3/extension/_locales/bn/messages.json @@ -16,7 +16,7 @@ "description": "English: uBO Lite — Dashboard" }, "settingsPageName": { - "message": "পছন্দসমূহ", + "message": "সেটিংস", "description": "appears as tab name in dashboard" }, "aboutPageName": { @@ -116,7 +116,7 @@ "description": "This describes the default filtering mode setting" }, "filteringMode0Name": { - "message": "ছাঁকনি নেই", + "message": "ফিল্টারিং নেই", "description": "Name of blocking mode 0" }, "filteringMode1Name": { @@ -152,7 +152,11 @@ "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "ফিল্টারিং মোড পরিবর্তন করার সময় স্বয়ংক্রিয়ভাবে পেজ পুনরায় লোড করুন", + "message": "ফিল্টারিং মোড পরিবর্তন করার সময় স্বয়ংক্রিয়ভাবে পুনরায় লোড করুন", + "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/br_FR/messages.json b/platform/mv3/extension/_locales/br_FR/messages.json index 48f7013..3039596 100644 --- a/platform/mv3/extension/_locales/br_FR/messages.json +++ b/platform/mv3/extension/_locales/br_FR/messages.json @@ -88,7 +88,7 @@ "description": "Link text to source code repo" }, "aboutTranslations": { - "message": "Troidigezhioù", + "message": "Treiñ", "description": "Link text to translations repo" }, "aboutFilterLists": { @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "Roll eus anvioù domanioù el-lec'h ne vo silañ ebet", + "message": "Roll anvioù domanioù ha ne vint ket silet.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Adkargañ ar bajenn ent-emgefreek pa vez cheñchet an doare silañ", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Diskouez an niver a rekedoù bet stanket war arouez ar varrenn-ostilhoù", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/bs/messages.json b/platform/mv3/extension/_locales/bs/messages.json index 14e847d..ab768f6 100644 --- a/platform/mv3/extension/_locales/bs/messages.json +++ b/platform/mv3/extension/_locales/bs/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatski ponovo učitajte stranicu prilikom promjene načina filtriranja", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/ca/messages.json b/platform/mv3/extension/_locales/ca/messages.json index abe76eb..5e1f1eb 100644 --- a/platform/mv3/extension/_locales/ca/messages.json +++ b/platform/mv3/extension/_locales/ca/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Recarrega automàticament la pàgina quan canvieu el mode de filtratge", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Mostra el nombre de sol·licituds blocades a la icona de la barra d'eines", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/cs/messages.json b/platform/mv3/extension/_locales/cs/messages.json index abc5164..db051f0 100644 --- a/platform/mv3/extension/_locales/cs/messages.json +++ b/platform/mv3/extension/_locales/cs/messages.json @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Experimentální blokátor obsahu vyžadující méně oprávnění. Blokuje reklamy, sledovače, těžaře a jiné ihned po instalaci.", + "message": "Blokátor obsahu vyžadující méně oprávnění. Blokuje reklamy, sledovače, těžaře a jiné ihned po instalaci.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -80,7 +80,7 @@ "description": "English: Source code (GPLv3)" }, "aboutContributors": { - "message": "Přispívající", + "message": "Přispěvatelé", "description": "English: Contributors" }, "aboutSourceCode": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automaticky znovu načíst stránku při změně filtrovacího režimu", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Zobrazit počet blokovaných požadavků u ikony v panelu nástrojů", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/cv/messages.json b/platform/mv3/extension/_locales/cv/messages.json index 627857e..4bbb5e3 100644 --- a/platform/mv3/extension/_locales/cv/messages.json +++ b/platform/mv3/extension/_locales/cv/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/cy/messages.json b/platform/mv3/extension/_locales/cy/messages.json new file mode 100644 index 0000000..c9d0e36 --- /dev/null +++ b/platform/mv3/extension/_locales/cy/messages.json @@ -0,0 +1,162 @@ +{ + "extName": { + "message": "uBlock Origin Lite", + "description": "extension name." + }, + "extShortDesc": { + "message": "Rhwystrydd cynnwys nad yw'n gofyn am hawliau. Rhwystrwch hysbysebion, tracwyr, cloddwyr, a mwy, yn syth ar ôl gosod.", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "perRulesetStats": { + "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "dashboardName": { + "message": "uBO Lite — Dashfwrdd", + "description": "English: uBO Lite — Dashboard" + }, + "settingsPageName": { + "message": "Gosodiadau", + "description": "appears as tab name in dashboard" + }, + "aboutPageName": { + "message": "Ynghylch", + "description": "appears as tab name in dashboard" + }, + "aboutPrivacyPolicy": { + "message": "Polisi preifatrwydd", + "description": "Link to privacy policy on GitHub (English)" + }, + "popupFilteringModeLabel": { + "message": "modd hidlo", + "description": "Label in the popup panel for the current filtering mode" + }, + "popupTipDashboard": { + "message": "Agor y dashfwrdd", + "description": "English: Click to open the dashboard" + }, + "popupMoreButton": { + "message": "Mwy", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton": { + "message": "Llai", + "description": "Label to be used to hide popup panel sections" + }, + "3pGroupDefault": { + "message": "Default", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupAds": { + "message": "Hysbysebion", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupPrivacy": { + "message": "Preifatrwydd", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupMalware": { + "message": "Malware domains", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupAnnoyances": { + "message": "Pethau diflas", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupMisc": { + "message": "Amrywiol", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupRegions": { + "message": "Rhanbarthau, ieithoedd", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "aboutChangelog": { + "message": "Cofnod newidiadau", + "description": "" + }, + "aboutCode": { + "message": "Cod ffynhonnell (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Cyfranwyr", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Cod ffynhonnell", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Cyfieithiadau", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Rhestri hidlo", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Gofynion allanol (cydnaws â GPLv3):", + "description": "Shown in the About pane" + }, + "firstRunSectionLabel": { + "message": "Croeso", + "description": "The header text for the welcome message section" + }, + "firstRunDescription": { + "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.", + "description": "Descriptive text shown at first install time only " + }, + "defaultFilteringModeSectionLabel": { + "message": "Default filtering mode", + "description": "The header text for the default filtering mode section" + }, + "defaultFilteringModeDescription": { + "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.", + "description": "This describes the default filtering mode setting" + }, + "filteringMode0Name": { + "message": "dim hidlo", + "description": "Name of blocking mode 0" + }, + "filteringMode1Name": { + "message": "sylfaenol", + "description": "Name of blocking mode 1" + }, + "filteringMode2Name": { + "message": "priodol", + "description": "Name of blocking mode 2" + }, + "filteringMode3Name": { + "message": "cyflawn", + "description": "Name of blocking mode 3" + }, + "basicFilteringModeDescription": { + "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.", + "description": "This describes the 'basic' filtering mode" + }, + "optimalFilteringModeDescription": { + "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.", + "description": "This describes the 'optimal' filtering mode" + }, + "completeFilteringModeDescription": { + "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", + "description": "This describes the 'complete' filtering mode" + }, + "noFilteringModeDescription": { + "message": "List of hostnames for which no filtering will take place.", + "description": "A short description for the editable field which lists trusted sites" + }, + "behaviorSectionLabel": { + "message": "Ymddygiad", + "description": "The header text for the 'Behavior' section" + }, + "autoReloadLabel": { + "message": "Ail-lwytho tudalen ar ôl newid y modd hidlo", + "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + } +} diff --git a/platform/mv3/extension/_locales/da/messages.json b/platform/mv3/extension/_locales/da/messages.json index 7f628ab..ae494fe 100644 --- a/platform/mv3/extension/_locales/da/messages.json +++ b/platform/mv3/extension/_locales/da/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "Liste over værtsnavne, for hvilke ingen filtrering vil ske", + "message": "Liste over værtsnavne, for hvilke ingen filtrering vil ske.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatisk sidegenindlæsning ved skift af filtreringstilstand", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Vis antallet af blokerede forespørgsler på værktøjsbjælkeikonet", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/de/messages.json b/platform/mv3/extension/_locales/de/messages.json index 1e014df..13829f3 100644 --- a/platform/mv3/extension/_locales/de/messages.json +++ b/platform/mv3/extension/_locales/de/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "Liste der Hostnamen, für die nicht gefiltert wird", + "message": "Liste der Hostnamen, für die nicht gefiltert wird.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Seite beim Ändern des Filtermodus automatisch neu laden", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Anzahl der blockierten Anfragen auf dem Symbol in der Symbolleiste anzeigen", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/el/messages.json b/platform/mv3/extension/_locales/el/messages.json index cc8c204..8e3bc5e 100644 --- a/platform/mv3/extension/_locales/el/messages.json +++ b/platform/mv3/extension/_locales/el/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Αυτόματη επαναφόρτωση σελίδας κατά την αλλαγή λειτουργίας φιλτραρίσματος", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Εμφάνιση του αριθμού των αποκλεισμένων αιτημάτων στο εικονίδιο της γραμμής εργαλείων", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/en/messages.json b/platform/mv3/extension/_locales/en/messages.json index 6725ba1..878f3cc 100644 --- a/platform/mv3/extension/_locales/en/messages.json +++ b/platform/mv3/extension/_locales/en/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/en_GB/messages.json b/platform/mv3/extension/_locales/en_GB/messages.json index b935137..884d7c1 100644 --- a/platform/mv3/extension/_locales/en_GB/messages.json +++ b/platform/mv3/extension/_locales/en_GB/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/eo/messages.json b/platform/mv3/extension/_locales/eo/messages.json index 9e86eea..ba5cfde 100644 --- a/platform/mv3/extension/_locales/eo/messages.json +++ b/platform/mv3/extension/_locales/eo/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/es/messages.json b/platform/mv3/extension/_locales/es/messages.json index 1bf7af5..53ff70b 100644 --- a/platform/mv3/extension/_locales/es/messages.json +++ b/platform/mv3/extension/_locales/es/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "Lista de nombres de host para los cuales no tendrá lugar el filtrado", + "message": "Lista de nombres de dominio para los cuales no se realizará ningún filtrado.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Recargar automáticamente la página al cambiar el modo de filtrado", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Mostrar el número de peticiones bloqueadas en el icono de la barra de herramientas", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/et/messages.json b/platform/mv3/extension/_locales/et/messages.json index 92e5952..69f6aa2 100644 --- a/platform/mv3/extension/_locales/et/messages.json +++ b/platform/mv3/extension/_locales/et/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Leht laadib ise uuesti filtreerimisrežiimi muutmisel", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Kuva tööriistariba ikoonil blokeeritud elementide arv", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/eu/messages.json b/platform/mv3/extension/_locales/eu/messages.json index 386468f..aa48a0a 100644 --- a/platform/mv3/extension/_locales/eu/messages.json +++ b/platform/mv3/extension/_locales/eu/messages.json @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Probatako eta baimenik behar ez duen eduki-blokeatzailea. Iragarkiak, jarraitzeko tresnak, eta gehiago instalatzean bertan [...]", + "message": "Probatako eta baimenik behar ez duen eduki-blokeatzailea. Iragarkiak, jarraitzeko tresnak, eta gehiago instalatzean bertan.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "Filtrorik ezarriko ez zaien zerbitzarien izenak", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Orria automatikoki kargatuko da iragazteko modua aldatuko denean", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/fa/messages.json b/platform/mv3/extension/_locales/fa/messages.json index b0ed662..900a492 100644 --- a/platform/mv3/extension/_locales/fa/messages.json +++ b/platform/mv3/extension/_locales/fa/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/fi/messages.json b/platform/mv3/extension/_locales/fi/messages.json index 44ac9b0..05d4211 100644 --- a/platform/mv3/extension/_locales/fi/messages.json +++ b/platform/mv3/extension/_locales/fi/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Lataa sivu suodatustilan vaihtuessa automaattisesti uudelleen", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Näytä estettyjen pyyntöjen määrä työkalupalkin kuvakkeessa", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/fil/messages.json b/platform/mv3/extension/_locales/fil/messages.json index 68025d2..fe5daa4 100644 --- a/platform/mv3/extension/_locales/fil/messages.json +++ b/platform/mv3/extension/_locales/fil/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Awtomatikong i-reload ang pahina kapag binago ang mode sa pagfi-filter", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/fr/messages.json b/platform/mv3/extension/_locales/fr/messages.json index 2f6a837..0152c8e 100644 --- a/platform/mv3/extension/_locales/fr/messages.json +++ b/platform/mv3/extension/_locales/fr/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "Liste des noms de domaine pour lesquels aucun filtrage n'aura lieu", + "message": "Liste des noms de domaine qu'uBO Lite ne devra pas filtrer", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Recharger automatiquement la page lors du changement de mode de filtrage", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Afficher le nombre de requêtes bloquées sur l'icône", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/fy/messages.json b/platform/mv3/extension/_locales/fy/messages.json index 606fc0a..f583e4b 100644 --- a/platform/mv3/extension/_locales/fy/messages.json +++ b/platform/mv3/extension/_locales/fy/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Side automatysk fernije by wizigjen fan filtermodus", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "It tal blokkearre oanfragen op it arkbalkepiktogram toane", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/gl/messages.json b/platform/mv3/extension/_locales/gl/messages.json index 460bdb8..760c65c 100644 --- a/platform/mv3/extension/_locales/gl/messages.json +++ b/platform/mv3/extension/_locales/gl/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Recargar automáticamente a páxina a cambiar o modo de filtrado", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Mostrar na icona da barra o número de peticións bloqueadas", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/gu/messages.json b/platform/mv3/extension/_locales/gu/messages.json index 627857e..4bbb5e3 100644 --- a/platform/mv3/extension/_locales/gu/messages.json +++ b/platform/mv3/extension/_locales/gu/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/he/messages.json b/platform/mv3/extension/_locales/he/messages.json index 3782fdb..beb73f2 100644 --- a/platform/mv3/extension/_locales/he/messages.json +++ b/platform/mv3/extension/_locales/he/messages.json @@ -20,7 +20,7 @@ "description": "appears as tab name in dashboard" }, "aboutPageName": { - "message": "אודות", + "message": "על אודות", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "טעינת עמוד באופן אוטומטי עם שינוי מצב סינון", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "הצגת מספר הבקשות החסומות על הסמל", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/hi/messages.json b/platform/mv3/extension/_locales/hi/messages.json index 89ed004..244acb8 100644 --- a/platform/mv3/extension/_locales/hi/messages.json +++ b/platform/mv3/extension/_locales/hi/messages.json @@ -20,7 +20,7 @@ "description": "appears as tab name in dashboard" }, "aboutPageName": { - "message": "परिचय", + "message": "जानकारी", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { @@ -72,11 +72,11 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "aboutChangelog": { - "message": "परिवर्तन लॉग", + "message": "परिवर्तन पत्र", "description": "" }, "aboutCode": { - "message": "सोर्स कोड {GPLv3}", + "message": "सोर्स कोड (GPLv3)", "description": "English: Source code (GPLv3)" }, "aboutContributors": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "फ़िल्टरिंग मोड बदलते समय स्वचालित रूप से पृष्ठ पुनः लोड करें", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "टूलबार आइकन पर अवरुद्ध अनुरोधों की संख्या दिखाएं", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/hr/messages.json b/platform/mv3/extension/_locales/hr/messages.json index 14c9401..2ae0291 100644 --- a/platform/mv3/extension/_locales/hr/messages.json +++ b/platform/mv3/extension/_locales/hr/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "Popis naziva hostova za koje se neće izvršiti filtriranje", + "message": "Popis naziva hostova za koje se neće izvršiti filtriranje.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatski ponovno učitaj stranicu pri promjeni načina filtriranja", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Prikaži broj blokiranih zahtjeva na ikoni alatne trake", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/hu/messages.json b/platform/mv3/extension/_locales/hu/messages.json index 5fe25d2..3ec2b0e 100644 --- a/platform/mv3/extension/_locales/hu/messages.json +++ b/platform/mv3/extension/_locales/hu/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Az oldal automatikus újratöltése a szűrési mód megváltoztatásakor", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Blokkolt kérések számának megjelenítése az eszköztárikonon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/hy/messages.json b/platform/mv3/extension/_locales/hy/messages.json index 50b9b44..7defd2e 100644 --- a/platform/mv3/extension/_locales/hy/messages.json +++ b/platform/mv3/extension/_locales/hy/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Զտման ռեժիմը փոխելիս ինքնաշխատորեն վերաբեռնել էջը", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/id/messages.json b/platform/mv3/extension/_locales/id/messages.json index e3c6f69..a71f966 100644 --- a/platform/mv3/extension/_locales/id/messages.json +++ b/platform/mv3/extension/_locales/id/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Otomatis memuat ulang halaman web saat mengubah mode filter", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/it/messages.json b/platform/mv3/extension/_locales/it/messages.json index 04c500e..beea941 100644 --- a/platform/mv3/extension/_locales/it/messages.json +++ b/platform/mv3/extension/_locales/it/messages.json @@ -8,11 +8,11 @@ "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { - "message": "{{ruleCount}} regole, convertite da {{filterCount}} filtri di rete", + "message": "{{ruleCount}} Regole, convertite da {{filterCount}} filtri di rete", "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { - "message": "uBO Lite — Cruscotto", + "message": "uBO Lite — Pannello di controllo", "description": "English: uBO Lite — Dashboard" }, "settingsPageName": { @@ -32,7 +32,7 @@ "description": "Label in the popup panel for the current filtering mode" }, "popupTipDashboard": { - "message": "Accedi al cruscotto", + "message": "Apri il pannello di controllo", "description": "English: Click to open the dashboard" }, "popupMoreButton": { @@ -44,7 +44,7 @@ "description": "Label to be used to hide popup panel sections" }, "3pGroupDefault": { - "message": "Predefinite", + "message": "Predefiniti", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAds": { @@ -60,7 +60,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { - "message": "Scocciature", + "message": "Disturbi", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Ricarica la pagina quando scegli un altro metodo di filtraggio", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Mostra il numero di richieste bloccate sull'icona nella barra degli strumenti", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/ja/messages.json b/platform/mv3/extension/_locales/ja/messages.json index fe679dc..ea15fdd 100644 --- a/platform/mv3/extension/_locales/ja/messages.json +++ b/platform/mv3/extension/_locales/ja/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "フィルタリングモード変更時にページを自動再読み込みする", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "ブロックしたリクエストの数をツールバーのアイコンに表示", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/ka/messages.json b/platform/mv3/extension/_locales/ka/messages.json index 298a736..c728583 100644 --- a/platform/mv3/extension/_locales/ka/messages.json +++ b/platform/mv3/extension/_locales/ka/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "გვერდის ავტომატური განახლება ფილტრაციის რეჟიმის შეცვლისას", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/kk/messages.json b/platform/mv3/extension/_locales/kk/messages.json index 627857e..4bbb5e3 100644 --- a/platform/mv3/extension/_locales/kk/messages.json +++ b/platform/mv3/extension/_locales/kk/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/kn/messages.json b/platform/mv3/extension/_locales/kn/messages.json index 627857e..30c578f 100644 --- a/platform/mv3/extension/_locales/kn/messages.json +++ b/platform/mv3/extension/_locales/kn/messages.json @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "ಅನುಮತಿ-ಕಡಿಮೆ ವಿಷಯ ಬ್ಲಾಕರ್. ಅನುಸ್ಥಾಪನೆಯ ತಕ್ಷಣವೇ ಜಾಹೀರಾತುಗಳು, ಟ್ರ್ಯಾಕರ್ಗಳು, ಗಣಿಗಾರರು ಮತ್ತು ಹೆಚ್ಚಿನದನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -12,19 +12,19 @@ "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { - "message": "uBO Lite — Dashboard", + "message": "\nಯುಬಿಒ ಲೈಟ್ - ಡ್ಯಾಶ್ಬೋರ್ಡ್\n", "description": "English: uBO Lite — Dashboard" }, "settingsPageName": { - "message": "Settings", + "message": "ಸಂಯೋಜನೆಗಳು", "description": "appears as tab name in dashboard" }, "aboutPageName": { - "message": "About", + "message": "ಬಗ್ಗೆ", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { - "message": "Privacy policy", + "message": "ಗೌಪ್ಯತಾ ನೀತಿ\n", "description": "Link to privacy policy on GitHub (English)" }, "popupFilteringModeLabel": { @@ -32,27 +32,27 @@ "description": "Label in the popup panel for the current filtering mode" }, "popupTipDashboard": { - "message": "Open the dashboard", + "message": "ಡ್ಯಾಶ್ಬೋರ್ಡ್ ತೆರೆಯಿರಿ", "description": "English: Click to open the dashboard" }, "popupMoreButton": { - "message": "More", + "message": "ಇನ್ನಷ್ಟು", "description": "Label to be used to show popup panel sections" }, "popupLessButton": { - "message": "Less", + "message": "ಕಡಿಮೆ", "description": "Label to be used to hide popup panel sections" }, "3pGroupDefault": { - "message": "Default", + "message": "ಪೂರ್ವನಿಯೋಜಿತ", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAds": { - "message": "Ads", + "message": "ಜಾಹೀರಾತುಗಳು", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupPrivacy": { - "message": "Privacy", + "message": "ಗೌಪ್ಯತೆ", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { @@ -64,15 +64,15 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { - "message": "Miscellaneous", + "message": "ವಿವಿಧ", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupRegions": { - "message": "Regions, languages", + "message": "ಪ್ರದೇಶಗಳು, ಭಾಷೆಗಳು\n", "description": "Header for a ruleset section in 'Filter lists pane'" }, "aboutChangelog": { - "message": "Changelog", + "message": "ಬದಲಾವಣೆಗಳು", "description": "" }, "aboutCode": { @@ -84,15 +84,15 @@ "description": "English: Contributors" }, "aboutSourceCode": { - "message": "Source code", + "message": "ಮೂಲ ಕೊಡ್", "description": "Link text to source code repo" }, "aboutTranslations": { - "message": "Translations", + "message": "ಅನುವಾದ", "description": "Link text to translations repo" }, "aboutFilterLists": { - "message": "Filter lists", + "message": "ಫಿಲ್ಟರ್ ಪಟ್ಟಿಗಳು", "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { @@ -100,7 +100,7 @@ "description": "Shown in the About pane" }, "firstRunSectionLabel": { - "message": "Welcome", + "message": "ಸ್ವಾಗತ", "description": "The header text for the welcome message section" }, "firstRunDescription": { @@ -120,7 +120,7 @@ "description": "Name of blocking mode 0" }, "filteringMode1Name": { - "message": "basic", + "message": "ಸಾಮಾನ್ಯ", "description": "Name of blocking mode 1" }, "filteringMode2Name": { @@ -128,7 +128,7 @@ "description": "Name of blocking mode 2" }, "filteringMode3Name": { - "message": "complete", + "message": "ಪೂರ್ಣ", "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/ko/messages.json b/platform/mv3/extension/_locales/ko/messages.json index 5942fce..d066b63 100644 --- a/platform/mv3/extension/_locales/ko/messages.json +++ b/platform/mv3/extension/_locales/ko/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "필터링 모드를 변경할 때 페이지 자동 새로고침", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "차단된 요청 개수를 도구 모음 아이콘에 표시", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/lt/messages.json b/platform/mv3/extension/_locales/lt/messages.json index 0377c08..3f0bad8 100644 --- a/platform/mv3/extension/_locales/lt/messages.json +++ b/platform/mv3/extension/_locales/lt/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatiškai perkrauti sveitane keičiant filtro rėžimą", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/lv/messages.json b/platform/mv3/extension/_locales/lv/messages.json index bea58f2..a37ba6d 100644 --- a/platform/mv3/extension/_locales/lv/messages.json +++ b/platform/mv3/extension/_locales/lv/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Pārlādēt lapu pēc aizturēšanas veida nomaiņas.", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Rādīt aizturēto pieprasījumu skaitu rīkjoslas ikonā", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/mk/messages.json b/platform/mv3/extension/_locales/mk/messages.json index 0ef10c7..cb7631b 100644 --- a/platform/mv3/extension/_locales/mk/messages.json +++ b/platform/mv3/extension/_locales/mk/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/ml/messages.json b/platform/mv3/extension/_locales/ml/messages.json index d272672..2bffd1a 100644 --- a/platform/mv3/extension/_locales/ml/messages.json +++ b/platform/mv3/extension/_locales/ml/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "ഫിൽട്ടറിംഗ് മോഡ് മാറ്റുമ്പോൾ പേജ് സ്വയമേവ റീലോഡ് ചെയ്യുക", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/mr/messages.json b/platform/mv3/extension/_locales/mr/messages.json index 627857e..4bbb5e3 100644 --- a/platform/mv3/extension/_locales/mr/messages.json +++ b/platform/mv3/extension/_locales/mr/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/ms/messages.json b/platform/mv3/extension/_locales/ms/messages.json index 2128e9b..817a81f 100644 --- a/platform/mv3/extension/_locales/ms/messages.json +++ b/platform/mv3/extension/_locales/ms/messages.json @@ -4,15 +4,15 @@ "description": "extension name." }, "extShortDesc": { - "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "Penyekat kandungan tanpa kebenaran. Menyekat iklan, penjejak, pelombong dan banyak lagi sebaik sahaja pemasangan.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { - "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters", + "message": "Peraturan {{ruleCount}}, ditukar daripada penapis rangkaian {{filterCount}}.", "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { - "message": "uBO Lite — Dashboard", + "message": "uBO Lite — Papan pemuka", "description": "English: uBO Lite — Dashboard" }, "settingsPageName": { @@ -28,11 +28,11 @@ "description": "Link to privacy policy on GitHub (English)" }, "popupFilteringModeLabel": { - "message": "filtering mode", + "message": "mod penapisan", "description": "Label in the popup panel for the current filtering mode" }, "popupTipDashboard": { - "message": "Open the dashboard", + "message": "Buka papan pemuka", "description": "English: Click to open the dashboard" }, "popupMoreButton": { @@ -60,7 +60,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { - "message": "Annoyances", + "message": "Kegusaran", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { @@ -104,15 +104,15 @@ "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.", + "message": "Anda baru sahaja memasang uBO Lite. Di sini anda boleh memilih mod penapisan lalai untuk digunakan pada semua tapak web.\n\nSecara lalai, mod <em>Asas</em> dipilih kerana ia tidak memerlukan kebenaran untuk membaca dan mengubah suai data. Jika anda mempercayai uBO Lite, anda boleh memberikannya kebenaran untuk membaca dan mengubah suai data pada semua tapak web untuk mendayakan keupayaan penapisan yang lebih maju untuk semua tapak web secara lalai.", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { - "message": "Default filtering mode", + "message": "Mod penapisan lalai", "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { - "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.", + "message": "Mod penapisan lalai akan ditindih oleh mod penapisan setiap tapak web. Anda boleh melaraskan mod penapisan pada mana-mana tapak web tertentu mengikut mana-mana mod yang paling berkesan pada tapak web tersebut. Setiap mod mempunyai kelebihan dan kekurangannya.", "description": "This describes the default filtering mode setting" }, "filteringMode0Name": { @@ -124,7 +124,7 @@ "description": "Name of blocking mode 1" }, "filteringMode2Name": { - "message": "optima", + "message": "optimum", "description": "Name of blocking mode 2" }, "filteringMode3Name": { @@ -132,19 +132,19 @@ "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { - "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.", + "message": "Penapisan rangkaian asas daripada senarai penapis yang dipilih.\n\nTidak memerlukan kebenaran untuk membaca dan mengubah suai data pada tapak web.", "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.", + "message": "Penapisan rangkaian lanjutan ditambah penapisan lanjutan khusus daripada senarai penapis yang dipilih.\n\nMemerlukan kebenaran untuk membaca dan mengubah suai data pada semua tapak web.", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", + "message": "Penapisan rangkaian lanjutan serta penapisan lanjutan khusus dan generik daripada senarai penapis yang dipilih.\n\nMemerlukan kebenaran untuk membaca dan mengubah suai data pada semua tapak web.\n\nPenapisan lanjutan generik boleh menyebabkan penggunaan sumber halaman web yang lebih tinggi.", "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "Senarai nama hos yang tiada penapisan akan berlaku", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -152,7 +152,11 @@ "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Automatically reload page when changing filtering mode", + "message": "Muat semula halaman secara automatik apabila menukar mod penapisan", + "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/nb/messages.json b/platform/mv3/extension/_locales/nb/messages.json index 5c47f65..4b0accf 100644 --- a/platform/mv3/extension/_locales/nb/messages.json +++ b/platform/mv3/extension/_locales/nb/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatisk last side på nytt ved endring av filtreringsmodus", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Vis antall blokkerte forespørsler på vertøyslinje-ikonet", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/nl/messages.json b/platform/mv3/extension/_locales/nl/messages.json index b83eeae..d73b801 100644 --- a/platform/mv3/extension/_locales/nl/messages.json +++ b/platform/mv3/extension/_locales/nl/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Pagina automatisch vernieuwen bij wijzigen van filtermodus", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Het aantal geblokkeerde aanvragen op het werkbalkpictogram tonen", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/oc/messages.json b/platform/mv3/extension/_locales/oc/messages.json index 627857e..4bbb5e3 100644 --- a/platform/mv3/extension/_locales/oc/messages.json +++ b/platform/mv3/extension/_locales/oc/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/pa/messages.json b/platform/mv3/extension/_locales/pa/messages.json index 753c355..868cc48 100644 --- a/platform/mv3/extension/_locales/pa/messages.json +++ b/platform/mv3/extension/_locales/pa/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "ਫਿਲਫਰ ਕਰਨ ਦਾ ਢੰਗ ਬਦਲਣ ਦੇ ਬਾਅਦ ਸਫ਼ੇ ਨੂੰ ਆਪਣੇ-ਆਪ ਲੋਡ ਕਰੋ", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/pl/messages.json b/platform/mv3/extension/_locales/pl/messages.json index 07c7543..1c7b89f 100644 --- a/platform/mv3/extension/_locales/pl/messages.json +++ b/platform/mv3/extension/_locales/pl/messages.json @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Eksperymentalny, niewymagający uprawnień bloker treści. Natychmiast po instalacji blokuje reklamy, moduły śledzące, koparki i nie tylko.", + "message": "Niewymagający uprawnień bloker treści. Natychmiast po instalacji blokuje reklamy, moduły śledzące, koparki i nie tylko.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatycznie wczytaj ponownie stronę po zmianie trybu filtrowania", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Wyświetlaj liczbę zablokowanych żądań na ikonie paska narzędzi", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/pt_BR/messages.json b/platform/mv3/extension/_locales/pt_BR/messages.json index cb4e978..e6265ef 100644 --- a/platform/mv3/extension/_locales/pt_BR/messages.json +++ b/platform/mv3/extension/_locales/pt_BR/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Recarregar a página automaticamente quando mudar o modo de filtragem", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Mostrar o número de solicitações bloqueadas no ícone da barra de ferramentas", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/pt_PT/messages.json b/platform/mv3/extension/_locales/pt_PT/messages.json index 4bd510a..511db27 100644 --- a/platform/mv3/extension/_locales/pt_PT/messages.json +++ b/platform/mv3/extension/_locales/pt_PT/messages.json @@ -140,11 +140,11 @@ "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Filtragem de rede avançada mais filtragem alargada específica e genérica a partir de listas de filtros selecionadas.\n\nRequer ampla permissão para ler e modificar dados em todos os websites.\n\nA filtragem alargada genérica pode causar uma maior utilização de recursos das páginas web.", + "message": "Filtragem de rede avançada acrescida de filtragem alargada específica e genérica a partir de listas de filtros selecionadas.\n\nRequer permissão ampla para ler e modificar dados em todos os websites.\n\nA filtragem alargada genérica pode causar uma maior utilização de recursos das páginas web.", "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "Lista de nomes de anfitriões para os quais não será efetuada qualquer filtragem", + "message": "Lista de nomes de anfitriões para os quais não será efetuada qualquer filtragem.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Recarrega automaticamente a página ao mudar o modo de filtragem", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Mostra o número de pedidos bloqueados no ícone da barra de ferramentas", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/ro/messages.json b/platform/mv3/extension/_locales/ro/messages.json index fb01a05..70f9bf6 100644 --- a/platform/mv3/extension/_locales/ro/messages.json +++ b/platform/mv3/extension/_locales/ro/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Reîncărcare automată a paginii la schimbarea modului de filtrare", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/ru/messages.json b/platform/mv3/extension/_locales/ru/messages.json index 0104b7c..f13511e 100644 --- a/platform/mv3/extension/_locales/ru/messages.json +++ b/platform/mv3/extension/_locales/ru/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "Список имён хостов, для которых не будет производиться фильтрация", + "message": "Список имён хостов, для которых не будет производиться фильтрация.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Автоматически перезагружать страницу при изменении режима фильтрации", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Показывать количество заблокированных запросов на иконке в панели инструментов", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/si/messages.json b/platform/mv3/extension/_locales/si/messages.json index 627857e..4bbb5e3 100644 --- a/platform/mv3/extension/_locales/si/messages.json +++ b/platform/mv3/extension/_locales/si/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/sk/messages.json b/platform/mv3/extension/_locales/sk/messages.json index 997c759..91ebfc9 100644 --- a/platform/mv3/extension/_locales/sk/messages.json +++ b/platform/mv3/extension/_locales/sk/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "Zoznam názvov hostiteľov s vylúčeným filtrovaním", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automaticky znova načítať stránku pri zmene režimu filtrovania", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Zobraziť počet zablokovaných požiadaviek na ikone rozšírenia", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/sl/messages.json b/platform/mv3/extension/_locales/sl/messages.json index 627857e..4bbb5e3 100644 --- a/platform/mv3/extension/_locales/sl/messages.json +++ b/platform/mv3/extension/_locales/sl/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/so/messages.json b/platform/mv3/extension/_locales/so/messages.json index 627857e..4bbb5e3 100644 --- a/platform/mv3/extension/_locales/so/messages.json +++ b/platform/mv3/extension/_locales/so/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/sq/messages.json b/platform/mv3/extension/_locales/sq/messages.json index d390d8d..7b8c074 100644 --- a/platform/mv3/extension/_locales/sq/messages.json +++ b/platform/mv3/extension/_locales/sq/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "Emrat e hosteve që nuk do të kalojnë në filtër", + "message": "Emrat e hosteve, që nuk do të kalojnë në filtër.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Freskoj automatikisht faqen kur ndryshoj mënyrën e filtrimit", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Shfaq numrin e kërkesave të bllokuara në ikonën e instrumenteve", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/sr/messages.json b/platform/mv3/extension/_locales/sr/messages.json index 0900785..5680a04 100644 --- a/platform/mv3/extension/_locales/sr/messages.json +++ b/platform/mv3/extension/_locales/sr/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Аутоматски поново учитај страницу при промени режима филтрирања", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Прикажи број блокираних захтева на иконици на траци алата", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/sv/messages.json b/platform/mv3/extension/_locales/sv/messages.json index fddcca5..5dcbfc9 100644 --- a/platform/mv3/extension/_locales/sv/messages.json +++ b/platform/mv3/extension/_locales/sv/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "Lista över värdnamn för vilka ingen filtrering kommer att äga rum", + "message": "Lista över värdnamn som inte kommer att filtreras", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Ladda automatiskt om sidan när du byter filtreringsläge", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Visa antalet blockerade förfrågningar på verktygsfältsikonen", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/sw/messages.json b/platform/mv3/extension/_locales/sw/messages.json index 627857e..4bbb5e3 100644 --- a/platform/mv3/extension/_locales/sw/messages.json +++ b/platform/mv3/extension/_locales/sw/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/ta/messages.json b/platform/mv3/extension/_locales/ta/messages.json index 627857e..4bbb5e3 100644 --- a/platform/mv3/extension/_locales/ta/messages.json +++ b/platform/mv3/extension/_locales/ta/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/te/messages.json b/platform/mv3/extension/_locales/te/messages.json index e263523..00008c2 100644 --- a/platform/mv3/extension/_locales/te/messages.json +++ b/platform/mv3/extension/_locales/te/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "ఫిల్టరింగ్ మోడ్ను మార్చేటప్పుడు పేజీని స్వయంచాలకంగా రీలోడ్ చేయండి", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/th/messages.json b/platform/mv3/extension/_locales/th/messages.json index 75f992a..8d523ba 100644 --- a/platform/mv3/extension/_locales/th/messages.json +++ b/platform/mv3/extension/_locales/th/messages.json @@ -88,7 +88,7 @@ "description": "Link text to source code repo" }, "aboutTranslations": { - "message": "การแปลภาษา", + "message": "แปล", "description": "Link text to translations repo" }, "aboutFilterLists": { @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/tr/messages.json b/platform/mv3/extension/_locales/tr/messages.json index b40f8a0..b4e4101 100644 --- a/platform/mv3/extension/_locales/tr/messages.json +++ b/platform/mv3/extension/_locales/tr/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Filtreleme modu değiştirildiğinde sayfayı yenile", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Engellenen isteklerin sayısını araç çubuğu simgesinde göster", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/uk/messages.json b/platform/mv3/extension/_locales/uk/messages.json index b48a9bb..5bf1a04 100644 --- a/platform/mv3/extension/_locales/uk/messages.json +++ b/platform/mv3/extension/_locales/uk/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Автоматично оновити сторінку при зміні режиму фільтрування", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Показувати кількість заблокованих запитів на піктограмі на панелі інструментів", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/ur/messages.json b/platform/mv3/extension/_locales/ur/messages.json index e66c4a9..2705d51 100644 --- a/platform/mv3/extension/_locales/ur/messages.json +++ b/platform/mv3/extension/_locales/ur/messages.json @@ -144,7 +144,7 @@ "description": "This describes the 'complete' filtering mode" }, "noFilteringModeDescription": { - "message": "List of hostnames for which no filtering will take place", + "message": "List of hostnames for which no filtering will take place.", "description": "A short description for the editable field which lists trusted sites" }, "behaviorSectionLabel": { @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/vi/messages.json b/platform/mv3/extension/_locales/vi/messages.json index 6ecd8cb..2c6d1f0 100644 --- a/platform/mv3/extension/_locales/vi/messages.json +++ b/platform/mv3/extension/_locales/vi/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "Tự động tải lại trang khi thay đổi chế độ bộ lọc", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Hiện số lượng yêu cầu bị chặn trên biểu tượng thanh công cụ", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/zh_CN/messages.json b/platform/mv3/extension/_locales/zh_CN/messages.json index c11fdf7..793f3c8 100644 --- a/platform/mv3/extension/_locales/zh_CN/messages.json +++ b/platform/mv3/extension/_locales/zh_CN/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "更改过滤模式后自动刷新网页", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/_locales/zh_TW/messages.json b/platform/mv3/extension/_locales/zh_TW/messages.json index 7825bd5..99ebc62 100644 --- a/platform/mv3/extension/_locales/zh_TW/messages.json +++ b/platform/mv3/extension/_locales/zh_TW/messages.json @@ -154,5 +154,9 @@ "autoReloadLabel": { "message": "變更過濾模式時自動重新載入頁面", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "在工具列圖示上顯示被阻擋的連線請求的數量", + "description": "Label for a checkbox in the options page" } } diff --git a/platform/mv3/extension/css/settings.css b/platform/mv3/extension/css/settings.css index f03e276..2e727fc 100644 --- a/platform/mv3/extension/css/settings.css +++ b/platform/mv3/extension/css/settings.css @@ -22,6 +22,14 @@ p { white-space: pre-line; } +section > div { + padding: 0 var(--default-gap-xxsmall); + } + +#showBlockedCount:has(input[type="checkbox"][disabled]) { + opacity: 0.5; + } + #defaultFilteringMode { display: grid; gap: 1em; diff --git a/platform/mv3/extension/dashboard.html b/platform/mv3/extension/dashboard.html index 698e1fb..d2dc918 100644 --- a/platform/mv3/extension/dashboard.html +++ b/platform/mv3/extension/dashboard.html @@ -25,6 +25,13 @@ </div> <!-- -------- --> <section data-pane="settings"> + <div> + <h3 data-i18n="behaviorSectionLabel"></h3> + <p><label id="autoReload" data-i18n="autoReloadLabel"><span class="input checkbox"><input type="checkbox"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span>_</label> + </p> + <p><label id="showBlockedCount" data-i18n="showBlockedCountLabel"><span class="input checkbox"><input type="checkbox"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span>_</label> + </div> + <div class="firstRun"> <h3 data-i18n="firstRunSectionLabel"></h3> <p data-i18n="firstRunDescription"></p> @@ -90,12 +97,6 @@ </div> <div> - <h3 data-i18n="behaviorSectionLabel"></h3> - <p><label id="autoReload" data-i18n="autoReloadLabel"><span class="input checkbox"><input type="checkbox"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span>_</label> - </p> - </div> - - <div> <h3 data-i18n="aboutFilterLists"></h3> <div> <p id="listsOfBlockedHostsPrompt"></p> diff --git a/platform/mv3/extension/js/background.js b/platform/mv3/extension/js/background.js index 5ceacc4..e65775e 100644 --- a/platform/mv3/extension/js/background.js +++ b/platform/mv3/extension/js/background.js @@ -19,47 +19,43 @@ Home: https://github.com/gorhill/uBlock */ -/* jshint esversion:11 */ - -'use strict'; - /******************************************************************************/ import { + adminRead, browser, dnr, - runtime, localRead, localWrite, + runtime, sessionRead, sessionWrite, - adminRead, } from './ext.js'; import { - getRulesetDetails, + broadcastMessage, + ubolLog, +} from './utils.js'; + +import { defaultRulesetsFromLanguage, enableRulesets, getEnabledRulesetsDetails, + getRulesetDetails, updateDynamicRules, } from './ruleset-manager.js'; import { - registerInjectables, -} from './scripting-manager.js'; - -import { - getFilteringMode, - setFilteringMode, getDefaultFilteringMode, - setDefaultFilteringMode, + getFilteringMode, getTrustedSites, + setDefaultFilteringMode, + setFilteringMode, setTrustedSites, syncWithBrowserPermissions, } from './mode-manager.js'; import { - broadcastMessage, - ubolLog, -} from './utils.js'; + registerInjectables, +} from './scripting-manager.js'; /******************************************************************************/ @@ -67,10 +63,13 @@ const rulesetConfig = { version: '', enabledRulesets: [ 'default' ], autoReload: true, + showBlockedCount: true, }; const UBOL_ORIGIN = runtime.getURL('').replace(/\/$/, ''); +const canShowBlockedCount = typeof dnr.setExtensionActionOptions === 'function'; + let firstRun = false; let wakeupRun = false; @@ -85,7 +84,12 @@ async function loadRulesetConfig() { if ( data ) { rulesetConfig.version = data.version; rulesetConfig.enabledRulesets = data.enabledRulesets; - rulesetConfig.autoReload = data.autoReload && true || false; + rulesetConfig.autoReload = typeof data.autoReload === 'boolean' + ? data.autoReload + : true; + rulesetConfig.showBlockedCount = typeof data.showBlockedCount === 'boolean' + ? data.showBlockedCount + : true; wakeupRun = true; return; } @@ -93,7 +97,12 @@ async function loadRulesetConfig() { if ( data ) { rulesetConfig.version = data.version; rulesetConfig.enabledRulesets = data.enabledRulesets; - rulesetConfig.autoReload = data.autoReload && true || false; + rulesetConfig.autoReload = typeof data.autoReload === 'boolean' + ? data.autoReload + : true; + rulesetConfig.showBlockedCount = typeof data.showBlockedCount === 'boolean' + ? data.showBlockedCount + : true; sessionWrite('rulesetConfig', rulesetConfig); return; } @@ -201,6 +210,8 @@ function onMessage(request, sender, callback) { maxNumberOfEnabledRulesets: dnr.MAX_NUMBER_OF_ENABLED_STATIC_RULESETS, rulesetDetails: Array.from(rulesetDetails.values()), autoReload: rulesetConfig.autoReload, + showBlockedCount: rulesetConfig.showBlockedCount, + canShowBlockedCount, firstRun, }); firstRun = false; @@ -216,6 +227,19 @@ function onMessage(request, sender, callback) { }); return true; + case 'setShowBlockedCount': + rulesetConfig.showBlockedCount = request.state && true || false; + if ( canShowBlockedCount ) { + dnr.setExtensionActionOptions({ + displayActionCountAsBadgeText: rulesetConfig.showBlockedCount, + }); + } + saveRulesetConfig().then(( ) => { + callback(); + broadcastMessage({ showBlockedCount: rulesetConfig.showBlockedCount }); + }); + return true; + case 'popupPanelData': { Promise.all([ getFilteringMode(request.hostname), @@ -329,8 +353,10 @@ async function start() { // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/declarativeNetRequest // Firefox API does not support `dnr.setExtensionActionOptions` - if ( wakeupRun === false && dnr.setExtensionActionOptions ) { - dnr.setExtensionActionOptions({ displayActionCountAsBadgeText: true }); + if ( wakeupRun === false && canShowBlockedCount ) { + dnr.setExtensionActionOptions({ + displayActionCountAsBadgeText: rulesetConfig.showBlockedCount, + }); } runtime.onMessage.addListener(onMessage); diff --git a/platform/mv3/extension/js/mode-manager.js b/platform/mv3/extension/js/mode-manager.js index bc76199..e75dbee 100644 --- a/platform/mv3/extension/js/mode-manager.js +++ b/platform/mv3/extension/js/mode-manager.js @@ -288,34 +288,53 @@ async function writeFilteringModeDetails(afterDetails) { async function filteringModesToDNR(modes) { const dynamicRuleMap = await getDynamicRules(); - const presentRule = dynamicRuleMap.get(TRUSTED_DIRECTIVE_BASE_RULE_ID); + const presentRule = dynamicRuleMap.get(TRUSTED_DIRECTIVE_BASE_RULE_ID+0); const presentNone = new Set( presentRule && presentRule.condition.requestDomains ); if ( eqSets(presentNone, modes.none) ) { return; } const removeRuleIds = []; if ( presentRule !== undefined ) { - removeRuleIds.push(TRUSTED_DIRECTIVE_BASE_RULE_ID); - dynamicRuleMap.delete(TRUSTED_DIRECTIVE_BASE_RULE_ID); + removeRuleIds.push(TRUSTED_DIRECTIVE_BASE_RULE_ID+0); + removeRuleIds.push(TRUSTED_DIRECTIVE_BASE_RULE_ID+1); + dynamicRuleMap.delete(TRUSTED_DIRECTIVE_BASE_RULE_ID+0); + dynamicRuleMap.delete(TRUSTED_DIRECTIVE_BASE_RULE_ID+1); } const addRules = []; - if ( modes.none.size !== 0 ) { - const rule = { - id: TRUSTED_DIRECTIVE_BASE_RULE_ID, + const noneHostnames = [ ...modes.none ]; + const notNoneHostnames = [ ...modes.basic, ...modes.optimal, ...modes.complete ]; + if ( noneHostnames.length !== 0 ) { + const rule0 = { + id: TRUSTED_DIRECTIVE_BASE_RULE_ID+0, action: { type: 'allowAllRequests' }, condition: { resourceTypes: [ 'main_frame' ], }, priority: 100, }; - if ( - modes.none.size !== 1 || - modes.none.has('all-urls') === false - ) { - rule.condition.requestDomains = Array.from(modes.none); + if ( modes.none.has('all-urls') === false ) { + rule0.condition.requestDomains = noneHostnames.slice(); + } else if ( notNoneHostnames.length !== 0 ) { + rule0.condition.excludedRequestDomains = notNoneHostnames.slice(); } - addRules.push(rule); - dynamicRuleMap.set(TRUSTED_DIRECTIVE_BASE_RULE_ID, rule); + addRules.push(rule0); + dynamicRuleMap.set(TRUSTED_DIRECTIVE_BASE_RULE_ID+0, rule0); + // https://github.com/uBlockOrigin/uBOL-home/issues/114 + const rule1 = { + id: TRUSTED_DIRECTIVE_BASE_RULE_ID+1, + action: { type: 'allow' }, + condition: { + resourceTypes: [ 'script' ], + }, + priority: 100, + }; + if ( modes.none.has('all-urls') === false ) { + rule1.condition.initiatorDomains = noneHostnames.slice(); + } else if ( notNoneHostnames.length !== 0 ) { + rule1.condition.excludedInitiatorDomains = notNoneHostnames.slice(); + } + addRules.push(rule1); + dynamicRuleMap.set(TRUSTED_DIRECTIVE_BASE_RULE_ID+1, rule1); } const updateOptions = {}; if ( addRules.length ) { diff --git a/platform/mv3/extension/js/scripting/css-procedural.js b/platform/mv3/extension/js/scripting/css-procedural.js index 818e697..7f50f80 100644 --- a/platform/mv3/extension/js/scripting/css-procedural.js +++ b/platform/mv3/extension/js/scripting/css-procedural.js @@ -341,6 +341,38 @@ class PSelectorOthersTask extends PSelectorTask { /******************************************************************************/ +class PSelectorShadowTask extends PSelectorTask { + constructor(task) { + super(); + this.selector = task[1]; + } + transpose(node, output) { + const root = this.openOrClosedShadowRoot(node); + if ( root === null ) { return; } + const nodes = root.querySelectorAll(this.selector); + output.push(...nodes); + } + get openOrClosedShadowRoot() { + if ( PSelectorShadowTask.openOrClosedShadowRoot !== undefined ) { + return PSelectorShadowTask.openOrClosedShadowRoot; + } + if ( typeof chrome === 'object' && chrome !== null ) { + if ( chrome.dom instanceof Object ) { + if ( typeof chrome.dom.openOrClosedShadowRoot === 'function' ) { + PSelectorShadowTask.openOrClosedShadowRoot = + chrome.dom.openOrClosedShadowRoot; + return PSelectorShadowTask.openOrClosedShadowRoot; + } + } + } + PSelectorShadowTask.openOrClosedShadowRoot = node => + node.openOrClosedShadowRoot || null; + return PSelectorShadowTask.openOrClosedShadowRoot; + } +} + +/******************************************************************************/ + // https://github.com/AdguardTeam/ExtendedCss/issues/31#issuecomment-302391277 // Prepend `:scope ` if needed. class PSelectorSpathTask extends PSelectorTask { @@ -471,7 +503,6 @@ class PSelectorXpathTask extends PSelectorTask { class PSelector { constructor(o) { - this.raw = o.raw; this.selector = o.selector; this.tasks = []; const tasks = []; @@ -542,6 +573,7 @@ PSelector.prototype.operatorToTaskMap = new Map([ [ 'min-text-length', PSelectorMinTextLengthTask ], [ 'not', PSelectorIfNotTask ], [ 'others', PSelectorOthersTask ], + [ 'shadow', PSelectorShadowTask ], [ 'spath', PSelectorSpathTask ], [ 'upward', PSelectorUpwardTask ], [ 'watch-attr', PSelectorWatchAttrs ], @@ -566,6 +598,13 @@ class PSelectorRoot extends PSelector { } return []; } + exec(input) { + try { + return super.exec(input); + } catch (ex) { + } + return []; + } } /******************************************************************************/ diff --git a/platform/mv3/extension/js/settings.js b/platform/mv3/extension/js/settings.js index 1a95ac0..6f50055 100644 --- a/platform/mv3/extension/js/settings.js +++ b/platform/mv3/extension/js/settings.js @@ -19,11 +19,9 @@ Home: https://github.com/gorhill/uBlock */ -'use strict'; - -import { browser, sendMessage, localRead, localWrite } from './ext.js'; -import { i18n$, i18n } from './i18n.js'; +import { browser, localRead, localWrite, sendMessage } from './ext.js'; import { dom, qs$, qsa$ } from './dom.js'; +import { i18n, i18n$ } from './i18n.js'; import punycode from './punycode.js'; /******************************************************************************/ @@ -211,7 +209,17 @@ function renderWidgets() { renderDefaultMode(); renderTrustedSites(); - qs$('#autoReload input[type="checkbox"').checked = cachedRulesetData.autoReload; + qs$('#autoReload input[type="checkbox"]').checked = cachedRulesetData.autoReload; + + { + const input = qs$('#showBlockedCount input[type="checkbox"]'); + if ( cachedRulesetData.canShowBlockedCount ) { + input.checked = cachedRulesetData.showBlockedCount; + } else { + input.checked = false; + dom.attr(input, 'disabled', ''); + } + } // Compute total counts let rulesetCount = 0; @@ -290,13 +298,20 @@ dom.on( /******************************************************************************/ -dom.on('#autoReload input[type="checkbox"', 'change', ev => { +dom.on('#autoReload input[type="checkbox"]', 'change', ev => { sendMessage({ what: 'setAutoReload', state: ev.target.checked, }); }); +dom.on('#showBlockedCount input[type="checkbox"]', 'change', ev => { + sendMessage({ + what: 'setShowBlockedCount', + state: ev.target.checked, + }); +}); + /******************************************************************************/ function renderTrustedSites() { @@ -455,6 +470,13 @@ bc.onmessage = ev => { } } + if ( message.showBlockedCount !== undefined ) { + if ( message.showBlockedCount !== local.showBlockedCount ) { + local.showBlockedCount = message.showBlockedCount; + render = true; + } + } + if ( message.enabledRulesets !== undefined ) { if ( hashFromIterable(message.enabledRulesets) !== hashFromIterable(local.enabledRulesets) ) { local.enabledRulesets = message.enabledRulesets; diff --git a/platform/mv3/extension/js/utils.js b/platform/mv3/extension/js/utils.js index b1a463a..cadeaea 100644 --- a/platform/mv3/extension/js/utils.js +++ b/platform/mv3/extension/js/utils.js @@ -131,11 +131,22 @@ export const broadcastMessage = message => { /******************************************************************************/ const ubolLog = (...args) => { - // Do not pollute dev console in stable release. - if ( browser.runtime.id === 'ddkjiahejlhfcafbddmgiahcphecmpfh' ) { return; } + // Do not pollute dev console in stable releases. + if ( shouldLog !== true ) { return; } console.info('[uBOL]', ...args); }; +const shouldLog = (( ) => { + const { id } = browser.runtime; + // https://addons.mozilla.org/en-US/firefox/addon/ublock-origin-lite/ + if ( id === 'uBOLite@raymondhill.net' ) { return false; } + // https://chromewebstore.google.com/detail/ddkjiahejlhfcafbddmgiahcphecmpfh + if ( id === 'ddkjiahejlhfcafbddmgiahcphecmpfh' ) { return false; } + // https://microsoftedge.microsoft.com/addons/detail/cimighlppcgcoapaliogpjjdehbnofhn + if ( id === 'cimighlppcgcoapaliogpjjdehbnofhn' ) { return false; } + return true; +})(); + /******************************************************************************/ export { diff --git a/platform/mv3/make-rulesets.js b/platform/mv3/make-rulesets.js index 6b608bf..4f79d52 100644 --- a/platform/mv3/make-rulesets.js +++ b/platform/mv3/make-rulesets.js @@ -110,7 +110,7 @@ const urlToFileName = url => { ; }; -const fetchList = (url, cacheDir) => { +const fetchText = (url, cacheDir) => { return new Promise((resolve, reject) => { const fname = urlToFileName(url); fs.readFile(`${cacheDir}/${fname}`, { encoding: 'utf8' }).then(content => { @@ -168,7 +168,7 @@ const requiredRedirectResources = new Set(); /******************************************************************************/ -async function fetchAsset(assetDetails) { +async function fetchList(assetDetails) { // Remember fetched URLs const fetchedURLs = new Set(); @@ -190,7 +190,7 @@ async function fetchAsset(assetDetails) { newParts.push(`!#trusted on ${assetDetails.secret}`); } newParts.push( - fetchList(part.url, cacheDir).then(details => { + fetchText(part.url, cacheDir).then(details => { const { url } = details; const content = details.content.trim(); if ( typeof content === 'string' && content !== '' ) { @@ -227,10 +227,13 @@ const isRegex = rule => rule.condition !== undefined && rule.condition.regexFilter !== undefined; -const isRedirect = rule => - rule.action !== undefined && - rule.action.type === 'redirect' && - rule.action.redirect.extensionPath !== undefined; +const isRedirect = rule => { + if ( rule.action === undefined ) { return false; } + if ( rule.action.type !== 'redirect' ) { return false; } + if ( rule.action.redirect?.extensionPath !== undefined ) { return true; } + if ( rule.action.redirect?.transform?.path !== undefined ) { return true; } + return false; +}; const isModifyHeaders = rule => rule.action !== undefined && @@ -367,6 +370,14 @@ async function processNetworkFilters(assetDetails, network) { } } + // Add native DNR ruleset if present + if ( assetDetails.dnrURL ) { + const result = await fetchText(assetDetails.dnrURL, cacheDir); + for ( const rule of JSON.parse(result.content) ) { + rules.push(rule); + } + } + const plainGood = rules.filter(rule => isGood(rule) && isRegex(rule) === false); log(`\tPlain good: ${plainGood.length}`); log(plainGood @@ -384,6 +395,7 @@ async function processNetworkFilters(assetDetails, network) { isRedirect(rule) ); redirects.forEach(rule => { + if ( rule.action.redirect.extensionPath === undefined ) { return; } requiredRedirectResources.add( rule.action.redirect.extensionPath.replace(/^\/+/, '') ); @@ -979,11 +991,15 @@ async function rulesetFromURLs(assetDetails) { log(`Listset for '${assetDetails.id}':`); if ( assetDetails.text === undefined ) { - const text = await fetchAsset(assetDetails); + const text = await fetchList(assetDetails); if ( text === '' ) { return; } assetDetails.text = text; } + if ( Array.isArray(assetDetails.filters) ) { + assetDetails.text += '\n' + assetDetails.filters.join('\n'); + } + const extensionPaths = []; for ( const [ fname, details ] of redirectResourcesMap ) { const path = `/web_accessible_resources/${fname}`; @@ -1140,10 +1156,10 @@ async function main() { // Assemble all default lists as the default ruleset const contentURLs = [ 'https://ublockorigin.github.io/uAssets/filters/filters.min.txt', - 'https://ublockorigin.github.io/uAssets/filters/badware.txt', + 'https://ublockorigin.github.io/uAssets/filters/badware.min.txt', 'https://ublockorigin.github.io/uAssets/filters/privacy.min.txt', 'https://ublockorigin.github.io/uAssets/filters/unbreak.min.txt', - 'https://ublockorigin.github.io/uAssets/filters/quick-fixes.txt', + 'https://ublockorigin.github.io/uAssets/filters/quick-fixes.min.txt', 'https://ublockorigin.github.io/uAssets/filters/ubol-filters.txt', 'https://ublockorigin.github.io/uAssets/thirdparties/easylist.txt', 'https://ublockorigin.github.io/uAssets/thirdparties/easyprivacy.txt', @@ -1155,7 +1171,10 @@ async function main() { enabled: true, secret, urls: contentURLs, + dnrURL: 'https://ublockorigin.github.io/uAssets/dnr/default.json', homeURL: 'https://github.com/uBlockOrigin/uAssets', + filters: [ + ], }); // Regional rulesets @@ -1206,7 +1225,6 @@ async function main() { for ( const id of handpicked ) { const asset = assets[id]; if ( asset.content !== 'filters' ) { continue; } - const contentURL = Array.isArray(asset.contentURL) ? asset.contentURL[0] : asset.contentURL; @@ -1234,45 +1252,45 @@ async function main() { }); await rulesetFromURLs({ id: 'annoyances-overlays', - name: 'AdGuard/uBO – Overlays', + name: 'EasyList/uBO – Overlay Notices', group: 'annoyances', enabled: false, secret, urls: [ - 'https://filters.adtidy.org/extension/ublock/filters/19.txt', + 'https://ublockorigin.github.io/uAssets/thirdparties/easylist-newsletters.txt', 'https://ublockorigin.github.io/uAssets/filters/annoyances-others.txt', ], - homeURL: 'https://github.com/AdguardTeam/AdguardFilters#adguard-filters', + homeURL: 'https://github.com/easylist/easylist#fanboy-lists', }); await rulesetFromURLs({ id: 'annoyances-social', - name: 'AdGuard – Social Media', + name: 'EasyList – Social Widgets', group: 'annoyances', enabled: false, urls: [ - 'https://filters.adtidy.org/extension/ublock/filters/4.txt', + 'https://ublockorigin.github.io/uAssets/thirdparties/easylist-social.txt', ], - homeURL: 'https://github.com/AdguardTeam/AdguardFilters#adguard-filters', + homeURL: 'https://github.com/easylist/easylist#fanboy-lists', }); await rulesetFromURLs({ id: 'annoyances-widgets', - name: 'AdGuard – Widgets', + name: 'EasyList – Chat Widgets', group: 'annoyances', enabled: false, urls: [ - 'https://filters.adtidy.org/extension/ublock/filters/22.txt', + 'https://ublockorigin.github.io/uAssets/thirdparties/easylist-chat.txt', ], - homeURL: 'https://github.com/AdguardTeam/AdguardFilters#adguard-filters', + homeURL: 'https://github.com/easylist/easylist#fanboy-lists', }); await rulesetFromURLs({ id: 'annoyances-others', - name: 'AdGuard – Other Annoyances', + name: 'EasyList – Other Annoyances', group: 'annoyances', enabled: false, urls: [ - 'https://filters.adtidy.org/extension/ublock/filters/21.txt', + 'https://ublockorigin.github.io/uAssets/thirdparties/easylist-annoyances.txt' ], - homeURL: 'https://github.com/AdguardTeam/AdguardFilters#adguard-filters', + homeURL: 'https://github.com/easylist/easylist#fanboy-lists', }); // Handpicked rulesets from abroad diff --git a/platform/mv3/salvage-ruleids.mjs b/platform/mv3/salvage-ruleids.mjs new file mode 100644 index 0000000..f11d986 --- /dev/null +++ b/platform/mv3/salvage-ruleids.mjs @@ -0,0 +1,117 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2024-present 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +'use strict'; + +/******************************************************************************/ + +import fs from 'fs/promises'; +import process from 'process'; + +/******************************************************************************/ + +const commandLineArgs = (( ) => { + const args = new Map(); + let name, value; + for ( const arg of process.argv.slice(2) ) { + const pos = arg.indexOf('='); + if ( pos === -1 ) { + name = arg; + value = ''; + } else { + name = arg.slice(0, pos); + value = arg.slice(pos+1); + } + args.set(name, value); + } + return args; +})(); + +const beforeDir = commandLineArgs.get('before') || ''; +const afterDir = commandLineArgs.get('after') || ''; + +if ( beforeDir === '' || afterDir === '' ) { + process.exit(0); +} + +/******************************************************************************/ + +async function main() { + const folders = [ + 'main', + 'modify-headers', + 'redirect', + 'regex', + 'removeparam', + ]; + const writePromises = []; + for ( const folder of folders ) { + const afterFiles = await fs.readdir(`${afterDir}/rulesets/${folder}`); + for ( const file of afterFiles ) { + let raw = await fs.readFile(`${beforeDir}/rulesets/${folder}/${file}`, 'utf-8').catch(( ) => ''); + let beforeRules; + try { beforeRules = JSON.parse(raw); } catch(_) { } + if ( Array.isArray(beforeRules) === false ) { continue; } + raw = await fs.readFile(`${afterDir}/rulesets/${folder}/${file}`, 'utf-8').catch(( ) => ''); + let afterRules; + try { afterRules = JSON.parse(raw); } catch(_) { } + if ( Array.isArray(afterRules) === false ) { continue; } + const beforeMap = new Map(beforeRules.map(a => { + const id = a.id; + a.id = 0; + return [ JSON.stringify(a), id ]; + })); + const reusedIds = new Set(); + for ( const afterRule of afterRules ) { + afterRule.id = 0; + const key = JSON.stringify(afterRule); + const beforeId = beforeMap.get(key); + if ( beforeId === undefined ) { continue; } + if ( reusedIds.has(beforeId) ) { continue; } + afterRule.id = beforeId; + reusedIds.add(beforeId); + } + // Assign new ids to unmatched rules + let ruleIdGenerator = 1; + for ( const afterRule of afterRules ) { + if ( afterRule.id !== 0 ) { continue; } + while ( reusedIds.has(ruleIdGenerator) ) { ruleIdGenerator += 1; } + afterRule.id = ruleIdGenerator++; + } + afterRules.sort((a, b) => a.id - b.id); + const indent = afterRules.length > 10 ? undefined : 1; + const lines = []; + for ( const afterRule of afterRules ) { + lines.push(JSON.stringify(afterRule, null, indent)); + } + const path = `${afterDir}/rulesets/${folder}/${file}`; + console.log(` Salvaged ${reusedIds.size} ids in ${folder}/${file}`); + writePromises.push( + fs.writeFile(path, `[\n${lines.join(',\n')}\n]\n`) + ); + } + } + await Promise.all(writePromises); +} + +main(); + +/******************************************************************************/ diff --git a/platform/mv3/scriptlets/scriptlet.template.js b/platform/mv3/scriptlets/scriptlet.template.js index b2c4ada..f5a4748 100644 --- a/platform/mv3/scriptlets/scriptlet.template.js +++ b/platform/mv3/scriptlets/scriptlet.template.js @@ -40,7 +40,7 @@ // Start of code to inject const uBOL_$scriptletName$ = function() { -const scriptletGlobals = new Map(); // jshint ignore: line +const scriptletGlobals = {}; // jshint ignore: line const argsList = self.$argsList$; diff --git a/platform/opera/manifest.json b/platform/opera/manifest.json index abc0bda..afaaad3 100644 --- a/platform/opera/manifest.json +++ b/platform/opera/manifest.json @@ -30,6 +30,9 @@ }, "toggle-cosmetic-filtering": { "description": "__MSG_toggleCosmeticFiltering__" + }, + "toggle-javascript": { + "description": "__MSG_toggleJavascript__" } }, "content_scripts": [ @@ -90,6 +93,7 @@ "name": "uBlock Origin", "options_page": "dashboard.html", "permissions": [ + "alarms", "contextMenus", "privacy", "storage", |