diff --git a/src/assets/javascripts/helpers/common.js b/src/assets/javascripts/helpers/common.js index 3666b7d..ee9a66d 100644 --- a/src/assets/javascripts/helpers/common.js +++ b/src/assets/javascripts/helpers/common.js @@ -22,7 +22,8 @@ function getInstances() { const nitterRandomPool = addHttps(filterInstances(instances.twitter)).join(','); const invidiousRandomPool = addHttps(filterInstances(instances.youtube)).join(','); const bibliogramRandomPool = addHttps(filterInstances(instances.instagram)).join(','); - browser.storage.sync.set({ nitterRandomPool, invidiousRandomPool, bibliogramRandomPool }); + const scribeRandomPool = addHttps(filterInstances(instances.wikipedia)).join(',') + browser.storage.sync.set({ nitterRandomPool, invidiousRandomPool, bibliogramRandomPool, scribeRandomPool}); return true; } return false; diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 1f2eccc..c94b61d 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -577,7 +577,7 @@ function redirectGoogleTranslate(url, initiator) { return `${simplyTranslateInstance}/${url.search}`; } -var oldDomain = ''; + function redirectWikipedia(url, initiator) { if (disableWikipedia || isException(url, initiator)) { @@ -615,8 +615,6 @@ function redirectWikipedia(url, initiator) { else return null; } -var tabList = [] -var redirecting = false; browser.webRequest.onBeforeRequest.addListener( (details) => { const url = new URL(details.url); @@ -626,69 +624,43 @@ browser.webRequest.onBeforeRequest.addListener( } else if (details.initiator) { initiator = new URL(details.initiator); } - let redirect; - if (youtubeDomains.includes(url.host)) { - oldDomain = 'https://youtube.com/'; - redirect = { - redirectUrl: redirectYouTube(url, initiator, details.type), - }; - } else if (twitterDomains.includes(url.host)) { - oldDomain = 'https://twitter.com/'; - redirect = { - redirectUrl: redirectTwitter(url, initiator), - }; - } else if (instagramDomains.includes(url.host)) { - oldDomain = 'https://instagram.com/'; - redirect = { - redirectUrl: redirectInstagram(url, initiator, details.type), - }; - } else if (url.href.match(googleMapsRegex)) { - oldDomain = 'https://maps.google.com/'; - redirect = { - redirectUrl: redirectGoogleMaps(url, initiator), - }; - } else if (redditDomains.includes(url.host)) { - oldDomain = 'https://reddit.com/'; - redirect = { - redirectUrl: redirectReddit(url, initiator, details.type), - }; - } else if (mediumDomains.some((rx) => rx.test(url.host))) { - oldDomain = "https://medium.com/" - redirect = { - redirectUrl: redirectMedium(url, initiator), - }; - } else if (url.href.match(googleSearchRegex)) { - oldDomain = 'https://google.com/'; - redirect = { - redirectUrl: redirectSearchEngine(url, initiator), - }; - } else if (googleTranslateDomains.includes(url.host)) { - oldDomain = 'https://translate.google.com/'; - redirect = { - redirectUrl: redirectGoogleTranslate(url, initiator), - }; - } else if (url.host.match(wikipediaRegex)) { - oldDomain = 'https://wikipedia.com/'; - redirect = { - redirectUrl: redirectWikipedia(url, initiator), - }; - } - if (redirect && redirect.redirectUrl) { - redirecting = true; - if (!tabList.includes(details.tabId)) - tabList.push(details.tabId); + let newUrl; + if (youtubeDomains.includes(url.host)) + newUrl = redirectYouTube(url, initiator, details.type) + else if (twitterDomains.includes(url.host)) + newUrl = redirectTwitter(url, initiator); + else if (instagramDomains.includes(url.host)) + newUrl = redirectInstagram(url, initiator, details.type); + else if (url.href.match(googleMapsRegex)) + newUrl = redirectGoogleMaps(url, initiator); + else if (redditDomains.includes(url.host)) + newUrl = redirectReddit(url, initiator, details.type); + else if (mediumDomains.some((rx) => rx.test(url.host))) + newUrl = redirectMedium(url, initiator); + else if (url.href.match(googleSearchRegex)) + newUrl = redirectSearchEngine(url, initiator); + else if (googleTranslateDomains.includes(url.host)) + newUrl = redirectGoogleTranslate(url, initiator); + else if (url.host.match(wikipediaRegex)) + newUrl = redirectWikipedia(url, initiator); + + let redirect; + if (newUrl) { + redirect = { + redirectUrl: newUrl + } console.info( "Redirecting", `"${url.href}"`, "=>", `"${redirect.redirectUrl}"` ); - console.info("Details", details); - } else { - if (!redirecting) - tabList = tabList.filter((val) => val != details.tabId); + // console.info("Details", details); } + + + return redirect; }, { @@ -697,14 +669,53 @@ browser.webRequest.onBeforeRequest.addListener( ["blocking"] ); -browser.tabs.onUpdated.addListener((tabId, _, __) => { - if (tabList.includes(tabId)) - browser.pageAction.show(tabId); -}) +browser.tabs.onUpdated.addListener((tabId, changeInfo, _) => { + const url = new URL(changeInfo.url); + var protocolHost = `${url.protocol}//${url.host}`; + var mightyList = []; + mightyList.push(...invidiousInstances); + mightyList.push(...nitterInstances); + mightyList.push(...bibliogramInstances); + mightyList.push(...redditInstances); + mightyList.push(...searchEngineInstances); + mightyList.push(...simplyTranslateInstances); + mightyList.push(...scribeInstances); + mightyList.push(...wikipediaInstances); + + if (mightyList.includes(protocolHost)) + browser.pageAction.show(tabId); + +}); + + +browser.pageAction.onClicked.addListener((tab) => { + var tabUrl = new URL(tab.url); + var protocolHost = `${tabUrl.protocol}//${tabUrl.host}`; + var newUrl; + if (invidiousInstances.includes(protocolHost)) + newUrl = 'https://youtube.com/'; + else if (nitterInstances.includes(protocolHost)) + newUrl = 'https://twitter.com/'; + else if (bibliogramInstances.includes(protocolHost)) + newUrl = 'https://instagram.com/'; + else if (redditInstances.includes(protocolHost)) + newUrl = 'https://reddit.com/'; + else if (searchEngineInstances.includes(protocolHost)) + newUrl = 'https://google.com/'; + else if (simplyTranslateInstances.includes(protocolHost)) + newUrl = 'https://translate.google.com/'; + else if (scribeInstances.includes(protocolHost)) + newUrl = 'https://medium.com/'; + else if (wikipediaInstances.includes(protocolHost)) + newUrl = 'https://wikipedia.com/'; + + if (newUrl) + browser.tabs.update({ + url: tabUrl.href.replace(protocolHost, newUrl) + }); +}); + -browser.webRequest.onCompleted.addListener(() => { - redirecting = false; -}, { urls: [""] }); browser.runtime.onInstalled.addListener((details) => { @@ -749,22 +760,4 @@ browser.runtime.onInstalled.addListener((details) => { } ); } -}); - - -function changeInstance() { - browser.tabs.query({ - active: true, - lastFocusedWindow: true - }, function (tabs) { - var tabUrl = new URL(tabs[0].url); - - if (oldDomain != '') { - browser.tabs.update({ - url: tabUrl.href.replace(`${tabUrl.protocol}//${tabUrl.host}/`, oldDomain) - }); - } - }); -} - -browser.pageAction.onClicked.addListener(changeInstance); \ No newline at end of file +}); \ No newline at end of file