about summary refs log tree commit diff stats
path: root/src/assets/javascripts
diff options
context:
space:
mode:
authorManeraKai <manerakai@protonmail.com>2022-02-25 19:43:10 +0300
committerManeraKai <manerakai@protonmail.com>2022-02-25 19:43:10 +0300
commit6ca6689936b11570a82bcffa704e8eda35223b2a (patch)
tree5e4f9ad02fcb7ba76af282a95895e4ed7cac5c2f /src/assets/javascripts
parentAdded yatte #57 (diff)
downloadlibredirect-6ca6689936b11570a82bcffa704e8eda35223b2a.zip
Added youtube embed exceptions #46
Diffstat (limited to 'src/assets/javascripts')
-rw-r--r--src/assets/javascripts/helpers/exceptions.js1
-rw-r--r--src/assets/javascripts/helpers/youtube/youtube.js36
2 files changed, 35 insertions, 2 deletions
diff --git a/src/assets/javascripts/helpers/exceptions.js b/src/assets/javascripts/helpers/exceptions.js
index 5969cc4c..7c6e4798 100644
--- a/src/assets/javascripts/helpers/exceptions.js
+++ b/src/assets/javascripts/helpers/exceptions.js
@@ -1,7 +1,6 @@
 "use strict";
 window.browser = window.browser || window.chrome;
 
-
 let exceptions = {
     "url": [],
     "regex": [],
diff --git a/src/assets/javascripts/helpers/youtube/youtube.js b/src/assets/javascripts/helpers/youtube/youtube.js
index b10ceb76..55f18555 100644
--- a/src/assets/javascripts/helpers/youtube/youtube.js
+++ b/src/assets/javascripts/helpers/youtube/youtube.js
@@ -238,6 +238,28 @@ function setAlwaysusePreferred(val) {
   console.log("alwaysusePreferred: ", alwaysusePreferred)
 }
 
+let exceptions = {
+  "url": [],
+  "regex": [],
+};
+const getExceptions = () => exceptions;
+function setExceptions(val) {
+  exceptions = val;
+  browser.storage.local.set({ youtubeEmbedExceptions: val })
+  console.log("youtubeEmbedExceptions: ", val)
+}
+
+function isException(url) {
+  for (const item of exceptions.url) {
+    let protocolHost = `${url.protocol}//${url.host}`
+    console.log(item, protocolHost)
+    if (item == protocolHost) return true;
+  }
+  for (const item of exceptions.regex)
+    if (new RegExp(item).test(url.href)) return true;
+  return false;
+}
+
 function isYoutube(url, initiator) {
   if (disable) return false;
   if (
@@ -300,7 +322,11 @@ function isYoutube(url, initiator) {
     return isTargets
 }
 
-function redirect(url, type) {
+function redirect(url, type, details) {
+  if (type != "main_frame" && details.frameAncestors.length > 0 && isException(new URL(details.frameAncestors[0].url))) {
+    console.log(`Canceled ${url.href}`, details.frameAncestors[0].url)
+    return null;
+  }
   if (url.pathname.match(/iframe_api/) || url.pathname.match(/www-widgetapi/)) return null; // Don't redirect YouTube Player API.
 
   if (frontend == 'yatte' && type === "main_frame")
@@ -536,6 +562,8 @@ async function init() {
           "youtubeEmbedFrontend",
 
           "youtubeProtocol",
+
+          "youtubeEmbedExceptions"
         ],
         (result) => {
           redirects.invidious = dataJson.invidious;
@@ -572,6 +600,8 @@ async function init() {
 
           alwaysusePreferred = result.alwaysusePreferred ?? true;
 
+          if (result.youtubeEmbedExceptions) exceptions = result.youtubeEmbedExceptions;
+
           resolve();
         });
     });
@@ -660,5 +690,9 @@ export default {
   getAlwaysusePreferred,
   setAlwaysusePreferred,
 
+  getExceptions,
+  setExceptions,
+  isException,
+
   init,
 };