Merge branch 'current' into fix-hold-various-picker
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
const version = 37;
|
||||
const version = 41;
|
||||
|
||||
const ua = navigator.userAgent.toLowerCase();
|
||||
const isIOS = ua.match("iphone os");
|
||||
@@ -17,7 +17,8 @@ const switchers = {
|
||||
"aFormat": ["mp3", "best", "ogg", "wav", "opus"],
|
||||
"dubLang": ["original", "auto"],
|
||||
"vimeoDash": ["false", "true"],
|
||||
"audioMode": ["false", "true"]
|
||||
"audioMode": ["false", "true"],
|
||||
"filenamePattern": ["classic", "pretty", "basic", "nerdy"]
|
||||
};
|
||||
const checkboxes = [
|
||||
"alwaysVisibleButton",
|
||||
@@ -29,18 +30,25 @@ const checkboxes = [
|
||||
"reduceTransparency",
|
||||
"disableAnimations",
|
||||
"disableMetadata",
|
||||
"twitterGif",
|
||||
];
|
||||
const exceptions = { // used for mobile devices
|
||||
"vQuality": "720"
|
||||
};
|
||||
const bottomPopups = ["error", "download"]
|
||||
const bottomPopups = ["error", "download"];
|
||||
|
||||
const pageQuery = new URLSearchParams(window.location.search);
|
||||
|
||||
let store = {};
|
||||
|
||||
function changeAPI(url) {
|
||||
apiURL = url;
|
||||
function fixApiUrl(url) {
|
||||
return url.endsWith('/') ? url.slice(0, -1) : url
|
||||
}
|
||||
|
||||
let apiURL = fixApiUrl(defaultApiUrl);
|
||||
|
||||
function changeApi(url) {
|
||||
apiURL = fixApiUrl(url);
|
||||
return true
|
||||
}
|
||||
function eid(id) {
|
||||
@@ -127,6 +135,8 @@ function detectColorScheme() {
|
||||
document.documentElement.setAttribute("data-theme", theme);
|
||||
}
|
||||
function changeTab(evnt, tabId, tabClass) {
|
||||
if (tabId === "tab-settings-other") updateFilenamePreview();
|
||||
|
||||
let tabcontent = document.getElementsByClassName(`tab-content-${tabClass}`);
|
||||
let tablinks = document.getElementsByClassName(`tab-${tabClass}`);
|
||||
|
||||
@@ -194,7 +204,7 @@ function popup(type, action, text) {
|
||||
store.isPopupOpen = true;
|
||||
switch (type) {
|
||||
case "about":
|
||||
let tabId = sGet("seenAbout") ? "changelog" : "about";
|
||||
let tabId = sGet("changelogStatus") !== `${version}` ? "changelog" : "about";
|
||||
if (text) tabId = text;
|
||||
eid(`tab-button-${type}-${tabId}`).click();
|
||||
break;
|
||||
@@ -211,11 +221,11 @@ function popup(type, action, text) {
|
||||
if (navigator.canShare) eid("pd-share").style.display = "flex";
|
||||
break;
|
||||
case "picker":
|
||||
eid("picker-title").innerHTML = loc.MediaPickerTitle;
|
||||
eid("picker-subtitle").innerHTML = isMobile ? loc.MediaPickerExplanationPhone : loc.MediaPickerExplanationPC;
|
||||
|
||||
switch (text.type) {
|
||||
case "images":
|
||||
eid("picker-title").innerHTML = loc.ImagePickerTitle;
|
||||
eid("picker-subtitle").innerHTML = isMobile ? loc.ImagePickerExplanationPhone : loc.ImagePickerExplanationPC;
|
||||
|
||||
eid("picker-holder").classList.remove("various");
|
||||
|
||||
eid("picker-download").href = text.audio;
|
||||
@@ -226,14 +236,11 @@ function popup(type, action, text) {
|
||||
`<a class="picker-image-container" ${
|
||||
isIOS ? `onClick="share('${text.arr[i]["url"]}')"` : `href="${text.arr[i]["url"]}" target="_blank"`
|
||||
}>` +
|
||||
`<img class="picker-image" src="${text.arr[i]["url"]}" onerror="this.parentNode.style.display='none'"></img>` +
|
||||
`<img class="picker-image" src="${text.arr[i]["url"]}" onerror="this.parentNode.style.display='none'">` +
|
||||
`</a>`
|
||||
}
|
||||
break;
|
||||
default:
|
||||
eid("picker-title").innerHTML = loc.MediaPickerTitle;
|
||||
eid("picker-subtitle").innerHTML = isMobile ? loc.MediaPickerExplanationPhone : loc.MediaPickerExplanationPC;
|
||||
|
||||
eid("picker-holder").classList.add("various");
|
||||
|
||||
for (let i in text.arr) {
|
||||
@@ -243,7 +250,7 @@ function popup(type, action, text) {
|
||||
}>` +
|
||||
`<div class="picker-element-name">${text.arr[i].type}</div>` +
|
||||
(text.arr[i].type === 'photo' ? '' : '<div class="imageBlock"></div>') +
|
||||
`<img class="picker-image" src="${text.arr[i]["thumb"]}" onerror="this.style.display='none'"></img>` +
|
||||
`<img class="picker-image" src="${text.arr[i]["thumb"]}" onerror="this.style.display='none'">` +
|
||||
`</a>`
|
||||
}
|
||||
eid("picker-download").classList.remove("visible");
|
||||
@@ -274,6 +281,7 @@ function changeSwitcher(li, b) {
|
||||
(switchers[li][i] === b) ? enable(`${li}-${b}`) : disable(`${li}-${switchers[li][i]}`)
|
||||
}
|
||||
if (li === "theme") detectColorScheme();
|
||||
if (li === "filenamePattern") updateFilenamePreview();
|
||||
} else {
|
||||
let pref = switchers[li][0];
|
||||
if (isMobile && exceptions[li]) pref = exceptions[li];
|
||||
@@ -292,28 +300,6 @@ function checkbox(action) {
|
||||
}
|
||||
action === "disableChangelog" && sGet(action) === "true" ? notificationCheck("disable") : notificationCheck();
|
||||
}
|
||||
function loadSettings() {
|
||||
if (sGet("alwaysVisibleButton") === "true") {
|
||||
eid("alwaysVisibleButton").checked = true;
|
||||
eid("download-button").value = '>>'
|
||||
eid("download-button").style.padding = '0 1rem';
|
||||
}
|
||||
if (sGet("downloadPopup") === "true" && !isIOS) {
|
||||
eid("downloadPopup").checked = true;
|
||||
}
|
||||
if (sGet("reduceTransparency") === "true" || isOldFirefox) {
|
||||
eid("cobalt-body").classList.add('no-transparency');
|
||||
}
|
||||
if (sGet("disableAnimations") === "true") {
|
||||
eid("cobalt-body").classList.add('no-animation');
|
||||
}
|
||||
for (let i = 0; i < checkboxes.length; i++) {
|
||||
if (sGet(checkboxes[i]) === "true") eid(checkboxes[i]).checked = true;
|
||||
}
|
||||
for (let i in switchers) {
|
||||
changeSwitcher(i, sGet(i))
|
||||
}
|
||||
}
|
||||
function changeButton(type, text) {
|
||||
switch (type) {
|
||||
case 0: //error
|
||||
@@ -370,8 +356,9 @@ async function download(url) {
|
||||
eid("url-clear").style.display = "none";
|
||||
eid("url-input-area").disabled = true;
|
||||
let req = {
|
||||
url: encodeURIComponent(url.split("&")[0].split('%')[0]),
|
||||
url,
|
||||
aFormat: sGet("aFormat").slice(0, 4),
|
||||
filenamePattern: sGet("filenamePattern"),
|
||||
dubLang: false
|
||||
}
|
||||
if (sGet("dubLang") === "auto") {
|
||||
@@ -392,6 +379,7 @@ async function download(url) {
|
||||
}
|
||||
|
||||
if (sGet("disableMetadata") === "true") req.disableMetadata = true;
|
||||
if (sGet("twitterGif") === "true") req.twitterGif = true;
|
||||
|
||||
let j = await fetch(`${apiURL}/api/json`, {
|
||||
method: "POST",
|
||||
@@ -434,9 +422,13 @@ async function download(url) {
|
||||
let jp = await res.json();
|
||||
if (jp.status === "continue") {
|
||||
changeDownloadButton(2, '>>>');
|
||||
if (isMobile || isSafari) {
|
||||
window.location.href = j.url;
|
||||
} else window.open(j.url, '_blank');
|
||||
if (sGet("downloadPopup") === "true") {
|
||||
popup('download', 1, j.url)
|
||||
} else {
|
||||
if (isMobile || isSafari) {
|
||||
window.location.href = j.url;
|
||||
} else window.open(j.url, '_blank');
|
||||
}
|
||||
setTimeout(() => { changeButton(1) }, 2500);
|
||||
} else {
|
||||
changeButton(0, jp.text);
|
||||
@@ -514,6 +506,73 @@ function unpackSettings(b64) {
|
||||
}
|
||||
return changed
|
||||
}
|
||||
function updateFilenamePreview() {
|
||||
let videoFilePreview = ``;
|
||||
let audioFilePreview = ``;
|
||||
let resMatch = {
|
||||
"max": "3840x2160",
|
||||
"2160": "3840x2160",
|
||||
"1440": "2560x1440",
|
||||
"1080": "1920x1080",
|
||||
"720": "1280x720",
|
||||
"480": "854x480",
|
||||
"360": "640x360",
|
||||
}
|
||||
// "dubLang"
|
||||
// sGet("muteAudio") === "true"
|
||||
switch(sGet("filenamePattern")) {
|
||||
case "classic":
|
||||
videoFilePreview = `youtube_yPYZpwSpKmA_${resMatch[sGet('vQuality')]}_${sGet('vCodec')}`
|
||||
+ `${sGet("muteAudio") === "true" ? "_mute" : ""}.${sGet('vCodec') === "vp9" ? 'webm' : 'mp4'}`;
|
||||
audioFilePreview = `youtube_yPYZpwSpKmA_audio.${sGet('aFormat') !== "best" ? sGet('aFormat') : 'opus'}`;
|
||||
break;
|
||||
case "pretty":
|
||||
videoFilePreview =
|
||||
`${loc.FilenamePreviewVideoTitle} `
|
||||
+ `(${sGet('vQuality') === "max" ? "2160p" : `${sGet('vQuality')}p`}, ${sGet('vCodec')}, `
|
||||
+ `${sGet("muteAudio") === "true" ? "mute, " : ""}youtube).${sGet('vCodec') === "vp9" ? 'webm' : 'mp4'}`;
|
||||
audioFilePreview = `${loc.FilenamePreviewAudioTitle} - ${loc.FilenamePreviewAudioAuthor} (soundcloud).${sGet('aFormat') !== "best" ? sGet('aFormat') : 'opus'}`;
|
||||
break;
|
||||
case "basic":
|
||||
videoFilePreview =
|
||||
`${loc.FilenamePreviewVideoTitle} `
|
||||
+ `(${sGet('vQuality') === "max" ? "2160p" : `${sGet('vQuality')}p`}, ${sGet('vCodec')}${sGet("muteAudio") === "true" ? " mute" : ""}).${sGet('vCodec') === "vp9" ? 'webm' : 'mp4'}`;
|
||||
audioFilePreview = `${loc.FilenamePreviewAudioTitle} - ${loc.FilenamePreviewAudioAuthor}.${sGet('aFormat') !== "best" ? sGet('aFormat') : 'opus'}`;
|
||||
break;
|
||||
case "nerdy":
|
||||
videoFilePreview =
|
||||
`${loc.FilenamePreviewVideoTitle} `
|
||||
+ `(${sGet('vQuality') === "max" ? "2160p" : `${sGet('vQuality')}p`}, ${sGet('vCodec')}, `
|
||||
+ `${sGet("muteAudio") === "true" ? "mute, " : ""}youtube, yPYZpwSpKmA).${sGet('vCodec') === "vp9" ? 'webm' : 'mp4'}`;
|
||||
audioFilePreview = `${loc.FilenamePreviewAudioTitle} - ${loc.FilenamePreviewAudioAuthor} (soundcloud, 1242868615).${sGet('aFormat') !== "best" ? sGet('aFormat') : 'opus'}`;
|
||||
break;
|
||||
}
|
||||
eid("video-filename-text").innerHTML = videoFilePreview
|
||||
eid("audio-filename-text").innerHTML = audioFilePreview
|
||||
}
|
||||
function loadSettings() {
|
||||
if (sGet("alwaysVisibleButton") === "true") {
|
||||
eid("alwaysVisibleButton").checked = true;
|
||||
eid("download-button").value = '>>'
|
||||
eid("download-button").style.padding = '0 1rem';
|
||||
}
|
||||
if (sGet("downloadPopup") === "true" && !isIOS) {
|
||||
eid("downloadPopup").checked = true;
|
||||
}
|
||||
if (sGet("reduceTransparency") === "true" || isOldFirefox) {
|
||||
eid("cobalt-body").classList.add('no-transparency');
|
||||
}
|
||||
if (sGet("disableAnimations") === "true") {
|
||||
eid("cobalt-body").classList.add('no-animation');
|
||||
}
|
||||
for (let i = 0; i < checkboxes.length; i++) {
|
||||
if (sGet(checkboxes[i]) === "true") eid(checkboxes[i]).checked = true;
|
||||
}
|
||||
for (let i in switchers) {
|
||||
changeSwitcher(i, sGet(i))
|
||||
}
|
||||
updateFilenamePreview()
|
||||
}
|
||||
window.onload = () => {
|
||||
loadCelebrationsEmoji();
|
||||
|
||||
@@ -541,9 +600,9 @@ window.onload = () => {
|
||||
if (setUn !== null) {
|
||||
if (setUn) {
|
||||
sSet("migrated", "true")
|
||||
eid("desc-migration").innerHTML += `<br/><br/>${loc.DataTransferSuccess}`
|
||||
eid("desc-migration").innerHTML += `<br><br>${loc.DataTransferSuccess}`
|
||||
} else {
|
||||
eid("desc-migration").innerHTML += `<br/><br/>${loc.DataTransferError}`
|
||||
eid("desc-migration").innerHTML += `<br><br>${loc.DataTransferError}`
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -554,6 +613,11 @@ window.onload = () => {
|
||||
window.history.replaceState(null, '', window.location.pathname);
|
||||
|
||||
notificationCheck();
|
||||
|
||||
// fix for animations not working in Safari
|
||||
if (isIOS) {
|
||||
document.addEventListener('touchstart', () => {}, true);
|
||||
}
|
||||
}
|
||||
eid("url-input-area").addEventListener("keydown", (e) => {
|
||||
button();
|
||||
@@ -563,9 +627,11 @@ eid("url-input-area").addEventListener("keyup", (e) => {
|
||||
})
|
||||
document.onkeydown = (e) => {
|
||||
if (!store.isPopupOpen) {
|
||||
if (e.ctrlKey || e.key === "/") eid("url-input-area").focus();
|
||||
if (e.metaKey || e.ctrlKey || e.key === "/") eid("url-input-area").focus();
|
||||
if (e.key === "Escape" || e.key === "Clear") clearInput();
|
||||
|
||||
if (e.target === eid("url-input-area")) return;
|
||||
|
||||
// top buttons
|
||||
if (e.key === "D") pasteClipboard();
|
||||
if (e.key === "K") changeSwitcher('audioMode', 'false');
|
||||
|
||||
Reference in New Issue
Block a user