From 745c5babcf9104924631185b2ea3f235c45d270a Mon Sep 17 00:00:00 2001 From: SimonBrazell Date: Sun, 12 Jul 2020 11:26:48 +1000 Subject: Improve exceptions (whitelist), i18n (fr), etc. - Closes #69 - Closes #70 - Fixes #71 - Closes #72 - added fr l10n - Fixes #73 - Implement additional Invidious params (#66) --- assets/javascript/localise.js | 19 ++++++++ assets/javascript/persist-invidious-prefs.js | 30 ++++++++++++ assets/javascript/remove-twitter-sw.js | 71 ++++++++++++++++++++++++++++ 3 files changed, 120 insertions(+) create mode 100644 assets/javascript/localise.js create mode 100644 assets/javascript/persist-invidious-prefs.js create mode 100644 assets/javascript/remove-twitter-sw.js (limited to 'assets/javascript') diff --git a/assets/javascript/localise.js b/assets/javascript/localise.js new file mode 100644 index 00000000..e408025d --- /dev/null +++ b/assets/javascript/localise.js @@ -0,0 +1,19 @@ +window.browser = window.browser || window.chrome; + +function localizeHtmlPage() { + // Localize using __MSG_***__ data tags + var data = document.querySelectorAll('[data-localize]'); + + for (var i in data) if (data.hasOwnProperty(i)) { + var obj = data[i]; + var tag = obj.getAttribute('data-localize').toString(); + + var msg = tag.replace(/__MSG_(\w+)__/g, function (_match, v1) { + return v1 ? browser.i18n.getMessage(v1) : null; + }); + + if (msg && msg !== tag) obj.innerHTML = msg; + } +} + +localizeHtmlPage(); \ No newline at end of file diff --git a/assets/javascript/persist-invidious-prefs.js b/assets/javascript/persist-invidious-prefs.js new file mode 100644 index 00000000..4c13a310 --- /dev/null +++ b/assets/javascript/persist-invidious-prefs.js @@ -0,0 +1,30 @@ +'use strict'; + +window.browser = window.browser || window.chrome; + +function getCookie() { + let ca = document.cookie.split(';'); + for (let i = 0; i < ca.length; i++) { + let c = ca[i]; + while (c.charAt(0) == ' ') c = c.substring(1, c.length); + if (c.indexOf('PREFS=') == 0) { + return JSON.parse( + decodeURIComponent(c.substring('PREFS='.length, c.length)) + ) + }; + } + return {}; +} + +browser.storage.sync.get( + ['alwaysProxy', 'videoQuality', 'invidiousDarkMode', 'persistInvidiousPrefs'], + (result) => { + if (result.persistInvidiousPrefs) { + const prefs = getCookie(); + prefs.local = result.alwaysProxy; + prefs.quality = result.videoQuality; + prefs.dark_mode = result.invidiousDarkMode; + document.cookie = `PREFS=${encodeURIComponent(JSON.stringify(prefs))}`; + } + } +); \ No newline at end of file diff --git a/assets/javascript/remove-twitter-sw.js b/assets/javascript/remove-twitter-sw.js new file mode 100644 index 00000000..d9d3ce3e --- /dev/null +++ b/assets/javascript/remove-twitter-sw.js @@ -0,0 +1,71 @@ +'use strict'; + +const nitterDefault = 'https://nitter.net'; + +let disableNitter; +let nitterInstance; +let redirectBypassFlag; +let exceptions; + +window.browser = window.browser || window.chrome; + +function isNotException(url) { + return !exceptions.some(regex => (regex.test(url.href))); +} + +function shouldRedirect(url) { + return !redirectBypassFlag && + isNotException(url) && + !disableNitter && + url.host !== nitterInstance && + !url.pathname.includes('/home'); +} + +function redirectTwitter(url) { + if (url.host.split('.')[0] === 'pbs') { + return `${nitterInstance}/pic/${encodeURIComponent(url.href)}`; + } else if (url.host.split('.')[0] === 'video') { + return `${nitterInstance}/gif/${encodeURIComponent(url.href)}`; + } else { + return `${nitterInstance}${url.pathname}${url.search}`; + }; +} + +browser.storage.sync.get( + [ + 'nitterInstance', + 'disableNitter', + 'removeTwitterSW', + 'redirectBypassFlag', + 'exceptions' + ], + (result) => { + redirectBypassFlag = result.redirectBypassFlag; + browser.storage.sync.set({ + redirectBypassFlag: false + }); + if (!result.removeTwitterSW) { + disableNitter = result.disableNitter; + nitterInstance = result.nitterInstance || nitterDefault; + exceptions = result.exceptions ? result.exceptions.map(e => { + return new RegExp(e); + }) : []; + navigator.serviceWorker.getRegistrations().then(registrations => { + for (let registration of registrations) { + if (registration.scope === 'https://twitter.com/') { + registration.unregister(); + console.log('Unregistered Twitter SW', registration); + } + } + }); + const url = new URL(window.location); + if (shouldRedirect()) { + const redirect = redirectTwitter(url); + console.info( + 'Redirecting', `"${url.href}"`, '=>', `"${redirect}"` + ); + window.location = redirect; + } + } + } +); -- cgit 1.4.1 From 28c9ee8a0d21d6893270b3164845a27fb9aeebbd Mon Sep 17 00:00:00 2001 From: SimonBrazell Date: Thu, 30 Jul 2020 22:40:36 +1000 Subject: Closes #82, closes #84. --- _locales/de/messages.json | 20 ++++++++++++--- _locales/en/messages.json | 20 ++++++++++++--- _locales/fr/messages.json | 18 ++++++++++--- _locales/ru/messages.json | 16 ++++++++++-- assets/javascript/localise.js | 24 +++++++++--------- manifest.json | 2 +- pages/options/options.html | 59 ++++++++++++++++++++----------------------- pages/popup/popup.html | 18 +++++++------ pages/popup/popup.js | 2 +- 9 files changed, 113 insertions(+), 66 deletions(-) (limited to 'assets/javascript') diff --git a/_locales/de/messages.json b/_locales/de/messages.json index 2ad3bdad..431ed1d4 100644 --- a/_locales/de/messages.json +++ b/_locales/de/messages.json @@ -75,9 +75,17 @@ "message": "Ausnahmen", "description": "Exceptions tab (options)." }, - "exceptionsDescription": { - "message": "

Gib eine URL oder einen regulären Ausdruck (Regex) ein, die/der von Weiterleitungen ausgeschlossen werden soll.

Alle Anfragen für oder ausgehend von einer URL, die auf die Ausnahme zutrifft, werden von Weiterleitungen ausgeschlossen.

Hinweis – Unterstützt reguläre JavaScript-Ausdrücke (Regex), mit Ausnahme der einschließenden Schrägstriche.

", - "description": "A description of the 'Exceptions' feature (options)." + "exceptionsDescriptionP1": { + "message": "Gib eine URL oder einen regulären Ausdruck (Regex) ein, die/der von Weiterleitungen ausgeschlossen werden soll.", + "description": "A description of the 'Exceptions' feature paragraph 1 (options)." + }, + "exceptionsDescriptionP2": { + "message": "Alle Anfragen für oder ausgehend von einer URL, die auf die Ausnahme zutrifft, werden von Weiterleitungen ausgeschlossen.", + "description": "A description of the 'Exceptions' feature paragraph 2 (options)." + }, + "exceptionsDescriptionP3": { + "message": "Hinweis – Unterstützt reguläre JavaScript-Ausdrücke (Regex), mit Ausnahme der einschließenden Schrägstriche.", + "description": "A description of the 'Exceptions' feature paragraph 3 (options)." }, "addException": { "message": "Ausnahme hinzufügen", @@ -94,5 +102,9 @@ "redirect": { "message": "Redirect", "description": "Extension title - Redirect (pop-up)." + }, + "version": { + "message": "Version", + "description": "Version" } -} \ No newline at end of file +} diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 2a34b8b7..2e106a7c 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -75,9 +75,17 @@ "message": "Exceptions", "description": "Exceptions tab (options)." }, - "exceptionsDescription": { - "message": "

Enter a URL or Regular Expression to be excluded from redirects.

All requests for or initiating from a URL that matches the exception will be excluded from redirects.

Note - Supports JavaScript regular expressions, excluding the enclosing forward slashes.

", - "description": "A description of the 'Exceptions' feature (options)." + "exceptionsDescriptionP1": { + "message": "Enter a URL or Regular Expression to be excluded from redirects.", + "description": "A description of the 'Exceptions' feature paragraph 1 (options)." + }, + "exceptionsDescriptionP2": { + "message": "All requests for or initiating from a URL that matches the exception will be excluded from redirects.", + "description": "A description of the 'Exceptions' feature paragraph 2 (options)." + }, + "exceptionsDescriptionP3": { + "message": "Note - Supports JavaScript regular expressions, excluding the enclosing forward slashes.", + "description": "A description of the 'Exceptions' feature paragraph 3 (options)." }, "addException": { "message": "Add Exception", @@ -94,5 +102,9 @@ "redirect": { "message": "Redirect", "description": "Extension title - Redirect (pop-up)." + }, + "version": { + "message": "Version", + "description": "Version" } -} \ No newline at end of file +} diff --git a/_locales/fr/messages.json b/_locales/fr/messages.json index ef172d18..7d57c8b4 100644 --- a/_locales/fr/messages.json +++ b/_locales/fr/messages.json @@ -75,8 +75,16 @@ "message": "Exceptions", "description": "Onglet des Exceptions dans les options." }, - "exceptionsDescription": { - "message": "

Entrez une adresse URL ou une expression régulière qui sera exclue des redirections.

All requests for or initiating from a URL that matches the exception will be excluded from redirects.

Note - Supports JavaScript regular expressions, excluding the enclosing forward slashes.

", + "exceptionsDescriptionP1": { + "message": "Entrez une adresse URL ou une expression régulière qui sera exclue des redirections.", + "description": "Description pour la rubrique 'Exceptions' dans les options." + }, + "exceptionsDescriptionP2": { + "message": "All requests for or initiating from a URL that matches the exception will be excluded from redirects.", + "description": "Description pour la rubrique 'Exceptions' dans les options." + }, + "exceptionsDescriptionP3": { + "message": "Note - Supports JavaScript regular expressions, excluding the enclosing forward slashes.", "description": "Description pour la rubrique 'Exceptions' dans les options." }, "addException": { @@ -94,5 +102,9 @@ "redirect": { "message": "Redirect", "description": "Titre du module complémentaire - Redirection (pop-up)." + }, + "version": { + "message": "Version", + "description": "Version" } -} \ No newline at end of file +} diff --git a/_locales/ru/messages.json b/_locales/ru/messages.json index 0b7d996d..d46e3fb4 100644 --- a/_locales/ru/messages.json +++ b/_locales/ru/messages.json @@ -91,8 +91,16 @@ "message": "Исключения", "description": "Вкладка 'Исключения' (в настройках)." }, - "exceptionsDescription": { - "message": "

Введите URL или регулярное выражение для исключения из перенаправлений.

Все запросы на URL, совпадающие с исключениями, или инициированные с них будут исключены из перенаправлений.

Примечание: Поддерживает регулярные выражения JavaScript, кроме закрывающих обратных слэшей.

", + "exceptionsDescriptionP1": { + "message": "Введите URL или регулярное выражение для исключения из перенаправлений.", + "description": "Описание функции 'Исключения' (в настройках)." + }, + "exceptionsDescriptionP2": { + "message": "Все запросы на URL, совпадающие с исключениями, или инициированные с них будут исключены из перенаправлений.", + "description": "Описание функции 'Исключения' (в настройках)." + }, + "exceptionsDescriptionP3": { + "message": "Примечание: Поддерживает регулярные выражения JavaScript, кроме закрывающих обратных слэшей.", "description": "Описание функции 'Исключения' (в настройках)." }, "addException": { @@ -110,5 +118,9 @@ "redirect": { "message": "Redirect", "description": "Название расширения - Redirect (во всплывающем окне)." + }, + "version": { + "message": "Version", + "description": "Version" } } diff --git a/assets/javascript/localise.js b/assets/javascript/localise.js index e408025d..cbe5c191 100644 --- a/assets/javascript/localise.js +++ b/assets/javascript/localise.js @@ -1,19 +1,19 @@ window.browser = window.browser || window.chrome; -function localizeHtmlPage() { - // Localize using __MSG_***__ data tags - var data = document.querySelectorAll('[data-localize]'); +function localisePage() { + var data = document.querySelectorAll("[data-localise]"); - for (var i in data) if (data.hasOwnProperty(i)) { - var obj = data[i]; - var tag = obj.getAttribute('data-localize').toString(); + for (var i in data) + if (data.hasOwnProperty(i)) { + var obj = data[i]; + var tag = obj.getAttribute("data-localise").toString(); - var msg = tag.replace(/__MSG_(\w+)__/g, function (_match, v1) { - return v1 ? browser.i18n.getMessage(v1) : null; - }); + var msg = tag.replace(/__MSG_(\w+)__/g, function (_match, v1) { + return v1 ? browser.i18n.getMessage(v1) : null; + }); - if (msg && msg !== tag) obj.innerHTML = msg; - } + if (msg && msg !== tag) obj.textContent = msg; + } } -localizeHtmlPage(); \ No newline at end of file +localisePage(); diff --git a/manifest.json b/manifest.json index 1e408456..d49fc9b9 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "name": "__MSG_extensionName__", "description": "__MSG_extensionDescription__", - "version": "1.1.37", + "version": "1.1.38", "manifest_version": 2, "background": { "scripts": ["background.js"], diff --git a/pages/options/options.html b/pages/options/options.html index f5947bc9..0f38ff0a 100644 --- a/pages/options/options.html +++ b/pages/options/options.html @@ -13,21 +13,21 @@ @@ -39,7 +39,7 @@ -

Nitter Redirects

+

Nitter Redirects

-

+

Invidious Redirects

@@ -81,7 +81,7 @@ -

+

Bibliogram Redirects

@@ -103,7 +103,7 @@ -

+

OpenStreetMap Redirects

@@ -121,7 +121,7 @@
-

Nitter Instance

+

Nitter Instance

-

Invidious Instance

+

Invidious Instance

-

Bibliogram Instance

+

Bibliogram Instance

-

OpenStreetMap Instance

+

OpenStreetMap Instance

-

Theme

+

Theme

@@ -238,7 +238,7 @@ -

+

Invidious dark mode always on

@@ -257,7 +257,7 @@
-

Invidious Volume

+

Invidious Volume

-

+

Invidious Player Style

-

+

Invidious Subtitles - language codes (comma-separated)

-

+

Invidious automatically play video on load

@@ -316,7 +316,7 @@ -

+

Persist Invidious preferences (as cookie)

@@ -342,7 +342,7 @@ -

+

Proactively remove Twitter service worker

@@ -362,19 +362,16 @@
-
-

+

+

Enter a URL or Regular Expression to be excluded from redirects.

-

+

All requests for or initiating from a URL that matches your exception will be excluded from redirects.

-

- Note - Supports JavaScript regular expressions, excluding the +

+ Note - Supports JavaScript regular expressions, excluding the enclosing forward slashes.

@@ -383,7 +380,7 @@ -

Add Exception

+

Add Exception

diff --git a/pages/popup/popup.html b/pages/popup/popup.html index 9fa324a0..e06159a5 100644 --- a/pages/popup/popup.html +++ b/pages/popup/popup.html @@ -15,12 +15,14 @@ alt="Privacy Redirect logo" />

- Privacy
Redirect + Privacy
Redirect

- Version:  + Version
@@ -29,7 +31,7 @@ -

Nitter Redirects

+

Nitter Redirects

-

+

Invidious Redirects

@@ -73,7 +75,7 @@ -

+

Bibliogram Redirects

@@ -96,7 +98,7 @@ -

+

OpenStreetMap Redirects

@@ -118,7 +120,7 @@
@@ -137,7 +137,7 @@ @@ -147,7 +147,7 @@ @@ -228,9 +228,8 @@ - + +
@@ -257,7 +256,9 @@
-

Invidious Volume

+

+ Invidious Volume +

+ />

diff --git a/pages/options/options.js b/pages/options/options.js index 89ef315f..8149be7b 100644 --- a/pages/options/options.js +++ b/pages/options/options.js @@ -140,6 +140,9 @@ browser.storage.sync.get( exceptions = result.exceptions || []; exceptions.forEach(prependExceptionsItem); invidiousVolume.value = result.invidiousVolume; + document.querySelector("#volume-value").textContent = result.invidiousVolume + ? `${result.invidiousVolume}%` + : " - "; invidiousPlayerStyle.value = result.invidiousPlayerStyle || ""; invidiousSubtitles.value = result.invidiousSubtitles || ""; invidiousAutoplay.checked = result.invidiousAutoplay; @@ -313,11 +316,12 @@ persistInvidiousPrefs.addEventListener("change", (event) => { }); let invidiousVolumeChange = debounce(() => { - if (invidiousInstance.checkValidity()) { - browser.storage.sync.set({ - invidiousVolume: invidiousVolume.value, - }); - } + document.querySelector( + "#volume-value" + ).textContent = `${invidiousVolume.value}%`; + browser.storage.sync.set({ + invidiousVolume: invidiousVolume.value, + }); }, 500); invidiousVolume.addEventListener("input", invidiousVolumeChange); diff --git a/pages/styles.css b/pages/styles.css index 300dadbf..dd58676b 100644 --- a/pages/styles.css +++ b/pages/styles.css @@ -457,3 +457,7 @@ input[type="range"]::-moz-range-thumb { background-color: var(--bg-secondary); } } + +#volume-value { + float: right; +} -- cgit 1.4.1