From 3693755e940cbd5e12b1d7783342756aff09539a Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Mon, 28 Sep 2020 16:31:44 -0400 Subject: [PATCH 01/27] Add fall back URL for manual update of urlhaus-filter Related feedback: - https://www.reddit.com/r/uBlockOrigin/comments/j1ehm5/ --- assets/assets.json | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/assets.json b/assets/assets.json index d7f137827a335..37e42df92fa22 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -148,6 +148,7 @@ "title": "Online Malicious URL Blocklist", "contentURL": [ "https://gitlab.com/curben/urlhaus-filter/raw/master/urlhaus-filter-online.txt", + "https://raw.githubusercontent.com/curbengh/urlhaus-filter/master/urlhaus-filter-online.txt", "assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt" ], "cdnURLs": [ From fef375a5942402591671f1b6c3052a407b9802af Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Wed, 30 Sep 2020 10:01:10 -0400 Subject: [PATCH 02/27] Minor improvements to syntax highlight of static filters Double-cliking on a URL will cause the whole URL to be selected, thus making it easier to navigate to this URL (through your browser "Open in new tab" entry in contextual menu). Unrecognized scriptlet names will be highlighted so as to warn that the filter is not going to be effective. --- src/css/codemirror.css | 12 +++- src/css/themes/default.css | 4 ++ src/js/codemirror/ubo-static-filtering.js | 82 ++++++++++++++++++++--- 3 files changed, 88 insertions(+), 10 deletions(-) diff --git a/src/css/codemirror.css b/src/css/codemirror.css index f784f6069805c..7e95eb5ce5e8d 100644 --- a/src/css/codemirror.css +++ b/src/css/codemirror.css @@ -24,7 +24,7 @@ /* CodeMirror theme overrides */ .cm-s-default .cm-value { color: #930; } -.cm-s-default .cm-comment { color: #777; } +.cm-s-default .cm-comment { color: var(--sf-comment-ink); } .cm-s-default .cm-keyword { color: #90b; } .cm-s-default .cm-regex { text-underline-position: under; @@ -41,6 +41,16 @@ text-decoration: underline red; text-underline-position: under; } +.cm-s-default .cm-warning { + text-decoration: underline var(--sf-warning-ink); + text-underline-position: under; + } +.cm-s-default .cm-link { + text-decoration: none; + } +.cm-s-default .cm-link:hover { + color: var(--link-ink); + } .cm-directive { color: #333; font-weight: bold; } .cm-staticext { color: #008; } diff --git a/src/css/themes/default.css b/src/css/themes/default.css index de3f8f644b1ea..9f271e07690ac 100644 --- a/src/css/themes/default.css +++ b/src/css/themes/default.css @@ -159,6 +159,10 @@ --bg-popup-cell-block-own: hsla(0, 100%, 40%, 1); --bg-popup-cell-label-mixed: hsla(45, 100%, 38%, 1); --popup-icon-x-ink: var(--red-60); + + /* syntax highlight: static filtering */ + --sf-comment-ink: var(--light-gray-90); + --sf-warning-ink: var(--yellow-50); } /** diff --git a/src/js/codemirror/ubo-static-filtering.js b/src/js/codemirror/ubo-static-filtering.js index 24d257d60eb74..7f6299dfe1ca0 100644 --- a/src/js/codemirror/ubo-static-filtering.js +++ b/src/js/codemirror/ubo-static-filtering.js @@ -44,22 +44,33 @@ CodeMirror.defineMode('ubo-static-filtering', function() { if ( StaticFilteringParser instanceof Object === false ) { return; } const parser = new StaticFilteringParser({ interactive: true }); + const reURL = /\bhttps?:\/\/\S+/; const rePreparseDirectives = /^!#(?:if|endif|include )\b/; const rePreparseIfDirective = /^(!#if ?)(.*)$/; let parserSlot = 0; let netOptionValueMode = false; const colorCommentSpan = function(stream) { - if ( rePreparseDirectives.test(stream.string) === false ) { + const { string, pos } = stream; + if ( rePreparseDirectives.test(string) === false ) { + const match = reURL.exec(string.slice(pos)); + if ( match !== null ) { + if ( match.index === 0 ) { + stream.pos += match[0].length; + return 'comment link'; + } + stream.pos += match.index; + return 'comment'; + } stream.skipToEnd(); return 'comment'; } - const match = rePreparseIfDirective.exec(stream.string); + const match = rePreparseIfDirective.exec(string); if ( match === null ) { stream.skipToEnd(); return 'variable strong'; } - if ( stream.pos < match[1].length ) { + if ( pos < match[1].length ) { stream.pos += match[1].length; return 'variable strong'; } @@ -95,19 +106,29 @@ CodeMirror.defineMode('ubo-static-filtering', function() { }; const colorExtScriptletPatternSpan = function(stream) { + const { pos, string } = stream; const { i, len } = parser.patternSpan; - if ( stream.pos === parser.slices[i+1] ) { - stream.pos += 4; + const patternBeg = parser.slices[i+1]; + if ( pos === patternBeg ) { + stream.pos = pos + 4; return 'def'; } if ( len > 3 ) { + if ( pos === patternBeg + 4 ) { + const match = /^[^,)]+/.exec(string.slice(pos)); + const token = match && match[0].trim(); + if ( token && scriptletNames.has(token) === false ) { + stream.pos = pos + match[0].length; + return 'warning'; + } + } const r = parser.slices[i+len+1] - 1; - if ( stream.pos < r ) { + if ( pos < r ) { stream.pos = r; return 'variable'; } - if ( stream.pos === r ) { - stream.pos += 1; + if ( pos === r ) { + stream.pos = pos + 1; return 'def'; } } @@ -483,7 +504,6 @@ const initHints = function() { /******************************************************************************/ CodeMirror.registerHelper('fold', 'ubo-static-filtering', (( ) => { - const foldIfEndif = function(startLineNo, startLine, cm) { const lastLineNo = cm.lastLine(); let endLineNo = startLineNo; @@ -539,6 +559,50 @@ CodeMirror.registerHelper('fold', 'ubo-static-filtering', (( ) => { /******************************************************************************/ +// Enhanced word selection + +{ + const Pass = CodeMirror.Pass; + + const selectWordAt = function(cm, pos) { + const { line, ch } = pos; + + // Leave current selection alone + if ( cm.somethingSelected() ) { + const from = cm.getCursor('from'); + const to = cm.getCursor('to'); + if ( + (line > from.line || line === from.line && ch > from.ch) && + (line < to.line || line === to.line && ch < to.ch) + ) { + return Pass; + } + } + const s = cm.getLine(line); + + // Select URL + let lmatch = /\bhttps?:\/\/\S+$/.exec(s.slice(0, ch)); + let rmatch = /^\S+/.exec(s.slice(ch)); + + // TODO: add more convenient word-matching cases here + // if ( lmatch === null || rmatch === null ) { ... } + + if ( lmatch === null || rmatch === null ) { return Pass; } + cm.setSelection( + { line, ch: lmatch.index }, + { line, ch: ch + rmatch.index + rmatch[0].length } + ); + }; + + CodeMirror.defineInitHook(cm => { + cm.addKeyMap({ + 'LeftDoubleClick': selectWordAt, + }); + }); +} + +/******************************************************************************/ + // <<<<< end of local scope } From b2f5f9b85a10311344662842ec7fc4a5e5fccdf1 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Wed, 30 Sep 2020 10:06:25 -0400 Subject: [PATCH 03/27] New revision for dev build --- dist/version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/version b/dist/version index 034552a83eeb0..bd5326fa9e808 100644 --- a/dist/version +++ b/dist/version @@ -1 +1 @@ -1.30.0 +1.30.1.0 From 68ac096b391841cccaa12d6839d21ed600ef29bb Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Wed, 30 Sep 2020 10:23:08 -0400 Subject: [PATCH 04/27] Import translation work from https://crowdin.com/project/ublock --- dist/description/description-ml.txt | 8 +- dist/description/description-ta.txt | 47 +++--- src/_locales/ar/messages.json | 22 +-- src/_locales/ml/messages.json | 214 ++++++++++++++-------------- src/_locales/ms/messages.json | 146 +++++++++---------- tools/make-opera.sh | 1 - 6 files changed, 220 insertions(+), 218 deletions(-) diff --git a/dist/description/description-ml.txt b/dist/description/description-ml.txt index 10ad6432e273c..029603755c22e 100644 --- a/dist/description/description-ml.txt +++ b/dist/description/description-ml.txt @@ -24,17 +24,17 @@ -സ്പാം404 -കൂടാതെ മറ്റ് അനവധി -തീര്‍ച്ചയായും, കൂടുതല്‍ ഫില്‍ട്ടറുകള്‍ എനേബിള്‍ ചെയ്യുംതോറും മെമ്മറി ഉപഭോഗം കൂടുന്നതാണ്. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there. +തീര്‍ച്ചയായും, കൂടുതല്‍ ഫില്‍ട്ടറുകള്‍ എനേബിള്‍ ചെയ്യുംതോറും മെമ്മറി ഉപഭോഗം കൂടുന്നതാണ്. എന്നിട്ടും, ഫാൻ‌ബോയിയുടെ രണ്ട് അധിക ലിസ്റ്റുകളായ എച്ച്പി ഹോസ്റ്റുകളുടെ പരസ്യവും ട്രാക്കിംഗ് സെർ‌വറുകളും ചേർ‌ത്തിട്ടും, യു‌ബ്ലോക്കിന് അവിടെയുള്ള മറ്റ് ജനപ്രിയ ബ്ലോക്കറുകളേക്കാൾ കുറഞ്ഞ മെമ്മറി കാൽ‌നോട്ടമുണ്ട്. -Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file. +കൂടാതെ, ഈ അധിക ലിസ്റ്റുകളിൽ ചിലത് തിരഞ്ഞെടുക്കുന്നത് വെബ് സൈറ്റ് തകരാനുള്ള സാധ്യതയിലേക്ക് നയിച്ചേക്കാം - പ്രത്യേകിച്ചും ഹോസ്റ്റ് ഫയലായി സാധാരണയായി ഉപയോഗിക്കുന്ന ലിസ്റ്റുകൾ. *** -Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free. +ഫിൽട്ടറുകളുടെ പ്രീസെറ്റ് ലിസ്റ്റുകൾ ഇല്ലാതെ, ഈ വിപുലീകരണം ഒന്നുമല്ല. അതിനാൽ നിങ്ങൾ എപ്പോഴെങ്കിലും എന്തെങ്കിലും സംഭാവന ചെയ്യാൻ ആഗ്രഹിക്കുന്നുവെങ്കിൽ, നിങ്ങൾ ഉപയോഗിക്കുന്ന ഫിൽട്ടർ ലിസ്റ്റുകൾ പരിപാലിക്കാൻ കഠിനമായി പരിശ്രമിക്കുന്ന ആളുകളെക്കുറിച്ച് ചിന്തിക്കുക, അവ എല്ലാവർക്കും സ use ജന്യമായി ഉപയോഗിക്കാൻ ലഭ്യമാക്കി. *** -Free. +സൗ ജന്യം ഓപ്പണ്‍‌സോഴ്സ് പബ്ലിക്‌ ലൈസന്‍സ് (ജിപിഎല്‍വി3) ഉഭയോക്താക്കള്‍ക്ക്‌ ഉഭയോക്താക്കളില്‍ നിന്നും. diff --git a/dist/description/description-ta.txt b/dist/description/description-ta.txt index 43af9b585c586..a150b3ec5f3ad 100644 --- a/dist/description/description-ta.txt +++ b/dist/description/description-ta.txt @@ -1,49 +1,52 @@ -An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there. +ஒரு திறமையான தடுப்பான்: நினைவகம் மற்றும் CPU தடம் எளிதானது, ஆனால் அங்குள்ள பிற பிரபலமான தடுப்பான்களைக் காட்டிலும் ஆயிரக்கணக்கான வடிப்பான்களை ஏற்றலாம் மற்றும் செயல்படுத்தலாம். -Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared +அதன் செயல்திறனைப் பற்றிய விளக்கமான கண்ணோட்டம்: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button. +பயன்பாடு: தற்போதைய வலைத்தளத்திற்கான uBlock ஐ நிரந்தரமாக முடக்க / இயக்குவதே பாப்அப்பில் உள்ள பெரிய ஆற்றல் பொத்தான். இது தற்போதைய வலைத்தளத்திற்கு மட்டுமே பொருந்தும், இது உலகளாவிய சக்தி பொத்தான் அல்ல. *** -Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files. +நெகிழ்வான, இது ஒரு "விளம்பரத் தடுப்பான்" ஐ விட அதிகம்: இது ஹோஸ்ட் கோப்புகளிலிருந்து வடிப்பான்களைப் படித்து உருவாக்கலாம். -Out of the box, these lists of filters are loaded and enforced: +பெட்டியின் வெளியே, இந்த வடிப்பான்களின் பட்டியல்கள் ஏற்றப்பட்டு செயல்படுத்தப்படுகின்றன: - EasyList + - Peter Lowe’s Ad server list + - EasyPrivacy -- Malware domains -More lists are available for you to select if you wish: +- தீம்பொருள் களங்கள் + +நீங்கள் விரும்பினால் தேர்ந்தெடுக்க கூடுதல் பட்டியல்கள் கிடைக்கின்றன: -- Fanboy’s Enhanced Tracking List -- Dan Pollock’s hosts file -- hpHosts’s Ad and tracking servers -- MVPS HOSTS -- Spam404 -- And many others +- ஃபான்பாயின் மேம்படுத்தப்பட்ட கண்காணிப்பு பட்டியல் +- டான் பொல்லாக் ஹோஸ்ட்கள் கோப்பு +- hpHosts இன் விளம்பரம் மற்றும் கண்காணிப்பு சேவையகங்கள் +- எம்விபிஎஸ் ஹோஸ்ட்ஸ் +- ஸ்பேம் 404 +- மற்றும் பலர் -Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there. +நிச்சயமாக, அதிகமான வடிப்பான்கள் இயக்கப்பட்டன, நினைவக தடம் அதிகமாகும். இருப்பினும், ஃபான்பாயின் இரண்டு கூடுதல் பட்டியல்களான hpHosts இன் விளம்பரம் மற்றும் கண்காணிப்பு சேவையகங்களைச் சேர்த்த பிறகும், uBlock இன்னும் பிரபலமான பிற தடுப்பான்களைக் காட்டிலும் குறைந்த நினைவக தடம் உள்ளது. -Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file. +மேலும், இந்த கூடுதல் பட்டியல்களில் சிலவற்றைத் தேர்ந்தெடுப்பது வலைத்தள உடைப்புக்கான அதிக வாய்ப்புக்கு வழிவகுக்கும் என்பதை அறிந்து கொள்ளுங்கள் - குறிப்பாக அந்த பட்டியல்கள் பொதுவாக ஹோஸ்ட்கள் கோப்பாகப் பயன்படுத்தப்படுகின்றன. *** -Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free. +வடிப்பான்களின் முன்னமைக்கப்பட்ட பட்டியல்கள் இல்லாமல், இந்த நீட்டிப்பு எதுவும் இல்லை. ஆகவே, நீங்கள் உண்மையிலேயே ஏதாவது பங்களிக்க விரும்பினால், நீங்கள் பயன்படுத்தும் வடிகட்டி பட்டியல்களைப் பராமரிக்க கடினமாக உழைக்கும் நபர்களைப் பற்றி சிந்தியுங்கள், அவை அனைவருக்கும் இலவசமாகப் பயன்படுத்தக் கிடைத்தன. *** -Free. -Open source with public license (GPLv3) -For users by users. +இலவசம். +பொது உரிமத்துடன் திறந்த மூல (GPLv3) +பயனர்களால் பயனர்களுக்கு. -Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors -Contributors @ Crowdin: https://crowdin.net/project/ublock +பங்களிப்பாளர்கள் @ கிதுப்: https://github.com/gorhill/uBlock/graphs/contributors +பங்களிப்பாளர்கள் @ க்ரவுடின்: https://crowdin.net/project/ublock *** It's quite an early version, keep this in mind when you review. -Project change log: +திட்ட மாற்ற பதிவு: https://github.com/gorhill/uBlock/releases diff --git a/src/_locales/ar/messages.json b/src/_locales/ar/messages.json index 530d2325545a9..24d0b628de37e 100644 --- a/src/_locales/ar/messages.json +++ b/src/_locales/ar/messages.json @@ -96,11 +96,11 @@ "description": "English: or" }, "popupBlockedOnThisPage_v2": { - "message": "تم الحظر على هاته الصفحة", + "message": "محجوب من هذه الصفحة", "description": "For the new mobile-friendly popup design" }, "popupBlockedSinceInstall_v2": { - "message": "محظورة منذ التنصيب", + "message": "حُجِب منذ التنصيب", "description": "For the new mobile-friendly popup design" }, "popupDomainsConnected_v2": { @@ -180,19 +180,19 @@ "description": "Tooltip for the no-scripting per-site switch" }, "popupNoPopups_v2": { - "message": "نافذة منبثقة", + "message": "الإطارات المنبثقة", "description": "Caption for the no-popups per-site switch" }, "popupNoLargeMedia_v2": { - "message": "وسائط ميديا كبيرة", + "message": "المرئيات الضخمة", "description": "Caption for the no-large-media per-site switch" }, "popupNoCosmeticFiltering_v2": { - "message": "الفلترة التجميلية", + "message": "إعادة التنسيق", "description": "Caption for the no-cosmetic-filtering per-site switch" }, "popupNoRemoteFonts_v2": { - "message": "الخطوط البعيدة", + "message": "الخطوط الخارجية", "description": "Caption for the no-remote-fonts per-site switch" }, "popupNoScripting_v2": { @@ -552,19 +552,19 @@ "description": "English: dynamic rule syntax and full documentation." }, "rulesSort": { - "message": "Sort:", + "message": "الفرز", "description": "English: label for sort option." }, "rulesSortByType": { - "message": "Rule type", + "message": "الإشتراطات", "description": "English: a sort option for list of rules." }, "rulesSortBySource": { - "message": "Source", + "message": "المصدر", "description": "English: a sort option for list of rules." }, "rulesSortByDestination": { - "message": "Destination", + "message": "الوجهة", "description": "English: a sort option for list of rules." }, "whitelistPrompt": { @@ -908,7 +908,7 @@ "description": "No longer used" }, "subscribeButton": { - "message": "Subscribe", + "message": "اشترك", "description": "For the button used to subscribe to a filter list" }, "elapsedOneMinuteAgo": { diff --git a/src/_locales/ml/messages.json b/src/_locales/ml/messages.json index d91db7f08b785..0ea53ebf21dad 100644 --- a/src/_locales/ml/messages.json +++ b/src/_locales/ml/messages.json @@ -12,11 +12,11 @@ "description": "English: uBlock₀ — Dashboard" }, "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", + "message": "മുന്നറിയിപ്പ്! നിങ്ങൾക്ക് സംരക്ഷിക്കാത്ത മാറ്റങ്ങളുണ്ട്", "description": "A warning in the dashboard when navigating away from unsaved changes" }, "dashboardUnsavedWarningStay": { - "message": "Stay", + "message": "താമസിക്കുക", "description": "Label for button to prevent navigating away from unsaved changes" }, "dashboardUnsavedWarningIgnore": { @@ -44,7 +44,7 @@ "description": "appears as tab name in dashboard" }, "shortcutsPageName": { - "message": "Shortcuts", + "message": "കുറുക്കുവഴികൾ", "description": "appears as tab name in dashboard" }, "statsPageName": { @@ -56,11 +56,11 @@ "description": "appears as tab name in dashboard" }, "assetViewerPageName": { - "message": "uBlock₀ — Asset viewer", + "message": "uBlock₀ - അസറ്റ് വ്യൂവർ", "description": "Title for the asset viewer page" }, "advancedSettingsPageName": { - "message": "Advanced settings", + "message": "വിപുലമായ ക്രമീകരണങ്ങൾ", "description": "Title for the advanced settings page" }, "popupPowerSwitchInfo": { @@ -68,11 +68,11 @@ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, "popupPowerSwitchInfo1": { - "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "message": "ഈ സൈറ്റിനായി uBlock₀ പ്രവർത്തനരഹിതമാക്കാൻ ക്ലിക്കുചെയ്യുക.\n\nഈ പേജിൽ മാത്രം uBlock₀ പ്രവർത്തനരഹിതമാക്കാൻ Ctrl + ക്ലിക്കുചെയ്യുക.", "description": "Message to be read by screen readers" }, "popupPowerSwitchInfo2": { - "message": "Click to enable uBlock₀ for this site.", + "message": "ഈ സൈറ്റിനായി uBlock₀ പ്രവർത്തനക്ഷമമാക്കാൻ ക്ലിക്കുചെയ്യുക.", "description": "Message to be read by screen readers" }, "popupBlockedRequestPrompt": { @@ -96,15 +96,15 @@ "description": "English: or" }, "popupBlockedOnThisPage_v2": { - "message": "Blocked on this page", + "message": "ഈ പേജിൽ തടഞ്ഞു", "description": "For the new mobile-friendly popup design" }, "popupBlockedSinceInstall_v2": { - "message": "Blocked since install", + "message": "ഇൻസ്റ്റാളുചെയ്‌തതിനുശേഷം തടഞ്ഞു", "description": "For the new mobile-friendly popup design" }, "popupDomainsConnected_v2": { - "message": "Domains connected", + "message": "ഡൊമെയ്‌നുകൾ കണക്റ്റുചെയ്‌തു", "description": "For the new mobile-friendly popup design" }, "popupTipDashboard": { @@ -112,7 +112,7 @@ "description": "English: Click to open the dashboard" }, "popupTipZapper": { - "message": "Enter element zapper mode", + "message": "ഘടക സപ്പർ മോഡ് നൽകുക", "description": "Tooltip for the element-zapper icon in the popup panel" }, "popupTipPicker": { @@ -128,23 +128,23 @@ "description": "Tooltip for the no-popups per-site switch" }, "popupTipNoPopups1": { - "message": "Click to block all popups on this site", + "message": "ഈ സൈറ്റിലെ എല്ലാ പോപ്പ്അപ്പുകളും തടയാൻ ക്ലിക്കുചെയ്യുക", "description": "Tooltip for the no-popups per-site switch" }, "popupTipNoPopups2": { - "message": "Click to no longer block all popups on this site", + "message": "ഈ സൈറ്റിലെ എല്ലാ പോപ്പ്അപ്പുകളും മേലിൽ തടയാൻ ക്ലിക്കുചെയ്യുക", "description": "Tooltip for the no-popups per-site switch" }, "popupTipNoLargeMedia": { - "message": "Toggle the blocking of large media elements for this site", + "message": "ഈ സൈറ്റിനായി വലിയ മീഡിയ ഘടകങ്ങളുടെ തടയൽ ടോഗിൾ ചെയ്യുക", "description": "Tooltip for the no-large-media per-site switch" }, "popupTipNoLargeMedia1": { - "message": "Click to block large media elements on this site", + "message": "ഈ സൈറ്റിലെ വലിയ മീഡിയ ഘടകങ്ങൾ തടയാൻ ക്ലിക്കുചെയ്യുക", "description": "Tooltip for the no-large-media per-site switch" }, "popupTipNoLargeMedia2": { - "message": "Click to no longer block large media elements on this site", + "message": "ഈ സൈറ്റിലെ വലിയ മീഡിയ ഘടകങ്ങളെ മേലിൽ തടയാൻ ക്ലിക്കുചെയ്യുക", "description": "Tooltip for the no-large-media per-site switch" }, "popupTipNoCosmeticFiltering": { @@ -152,11 +152,11 @@ "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, "popupTipNoCosmeticFiltering1": { - "message": "Click to disable cosmetic filtering on this site", + "message": "ഈ സൈറ്റിൽ കോസ്മെറ്റിക് ഫിൽ‌ട്ടറിംഗ് അപ്രാപ്‌തമാക്കാൻ ക്ലിക്കുചെയ്യുക", "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, "popupTipNoCosmeticFiltering2": { - "message": "Click to enable cosmetic filtering on this site", + "message": "ഈ സൈറ്റിൽ കോസ്മെറ്റിക് ഫിൽ‌ട്ടറിംഗ് പ്രാപ്തമാക്കുന്നതിന് ക്ലിക്കുചെയ്യുക", "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, "popupTipNoRemoteFonts": { @@ -164,47 +164,47 @@ "description": "Tooltip for the no-remote-fonts per-site switch" }, "popupTipNoRemoteFonts1": { - "message": "Click to block remote fonts on this site", + "message": "ഈ സൈറ്റിലെ വിദൂര ഫോണ്ടുകൾ തടയാൻ ക്ലിക്കുചെയ്യുക", "description": "Tooltip for the no-remote-fonts per-site switch" }, "popupTipNoRemoteFonts2": { - "message": "Click to no longer block remote fonts on this site", + "message": "ഈ സൈറ്റിൽ വിദൂര ഫോണ്ടുകൾ മേലിൽ തടയാൻ ക്ലിക്കുചെയ്യുക", "description": "Tooltip for the no-remote-fonts per-site switch" }, "popupTipNoScripting1": { - "message": "Click to disable JavaScript on this site", + "message": "ഈ സൈറ്റിൽ JavaScript അപ്രാപ്തമാക്കാൻ ക്ലിക്കുചെയ്യുക", "description": "Tooltip for the no-scripting per-site switch" }, "popupTipNoScripting2": { - "message": "Click to no longer disable JavaScript on this site", + "message": "ഈ സൈറ്റിൽ‌ ഇനിമുതൽ‌ JavaScript അപ്രാപ്‌തമാക്കുന്നതിന് ക്ലിക്കുചെയ്യുക", "description": "Tooltip for the no-scripting per-site switch" }, "popupNoPopups_v2": { - "message": "Pop-up windows", + "message": "പോപ്പ്-അപ്പ് വിൻഡോകൾ", "description": "Caption for the no-popups per-site switch" }, "popupNoLargeMedia_v2": { - "message": "Large media elements", + "message": "വലിയ മീഡിയ ഘടകങ്ങൾ", "description": "Caption for the no-large-media per-site switch" }, "popupNoCosmeticFiltering_v2": { - "message": "Cosmetic filtering", + "message": "കോസ്മെറ്റിക് ഫിൽട്ടറിംഗ്", "description": "Caption for the no-cosmetic-filtering per-site switch" }, "popupNoRemoteFonts_v2": { - "message": "Remote fonts", + "message": "വിദൂര ഫോണ്ടുകൾ", "description": "Caption for the no-remote-fonts per-site switch" }, "popupNoScripting_v2": { - "message": "JavaScript", + "message": "ജാവാസ്ക്രിപ്റ്റ്", "description": "Caption for the no-scripting per-site switch" }, "popupMoreButton_v2": { - "message": "More", + "message": "കൂടുതൽ", "description": "Label to be used to show popup panel sections" }, "popupLessButton_v2": { - "message": "Less", + "message": "കുറവ്", "description": "Label to be used to hide popup panel sections" }, "popupTipGlobalRules": { @@ -264,7 +264,7 @@ "description": "appears in popup" }, "popupVersion": { - "message": "Version", + "message": "പതിപ്പ്", "description": "Example of use: Version 1.26.4" }, "pickerCreate": { @@ -280,7 +280,7 @@ "description": "English: Quit" }, "pickerPreview": { - "message": "Preview", + "message": "പ്രിവ്യൂ", "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, "pickerNetFilters": { @@ -328,7 +328,7 @@ "description": "" }, "settingsAdvancedUserSettings": { - "message": "advanced settings", + "message": "വിപുലമായ ക്രമീകരണങ്ങൾ", "description": "For the tooltip of a link which gives access to advanced settings" }, "settingsPrefetchingDisabledPrompt": { @@ -348,7 +348,7 @@ "description": "" }, "settingPerSiteSwitchGroupSynopsis": { - "message": "These default behaviors can be overridden on a per-site basis", + "message": "ഓരോ സ്ഥിരസ്ഥിതി അടിസ്ഥാനത്തിലും ഈ സ്ഥിരസ്ഥിതി പെരുമാറ്റങ്ങൾ അസാധുവാക്കാനാകും", "description": "" }, "settingsNoCosmeticFilteringPrompt": { @@ -356,7 +356,7 @@ "description": "" }, "settingsNoLargeMediaPrompt": { - "message": "Block media elements larger than {{input}} KB", + "message": "മീഡിയ ഘടകങ്ങളെക്കാൾ വലുത് തടയുക {{input}} KB", "description": "" }, "settingsNoRemoteFontsPrompt": { @@ -364,11 +364,11 @@ "description": "" }, "settingsNoScriptingPrompt": { - "message": "Disable JavaScript", + "message": "ജാവാസ്ക്രിപ്റ്റ് അപ്രാപ്തമാക്കുക", "description": "The default state for the per-site no-scripting switch" }, "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", + "message": "സി‌എസ്‌പി റിപ്പോർട്ടുകൾ തടയുക", "description": "background information: https://github.com/gorhill/uBlock/issues/3150" }, "settingsLastRestorePrompt": { @@ -404,15 +404,15 @@ "description": "English: Parse and enforce Adblock+ element hiding filters." }, "3pParseAllABPHideFiltersInfo": { - "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.", + "message": "ഒരു വിഷ്വൽ ശല്യമെന്ന് കരുതപ്പെടുന്നതും നെറ്റ്‌വർക്ക് അഭ്യർത്ഥന അടിസ്ഥാനമാക്കിയുള്ള ഫിൽട്ടറിംഗ് എഞ്ചിനുകൾക്ക് തടയാൻ കഴിയാത്തതുമായ ഒരു വെബ് പേജിലെ ഘടകങ്ങൾ മറയ്ക്കാൻ കോസ്മെറ്റിക് ഫിൽട്ടറുകൾ സഹായിക്കുന്നു.", "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, "3pIgnoreGenericCosmeticFilters": { - "message": "Ignore generic cosmetic filters", + "message": "ജനറിക് കോസ്മെറ്റിക് ഫിൽട്ടറുകൾ അവഗണിക്കുക", "description": "This will cause uBO to ignore all generic cosmetic filters." }, "3pIgnoreGenericCosmeticFiltersInfo": { - "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.", + "message": "എല്ലാ വെബ് സൈറ്റുകളിലും പ്രയോഗിക്കാൻ ഉദ്ദേശിക്കുന്ന കോസ്മെറ്റിക് ഫിൽട്ടറുകളാണ് ജനറിക് കോസ്മെറ്റിക് ഫിൽട്ടറുകൾ. ഈ ഓപ്ഷൻ പ്രവർത്തനക്ഷമമാക്കുന്നത് ജനറിക് കോസ്മെറ്റിക് ഫിൽട്ടറുകൾ കൈകാര്യം ചെയ്യുന്നതിന്റെ ഫലമായി വെബ് പേജുകളിൽ ചേർത്ത മെമ്മറിയും സിപിയു ഓവർഹെഡും ഇല്ലാതാക്കും.\n\nശക്തി കുറഞ്ഞ ഉപകരണങ്ങളിൽ ഈ ഓപ്‌ഷൻ പ്രവർത്തനക്ഷമമാക്കാൻ ശുപാർശ ചെയ്യുന്നു.", "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, "3pListsOfBlockedHostsHeader": { @@ -424,7 +424,7 @@ "description": "English: Apply changes" }, "3pGroupDefault": { - "message": "Built-in", + "message": "അന്തർനിർമ്മിതം", "description": "Header for the uBlock filters section in 'Filter lists pane'" }, "3pGroupAds": { @@ -440,7 +440,7 @@ "description": "English: Malware domains" }, "3pGroupAnnoyances": { - "message": "Annoyances", + "message": "ശല്യപ്പെടുത്തലുകൾ", "description": "The header identifying the filter lists in the category 'annoyances'" }, "3pGroupMultipurpose": { @@ -456,7 +456,7 @@ "description": "English: Custom" }, "3pImport": { - "message": "Import...", + "message": "ഇറക്കുമതി ചെയ്യുക ...", "description": "The label for the checkbox used to import external filter lists" }, "3pExternalListsHint": { @@ -468,7 +468,7 @@ "description": "used as a tooltip for the out-of-date icon beside a list" }, "3pViewContent": { - "message": "view content", + "message": "ഉള്ളടക്കം കാണുക", "description": "used as a tooltip for eye icon beside a list" }, "3pLastUpdate": { @@ -476,11 +476,11 @@ "description": "used as a tooltip for the clock icon beside a list" }, "3pUpdating": { - "message": "Updating...", + "message": "അപ്‌ഡേറ്റുചെയ്യുന്നു ...", "description": "used as a tooltip for the spinner icon beside a list" }, "3pNetworkError": { - "message": "A network error prevented the resource from being updated.", + "message": "ഒരു നെറ്റ്‌വർക്ക് പിശക് ഉറവിടം അപ്‌ഡേറ്റുചെയ്യുന്നതിൽ നിന്ന് തടഞ്ഞു.", "description": "used as a tooltip for error icon beside a list" }, "1pFormatHint": { @@ -552,19 +552,19 @@ "description": "English: dynamic rule syntax and full documentation." }, "rulesSort": { - "message": "Sort:", + "message": "അടുക്കുക:", "description": "English: label for sort option." }, "rulesSortByType": { - "message": "Rule type", + "message": "റൂൾ തരം", "description": "English: a sort option for list of rules." }, "rulesSortBySource": { - "message": "Source", + "message": "ഉറവിടം", "description": "English: a sort option for list of rules." }, "rulesSortByDestination": { - "message": "Destination", + "message": "ലക്ഷ്യസ്ഥാനം", "description": "English: a sort option for list of rules." }, "whitelistPrompt": { @@ -612,39 +612,39 @@ "description": "Pretty name for behind-the-scene network requests" }, "loggerCurrentTab": { - "message": "Current tab", + "message": "നിലവിലെ ടാബ്", "description": "Appears in the logger's tab selector" }, "loggerReloadTip": { - "message": "Reload the tab content", + "message": "ടാബ് ഉള്ളടക്കം വീണ്ടും ലോഡുചെയ്യുക", "description": "Tooltip for the reload button in the logger page" }, "loggerDomInspectorTip": { - "message": "Toggle the DOM inspector", + "message": "DOM ഇൻസ്പെക്ടർ ടോഗിൾ ചെയ്യുക", "description": "Tooltip for the DOM inspector button in the logger page" }, "loggerPopupPanelTip": { - "message": "Toggle the popup panel", + "message": "പോപ്പ്അപ്പ് പാനൽ ടോഗിൾ ചെയ്യുക", "description": "Tooltip for the popup panel button in the logger page" }, "loggerInfoTip": { - "message": "uBlock Origin wiki: The logger", + "message": "uBlock ഉറവിട വിക്കി: ലോഗർ", "description": "Tooltip for the top-right info label in the logger page" }, "loggerClearTip": { - "message": "Clear logger", + "message": "ലോഗർ മായ്‌ക്കുക", "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger" }, "loggerPauseTip": { - "message": "Pause logger (discard all incoming data)", + "message": "ലോഗർ താൽക്കാലികമായി നിർത്തുക (ഇൻകമിംഗ് ഡാറ്റയെല്ലാം ഉപേക്ഷിക്കുക)", "description": "Tooltip for the pause button in the logger page" }, "loggerUnpauseTip": { - "message": "Unpause logger", + "message": "ലോഗർ അൺപോസ് ചെയ്യുക", "description": "Tooltip for the play button in the logger page" }, "loggerRowFiltererButtonTip": { - "message": "Toggle logger filtering", + "message": "ലോഗർ ഫിൽട്ടറിംഗ് ടോഗിൾ ചെയ്യുക", "description": "Tooltip for the row filterer button in the logger page" }, "logFilterPrompt": { @@ -652,11 +652,11 @@ "description": "Placeholder string for logger output filtering input field" }, "loggerRowFiltererBuiltinTip": { - "message": "Logger filtering options", + "message": "ലോഗർ ഫിൽട്ടറിംഗ് ഓപ്ഷനുകൾ", "description": "Tooltip for the button to bring up logger output filtering options" }, "loggerRowFiltererBuiltinNot": { - "message": "Not", + "message": "അല്ല", "description": "A keyword in the built-in row filtering expression" }, "loggerRowFiltererBuiltinEventful": { @@ -664,55 +664,55 @@ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)" }, "loggerRowFiltererBuiltinBlocked": { - "message": "blocked", + "message": "തടഞ്ഞു", "description": "A keyword in the built-in row filtering expression" }, "loggerRowFiltererBuiltinAllowed": { - "message": "allowed", + "message": "അനുവദനീയമാണ്", "description": "A keyword in the built-in row filtering expression" }, "loggerRowFiltererBuiltin1p": { - "message": "1st-party", + "message": "ഒന്നാം കക്ഷി", "description": "A keyword in the built-in row filtering expression" }, "loggerRowFiltererBuiltin3p": { - "message": "3rd-party", + "message": "തേര്‍ഡ് പാര്‍ട്ടി", "description": "A keyword in the built-in row filtering expression" }, "loggerEntryDetailsHeader": { - "message": "Details", + "message": "വിശദാംശങ്ങൾ", "description": "Small header to identify the 'Details' pane for a specific logger entry" }, "loggerEntryDetailsFilter": { - "message": "Filter", + "message": "ഫിൽട്ടർ ചെയ്യുക", "description": "Label to identify a filter field" }, "loggerEntryDetailsFilterList": { - "message": "Filter list", + "message": "ലിസ്റ്റ് ഫിൽട്ടർ ചെയ്യുക", "description": "Label to identify a filter list field" }, "loggerEntryDetailsRule": { - "message": "Rule", + "message": "ഭരണം", "description": "Label to identify a rule field" }, "loggerEntryDetailsContext": { - "message": "Context", + "message": "സന്ദർഭം", "description": "Label to identify a context field (typically a hostname)" }, "loggerEntryDetailsRootContext": { - "message": "Root context", + "message": "റൂട്ട് സന്ദർഭം", "description": "Label to identify a root context field (typically a hostname)" }, "loggerEntryDetailsPartyness": { - "message": "Partyness", + "message": "പാർട്ടിത്വം", "description": "Label to identify a field providing partyness information" }, "loggerEntryDetailsType": { - "message": "Type", + "message": "തരം", "description": "Label to identify the type of an entry" }, "loggerEntryDetailsURL": { - "message": "URL", + "message": "URL\n", "description": "Label to identify the URL of an entry" }, "loggerURLFilteringHeader": { @@ -732,7 +732,7 @@ "description": "Small header to identify the static filtering section" }, "loggerStaticFilteringSentence": { - "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "message": "URL {{action}} നെറ്റ്വർക്ക് അഭ്യർത്ഥനകൾ {{type}} {{br}} ഏത് URL വിലാസം പൊരുത്തപ്പെടുന്നു {{url}} {{br}}, ഒപ്പം {{origin}}, {{br}} {{importance}} an പൊരുത്തപ്പെടുന്ന ഒഴിവാക്കൽ ഫിൽട്ടർ ഉണ്ട്.", "description": "Used in the static filtering wizard" }, "loggerStaticFilteringSentencePartBlock": { @@ -772,63 +772,63 @@ "description": "Below this sentence, the filter list(s) in which the filter was found" }, "loggerStaticFilteringFinderSentence2": { - "message": "Static filter could not be found in any of the currently enabled filter lists", + "message": "നിലവിൽ പ്രവർത്തനക്ഷമമാക്കിയ ഏതെങ്കിലും ഫിൽട്ടർ ലിസ്റ്റുകളിൽ സ്റ്റാറ്റിക് ഫിൽട്ടർ കണ്ടെത്താൻ കഴിഞ്ഞില്ല", "description": "Message to show when a filter cannot be found in any filter lists" }, "loggerSettingDiscardPrompt": { - "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:", + "message": "ചുവടെയുള്ള മൂന്ന് നിബന്ധനകളും പാലിക്കാത്ത ലോഗർ എൻ‌ട്രികൾ സ്വപ്രേരിതമായി നിരസിക്കപ്പെടും:", "description": "Logger setting: A sentence to describe the purpose of the settings below" }, "loggerSettingPerEntryMaxAge": { - "message": "Preserve entries from the last {{input}} minutes", + "message": "അവസാന {{input}} മിനിറ്റുകളിൽ നിന്ന് എൻട്രികൾ സംരക്ഷിക്കുക", "description": "A logger setting" }, "loggerSettingPerTabMaxLoads": { - "message": "Preserve at most {{input}} page loads per tab", + "message": "ഒരു ടാബിന് പരമാവധി {{input}} പേജ് ലോഡുകൾ സംരക്ഷിക്കുക", "description": "A logger setting" }, "loggerSettingPerTabMaxEntries": { - "message": "Preserve at most {{input}} entries per tab", + "message": "ഒരു ടാബിന് പരമാവധി {{input}} എൻ‌ട്രികൾ സംരക്ഷിക്കുക", "description": "A logger setting" }, "loggerSettingPerEntryLineCount": { - "message": "Use {{input}} lines per entry in vertically expanded mode", + "message": "ലംബമായി വികസിപ്പിച്ച മോഡിൽ ഓരോ എൻട്രിക്കും {{input}} വരികൾ ഉപയോഗിക്കുക", "description": "A logger setting" }, "loggerSettingHideColumnsPrompt": { - "message": "Hide columns:", + "message": "നിരകൾ മറയ്‌ക്കുക:", "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" }, "loggerSettingHideColumnTime": { - "message": "{{input}} Time", + "message": "{{input}} സമയം", "description": "A label for the time column" }, "loggerSettingHideColumnFilter": { - "message": "{{input}} Filter/rule", + "message": "{{input}} ഫിൽട്ടർ / റൂൾ", "description": "A label for the filter or rule column" }, "loggerSettingHideColumnContext": { - "message": "{{input}} Context", + "message": "{{input}}സന്ദർഭം", "description": "A label for the context column" }, "loggerSettingHideColumnPartyness": { - "message": "{{input}} Partyness", + "message": "{{input}} പാർട്ടിത്വം", "description": "A label for the partyness column" }, "loggerExportFormatList": { - "message": "List", + "message": "പട്ടിക", "description": "Label for radio-button to pick export format" }, "loggerExportFormatTable": { - "message": "Table", + "message": "മേശ", "description": "Label for radio-button to pick export format" }, "loggerExportEncodePlain": { - "message": "Plain", + "message": "പ്ലെയിൻ", "description": "Label for radio-button to pick export text format" }, "loggerExportEncodeMarkdown": { - "message": "Markdown", + "message": "മാർക്ക്ഡ .ൺ", "description": "Label for radio-button to pick export text format" }, "aboutChangelog": { @@ -840,11 +840,11 @@ "description": "English: project' wiki on GitHub" }, "aboutSupport": { - "message": "Support", + "message": "പിന്തുണ", "description": "A link for where to get support" }, "aboutIssues": { - "message": "Issue tracker", + "message": "ഇഷ്യു ട്രാക്കർ", "description": "Text for a link to official issue tracker" }, "aboutCode": { @@ -856,19 +856,19 @@ "description": "English: Contributors" }, "aboutSourceCode": { - "message": "Source code", + "message": "സോഴ്സ് കോഡ്", "description": "Link text to source code repo" }, "aboutTranslations": { - "message": "Translations", + "message": "വിവർത്തനങ്ങൾ", "description": "Link text to translations repo" }, "aboutFilterLists": { - "message": "Filter lists", + "message": "ലിസ്റ്റുകൾ ഫിൽട്ടർ ചെയ്യുക", "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { - "message": "External dependencies (GPLv3-compatible):", + "message": "ബാഹ്യ ഡിപൻഡൻസികൾ (GPLv3- അനുയോജ്യമാണ്):", "description": "Shown in the About pane" }, "aboutBackupDataButton": { @@ -908,7 +908,7 @@ "description": "No longer used" }, "subscribeButton": { - "message": "Subscribe", + "message": "സബ്‌സ്‌ക്രൈബുചെയ്യുക", "description": "For the button used to subscribe to a filter list" }, "elapsedOneMinuteAgo": { @@ -1004,7 +1004,7 @@ "description": "used as a prompt for the user to provide a custom device name" }, "advancedSettingsWarning": { - "message": "Warning! Change these advanced settings at your own risk.", + "message": "മുന്നറിയിപ്പ്! നിങ്ങളുടെ സ്വന്തം ഉത്തരവാദിത്തത്തിൽ ഈ നൂതന ക്രമീകരണങ്ങൾ മാറ്റുക.", "description": "A warning to users at the top of 'Advanced settings' page" }, "genericSubmit": { @@ -1012,7 +1012,7 @@ "description": "for generic 'Submit' buttons" }, "genericApplyChanges": { - "message": "Apply changes", + "message": "മാറ്റങ്ങൾ വരുത്തു", "description": "for generic 'Apply changes' buttons" }, "genericRevert": { @@ -1028,39 +1028,39 @@ "description": "A context menu entry, present when large media elements have been blocked on the current site" }, "shortcutCapturePlaceholder": { - "message": "Type a shortcut", + "message": "ഒരു കുറുക്കുവഴി ടൈപ്പുചെയ്യുക", "description": "Placeholder string for input field used to capture a keyboard shortcut" }, "genericMergeViewScrollLock": { - "message": "Toggle locked scrolling", + "message": "ലോക്കുചെയ്‌ത സ്ക്രോളിംഗ് ടോഗിൾ ചെയ്യുക", "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" }, "genericCopyToClipboard": { - "message": "Copy to clipboard", + "message": "ക്ലിപ്പ്ബോർഡിലേയ്ക്ക് പകർത്തുക", "description": "Label for buttons used to copy something to the clipboard" }, "toggleBlockingProfile": { - "message": "Toggle blocking profile", + "message": "തടയൽ പ്രൊഫൈൽ ടോഗിൾ ചെയ്യുക", "description": "Label for keyboard shortcut used to toggle blocking profile" }, "relaxBlockingMode": { - "message": "Relax blocking mode", + "message": "തടയൽ മോഡ് വിശ്രമിക്കുക", "description": "Label for keyboard shortcut used to relax blocking mode (meant to replace 'Toggle blocking profile')" }, "storageUsed": { - "message": "Storage used: {{value}} {{unit}}", + "message": "ഉപയോഗിച്ച സംഭരണം: {{value}} {{unit}}", "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" }, "KB": { - "message": "KB", + "message": "കെ.ബി.", "description": "short for 'kilobytes'" }, "MB": { - "message": "MB", + "message": "എം.ബി.", "description": "short for 'megabytes'" }, "GB": { - "message": "GB", + "message": "ജി.ബി.", "description": "short for 'gigabytes'" }, "dummy": { diff --git a/src/_locales/ms/messages.json b/src/_locales/ms/messages.json index 8c0e7e7f69f7f..55ccde99d04f3 100644 --- a/src/_locales/ms/messages.json +++ b/src/_locales/ms/messages.json @@ -484,7 +484,7 @@ "description": "used as a tooltip for error icon beside a list" }, "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", + "message": "Satu penapis setiap baris. Penapis boleh menjadi nama hos biasa, atau penapis yang sesuai dengan Daftar Mudah. Garis yang diawali dengan ! akan diabaikan.", "description": "Short information about how to create custom filters" }, "1pImport": { @@ -496,7 +496,7 @@ "description": "English: Export" }, "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", + "message": "my-ublock-static-filter _ {{datetime}}. txt", "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, "1pApplyChanges": { @@ -540,35 +540,35 @@ "description": "" }, "rulesDefaultFileName": { - "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "message": "my-ublock-dynamic-rules_{{datetime}}.txt\n", "description": "default file name to use" }, "rulesHint": { - "message": "List of your dynamic filtering rules.", + "message": "Senaraikan peraturan penapisan dinamik anda.", "description": "English: List of your dynamic filtering rules." }, "rulesFormatHint": { - "message": "Rule syntax: source destination type action (full documentation).", + "message": "Sintaks peraturan: tindakan jenis tujuan sumber ( dokumentasi lengkap ).", "description": "English: dynamic rule syntax and full documentation." }, "rulesSort": { - "message": "Sort:", + "message": "Susun:", "description": "English: label for sort option." }, "rulesSortByType": { - "message": "Rule type", + "message": "Jenis peraturan", "description": "English: a sort option for list of rules." }, "rulesSortBySource": { - "message": "Source", + "message": "Sumber", "description": "English: a sort option for list of rules." }, "rulesSortByDestination": { - "message": "Destination", + "message": "Destinasi", "description": "English: a sort option for list of rules." }, "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line. Invalid directives will be silently ignored and commented out.", + "message": "Arahan laman web yang dipercayai menentukan halaman web mana uBlock Origin harus dilumpuhkan. Satu penyertaan setiap baris. Arahan tidak sah akan diam-diam diabaikan dan dikomentari.", "description": "The name of the trusted sites pane." }, "whitelistImport": { @@ -580,7 +580,7 @@ "description": "English: Export" }, "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", + "message": "my-ublock-trusted-sites_{{datetime}}.txt\n", "description": "The default filename to use for import/export purpose" }, "whitelistApply": { @@ -732,7 +732,7 @@ "description": "Small header to identify the static filtering section" }, "loggerStaticFilteringSentence": { - "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "message": "{{action}} permintaan rangkaian {{type}} {{br}} alamat URL yang sesuai dengan {{url}} {{br}} dan mana yang berasal {{origin}}, {{br}} {{kepentingan} } ada penapis pengecualian yang sepadan.", "description": "Used in the static filtering wizard" }, "loggerStaticFilteringSentencePartBlock": { @@ -756,79 +756,79 @@ "description": "Used in the static filtering wizard" }, "loggerStaticFilteringSentencePartAnyOrigin": { - "message": "from anywhere", + "message": "dari mana-mana ", "description": "Used in the static filtering wizard" }, "loggerStaticFilteringSentencePartNotImportant": { - "message": "except when", + "message": "kecuali bila", "description": "Used in the static filtering wizard" }, "loggerStaticFilteringSentencePartImportant": { - "message": "even if", + "message": "walaupun", "description": "Used in the static filtering wizard" }, "loggerStaticFilteringFinderSentence1": { - "message": "Static filter {{filter}} found in:", + "message": "Penapis statik {{filter}} terdapat di:", "description": "Below this sentence, the filter list(s) in which the filter was found" }, "loggerStaticFilteringFinderSentence2": { - "message": "Static filter could not be found in any of the currently enabled filter lists", + "message": "Penapis statik tidak dapat dijumpai dalam daftar penapis yang diaktifkan sekarang", "description": "Message to show when a filter cannot be found in any filter lists" }, "loggerSettingDiscardPrompt": { - "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:", + "message": "Entri logger yang tidak memenuhi ketiga-tiga syarat di bawah akan dibuang secara automatik:", "description": "Logger setting: A sentence to describe the purpose of the settings below" }, "loggerSettingPerEntryMaxAge": { - "message": "Preserve entries from the last {{input}} minutes", + "message": "Simpan entri dari {{input}} minit terakhir", "description": "A logger setting" }, "loggerSettingPerTabMaxLoads": { - "message": "Preserve at most {{input}} page loads per tab", + "message": "Simpan paling banyak {{input}} pemuatan halaman setiap tab", "description": "A logger setting" }, "loggerSettingPerTabMaxEntries": { - "message": "Preserve at most {{input}} entries per tab", + "message": "Simpan paling banyak {{input}} entri setiap tab", "description": "A logger setting" }, "loggerSettingPerEntryLineCount": { - "message": "Use {{input}} lines per entry in vertically expanded mode", + "message": "Gunakan baris {{input}} setiap entri dalam mod yang diluaskan secara menegak", "description": "A logger setting" }, "loggerSettingHideColumnsPrompt": { - "message": "Hide columns:", + "message": "Sembunyikan lajur:", "description": "Logger settings: a sentence to describe the purpose of the checkboxes below" }, "loggerSettingHideColumnTime": { - "message": "{{input}} Time", + "message": "{{input}} Masa", "description": "A label for the time column" }, "loggerSettingHideColumnFilter": { - "message": "{{input}} Filter/rule", + "message": "{{input}} Tapis / peraturan", "description": "A label for the filter or rule column" }, "loggerSettingHideColumnContext": { - "message": "{{input}} Context", + "message": "{{input}} Konteks", "description": "A label for the context column" }, "loggerSettingHideColumnPartyness": { - "message": "{{input}} Partyness", + "message": "{{input}} Kesopanan", "description": "A label for the partyness column" }, "loggerExportFormatList": { - "message": "List", + "message": "Senarai", "description": "Label for radio-button to pick export format" }, "loggerExportFormatTable": { - "message": "Table", + "message": "Jadual", "description": "Label for radio-button to pick export format" }, "loggerExportEncodePlain": { - "message": "Plain", + "message": "Kosong", "description": "Label for radio-button to pick export text format" }, "loggerExportEncodeMarkdown": { - "message": "Markdown", + "message": "Penurunan harga", "description": "Label for radio-button to pick export text format" }, "aboutChangelog": { @@ -840,11 +840,11 @@ "description": "English: project' wiki on GitHub" }, "aboutSupport": { - "message": "Support", + "message": "Sokongan", "description": "A link for where to get support" }, "aboutIssues": { - "message": "Issue tracker", + "message": "Pengesan masalah", "description": "Text for a link to official issue tracker" }, "aboutCode": { @@ -852,67 +852,67 @@ "description": "English: Source code (GPLv3)" }, "aboutContributors": { - "message": "Contributors", + "message": "Penyumbang", "description": "English: Contributors" }, "aboutSourceCode": { - "message": "Source code", + "message": "Kod sumber", "description": "Link text to source code repo" }, "aboutTranslations": { - "message": "Translations", + "message": "Terjemahan", "description": "Link text to translations repo" }, "aboutFilterLists": { - "message": "Filter lists", + "message": "Senarai penapis", "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { - "message": "External dependencies (GPLv3-compatible):", + "message": "Pergantungan luaran (serasi dengan GPLv3):", "description": "Shown in the About pane" }, "aboutBackupDataButton": { - "message": "Back up to file", + "message": "Sandarkan ke fail", "description": "Text for button to create a backup of all settings" }, "aboutBackupFilename": { - "message": "my-ublock-backup_{{datetime}}.txt", + "message": "my-ublock-backup_{{datetime}}.txt\n", "description": "English: my-ublock-backup_{{datetime}}.txt" }, "aboutRestoreDataButton": { - "message": "Restore from file...", + "message": "Pulihkan dari fail ...", "description": "English: Restore from file..." }, "aboutResetDataButton": { - "message": "Reset to default settings...", + "message": "Tetapkan semula ke tetapan lalai ...", "description": "English: Reset to default settings..." }, "aboutRestoreDataConfirm": { - "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", + "message": "Semua tetapan anda akan ditimpa menggunakan data yang disandarkan pada {{time}}, dan uBlock₀ akan dimulakan semula.\n\nMenimpa semua tetapan yang ada menggunakan data yang disandarkan?", "description": "Message asking user to confirm restore" }, "aboutRestoreDataError": { - "message": "The data could not be read or is invalid", + "message": "Data tidak dapat dibaca atau tidak sah", "description": "Message to display when an error occurred during restore" }, "aboutResetDataConfirm": { - "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", + "message": "Semua tetapan anda akan dikeluarkan, dan uBlock₀ akan dimulakan semula.\n\nTetapkan semula uBlock₀ ke tetapan kilang?", "description": "Message asking user to confirm reset" }, "errorCantConnectTo": { - "message": "Network error: {{msg}}", + "message": "Ralat rangkaian: {{msg}}", "description": "English: Network error: {{msg}}" }, "subscriberConfirm": { - "message": "Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}", + "message": "Tambahkan URL berikut ke senarai penapis tersuai anda?\n\nTajuk: \"{{title}}\"\nURL: {{url}}", "description": "No longer used" }, "subscribeButton": { - "message": "Subscribe", + "message": "Langgan", "description": "For the button used to subscribe to a filter list" }, "elapsedOneMinuteAgo": { - "message": "a minute ago", + "message": "seminit yang lalu", "description": "English: a minute ago" }, "elapsedManyMinutesAgo": { @@ -920,7 +920,7 @@ "description": "English: {{value}} minutes ago" }, "elapsedOneHourAgo": { - "message": "an hour ago", + "message": "satu jam yang lalu", "description": "English: an hour ago" }, "elapsedManyHoursAgo": { @@ -928,7 +928,7 @@ "description": "English: {{value}} hours ago" }, "elapsedOneDayAgo": { - "message": "a day ago", + "message": "sehari yang lalu", "description": "English: a day ago" }, "elapsedManyDaysAgo": { @@ -936,31 +936,31 @@ "description": "English: {{value}} days ago" }, "showDashboardButton": { - "message": "Show Dashboard", + "message": "Tunjukkan Papan Pemuka", "description": "Firefox/Fennec-specific: Show Dashboard" }, "showNetworkLogButton": { - "message": "Show Logger", + "message": "Tunjukkan Logger", "description": "Firefox/Fennec-specific: Show Logger" }, "fennecMenuItemBlockingOff": { - "message": "off", + "message": "mati", "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, "docblockedPrompt1": { - "message": "uBlock Origin has prevented the following page from loading:", + "message": "uBlock Origin menghalang halaman berikut memuatkan:", "description": "Used in the strict-blocking page" }, "docblockedPrompt2": { - "message": "Because of the following filter:", + "message": "Kerana penapis berikut:", "description": "Used in the strict-blocking page" }, "docblockedNoParamsPrompt": { - "message": "without parameters", + "message": "tanpa parameter", "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, "docblockedFoundIn": { - "message": "Found in:", + "message": "Dijumpai di:", "description": "English: List of filter list names follows" }, "docblockedBack": { @@ -968,11 +968,11 @@ "description": "English: Go back" }, "docblockedClose": { - "message": "Close this window", + "message": "Tutup tetingkap ini", "description": "English: Close this window" }, "docblockedProceed": { - "message": "Disable strict blocking for {{hostname}}", + "message": "Lumpuhkan sekatan ketat untuk {{hostname}}", "description": "English: Disable strict blocking for {{hostname}} ..." }, "docblockedDisableTemporary": { @@ -984,15 +984,15 @@ "description": "English: Permanently" }, "cloudPush": { - "message": "Export to cloud storage", + "message": "Eksport ke storan awan", "description": "tooltip" }, "cloudPull": { - "message": "Import from cloud storage", + "message": "Import dari storan awan", "description": "tooltip" }, "cloudPullAndMerge": { - "message": "Import from cloud storage and merge with current settings", + "message": "Import dari storan awan dan gabungkan dengan tetapan semasa", "description": "tooltip" }, "cloudNoData": { @@ -1004,7 +1004,7 @@ "description": "used as a prompt for the user to provide a custom device name" }, "advancedSettingsWarning": { - "message": "Warning! Change these advanced settings at your own risk.", + "message": "Amaran! Ubah tetapan lanjutan ini dengan risiko anda sendiri.", "description": "A warning to users at the top of 'Advanced settings' page" }, "genericSubmit": { @@ -1012,11 +1012,11 @@ "description": "for generic 'Submit' buttons" }, "genericApplyChanges": { - "message": "Apply changes", + "message": "Terapkan perubahan", "description": "for generic 'Apply changes' buttons" }, "genericRevert": { - "message": "Revert", + "message": "membalikkan", "description": "for generic 'Revert' buttons" }, "genericBytes": { @@ -1024,31 +1024,31 @@ "description": "" }, "contextMenuTemporarilyAllowLargeMediaElements": { - "message": "Temporarily allow large media elements", + "message": "Biarkan sementara elemen media besar", "description": "A context menu entry, present when large media elements have been blocked on the current site" }, "shortcutCapturePlaceholder": { - "message": "Type a shortcut", + "message": "Taipkan jalan pintas", "description": "Placeholder string for input field used to capture a keyboard shortcut" }, "genericMergeViewScrollLock": { - "message": "Toggle locked scrolling", + "message": "Togol tatal terkunci", "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane" }, "genericCopyToClipboard": { - "message": "Copy to clipboard", + "message": "Salin ke papan keratan", "description": "Label for buttons used to copy something to the clipboard" }, "toggleBlockingProfile": { - "message": "Toggle blocking profile", + "message": "Togol profil penyekat", "description": "Label for keyboard shortcut used to toggle blocking profile" }, "relaxBlockingMode": { - "message": "Relax blocking mode", + "message": "Tenang mod menyekat", "description": "Label for keyboard shortcut used to relax blocking mode (meant to replace 'Toggle blocking profile')" }, "storageUsed": { - "message": "Storage used: {{value}} {{unit}}", + "message": "Storan yang digunakan: {{value}} {{unit}}", "description": " In Setting pane, renders as (example): Storage used: 13.2 MB" }, "KB": { diff --git a/tools/make-opera.sh b/tools/make-opera.sh index 8ce392fac0cfe..a963f3d68a53b 100755 --- a/tools/make-opera.sh +++ b/tools/make-opera.sh @@ -20,7 +20,6 @@ rm -r $DES/_locales/hy rm -r $DES/_locales/ka rm -r $DES/_locales/kk rm -r $DES/_locales/mr -rm -r $DES/_locales/ta rm -r $DES/_locales/th # Removing WASM modules until I receive an answer from Opera people: Opera's From 46aab2dcc2a03d55de010d908c32cd4989c49d99 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Wed, 30 Sep 2020 10:31:22 -0400 Subject: [PATCH 05/27] Make Firefox dev build auto-update --- dist/firefox/updates.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/firefox/updates.json b/dist/firefox/updates.json index c8c5b5599b1bd..389d1968c7974 100644 --- a/dist/firefox/updates.json +++ b/dist/firefox/updates.json @@ -3,10 +3,10 @@ "uBlock0@raymondhill.net": { "updates": [ { - "version": "1.29.3.112", + "version": "1.30.1.0", "browser_specific_settings": { "gecko": { "strict_min_version": "55" } }, - "update_info_url": "https://github.com/gorhill/uBlock/releases/tag/1.29.3rc12", - "update_link": "https://github.com/gorhill/uBlock/releases/download/1.29.3rc12/uBlock0_1.29.3rc12.firefox.signed.xpi" + "update_info_url": "https://github.com/gorhill/uBlock/releases/tag/1.30.1b0", + "update_link": "https://github.com/gorhill/uBlock/releases/download/1.30.1b0/uBlock0_1.30.1b0.firefox.signed.xpi" } ] } From fba5f3d597f86e35b96caf29a73233371fe19852 Mon Sep 17 00:00:00 2001 From: jeremyperkin Date: Thu, 21 May 2020 06:35:27 -0700 Subject: [PATCH 06/27] Update default.css - Added values for dark mode - Using the photon colors and reviewing material design - Put this together. - Correct fieldset-header-ink - Removed color variables already listed. - Removal of !important and revert to some already approved colours. Signed-off-by: Raymond Hill --- src/css/themes/default.css | 105 +++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/src/css/themes/default.css b/src/css/themes/default.css index 9f271e07690ac..0424488b5a449 100644 --- a/src/css/themes/default.css +++ b/src/css/themes/default.css @@ -206,6 +206,111 @@ } :root.dark { + --default-ink: var(--light-gray-10); + --default-ink-a4: var(--light-gray-10-a4); + --default-ink-a50: var(--light-gray-30-a50); + --default-surface: var(--dark-gray-90); + --default-surface-hover: var(--dark-gray-50); + --bg-1: hsla(250, 13%, 9%, 1); + --bg-1-border: hsla(250, 13%, 16%, 1); + --bg-overlay-50: #0008; + --bg-code: hsla(0, 2%, 0%, 0.8); + --fg-0-80: hsla(0, 0%, 53%, 0.8); + --fg-0-70: hsla(0, 0%, 53%, 0.7); + --fg-0-60: hsla(0, 0%, 53%, 0.6); + --fg-0-50: hsla(0, 0%, 53%, 0.5); + --fg-0-40: hsla(0, 0%, 53%, 0.4); + --fg-0-30: hsla(0, 0%, 53%, 0.3); + --fg-0-20: hsla(0, 0%, 53%, 0.2); + --link-ink: #bb86fc; + --fieldset-header-surface: transparent; + --fieldset-header-ink: var(--light-gray-30); + --hor-separator-color: var(--dark-gray-50); + --button-surface: var(--light-gray-10-a12); + --button-ink: var(--default-ink); + --button-surface-hover: var(--light-gray-10-a12); + --button-active-surface: var(--light-gray-70); + --button-important-surface: var(--dark-gray-30); + --button-important-surface-hover: var(--light-gray-60); + --button-disabled-filter: opacity(38%); + --button-disabled-surface: var(--dark-gray-50); + --button-disabled-ink: var(--light-gray-30-a50); + --button-preferred-surface: var(--dark-gray-50); + --button-preferred-ink: var(--light-gray-70); + --checkbox-size: calc(var(--font-size) + 2px); + --checkbox-ink: var(--default-ink); + --checkbox-checked-ink: #bb86fc; + /*--select-surface:*/ + --bg-transient-notice: var(--dark-gray-50); + --dashboard-bar-shadow: 0px 0px 0px 1px var(--default-ink-a4); + --dashboard-tab-active-ink: #bb86fc; + --dashboard-tab-surface-hover: var(--default-surface-hover); + --fg-icon-info-lvl-0-dimmed: #888; + --fg-icon-info-lvl-0: inherit; + --fg-icon-info-lvl-1-dimmed: hsla(258, 57%, 35%, 1); + --fg-icon-info-lvl-1: hsla(258, 66%, 48%, 1); + --info-lvl-2-ink: var(--yellow-50); + --info-lvl-2-ink-hover: var(--yellow-60); + --fg-icon-info-lvl-3-dimmed: hsla(16, 100%, 50%, 0.5); + --fg-icon-info-lvl-3: hsla(16, 100%, 50%, 1); + --fg-icon-info-lvl-4-dimmed: hsla(0, 100%, 35%, 0.5); + --fg-icon-info-lvl-4: hsla(0, 100%, 35%, 1); + --large-icon-info-lvl-2: hsla(41, 100%, 47%, 1); + --bg-tooltip: var(--dark-gray-50); + --fg-tooltip: var(--light-gray-30); + --bg-popup-cell-1: var(--dark-gray-50); + --popup-power-ink: var(--violet-70); + --popup-power-disabled-ink: var(--light-gray-60); + --popup-power-ink-hover: var(--dark-gray-30); + --bg-popup-cell-2: var(--dark-gray-50); + --bg-popup-cell-label-filter: opacity(40%); + --fg-popup-cell-cname: hsla(0, 0%, 53%, 0.3); + --bg-popup-cell-allow: hsla(120, 40%, 75%, 1); + --bg-popup-cell-allow-own: hsla(120, 100%, 30%, 1); + --bg-popup-cell-noop: hsla(0, 0%, 75%, 1); + --bg-popup-cell-noop-own: hsla(0, 0%, 45%, 1); + --bg-popup-cell-block: hsla(0, 50%, 80%, 1); + --bg-popup-cell-block-own: hsla(0, 100%, 40%, 1); + --bg-popup-cell-label-mixed: hsla(45, 100%, 38%, 1); + --popup-icon-x-ink: #e22850; + + /* Need to set colors in forms.css for moz-field stuffz + -moz-FieldText: #888888 !important; change from these names to either HEX value or variables. default-ink + -moz-Field: #15141a !important; var would be var(--dark-gray-90) hex value might be easiest though. + /* TO DO + 1. Epicker window box color Variables needed; + #ublock0-epicker aside + background-color: var(--dark-gray-90) + outer border: var(--dark-gray-90) + inner order: var ( + color: #999999a0 + html#ublock0-epicker, #ublock0-epicker body + background: transparent !important; + color: #777 !important; + + 2. CodeMirror (my filters and Whitelist) ADVANCED SETTINGS (background and color need variables) + .CodeMirror background: (currenty set to white) need a var + my Rules tab + codemirror panes CodeMirror-merge-pane CodeMirror-merge-left + CodeMirror-merge-pane CodeMirror-merge-editor CodeMirror-merge-pane-rightmost + ***** file used is codemirror.css ********* + + 3. #cloudWidget background (linked to img) background is hsl - would be better if we had a background color instead of hsl. + ***** file used is cloud-ui.css ******** + 4. Logger UI screen. .permatoolbar, modalOverlayContainer : background-color; + headers background-color, color border-color + #netFilteringDialog > div.panes > .dynamic .entry background-color: border-bottom: ; + #netFilteringDialog > div.panes > .dynamic .entry > .action > .allow .noop .block + background-color. + #modalOverlayClose stoke: background-color + ****** file used is logger-ui.css ******* + *//* + 5. Seperator bar - element/selector is hr in common.css a variable is assigned. popup-fenix.css + border-top - assigned HEX of #e3e2e3 variable should be assinged like in common.css + var(--hor-separator-color) + 6. .rulesetTools border color needs a variable + **** popup-fenix.css ***** +*/ } :root.dark.colorBlind { From 303240c713a3a3222defd8108377c899d8570c69 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Thu, 1 Oct 2020 10:09:59 -0400 Subject: [PATCH 07/27] Minor changes to dark theme A whole lot more work needed across all of uBO's user interface. --- src/css/codemirror.css | 3 +++ src/css/popup-fenix.css | 3 ++- src/css/themes/default.css | 4 +++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/css/codemirror.css b/src/css/codemirror.css index 7e95eb5ce5e8d..9c5f184c2e947 100644 --- a/src/css/codemirror.css +++ b/src/css/codemirror.css @@ -5,7 +5,9 @@ position: relative; } .CodeMirror { + background-color: var(--default-surface); box-sizing: border-box; + color: var(--default-ink); flex-grow: 1; height: 100%; width: 100%; @@ -23,6 +25,7 @@ } /* CodeMirror theme overrides */ +.cm-s-default .cm-variable { color: var(--sf-variable-ink); } .cm-s-default .cm-value { color: #930; } .cm-s-default .cm-comment { color: var(--sf-comment-ink); } .cm-s-default .cm-keyword { color: #90b; } diff --git a/src/css/popup-fenix.css b/src/css/popup-fenix.css index cd0762f593a1e..20452d82a172b 100644 --- a/src/css/popup-fenix.css +++ b/src/css/popup-fenix.css @@ -24,7 +24,8 @@ opacity: 0; } a { - color: inherit; + color: var(--default-ink); + fill: var(--default-ink); text-decoration: none; } :focus { diff --git a/src/css/themes/default.css b/src/css/themes/default.css index 0424488b5a449..ba01adb7ab311 100644 --- a/src/css/themes/default.css +++ b/src/css/themes/default.css @@ -161,8 +161,11 @@ --popup-icon-x-ink: var(--red-60); /* syntax highlight: static filtering */ + --sf-variable-ink: var(--default-ink); --sf-comment-ink: var(--light-gray-90); --sf-warning-ink: var(--yellow-50); + + /* syntax highlight: dynamic filtering */ } /** @@ -259,7 +262,6 @@ --bg-tooltip: var(--dark-gray-50); --fg-tooltip: var(--light-gray-30); --bg-popup-cell-1: var(--dark-gray-50); - --popup-power-ink: var(--violet-70); --popup-power-disabled-ink: var(--light-gray-60); --popup-power-ink-hover: var(--dark-gray-30); --bg-popup-cell-2: var(--dark-gray-50); From dc675de50d309903f1f08adee74a8ebbeb6d1457 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Thu, 1 Oct 2020 10:12:31 -0400 Subject: [PATCH 08/27] New revision for dev build --- dist/version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/version b/dist/version index bd5326fa9e808..350bbe03b02bd 100644 --- a/dist/version +++ b/dist/version @@ -1 +1 @@ -1.30.1.0 +1.30.1.1 From e210eae4aa9f1b0fa15ef9b41310193678db3862 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Thu, 1 Oct 2020 12:20:39 -0400 Subject: [PATCH 09/27] Make Firefox dev build auto-update --- dist/firefox/updates.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/firefox/updates.json b/dist/firefox/updates.json index 389d1968c7974..9ac2dc369d25c 100644 --- a/dist/firefox/updates.json +++ b/dist/firefox/updates.json @@ -3,10 +3,10 @@ "uBlock0@raymondhill.net": { "updates": [ { - "version": "1.30.1.0", + "version": "1.30.1.1", "browser_specific_settings": { "gecko": { "strict_min_version": "55" } }, - "update_info_url": "https://github.com/gorhill/uBlock/releases/tag/1.30.1b0", - "update_link": "https://github.com/gorhill/uBlock/releases/download/1.30.1b0/uBlock0_1.30.1b0.firefox.signed.xpi" + "update_info_url": "https://github.com/gorhill/uBlock/releases/tag/1.30.1b1", + "update_link": "https://github.com/gorhill/uBlock/releases/download/1.30.1b1/uBlock0_1.30.1b1.firefox.signed.xpi" } ] } From bafbb7d62c31e490d8aff97ddd6d3cc1887d8c1a Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Fri, 2 Oct 2020 10:42:38 -0400 Subject: [PATCH 10/27] Remove reference to resources.txt --- tools/make-assets.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/make-assets.sh b/tools/make-assets.sh index 515550d9a7e61..b301d5b8f213f 100755 --- a/tools/make-assets.sh +++ b/tools/make-assets.sh @@ -25,6 +25,5 @@ mkdir $DES/ublock cp -R ../uAssets/filters/* $DES/ublock/ # Optional filter lists: do not include in package rm $DES/ublock/annoyances.txt -rm $DES/ublock/resources.txt echo "done." From db0d200fcb507a7b06a0845a13ab53099a40ef36 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Fri, 2 Oct 2020 12:16:47 -0400 Subject: [PATCH 11/27] Allow call to removeCSS in Chromium Related discussion: - https://github.com/gorhill/uBlock/issues/3588#issuecomment-702218677 --- platform/chromium/vapi-background.js | 8 +++----- platform/chromium/webext.js | 1 + 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/platform/chromium/vapi-background.js b/platform/chromium/vapi-background.js index 03b19f137c00a..2f47248bba25c 100644 --- a/platform/chromium/vapi-background.js +++ b/platform/chromium/vapi-background.js @@ -1027,11 +1027,9 @@ vAPI.messaging = { details.code = cssText; promises.push(vAPI.tabs.insertCSS(tabId, details)); } - if ( typeof webext.tabs.removeCSS === 'function' ) { - for ( const cssText of msg.remove ) { - details.code = cssText; - promises.push(vAPI.tabs.removeCSS(tabId, details)); - } + for ( const cssText of msg.remove ) { + details.code = cssText; + promises.push(vAPI.tabs.removeCSS(tabId, details)); } Promise.all(promises).then(( ) => { callback(); diff --git a/platform/chromium/webext.js b/platform/chromium/webext.js index fb391c0ecfa63..db7e7d4f9f21a 100644 --- a/platform/chromium/webext.js +++ b/platform/chromium/webext.js @@ -93,6 +93,7 @@ const webext = { get: promisifyNoFail(chrome.tabs, 'get', tab => tab instanceof Object ? tab : null), executeScript: promisifyNoFail(chrome.tabs, 'executeScript'), insertCSS: promisifyNoFail(chrome.tabs, 'insertCSS'), + removeCSS: promisifyNoFail(chrome.tabs, 'removeCSS'), query: promisifyNoFail(chrome.tabs, 'query', tabs => Array.isArray(tabs) ? tabs : []), reload: promisifyNoFail(chrome.tabs, 'reload'), remove: promisifyNoFail(chrome.tabs, 'remove'), From 266a170bebd40e1ed559832fa9329453b155aa5d Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Fri, 2 Oct 2020 12:18:13 -0400 Subject: [PATCH 12/27] Add more CSS variables in preparation of dark mode support Related issue: - https://github.com/uBlockOrigin/uBlock-issues/issues/401 --- src/css/codemirror.css | 81 ++++++++++++++++++++++++-------------- src/css/themes/default.css | 26 +++++++++++- 2 files changed, 77 insertions(+), 30 deletions(-) diff --git a/src/css/codemirror.css b/src/css/codemirror.css index 9c5f184c2e947..8a9b9453fd699 100644 --- a/src/css/codemirror.css +++ b/src/css/codemirror.css @@ -12,6 +12,13 @@ height: 100%; width: 100%; } +.CodeMirror-gutters { + background-color: var(--cm-gutter-surface); + border-color: var(--cm-gutter-border); + } +.CodeMirror-linenumber { + color: var(--cm-gutter-ink); + } /* For when panels are used */ .codeMirrorContainer > div:not([class^="CodeMirror"]) { @@ -25,27 +32,23 @@ } /* CodeMirror theme overrides */ -.cm-s-default .cm-variable { color: var(--sf-variable-ink); } -.cm-s-default .cm-value { color: #930; } -.cm-s-default .cm-comment { color: var(--sf-comment-ink); } -.cm-s-default .cm-keyword { color: #90b; } -.cm-s-default .cm-regex { - text-underline-position: under; - text-decoration-color: darkgray; - text-decoration-style: solid; - text-decoration-line: underline; +.cm-s-default .cm-comment { + color: var(--sf-comment-ink); + } +.cm-s-default .cm-def { + color: var(--sf-def-ink); + } +.cm-s-default .cm-directive { + color: var(--sf-directive-ink); + font-weight: bold; } .cm-s-default .cm-error { color: inherit; } .cm-s-default .cm-error, .CodeMirror-linebackground.error { - background-color: #ff000016; - text-decoration: underline red; - text-underline-position: under; - } -.cm-s-default .cm-warning { - text-decoration: underline var(--sf-warning-ink); + background-color: var(--sf-error-surface); + text-decoration: underline var(--sf-error-ink); text-underline-position: under; } .cm-s-default .cm-link { @@ -54,28 +57,42 @@ .cm-s-default .cm-link:hover { color: var(--link-ink); } - -.cm-directive { color: #333; font-weight: bold; } -.cm-staticext { color: #008; } -.cm-staticnetBlock { color: #800; } -.cm-staticnetAllow { color: #004f00; } -.cm-staticOpt { background-color: #ddd; font-weight: bold; } +.cm-s-default .cm-keyword { + color: var(--sf-keyword-ink); + } +.cm-s-default .cm-regex { + text-underline-position: under; + text-decoration-color: var(--sf-regex-ink); + text-decoration-style: solid; + text-decoration-line: underline; + } +.cm-s-default .cm-tag { + color: var(--sf-tag-ink); + } +.cm-s-default .cm-value { color: var(--sf-value-ink); } +.cm-s-default .cm-variable { + color: var(--sf-variable-ink); + } +.cm-s-default .cm-warning { + text-decoration: underline var(--sf-warning-ink); + text-underline-position: under; + } /* Rules */ .cm-s-default .cm-allowrule { - color: green; + color: var(--df-allow-ink); font-weight: bold; } .cm-s-default .cm-blockrule { - color: red; + color: var(--df-block-ink); font-weight: bold; } .cm-s-default .cm-nooprule { - color: darkslategray; + color: var(--df-noop-ink); font-weight: bold; } .cm-s-default .cm-sortkey { - color: #708; + color: var(--sf-keyword-ink); } div.CodeMirror span.CodeMirror-matchingbracket { @@ -89,7 +106,8 @@ div.CodeMirror span.CodeMirror-matchingbracket { .cm-search-widget { align-items: center; - background-color: var(--bg-code); + background-color: var(--cm-gutter-surface); + border-bottom: 1px solid var(--cm-gutter-border); cursor: default; direction: ltr; display: flex; @@ -106,14 +124,14 @@ div.CodeMirror span.CodeMirror-matchingbracket { flex-grow: 1; } .cm-search-widget .fa-icon { - fill: #888; + fill: var(--cm-gutter-ink); font-size: 140%; } .cm-search-widget .fa-icon:not(.fa-icon-ro):hover { fill: #000; } .cm-search-widget-input input { - border: 1px solid gray; + border: 1px solid var(--cm-gutter-ink); display: inline-flex; flex-grow: 1; max-width: 16em; @@ -139,6 +157,9 @@ div.CodeMirror span.CodeMirror-matchingbracket { border: 1px dotted black; } +.CodeMirror-merge { + border-color: var(--cm-gutter-border); + } .CodeMirror-merge-l-deleted { background-image: none; } @@ -147,10 +168,12 @@ div.CodeMirror span.CodeMirror-matchingbracket { } /* This probably needs to be added to CodeMirror repo */ .CodeMirror-merge-gap { + background-color: var(--cm-gutter-surface); + border-color: var(--cm-gutter-border); vertical-align: top; } .CodeMirror-merge-spacer { - background-color: var(--bg-code); + background-color: var(--cm-gutter-surface); } .CodeMirror-hints { diff --git a/src/css/themes/default.css b/src/css/themes/default.css index ba01adb7ab311..eafa247bfbf61 100644 --- a/src/css/themes/default.css +++ b/src/css/themes/default.css @@ -12,9 +12,12 @@ */ :root { --blue-10: #80ebff; + --blue-40: #0090ed; --blue-50: #0060df; --blue-60: #0250bb; + --dark-gray-10: #52525e; --dark-gray-30: #42414d; + --dark-gray-40: #3a3944; --dark-gray-50: #32313c; --dark-gray-80: #1c1b22; --dark-gray-90: #15141a; @@ -29,13 +32,17 @@ --light-gray-10-a12: #f9f9fb1f; --light-gray-10-a16: #f9f9fb29; --light-gray-20: #f0f0f4; + --light-gray-25: #e8e8ed; --light-gray-30: #e0e0e6; --light-gray-30-a50: #e0e0e680; --light-gray-40: #cfcfd8; --light-gray-50: #bfbfc9; --light-gray-60: #afafba; --light-gray-70: #9f9fad; + --light-gray-80: #8f8f9e; --light-gray-90: #80808f; + --orange-80: #9e280b; + --purple-60: #952bb9; --red-60: #e22850; --violet-40: #ab71ff; --violet-60: #7542e5; @@ -160,12 +167,29 @@ --bg-popup-cell-label-mixed: hsla(45, 100%, 38%, 1); --popup-icon-x-ink: var(--red-60); + /* codemirror */ + --cm-gutter-border: var(--light-gray-40); + --cm-gutter-ink: var(--light-gray-90); + --cm-gutter-surface: var(--light-gray-25); + /* syntax highlight: static filtering */ - --sf-variable-ink: var(--default-ink); --sf-comment-ink: var(--light-gray-90); + --sf-def-ink: #0000ff; + --sf-directive-ink: var(--dark-gray-40); + --sf-error-ink: #ff0000; + --sf-error-surface: #ff000016; + --sf-keyword-ink: var(--purple-60); + --sf-regex-ink: var(--light-gray-60); + --sf-tag-ink: #117700; + --sf-value-ink: var(--orange-80); + --sf-variable-ink: var(--default-ink); --sf-warning-ink: var(--yellow-50); /* syntax highlight: dynamic filtering */ + --df-allow-ink: #117700; + --df-block-ink: #ff0000; + --df-noop-ink: var(--dark-gray-10); + --df-key-ink: var(--violet-70); } /** From 002d1ece0dcc656bdee3fe60949766295cdf36dd Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Fri, 2 Oct 2020 12:19:37 -0400 Subject: [PATCH 13/27] New revision for dev build --- dist/version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/version b/dist/version index 350bbe03b02bd..5ca7f21941a8b 100644 --- a/dist/version +++ b/dist/version @@ -1 +1 @@ -1.30.1.1 +1.30.1.2 From 75c58ec7af969141296371aca2b91bea9ae91a6a Mon Sep 17 00:00:00 2001 From: pixeltris <6952411+pixeltris@users.noreply.github.com> Date: Fri, 2 Oct 2020 17:20:30 +0100 Subject: [PATCH 14/27] Update for twitch.tv #5184 (#3781) --- assets/resources/scriptlets.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/resources/scriptlets.js b/assets/resources/scriptlets.js index 0ea02c43bb66e..9901d3f64a373 100644 --- a/assets/resources/scriptlets.js +++ b/assets/resources/scriptlets.js @@ -1326,7 +1326,7 @@ })(); -// https://github.com/uBlockOrigin/uAssets/pull/3517 +// https://github.com/uBlockOrigin/uAssets/issues/5184 /// twitch-videoad.js (function() { if ( /(^|\.)twitch\.tv$/.test(document.location.hostname) === false ) { return; } @@ -1334,7 +1334,7 @@ window.fetch = function(input) { if ( arguments.length >= 2 && typeof input === 'string' && input.includes('/access_token') ) { var url = new URL(arguments[0]); - url.searchParams.set('platform', '_'); + url.searchParams.delete('platform'); arguments[0] = url.href; } return realFetch.apply(this, arguments); From 0b37a02e00e16e19f364ad87e347ee78b2ae555c Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Fri, 2 Oct 2020 12:46:05 -0400 Subject: [PATCH 15/27] Make Firefox dev build auto-update --- dist/firefox/updates.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/firefox/updates.json b/dist/firefox/updates.json index 9ac2dc369d25c..cc13c98bbfaa1 100644 --- a/dist/firefox/updates.json +++ b/dist/firefox/updates.json @@ -3,10 +3,10 @@ "uBlock0@raymondhill.net": { "updates": [ { - "version": "1.30.1.1", + "version": "1.30.1.2", "browser_specific_settings": { "gecko": { "strict_min_version": "55" } }, - "update_info_url": "https://github.com/gorhill/uBlock/releases/tag/1.30.1b1", - "update_link": "https://github.com/gorhill/uBlock/releases/download/1.30.1b1/uBlock0_1.30.1b1.firefox.signed.xpi" + "update_info_url": "https://github.com/gorhill/uBlock/releases/tag/1.30.1b2", + "update_link": "https://github.com/gorhill/uBlock/releases/download/1.30.1b2/uBlock0_1.30.1b2.firefox.signed.xpi" } ] } From b179dc026816f72cccef60791d0a5f43320d8816 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Sat, 3 Oct 2020 06:00:48 -0400 Subject: [PATCH 16/27] Add more CSS variables for theming Related issue: - https://github.com/uBlockOrigin/uBlock-issues/issues/401 --- src/css/cloud-ui.css | 2 +- src/css/common.css | 2 +- src/css/epicker-ui.css | 8 ++++---- src/css/popup-fenix.css | 2 +- src/css/themes/default.css | 11 ++++++++--- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/css/cloud-ui.css b/src/css/cloud-ui.css index 02d28001dab0e..4944fda03cfcd 100644 --- a/src/css/cloud-ui.css +++ b/src/css/cloud-ui.css @@ -1,5 +1,5 @@ #cloudWidget { - background: url("../img/cloud.png") hsl(216, 100%, 93%); + background-color: var(--cloud-widget-surface); margin: 0.5em 0; min-width: max-content; position: relative; diff --git a/src/css/common.css b/src/css/common.css index b91fa15f42bd7..a2af2f934cf47 100644 --- a/src/css/common.css +++ b/src/css/common.css @@ -79,7 +79,7 @@ code, .code { } hr { border: 0; - border-top: 1px solid var(--hor-separator-color); + border-top: 1px solid var(--hr-ink); margin: 1em 0; } textarea { diff --git a/src/css/epicker-ui.css b/src/css/epicker-ui.css index f62f6d2bcc121..efe685f76620b 100644 --- a/src/css/epicker-ui.css +++ b/src/css/epicker-ui.css @@ -1,7 +1,7 @@ html#ublock0-epicker, #ublock0-epicker body { background: transparent; - color: black; + color: var(--default-ink); cursor: not-allowed; font: 12px sans-serif; height: 100vh; @@ -86,10 +86,10 @@ html#ublock0-epicker, border-color: red; } #ublock0-epicker section textarea { - background-color: #fff; + background-color: var(--default-surface); border: none; box-sizing: border-box; - color: #000; + color: var(--default-ink); font: 11px monospace; height: 8em; margin: 0; @@ -225,7 +225,7 @@ html#ublock0-epicker, border: 1px dotted var(--blue-50); } #ublock0-epicker #candidateFilters .changeFilter li:hover { - background-color: white; + background-color: var(--default-surface-hover); } /** diff --git a/src/css/popup-fenix.css b/src/css/popup-fenix.css index 20452d82a172b..15d9cbbd01a64 100644 --- a/src/css/popup-fenix.css +++ b/src/css/popup-fenix.css @@ -49,7 +49,7 @@ a { } hr { border: 0; - border-top: 1px solid #e3e2e3; + border-top: 1px solid var(--hr-ink); margin: 0; padding: 0; } diff --git a/src/css/themes/default.css b/src/css/themes/default.css index eafa247bfbf61..c0eb567895c23 100644 --- a/src/css/themes/default.css +++ b/src/css/themes/default.css @@ -19,6 +19,7 @@ --dark-gray-30: #42414d; --dark-gray-40: #3a3944; --dark-gray-50: #32313c; + --dark-gray-70: #23222b; --dark-gray-80: #1c1b22; --dark-gray-90: #15141a; --ink-20: #312a65; @@ -100,8 +101,6 @@ --fieldset-header-surface: transparent; --fieldset-header-ink: var(--ink-20); - --hor-separator-color: var(--light-gray-30); - --button-surface: var(--light-gray-30); --button-ink: var(--ink-20); --button-surface-hover: var(--light-gray-40); @@ -167,6 +166,12 @@ --bg-popup-cell-label-mixed: hsla(45, 100%, 38%, 1); --popup-icon-x-ink: var(--red-60); + /* horizontal line separator */ + --hr-ink: var(--light-gray-30); + + /* cloud widget */ + --cloud-widget-surface: var(--light-gray-20); + /* codemirror */ --cm-gutter-border: var(--light-gray-40); --cm-gutter-ink: var(--light-gray-90); @@ -252,7 +257,7 @@ --link-ink: #bb86fc; --fieldset-header-surface: transparent; --fieldset-header-ink: var(--light-gray-30); - --hor-separator-color: var(--dark-gray-50); + --hr-ink: var(--dark-gray-50); --button-surface: var(--light-gray-10-a12); --button-ink: var(--default-ink); --button-surface-hover: var(--light-gray-10-a12); From e3a6d8465f19f4ef5d84ceddb9570644cf4fc0a3 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Sat, 3 Oct 2020 07:13:40 -0400 Subject: [PATCH 17/27] Add advanced setting to force a light/dark theme Related feedback: - https://github.com/uBlockOrigin/uBlock-issues/issues/401#issuecomment-703075797 Name: `uiTheme` Default: `unset` Values: - `unset`: uBO will pick the theme according to browser's `prefers-color-scheme` - `light`: force light scheme - `dark`: force dark theme This advanced setting is not to be documented yet as it has not been decided this is a long term solution. --- src/css/logger-ui-inspector.css | 4 ++-- src/css/logger-ui.css | 16 ++++++++-------- src/js/background.js | 1 + src/js/messaging.js | 5 ++++- src/js/udom.js | 23 ++++++++++++++++------- 5 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/css/logger-ui-inspector.css b/src/css/logger-ui-inspector.css index e7d45e2868e36..acfd5c5638c4d 100644 --- a/src/css/logger-ui-inspector.css +++ b/src/css/logger-ui-inspector.css @@ -14,7 +14,7 @@ padding-left: 0.5em; } #domInspector ul { - background-color: #fff; + background-color: var(--default-surface); margin: 0; padding-left: 1em; } @@ -37,7 +37,7 @@ color: #aaa; } #domInspector li > span:first-child { - color: #000; + color: var(--default-ink); cursor: default; font-size: 1rem; margin-right: 0; diff --git a/src/css/logger-ui.css b/src/css/logger-ui.css index ee158c579e653..b85edceba1b70 100644 --- a/src/css/logger-ui.css +++ b/src/css/logger-ui.css @@ -12,7 +12,7 @@ textarea { width: 100%; } .permatoolbar { - background-color: white; + background-color: var(--default-surface); border: 0; box-sizing: border-box; display: flex; @@ -34,7 +34,7 @@ textarea { fill: #5F9EA0; } .permatoolbar .button:hover { - background-color: #eee; + background-color: var(--default-surface-hover); } #pageSelector { min-width: 10em; @@ -135,7 +135,7 @@ body[dir="rtl"] #pageSelector { transform: scaleY(1); } #netInspector #filterExprPicker { - background-color: white; + background-color: var(--default-surface); border: 1px solid gray; display: none; position: absolute; @@ -445,7 +445,7 @@ body.colorBlind #netFilteringDialog > .panes > .details > div[data-status="2"] b } #popupContainer { - background: white; + background-color: var(--default-surface); border: 1px solid gray; bottom: 0; display: none; @@ -481,7 +481,7 @@ body.colorBlind #netFilteringDialog > .panes > .details > div[data-status="2"] b position: relative; } #modalOverlay > div > div:nth-of-type(1) { - background-color: white; + background-color: var(--default-surface); border: 0; box-sizing: border-box; padding: 1em; @@ -490,13 +490,13 @@ body.colorBlind #netFilteringDialog > .panes > .details > div[data-status="2"] b width: 90vw; } #modalOverlay > div > div:nth-of-type(2) { - stroke: #000; + stroke: var(--default-ink); stroke-width: 3px; position: absolute; width: 1.6em; height: 1.6em; bottom: calc(100% + 2px); - background-color: white; + background-color: var(--default-surface); } body[dir="ltr"] #modalOverlay > div > div:nth-of-type(2) { right: 0; @@ -505,7 +505,7 @@ body[dir="rtl"] #modalOverlay > div > div:nth-of-type(2) { left: 0; } #modalOverlay > div > div:nth-of-type(2):hover { - background-color: #eee; + background-color: var(--default-surface-hover); } #modalOverlay > div > div:nth-of-type(2) > * { pointer-events: none; diff --git a/src/js/background.js b/src/js/background.js index 2ff449f7a40f2..a9990b90f492c 100644 --- a/src/js/background.js +++ b/src/js/background.js @@ -77,6 +77,7 @@ const µBlock = (( ) => { // jshint ignore:line uiPopupConfig: 'undocumented', uiFlavor: 'unset', uiStyles: 'unset', + uiTheme: 'unset', updateAssetBypassBrowserCache: false, userResourcesLocation: 'unset', }; diff --git a/src/js/messaging.js b/src/js/messaging.js index e6f6230283978..0b541caf50a0b 100644 --- a/src/js/messaging.js +++ b/src/js/messaging.js @@ -160,7 +160,10 @@ const onMessage = function(request, sender, callback) { break; case 'uiStyles': - response = µb.hiddenSettings.uiStyles; + response = { + uiStyles: µb.hiddenSettings.uiStyles, + uiTheme: µb.hiddenSettings.uiTheme, + }; break; case 'userSettings': diff --git a/src/js/udom.js b/src/js/udom.js index cd032fb0c8edf..baf78a6b4d1b1 100644 --- a/src/js/udom.js +++ b/src/js/udom.js @@ -93,6 +93,22 @@ DOMListFactory.nodeFromSelector = function(selector) { /******************************************************************************/ { + // https://github.com/uBlockOrigin/uBlock-issues/issues/1044 + // Offer the possibility to bypass uBO's default styling + vAPI.messaging.send('uDom', { what: 'uiStyles' }).then(response => { + if ( typeof response !== 'object' || response === null ) { return; } + if ( response.uiTheme !== 'unset' ) { + if ( response.uiTheme === 'light' ) { + root.classList.remove('dark'); + } else if ( response.uiTheme === 'dark' ) { + root.classList.add('dark'); + } + } + if ( response.uiStyles !== 'unset' ) { + document.body.style.cssText = response; + } + }); + const root = DOMListFactory.root = document.querySelector(':root'); if ( vAPI.webextFlavor.soup.has('mobile') ) { root.classList.add('mobile'); @@ -105,13 +121,6 @@ DOMListFactory.nodeFromSelector = function(selector) { if ( window.matchMedia('(prefers-color-scheme: dark)').matches ) { root.classList.add('dark'); } - - // https://github.com/uBlockOrigin/uBlock-issues/issues/1044 - // Offer the possibility to bypass uBO's default styling - vAPI.messaging.send('uDom', { what: 'uiStyles' }).then(response => { - if ( typeof response !== 'string' || response === 'unset' ) { return; } - document.body.style.cssText = response; - }); } /******************************************************************************/ From 1ff622e8bebe5b1af9a2f79096a96dddf219a9d2 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Sat, 3 Oct 2020 07:20:11 -0400 Subject: [PATCH 18/27] New revision for dev build --- dist/version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/version b/dist/version index 5ca7f21941a8b..1a8ecaab17ece 100644 --- a/dist/version +++ b/dist/version @@ -1 +1 @@ -1.30.1.2 +1.30.1.3 From 01de814483a06837cefa058a0841a0a303d448c6 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Sat, 3 Oct 2020 08:00:48 -0400 Subject: [PATCH 19/27] Make Firefox dev build auto-update --- dist/firefox/updates.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/firefox/updates.json b/dist/firefox/updates.json index cc13c98bbfaa1..50db440d9309c 100644 --- a/dist/firefox/updates.json +++ b/dist/firefox/updates.json @@ -3,10 +3,10 @@ "uBlock0@raymondhill.net": { "updates": [ { - "version": "1.30.1.2", + "version": "1.30.1.3", "browser_specific_settings": { "gecko": { "strict_min_version": "55" } }, - "update_info_url": "https://github.com/gorhill/uBlock/releases/tag/1.30.1b2", - "update_link": "https://github.com/gorhill/uBlock/releases/download/1.30.1b2/uBlock0_1.30.1b2.firefox.signed.xpi" + "update_info_url": "https://github.com/gorhill/uBlock/releases/tag/1.30.1b3", + "update_link": "https://github.com/gorhill/uBlock/releases/download/1.30.1b3/uBlock0_1.30.1b3.firefox.signed.xpi" } ] } From f4aebc93904ace45675386ec18f04c7ad7b3d922 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Sat, 3 Oct 2020 12:34:21 -0400 Subject: [PATCH 20/27] Backup/restore only modified advanced settings This reduces the size of the backup file and also ensures that default values can be changed. --- src/js/messaging.js | 16 ++++++++++++++-- src/js/storage.js | 12 ++++++++---- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/js/messaging.js b/src/js/messaging.js index 0b541caf50a0b..d6327e6a86c3b 100644 --- a/src/js/messaging.js +++ b/src/js/messaging.js @@ -886,7 +886,7 @@ const backupUserData = async function() { version: vAPI.app.version, userSettings: µb.userSettings, selectedFilterLists: µb.selectedFilterLists, - hiddenSettings: µb.hiddenSettings, + hiddenSettings: µb.getModifiedHiddenSettings(), whitelist: µb.arrayFromWhitelist(µb.netWhitelist), // String representation eventually to be deprecated netWhitelist: µb.stringFromWhitelist(µb.netWhitelist), @@ -927,12 +927,24 @@ const restoreUserData = async function(request) { // Restore user data vAPI.storage.set(userData.userSettings); + + // Restore advanced settings. let hiddenSettings = userData.hiddenSettings; if ( hiddenSettings instanceof Object === false ) { hiddenSettings = µBlock.hiddenSettingsFromString( userData.hiddenSettingsString || '' ); } + // Discard unknown setting or setting with default value. + for ( const key in hiddenSettings ) { + if ( + this.hiddenSettingsDefault.hasOwnProperty(key) === false || + hiddenSettings[key] === this.hiddenSettingsDefault[key] + ) { + delete hiddenSettings[key]; + } + } + // Whitelist directives can be represented as an array or as a // (eventually to be deprecated) string. let whitelist = userData.whitelist; @@ -944,7 +956,7 @@ const restoreUserData = async function(request) { whitelist = userData.netWhitelist.split('\n'); } vAPI.storage.set({ - hiddenSettings: hiddenSettings, + hiddenSettings, netWhitelist: whitelist || [], dynamicFilteringString: userData.dynamicFilteringString || '', urlFilteringString: userData.urlFilteringString || '', diff --git a/src/js/storage.js b/src/js/storage.js index 75921f92d7fef..79ea86051e49e 100644 --- a/src/js/storage.js +++ b/src/js/storage.js @@ -119,17 +119,21 @@ // This way the new default values in the future will properly apply for those // which were not modified by the user. -µBlock.saveHiddenSettings = function() { - const bin = { hiddenSettings: {} }; +µBlock.getModifiedHiddenSettings = function() { + const out = {}; for ( const prop in this.hiddenSettings ) { if ( this.hiddenSettings.hasOwnProperty(prop) && this.hiddenSettings[prop] !== this.hiddenSettingsDefault[prop] ) { - bin.hiddenSettings[prop] = this.hiddenSettings[prop]; + out[prop] = this.hiddenSettings[prop]; } } - vAPI.storage.set(bin); + return out; +}; + +µBlock.saveHiddenSettings = function() { + vAPI.storage.set({ hiddenSettings: this.getModifiedHiddenSettings() }); }; self.addEventListener('hiddenSettingsChanged', ( ) => { From d97c46ffd3eb9ae1be4cc9dcf22b49abbd14ab1d Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Mon, 5 Oct 2020 09:13:07 -0400 Subject: [PATCH 21/27] Use a user stylesheet to implement the collapsing of placeholders Related issue: - https://github.com/gorhill/uBlock/issues/2848 --- src/js/contentscript.js | 69 ++++++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 28 deletions(-) diff --git a/src/js/contentscript.js b/src/js/contentscript.js index 7d97c5ccb5c3b..8660d811cf354 100644 --- a/src/js/contentscript.js +++ b/src/js/contentscript.js @@ -1124,21 +1124,26 @@ vAPI.injectScriptlet = function(doc, text) { const messaging = vAPI.messaging; const toCollapse = new Map(); const src1stProps = { + audio: 'currentSrc', embed: 'src', iframe: 'src', - img: 'src', - object: 'data' + img: 'currentSrc', + object: 'data', + video: 'currentSrc', }; const src2ndProps = { - img: 'srcset' + audio: 'src', + img: 'src', + video: 'src', }; const tagToTypeMap = { + audio: 'media', embed: 'object', iframe: 'sub_frame', img: 'image', - object: 'object' + object: 'object', + video: 'media', }; - let resquestIdGenerator = 1, processTimer, cachedBlockedSet, @@ -1154,6 +1159,21 @@ vAPI.injectScriptlet = function(doc, text) { cachedBlockedSetTimer = undefined; }; + // https://github.com/chrisaljoudi/uBlock/issues/399 + // https://github.com/gorhill/uBlock/issues/2848 + // Use a user stylesheet to collapse placeholders. + const getCollapseToken = ( ) => { + if ( collapseToken === undefined ) { + collapseToken = vAPI.randomToken(); + vAPI.userStylesheet.add( + `[${collapseToken}]\ndisplay:none!important;}`, + true + ); + } + return collapseToken; + }; + let collapseToken; + // https://github.com/chrisaljoudi/uBlock/issues/174 // Do not remove fragment from src URL const onProcessed = function(response) { @@ -1165,6 +1185,7 @@ vAPI.injectScriptlet = function(doc, text) { const targets = toCollapse.get(response.id); if ( targets === undefined ) { return; } + toCollapse.delete(response.id); if ( cachedBlockedSetHash !== response.hash ) { cachedBlockedSet = new Set(response.blockedResources); @@ -1177,8 +1198,8 @@ vAPI.injectScriptlet = function(doc, text) { if ( cachedBlockedSet === undefined || cachedBlockedSet.size === 0 ) { return; } + const selectors = []; - const iframeLoadEventPatch = vAPI.iframeLoadEventPatch; let netSelectorCacheCountMax = response.netSelectorCacheCountMax; for ( const target of targets ) { @@ -1195,32 +1216,24 @@ vAPI.injectScriptlet = function(doc, text) { if ( cachedBlockedSet.has(tagToTypeMap[tag] + ' ' + src) === false ) { continue; } - // https://github.com/chrisaljoudi/uBlock/issues/399 - // Never remove elements from the DOM, just hide them - target.style.setProperty('display', 'none', 'important'); - target.hidden = true; + target.setAttribute(getCollapseToken(), ''); // https://github.com/chrisaljoudi/uBlock/issues/1048 - // Use attribute to construct CSS rule - if ( netSelectorCacheCount <= netSelectorCacheCountMax ) { - const value = target.getAttribute(prop); - if ( value ) { - selectors.push(`${tag}[${prop}="${CSS.escape(value)}"]`); - netSelectorCacheCount += 1; - } - } - if ( iframeLoadEventPatch !== undefined ) { - iframeLoadEventPatch(target); + // Use attribute to construct CSS rule + if ( netSelectorCacheCount > netSelectorCacheCountMax ) { continue; } + const value = target.getAttribute(prop); + if ( value ) { + selectors.push(`${tag}[${prop}="${CSS.escape(value)}"]`); + netSelectorCacheCount += 1; } } - if ( selectors.length !== 0 ) { - messaging.send('contentscript', { - what: 'cosmeticFiltersInjected', - type: 'net', - hostname: window.location.hostname, - selectors, - }); - } + if ( selectors.length === 0 ) { return; } + messaging.send('contentscript', { + what: 'cosmeticFiltersInjected', + type: 'net', + hostname: window.location.hostname, + selectors, + }); }; const send = function() { From a2f194f67a86cbe5599093e8ab54a932375add02 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Mon, 5 Oct 2020 09:14:28 -0400 Subject: [PATCH 22/27] New revision for dev build --- dist/version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/version b/dist/version index 1a8ecaab17ece..cda2c000a183f 100644 --- a/dist/version +++ b/dist/version @@ -1 +1 @@ -1.30.1.3 +1.30.1.4 From 4521832148bf519eed750b81af58ccfaa084a030 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Mon, 5 Oct 2020 09:30:23 -0400 Subject: [PATCH 23/27] Make Firefox dev build auto-update --- dist/firefox/updates.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/firefox/updates.json b/dist/firefox/updates.json index 50db440d9309c..44cfdf4267b58 100644 --- a/dist/firefox/updates.json +++ b/dist/firefox/updates.json @@ -3,10 +3,10 @@ "uBlock0@raymondhill.net": { "updates": [ { - "version": "1.30.1.3", + "version": "1.30.1.4", "browser_specific_settings": { "gecko": { "strict_min_version": "55" } }, - "update_info_url": "https://github.com/gorhill/uBlock/releases/tag/1.30.1b3", - "update_link": "https://github.com/gorhill/uBlock/releases/download/1.30.1b3/uBlock0_1.30.1b3.firefox.signed.xpi" + "update_info_url": "https://github.com/gorhill/uBlock/releases/tag/1.30.1b4", + "update_link": "https://github.com/gorhill/uBlock/releases/download/1.30.1b4/uBlock0_1.30.1b4.firefox.signed.xpi" } ] } From fc0b5e4ef1ff017a6fe0f266451743cfc340fea2 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Mon, 5 Oct 2020 11:38:30 -0400 Subject: [PATCH 24/27] Link to the "My filters" wiki page Related feedback: - https://github.com/uBlockOrigin/uBlock-issues/issues/1279#issuecomment-703700929 --- src/1p-filters.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/1p-filters.html b/src/1p-filters.html index e99dd8a05bacd..c1d97da1ba9d6 100644 --- a/src/1p-filters.html +++ b/src/1p-filters.html @@ -24,7 +24,7 @@
-

+

From aff75b35271690401f9fec268fcd03e2e5bcdea0 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Mon, 5 Oct 2020 14:20:43 -0400 Subject: [PATCH 25/27] Fix typo breaking the collapsing of placeholders Related issue: - https://github.com/gorhill/uBlock/issues/2848 --- src/js/contentscript.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/contentscript.js b/src/js/contentscript.js index 8660d811cf354..b80431879ee78 100644 --- a/src/js/contentscript.js +++ b/src/js/contentscript.js @@ -1166,7 +1166,7 @@ vAPI.injectScriptlet = function(doc, text) { if ( collapseToken === undefined ) { collapseToken = vAPI.randomToken(); vAPI.userStylesheet.add( - `[${collapseToken}]\ndisplay:none!important;}`, + `[${collapseToken}]\n{display:none!important;}`, true ); } From 3e788a03d8c4d65b07f31683f0115665f8f4d621 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Mon, 5 Oct 2020 14:22:29 -0400 Subject: [PATCH 26/27] New revision for dev build --- dist/version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/version b/dist/version index cda2c000a183f..0b5c5068be376 100644 --- a/dist/version +++ b/dist/version @@ -1 +1 @@ -1.30.1.4 +1.30.1.5 From 42c0f66c6e54be0083287600f03e194f81b46391 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Mon, 5 Oct 2020 14:35:29 -0400 Subject: [PATCH 27/27] Make Firefox dev build auto-update --- dist/firefox/updates.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/firefox/updates.json b/dist/firefox/updates.json index 44cfdf4267b58..ad223b30089b3 100644 --- a/dist/firefox/updates.json +++ b/dist/firefox/updates.json @@ -3,10 +3,10 @@ "uBlock0@raymondhill.net": { "updates": [ { - "version": "1.30.1.4", + "version": "1.30.1.5", "browser_specific_settings": { "gecko": { "strict_min_version": "55" } }, - "update_info_url": "https://github.com/gorhill/uBlock/releases/tag/1.30.1b4", - "update_link": "https://github.com/gorhill/uBlock/releases/download/1.30.1b4/uBlock0_1.30.1b4.firefox.signed.xpi" + "update_info_url": "https://github.com/gorhill/uBlock/releases/tag/1.30.1b5", + "update_link": "https://github.com/gorhill/uBlock/releases/download/1.30.1b5/uBlock0_1.30.1b5.firefox.signed.xpi" } ] }