From 8eca34b755bf7b97a962b6a4c5b064276a342742 Mon Sep 17 00:00:00 2001 From: Booteille Date: Sun, 17 Feb 2019 20:07:50 +0100 Subject: [PATCH] Add support for Invidious --- extension/manifest.json | 2 +- src/background.ts | 7 ++---- src/youtube.ts | 49 +++++++++++++++++++++++++---------------- 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/extension/manifest.json b/extension/manifest.json index bf1df3c..d5d8cfe 100644 --- a/extension/manifest.json +++ b/extension/manifest.json @@ -20,7 +20,7 @@ "scripts": ["dist/background.js", "dist/vendors.js"] }, "content_scripts": [{ - "matches": ["*://*.youtube.com/*"], + "matches": ["*://*.youtube.com/*", "*://*.invidio.us/*"], "js": ["dist/youtube.js", "dist/vendors.js"] }, { "matches": ["https://*/videos/watch/*"], diff --git a/src/background.ts b/src/background.ts index 43ec586..e28b782 100644 --- a/src/background.ts +++ b/src/background.ts @@ -42,6 +42,7 @@ const redirectYoutube = async (r) => { const isEmbed = r.url.indexOf('embed') >= 0; const query = isEmbed ? r.url.substr(r.url.lastIndexOf('/') + 1, 11) : r.url.substr(r.url.indexOf('?v=') + 3, 11); + const title = await getTitle(query); const video = await searchByName(title); const url = await getPeertubeVideoURL(video, prefs, isEmbed); @@ -50,8 +51,6 @@ const redirectYoutube = async (r) => { redirectUrl: url }; } - - throw new Error('No results.'); }; /** @@ -81,8 +80,6 @@ const redirectPeertube = async (r) => { redirectUrl: url }; } - - throw new Error('No results.'); }; const searchByName = query => new Promise(async (resolve, reject) => { @@ -109,7 +106,7 @@ browser.runtime.onMessage.addListener(function(message) { browser.webRequest.onBeforeRequest.addListener( redirectYoutube, - { urls: ['*://*.youtube.com/watch?v=*', '*://*.youtube.com/embed/*'] }, + { urls: ['*://*.youtube.com/watch?v=*', '*://*.youtube.com/embed/*', '*://*.invidio.us/watch?v=*', '*://*.invidio.us/embed/*'] }, ['blocking'] ); diff --git a/src/youtube.ts b/src/youtube.ts index 9d42e1d..1256881 100644 --- a/src/youtube.ts +++ b/src/youtube.ts @@ -22,7 +22,7 @@ import { MessageKind, RedirectType } from './types'; import Preferences from './preferences' const thumbnailURL = (host, path) => `https://${host}${path}`; - +const isYouTube = document.location.hostname === 'www.youtube.com'; const LINK_ID = 'peertube-link'; function searchVideo(query) { @@ -43,7 +43,9 @@ async function peertubeify(query: String) { const link = videoLink(url, video); removeVideoLink(); - document.querySelector('ytd-app').appendChild(link); + + const querySelector = isYouTube ? 'ytd-app' : '.pure-g'; + document.querySelector(querySelector).appendChild(link); }).catch(removeVideoLink); break; } @@ -53,23 +55,31 @@ async function peertubeify(query: String) { } } -const throttledPeertubeify = _.throttle(1000, peertubeify); -const observer = new MutationObserver(function(mutationsList) { - for (const mutation of mutationsList) { - if ((mutation.target as Element).classList.contains('ytp-title-link')) { - for (const node of mutation.addedNodes) { - if (node.nodeType == Node.TEXT_NODE) { - throttledPeertubeify(node.textContent); +if (isYouTube) { + const throttledPeertubeify = _.throttle(1000, peertubeify); + const observer = new MutationObserver(function(mutationsList) { + for (const mutation of mutationsList) { + if ((mutation.target as Element).classList.contains('ytp-title-link')) { + for (const node of mutation.addedNodes) { + if (node.nodeType == Node.TEXT_NODE) { + throttledPeertubeify(node.textContent); + } } } } - } -}); + }); -observer.observe(document.body, { - childList: true, - subtree: true, -}) + observer.observe(document.body, { + childList: true, + subtree: true, + }) +} else { + peertubeify(document.title.substring(0, document.title.indexOf(' - Invidious'))); +} + +const backgroundColor = isYouTube ? 'var(--yt-swatch-primary)' : '#fff'; +const buttonColor = isYouTube ? 'var(--yt-swatch-text)' : '#000'; +const textColor = isYouTube ? 'var(--yt-primary-text-color)' : '#000'; const videoLink = (url, video) => htmlToElement(`