diff options
Diffstat (limited to 'src/assets')
-rw-r--r-- | src/assets/images/imdb.svg | 57 | ||||
-rw-r--r-- | src/assets/javascripts/general.js | 1 | ||||
-rw-r--r-- | src/assets/javascripts/imdb.js | 159 | ||||
-rw-r--r-- | src/assets/javascripts/utils.js | 4 |
4 files changed, 221 insertions, 0 deletions
diff --git a/src/assets/images/imdb.svg b/src/assets/images/imdb.svg new file mode 100644 index 00000000..a3f4103c --- /dev/null +++ b/src/assets/images/imdb.svg @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + width="946.47894" + height="946.47894" + viewBox="0 0 250.42255 250.42256" + version="1.1" + id="svg14" + sodipodi:docname="imdb.svg" + inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs18" /> + <sodipodi:namedview + id="namedview16" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + showgrid="false" + inkscape:zoom="0.6035" + inkscape:cx="400.9942" + inkscape:cy="501.24275" + inkscape:window-width="1888" + inkscape:window-height="1060" + inkscape:window-x="32" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="svg14" /> + <circle + style="fill:#f5c518;fill-opacity:1;stroke-width:0.529167" + id="path857" + cx="125.21127" + cy="125.21127" + r="125.21127" /> + <g + id="g12" + transform="translate(-7.0803833,59.065437)"> + <polygon + points="5,18 5,0 0,0 0,18 " + transform="matrix(4.1341143,0,0,4.1341143,33.07292,28.938814)" + id="polygon4" /> + <path + d="M 97.8649,28.938814 93.238682,63.70039 90.364307,44.793235 C 89.53087,38.737048 88.731526,33.452235 87.966151,28.938814 H 62.011715 V 103.35287 H 79.54712 l 0.06875,-49.138886 7.381547,49.138886 h 12.483968 l 7.007355,-50.222105 0.0516,50.222105 h 17.48438 V 28.938814 Z" + id="path6" /> + <path + d="M 132.29167,103.35287 V 28.938814 h 32.26493 c 7.29586,0 13.21033,5.870218 13.21033,13.132452 v 48.149153 c 0,7.252863 -5.90492,13.132451 -13.21033,13.132451 z m 24.11118,-61.021495 c -0.81984,-0.443125 -2.38842,-0.656562 -4.66989,-0.656562 v 48.827044 c 3.01225,0 4.86595,-0.541563 5.56108,-1.674062 0.69516,-1.116094 1.05156,-4.135938 1.05156,-9.0925 V 50.882203 c 0,-3.364562 -0.125,-5.514593 -0.35656,-6.466515 -0.23172,-0.951875 -0.74859,-1.641234 -1.58633,-2.084375 z" + id="path8" /> + <path + d="m 216.75124,47.570688 h 1.32125 c 7.42153,0 13.43787,5.811796 13.43787,12.972889 v 29.836405 c 0,7.16473 -6.01439,12.972888 -13.43787,12.972888 h -1.32125 c -4.54109,0 -8.55609,-2.17594 -10.98864,-5.505518 l -1.19047,4.549608 H 186.03519 V 28.938814 h 19.77896 v 23.897389 c 2.55559,-3.184828 6.49396,-5.265515 10.93714,-5.265515 z m -4.23473,36.286591 V 66.224718 c 0,-2.913469 -0.18704,-4.825437 -0.57672,-5.705547 -0.38969,-0.880156 -1.94505,-1.445156 -3.03607,-1.445156 -1.09109,0 -2.77353,0.459219 -3.10082,1.233125 v 5.917609 18.197155 5.73275 c 0.37406,0.849687 1.97864,1.322658 3.10082,1.322658 1.12219,0 2.75552,-0.457658 3.09841,-1.322658 0.34281,-0.865 0.51438,-2.974172 0.51438,-6.297344 z" + id="path10" /> + </g> +</svg> diff --git a/src/assets/javascripts/general.js b/src/assets/javascripts/general.js index 50d6ee33..4e8b7a7d 100644 --- a/src/assets/javascripts/general.js +++ b/src/assets/javascripts/general.js @@ -64,6 +64,7 @@ const allPopupFrontends = [ "wikipedia", "medium", "quora", + "imdb", "reuters", "peertube", "lbry", diff --git a/src/assets/javascripts/imdb.js b/src/assets/javascripts/imdb.js new file mode 100644 index 00000000..9b0efe42 --- /dev/null +++ b/src/assets/javascripts/imdb.js @@ -0,0 +1,159 @@ +window.browser = window.browser || window.chrome; + +import utils from './utils.js' + +const targets = [ + /^https?:\/{2}(www\.|)imdb\.com.*/ +]; + +let redirects = { + "libremdb": { + "normal": [], + "tor": [] + } +} +function setRedirects(val) { + browser.storage.local.get('cloudflareBlackList', r => { + redirects.libremdb = val; + libremdbNormalRedirectsChecks = [...redirects.libremdb.normal]; + for (const instance of r.cloudflareBlackList) { + const a = libremdbNormalRedirectsChecks.indexOf(instance); + if (a > -1) libremdbNormalRedirectsChecks.splice(a, 1); + } + browser.storage.local.set({ + imdbRedirects: redirects, + libremdbNormalRedirectsChecks + }) + }) +} + +let + disableImdb, + imdbProtocol, + imdbRedirects, + libremdbNormalRedirectsChecks, + libremdbNormalCustomRedirects, + libremdbTorRedirectsChecks, + libremdbTorCustomRedirects; + +function init() { + return new Promise(async resolve => { + browser.storage.local.get( + [ + "disableImdb", + "imdbProtocol", + "imdbRedirects", + "libremdbNormalRedirectsChecks", + "libremdbNormalCustomRedirects", + "libremdbTorRedirectsChecks", + "libremdbTorCustomRedirects", + ], + r => { + disableImdb = r.disableImdb; + imdbProtocol = r.imdbProtocol; + imdbRedirects = r.imdbRedirects; + libremdbNormalRedirectsChecks = r.libremdbNormalRedirectsChecks; + libremdbNormalCustomRedirects = r.libremdbNormalCustomRedirects; + libremdbTorRedirectsChecks = r.libremdbTorRedirectsChecks; + libremdbTorCustomRedirects = r.libremdbTorCustomRedirects; + resolve(); + } + ) + }) +} + +init(); +browser.storage.onChanged.addListener(init) + +function redirect(url, type, initiator) { + if (disableImdb) return; + if (url.pathname == "/") return; + if (type != "main_frame") return; + const all = [ + ...imdbRedirects.libremdb.normal, + ...libremdbNormalCustomRedirects + ]; + if (initiator && (all.includes(initiator.origin) || targets.includes(initiator.host))) return; + if (!targets.some(rx => rx.test(url.href))) return; + + let instancesList; + if (imdbProtocol == 'normal') instancesList = [...libremdbNormalRedirectsChecks, ...libremdbNormalCustomRedirects]; + if (imdbProtocol == 'tor') instancesList = [...libremdbTorRedirectsChecks, ...libremdbTorCustomRedirects]; + if (instancesList.length === 0) return; + + const randomInstance = utils.getRandomInstance(instancesList); + return `${randomInstance}${url.pathname}`; +} + +function reverse(url) { + return new Promise(async resolve => { + await init(); + let protocolHost = utils.protocolHost(url); + const all = [ + ...imdbRedirects.libremdb.normal, + ...imdbRedirects.libremdb.tor, + ...libremdbNormalCustomRedirects, + ...libremdbTorCustomRedirects + ]; + if (!all.includes(protocolHost)) { resolve(); return; } + + resolve(`https://imdb.com${url.pathname}${url.search}`); + }) +} + +function switchInstance(url) { + return new Promise(async resolve => { + await init(); + let protocolHost = utils.protocolHost(url); + const all = [ + ...imdbRedirects.libremdb.tor, + ...imdbRedirects.libremdb.normal, + + ...libremdbNormalCustomRedirects, + ...libremdbTorCustomRedirects, + ]; + if (!all.includes(protocolHost)) { resolve(); return; } + + let instancesList; + if (imdbProtocol == 'normal') instancesList = [...libremdbNormalCustomRedirects, ...libremdbNormalRedirectsChecks]; + else if (imdbProtocol == 'tor') instancesList = [...libremdbTorCustomRedirects, ...libremdbTorRedirectsChecks]; + + const i = instancesList.indexOf(protocolHost); + if (i > -1) instancesList.splice(i, 1); + if (instancesList.length === 0) { resolve(); return; } + + const randomInstance = utils.getRandomInstance(instancesList); + resolve(`${randomInstance}${url.pathname}${url.search}`); + }) +} + +function initDefaults() { + return new Promise(async resolve => { + fetch('/instances/data.json').then(response => response.text()).then(async data => { + let dataJson = JSON.parse(data); + redirects.libremdb = dataJson.libremdb; + browser.storage.local.set({ + disableImdb: false, + imdbProtocol: "normal", + + imdbRedirects: redirects, + + libremdbNormalRedirectsChecks: [...redirects.libremdb.normal], + libremdbNormalCustomRedirects: [], + + libremdbTorRedirectsChecks: [...redirects.libremdb.tor], + libremdbTorCustomRedirects: [], + }, () => resolve()); + }); + }) +} + +export default { + setRedirects, + + redirect, + reverse, + switchInstance, + + initDefaults +}; diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index 53a5bb2e..0b8bfe41 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -12,6 +12,7 @@ import lbryHelper from "./lbry.js"; import sendTargetsHelper from "./sendTargets.js"; import tiktokHelper from "./tiktok.js"; import quoraHelper from "./quora.js" +import libremdbHelper from "./imdb.js"; import imgurHelper from "./imgur.js"; import localise from './localise.js' @@ -49,6 +50,7 @@ function updateInstances() { wikipediaHelper.setRedirects(instances.wikiless); mediumHelper.setRedirects(instances.scribe); quoraHelper.setRedirects(instances.query); + libremdbHelper.setRedirects(instances.libremdb); sendTargetsHelper.setRedirects(instances.send); tiktokHelper.setRedirects(instances.proxiTok); @@ -366,6 +368,7 @@ function copyRaw(test, copyRawElement) { if (!newUrl) newUrl = await instagramHelper.reverse(url); if (!newUrl) newUrl = await tiktokHelper.reverse(url); if (!newUrl) newUrl = await quoraHelper.reverse(url); + if (!newUrl) newUrl = await libremdbHelper.reverse(url); if (!newUrl) newUrl = await imgurHelper.reverse(url); if (newUrl) { @@ -439,6 +442,7 @@ function switchInstance(test) { if (!newUrl) newUrl = await translateHelper.switchInstance(url); if (!newUrl) newUrl = await mediumHelper.switchInstance(url); if (!newUrl) newUrl = await quoraHelper.switchInstance(url); + if (!newUrl) newUrl = await libremdbHelper.switchInstance(url); if (!newUrl) newUrl = await tiktokHelper.switchInstance(url); if (!newUrl) newUrl = await sendTargetsHelper.switchInstance(url); if (!newUrl) newUrl = await peertubeHelper.switchInstance(url); |