You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ytDownloader/public/index.js

169 lines
4.5 KiB
JavaScript

const videoToggle = document.getElementById("videoToggle");
const audioToggle = document.getElementById("audioToggle");
const incorrectMsg = document.getElementById("incorrectMsg");
const loadingMsg = document.getElementById("loadingWrapper")
function getInfo() {
incorrectMsg.textContent = "";
loadingMsg.style.display = "flex";
const url = document.getElementById("url").value;
const options = {
method: "POST",
body: "url=" + url,
headers: {
"Content-Type": "Application/x-www-form-urlencoded",
},
};
fetch("/", options)
.then((response) => response.json())
.then((data) => {
console.log(data.formats);
const urlElements = document.querySelectorAll(".url");
urlElements.forEach((element) => {
element.value = data.url;
});
if (data.status == true) {
loadingMsg.style.display = "none";
document.getElementById("hidden").style.display =
"inline-block";
document.getElementById("title").innerHTML =
"<b>Title</b>: " + data.title;
document.getElementById("videoList").style.display = "block";
videoToggle.style.backgroundColor = "rgb(67, 212, 164)";
for (let format of data.formats) {
let size = (Number(format.contentLength) / 1000000).toFixed(2)
size = size + " MB";
// For videos
if (format.hasVideo && format.contentLength && format.container == "mp4") {
const itag = format.itag;
const element =
"<option value='" +
itag +
"'>" +
format.qualityLabel +
" | " +
format.container +
" | " +
size +
"</option>";
document.getElementById(
"videoFormatSelect"
).innerHTML += element;
}
// For audios
else if(format.hasAudio && !format.hasVideo && format.audioBitrate)
{
const pattern = /^mp*4a[0-9.]+$/g;
let audioCodec;
const itag = format.itag;
if (pattern.test(format.audioCodec)) {
audioCodec = "mp4a";
} else {
audioCodec = format.audioCodec;
}
const element =
"<option value='" +
itag +
"'>" +
format.audioBitrate +
" kbps" +
" | " +
audioCodec +
" | " +
size +
"</option>";
document.getElementById(
"audioFormatSelect"
).innerHTML += element;
}
}
} else {
loadingMsg.style.display = "none";
incorrectMsg.textContent = "Some error has occured";
}
})
.catch((error) => {
if (error) {
loadingMsg.style.display = "none";
incorrectMsg.textContent = error;
}
});
}
document.getElementById("getInfo").addEventListener("click", (event) => {
getInfo();
});
document.getElementById("url").addEventListener("keypress", (event) => {
if (event.key == "Enter") {
getInfo();
}
});
videoToggle.addEventListener("click", (event) => {
videoToggle.style.backgroundColor = "rgb(67, 212, 164)";
audioToggle.style.backgroundColor = "rgb(108, 231, 190)";
document.getElementById("audioList").style.display = "none";
document.getElementById("videoList").style.display = "block";
});
audioToggle.addEventListener("click", (event) => {
audioToggle.style.backgroundColor = "rgb(67, 212, 164)";
videoToggle.style.backgroundColor = "rgb(108, 231, 190)";
document.getElementById("videoList").style.display = "none";
document.getElementById("audioList").style.display = "block";
});
// Toggle theme
let darkTheme = false;
let button = document.getElementById("themeToggle");
let circle = document.getElementById("themeToggleInside");
function toggle() {
if (darkTheme == false) {
circle.style.left = "25px";
button.style.backgroundColor = "rgb(80, 193, 238)";
darkTheme = true;
document.body.style.backgroundColor = "rgb(50,50,50)";
document.getElementById("hidden").style.backgroundColor = "rgb(143, 239, 207)"
document.body.style.color = "whitesmoke";
localStorage.setItem("theme", "dark");
} else {
circle.style.left = "0px";
darkTheme = false;
button.style.backgroundColor = "rgb(147, 174, 185)";
document.body.style.backgroundColor = "whitesmoke";
document.getElementById("hidden").style.backgroundColor = "rgb(203, 253, 236)"
document.body.style.color = "black";
localStorage.setItem("theme", "light");
}
}
const storageTheme = localStorage.getItem("theme");
if (storageTheme == "dark") {
darkTheme = false;
toggle();
} else if (storageTheme == "light") {
darkTheme = true;
toggle();
}
////
function clickAnimation(id) {
document.getElementById(id).style.animationName = "clickAnimation";
setTimeout(() => {
document.getElementById("getInfo").style.animationName = "";
}, 500);
}