2021-10-03 08:54:20 +00:00
|
|
|
// Context Menu items
|
|
|
|
|
|
|
|
const goHome = () => {
|
|
|
|
goHomeAjax();
|
|
|
|
}
|
|
|
|
|
|
|
|
const downloadItem = (eve) => {
|
|
|
|
let elm = active_card.querySelector('a');
|
|
|
|
elm.click();
|
|
|
|
}
|
|
|
|
|
|
|
|
const deleteItem = (eve) => {
|
2021-10-14 06:24:48 +00:00
|
|
|
if (active_card == null) {
|
|
|
|
let text = "No card hovered over to delete!";
|
|
|
|
let type = "danger";
|
|
|
|
displayMessage(text, type, 3);
|
|
|
|
return ;
|
|
|
|
}
|
|
|
|
|
|
|
|
let elm = active_card.querySelector('[hash]'); // With attribute named "hash"
|
2021-10-03 08:54:20 +00:00
|
|
|
let elm2 = active_card.querySelector('[title]'); // With attribute named "title"
|
|
|
|
const hash = elm.getAttribute("hash");
|
|
|
|
const title = elm2.getAttribute("title");
|
|
|
|
|
|
|
|
let res = confirm("Delete: " + title + " ?");
|
|
|
|
if (res == true) {
|
|
|
|
deleteItemAjax(hash);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Header menu items
|
2021-09-28 22:37:20 +00:00
|
|
|
const reloadDirectory = () => {
|
|
|
|
const target = document.getElementById('refresh-btn');
|
|
|
|
const hash = target.getAttribute("hash");
|
|
|
|
listFilesAjax(hash);
|
|
|
|
}
|
2021-02-08 02:07:13 +00:00
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
const goUpADirectory = () => {
|
2021-10-03 08:54:20 +00:00
|
|
|
const target = document.getElementById('back-btn');
|
2021-09-28 22:37:20 +00:00
|
|
|
const hash = target.getAttribute("hash");
|
|
|
|
listFilesAjax(hash);
|
|
|
|
}
|
2021-02-18 03:27:34 +00:00
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
const scrollFilesToTop = () => {
|
|
|
|
const target = document.getElementById('files');
|
|
|
|
target.scrollIntoView();
|
2021-02-18 03:27:34 +00:00
|
|
|
}
|
2021-02-08 08:02:14 +00:00
|
|
|
|
2021-02-18 01:28:53 +00:00
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
const closeFile = () => {
|
2022-09-05 20:34:18 +00:00
|
|
|
const video = document.getElementById("video");
|
|
|
|
const trailerPlayer = document.getElementById("trailerPlayer")
|
|
|
|
let title = document.getElementById("selectedFile");
|
2021-02-18 01:28:53 +00:00
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
document.getElementById("image-viewer").style.display = "none";
|
|
|
|
document.getElementById("text-viewer").style.display = "none";
|
|
|
|
document.getElementById("pdf-viewer").style.display = "none";
|
|
|
|
|
|
|
|
title.innerText = "";
|
|
|
|
video.style.display = "none";
|
|
|
|
video.style.cursor = '';
|
|
|
|
video.pause();
|
2022-09-05 20:34:18 +00:00
|
|
|
|
|
|
|
trailerPlayer.src = "#";
|
|
|
|
trailerPlayer.style.display = "none";
|
2023-02-06 23:49:53 +00:00
|
|
|
clearSelectedActiveMedia();
|
2023-02-05 23:44:03 +00:00
|
|
|
clearModalFades();
|
2021-02-18 01:28:53 +00:00
|
|
|
}
|
|
|
|
|
2023-02-06 23:49:53 +00:00
|
|
|
const showFile = async (title, hash, extension, type, target=null) => {
|
2021-09-28 22:37:20 +00:00
|
|
|
document.getElementById("image-viewer").style.display = "none";
|
|
|
|
document.getElementById("text-viewer").style.display = "none";
|
|
|
|
document.getElementById("pdf-viewer").style.display = "none";
|
|
|
|
document.getElementById("video").style.display = "none";
|
2022-09-05 20:34:18 +00:00
|
|
|
document.getElementById("trailerPlayer").style.display = "none";
|
2021-02-18 01:28:53 +00:00
|
|
|
|
2022-09-05 20:34:18 +00:00
|
|
|
let titleElm = document.getElementById("selectedFile");
|
|
|
|
titleElm.innerText = title;
|
2021-09-28 22:37:20 +00:00
|
|
|
|
|
|
|
if (type === "video") {
|
|
|
|
setupVideo(hash, extension);
|
2023-02-06 23:49:53 +00:00
|
|
|
setSelectedActiveMedia(target);
|
2021-09-28 22:37:20 +00:00
|
|
|
}
|
2023-02-06 23:49:53 +00:00
|
|
|
if (type === "file") {
|
2021-09-28 22:37:20 +00:00
|
|
|
setupFile(hash, extension);
|
2021-02-08 08:02:14 +00:00
|
|
|
}
|
2022-09-05 20:34:18 +00:00
|
|
|
if (type === "trailer") {
|
|
|
|
launchTrailer(hash);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const launchTrailer = (link) => {
|
|
|
|
let modal = new bootstrap.Modal(document.getElementById('file-view-modal'), { keyboard: false });
|
|
|
|
let trailerPlayer = document.getElementById("trailerPlayer");
|
|
|
|
trailerPlayer.style.display = "";
|
|
|
|
trailerPlayer.src = link;
|
|
|
|
|
|
|
|
modal.show();
|
2021-02-08 08:02:14 +00:00
|
|
|
}
|
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
const setupVideo = async (hash, extension) => {
|
2022-09-05 20:34:18 +00:00
|
|
|
let modal = new bootstrap.Modal(document.getElementById('file-view-modal'), { keyboard: false });
|
2021-09-28 22:37:20 +00:00
|
|
|
let video = document.getElementById("video");
|
|
|
|
video.poster = "static/imgs/icons/loading.gif";
|
|
|
|
video.style.display = "";
|
|
|
|
video.src = "#"
|
|
|
|
video_path = "api/file-manager-action/files/" + hash;
|
|
|
|
|
2023-02-06 23:49:53 +00:00
|
|
|
clearSelectedActiveMedia();
|
2021-09-28 22:37:20 +00:00
|
|
|
try {
|
|
|
|
if ((/\.(avi|mkv|wmv|flv|f4v|mov|m4v|mpg|mpeg|mp4|webm|mp3|flac|ogg)$/i).test(extension)) {
|
|
|
|
if ((/\.(avi|mkv|wmv|flv|f4v)$/i).test(extension)) {
|
|
|
|
data = await fetchData( "api/file-manager-action/remux/" + hash );
|
|
|
|
if ( data.hasOwnProperty('path') ) {
|
|
|
|
video_path = data.path;
|
|
|
|
} else {
|
2023-02-06 23:49:53 +00:00
|
|
|
displayMessage(data.message.text, data.message.type);
|
|
|
|
return;
|
2021-09-28 22:37:20 +00:00
|
|
|
}
|
|
|
|
} else if ((/\.(flv|mov|m4v|mpg|mpeg)$/i).test(extension)) {
|
|
|
|
modal.hide();
|
|
|
|
openWithLocalProgram(hash, extension);
|
2023-02-06 23:49:53 +00:00
|
|
|
return;
|
2021-09-28 22:37:20 +00:00
|
|
|
}
|
|
|
|
}
|
2021-02-08 08:02:14 +00:00
|
|
|
|
2023-02-07 03:36:49 +00:00
|
|
|
video.src = video_path;
|
2021-09-28 22:37:20 +00:00
|
|
|
modal.show();
|
|
|
|
} catch (e) {
|
|
|
|
video.style.display = "none";
|
|
|
|
console.log(e);
|
|
|
|
}
|
2021-02-08 08:02:14 +00:00
|
|
|
}
|
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
const setupFile = async (hash, extension) => {
|
|
|
|
let viewer = null;
|
|
|
|
let type = "local";
|
|
|
|
let modal = new bootstrap.Modal(document.getElementById('file-view-modal'), { keyboard: false });
|
2021-02-08 08:02:14 +00:00
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
if ((/\.(png|jpg|jpeg|gif|ico)$/i).test(extension)) {
|
|
|
|
type = "image";
|
|
|
|
viewer = document.getElementById("image-viewer");
|
|
|
|
}
|
|
|
|
if ((/\.(txt|text|sh|cfg|conf)$/i).test(extension)) {
|
|
|
|
type = "text";
|
|
|
|
viewer = document.getElementById("text-viewer");
|
|
|
|
}
|
|
|
|
if ((/\.(mp3|ogg|flac)$/i).test(extension)) {
|
|
|
|
type = "music";
|
|
|
|
viewer = document.getElementById("video");
|
|
|
|
}
|
|
|
|
if ((/\.(pdf)$/i).test(extension)) {
|
|
|
|
type = "pdf";
|
|
|
|
viewer = document.getElementById("pdf-viewer");
|
|
|
|
}
|
2021-02-08 08:02:14 +00:00
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
if (type !== "text" && type !== "local" ) {
|
|
|
|
modal.show();
|
|
|
|
let response = await fetch("api/file-manager-action/files/" + hash);
|
|
|
|
let src_obj = URL.createObjectURL(await response.blob()); // IE10+
|
|
|
|
viewer.src = src_obj;
|
2021-02-08 08:02:14 +00:00
|
|
|
}
|
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
if (type == "text") {
|
|
|
|
let response = await fetch("api/file-manager-action/files/" + hash);
|
|
|
|
let textData = await response.text(); // IE10+
|
|
|
|
viewer.innerText = textData;
|
2021-02-08 08:02:14 +00:00
|
|
|
}
|
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
if (type !== "local") {
|
|
|
|
viewer.style.display = "";
|
|
|
|
modal.show();
|
|
|
|
}
|
2021-02-08 08:02:14 +00:00
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
if (type == "local") {
|
|
|
|
openWithLocalProgram(hash);
|
|
|
|
}
|
2021-02-08 08:02:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
const openWithLocalProgram = async (hash, extension = "") => {
|
|
|
|
const url = "api/file-manager-action/run-locally/" + hash;
|
|
|
|
const data = await fetchData(url);
|
|
|
|
let message = data.message;
|
|
|
|
displayMessage(message.text, message.type, 3);
|
2021-02-08 07:15:38 +00:00
|
|
|
}
|
2021-02-08 02:07:13 +00:00
|
|
|
|
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
const searchPage = () => {
|
|
|
|
const query = document.getElementById('search-files-field').value.toLowerCase();
|
|
|
|
const list = document.getElementById("files").querySelectorAll("li[title]");
|
|
|
|
const size = list.length;
|
2021-02-08 08:02:14 +00:00
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
for (var i = 0; i < size; i++) {
|
|
|
|
if (!list[i].title.toLowerCase().includes(query)) {
|
|
|
|
list[i].style.display = "none";
|
|
|
|
} else {
|
|
|
|
list[i].style.display = "";
|
2021-02-08 08:02:14 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
const clearSearch = () => {
|
|
|
|
const list = document.getElementById("files").querySelectorAll("li[title]");
|
|
|
|
const size = list.length;
|
|
|
|
|
|
|
|
document.getElementById('search-files-field').value = "";
|
|
|
|
for (var i = 0; i < size; i++) {
|
|
|
|
list[i].style.display = "";
|
2021-02-08 08:02:14 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-02-10 02:40:58 +00:00
|
|
|
const loadThumbnails = () => {
|
|
|
|
fetchData("api/get-thumbnails").then((data) => {
|
|
|
|
const cards_imgs = document.body.querySelectorAll('.card-image');
|
|
|
|
const thumbnails = data["thumbnails"]
|
|
|
|
for (var i = 0; i < cards_imgs.length; i++) {
|
|
|
|
cards_imgs[i].src = "static/imgs/thumbnails/" + thumbnails[i][0] + ".jpg?d=" + Date.now();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
const loadBackgroundPoster = () => {
|
|
|
|
fetchData("api/get-background-poster-trailer").then((data) => {
|
|
|
|
if (data.hasOwnProperty("trailer")) {
|
|
|
|
let trailerBttn = document.getElementById("trailer-btn");
|
|
|
|
let trailerLink = document.getElementById("trailer-link");
|
|
|
|
if (data.trailer !== null) {
|
|
|
|
trailerBttn.style.display = "";
|
|
|
|
trailerLink.href = `javascript: showFile( "Trailer", "${data.trailer}", "", "trailer" )`;
|
|
|
|
} else {
|
|
|
|
trailerBttn.style.display = "none";
|
|
|
|
trailerLink.href = "#";
|
|
|
|
}
|
|
|
|
|
|
|
|
if (data.poster !== null) {
|
|
|
|
background_image = "api/file-manager-action/files/000.jpg?d=" + Date.now();
|
|
|
|
updateBackground(background_image, false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2021-02-08 02:07:13 +00:00
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
const updateBackground = (srcLink, isvideo = true) => {
|
|
|
|
try {
|
2023-02-07 03:36:49 +00:00
|
|
|
const elm = document.getElementById("bg");
|
|
|
|
setBackgroundElement(elm, srcLink);
|
2021-09-28 22:37:20 +00:00
|
|
|
} catch (e) { }
|
|
|
|
}
|
2021-02-08 02:07:13 +00:00
|
|
|
|
2021-02-09 00:36:55 +00:00
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
const manageFavorites = (elm) => {
|
|
|
|
const classType = "btn-info";
|
|
|
|
const hasClass = elm.classList.contains(classType);
|
|
|
|
if (hasClass) {
|
|
|
|
elm.classList.remove(classType);
|
|
|
|
action = "delete";
|
|
|
|
} else {
|
|
|
|
elm.classList.add(classType);
|
|
|
|
action = "add";
|
2021-02-18 03:27:34 +00:00
|
|
|
}
|
2021-02-09 00:36:55 +00:00
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
manageFavoritesAjax(action);
|
|
|
|
}
|
2021-02-09 00:36:55 +00:00
|
|
|
|
2021-02-18 03:27:34 +00:00
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
const loadFavorite = (id) => {
|
|
|
|
loadFavoriteLink(id);
|
|
|
|
document.getElementById("favorites-modal")
|
|
|
|
.getElementsByClassName("modal-footer")[0]
|
|
|
|
.children[0].click()
|
|
|
|
}
|
2021-02-09 00:36:55 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2021-02-06 04:52:46 +00:00
|
|
|
// Message handler
|
|
|
|
const displayMessage = (message, type, timeout, msgWindow = "page-alert-zone") => {
|
|
|
|
let alertField = document.getElementById(msgWindow);
|
|
|
|
let divElm = document.createElement("DIV");
|
|
|
|
let btnElm = document.createElement("BUTTON");
|
|
|
|
let spnElm = document.createElement("SPAN");
|
|
|
|
let textElm = document.createTextNode(message);
|
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
divElm.setAttribute("class", "alert alert-dismissible fade show alert-" + type);
|
2021-02-06 04:52:46 +00:00
|
|
|
divElm.setAttribute("role", "alert");
|
|
|
|
divElm.appendChild(textElm);
|
|
|
|
btnElm.type = "button";
|
|
|
|
textElm = document.createTextNode("X");
|
2021-09-28 22:37:20 +00:00
|
|
|
btnElm.setAttribute("class", "btn-dark btn-close");
|
|
|
|
btnElm.setAttribute("data-bs-dismiss", "alert");
|
2021-02-06 04:52:46 +00:00
|
|
|
btnElm.setAttribute("aria-label", "close");
|
|
|
|
spnElm.setAttribute("aria-hidden", "true");
|
|
|
|
spnElm.appendChild(textElm);
|
|
|
|
btnElm.appendChild(spnElm);
|
|
|
|
divElm.appendChild(btnElm);
|
|
|
|
alertField.appendChild(divElm);
|
|
|
|
|
|
|
|
if (timeout > 0) {
|
|
|
|
setTimeout(function () {
|
|
|
|
clearChildNodes(alertField);
|
|
|
|
}, timeout * 1000);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const clearChildNodes = (parent) => {
|
|
|
|
while (parent.firstChild) {
|
|
|
|
parent.removeChild(parent.firstChild);
|
|
|
|
}
|
|
|
|
}
|
2021-09-28 22:37:20 +00:00
|
|
|
|
2023-02-05 23:44:03 +00:00
|
|
|
const clearModalFades = (elm) => {
|
|
|
|
let elms = document.getElementsByClassName('modal-backdrop fade show');
|
|
|
|
for (var i = 0; i < elms.length; i++) {
|
|
|
|
elms[i].remove();
|
|
|
|
}
|
|
|
|
}
|
2021-09-28 22:37:20 +00:00
|
|
|
|
2023-02-06 23:49:53 +00:00
|
|
|
const clearPlaylistMode = () => {
|
|
|
|
const playListState = document.getElementById("playlist-mode-btn");
|
|
|
|
if (playListState.checked) { playListState.click(); }
|
|
|
|
}
|
|
|
|
|
|
|
|
const setSelectedActiveMedia = (elm) => {
|
|
|
|
clearSelectedActiveMedia();
|
|
|
|
|
|
|
|
let card = elm;
|
|
|
|
while (card.parentElement) {
|
|
|
|
if (!card.classList.contains("card")) {
|
|
|
|
card = card.parentElement;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
break
|
|
|
|
}
|
2023-02-07 03:36:49 +00:00
|
|
|
card.classList.add("selected-active-media");
|
2023-02-06 23:49:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
const clearSelectedActiveMedia = () => {
|
|
|
|
try {
|
2023-02-07 03:36:49 +00:00
|
|
|
const elm = document.getElementsByClassName('selected-active-media')[0];
|
|
|
|
elm.classList.remove("selected-active-media");
|
2023-02-06 23:49:53 +00:00
|
|
|
} catch (e) {}
|
|
|
|
}
|
|
|
|
|
2021-09-28 22:37:20 +00:00
|
|
|
// Cache Buster
|
|
|
|
const clearCache = () => {
|
|
|
|
const rep = /.*\?.*/;
|
|
|
|
let links = document.getElementsByTagName('link'),
|
|
|
|
scripts = document.getElementsByTagName('script'),
|
|
|
|
video = document.getElementsByTagName('video'),
|
|
|
|
process_scripts = false;
|
|
|
|
|
|
|
|
for (let i = 0; i < links.length; i++) {
|
|
|
|
let link = links[i],
|
|
|
|
href = link.href;
|
|
|
|
if(rep.test(href)) {
|
|
|
|
link.href = href + '&' + Date.now();
|
|
|
|
} else {
|
|
|
|
link.href = href + '?' + Date.now();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
if(process_scripts) {
|
|
|
|
for (let i = 0; i < scripts.length; i++) {
|
|
|
|
let script = scripts[i],
|
|
|
|
src = script.src;
|
|
|
|
if(rep.test(src)) {
|
|
|
|
script.src = src+'&'+Date.now();
|
|
|
|
} else {
|
|
|
|
script.src = src+'?'+Date.now();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|