diff --git a/_locales/en/messages.json b/_locales/en/messages.json
index 7ebbc3ab..e31a5741 100644
--- a/_locales/en/messages.json
+++ b/_locales/en/messages.json
@@ -344,5 +344,11 @@
},
"keybindCurrentlySet": {
"message": ". It is currently set to:"
+ },
+ "supportInvidious": {
+ "message": "Support Invidious"
+ },
+ "supportInvidiousDescription": {
+ "message": "Invidious (invidio.us) is a third party YouTube client. To enable support, you must accept the extra permissions."
}
}
diff --git a/manifest.json b/manifest.json
index a287db2b..175ed2e9 100644
--- a/manifest.json
+++ b/manifest.json
@@ -8,9 +8,7 @@
{
"matches": [
"https://*.youtube.com/*",
- "https://www.youtube-nocookie.com/embed/*",
- "https://*.invidio.us/*",
- "https://*.invidiou.sh/*"
+ "https://www.youtube-nocookie.com/embed/*"
],
"all_frames": true,
"js": [
@@ -46,7 +44,12 @@
"permissions": [
"storage",
"notifications",
- "https://sponsor.ajay.app/*"
+ "https://sponsor.ajay.app/*",
+ "https://*.invidio.us/*"
+ ],
+ "optional_permissions": [
+ "declarativeContent",
+ "https://*/*"
],
"browser_action": {
"default_title": "__MSG_Name__",
diff --git a/options/options.html b/options/options.html
index 45983d58..943c3c80 100644
--- a/options/options.html
+++ b/options/options.html
@@ -20,7 +20,23 @@
__MSG_Options__
-
+
+
+
+
+
+
+
+
__MSG_supportInvidiousDescription__
+
+
+
+
diff --git a/options/options.js b/options/options.js
index d1fef77b..46fa4b70 100644
--- a/options/options.js
+++ b/options/options.js
@@ -16,21 +16,76 @@ async function init() {
let option = optionsElements[i].getAttribute("sync-option");
chrome.storage.sync.get([option], function(result) {
let optionResult = result[option];
- if (optionResult != undefined) {
- let checkbox = optionsElements[i].querySelector("input");
- checkbox.checked = optionResult;
+ let checkbox = optionsElements[i].querySelector("input");
+ let reverse = optionsElements[i].getAttribute("toggle-type") === "reverse";
- let reverse = optionsElements[i].getAttribute("toggle-type") === "reverse";
+ if (optionResult != undefined) {
+ checkbox.checked = optionResult;
if (reverse) {
optionsElements[i].querySelector("input").checked = !optionResult;
}
-
- checkbox.addEventListener("click", () =>{
- setOptionValue(option, reverse ? !checkbox.checked : checkbox.checked)
- });
}
+ checkbox.addEventListener("click", () =>{
+ setOptionValue(option, reverse ? !checkbox.checked : checkbox.checked);
+ // See if anything extra must be run
+ switch (option) {
+ case "supportInvidious":
+ if (checkbox.checked) {
+ // Request permission
+ chrome.permissions.request({
+ origins: ["https://*.invidio.us/*"],
+ permissions: ["declarativeContent"]
+ }, function (granted) {
+ if (granted) {
+ chrome.declarativeContent.onPageChanged.removeRules(["invidious"], function() {
+ // Add page rule
+ let rule = {
+ id: "invidious",
+ conditions: [
+ new chrome.declarativeContent.PageStateMatcher({
+ pageUrl: { urlMatches: "https://*.invidio.us/*" }
+ })
+ ],
+ actions: [new chrome.declarativeContent.RequestContentScript({
+ allFrames: true,
+ js: [
+ "config.js",
+ "utils/previewBar.js",
+ "utils/skipNotice.js",
+ "utils.js",
+ "content.js",
+ "popup.js"
+ ],
+ css: [
+ "content.css",
+ "./libs/Source+Sans+Pro.css",
+ "popup.css"
+ ]
+ })]
+ };
+
+ chrome.declarativeContent.onPageChanged.addRules([rule], console.log);
+ });
+ } else {
+ setOptionValue(option, false);
+ checkbox.checked = false;
+
+ chrome.declarativeContent.onPageChanged.removeRules(["invidious"]);
+ }
+ });
+ } else {
+ chrome.declarativeContent.onPageChanged.removeRules(["invidious"]);
+ chrome.permissions.remove({
+ origins: ["https://*.invidio.us/*"]
+ });
+ }
+
+ break;
+ }
+ });
+
checksLeft--;
});