// ==UserScript==
// @name [ 2 in 1 ] The Best Youtube Downloader and End screen remover, [Download: 320Kbps MP3 / 4K MP4]
// @description Download any video and/or audio from youtube.com in HIGH Quality and remove annoying end-screens
// @homepage https://products.agarmen.com/
// @namespace https://agarmen.com/
// @version 1.7
// @date 2021-03-01
// @author #EMBER
// @compatible chrome
// @compatible firefox
// @compatible opera
// @compatible safari
// @icon https://www.google.com/s2/favicons?domain=youtube.com
// @match *://*.youtube.com/*
// @match *://*.yt-download.org/*
// ==/UserScript==
(function() {
'use strict';
let intvl, i = 0,
loop = 1E3;
document.body.onload = addConfirm;
let isYoutube = false;
const downUrl = "https://yt-download.org/api/button/mp";
const audioDownUrl = "https://ytmp3x.com/";
setInterval(function() {
if ((document.getElementById("polymer-app") || document.getElementById("masthead") || window.Polymer) && window.location.href.indexOf("watch?v=") > 0)
{
isYoutube = true;
callYoutube();
}
if(window.location.href.indexOf("yt-download") > 0)
callExternal();
}, loop);
function callYoutube()
{
if(document.getElementById("downloadBtn") == null)
addDownloadBtn();
if(document.getElementById("removedess") == null)
addESR();
if(document.getElementById("removedess") != null)
removeEndScreens("ytp-ce-element");
}
function callExternal()
{
if(document.getElementById("adblockalert") == null)
adBlockAlert();
}
function adBlockAlert()
{
let el = document.createElement("h1");
el.setAttribute("id", "adblockalert");
el.style.textAlign = "center";
el.style.fontWeight = "bold";
el.style.fontSize = "22px";
el.innerHTML = "*Attention: This is an external website and the contained ads in this site are not related to the script! Please use "+
"<a target=\"_blank\" style=\"color:blue\" href=\"https://adblockplus.org/\">AdBlock Plus</a> or any other ad blockers to download files without seeing ads!";
let rclass = document.getElementsByClassName('antialiased')[0];
rclass.insertBefore(el, document.getElementsByClassName('hero')[0]);
}
function removeEndScreens(className) {
let elements = document.getElementsByClassName(className);
let ress = document.getElementById("removedess");
while (elements.length > 0) {
if (elements[0].parentNode.removeChild(elements[0])) {
i++;
ress.innerHTML = '<span title="Total removed EndScreens: ' + i + '">[' + i + ']</span>';
console.log("Removed ES Count: " + i);
}
}
}
function DownloadConfirm(cond) {
let link = downUrl + (cond ? "3" : "4");
link += "?url="+ window.location.href;
window.open(link, '_blank');
return false;
}
function generateButton(text, color, eventListenerValue, titleText, isLeft) {
const btn = document.createElement("button");
btn.style.padding = "10px 20px";
btn.style.backgroundColor = color;
btn.style.color = "#fff";
btn.style.border = "none";
btn.style.borderRadius = "10px";
btn.style.position = "absolute";
btn.style.cursor = "pointer";
btn.style.fontSize = "16px";
btn.style.fontWeight = "bold";
btn.style.boxShadow = "0 2px 4px rgba(0,0,0,0.3)";
btn.innerText = text;
btn.title = titleText;
btn.addEventListener('click', () => { DownloadConfirm(eventListenerValue); });
if (isLeft) {
btn.style.left = "6px";
btn.style.bottom = "6px";
} else {
btn.style.right = "6px";
btn.style.bottom = "6px";
}
return btn;
}
function extClicked(e)
{
let link = audioDownUrl + getVidId(window.location.href);
window.open(link);
e.preventDefault();
return false;
}
function addConfirm(){
const div = document.createElement("div");
const br = document.createElement("br");
div.id = "confirmDiv";
div.setAttribute("draggable", "true");
div.style.display = "none";
div.style.textAlign = "center";
div.style.left = "50%";
div.style.top = "50%";
div.style.transform = "translate(-50%, -50%)";
div.style.padding = "20px";
div.style.zIndex = "500";
div.style.position = "fixed";
div.style.background = "linear-gradient(135deg, #659df7, #6e5df5)";
div.style.borderRadius = "20px";
div.style.boxShadow = "0 0 20px rgba(0, 0, 0, 0.3)";
div.style.width = "300px";
div.style.height = "150px";
div.style.fontFamily = "Arial, sans-serif";
div.style.color = "#fff";
div.style.fontSize = "16px";
div.style.lineHeight = "1.5";
div.style.overflow = "hidden";
makeElementDraggable(div);
const h1 = document.createElement("h1");
h1.innerText = "Download as";
h1.id = "downloadTitle";
h1.style.textAlign = "center";
const ext = document.createElement("a"); // Create an anchor element
ext.setAttribute("target", "_blank");
ext.setAttribute("style", "text-decoration:none;");
ext.setAttribute("href", "#");
ext.setAttribute("title", "Service provider: ytmp3x.com");
ext.textContent = "Cut and Download"; // Set text content
ext.style.fontSize = "14px";
ext.style.color = "#cfc7c6"; // Blue color
ext.style.cursor = "pointer";
ext.addEventListener('click', function(e) {
extClicked(e);
});
// Hover effect
ext.addEventListener('mouseenter', function() {
this.style.textDecoration = "underline";
});
ext.addEventListener('mouseleave', function() {
this.style.textDecoration = "none";
});
const closeBtn = document.createElement("span");
closeBtn.style.marginTop = "2";
closeBtn.style.marginRight = "2";
closeBtn.style.float = "right";
closeBtn.innerText = "✖";
closeBtn.style.fontWeight = "bold";
closeBtn.style.color = "red";
closeBtn.title = "Close switcher";
closeBtn.style.fontSize = "17px";
closeBtn.style.cursor = "pointer";
closeBtn.addEventListener('click', ()=>{div.style.display = 'none';});
const btnMp3 = generateButton("MP3","#cccc00", true, "Download as audio", true);
const btnMp4 = generateButton("MP4","#4d8a54", false, "Download as video", false);
div.appendChild(closeBtn);
div.appendChild(h1);
div.appendChild(btnMp3);
div.appendChild(br);
div.append(ext);
div.appendChild(btnMp4);
const content = document.getElementById("content");
const secDiv = document.getElementById("masthead-container");
if(content != null && div != null && secDiv != null)
content.insertBefore(div, secDiv);
}
function changeText() {
let ele = document.getElementById("removedess");
let size = "";
if (ele.style.fontSize === "14px")
size = "28px";
else
size = "14px";
ele.style.fontSize = size;
}
function clickDownload() {
let btn = $("#downloadBtn");
if (btn != null && !clicked)
btn.click();
clicked = false;
}
function addESR() {
console.log("ESR added");
let el = document.createElement("span");
el.id = "removedess";
el.style.textAlign = "center";
el.style.cursor = "pointer";
el.style.color = "#00FFFF";
el.style.fontSize = "28px";
el.addEventListener("click", changeText);
const downloadBtn = document.getElementById("downloadBtn");
if(downloadBtn !== null)
document.getElementById("owner").insertBefore(el, downloadBtn);
}
function writeTitle() {
let videohref = document.getElementById("videohref");
if (window.location.href != downUrl + getVidId()) {
videohref.title = getVideoName();
videohref.href = downUrl + getVidId();
}
return false;
}
function getVideoName() {
let title = null;
let subStart = 0;
let ret = null;
title = document.getElementsByTagName("title")[0].innerHTML;
ret = (title.length > 0) ? title.substring(subStart, title.length - 10) : "video";
return getLang() + " " + ret;
}
function getLang() {
let tx = "Download";
switch (document.documentElement.lang) {
case "en":
tx = "Download";
break;
case "ru":
tx = "Скачать";
break;
case "az":
tx = "Yüklə";
break;
}
return tx;
}
function getVidId(url) {
let video_id = window.location.search.split('v=')[1];
let ampPosition = video_id.indexOf('&');
if (ampPosition != -1) {
video_id = video_id.substring(0, ampPosition);
}
return url ? video_id : window.location;
}
function actionClick(){
let div = document.getElementById("confirmDiv");
if(div == null)
{
//alert("Confirmation DIV was not loaded correctly. Initializing...");
console.log("Confirmation DIV was not loaded correctly. Initializing...");
addConfirm();
actionClick();
return;
}
div.style.display = (div.style.display === "none") ? "block" : "none";
}
function addDownloadBtn() {
let buttonDiv = document.createElement("div");
buttonDiv.id = "downloadBtn";
buttonDiv.onmouseover = writeTitle;
let btn = document.createElement("button");
btn.id = "videohref";
btn.innerText = "Download";
btn.style.height = "38px";
btn.style.backgroundColor = 'rgb(3, 235, 161)';
btn.style.right = "10px";
btn.style.textAlign = "right";
btn.style.margin = "3px 3px";
btn.style.padding = "7px 10px";
btn.style.border = "0";
btn.style.cursor = "pointer";
btn.style.boxShadow = "0 2px 4px rgba(0,0,0,0.3)";
btn.style.borderRadius = "20px";
btn.style.fontFamily = "Tahoma";
btn.title = getVideoName();
btn.addEventListener('click', actionClick);
buttonDiv.appendChild(btn);
const subPanel = document.getElementById("owner");
const subBtn = document.getElementById("subscribe-button");
subPanel.insertBefore(buttonDiv, subBtn);
}
function makeElementDraggable(element) {
let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
element.onmousedown = dragMouseDown;
function dragMouseDown(e) {
if (e.button === 2 || e.button === 1 || e.target.tagName === 'BUTTON' || e.target.tagName === 'A' || e.target.tagName === 'SPAN') {
// If the target of the mousedown event is a button, a, span and right mouse button, prevent dragging
return;
}
e.preventDefault();
pos3 = e.clientX;
pos4 = e.clientY;
document.onmouseup = closeDragElement;
document.onmousemove = elementDrag;
element.style.cursor = "grabbing"; // Change cursor style when dragging starts
}
function elementDrag(e) {
e.preventDefault();
pos1 = pos3 - e.clientX;
pos2 = pos4 - e.clientY;
pos3 = e.clientX;
pos4 = e.clientY;
element.style.top = (element.offsetTop - pos2) + "px";
element.style.left = (element.offsetLeft - pos1) + "px";
}
function closeDragElement() {
document.onmouseup = null;
document.onmousemove = null;
element.style.cursor = "default";
}
}
// Script by #EMBER
})();