Added youtube embed exceptions #46

This commit is contained in:
ManeraKai 2022-02-25 19:43:10 +03:00
parent 41ccec4783
commit 6ca6689936
No known key found for this signature in database
GPG Key ID: 5ABC31FFD562E337
5 changed files with 145 additions and 4 deletions

View File

@ -1,7 +1,6 @@
"use strict";
window.browser = window.browser || window.chrome;
let exceptions = {
"url": [],
"regex": [],

View File

@ -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,
};

View File

@ -50,8 +50,7 @@ browser.webRequest.onBeforeRequest.addListener(
if (exceptionsHelper.isException(url, initiator)) newUrl = null;
else if (youtubeMusicHelper.isYoutubeMusic(url, initiator)) newUrl = youtubeMusicHelper.redirect(url, details.type)
else if (youtubeHelper.isYoutube(url, initiator)) newUrl = youtubeHelper.redirect(url, details.type)
else if (youtubeHelper.isYoutube(url, initiator)) newUrl = youtubeHelper.redirect(url, details.type, details)
else if (twitterHelper.isTwitter(url, initiator)) newUrl = twitterHelper.redirect(url);

View File

@ -0,0 +1,80 @@
"use strict";
window.browser = window.browser || window.chrome;
import youtubeHelper from "../../../assets/javascripts/helpers/youtube/youtube.js";
let nameCustomInstanceInput = document.getElementById("exceptions-custom-instance");
let instanceTypeElement = document.getElementById("exceptions-custom-instance-type");
let instanceType = "url"
youtubeHelper.init().then(() => {
instanceTypeElement.addEventListener("change",
(event) => {
instanceType = event.target.options[instanceTypeElement.selectedIndex].value
if (instanceType == 'url') {
nameCustomInstanceInput.setAttribute("type", "url");
nameCustomInstanceInput.setAttribute("placeholder", "https://www.google.com");
}
else if (instanceType == 'regex') {
nameCustomInstanceInput.setAttribute("type", "text");
nameCustomInstanceInput.setAttribute("placeholder", "https?:\/\/(www\.|music|)youtube\.com\/watch\?v\=..*");
}
}
)
let exceptionsCustomInstances = youtubeHelper.getExceptions();
function calcExceptionsCustomInstances() {
console.log("exceptionsCustomInstances", exceptionsCustomInstances)
document.getElementById("exceptions-custom-checklist").innerHTML =
[...exceptionsCustomInstances.url, ...exceptionsCustomInstances.regex].map(
(x) => `<div>${x}<button class="add" id="clear-${x}">
<svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px"
fill="currentColor">
<path d="M0 0h24v24H0V0z" fill="none" />
<path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z" />
</svg>
</button>
</div>
<hr>`
).join('\n');
for (const x of [...exceptionsCustomInstances.url, ...exceptionsCustomInstances.regex]) {
document.getElementById(`clear-${x}`).addEventListener("click",
() => {
console.log(x);
let index;
index = exceptionsCustomInstances.url.indexOf(x);
if (index > -1)
exceptionsCustomInstances.url.splice(index, 1);
else {
index = exceptionsCustomInstances.regex.indexOf(x);
if (index > -1)
exceptionsCustomInstances.regex.splice(index, 1);
}
youtubeHelper.setExceptions(exceptionsCustomInstances);
calcExceptionsCustomInstances();
});
}
}
calcExceptionsCustomInstances();
document.getElementById("custom-exceptions-instance-form").addEventListener("submit", (event) => {
event.preventDefault();
let val
if (instanceType == 'url') {
if (nameCustomInstanceInput.validity.valid) {
let url = new URL(nameCustomInstanceInput.value);
val = `${url.protocol}//${url.host}`
if (!exceptionsCustomInstances.url.includes(val)) exceptionsCustomInstances.url.push(val)
}
} else if (instanceType == 'regex') {
val = nameCustomInstanceInput.value
if (val.trim() != '' && !exceptionsCustomInstances.regex.includes(val)) exceptionsCustomInstances.regex.push(val)
}
if (val) {
youtubeHelper.setExceptions(exceptionsCustomInstances);
console.log("exceptionsCustomInstances", exceptionsCustomInstances)
nameCustomInstanceInput.value = '';
}
calcExceptionsCustomInstances();
})
})

View File

@ -346,12 +346,41 @@
</div>
</div>
<hr>
<div class="some-block option-block">
<h4>Embed Exceptions</h4>
</div>
<form id="custom-exceptions-instance-form">
<div class="some-block option-block">
<div class="some-block" style="padding:0;">
<input id="exceptions-custom-instance" placeholder="https://www.google.com" type="url" />
&nbsp;
<select id="exceptions-custom-instance-type">
<option value="url">URL</option>
<option value="regex">Regex</option>
</select>
&nbsp;
</div>
<button type="submit" class="add" id="exceptions-add-instance">
<svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor">
<path d="M0 0h24v24H0V0z" fill="none" />
<path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" />
</svg>
</button>
</div>
</form>
<div class="checklist" id="exceptions-custom-checklist"></div>
</a>
</section>
</section>
<script type="module" src="../init.js"></script>
<script type="module" src="./youtube.js"></script>
<script type="module" src="./invidious.js"></script>
<script type="module" src="./piped.js"></script>
<script type="module" src="./embed-exceptions.js"></script>
<!-- <script src="../../assets/javascripts/localise.js"></script> -->
</body>