// ==UserScript==
// @name Erweiterung (download button)für das gesehende videos ausblenden oder makieren
// @namespace http://tampermonkey.net/
// @version 1.0
// @description Diese erweiterung erstellt einen Download Button um direkt Videos von youtube zu laden,
// oder sie werden auf eine dritt seite weitergeleitet wo nsie das Yputube Video runterladen können.
// ACHTUNG: Dieses Script läuft nur mit meinen Userscript "Bastis Youtube Multi Script,gesehende videos ausblenden oder makieren",
// was in den nächsten Tagen Online kommt.
// Zu den Hauptscript kann dieses Script einfach eingebunden werden und das Hauptscript hat eine Funktion mehr.
// Alle Neue einstellmöglichkeiten der erweiterungen können in das Hauptmenü des Hauptscriptes eingestellt werden.
// @author basti1012
// @allFrames true
// @run-at document-end
// @license MIT License
// @noframes
// @include *youtube.com/watch?v=*
// @grant none
// ==/UserScript==
var start4 = performance.now();
if(!array_localsdtorage){
var array_localsdtorage=[];
}
if(!erweiterungs_einstellungs_array){
var erweiterungs_einstellungs_array=[];
}
if(!array_script){
var array_script=[];
}
if(!localStorage.getItem('download_einblenden')){
localStorage.setItem('download_einblenden',true);
}
if(!localStorage.getItem('download_from_fremdserver')){
localStorage.setItem('download_from_fremdserver',true);
}
array_localsdtorage.push(["download_einblenden", false],["download_from_fremdserver",true]);
function download_einblenden_anzeigen(){
if(localStorage.getItem('download_einblenden')=='true'){
if(location.href.indexOf('youtube.com/watch?')!=-1 || location.href.indexOf('youtu.be/')!=-1){
function download(){
var id = window.location.search.split('v=')[1];
let hrefDownload ='https://en.loader.to/4/?link=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D'+ id + '3&f=6&s=1&e=1&r=ddownr'
window.open(hrefDownload, '_blank');
}
const styleTag = document.createElement('style');
styleTag.innerHTML = `
div#download_tooltip {
margin: -100px 0 0 -120px;
position: absolute;
line-height: 12px;
border-radius: 5px;
display:none;
padding: 5px;
width: 150px;
z-index: 11111;
background: rgba(2,2,2,0.8);
color: white;
}
button#www:hover #download_tooltip {
display:block;
}`;
document.body.appendChild(styleTag);
function download1(swb,videoTitle){
var p=0;
const apiUrl = 'https://co.wuk.sh/api/json';
const requestData = {
url: window.location.href
};
const xhr = new XMLHttpRequest();
xhr.open('POST', apiUrl, true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.setRequestHeader('Accept', 'application/json');
console.log("sending request");
xhr.onreadystatechange = function(){
if(xhr.readyState === 4){
if(xhr.status >= 200 && xhr.status < 300) {
const responseData = JSON.parse(xhr.responseText);
console.log('Response data: ' + JSON.stringify(responseData.url));
createButton(elm,'green','Download success <br> Status : '+xhr.status+' <br> Text : '+xhr.text,1)
setTimeout(function() {
var a_elem= document.createElement('a');
a_elem.id="eee";
a_elem.href = responseData.url;
a_elem.download = videoTitle+'.mp4';
document.getElementsByTagName('body')[0].appendChild(a2);
a_elem.click();
// document.getElementById("eee").click();
},1000)
}else{
createButton(elm,'red','Download error '+xhr.status+' <br> Text : '+xhr.text,1)
}
}
};
xhr.onerror = function() {
console.error('Network error');
createButton(elm,'red','Network error '+xhr.status+' <br> Text : '+xhr.text,1)
};
xhr.success = function() {
};
if (p==0) {
p++
xhr.send(JSON.stringify(requestData));
return;
}
}
function createButton(elm,farbe,videoTitle,j){
const swb = document.createElement('button');
swb.classList.add('ytp-button');
swb.classList.add('downloadBTN');
swb.id="www";
if (j!=1) {
if(localStorage.getItem('download_from_fremdserver')=='true'){
swb.onclick = download;
}else{
swb.onclick = download1;
}
}
swb.innerHTML=svg(farbe)
elm.appendChild(swb);
create_div(swb,videoTitle)
}
function create_div(swb,Text){
const div_element = document.createElement('div');
div_element.id='download_tooltip';
if(Text!=''){
div_element.innerHTML=Text;
}else{
div_element.innerHTML=titel_holen();
}
swb.appendChild(div_element);
}
function svg(farbe){
var svg_ele= `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 320">
<rect width="100%" height="100%" fill="none"/>
<polyline points="86 110 128 152 170 110" fill="#fff" stroke="${farbe}" stroke-linecap="round" stroke-linejoin="round" stroke-width="24"/>
<line x1="128" y1="40" x2="128" y2="152" fill="#fff" stroke="${farbe}" stroke-linecap="round" stroke-linejoin="round" stroke-width="24"/>
<path d="M216,152v56a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V152" fill="none" stroke="${farbe}" stroke-linecap="round" stroke-linejoin="round" stroke-width="24"/>
</svg>`;
return svg_ele;
}
function titel_holen(){
return document.getElementById("above-the-fold").querySelector("#title").innerText == null ? window.location.toString() : document.getElementById("above-the-fold").querySelector("#title").innerText;
}
function url_mutation(elm){
let previousUrl = '';
// console.log(previousUrl)
const observer = new MutationObserver(function(mutations) {
if (location.href !== previousUrl) {
previousUrl = location.href;
document.getElementById("www").remove();
setTimeout(function() {
// if(localStorage.getItem('download_from_fremdserver')=='true'){
createButton(elm,'white','',2);
// }else{
// createButton(elm,'white','',2);
// }
},3000)
}
});
const config = {subtree: true, childList: true};
observer.observe(document, config);
}
function waitForElm(selector) {
return new Promise(resolve => {
if (document.querySelector(selector)) {
return resolve(document.querySelector(selector));
}
const observer = new MutationObserver(mutations => {
if (document.querySelector(selector)) {
observer.disconnect();
resolve(document.querySelector(selector));
}
});
observer.observe(document.body, {
childList: true,
subtree: true
});
});
}
waitForElm('.ytp-right-controls').then((elm) => {
if(localStorage.getItem('download_from_fremdserver')=='true'){
createButton(elm,'white',titel_holen(),2);
url_mutation(elm)
}else{
// createButton(elm,'white',titel_holen());
// url_mutation(elm)
function createButton1(elm,videoTitle){
createButton(elm,'yellow',titel_holen(),1);
if (videoTitle =='') {
setTimeout(function() {
createButton(elm,'blue','Kein Downloadlink gefunden',2)
}, 10000);
console.log("Kein Downloadlink gefunden");
}else{
createButton(elm,'orange','Klicken um zu downloaden von<br>'+titel_holen(),2);
//swb.addEventListener("click",function(){
// download1(swb,videoTitle);
// swb.removeEventListener("click",download1,false);
//
// })
}
// console.log(url_mutation(elm,titel_holen()))
url_mutation(elm,titel_holen())
}
createButton1(elm,titel_holen())
}
})
return 4;
}else{
return 5;
}
return 1;
}else{
return 2;
}
return 3;
}
var download_einblenden_an=download_einblenden_anzeigen();
if(download_einblenden_an==1){
console.log('%c download button aktiviert'+ (performance.now() - start4) + ' ms.','color:green');
}else if(download_einblenden_an==2){
console.log('%c download button deaktiviert'+ (performance.now() - start4) + ' ms.','color:orange');
}else if(download_einblenden_an==3){
console.log('%c cFunctidownload button gerufen error '+ (performance.now() - start4) + ' ms.','color:red');
}else if(download_einblenden_an==4){
console.log('%c download button Watch Seite'+ (performance.now() - start4) + ' ms.','color:green');
}else if(download_einblenden_an==5){
console.log('%c download button Keine watch seite'+ (performance.now() - start4) + ' ms.','color:orange');
}