about summary refs log tree commit diff stats
path: root/src/assets
diff options
context:
space:
mode:
Diffstat (limited to 'src/assets')
-rw-r--r--src/assets/images/imdb.svg57
-rw-r--r--src/assets/javascripts/general.js1
-rw-r--r--src/assets/javascripts/imdb.js159
-rw-r--r--src/assets/javascripts/utils.js4
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);