diff options
Diffstat (limited to 'src/assets')
-rw-r--r-- | src/assets/javascripts/helpers/general.js (renamed from src/assets/javascripts/helpers/exceptions.js) | 37 | ||||
-rw-r--r-- | src/assets/javascripts/helpers/reddit.js | 134 | ||||
-rw-r--r-- | src/assets/javascripts/helpers/twitter.js | 33 | ||||
-rw-r--r-- | src/assets/javascripts/helpers/youtube/youtube.js | 97 |
4 files changed, 189 insertions, 112 deletions
diff --git a/src/assets/javascripts/helpers/exceptions.js b/src/assets/javascripts/helpers/general.js index 7c6e4798..fa911b4f 100644 --- a/src/assets/javascripts/helpers/exceptions.js +++ b/src/assets/javascripts/helpers/general.js @@ -1,10 +1,19 @@ "use strict"; window.browser = window.browser || window.chrome; +let alwaysUsePreferred; +const getAlwaysUsePreferred = () => alwaysUsePreferred; +function setAlwaysUsePreferred(val) { + alwaysUsePreferred = val; + browser.storage.local.set({ alwaysUsePreferred }) + console.log("alwaysUsePreferred: ", alwaysUsePreferred) +} + let exceptions = { "url": [], "regex": [], }; + const getExceptions = () => exceptions; function setExceptions(val) { exceptions = val; @@ -12,15 +21,6 @@ function setExceptions(val) { console.log("exceptions: ", val) } -async function init() { - return new Promise((resolve) => { - browser.storage.local.get("exceptions", (result) => { - if (result.exceptions) exceptions = result.exceptions; - resolve(); - }); - }) -} - function isException(url) { for (const item of exceptions.url) { console.log(item, `${url.protocol}//${url.host}`) @@ -31,10 +31,29 @@ function isException(url) { return false; } +async function init() { + return new Promise( + resolve => browser.storage.local.get( + [ + "exceptions", + "alwaysUsePreferred" + ], + r => { // r = result + if (r.exceptions) exceptions = r.exceptions; + alwaysUsePreferred = r.alwaysUsePreferred ?? false; + resolve(); + } + ) + ) +} + export default { getExceptions, setExceptions, + getAlwaysUsePreferred, + setAlwaysUsePreferred, + isException, init, } \ No newline at end of file diff --git a/src/assets/javascripts/helpers/reddit.js b/src/assets/javascripts/helpers/reddit.js index 268c721d..db8820eb 100644 --- a/src/assets/javascripts/helpers/reddit.js +++ b/src/assets/javascripts/helpers/reddit.js @@ -3,13 +3,13 @@ window.browser = window.browser || window.chrome; import commonHelper from './common.js' const targets = [ - "reddit.com", - "www.reddit.com", - "np.reddit.com", - "new.reddit.com", - "amp.reddit.com", - "i.redd.it", - "redd.it", + /^https?:\/\/reddit\.com/, + /^https?:\/\/www\.reddit\.com/, + /^https?:\/\/np\.reddit\.com/, + /^https?:\/\/new\.reddit\.com/, + /^https?:\/\/amp\.reddit\.com/, + /^https?:\/\/i\.redd\.it/, + /^https?:\/\/redd\.it/, ]; let redirects = { // modern UI @@ -184,10 +184,6 @@ function setProtocol(val) { console.log("redditProtocol: ", val) } -function isReddit(url,) { - -} - let bypassWatchOnReddit; const getBypassWatchOnReddit = () => bypassWatchOnReddit; function setBypassWatchOnReddit(val) { @@ -196,9 +192,61 @@ function setBypassWatchOnReddit(val) { console.log("bypassWatchOnReddit: ", bypassWatchOnReddit) } +let alwaysUsePreferred; + + +// https://libreddit.exonip.de/vid/1mq8d0ma3yk81/720.mp4 +// https://libreddit.exonip.de/img/4v3t1vgvrzk81.png + +// https://teddit.net/vids/1mq8d0ma3yk81.mp4 +// https://teddit.net/pics/w:null_4v3t1vgvrzk81.png + + +// redd.it/t5379n +// https://v.redd.it/z08avb339n801/DASH_1_2_M +// https://i.redd.it/bfkhs659tzk81.jpg + function redirect(url, type, initiator) { if (disableReddit) return null; + let protocolHost = `${url.protocol}//${url.host}`; + + let isTeddit = [ + ...redirects.teddit.normal, + ...redirects.teddit.tor + ].includes(protocolHost); + + let isCheckedTeddit = [ + ...tedditNormalRedirectsChecks, + ...tedditNormalCustomRedirects, + ...tedditTorRedirectsChecks, + ...tedditTorCustomRedirects, + ].includes(protocolHost); + + let isLibreddit = [ + ...redirects.libreddit.normal, + ...redirects.libreddit.tor + ].includes(protocolHost); + + let isCheckedLibreddit = [ + ...libredditNormalRedirectsChecks, + ...libredditNormalCustomRedirects, + ...libredditTorRedirectsChecks, + ...libredditTorCustomRedirects, + ].includes(protocolHost) + + if ( + alwaysUsePreferred && frontend == 'teddit' && + (isTeddit || isLibreddit) && !isCheckedTeddit + ) return changeInstance(url); + + if ( + alwaysUsePreferred && frontend == 'libreddit' && + (isTeddit || isLibreddit) && !isCheckedLibreddit + ) return changeInstance(url); + + if (!targets.some((rx) => rx.test(url.href))) return null; + if ( bypassWatchOnReddit && initiator && @@ -211,20 +259,15 @@ function redirect(url, type, initiator) { ...redirects.teddit.tor, ...tedditNormalCustomRedirects, ...tedditTorCustomRedirects, - ].includes(initiator.origin) || - targets.includes(initiator.host) + ].includes(initiator.origin) ) ) return 'BYPASSTAB'; - if ((!targets.includes(url.host))) return null; - if (type !== "main_frame" || url.pathname.match(bypassPaths)) return null; - if (frontend == 'old') { - if (url.host === "i.redd.it") return null; - + if (frontend == 'old' && url.host !== "i.redd.it") return `${redirects.desktop}${url.pathname}${url.search}`; - } + let libredditInstancesList; let tedditInstancesList; if (protocol == 'normal') { @@ -236,31 +279,28 @@ function redirect(url, type, initiator) { } if (url.host === "i.redd.it") { - if (libredditInstancesList.length === 0) return null; - let libredditRandomInstance = commonHelper.getRandomInstance(libredditInstancesList); - // As of 2021-04-09, redirects for teddit images are nontrivial: - // - navigating to the image before ever navigating to its page causes - // 404 error (probably needs fix on teddit project) - // - some image links on teddit are very different - // Therefore, don't support redirecting image links for teddit. - return `${libredditRandomInstance}/img${url.pathname}${url.search}`; + if (frontend == 'teddit') { + if (tedditInstancesList.length === 0) return null; + let tedditRandomInstance = commonHelper.getRandomInstance(tedditInstancesList); + return `${tedditRandomInstance}/pics/w:null_${url.pathname.substring(1)}${url.search}`; + } + if (frontend == 'libreddit') { + if (libredditInstancesList.length === 0) return null; + let libredditRandomInstance = commonHelper.getRandomInstance(libredditInstancesList); + return `${libredditRandomInstance}/img${url.pathname}${url.search}`; + } } else if (url.host === "redd.it") { - if (frontend == 'libreddit') { + if (frontend == 'libreddit' && !url.pathname.match(/^\/+[^\/]+\/+[^\/]/)) { if (libredditInstancesList.length === 0) return null; let libredditRandomInstance = commonHelper.getRandomInstance(libredditInstancesList); - return `${libredditRandomInstance}${url.pathname}${url.search}`; + // https://redd.it/foo => https://libredd.it/comments/foo + return `${libredditRandomInstance}/comments${url.pathname}${url.search}`; } if (frontend == 'teddit' && !url.pathname.match(/^\/+[^\/]+\/+[^\/]/)) { if (tedditInstancesList.length === 0) return null; let tedditRandomInstance = commonHelper.getRandomInstance(tedditInstancesList); - // As of 2021-04-22, redirects for teddit redd.it/foo links don't work. - // It appears that adding "/comments" as a prefix works, so manually add - // that prefix if it is missing. Even though redd.it/comments/foo links - // don't seem to work or exist, guard against affecting those kinds of - // paths. - // Note the difference between redd.it/comments/foo (doesn't work) and - // teddit.net/comments/foo (works). + // https://redd.it/foo => https://teddit.net/comments/foo return `${tedditRandomInstance}/comments${url.pathname}${url.search}`; } } @@ -279,6 +319,16 @@ function redirect(url, type, initiator) { function changeInstance(url) { let protocolHost = `${url.protocol}//${url.host}`; + let isTeddit = [ + ...redirects.teddit.normal, + ...redirects.teddit.tor + ].includes(protocolHost); + + let isLibreddit = [ + ...redirects.libreddit.normal, + ...redirects.libreddit.tor + ].includes(protocolHost); + let redditList = [ ...redirects.libreddit.normal, ...redirects.libreddit.tor, @@ -299,20 +349,21 @@ function changeInstance(url) { if (frontend == 'libreddit') { if (protocol == 'normal') instancesList = [...libredditNormalRedirectsChecks, ...libredditNormalCustomRedirects]; else if (protocol == 'tor') instancesList = [...libredditTorRedirectsChecks, ...libredditTorCustomRedirects]; + if (isTeddit) url.pathname = url.pathname.replace("/pics/w:null_", "/img/"); } else if (frontend == 'teddit') { if (protocol == 'normal') instancesList = [...tedditNormalRedirectsChecks, ...tedditNormalCustomRedirects]; else if (protocol == 'tor') instancesList = [...tedditTorRedirectsChecks, ...tedditTorCustomRedirects]; + if (isLibreddit) url.pathname = url.pathname.replace("/img/", "/pics/w:null_"); } - console.log("instancesList", instancesList); let index = instancesList.indexOf(protocolHost); if (index > -1) instancesList.splice(index, 1); - if (instancesList.length === 0) return null; let randomInstance = commonHelper.getRandomInstance(instancesList); - return randomInstance; + + return `${randomInstance}${url.pathname}${url.search}`; } async function init() { @@ -337,6 +388,8 @@ async function init() { "redditProtocol", "bypassWatchOnReddit", + + "alwaysUsePreferred", ], (result) => { disableReddit = result.disableReddit ?? false; protocol = result.redditProtocol ?? 'normal'; @@ -344,6 +397,8 @@ async function init() { bypassWatchOnReddit = result.bypassWatchOnReddit ?? true; + alwaysUsePreferred = result.alwaysUsePreferred ?? true; + redirects.teddit = dataJson.teddit; if (result.redditRedirects) redirects = result.redditRedirects; @@ -408,7 +463,6 @@ export default { setTedditTorCustomRedirects, redirect, - isReddit, init, changeInstance, }; diff --git a/src/assets/javascripts/helpers/twitter.js b/src/assets/javascripts/helpers/twitter.js index 3d0fc2e3..d389f0e7 100644 --- a/src/assets/javascripts/helpers/twitter.js +++ b/src/assets/javascripts/helpers/twitter.js @@ -102,7 +102,23 @@ function setBypassWatchOnTwitter(val) { console.log("bypassWatchOnTwitter: ", bypassWatchOnTwitter) } +let alwaysUsePreferred; + function redirect(url, initiator) { + let protocolHost = `${url.protocol}//${url.host}`; + let isNitter = [ + ...redirects.nitter.normal, + ...redirects.nitter.tor + ].includes(protocolHost); + + let isCheckedNitter = [ + ...nitterNormalRedirectsChecks, + ...nitterNormalCustomRedirects, + ...nitterTorRedirectsChecks, + ...nitterTorCustomRedirects + ].includes(protocolHost); + + if (alwaysUsePreferred && isNitter && !isCheckedNitter) return changeInstance(url); if (disable) return null; @@ -112,13 +128,13 @@ function redirect(url, initiator) { if ( bypassWatchOnTwitter && - initiator && ( - [...redirects.nitter.normal, - ...redirects.nitter.tor, - ...nitterTorCustomRedirects, - ...nitterNormalCustomRedirects - ].includes(initiator.origin) - ) + initiator && + [...redirects.nitter.normal, + ...redirects.nitter.tor, + ...nitterTorCustomRedirects, + ...nitterNormalCustomRedirects + ].includes(initiator.origin) + ) return 'BYPASSTAB'; let instancesList; @@ -179,6 +195,7 @@ async function init() { "nitterTorRedirectsChecks", "nitterTorCustomRedirects", "twitterProtocol", + "alwaysUsePreferred", ], (result) => { disable = result.disableTwitter ?? false; @@ -187,6 +204,8 @@ async function init() { bypassWatchOnTwitter = result.bypassWatchOnTwitter ?? true; + alwaysUsePreferred = result.alwaysUsePreferred ?? true; + redirects.nitter = dataJson.nitter; if (result.twitterRedirects) redirects = result.twitterRedirects; diff --git a/src/assets/javascripts/helpers/youtube/youtube.js b/src/assets/javascripts/helpers/youtube/youtube.js index d52cf949..b33c258b 100644 --- a/src/assets/javascripts/helpers/youtube/youtube.js +++ b/src/assets/javascripts/helpers/youtube/youtube.js @@ -233,14 +233,6 @@ function setPersistInvidiousPrefs(val) { console.log("persistInvidiousPrefs: ", persistInvidiousPrefs) } -let alwaysusePreferred; -const getAlwaysusePreferred = () => alwaysusePreferred; -function setAlwaysusePreferred(val) { - alwaysusePreferred = val; - browser.storage.local.set({ alwaysusePreferred }) - console.log("alwaysusePreferred: ", alwaysusePreferred) -} - let bypassWatchOnYoutube; const getBypassWatchOnYoutube = () => bypassWatchOnYoutube; function setBypassWatchOnYoutube(val) { @@ -271,57 +263,54 @@ function isException(url) { return false; } + +let alwaysUsePreferred; function redirect(url, details, initiator) { if (disable) return null; - let isTargets = targets.some((rx) => rx.test(url.href)); let protocolHost = `${url.protocol}//${url.host}`; - let isInvidious = [...redirects.invidious.normal, ...redirects.invidious.tor].includes(protocolHost); - if (isInvidious) { - let myInvidiousInstances = [ - ...invidiousNormalRedirectsChecks, - ...invidiousNormalCustomRedirects, + let isInvidious = [ + ...redirects.invidious.normal, + ...redirects.invidious.tor + ].includes(protocolHost); - ...invidiousTorRedirectsChecks, - ...invidiousTorCustomRedirects, - ]; - for (const item of myInvidiousInstances) if (item == protocolHost) isInvidious = false; - } + let isCheckedInvidious = [ + ...invidiousNormalRedirectsChecks, + ...invidiousNormalCustomRedirects, + ...invidiousTorRedirectsChecks, + ...invidiousTorCustomRedirects, + ].includes(protocolHost); - let isPiped = [...redirects.piped.normal, ...redirects.piped.tor].includes(protocolHost); - if (isPiped) { - let myPipedInstances = [ - ...pipedNormalRedirectsChecks, - ...pipedNormalCustomRedirects, + let isPiped = [ + ...redirects.piped.normal, + ...redirects.piped.tor + ].includes(protocolHost); - ...pipedTorRedirectsChecks, - ...pipedTorCustomRedirects, - ]; - for (const item of myPipedInstances) if (item == protocolHost) isPiped = false; - } + let isCheckedPiped = [ + ...pipedNormalRedirectsChecks, + ...pipedNormalCustomRedirects, + ...pipedTorRedirectsChecks, + ...pipedTorCustomRedirects, + ].includes(protocolHost) - if (frontend == 'invidious') { - if (alwaysusePreferred) { - if (!(isTargets | redirects.piped.normal.includes(protocolHost) | isInvidious)) return null; - } - else { - if (!(isTargets | isPiped)) return null; - } - } - if (frontend == 'piped') { - if (alwaysusePreferred) { - if (!(isTargets | isPiped | redirects.invidious.normal.includes(protocolHost))) return null; - } - else { - if (!(isTargets | isInvidious)) return null; - } - } - else - if (!isTargets) return null; + if ( + alwaysUsePreferred && frontend == 'invidious' && + (isInvidious || isPiped) && !isCheckedInvidious + ) return changeInstance(url); + + if ( + alwaysUsePreferred && frontend == 'piped' && + (isInvidious || isPiped) && !isCheckedPiped + ) return changeInstance(url); + if (!targets.some((rx) => rx.test(url.href))) return null; - if (details.type != "main_frame" && details.frameAncestors && details.frameAncestors.length > 0 && isException(new URL(details.frameAncestors[0].url))) { + if ( + details.type != "main_frame" && + details.frameAncestors && details.frameAncestors.length > 0 && + isException(new URL(details.frameAncestors[0].url)) + ) { console.log(`Canceled ${url.href}`, details.frameAncestors[0].url) return null; } @@ -366,11 +355,10 @@ function redirect(url, details, initiator) { let instancesList; if (protocol == 'normal') instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects]; else if (protocol == 'tor') instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]; - if (instancesList.length === 0) return null; let randomInstance = commonHelper.getRandomInstance(instancesList); - return `${randomInstance}${url.pathname.replace("/shorts/", "/watch?v=")}${url.search}`; + return `${randomInstance}${url.pathname}${url.search}`; } else if ( frontend == 'piped' || @@ -389,7 +377,7 @@ function redirect(url, details, initiator) { if (instancesList.length === 0) return null; let randomInstance = commonHelper.getRandomInstance(instancesList); - return `${randomInstance}${url.pathname.replace("/shorts/", "/watch?v=")}${url.search}`; + return `${randomInstance}${url.pathname}${url.search}`; } return 'CANCEL'; } @@ -612,7 +600,7 @@ async function init() { "pipedTorRedirectsChecks", "pipedTorCustomRedirects", - "alwaysusePreferred", + "alwaysUsePreferred", "youtubeEmbedFrontend", "youtubeProtocol", @@ -653,7 +641,7 @@ async function init() { persistInvidiousPrefs = result.persistInvidiousPrefs ?? false; - alwaysusePreferred = result.alwaysusePreferred ?? true; + alwaysUsePreferred = result.alwaysUsePreferred ?? true; bypassWatchOnYoutube = result.bypassWatchOnYoutube ?? true; @@ -746,9 +734,6 @@ export default { getPipedTorCustomRedirects, setPipedTorCustomRedirects, - getAlwaysusePreferred, - setAlwaysusePreferred, - getExceptions, setExceptions, isException, |