aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--scripts-greasemonkey/README.md4
-rw-r--r--scripts-greasemonkey/invidio_embed.user.js82
2 files changed, 86 insertions, 0 deletions
diff --git a/scripts-greasemonkey/README.md b/scripts-greasemonkey/README.md
index 9912c7b..c72b9e1 100644
--- a/scripts-greasemonkey/README.md
+++ b/scripts-greasemonkey/README.md
@@ -13,3 +13,7 @@
- See [Invidious Proxy-Mode](invidio_proxy_mode.user.js)
[Install](https://libregit.org/heckyel/book/raw/branch/master/scripts-greasemonkey/invidio_proxy_mode.user.js)
+
+- See [Invidious Embed](invidio_embed.user.js)
+
+ [Install](https://libregit.org/heckyel/book/raw/branch/master/scripts-greasemonkey/invidio_embed.user.js)
diff --git a/scripts-greasemonkey/invidio_embed.user.js b/scripts-greasemonkey/invidio_embed.user.js
new file mode 100644
index 0000000..217333e
--- /dev/null
+++ b/scripts-greasemonkey/invidio_embed.user.js
@@ -0,0 +1,82 @@
+// ==UserScript==
+// @name Invidious embed
+// @namespace InvidiousEmbed
+// @author Jesús E.
+// @license GPL-3.0
+// @description Replace YouTube embeds with invidious instance
+// @homepageURL https://libregit.org/heckyel/book/src/branch/master/scripts-greasemonkey
+// @include *
+// @exclude /^http(s|)://(www[.]|)youtube[.]com/.*$/
+// @exclude /^http(s|)://(www[.]|)invidio[.]us/.*$/
+// @exclude /^http(s|)://(www[.]|proxy[.]|)invidious[.]snopyta[.]org/.*$/
+// @exclude /^http(s|)://(www[.]|)vid[.]wxzm[.]sx/.*$/
+// @exclude /^http(s|)://(www[.]|)invidious[.]kabi[.]tk/.*$/
+// @exclude /^http(s|)://(www[.]|)invidiou[.]sh/.*$/
+// @exclude /^http(s|)://(www[.]|)invidious[.]enkirton[.]net/.*$/
+// @exclude /^http(s|)://(www[.]|)tube[.]poal[.]co/.*$/
+// @exclude /^http(s|)://(www[.]|)invidious[.]13ad[.]de/.*$/
+// @version 1.0.0
+// @grant none
+// ==/UserScript==
+
+let instance = 'invidio.us' // set instance
+
+let i, j, k, index;
+let video_id, video_url, video_link;
+
+let risky_elements, risky_attributes, risky_node;
+let risky_tags = ["object", "embed", "iframe"];
+
+let bad_elements = [];
+let bad_ids = [];
+
+for (i = 0; i < risky_tags.length; i++) {
+ risky_elements = document.getElementsByTagName(risky_tags[i]);
+ for (j = 0; j < risky_elements.length; j++) {
+ index = 0;
+ risky_attributes = risky_elements[j].attributes;
+ for (k = 0; k < risky_attributes.length; k++) {
+ risky_node = risky_attributes[k].nodeValue;
+ if ((risky_node.indexOf("youtube.com") >= 0) || (risky_node.indexOf("ytimg.com") >= 0) || (risky_node.indexOf("youtube-nocookie.com") >= 0)) {
+ risky_elements[j].style.display = "none";
+ if (risky_node.indexOf("/v/") >= 0) {
+ index = risky_node.indexOf("/v/") + 3;
+ } else if (risky_node.indexOf("?v=") >= 0) {
+ index = risky_node.indexOf("?v=") + 3;
+ } else if (risky_node.indexOf("/embed/") >= 0) {
+ index = risky_node.indexOf("/embed/") + 7;
+ }
+ if (index > 0) {
+ video_id = risky_node.substring(index, index + 11);
+ bad_elements.push(risky_elements[j]);
+ bad_ids.push(video_id);
+ }
+ break;
+ }
+ }
+ }
+}
+
+for (i = 0; i < bad_ids.length; i++) {
+ video_id = bad_ids[i];
+ video_url = "//" + instance + "/embed/" + video_id;
+ video_link = document.createElement("iframe");
+ video_link.setAttribute("src", video_url);
+
+ // Set the width, if present
+ width = bad_elements[i].getAttribute("width");
+ if ( width !== null ) {
+ video_link.setAttribute("width", width);
+ }
+
+ // Set the height, if present
+ height = bad_elements[i].getAttribute("height");
+ if ( height !== null ) {
+ video_link.setAttribute("height", height);
+ }
+
+ video_link.setAttribute("frameborder", "0");
+ video_link.setAttribute("allowfullscreen", "1");
+
+ bad_elements[i].parentNode.replaceChild(video_link, bad_elements[i]);
+}