Compare commits

..

1 commit

Author SHA1 Message Date
theaquamarine
bd01f6cd1b
Merge f6163cd947 into f80143a8ee 2024-12-04 17:55:40 -08:00
99 changed files with 275 additions and 1118 deletions

View file

@ -1,6 +1,3 @@
- [Improve `trusted-replace-argument` scriptlet](https://github.com/gorhill/uBlock/commit/3417fe3d5d)
- [Block media elements unconditionally when max size is set to 0](https://github.com/gorhill/uBlock/commit/36db7f8327)
- Regression from <https://github.com/gorhill/uBlock/commit/73ce4e6bcf>
- [Visually separate scriptlet parameters in active line](https://github.com/gorhill/uBlock/commit/076e9fa73e)
- [Mitigate potentially delayed execution of scriptlets in Firefox](https://github.com/gorhill/uBlock/commit/b1a00145bd)
- [Improve `prevent-setTimeout`/`prevent-setInterval` scriptlets](https://github.com/gorhill/uBlock/commit/3b7fa79a68)

View file

@ -3,9 +3,9 @@
"uBlock0@raymondhill.net": {
"updates": [
{
"version": "1.61.3.5",
"version": "1.61.3.3",
"browser_specific_settings": { "gecko": { "strict_min_version": "78.0" } },
"update_link": "https://github.com/gorhill/uBlock/releases/download/1.61.3b5/uBlock0_1.61.3b5.firefox.signed.xpi"
"update_link": "https://github.com/gorhill/uBlock/releases/download/1.61.3b3/uBlock0_1.61.3b3.firefox.signed.xpi"
}
]
}

2
dist/version vendored
View file

@ -1 +1 @@
1.61.3.5
1.61.3.3

View file

@ -251,14 +251,6 @@
"message": "لقد منع uBO Lite تحميل الصفحة التالية:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite папярэдзіў чытанне наступнай старонкі:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "без параметраў",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite попречи на зареждането на следната страница:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "Страницата е блокирана поради съвпадащ филтър в {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "Блокираната страница иска да ви пренасочи към друг сайт. Ако изберете да продължите, ще преминете директно към: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "без параметри",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite en deus miret ar bajenn-mañ da gargañ:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "Stanket eo bet ar bajenn abalamour d'ur sil dereat e-barzh {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "Ar bajenn stanket a fell dezhi adkas d'ul lec'hienn all. M'ho peus c'hoant da genderc'hel e vioc'h kaset d'ar chomlec'h-mañ: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "kuit a arventennoù",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "L'uBO Lite ha evitat la càrrega d'aquesta pàgina:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "La pàgina s'ha blocat a causa d'un filtre coincident a {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "La pàgina blocada vol redirigir-vos a un altre web diferent. Si continueu, si us reenviarà a: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "sense paràmetres",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite har forhindret flg. side i at blive indlæst:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "Siden blev blokeret grundet et matchende filter i {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "Den blokerede side ønsker at omdirigere til et andet websted. Vælger man at fortsætte, navigeres direkte til: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "uden parametre",
"description": "Label to be used for the parameter-less URL"

View file

@ -232,7 +232,7 @@
"description": "Label for a checkbox in the options page"
},
"enableStrictBlockLabel": {
"message": "Striktes Blockieren aktivieren",
"message": "Stricktes Blockieren aktivieren",
"description": "Label for a checkbox in the options page"
},
"enableStrictBlockLegend": {
@ -251,14 +251,6 @@
"message": "uBO Lite hat das Laden der folgenden Seite verhindert:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "Die Seite wurde aufgrund eines übereinstimmenden Filters in {{listname}} blockiert.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "Die blockierte Seite möchte zu einer anderen Website weiterleiten. Beim Fortfahren wird folgende Seite aufgerufen: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "ohne Parameter",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -250,14 +250,6 @@
"strictblockSentence1": {
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite impidió la carga de la página:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "La página fue bloqueada debido a un filtro coincidente en {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "La página bloqueada quiere redirigir a otro sitio. Si eliges proceder, navegarás directamente a: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "sin parámetros",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite ennetas järgmise veebilehe laadimist:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "Lehe avamine keelati {{listname}} tõttu.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "Keelatud leht üritab suunata teisele lehele. Jätkates nõustute avama {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "ilma näitajateta",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite on estänyt seuraavan sivun latauksen:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "Sivu estettiin listalla {{listname}} olevan sännön perusteella.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "Estetty sivu ohjautuu eri sivustolle. Jos jatkat, siirryt suoraan osoitteeseen {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "ilman parametreja",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite a empêché le chargement de cette page :",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "La page a été bloquée à cause d'un filtre correspondant dans {{listname}}",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "La page bloquée souhaite rediriger vers un autre site. Si vous choisissez de continuer, vous vous rendrez à l'adresse suivante : {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "sans paramètres",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite hat opkeard dat de folgjende side laden wurd:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "sûnder parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite evitou que a seguinte páxina se cargase:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "Bloqueouse a páxina porque concorda cun filtro de {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "A páxina bloqueada quere redirixir a outra web. Se elixes continuar vas ir directamente a: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "sen parámetros",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -232,11 +232,11 @@
"description": "Label for a checkbox in the options page"
},
"enableStrictBlockLabel": {
"message": "הפעלת חסימה קפדנית",
"message": "Enable strict blocking",
"description": "Label for a checkbox in the options page"
},
"enableStrictBlockLegend": {
"message": "ניווט אפשרי לאתרים לא רצויים יחסם ותהיה אפשרות להחליט להמשיך.",
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Label for a checkbox in the options page"
},
"findListsPlaceholder": {
@ -244,39 +244,31 @@
"description": "Placeholder for the input field used to find lists"
},
"strictblockTitle": {
"message": "הדף נחסם",
"message": "Page blocked",
"description": "Webpage title for the strict-blocked page"
},
"strictblockSentence1": {
"message": "uBO Lite מנע טעינה של הדפים הבאים:",
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "הדף נחסם בגלל התאמה למסנן מהרשימה {{listname}}",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "הדף החסום רוצה להעביר אותך לאתר אחר. בחירה להמשיך תעבור ישירות ל {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "ללא פרמטרים",
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"
},
"strictblockBack": {
"message": "חזור",
"message": "Go back",
"description": "A button to go back to the previous webpage"
},
"strictblockClose": {
"message": "סגור חלון זה",
"message": "Close this window",
"description": "A button to close the current tab"
},
"strictblockDontWarn": {
"message": "אל תתריע לי שוב על אתר זה",
"message": "Don't warn me again about this site",
"description": "Label for checkbox in document-blocked page"
},
"strictblockProceed": {
"message": "המשך",
"message": "Proceed",
"description": "A button to navigate to the blocked page"
}
}

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "पृष्ठ को {{listname}} में मेल खाते फ़िल्टर के कारण अवरुद्ध किया गया था.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "ब्लॉक किया गया पेज किसी दूसरी साइट पर रीडायरेक्ट करना चाहता है. अगर आप आगे बढ़ना चुनते हैं, तो आप सीधे इस पर नेविगेट करें: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite je spriječio učitavanje sljedeće stranice:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "Stranica je blokirana zbog odgovarajućeg filtra u {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "Blokirana stranica želi preusmjeriti na drugu stranicu. Ako odlučite nastaviti, otići ćete izravno na: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "bez parametara",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "A uBO Lite megakadályozta a következő oldal betöltését:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "paraméterek nélkül",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -232,51 +232,43 @@
"description": "Label for a checkbox in the options page"
},
"enableStrictBlockLabel": {
"message": "Aktifkan pemblokiran ketat",
"message": "Enable strict blocking",
"description": "Label for a checkbox in the options page"
},
"enableStrictBlockLegend": {
"message": "Navigasi ke situs yang mungkin tidak diinginkan akan diblokir, dan Anda akan ditawari opsi untuk melanjutkan.",
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Label for a checkbox in the options page"
},
"findListsPlaceholder": {
"message": "Temukan daftar",
"message": "Find lists",
"description": "Placeholder for the input field used to find lists"
},
"strictblockTitle": {
"message": "Halaman diblokir",
"message": "Page blocked",
"description": "Webpage title for the strict-blocked page"
},
"strictblockSentence1": {
"message": "uBO Lite telah mencegah pemuatan halaman berikut:",
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "tanpa parameter",
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"
},
"strictblockBack": {
"message": "Kembali",
"message": "Go back",
"description": "A button to go back to the previous webpage"
},
"strictblockClose": {
"message": "Tutup jendela ini",
"message": "Close this window",
"description": "A button to close the current tab"
},
"strictblockDontWarn": {
"message": "Jangan peringatkan saya lagi tentang situs ini",
"message": "Don't warn me again about this site",
"description": "Label for checkbox in document-blocked page"
},
"strictblockProceed": {
"message": "Lanjutkan",
"message": "Proceed",
"description": "A button to navigate to the blocked page"
}
}

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "La pagina è stata bloccata a causa di un filtro corrispondente in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "La pagina bloccata vuole reindirizzare a un altro sito. Se scegli di procedere, navigherai direttamente su: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite はこのページの読み込みをブロックしています:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "パラメータを除いた URL",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite novērsa šīs lapas ielādēšanu:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "Lapa tika aizturēta, jo atbilst aizturētājam sarakstā {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "Aizturētā lapa veic pārvirzīšanu uz citu vietni. Ja izvēlēsies turpināt, nonāksi uzreiz šeit: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "bez parametriem",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -232,11 +232,11 @@
"description": "Label for a checkbox in the options page"
},
"enableStrictBlockLabel": {
"message": "Strenge blokkering inschakelen",
"message": "Enable strict blocking",
"description": "Label for a checkbox in the options page"
},
"enableStrictBlockLegend": {
"message": "Navigatie naar mogelijk ongewenste websites wordt geblokkeerd, en nu krijgt de mogelijkheid om door te gaan.",
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Label for a checkbox in the options page"
},
"findListsPlaceholder": {
@ -244,39 +244,31 @@
"description": "Placeholder for the input field used to find lists"
},
"strictblockTitle": {
"message": "Pagina geblokkeerd",
"message": "Page blocked",
"description": "Webpage title for the strict-blocked page"
},
"strictblockSentence1": {
"message": "uBO Lite heeft het laden van de volgende pagina voorkomen:",
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "De pagina is geblokkeerd vanwege een overeenkomend filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "De geblokkeerde pagina wil u omleiden naar een andere website. Als u doorgaat, navigeert u rechtstreeks naar: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "zonder parameters",
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"
},
"strictblockBack": {
"message": "Teruggaan",
"message": "Go back",
"description": "A button to go back to the previous webpage"
},
"strictblockClose": {
"message": "Dit venster sluiten",
"message": "Close this window",
"description": "A button to close the current tab"
},
"strictblockDontWarn": {
"message": "Mij niet meer waarschuwen over deze website",
"message": "Don't warn me again about this site",
"description": "Label for checkbox in document-blocked page"
},
"strictblockProceed": {
"message": "Doorgaan",
"message": "Proceed",
"description": "A button to navigate to the blocked page"
}
}

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite nie pozwolił załadować się następującej stronie:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "Strona została zablokowana z powodu pasującego filtra na liście {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "Zablokowana strona chce przekierować na inną witrynę. Jeśli zdecydujesz się kontynuować, przejdziesz bezpośrednio do: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "bez parametrów",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "O uBO Lite impediu o carregamento da seguinte página:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "A página foi bloqueada por causa de um filtro que combina no {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "A página bloqueada quer redirecionar para outro site. Se você escolher prosseguir, você navegará diretamente para: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "sem parâmetros",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite предотвратил загрузку следующей страницы:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "Веб-страница была заблокирована из-за попадания в фильтр из {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "Заблокированная страница собирается перенаправить вас на другой сайт. Если вы решите продолжить, вы перейдете непосредственно на: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "без параметров",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite zabránil načítaniu nasledujúcej stránky:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "Stránka bola zablokovaná z dôvodu zhodného filtra v{{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "Zablokovaná stránka chce presmerovať na inú stránku. Ak sa rozhodnete pokračovať, prejdete priamo na: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "bez parametrov",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -232,11 +232,11 @@
"description": "Label for a checkbox in the options page"
},
"enableStrictBlockLabel": {
"message": "Aktivizo bllokimin strikt",
"message": "Enable strict blocking",
"description": "Label for a checkbox in the options page"
},
"enableStrictBlockLegend": {
"message": "Lundrimi drejt faqeve potencialisht të padëshirueshme do të bllokohet dhe do t'ju ofrohet mundësia për të vazhduar.",
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Label for a checkbox in the options page"
},
"findListsPlaceholder": {
@ -244,39 +244,31 @@
"description": "Placeholder for the input field used to find lists"
},
"strictblockTitle": {
"message": "Faqe e bllokuar",
"message": "Page blocked",
"description": "Webpage title for the strict-blocked page"
},
"strictblockSentence1": {
"message": "uMatrix ka penguar ngarkimin e faqes vijuese:",
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "Faqja u bllokua për shkak të një filtri që përputhet në: {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "Faqja e bllokuar do t'ju drejtojë në një uebsajt tjetër. Në rast se pranoni do të shkoni te: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "pa parametra",
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"
},
"strictblockBack": {
"message": "Mbrapa",
"message": "Go back",
"description": "A button to go back to the previous webpage"
},
"strictblockClose": {
"message": "Mbyll këtë dritare",
"message": "Close this window",
"description": "A button to close the current tab"
},
"strictblockDontWarn": {
"message": "Mos më paralajmëro më për këtë faqe.",
"message": "Don't warn me again about this site",
"description": "Label for checkbox in document-blocked page"
},
"strictblockProceed": {
"message": "Vazhdo",
"message": "Proceed",
"description": "A button to navigate to the blocked page"
}
}

View file

@ -251,14 +251,6 @@
"message": "uBO Lite је спречио учитавање следеће странице:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "без параметара",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite har förhindrat följande sida från att läsas in:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "Sidan har blockerats på grund av ett matchande filter i {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "Den blockerade sidan vill omdirigera till en annan webbplats. Om du väljer att fortsätta skickas du direkt till: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "utan parametrar",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBo Lite aşağıdaki sayfaların yüklenmesini engelledi:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "Bu sayfa {{listname}} içindeki bir süzgece takıldığı için engellenmiştir.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "Engellenen sayfa sizi başka bir siteye yönlendirmek istiyor. Devam etmek isterseniz doğrudan şuraya yönlendirileceksiniz: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "değişkensiz",
"description": "Label to be used for the parameter-less URL"

View file

@ -232,11 +232,11 @@
"description": "Label for a checkbox in the options page"
},
"enableStrictBlockLabel": {
"message": "Увімкнути суворе блокування",
"message": "Enable strict blocking",
"description": "Label for a checkbox in the options page"
},
"enableStrictBlockLegend": {
"message": "Перехід до потенційно небажаних сайтів буде заблоковано, та вам буде запропоновано можливість продовжити",
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Label for a checkbox in the options page"
},
"findListsPlaceholder": {
@ -244,39 +244,31 @@
"description": "Placeholder for the input field used to find lists"
},
"strictblockTitle": {
"message": "Сторінку заблоковано",
"message": "Page blocked",
"description": "Webpage title for the strict-blocked page"
},
"strictblockSentence1": {
"message": "uBO Lite заблокував завантаження наступних сторінок:",
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "Сторінку заблоковано, бо вона відповідає фільтру в {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "Заблокована сторінка хоче переадресувати на інший сайт. Якщо ви вирішите продовжити, ви перейдете безпосередньо на: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "без параметрів",
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"
},
"strictblockBack": {
"message": "Повернутися",
"message": "Go back",
"description": "A button to go back to the previous webpage"
},
"strictblockClose": {
"message": "Закрити це вікно",
"message": "Close this window",
"description": "A button to close the current tab"
},
"strictblockDontWarn": {
"message": "Більше не попереджати мене про цей сайт",
"message": "Don't warn me again about this site",
"description": "Label for checkbox in document-blocked page"
},
"strictblockProceed": {
"message": "Продовжити",
"message": "Proceed",
"description": "A button to navigate to the blocked page"
}
}

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite has prevented the following page from loading:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "The page was blocked because of a matching filter in {{listname}}.",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite 已阻止了以下页面的加载:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "该页面由于 {{listName}} 中的匹配过滤器而被阻止。",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "被屏蔽的页面希望重定向到另一个网站。如果您选择继续,将直接导航到:{{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "不含参数",
"description": "Label to be used for the parameter-less URL"

View file

@ -251,14 +251,6 @@
"message": "uBO Lite 已防止下列頁面載入:",
"description": "Sentence used in the strict-blocked page"
},
"strictblockReasonSentence1": {
"message": "由於在 {{listname}} 中有符合的過濾條件,因此該頁面被封鎖。",
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
"message": "被封鎖的網頁想要重新導向至其他網站。如果您選擇繼續,則會直接前往:{{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
"message": "不帶參數",
"description": "Label to be used for the parameter-less URL"

View file

@ -15,7 +15,7 @@ h3 {
label + legend {
color: color-mix(in srgb, currentColor 69%, transparent);
font-size: var(--font-size-smaller);
font-size: small;
margin-inline-start: var(--default-gap-large);
}

View file

@ -26,9 +26,6 @@ body {
:root.mobile body {
padding: var(--default-gap-small);
}
body.loading {
visibility: hidden;
}
#rootContainer {
width: min(100%, 640px);
@ -46,11 +43,8 @@ p {
a {
text-decoration: none;
}
q {
font-weight: bold;
}
.code {
font-size: var(--font-size-smaller);
font-size: 13px;
word-break: break-all;
}
#warningSign {
@ -134,11 +128,6 @@ body[dir="rtl"] #toggleParse {
font-weight: bold;
}
#urlskip a {
display: block;
overflow-y: auto;
}
#actionContainer {
display: flex;
justify-content: space-between;

View file

@ -50,7 +50,6 @@ import {
excludeFromStrictBlock,
getEnabledRulesetsDetails,
getRulesetDetails,
patchDefaultRulesets,
setStrictBlockMode,
updateDynamicRules,
} from './ruleset-manager.js';
@ -378,24 +377,20 @@ function onMessage(request, sender, callback) {
async function start() {
await loadRulesetConfig();
const currentVersion = getCurrentVersion();
const isNewVersion = currentVersion !== rulesetConfig.version;
// The default rulesets may have changed, find out new ruleset to enable,
// obsolete ruleset to remove.
if ( isNewVersion ) {
ubolLog(`Version change: ${rulesetConfig.version} => ${currentVersion}`);
rulesetConfig.version = currentVersion;
await patchDefaultRulesets();
saveRulesetConfig();
}
const rulesetsUpdated = process.wakeupRun === false &&
await enableRulesets(rulesetConfig.enabledRulesets);
// We need to update the regex rules only when ruleset version changes.
if ( isNewVersion && rulesetsUpdated === false ) {
updateDynamicRules();
if ( process.wakeupRun === false ) {
const currentVersion = getCurrentVersion();
if ( currentVersion !== rulesetConfig.version ) {
ubolLog(`Version change: ${rulesetConfig.version} => ${currentVersion}`);
rulesetConfig.version = currentVersion;
saveRulesetConfig();
if ( rulesetsUpdated === false ) {
updateDynamicRules();
}
}
}
// Permissions may have been removed while the extension was disabled

View file

@ -24,11 +24,13 @@ import {
sessionRead, sessionWrite,
} from './ext.js';
import { defaultRulesetsFromLanguage } from './ruleset-manager.js';
/******************************************************************************/
export const rulesetConfig = {
version: '',
enabledRulesets: [],
enabledRulesets: [ 'default' ],
autoReload: true,
showBlockedCount: true,
strictBlockMode: true,
@ -65,6 +67,7 @@ export async function loadRulesetConfig() {
sessionWrite('rulesetConfig', rulesetConfig);
return;
}
rulesetConfig.enabledRulesets = await defaultRulesetsFromLanguage();
sessionWrite('rulesetConfig', rulesetConfig);
localWrite('rulesetConfig', rulesetConfig);
process.firstRun = true;

View file

@ -561,6 +561,8 @@ async function filteringModesToDNR(modes) {
/******************************************************************************/
async function defaultRulesetsFromLanguage() {
const out = await dnr.getEnabledRulesets();
const dropCountry = lang => {
const pos = lang.indexOf('-');
if ( pos === -1 ) { return lang; }
@ -579,12 +581,7 @@ async function defaultRulesetsFromLanguage() {
);
const rulesetDetails = await getRulesetDetails();
const out = [];
for ( const [ id, details ] of rulesetDetails ) {
if ( details.enabled ) {
out.push(id);
continue;
}
if ( typeof details.lang !== 'string' ) { continue; }
if ( reTargetLang.test(details.lang) === false ) { continue; }
out.push(id);
@ -594,42 +591,6 @@ async function defaultRulesetsFromLanguage() {
/******************************************************************************/
async function patchDefaultRulesets() {
const [
oldDefaultIds = [],
newDefaultIds,
newIds,
] = await Promise.all([
localRead('defaultRulesetIds'),
defaultRulesetsFromLanguage(),
getRulesetDetails(),
]);
const toAdd = [];
const toRemove = [];
for ( const id of newDefaultIds ) {
if ( oldDefaultIds.includes(id) ) { continue; }
toAdd.push(id);
}
for ( const id of oldDefaultIds ) {
if ( newDefaultIds.includes(id) ) { continue; }
toRemove.push(id);
}
for ( const id of rulesetConfig.enabledRulesets ) {
if ( newIds.has(id) ) { continue; }
toRemove.push(id);
}
localWrite('defaultRulesetIds', newDefaultIds);
if ( toAdd.length === 0 && toRemove.length === 0 ) { return; }
const enabledRulesets = new Set(rulesetConfig.enabledRulesets);
toAdd.forEach(id => enabledRulesets.add(id));
toRemove.forEach(id => enabledRulesets.delete(id));
const patchedRulesets = Array.from(enabledRulesets);
ubolLog(`Patched rulesets: ${rulesetConfig.enabledRulesets} => ${patchedRulesets}`);
rulesetConfig.enabledRulesets = patchedRulesets;
}
/******************************************************************************/
async function enableRulesets(ids) {
const afterIds = new Set(ids);
const [ beforeIds, adminIds, rulesetDetails ] = await Promise.all([
@ -718,7 +679,6 @@ export {
filteringModesToDNR,
getRulesetDetails,
getEnabledRulesetsDetails,
patchDefaultRulesets,
setStrictBlockMode,
updateDynamicRules,
};

View file

@ -20,15 +20,21 @@
*/
import { dom, qs$ } from './dom.js';
import { fetchJSON } from './fetch.js';
import { getEnabledRulesetsDetails } from './ruleset-manager.js';
import { i18n$ } from './i18n.js';
import { sendMessage } from './ext.js';
import { urlSkip } from './urlskip.js';
/******************************************************************************/
const rulesetDetailsPromise = getEnabledRulesetsDetails();
const toURL = new URL('about:blank');
function setURL(url) {
try {
toURL.href = url;
} catch(_) {
}
}
setURL(self.location.hash.slice(1));
/******************************************************************************/
@ -60,43 +66,11 @@ async function proceed() {
/******************************************************************************/
const toURL = new URL('about:blank');
try {
toURL.href = self.location.hash.slice(1);
} catch(_) {
}
dom.clear('#theURL > p > span:first-of-type');
qs$('#theURL > p > span:first-of-type').append(urlToFragment(toURL.href));
/******************************************************************************/
function fragmentFromTemplate(template, placeholder, text, details) {
const fragment = new DocumentFragment();
const pos = template.indexOf(placeholder);
if ( pos === -1 ) {
fragment.append(template);
return fragment;
}
const elem = document.createElement(details.tag);
const { attributes } = details;
if ( attributes ) {
for ( let i = 0; i < attributes.length; i+= 2 ) {
elem.setAttribute(attributes[i+0], attributes[i+1]);
}
}
elem.append(text);
fragment.append(
template.slice(0, pos),
elem,
template.slice(pos + placeholder.length)
);
return fragment;
}
/******************************************************************************/
// https://github.com/gorhill/uBlock/issues/691
// Parse URL to extract as much useful information as possible. This is
// useful to assist the user in deciding whether to navigate to the web page.
@ -178,79 +152,16 @@ function fragmentFromTemplate(template, placeholder, text, details) {
/******************************************************************************/
// Find which list caused the blocking.
(async ( ) => {
const rulesetDetails = await rulesetDetailsPromise;
let iList = -1;
const searchInList = async i => {
if ( iList !== -1 ) { return; }
const hostnames = new Set(
await fetchJSON(`/rulesets/strictblock/${rulesetDetails[i].id}`)
);
if ( iList !== -1 ) { return; }
let hn = toURL.hostname;
for (;;) {
if ( hostnames.has(hn) ) { iList = i; break; }
const pos = hn.indexOf('.');
if ( pos === -1 ) { break; }
hn = hn.slice(pos+1);
}
};
const toFetch = [];
for ( let i = 0; i < rulesetDetails.length; i++ ) {
if ( rulesetDetails[i].rules.strictblock === 0 ) { continue; }
toFetch.push(searchInList(i));
}
if ( toFetch.length === 0 ) { return; }
await Promise.all(toFetch);
if ( iList === -1 ) { return; }
const fragment = fragmentFromTemplate(
i18n$('strictblockReasonSentence1'),
'{{listname}}', rulesetDetails[iList].name,
{ tag: 'q' }
);
qs$('#reason').append(fragment);
dom.attr('#reason', 'hidden', null);
})();
/******************************************************************************/
// Offer to skip redirection whenever possible
(async ( ) => {
const rulesetDetails = await rulesetDetailsPromise;
const toFetch = [];
for ( const details of rulesetDetails ) {
if ( details.rules.urlskip === 0 ) { continue; }
toFetch.push(fetchJSON(`/rulesets/urlskip/${details.id}`));
}
if ( toFetch.length === 0 ) { return; }
const urlskipLists = await Promise.all(toFetch);
for ( const urlskips of urlskipLists ) {
for ( const urlskip of urlskips ) {
const re = new RegExp(urlskip.re, urlskip.c ? undefined : 'i');
if ( re.test(toURL.href) === false ) { continue; }
const finalURL = urlSkip(toURL.href, false, urlskip.steps);
if ( finalURL === undefined ) { continue; }
const fragment = fragmentFromTemplate(
i18n$('strictblockRedirectSentence1'),
'{{url}}', urlToFragment(finalURL),
{ tag: 'a', attributes: [ 'href', finalURL, 'class', 'code' ] }
);
qs$('#urlskip').append(fragment);
dom.attr('#urlskip', 'hidden', null);
return;
}
}
})();
/******************************************************************************/
// https://www.reddit.com/r/uBlockOrigin/comments/breeux/
if ( window.history.length > 1 ) {
dom.on('#back', 'click', ( ) => { window.history.back(); });
dom.on('#back', 'click', ( ) => {
window.history.back();
});
qs$('#bye').style.display = 'none';
} else {
dom.on('#bye', 'click', ( ) => { window.close(); });
dom.on('#bye', 'click', ( ) => {
window.close();
});
qs$('#back').style.display = 'none';
}
@ -260,8 +171,8 @@ dom.on('#disableWarning', 'change', ev => {
dom.cl.toggle('[data-i18n="strictblockClose"]', 'disabled', checked);
});
dom.on('#proceed', 'click', ( ) => { proceed(); });
dom.cl.remove(dom.body, 'loading');
dom.on('#proceed', 'click', ( ) => {
proceed();
});
/******************************************************************************/

View file

@ -225,7 +225,7 @@ const isRegex = rule =>
rule.condition.regexFilter !== undefined;
const isRedirect = rule => {
if ( isUnsupported(rule) ) { return false; }
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; }
@ -233,26 +233,19 @@ const isRedirect = rule => {
};
const isModifyHeaders = rule =>
isUnsupported(rule) === false &&
rule.action !== undefined &&
rule.action.type === 'modifyHeaders';
const isRemoveparam = rule =>
isUnsupported(rule) === false &&
rule.action !== undefined &&
rule.action.type === 'redirect' &&
rule.action.redirect.transform !== undefined;
const isSafe = rule =>
const isGood = rule =>
isUnsupported(rule) === false &&
rule.action !== undefined && (
rule.action.type === 'block' ||
rule.action.type === 'allow' ||
rule.action.type === 'allowAllRequests'
);
const isURLSkip = rule =>
isUnsupported(rule) === false &&
rule.action !== undefined &&
rule.action.type === 'urlskip';
isRedirect(rule) === false &&
isModifyHeaders(rule) === false &&
isRemoveparam(rule) === false;
/******************************************************************************/
@ -364,7 +357,7 @@ async function processNetworkFilters(assetDetails, network) {
}
}
const plainGood = rules.filter(rule => isSafe(rule) && isRegex(rule) === false);
const plainGood = rules.filter(rule => isGood(rule) && isRegex(rule) === false);
log(`\tPlain good: ${plainGood.length}`);
log(plainGood
.filter(rule => Array.isArray(rule._warning))
@ -372,7 +365,7 @@ async function processNetworkFilters(assetDetails, network) {
.join('\n'), true
);
const regexes = rules.filter(rule => isSafe(rule) && isRegex(rule));
const regexes = rules.filter(rule => isGood(rule) && isRegex(rule));
log(`\tMaybe good (regexes): ${regexes.length}`);
const redirects = rules.filter(rule =>
@ -401,22 +394,6 @@ async function processNetworkFilters(assetDetails, network) {
);
log(`\tmodifyHeaders=: ${modifyHeaders.length}`);
const urlskips = rules.filter(rule => isURLSkip(rule)).filter(rule =>
rule.__modifierAction === 0 &&
rule.condition &&
rule.condition.regexFilter &&
rule.condition.resourceTypes &&
rule.condition.resourceTypes.includes('main_frame')
).map(rule => {
const steps = rule.__modifierValue;
return {
re: rule.condition.regexFilter,
c: rule.condition.isUrlFilterCaseSensitive,
steps: steps.includes(' ') && steps.split(/ +/) || [ steps ],
};
});
log(`\turlskip=: ${urlskips.length}`);
const bad = rules.filter(rule =>
isUnsupported(rule)
);
@ -483,13 +460,6 @@ async function processNetworkFilters(assetDetails, network) {
);
}
if ( urlskips.length !== 0 ) {
writeFile(
`${rulesetDir}/urlskip/${assetDetails.id}.json`,
JSON.stringify(urlskips, null, 1)
);
}
return {
total: rules.length,
plain: plainGood.length,
@ -500,7 +470,6 @@ async function processNetworkFilters(assetDetails, network) {
redirect: redirects.length,
modifyHeaders: modifyHeaders.length,
strictblock: strictBlocked.size,
urlskip: urlskips.length,
};
}
@ -1145,7 +1114,6 @@ async function rulesetFromURLs(assetDetails) {
redirect: netStats.redirect,
modifyHeaders: netStats.modifyHeaders,
strictblock: netStats.strictblock,
urlskip: netStats.urlskip,
discarded: netStats.discarded,
rejected: netStats.rejected,
},
@ -1296,14 +1264,6 @@ async function main() {
});
// Handpicked rulesets from abroad
await rulesetFromURLs({
id: 'nrd.30day.phishing',
name: '30-day Phishing Domain List',
enabled: true,
urls: [ 'https://raw.githubusercontent.com/xRuffKez/NRD/refs/heads/main/lists/30-day_phishing/domains-only/nrd-phishing-30day.txt' ],
homeURL: 'https://github.com/xRuffKez/NRD?tab=readme-ov-file',
});
await rulesetFromURLs({
id: 'stevenblack-hosts',
name: 'Steven Blacks Unified Hosts (adware + malware)',

View file

@ -10,26 +10,20 @@
<link rel="stylesheet" href="css/strictblock.css">
<link rel="shortcut icon" type="image/png" href="img/icon_64.png"/>
</head>
<body class="loading">
<body>
<div id="rootContainer">
<div id="warningSign">
<a class="fa-icon" href="https://github.com/gorhill/uBlock/wiki/Strict-blocking" target="_blank" rel="noopener noreferrer">exclamation-triangle</a>
</div>
<div>
<p data-i18n="strictblockSentence1"></p>
<p data-i18n="strictblockSentence1">_</p>
<div id="theURL" class="collapsed">
<p class="code"><span>&nbsp;</span><span id="toggleParse" class="hidden"><span class="fa-icon">zoom-in</span><span class="fa-icon">zoom-out</span></span></p>
<ul id="parsed"></ul>
</div>
</div>
<div id="reason" hidden>
</div>
<div id="urlskip" hidden>
</div>
<div class="li">
<label><span class="input checkbox"><input type="checkbox" id="disableWarning"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span data-i18n="strictblockDontWarn">_</span></label>
</div>

View file

@ -1192,7 +1192,7 @@
"description": "Button text to navigate to the blocked page"
},
"docblockedRedirectPrompt": {
"message": "Halaman yang terblokir ingin dialihkan ke situs lain. Jika Anda memilih untuk melanjutkan, Anda akan langsung menuju ke: {{url}}",
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
"cloudPush": {

View file

@ -73,7 +73,6 @@ const hiddenSettingsDefault = {
loggerPopupType: 'popup',
manualUpdateAssetFetchPeriod: 500,
modifyWebextFlavor: 'unset',
noScriptingCSP: 'script-src http: https:',
popupFontSize: 'unset',
popupPanelDisabledSections: 0,
popupPanelHeightMode: 0,
@ -255,6 +254,7 @@ const µBlock = { // jshint ignore:line
scriptlets: {},
cspNoInlineScript: "script-src 'unsafe-eval' * blob: data:",
cspNoScripting: 'script-src http: https:',
cspNoInlineFont: 'font-src *',
liveBlockingProfiles: [],

View file

@ -804,9 +804,6 @@ const onMessage = function(request, sender, callback) {
case 'shouldRenderNoscriptTags': {
if ( pageStore === null ) { break; }
if ( µb.hiddenSettings.noScriptingCSP !== µb.hiddenSettingsDefault.noScriptingCSP ) {
break;
}
const fctxt = µb.filteringContext.fromTabId(sender.tabId);
if ( pageStore.filterScripting(fctxt, undefined) ) {
vAPI.tabs.executeScript(sender.tabId, {
@ -1887,11 +1884,7 @@ const onMessage = function(request, sender, callback) {
listPromises.push(
io.get(assetKey, { dontCache: true }).then(details => {
listNames.push(assetKey);
return {
name: assetKey,
text: details.content,
trustedSource: assetKey.startsWith('ublock-'),
};
return { name: assetKey, text: details.content };
})
);
}
@ -2016,7 +2009,7 @@ const logCSPViolations = function(pageStore, request) {
fctxt.type = 'script';
fctxt.filter = undefined;
if ( pageStore.filterScripting(fctxt, true) === 1 ) {
cspData.set(µb.hiddenSettings.noScriptingCSP, fctxt.filter);
cspData.set(µb.cspNoScripting, fctxt.filter);
}
fctxt.type = 'inline-font';

View file

@ -1063,9 +1063,7 @@ const PageStore = class {
this.largeMediaTimer.on(500);
}
const size = headers.contentLength;
if ( isNaN(size) ) {
return µb.userSettings.largeMediaSize === 0 ? 1 : 0;
}
if ( isNaN(size) ) { return 0; }
if ( (size >>> 10) < µb.userSettings.largeMediaSize ) { return 0; }
this.largeMediaCount += 1;
this.largeMediaTimer.on(500);

View file

@ -229,7 +229,7 @@ export function removeAttr(
if ( rawToken === '' ) { return; }
const safe = safeSelf();
const logPrefix = safe.makeLogPrefix('remove-attr', rawToken, rawSelector, behavior);
const tokens = safe.String_split.call(rawToken, /\s*\|\s*/);
const tokens = rawToken.split(/\s*\|\s*/);
const selector = tokens
.map(a => `${rawSelector}[${CSS.escape(a)}]`)
.join(',');
@ -289,7 +289,7 @@ export function removeAttr(
subtree: true,
});
};
runAt(( ) => { start(); }, safe.String_split.call(behavior, /\s+/));
runAt(( ) => { start(); }, behavior.split(/\s+/));
}
registerScriptlet(removeAttr, {
name: 'remove-attr.js',

View file

@ -53,8 +53,7 @@ registerScriptlet(getSafeCookieValuesFn, {
/******************************************************************************/
export function getAllCookiesFn() {
const safe = safeSelf();
return safe.String_split.call(document.cookie, /\s*;\s*/).map(s => {
return document.cookie.split(/\s*;\s*/).map(s => {
const pos = s.indexOf('=');
if ( pos === 0 ) { return; }
if ( pos === -1 ) { return `${s.trim()}=`; }
@ -65,9 +64,6 @@ export function getAllCookiesFn() {
}
registerScriptlet(getAllCookiesFn, {
name: 'get-all-cookies.fn',
dependencies: [
safeSelf,
],
});
/******************************************************************************/
@ -75,8 +71,7 @@ registerScriptlet(getAllCookiesFn, {
export function getCookieFn(
name = ''
) {
const safe = safeSelf();
for ( const s of safe.String_split.call(document.cookie, /\s*;\s*/) ) {
for ( const s of document.cookie.split(/\s*;\s*/) ) {
const pos = s.indexOf('=');
if ( pos === -1 ) { continue; }
if ( s.slice(0, pos) !== name ) { continue; }
@ -85,9 +80,6 @@ export function getCookieFn(
}
registerScriptlet(getCookieFn, {
name: 'get-cookie.fn',
dependencies: [
safeSelf,
],
});
/******************************************************************************/
@ -357,7 +349,7 @@ export function removeCookie(
}, ms);
};
const remove = ( ) => {
safe.String_split.call(document.cookie, ';').forEach(cookieStr => {
document.cookie.split(';').forEach(cookieStr => {
const pos = cookieStr.indexOf('=');
if ( pos === -1 ) { return; }
const cookieName = cookieStr.slice(0, pos).trim();
@ -395,7 +387,7 @@ export function removeCookie(
window.addEventListener('beforeunload', remove);
if ( typeof extraArgs.when !== 'string' ) { return; }
const supportedEventTypes = [ 'scroll', 'keydown' ];
const eventTypes = safe.String_split.call(extraArgs.when, /\s/);
const eventTypes = extraArgs.when.split(/\s/);
for ( const type of eventTypes ) {
if ( supportedEventTypes.includes(type) === false ) { continue; }
document.addEventListener(type, ( ) => {

View file

@ -52,7 +52,7 @@ export function proxyApplyFn(
}
reflect() {
const r = Reflect.construct(this.callFn, this.callArgs);
this.callFn = this.callArgs = this.private = undefined;
this.callFn = this.callArgs = undefined;
proxyApplyFn.ctorContexts.push(this);
return r;
}
@ -75,7 +75,7 @@ export function proxyApplyFn(
}
reflect() {
const r = Reflect.apply(this.callFn, this.thisArg, this.callArgs);
this.callFn = this.thisArg = this.callArgs = this.private = undefined;
this.callFn = this.thisArg = this.callArgs = undefined;
proxyApplyFn.applyContexts.push(this);
return r;
}

View file

@ -38,8 +38,7 @@ import { validateConstantFn } from './set-constant.js';
*
* @param argposRaw
* The zero-based position of the argument in the argument list. Use a negative
* number for a position relative to the last argument. Use literal `this` to
* replace the value used in `prototype`-based methods.
* number for a position relative to the last argument.
*
* @param argraw
* The replacement value, validated using the same heuristic as with the
@ -72,39 +71,25 @@ export function trustedReplaceArgument(
const reCondition = extraArgs.condition
? safe.patternToRegex(extraArgs.condition)
: /^/;
const getArg = context => {
if ( argposRaw === 'this' ) { return context.thisArg; }
const { callArgs } = context;
const argpos = argoffset >= 0 ? argoffset : callArgs.length - argoffset;
if ( argpos < 0 || argpos >= callArgs.length ) { return; }
context.private = { argpos };
return callArgs[argpos];
};
const setArg = (context, value) => {
if ( argposRaw === 'this' ) {
if ( value !== context.thisArg ) {
context.thisArg = value;
}
} else if ( context.private ) {
context.callArgs[context.private.argpos] = value;
}
};
proxyApplyFn(propChain, function(context) {
const { callArgs } = context;
if ( argposRaw === '' ) {
safe.uboLog(logPrefix, `Arguments:\n${context.callArgs.join('\n')}`);
safe.uboLog(logPrefix, `Arguments:\n${callArgs.join('\n')}`);
return context.reflect();
}
const argBefore = getArg(context);
const argpos = argoffset >= 0 ? argoffset : callArgs.length - argoffset;
if ( argpos < 0 || argpos >= callArgs.length ) {
return context.reflect();
}
const argBefore = callArgs[argpos];
if ( safe.RegExp_test.call(reCondition, argBefore) === false ) {
return context.reflect();
}
const argAfter = replacer && typeof argBefore === 'string'
? argBefore.replace(replacer.re, replacer.replacement)
: value;
if ( argAfter !== argBefore ) {
setArg(context, argAfter);
safe.uboLog(logPrefix, `Replaced argument:\nBefore: ${JSON.stringify(argBefore)}\nAfter: ${argAfter}`);
}
callArgs[argpos] = argAfter;
safe.uboLog(logPrefix, `Replaced argument:\nBefore: ${JSON.stringify(argBefore)}\nAfter: ${argAfter}`);
return context.reflect();
});
}

View file

@ -51,7 +51,6 @@ export function safeSelf() {
'RegExp_exec': self.RegExp.prototype.exec,
'Request_clone': self.Request.prototype.clone,
'String_fromCharCode': String.fromCharCode,
'String_split': String.prototype.split,
'XMLHttpRequest': self.XMLHttpRequest,
'addEventListener': self.EventTarget.prototype.addEventListener,
'removeEventListener': self.EventTarget.prototype.removeEventListener,

View file

@ -192,7 +192,7 @@ function abortCurrentScriptCore(
const reContext = safe.patternToRegex(context);
const extraArgs = safe.getExtraArgs(Array.from(arguments), 3);
const thisScript = document.currentScript;
const chain = safe.String_split.call(target, '.');
const chain = target.split('.');
let owner = window;
let prop;
for (;;) {
@ -406,7 +406,6 @@ builtinScriptlets.push({
dependencies: [
'matches-stack-trace.fn',
'object-find-owner.fn',
'safe-self.fn',
],
});
// When no "prune paths" argument is provided, the scriptlet is
@ -423,12 +422,11 @@ function objectPruneFn(
extraArgs = {}
) {
if ( typeof rawPrunePaths !== 'string' ) { return; }
const safe = safeSelf();
const prunePaths = rawPrunePaths !== ''
? safe.String_split.call(rawPrunePaths, / +/)
? rawPrunePaths.split(/ +/)
: [];
const needlePaths = prunePaths.length !== 0 && rawNeedlePaths !== ''
? safe.String_split.call(rawNeedlePaths, / +/)
? rawNeedlePaths.split(/ +/)
: [];
if ( stackNeedleDetails.matchAll !== true ) {
if ( matchesStackTrace(stackNeedleDetails, extraArgs.logstack) === false ) {
@ -549,7 +547,7 @@ function matchesStackTrace(
// Normalize stack trace
const reLine = /(.*?@)?(\S+)(:\d+):\d+\)?$/;
const lines = [];
for ( let line of safe.String_split.call(error.stack, /[\n\r]+/) ) {
for ( let line of error.stack.split(/[\n\r]+/) ) {
if ( line.includes(exceptionToken) ) { continue; }
line = line.trim();
const match = safe.RegExp_exec.call(reLine, line);
@ -596,8 +594,8 @@ function parsePropertiesToMatch(propsToMatch, implicit = '') {
const needles = new Map();
if ( propsToMatch === undefined || propsToMatch === '' ) { return needles; }
const options = { canNegate: true };
for ( const needle of safe.String_split.call(propsToMatch, /\s+/) ) {
const [ prop, pattern ] = safe.String_split.call(needle, ':');
for ( const needle of propsToMatch.split(/\s+/) ) {
const [ prop, pattern ] = needle.split(':');
if ( prop === '' ) { continue; }
if ( pattern !== undefined ) {
needles.set(prop, safe.initPattern(pattern, options));
@ -1645,7 +1643,7 @@ function noFetchIf(
const safe = safeSelf();
const logPrefix = safe.makeLogPrefix('prevent-fetch', propsToMatch, responseBody, responseType);
const needles = [];
for ( const condition of safe.String_split.call(propsToMatch, /\s+/) ) {
for ( const condition of propsToMatch.split(/\s+/) ) {
if ( condition === '' ) { continue; }
const pos = condition.indexOf(':');
let key, value;
@ -1799,7 +1797,7 @@ function removeClass(
if ( rawToken === '' ) { return; }
const safe = safeSelf();
const logPrefix = safe.makeLogPrefix('remove-class', rawToken, rawSelector, behavior);
const tokens = safe.String_split.call(rawToken, /\s*\|\s*/);
const tokens = rawToken.split(/\s*\|\s*/);
const selector = tokens
.map(a => `${rawSelector}.${CSS.escape(a)}`)
.join(',');
@ -2512,12 +2510,12 @@ function m3uPrune(
}
text = before.trim() + '\n' + after.trim();
reM3u.lastIndex = before.length + 1;
toLog.push('Discarding', ...safe.String_split.call(discard, /\n+/).map(s => `\t${s}`));
toLog.push('Discarding', ...discard.split(/\n+/).map(s => `\t${s}`));
if ( reM3u.global === false ) { break; }
}
return text;
}
const lines = safe.String_split.call(text, /\n\r|\n|\r/);
const lines = text.split(/\n\r|\n|\r/);
for ( let i = 0; i < lines.length; i++ ) {
if ( lines[i] === undefined ) { continue; }
if ( pruneSpliceoutBlock(lines, i) ) { continue; }
@ -2760,17 +2758,13 @@ function hrefSanitizer(
builtinScriptlets.push({
name: 'call-nothrow.js',
fn: callNothrow,
dependencies: [
'safe-self.fn',
],
});
function callNothrow(
chain = ''
) {
if ( typeof chain !== 'string' ) { return; }
if ( chain === '' ) { return; }
const safe = safeSelf();
const parts = safe.String_split.call(chain, '.');
const parts = chain.split('.');
let owner = window, prop;
for (;;) {
prop = parts.shift();
@ -3101,7 +3095,7 @@ function trustedClickElement(
const logPrefix = safe.makeLogPrefix('trusted-click-element', selectors, extraMatch, delay);
if ( extraMatch !== '' ) {
const assertions = safe.String_split.call(extraMatch, ',').map(s => {
const assertions = extraMatch.split(',').map(s => {
const pos1 = s.indexOf(':');
const s1 = pos1 !== -1 ? s.slice(0, pos1) : s;
const not = s1.startsWith('!');
@ -3169,7 +3163,7 @@ function trustedClickElement(
return shadowRoot && querySelectorEx(inside, shadowRoot);
};
const selectorList = safe.String_split.call(selectors, /\s*,\s*/)
const selectorList = selectors.split(/\s*,\s*/)
.filter(s => {
try {
void querySelectorEx(s);
@ -3296,10 +3290,10 @@ function trustedPruneInboundObject(
const extraArgs = safe.getExtraArgs(Array.from(arguments), 4);
const needlePaths = [];
if ( rawPrunePaths !== '' ) {
needlePaths.push(...safe.String_split.call(rawPrunePaths, / +/));
needlePaths.push(...rawPrunePaths.split(/ +/));
}
if ( rawNeedlePaths !== '' ) {
needlePaths.push(...safe.String_split.call(rawNeedlePaths, / +/));
needlePaths.push(...rawNeedlePaths.split(/ +/));
}
const stackNeedle = safe.initPattern(extraArgs.stackToMatch || '', { canNegate: true });
const mustProcess = root => {
@ -3461,7 +3455,7 @@ function trustedSuppressNativeMethod(
if ( stack !== '' ) { return; }
const safe = safeSelf();
const logPrefix = safe.makeLogPrefix('trusted-suppress-native-method', methodPath, signature, how);
const signatureArgs = safe.String_split.call(signature, /\s*\|\s*/).map(v => {
const signatureArgs = signature.split(/\s*\|\s*/).map(v => {
if ( /^".*"$/.test(v) ) {
return { type: 'pattern', re: safe.patternToRegex(v.slice(1, -1)) };
}

View file

@ -61,7 +61,6 @@ export function validateConstantFn(trusted, raw, extraArgs = {}) {
} else if ( raw.startsWith('{') && raw.endsWith('}') ) {
try { value = safe.JSON_parse(raw).value; } catch(ex) { return; }
}
return raw;
} else {
return;
}

View file

@ -284,7 +284,6 @@ function addToDNR(context, list) {
toDNR: true,
nativeCssHas: env.includes('native_css_has'),
badTypes: [ sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE ],
trustedSource: list.trustedSource || undefined,
});
const compiler = staticNetFilteringEngine.createCompiler();

View file

@ -28,7 +28,6 @@ import BidiTrieContainer from './biditrie.js';
import { CompiledListReader } from './static-filtering-io.js';
import { FilteringContext } from './filtering-context.js';
import HNTrieContainer from './hntrie.js';
import { urlSkip } from './urlskip.js';
/******************************************************************************/
@ -4680,25 +4679,6 @@ StaticNetFilteringEngine.prototype.dnrFromCompiled = function(op, context, ...ar
dnrAddRuleError(rule, `Incompatible with DNR: uritransform=${rule.__modifierValue}`);
break;
}
case 'urlskip': {
let urlFilter = rule.condition?.urlFilter;
if ( urlFilter === undefined ) { break; }
let anchor = 0b000;
if ( urlFilter.startsWith('||') ) {
anchor |= 0b100;
urlFilter = urlFilter.slice(2);
} else if ( urlFilter.startsWith('|') ) {
anchor |= 0b10;
urlFilter = urlFilter.slice(1);
}
if ( urlFilter.endsWith('|') ) {
anchor |= 0b001;
urlFilter = urlFilter.slice(0, -1);
}
rule.condition.urlFilter = undefined;
rule.condition.regexFilter = restrFromGenericPattern(urlFilter, anchor);
break;
}
default:
dnrAddRuleError(rule, `Unsupported modifier ${rule.__modifierType}`);
break;
@ -5411,6 +5391,57 @@ StaticNetFilteringEngine.prototype.transformRequest = function(fctxt, out = [])
return out;
};
/**
* @trustedOption urlskip
*
* @description
* Extract a URL from another URL according to one or more transformation steps,
* thereby skipping over intermediate network request(s) to remote servers.
* Requires a trusted source.
*
* @param steps
* A serie of space-separated directives representing the transformation steps
* to perform to extract the final URL to which a network request should be
* redirected.
*
* Supported directives:
*
* `?name`: extract the value of parameter `name` as the current string.
*
* `&i`: extract the name of the parameter at position `i` as the current
* string. The position is 1-based.
*
* `/.../`: extract the first capture group of a regex as the current string.
*
* `+https`: prepend the current string with `https://`.
*
* `-base64`: decode the current string as a base64-encoded string.
*
* `-safebase64`: decode the current string as a safe base64-encoded string.
*
* `-uricomponent`: decode the current string as a URI encoded string.
*
* `-blocked`: allow the redirection of blocked requests. By default, blocked
* requests can't by urlskip'ed.
*
* At any given step, the currently extracted string may not necessarily be
* a valid URL, and more transformation steps may be needed to obtain a valid
* URL once all the steps are applied.
*
* An unsupported step or a failed step will abort the transformation and no
* redirection will be performed.
*
* The final step is expected to yield a valid URL. If the result is not a
* valid URL, no redirection will be performed.
*
* @example
* ||example.com/path/to/tracker$urlskip=?url
* ||example.com/path/to/tracker$urlskip=?url ?to
* ||pixiv.net/jump.php?$urlskip=&1
* ||podtrac.com/pts/redirect.mp3/$urlskip=/\/redirect\.mp3\/(.*?\.mp3\b)/ +https
*
* */
StaticNetFilteringEngine.prototype.urlSkip = function(
fctxt,
blocked,
@ -5427,7 +5458,7 @@ StaticNetFilteringEngine.prototype.urlSkip = function(
const urlin = fctxt.url;
const value = directive.value;
const steps = value.includes(' ') && value.split(/ +/) || [ value ];
const urlout = urlSkip(urlin, blocked, steps, directive);
const urlout = urlSkip(directive, urlin, blocked, steps);
if ( urlout === undefined ) { continue; }
if ( urlout === urlin ) { continue; }
fctxt.redirectURL = urlout;
@ -5438,6 +5469,91 @@ StaticNetFilteringEngine.prototype.urlSkip = function(
return out;
};
function urlSkip(directive, url, blocked, steps) {
try {
let redirectBlocked = false;
let urlout = url;
for ( const step of steps ) {
const urlin = urlout;
const c0 = step.charCodeAt(0);
// Extract from URL parameter name at position i
if ( c0 === 0x26 ) { // &
const i = (parseInt(step.slice(1)) || 0) - 1;
if ( i < 0 ) { return; }
const url = new URL(urlin);
if ( i >= url.searchParams.size ) { return; }
const params = Array.from(url.searchParams.keys());
urlout = decodeURIComponent(params[i]);
continue;
}
// Enforce https
if ( c0 === 0x2B && step === '+https' ) {
const s = urlin.replace(/^https?:\/\//, '');
if ( /^[\w-]:\/\//.test(s) ) { return; }
urlout = `https://${s}`;
continue;
}
// Decode
if ( c0 === 0x2D ) {
// Base64
if ( step === '-base64' ) {
urlout = self.atob(urlin);
continue;
}
// Safe Base64
if ( step === '-safebase64' ) {
urlout = urlin.replace(/[-_]/g, safeBase64Replacer);
urlout = self.atob(urlout);
continue;
}
// URI component
if ( step === '-uricomponent' ) {
urlout = self.decodeURIComponent(urlin);
continue;
}
// Enable skip of blocked requests
if ( step === '-blocked' ) {
redirectBlocked = true;
continue;
}
}
// Regex extraction from first capture group
if ( c0 === 0x2F ) { // /
if ( directive.cache === null ) {
directive.cache = new RegExp(step.slice(1, -1));
}
const match = directive.cache.exec(urlin);
if ( match === null ) { return; }
if ( match.length <= 1 ) { return; }
urlout = match[1];
continue;
}
// Extract from URL parameter
if ( c0 === 0x3F ) { // ?
urlout = (new URL(urlin)).searchParams.get(step.slice(1));
if ( urlout === null ) { return; }
if ( urlout.includes(' ') ) {
urlout = urlout.replace(/ /g, '%20');
}
continue;
}
// Unknown directive
return;
}
const urlfinal = new URL(urlout);
if ( urlfinal.protocol !== 'https:' ) {
if ( urlfinal.protocol !== 'http:' ) { return; }
urlout = urlout.replace('http', 'https');
}
if ( blocked && redirectBlocked !== true ) { return; }
return urlout;
} catch(x) {
}
}
const safeBase64Map = { '-': '+', '_': '/' };
const safeBase64Replacer = s => safeBase64Map[s];
/******************************************************************************/
// https://github.com/uBlockOrigin/uBlock-issues/issues/1626

View file

@ -969,7 +969,7 @@ const injectCSP = function(fctxt, pageStore, responseHeaders) {
const builtinDirectives = [];
if ( pageStore.filterScripting(fctxt, true) === 1 ) {
builtinDirectives.push(µb.hiddenSettings.noScriptingCSP);
builtinDirectives.push(µb.cspNoScripting);
if ( logger.enabled ) {
fctxt.setRealm('network').setType('scripting').toLogger();
}

View file

@ -1,157 +0,0 @@
/*******************************************************************************
uBlock Origin - a comprehensive, efficient content blocker
Copyright (C) 2022-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
*/
const safeBase64Map = { '-': '+', '_': '/' };
const safeBase64Replacer = s => safeBase64Map[s];
/**
* @trustedOption urlskip
*
* @description
* Extract a URL from another URL according to one or more transformation steps,
* thereby skipping over intermediate network request(s) to remote servers.
* Requires a trusted source.
*
* @param steps
* A serie of space-separated directives representing the transformation steps
* to perform to extract the final URL to which a network request should be
* redirected.
*
* Supported directives:
*
* `?name`: extract the value of parameter `name` as the current string.
*
* `&i`: extract the name of the parameter at position `i` as the current
* string. The position is 1-based.
*
* `/.../`: extract the first capture group of a regex as the current string.
*
* `+https`: prepend the current string with `https://`.
*
* `-base64`: decode the current string as a base64-encoded string.
*
* `-safebase64`: decode the current string as a safe base64-encoded string.
*
* `-uricomponent`: decode the current string as a URI encoded string.
*
* `-blocked`: allow the redirection of blocked requests. By default, blocked
* requests can't by urlskip'ed.
*
* At any given step, the currently extracted string may not necessarily be
* a valid URL, and more transformation steps may be needed to obtain a valid
* URL once all the steps are applied.
*
* An unsupported step or a failed step will abort the transformation and no
* redirection will be performed.
*
* The final step is expected to yield a valid URL. If the result is not a
* valid URL, no redirection will be performed.
*
* @example
* ||example.com/path/to/tracker$urlskip=?url
* ||example.com/path/to/tracker$urlskip=?url ?to
* ||pixiv.net/jump.php?$urlskip=&1
* ||podtrac.com/pts/redirect.mp3/$urlskip=/\/redirect\.mp3\/(.*?\.mp3\b)/ +https
*
* */
export function urlSkip(url, blocked, steps, directive = {}) {
try {
let redirectBlocked = false;
let urlout = url;
for ( const step of steps ) {
const urlin = urlout;
const c0 = step.charCodeAt(0);
// Extract from URL parameter name at position i
if ( c0 === 0x26 ) { // &
const i = (parseInt(step.slice(1)) || 0) - 1;
if ( i < 0 ) { return; }
const url = new URL(urlin);
if ( i >= url.searchParams.size ) { return; }
const params = Array.from(url.searchParams.keys());
urlout = decodeURIComponent(params[i]);
continue;
}
// Enforce https
if ( c0 === 0x2B && step === '+https' ) {
const s = urlin.replace(/^https?:\/\//, '');
if ( /^[\w-]:\/\//.test(s) ) { return; }
urlout = `https://${s}`;
continue;
}
// Decode
if ( c0 === 0x2D ) {
// Base64
if ( step === '-base64' ) {
urlout = self.atob(urlin);
continue;
}
// Safe Base64
if ( step === '-safebase64' ) {
urlout = urlin.replace(/[-_]/g, safeBase64Replacer);
urlout = self.atob(urlout);
continue;
}
// URI component
if ( step === '-uricomponent' ) {
urlout = self.decodeURIComponent(urlin);
continue;
}
// Enable skip of blocked requests
if ( step === '-blocked' ) {
redirectBlocked = true;
continue;
}
}
// Regex extraction from first capture group
if ( c0 === 0x2F ) { // /
const re = directive.cache ?? new RegExp(step.slice(1, -1));
if ( directive.cache === null ) {
directive.cache = re;
}
const match = re.exec(urlin);
if ( match === null ) { return; }
if ( match.length <= 1 ) { return; }
urlout = match[1];
continue;
}
// Extract from URL parameter
if ( c0 === 0x3F ) { // ?
urlout = (new URL(urlin)).searchParams.get(step.slice(1));
if ( urlout === null ) { return; }
if ( urlout.includes(' ') ) {
urlout = urlout.replace(/ /g, '%20');
}
continue;
}
// Unknown directive
return;
}
const urlfinal = new URL(urlout);
if ( urlfinal.protocol !== 'https:' ) {
if ( urlfinal.protocol !== 'http:' ) { return; }
urlout = urlout.replace('http', 'https');
}
if ( blocked && redirectBlocked !== true ) { return; }
return urlout;
} catch(x) {
}
}

View file

@ -76,7 +76,6 @@ cp "$UBO_DIR"/src/css/fa-icons.css "$DES"/css/
cp "$UBO_DIR"/src/js/dom.js "$DES"/js/
cp "$UBO_DIR"/src/js/fa-icons.js "$DES"/js/
cp "$UBO_DIR"/src/js/i18n.js "$DES"/js/
cp "$UBO_DIR"/src/js/urlskip.js "$DES"/js/
cp "$UBO_DIR"/src/lib/punycode.js "$DES"/js/
cp -R "$UBO_DIR/src/img/flags-of-the-world" "$DES"/img

View file

@ -22,7 +22,6 @@ cp src/js/static-net-filtering.js $DES/js
cp src/js/static-filtering-io.js $DES/js
cp src/js/tasks.js $DES/js
cp src/js/text-utils.js $DES/js
cp src/js/urlskip.js $DES/js
cp src/js/uri-utils.js $DES/js
cp src/js/url-net-filtering.js $DES/js