From 12467d1364bda88870203a5d5eb4e8820a464b69 Mon Sep 17 00:00:00 2001 From: Ricky Dane Perlick Date: Sat, 14 Dec 2024 23:39:48 +0100 Subject: [PATCH 1/4] added .xhtml, .html support for quick preview | fixed dual pane view --- src-tauri/Cargo.lock | 2 +- src-tauri/Cargo.toml | 2 +- src-tauri/src/main.rs | 17 +- src-tauri/tauri.conf.json | 2 +- ui/main_logic.js | 7704 +++++++++++++++++++------------------ ui/style.css | 5 +- ui/utils.js | 2 - 7 files changed, 3869 insertions(+), 3865 deletions(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index af7e911..d8e2b1f 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -4,7 +4,7 @@ version = 3 [[package]] name = "CoDriver" -version = "0.4.9" +version = "0.4.95" dependencies = [ "archiver-rs", "chrono", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index c977539..66bf4e6 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,7 +1,7 @@ # cargo-features = ["profile-rustflags"] [package] name = "CoDriver" -version = "0.4.9" +version = "0.4.95" description = "A simple file explorer" authors = ["Ricky Dane Perlick"] license = "BSD-2-Clause license" diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 74fd57b..1aa6934 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -1,7 +1,7 @@ // Prevents additional console window on Windows in release, DO NOT REMOVE!! #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] -use chrono::prelude::{DateTime, Utc}; -use copy_dir::copy_dir; +use chrono::prelude::DateTime; +use chrono::Local; #[allow(unused)] use delete::{delete_file, rapid_delete_dir_all}; use flate2::read::GzDecoder; @@ -520,12 +520,15 @@ async fn list_dirs() -> Vec { .nth(&path.split(".").count() - 1) .unwrap_or(""); let file_data = fs::metadata(&temp_item.path()); - let file_date: DateTime; + let file_date: DateTime; let size = temp_item.metadata().unwrap().len(); - if file_data.is_ok() { - file_date = file_data.unwrap().modified().unwrap().clone().into(); - } else { - file_date = Utc::now(); + match file_data { + Ok(file_data) => { + file_date = file_data.modified().unwrap().clone().into(); + } + Err(_) => { + file_date = Local::now(); + } } let is_dir_int = match temp_item.path().is_dir() { true => 1, diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 022eddf..e0c1871 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -8,7 +8,7 @@ }, "package": { "productName": "CoDriver", - "version": "0.4.9" + "version": "0.4.95" }, "tauri": { "bundle": { diff --git a/ui/main_logic.js b/ui/main_logic.js index 565667e..a6fb5db 100644 --- a/ui/main_logic.js +++ b/ui/main_logic.js @@ -29,24 +29,24 @@ getMatches().then((matches) => { // :drag / Dragging functionality async function startDrag(options, onEvent) { - ds.break(); - await invoke("plugin:drag|start_drag", { - item: options.item, - image: options.icon, - onEventFn: onEvent ? transformCallback(onEvent) : null, - }); + ds.break(); + await invoke("plugin:drag|start_drag", { + item: options.item, + image: options.icon, + onEventFn: onEvent ? transformCallback(onEvent) : null, + }); } const ds = new DragSelect({ - immediateDrag: false, + immediateDrag: false, }) ds.subscribe('DS:select', async (payload) => { - if (payload.item == SelectedElement || IsShiftDown === true || IsCtrlDown === true || IsMetaDown === true) return; - selectItem(payload.item, "", true); + if (payload.item == SelectedElement || IsShiftDown === true || IsCtrlDown === true || IsMetaDown === true) return; + selectItem(payload.item, "", true); }); ds.subscribe('DS:unselect', async (payload) => { - deSelectitem(payload.item); + deSelectitem(payload.item); }); /* region Global Variables */ @@ -143,20 +143,20 @@ let CurrentTheme = "0"; /* Upper right search bar logic */ document.querySelector(".search-bar-input").addEventListener("focusin", (e) => { - $(".file-searchbar").css("width", "250px"); - IsInputFocused = true; + $(".file-searchbar").css("width", "250px"); + IsInputFocused = true; }); document.querySelector(".search-bar-input").addEventListener("focusout", (e) => { - $(".file-searchbar").css("width", "200px"); - IsInputFocused = false; + $(".file-searchbar").css("width", "200px"); + IsInputFocused = false; }); document.querySelector(".search-bar-input").addEventListener("keyup", (e) => { - if (e.keyCode === 13) { - let fileName = $(".search-bar-input").val(); - searchFor(fileName); - } else if (e.keyCode === 27) { - cancelSearch(); - } + if (e.keyCode === 13) { + let fileName = $(".search-bar-input").val(); + searchFor(fileName); + } else if (e.keyCode === 27) { + cancelSearch(); + } }); /* Quicksearch for dual pane view */ @@ -168,7 +168,7 @@ async function startFullSearch() { $(".fullsearch-search-button").html(`
Stop - `); + `); document.querySelector(".fullsearch-search-button").addEventListener("click", async () => { await stopFullSearch(); }); @@ -194,7 +194,7 @@ async function stopFullSearch() { $(".fullsearch-search-button").html(`
Search - `); + `); document.querySelector(".fullsearch-search-button").addEventListener("click", async () => { await startFullSearch(); }); @@ -205,202 +205,202 @@ document.addEventListener("keydown", async (e) => { if (IsAltDown == true) return; if (IsMetaDown == true) return; if (IsCtrlDown == true) return; - if (e.key === "Escape") { - if (IsQuickSearchOpen == true) { - goUp(false, true); - } - await resetEverything(); - $(".search-bar-input").blur(); - // Close all popups etc. - ContextMenu.style.display = "none"; - if (DraggedOverElement != null) { - DraggedOverElement.style.opacity = "1"; - } - await stopSearching(); - document.querySelectorAll(".site-nav-bar-button").forEach((item) => { - item.style.opacity = "1"; - }); - } - if (IsInputFocused === false && - IsPopUpOpen === false && - IsMetaDown === false && - IsCtrlDown === false && - IsShiftDown === false && - !isShortcut(e.key) && - e.key != " " - ) { - CurrentQuickSearch += e.key; - $(".instant-search-input").css("display", "block"); - $(".instant-search-input").val(CurrentQuickSearch); - await searchFor(CurrentQuickSearch, 9999999, 1, true); - setTimeout(() => { - if (IsDualPaneEnabled === true) { - goUp(true); - } else { - goLeft(); - } - }, 250); - CurrentQuickSearchTime = TIMETORESET; - clearInterval(CurrentQuickSearchTimer); - resetQuickSearch(); - } + if (e.key === "Escape") { + if (IsQuickSearchOpen == true) { + goUp(false, true); + } + await resetEverything(); + $(".search-bar-input").blur(); + // Close all popups etc. + ContextMenu.style.display = "none"; + if (DraggedOverElement != null) { + DraggedOverElement.style.opacity = "1"; + } + await stopSearching(); + document.querySelectorAll(".site-nav-bar-button").forEach((item) => { + item.style.opacity = "1"; + }); + } + if (IsInputFocused === false && + IsPopUpOpen === false && + IsMetaDown === false && + IsCtrlDown === false && + IsShiftDown === false && + !isShortcut(e.key) && + e.key != " " + ) { + CurrentQuickSearch += e.key; + $(".instant-search-input").css("display", "block"); + $(".instant-search-input").val(CurrentQuickSearch); + await searchFor(CurrentQuickSearch, 9999999, 1, true); + setTimeout(() => { + if (IsDualPaneEnabled === true) { + goUp(true); + } else { + goLeft(); + } + }, 250); + CurrentQuickSearchTime = TIMETORESET; + clearInterval(CurrentQuickSearchTimer); + resetQuickSearch(); + } }); function resetQuickSearch() { - CurrentQuickSearchTimer = setInterval(() => { - if (CurrentQuickSearchTime <= 0) { - clearInterval(CurrentQuickSearchTimer); - CurrentQuickSearchTime = TIMETORESET; - CurrentQuickSearch = ""; - $(".instant-search-input").val(""); - $(".instant-search-input").css("display", "none"); - } else { - CurrentQuickSearchTime -= 50; - } - }, 100); + CurrentQuickSearchTimer = setInterval(() => { + if (CurrentQuickSearchTime <= 0) { + clearInterval(CurrentQuickSearchTimer); + CurrentQuickSearchTime = TIMETORESET; + CurrentQuickSearch = ""; + $(".instant-search-input").val(""); + $(".instant-search-input").css("display", "none"); + } else { + CurrentQuickSearchTime -= 50; + } + }, 100); } async function resetEverything() { closeLoadingPopup(); - closeSearchBar(); - closeSettings(); - closeFullSearchContainer(); - closeFtpConfig(); - closeItemPreview(); - closeMultiRenamePopup(); - closeCompressPopup(); - closeYtDownloadPopup(); - closeInfoProperties(); - resetProgressBar(); - closeInputDialogs(); - unSelectAllItems(); - closeConfirmPopup(); - closeCustomContextMenu(); + closeSearchBar(); + closeSettings(); + closeFullSearchContainer(); + closeFtpConfig(); + closeItemPreview(); + closeMultiRenamePopup(); + closeCompressPopup(); + closeYtDownloadPopup(); + closeInfoProperties(); + resetProgressBar(); + closeInputDialogs(); + unSelectAllItems(); + closeConfirmPopup(); + closeCustomContextMenu(); closeFindDuplicatesPopup(); - $(".popup-background").css("display", "none"); - IsPopUpOpen = false; - IsInputFocused = false; - IsDisableShortcuts = false; - if (ArrCopyItems.length == 0) { - IsCopyToCut = false; - } - $(".path-item")?.css("opacity", "1"); - $(".site-nav-bar-button").css("border", "1px solid transparent"); - $(".item-link").css("border", "1px solid transparent"); - $(".path-item").css("border", "1px solid transparent"); - CurrentQuickSearch = ""; - resetQuickSearch(); + $(".popup-background").css("display", "none"); + IsPopUpOpen = false; + IsInputFocused = false; + IsDisableShortcuts = false; + if (ArrCopyItems.length == 0) { + IsCopyToCut = false; + } + $(".path-item")?.css("opacity", "1"); + $(".site-nav-bar-button").css("border", "1px solid transparent"); + $(".item-link").css("border", "1px solid transparent"); + $(".path-item").css("border", "1px solid transparent"); + CurrentQuickSearch = ""; + resetQuickSearch(); } // Close context menu or new folder input dialog when click elsewhere document.addEventListener("mousedown", (e) => { - // Check if your click is outside of important elements - if ( - !e.target.classList.contains("context-item-icon") && - !e.target.classList.contains("context-item") && - !e.target.classList.contains("open-with-item") && - !e.target.classList.contains("input-dialog") && - !e.target.classList.contains("confirm-popup") && - !e.target.classList.contains("uni-popup") && - !e.target.classList.contains("popup-body") && - !e.target.classList.contains("popup-body-content") && - !e.target.classList.contains("directory-entry") && - !e.target.classList.contains("disk-item") && - !e.target.classList.contains("item-button") && - !e.target.classList.contains("item-button-list") && - !e.target.classList.contains("item-icon") && - !e.target.classList.contains("item-button-list-text") && - !e.target.classList.contains("item-button-list-info-span") && - !e.target.classList.contains("disk-item-top") && - !e.target.classList.contains("disk-info") && - !e.target.classList.contains("item-button-text") && - !e.target.classList.contains("item-preview-file-content") && - !e.target.classList.contains("popup-header") && - !e.target.classList.contains("item-preview-copy-path-button") - ) { - ContextMenu.style.display = "none"; - $(".extra-c-menu")?.remove(); - - // Reset context menu - resetContextMenu(); - - document - .querySelector(".c-item-duplicates") - .setAttribute("disabled", "true"); - document - .querySelector(".c-item-duplicates") - .classList.add("c-item-disabled"); - unSelectAllItems(); - if (DraggedOverElement != null) { - DraggedOverElement.style.filter = "none"; - } - // closeItemPreview(); - } - if (IsPopUpOpen === true && !e.target.classList.contains("input-dialog") && !e.target.classList.contains("input-dialog-headline") && !e.target.classList.contains("text-input")) { - closeInputDialogs(); + // Check if your click is outside of important elements + if ( + !e.target.classList.contains("context-item-icon") && + !e.target.classList.contains("context-item") && + !e.target.classList.contains("open-with-item") && + !e.target.classList.contains("input-dialog") && + !e.target.classList.contains("confirm-popup") && + !e.target.classList.contains("uni-popup") && + !e.target.classList.contains("popup-body") && + !e.target.classList.contains("popup-body-content") && + !e.target.classList.contains("directory-entry") && + !e.target.classList.contains("disk-item") && + !e.target.classList.contains("item-button") && + !e.target.classList.contains("item-button-list") && + !e.target.classList.contains("item-icon") && + !e.target.classList.contains("item-button-list-text") && + !e.target.classList.contains("item-button-list-info-span") && + !e.target.classList.contains("disk-item-top") && + !e.target.classList.contains("disk-info") && + !e.target.classList.contains("item-button-text") && + !e.target.classList.contains("item-preview-file-content") && + !e.target.classList.contains("popup-header") && + !e.target.classList.contains("item-preview-copy-path-button") + ) { + ContextMenu.style.display = "none"; + $(".extra-c-menu")?.remove(); + + // Reset context menu + resetContextMenu(); + + document + .querySelector(".c-item-duplicates") + .setAttribute("disabled", "true"); + document + .querySelector(".c-item-duplicates") + .classList.add("c-item-disabled"); + unSelectAllItems(); + if (DraggedOverElement != null) { + DraggedOverElement.style.filter = "none"; + } + // closeItemPreview(); + } + if (IsPopUpOpen === true && !e.target.classList.contains("input-dialog") && !e.target.classList.contains("input-dialog-headline") && !e.target.classList.contains("text-input")) { + closeInputDialogs(); IsInputFocused = false; - } - if (!e.target.classList.contains("c-item-custom")) { - closeCustomContextMenu(); - } - $(".site-nav-bar-button").css("border", "1px solid transparent"); - $(".item-link").css("border", "1px solid transparent"); - $(".path-item").css("border", "1px solid transparent"); + } + if (!e.target.classList.contains("c-item-custom")) { + closeCustomContextMenu(); + } + $(".site-nav-bar-button").css("border", "1px solid transparent"); + $(".item-link").css("border", "1px solid transparent"); + $(".path-item").css("border", "1px solid transparent"); }); // Open context menu for pasting for example // :context open document.addEventListener("contextmenu", (e) => { - e.preventDefault(); - if (IsPopUpOpen == false && IsInputFocused == false) { - ContextMenu.children[7].replaceWith( - ContextMenu.children[7].cloneNode(true), - ); - - positionContextMenu(e); - - ContextMenu.children[7].addEventListener( - "click", - function () { - createFileInputPrompt(e); - }, - { once: true }, - ); - - if (CopyFilePath == "") { - document.querySelector(".c-item-paste").setAttribute("disabled", "true"); - document.querySelector(".c-item-paste").classList.add("c-item-disabled"); - } else { - document.querySelector(".c-item-paste").removeAttribute("disabled"); - document - .querySelector(".c-item-paste") - .classList.remove("c-item-disabled"); - } - document - .querySelector(".c-item-ytdownload") - .replaceWith(document.querySelector(".c-item-ytdownload").cloneNode(true)); - document.querySelector(".c-item-ytdownload").addEventListener( - "click", - async () => { - await showYtDownload(); - }, - { once: true }, - ); - } + e.preventDefault(); + if (IsPopUpOpen == false && IsInputFocused == false) { + ContextMenu.children[7].replaceWith( + ContextMenu.children[7].cloneNode(true), + ); + + positionContextMenu(e); + + ContextMenu.children[7].addEventListener( + "click", + function () { + createFileInputPrompt(e); + }, + { once: true }, + ); + + if (CopyFilePath == "") { + document.querySelector(".c-item-paste").setAttribute("disabled", "true"); + document.querySelector(".c-item-paste").classList.add("c-item-disabled"); + } else { + document.querySelector(".c-item-paste").removeAttribute("disabled"); + document + .querySelector(".c-item-paste") + .classList.remove("c-item-disabled"); + } + document + .querySelector(".c-item-ytdownload") + .replaceWith(document.querySelector(".c-item-ytdownload").cloneNode(true)); + document.querySelector(".c-item-ytdownload").addEventListener( + "click", + async () => { + await showYtDownload(); + }, + { once: true }, + ); + } }); // Position contextmenu function positionContextMenu(e) { - ContextMenu.style.display = "flex"; + ContextMenu.style.display = "flex"; - // Horizontal position - if (ContextMenu.clientWidth + e.clientX >= window.innerWidth) { - ContextMenu.style.left = e.clientX - ContextMenu.clientWidth + "px"; - } else { - ContextMenu.style.left = e.clientX + "px"; - } + // Horizontal position + if (ContextMenu.clientWidth + e.clientX >= window.innerWidth) { + ContextMenu.style.left = e.clientX - ContextMenu.clientWidth + "px"; + } else { + ContextMenu.style.left = e.clientX + "px"; + } - // Vertical position + // Vertical position if (ContextMenu.offsetHeight + e.clientY <= window.innerHeight) { ContextMenu.style.top = e.clientY + "px"; ContextMenu.style.bottom = null; @@ -416,382 +416,382 @@ function positionContextMenu(e) { /* :shortcuts Shortcuts definition */ function isShortcut(key) { - if (key == "Meta" || - key == "Control" || - key == "Shift" || - key == "Alt" || - key == "CapsLock" || - key == "Enter" || - key == "Backspace" || - key == "Delete" || - key == "ArrowLeft" || - key == "ArrowRight" || - key == "ArrowUp" || - key == "ArrowDown" || - key == "Escape" || - key == "Tab" || - key == "F1" || - key == "F2" || - key == "F3" || - key == "F4" || - key == "F5" || - key == "F6" || - key == "F7" || - key == "F8" || - key == "F9" || - key == "F10" || - key == "F11" || - key == "F12" || - key == "F13" || - key == "Home" || - key == "End" || - key == "PageUp" || - key == "PageDown" || - key == "PrintScreen" || - key == "Insert" || - key == "Pause" || - key == "Help" || - key == "NumLock" || - key == "Clear" || - key == "ScrollLock" || - key == "+" || - key == "-" || - key == "*" || - key == "/" || - key == ",") { - return true; - } else { - return false; - } + if (key == "Meta" || + key == "Control" || + key == "Shift" || + key == "Alt" || + key == "CapsLock" || + key == "Enter" || + key == "Backspace" || + key == "Delete" || + key == "ArrowLeft" || + key == "ArrowRight" || + key == "ArrowUp" || + key == "ArrowDown" || + key == "Escape" || + key == "Tab" || + key == "F1" || + key == "F2" || + key == "F3" || + key == "F4" || + key == "F5" || + key == "F6" || + key == "F7" || + key == "F8" || + key == "F9" || + key == "F10" || + key == "F11" || + key == "F12" || + key == "F13" || + key == "Home" || + key == "End" || + key == "PageUp" || + key == "PageDown" || + key == "PrintScreen" || + key == "Insert" || + key == "Pause" || + key == "Help" || + key == "NumLock" || + key == "Clear" || + key == "ScrollLock" || + key == "+" || + key == "-" || + key == "*" || + key == "/" || + key == ",") { + return true; + } else { + return false; + } } document.onkeydown = async (e) => { - if (IsDisableShortcuts === false) { - // Shortcut for jumping to configured directory - if (e.metaKey && Platform == "darwin") IsMetaDown = true; - if (e.ctrlKey && Platform != "darwin") IsCtrlDown = true; - if (e.key == "Shift") IsShiftDown = true; - if (e.key == "Alt") IsAltDown = true; - if (e.altKey && e.code == "Digit1") { - if (ConfiguredPathOne == "") return; - openItem(null, SelectedItemPaneSide, ConfiguredPathOne); - } - if (e.altKey && e.code == "Digit2") { - if (ConfiguredPathTwo == "") return; - openItem(null, SelectedItemPaneSide, ConfiguredPathTwo); - } - if (e.altKey && e.code == "Digit3") { - if (ConfiguredPathThree == "") return; - openItem(null, SelectedItemPaneSide, ConfiguredPathThree); - } - - if ( - IsDualPaneEnabled == true && - IsDisableShortcuts == false && - IsPopUpOpen == false - ) { - // check if return is pressed - if (!e.altKey && e.keyCode == 13) { - e.preventDefault(); - e.stopPropagation(); - await openSelectedItem(); - } - // check if backspace is pressed - if (e.keyCode == 8 && IsPopUpOpen == false) { - goBack(); - e.preventDefault(); - e.stopPropagation(); - } - // check if lshift + f5 is pressed - if (e.shiftKey && e.key == "F5") { - e.preventDefault(); - e.stopPropagation(); - let isToMove = await confirm("Current selection will be moved over"); - if (isToMove == true) { - IsCopyToCut = true; - await pasteItem(); - IsShiftDown = false; - } - } - // check if f5 is pressed - else if (e.key == "F5" && IsTabsEnabled == false) { - e.preventDefault(); - e.stopPropagation(); - let isToCopy = await confirm("Current selection will be copied over"); - if (isToCopy == true) { - pasteItem(); - } - } - // check if arrow up is pressed - if (e.keyCode == 38) { - if (SelectedElement == null) { - goUp(false, true); - } else { - goUp(); - } - e.preventDefault(); - e.stopPropagation(); - } - // check if arrow down is pressed - if (e.keyCode == 40) { - e.preventDefault(); - e.stopPropagation(); - if (SelectedElement == null) { - goUp(false, true); - } else { - goDown(); - } - } - // check if tab is pressed - if (e.keyCode == 9) { - e.preventDefault(); - e.stopPropagation(); - goToOtherPane(); - } - if (IsPopUpOpen == false) { - // check if f8 is pressed - if (e.keyCode == 119) { - e.preventDefault(); - e.stopPropagation(); - openFullSearchContainer(); - } - } - if (e.key == "PageUp") { - goUp(); - goUp(); - e.preventDefault(); - e.stopPropagation(); - } - if (e.key == "PageDown") { - goDown(); - goDown(); - e.preventDefault(); - e.stopPropagation(); - } - } else if (IsItemPreviewOpen == true && IsDualPaneEnabled === true) { - // check if arrow up is pressed - if (e.keyCode == 38) { - goUp(); - e.preventDefault(); - e.stopPropagation(); - } - // check if arrow down is pressed - if (e.keyCode == 40) { - goDown(e); - e.preventDefault(); - e.stopPropagation(); - } - } - - // Check if cmd / ctrl + shift + c is pressed - if ( - ((Platform != "darwin" && IsCtrlDown && e.altKey) || - (Platform == "darwin" && e.shiftKey)) && - e.key == "c" - ) { - await writeText(CurrentDir); - showToast("Current dir path copied", ToastType.SUCCESS); - return; - } - // Check if cmd / ctrl + f is pressed - if (e.key == "f" && (e.ctrlKey || e.metaKey)) { + if (IsDisableShortcuts === false) { + // Shortcut for jumping to configured directory + if (e.metaKey && Platform == "darwin") IsMetaDown = true; + if (e.ctrlKey && Platform != "darwin") IsCtrlDown = true; + if (e.key == "Shift") IsShiftDown = true; + if (e.key == "Alt") IsAltDown = true; + if (e.altKey && e.code == "Digit1") { + if (ConfiguredPathOne == "") return; + openItem(null, SelectedItemPaneSide, ConfiguredPathOne); + } + if (e.altKey && e.code == "Digit2") { + if (ConfiguredPathTwo == "") return; + openItem(null, SelectedItemPaneSide, ConfiguredPathTwo); + } + if (e.altKey && e.code == "Digit3") { + if (ConfiguredPathThree == "") return; + openItem(null, SelectedItemPaneSide, ConfiguredPathThree); + } + + if ( + IsDualPaneEnabled == true && + IsDisableShortcuts == false && + IsPopUpOpen == false + ) { + // check if return is pressed + if (!e.altKey && e.keyCode == 13) { + e.preventDefault(); + e.stopPropagation(); + await openSelectedItem(); + } + // check if backspace is pressed + if (e.keyCode == 8 && IsPopUpOpen == false) { + goBack(); + e.preventDefault(); + e.stopPropagation(); + } + // check if lshift + f5 is pressed + if (e.shiftKey && e.key == "F5") { + e.preventDefault(); + e.stopPropagation(); + let isToMove = await confirm("Current selection will be moved over"); + if (isToMove == true) { + IsCopyToCut = true; + await pasteItem(); + IsShiftDown = false; + } + } + // check if f5 is pressed + else if (e.key == "F5" && IsTabsEnabled == false) { + e.preventDefault(); + e.stopPropagation(); + let isToCopy = await confirm("Current selection will be copied over"); + if (isToCopy == true) { + pasteItem(); + } + } + // check if arrow up is pressed + if (e.keyCode == 38) { + if (SelectedElement == null) { + goUp(false, true); + } else { + goUp(); + } + e.preventDefault(); + e.stopPropagation(); + } + // check if arrow down is pressed + if (e.keyCode == 40) { + e.preventDefault(); + e.stopPropagation(); + if (SelectedElement == null) { + goUp(false, true); + } else { + goDown(); + } + } + // check if tab is pressed + if (e.keyCode == 9) { + e.preventDefault(); + e.stopPropagation(); + goToOtherPane(); + } + if (IsPopUpOpen == false) { + // check if f8 is pressed + if (e.keyCode == 119) { + e.preventDefault(); + e.stopPropagation(); + openFullSearchContainer(); + } + } + if (e.key == "PageUp") { + goUp(); + goUp(); + e.preventDefault(); + e.stopPropagation(); + } + if (e.key == "PageDown") { + goDown(); + goDown(); + e.preventDefault(); + e.stopPropagation(); + } + } else if (IsItemPreviewOpen == true && IsDualPaneEnabled === true) { + // check if arrow up is pressed + if (e.keyCode == 38) { + goUp(); + e.preventDefault(); + e.stopPropagation(); + } + // check if arrow down is pressed + if (e.keyCode == 40) { + goDown(e); + e.preventDefault(); + e.stopPropagation(); + } + } + + // Check if cmd / ctrl + shift + c is pressed + if ( + ((Platform != "darwin" && IsCtrlDown && e.altKey) || + (Platform == "darwin" && e.shiftKey)) && + e.key == "c" + ) { + await writeText(CurrentDir); + showToast("Current dir path copied", ToastType.SUCCESS); + return; + } + // Check if cmd / ctrl + f is pressed + if (e.key == "f" && (e.ctrlKey || e.metaKey)) { if (IsDualPaneEnabled == true) return; - $(".search-bar-input").focus(); - IsInputFocused = true; - e.preventDefault(); - e.stopPropagation(); - } - // Check if space is pressed on selected item - if (e.key == " " && SelectedElement != null) { - e.preventDefault(); - e.stopPropagation(); - if (IsPopUpOpen == false && IsInputFocused == false && IsItemPreviewOpen == false) { - showItemPreview(SelectedElement); - } else { - closeItemPreview(); - } - } - - if (IsPopUpOpen == false) { - // check if del is pressed - if (IsInputFocused == false && (e.keyCode == 46 || (e.metaKey && e.keyCode == 8))) { - await deleteItems(); - closeLoadingPopup(); - await listDirectories(); - goUp(); - e.preventDefault(); - e.stopPropagation(); + $(".search-bar-input").focus(); + IsInputFocused = true; + e.preventDefault(); + e.stopPropagation(); + } + // Check if space is pressed on selected item + if (e.key == " " && SelectedElement != null) { + e.preventDefault(); + e.stopPropagation(); + if (IsPopUpOpen == false && IsInputFocused == false && IsItemPreviewOpen == false) { + showItemPreview(SelectedElement); + } else { + closeItemPreview(); + } + } + + if (IsPopUpOpen == false) { + // check if del is pressed + if (IsInputFocused == false && (e.keyCode == 46 || (e.metaKey && e.keyCode == 8))) { + await deleteItems(); + closeLoadingPopup(); + await listDirectories(); + goUp(); + e.preventDefault(); + e.stopPropagation(); return; - } - // Check if cmd / ctrl + a is pressed - if ( - ((e.ctrlKey && Platform != "darwin") || e.metaKey) && - e.key == "a" && - IsInputFocused === false && - IsPopUpOpen === false - ) { - if (IsDualPaneEnabled) { - if (SelectedItemPaneSide == "left") { - await unSelectAllItems(); - for (let i = 0; i < LeftPaneItemCollection.children.length; i++) { - selectItem(LeftPaneItemCollection.children[i]); - } - } else { - await unSelectAllItems(); - for (let i = 0; i < RightPaneItemCollection.children.length; i++) { - selectItem(RightPaneItemCollection.children[i]); - } - } - } else { - await unSelectAllItems(); - for (let i = 0; i < DirectoryList.children.length; i++) { - selectItem(DirectoryList.children[i]); - } - } - } - if ( - (e.altKey && e.key == "Enter") || - e.key == "F2" || - (Platform == "darwin" && - e.key == "Enter" && - IsDualPaneEnabled == false && - IsInputFocused == false) - ) { - // check if alt + enter is pressed - renameElementInputPrompt(SelectedElement); - } - // check if cmd / ctrl + r is pressed - if (((e.ctrlKey && Platform != "darwin") || e.metaKey) && e.key == "r") { - e.preventDefault(); - e.stopPropagation(); - await unSelectAllItems(); - refreshView(); - } - // check if cmd / ctrl + c is pressed - if ( - ((e.ctrlKey && Platform != "darwin") || e.metaKey) && - e.key == "c" && - IsInputFocused == false - ) { - copyItem(SelectedElement); - e.preventDefault(); - e.stopPropagation(); - } - // check if cmd / ctrl + x is pressed - if ( - ((e.ctrlKey && Platform != "darwin") || e.metaKey) && - e.key == "x" && - IsInputFocused == false - ) { - copyItem(SelectedElement, true); - e.preventDefault(); - e.stopPropagation(); - } - // check if cmd / ctrl + v is pressed - if ( - ((e.ctrlKey && Platform != "darwin") || e.metaKey) && - e.key == "v" && - IsInputFocused == false - ) { - pasteItem(); - e.preventDefault(); - e.stopPropagation(); - } - // check if cmd / ctrl + g is pressed | Path input - if (((e.ctrlKey && Platform != "darwin") || e.metaKey) && e.key == "g") { - showInputPopup("Input path to jump to"); - e.preventDefault(); - e.stopPropagation(); - } - // New folder input prompt when f7 is pressed - if (e.key == "F7") { - createFolderInputPrompt(); - e.preventDefault(); - e.stopPropagation(); - } - // New file input prompt when f6 is pressed - if (e.keyCode == 117) { - createFileInputPrompt(); - e.preventDefault(); - e.stopPropagation(); - } - // Disabled for instant quick search - // check if cmd / ctrl + s is pressed - // if ( - // ((e.ctrlKey && Platform != "darwin") || e.metaKey) && - // e.key === "s" && - // IsShowDisks == false - // ) { - // openSearchBar(); - // e.preventDefault(); - // e.stopPropagation(); - // } - - // check if ctrl / cmd + shift + m is pressed - if ( - ((e.ctrlKey && Platform != "darwin") || e.metaKey) && - e.shiftKey && - (e.key == "M" || e.key == "m") && - ArrSelectedItems.length >= 1 - ) { - showMultiRenamePopup(); - e.preventDefault(); - e.stopPropagation(); - } - - if (IsDualPaneEnabled === false) { - // check if return is pressed - if (!e.altKey && e.keyCode == 13 && Platform != "darwin") { - await openSelectedItem(); - e.preventDefault(); - e.stopPropagation(); - } - // check if backspace is pressed - if (e.keyCode == 8 && IsPopUpOpen === false && IsInputFocused === false && ArrSelectedItems.length == 0) { - goBack(); - e.preventDefault(); - e.stopPropagation(); - } - } - } - - if (IsDualPaneEnabled === false && (IsItemPreviewOpen === true && IsPopUpOpen === true || IsPopUpOpen === false) && IsInputFocused === false) { - if (ViewMode == "wrap") { - // check if arrow up is pressed - if (e.keyCode == 38) { - e.preventDefault(); - e.stopPropagation(); - goGridUp(); - } - // check if arrow down is pressed - if (e.key === "ArrowDown") { - e.preventDefault(); - e.stopPropagation(); - goGridDown(); - } - } - // check if arrow left is pressed - if (e.keyCode == 37 || ((ViewMode == "column" || ViewMode == "miller") && e.keyCode == 38)) { - e.preventDefault(); - e.stopPropagation(); - goLeft(); - } - // check if arrow right is pressed - if (e.keyCode == 39 || ((ViewMode == "column" || ViewMode == "miller") && e.keyCode == 40)) { - e.preventDefault(); - e.stopPropagation(); - goRight(); - } - } - } + } + // Check if cmd / ctrl + a is pressed + if ( + ((e.ctrlKey && Platform != "darwin") || e.metaKey) && + e.key == "a" && + IsInputFocused === false && + IsPopUpOpen === false + ) { + if (IsDualPaneEnabled) { + if (SelectedItemPaneSide == "left") { + await unSelectAllItems(); + for (let i = 0; i < LeftPaneItemCollection.children.length; i++) { + selectItem(LeftPaneItemCollection.children[i]); + } + } else { + await unSelectAllItems(); + for (let i = 0; i < RightPaneItemCollection.children.length; i++) { + selectItem(RightPaneItemCollection.children[i]); + } + } + } else { + await unSelectAllItems(); + for (let i = 0; i < DirectoryList.children.length; i++) { + selectItem(DirectoryList.children[i]); + } + } + } + if ( + (e.altKey && e.key == "Enter") || + e.key == "F2" || + (Platform == "darwin" && + e.key == "Enter" && + IsDualPaneEnabled == false && + IsInputFocused == false) + ) { + // check if alt + enter is pressed + renameElementInputPrompt(SelectedElement); + } + // check if cmd / ctrl + r is pressed + if (((e.ctrlKey && Platform != "darwin") || e.metaKey) && e.key == "r") { + e.preventDefault(); + e.stopPropagation(); + await unSelectAllItems(); + refreshView(); + } + // check if cmd / ctrl + c is pressed + if ( + ((e.ctrlKey && Platform != "darwin") || e.metaKey) && + e.key == "c" && + IsInputFocused == false + ) { + copyItem(SelectedElement); + e.preventDefault(); + e.stopPropagation(); + } + // check if cmd / ctrl + x is pressed + if ( + ((e.ctrlKey && Platform != "darwin") || e.metaKey) && + e.key == "x" && + IsInputFocused == false + ) { + copyItem(SelectedElement, true); + e.preventDefault(); + e.stopPropagation(); + } + // check if cmd / ctrl + v is pressed + if ( + ((e.ctrlKey && Platform != "darwin") || e.metaKey) && + e.key == "v" && + IsInputFocused == false + ) { + pasteItem(); + e.preventDefault(); + e.stopPropagation(); + } + // check if cmd / ctrl + g is pressed | Path input + if (((e.ctrlKey && Platform != "darwin") || e.metaKey) && e.key == "g") { + showInputPopup("Input path to jump to"); + e.preventDefault(); + e.stopPropagation(); + } + // New folder input prompt when f7 is pressed + if (e.key == "F7") { + createFolderInputPrompt(); + e.preventDefault(); + e.stopPropagation(); + } + // New file input prompt when f6 is pressed + if (e.keyCode == 117) { + createFileInputPrompt(); + e.preventDefault(); + e.stopPropagation(); + } + // Disabled for instant quick search + // check if cmd / ctrl + s is pressed + // if ( + // ((e.ctrlKey && Platform != "darwin") || e.metaKey) && + // e.key === "s" && + // IsShowDisks == false + // ) { + // openSearchBar(); + // e.preventDefault(); + // e.stopPropagation(); + // } + + // check if ctrl / cmd + shift + m is pressed + if ( + ((e.ctrlKey && Platform != "darwin") || e.metaKey) && + e.shiftKey && + (e.key == "M" || e.key == "m") && + ArrSelectedItems.length >= 1 + ) { + showMultiRenamePopup(); + e.preventDefault(); + e.stopPropagation(); + } + + if (IsDualPaneEnabled === false) { + // check if return is pressed + if (!e.altKey && e.keyCode == 13 && Platform != "darwin") { + await openSelectedItem(); + e.preventDefault(); + e.stopPropagation(); + } + // check if backspace is pressed + if (e.keyCode == 8 && IsPopUpOpen === false && IsInputFocused === false && ArrSelectedItems.length == 0) { + goBack(); + e.preventDefault(); + e.stopPropagation(); + } + } + } + + if (IsDualPaneEnabled === false && (IsItemPreviewOpen === true && IsPopUpOpen === true || IsPopUpOpen === false) && IsInputFocused === false) { + if (ViewMode == "wrap") { + // check if arrow up is pressed + if (e.keyCode == 38) { + e.preventDefault(); + e.stopPropagation(); + goGridUp(); + } + // check if arrow down is pressed + if (e.key === "ArrowDown") { + e.preventDefault(); + e.stopPropagation(); + goGridDown(); + } + } + // check if arrow left is pressed + if (e.keyCode == 37 || ((ViewMode == "column" || ViewMode == "miller") && e.keyCode == 38)) { + e.preventDefault(); + e.stopPropagation(); + goLeft(); + } + // check if arrow right is pressed + if (e.keyCode == 39 || ((ViewMode == "column" || ViewMode == "miller") && e.keyCode == 40)) { + e.preventDefault(); + e.stopPropagation(); + goRight(); + } + } + } }; // Reset key toggle document.onkeyup = (e) => { - if (e.key == "G" || e.key == "g") IsGDown = false; - if (e.keyCode === 91 && Platform == "darwin") IsMetaDown = false; - if (e.key == "Control" && Platform != "darwin") IsCtrlDown = false; - if (e.key == "Shift") IsShiftDown = false; + if (e.key == "G" || e.key == "g") IsGDown = false; + if (e.keyCode === 91 && Platform == "darwin") IsMetaDown = false; + if (e.key == "Control" && Platform != "darwin") IsCtrlDown = false; + if (e.key == "Shift") IsShiftDown = false; if (e.key == "Alt") IsAltDown = false; }; @@ -799,409 +799,408 @@ document.onkeyup = (e) => { // check for click on one of the dual pane containers and set directory accordingly document.querySelector(".dual-pane-left").addEventListener("click", () => { - if (IsPopUpOpen == false && SelectedItemPaneSide != "left") { - setCurrentDir(LeftDualPanePath, "left"); - } + if (IsPopUpOpen == false && SelectedItemPaneSide != "left") { + setCurrentDir(LeftDualPanePath, "left"); + } }); document - .querySelector(".dual-pane-left") - .addEventListener("contextmenu", () => { - if (IsPopUpOpen == false && SelectedItemPaneSide != "left") { - setCurrentDir(LeftDualPanePath, "left"); - } - }); + .querySelector(".dual-pane-left") + .addEventListener("contextmenu", () => { + if (IsPopUpOpen == false && SelectedItemPaneSide != "left") { + setCurrentDir(LeftDualPanePath, "left"); + } + }); document.querySelector(".dual-pane-right").addEventListener("click", () => { - if (IsPopUpOpen == false && SelectedItemPaneSide != "right") { - setCurrentDir(RightDualPanePath, "right"); - } + if (IsPopUpOpen == false && SelectedItemPaneSide != "right") { + setCurrentDir(RightDualPanePath, "right"); + } }); document - .querySelector(".dual-pane-right") - .addEventListener("contextmenu", () => { - if (IsPopUpOpen == false && SelectedItemPaneSide != "right") { - setCurrentDir(RightDualPanePath, "right"); - } - }); + .querySelector(".dual-pane-right") + .addEventListener("contextmenu", () => { + if (IsPopUpOpen == false && SelectedItemPaneSide != "right") { + setCurrentDir(RightDualPanePath, "right"); + } + }); // Main function to handle directory visualization async function showItems(items, dualPaneSide = "", millerCol = 1) { - await cancelSearch(); - IsShowDisks = false; - - if (items.length > 1000) { - showLoadingPopup("Loading much data, please wait..."); - await new Promise(resolve => setTimeout(resolve, 50)); - } - - // Reset position when navigating into another directory - document.querySelector(".explorer-container")?.scrollTo(0, 0); - - if (IsDualPaneEnabled == true) { - if (dualPaneSide == "left") { - document.querySelector(".dual-pane-left").innerHTML = ""; - document.querySelector(".dual-pane-left").scrollTop = 0; - } else if (dualPaneSide == "right") { - document.querySelector(".dual-pane-right").innerHTML = ""; - document.querySelector(".dual-pane-right").scrollTop = 0; - } else { - SelectedItemPaneSide = "left"; - document.querySelector(".dual-pane-left").innerHTML = ""; - document.querySelector(".dual-pane-left").scrollTop = 0; - document.querySelector(".dual-pane-right").innerHTML = ""; - document.querySelector(".dual-pane-right").scrollTop = 0; - } - } - document.querySelector(".normal-list-column-header").style.display = "block"; - document.querySelector(".disk-list-column-header").style.display = "none"; - - DirectoryList = document.createElement("div"); - if (IsDualPaneEnabled == true) { - DirectoryList.className = "directory-list-dual-pane"; - } else { - DirectoryList.className = "directory-list"; - } - if (IsShowHiddenFiles === false) { - items = items.filter((str) => !str.name.startsWith(".") && !str.name.toLowerCase().includes("desktop.ini")); - } - items = items.filter((str) => !str.name.toLowerCase().includes("ntuser")); - let counter = 0; - items.forEach(async (item) => { - let itemIconId = crypto.randomUUID(); - let itemLink = document.createElement("button"); - itemLink.setAttribute( - "onclick", - "interactWithItem(this, '" + dualPaneSide + "')", - ); - itemLink.setAttribute("itempath", item.path); - itemLink.setAttribute("itemindex", counter++); - itemLink.setAttribute("itempaneside", dualPaneSide); - itemLink.setAttribute("itemisdir", item.is_dir); - itemLink.setAttribute("itemext", item.extension); - itemLink.setAttribute("itemname", item.name); - itemLink.setAttribute("itemsize", formatBytes(item.size)); - itemLink.setAttribute("itemrawsize", item.size); - itemLink.setAttribute("itemmodified", item.last_modified); - itemLink.setAttribute("draggable", true); - itemLink.setAttribute("id", "item-link"); - itemLink.setAttribute("itemformillercol", parseInt(millerCol) + 1); - - let fileIcon = "resources/file-icon.png"; // Default - let iconSize = "56px"; - if (item.is_dir == 1) { - fileIcon = "resources/folder-icon.png"; - // Check for dir name to apply custom icons + await cancelSearch(); + IsShowDisks = false; + + if (items.length > 1000) { + showLoadingPopup("Loading much data, please wait..."); + await new Promise(resolve => setTimeout(resolve, 50)); + } + + // Reset position when navigating into another directory + document.querySelector(".explorer-container")?.scrollTo(0, 0); + + if (IsDualPaneEnabled == true) { + if (dualPaneSide == "left") { + document.querySelector(".dual-pane-left").innerHTML = ""; + document.querySelector(".dual-pane-left").scrollTop = 0; + } else if (dualPaneSide == "right") { + document.querySelector(".dual-pane-right").innerHTML = ""; + document.querySelector(".dual-pane-right").scrollTop = 0; + } else { + SelectedItemPaneSide = "left"; + document.querySelector(".dual-pane-left").innerHTML = ""; + document.querySelector(".dual-pane-left").scrollTop = 0; + document.querySelector(".dual-pane-right").innerHTML = ""; + document.querySelector(".dual-pane-right").scrollTop = 0; + } + } + document.querySelector(".normal-list-column-header").style.display = "block"; + document.querySelector(".disk-list-column-header").style.display = "none"; + + DirectoryList = document.createElement("div"); + if (IsDualPaneEnabled == true) { + DirectoryList.className = "directory-list-dual-pane"; + } else { + DirectoryList.className = "directory-list"; + } + if (IsShowHiddenFiles === false) { + items = items.filter((str) => !str.name.startsWith(".") && !str.name.toLowerCase().includes("desktop.ini")); + } + items = items.filter((str) => !str.name.toLowerCase().includes("ntuser")); + let counter = 0; + items.forEach(async (item) => { + let itemIconId = crypto.randomUUID(); + let itemLink = document.createElement("button"); + itemLink.setAttribute( + "onclick", + "interactWithItem(this, '" + dualPaneSide + "')", + ); + itemLink.setAttribute("itempath", item.path); + itemLink.setAttribute("itemindex", counter++); + itemLink.setAttribute("itempaneside", dualPaneSide); + itemLink.setAttribute("itemisdir", item.is_dir); + itemLink.setAttribute("itemext", item.extension); + itemLink.setAttribute("itemname", item.name); + itemLink.setAttribute("itemsize", formatBytes(item.size)); + itemLink.setAttribute("itemrawsize", item.size); + itemLink.setAttribute("itemmodified", item.last_modified); + itemLink.setAttribute("draggable", true); + itemLink.setAttribute("id", "item-link"); + itemLink.setAttribute("itemformillercol", parseInt(millerCol) + 1); + + let fileIcon = "resources/file-icon.png"; // Default + let iconSize = "56px"; + if (item.is_dir == 1) { + fileIcon = "resources/folder-icon.png"; + // Check for dir name to apply custom icons switch (item.name.toLowerCase()) { case "downloads": - fileIcon = "resources/folder-downloads.png"; - break; + fileIcon = "resources/folder-downloads.png"; + break; case "desktop": case "schreibtisch": - fileIcon = "resources/folder-desktop.png"; - break; + fileIcon = "resources/folder-desktop.png"; + break; case "dokumente": case "doks": case "documents": case "docs": - fileIcon = "resources/folder-docs.png"; - break; + fileIcon = "resources/folder-docs.png"; + break; case "musik": case "music": case "audio": - fileIcon = "resources/folder-music.png"; - break; + fileIcon = "resources/folder-music.png"; + break; case "bilder": case "fotos": case "photos": case "pictures": case "images": - fileIcon = "resources/folder-images.png"; - break; + fileIcon = "resources/folder-images.png"; + break; case "videos": case "video": case "movies": case "movie": case "films": case "filme": - fileIcon = "resources/folder-videos.png"; - break; + fileIcon = "resources/folder-videos.png"; + break; case "coding": case "programming": case "programmieren": case "code": - fileIcon = "resources/folder-coding.png"; - break; + fileIcon = "resources/folder-coding.png"; + break; case "werkzeuge": case "tools": - fileIcon = "resources/folder-tools.png"; - break; + fileIcon = "resources/folder-tools.png"; + break; case "public": case "öffentlich": case "shared": case "geteilt": - fileIcon = "resources/folder-public.png"; - break; + fileIcon = "resources/folder-public.png"; + break; case "games": case "gaming": case "spiele": - fileIcon = "resources/folder-games.png"; - break; + fileIcon = "resources/folder-games.png"; + break; case "developer": case "entwickler": case "entwicklung": case "development": - fileIcon = "resources/folder-development.png"; - break; + fileIcon = "resources/folder-development.png"; + break; case "applications": case "programme": - fileIcon = "resources/folder-applications.png"; - break; + fileIcon = "resources/folder-applications.png"; + break; case "sdk": case "sdks": - fileIcon = "resources/folder-sdk.png"; + fileIcon = "resources/folder-sdk.png"; default: - fileIcon = "resources/folder-icon.png"; - break; + fileIcon = "resources/folder-icon.png"; + break; } - } else { - switch (item.extension.toLowerCase()) { - case ".rs": - fileIcon = "resources/rust-file.png"; - break; - case ".js": - case ".jsx": - fileIcon = "resources/javascript-file.png"; - break; - case ".css": - case ".scss": - fileIcon = "resources/css-file.png"; - break; - case ".sql": - case ".db": - fileIcon = "resources/sql-file.png"; - break; - case ".go": - fileIcon = "resources/go-file.png"; - break; - case ".md": - fileIcon = "resources/markdown-file.png"; - break; - case ".bin": - fileIcon = "resources/bin-file.png"; - break; - case ".json": - case ".cs": - case ".c": - case ".xml": - case ".htm": - case ".html": - case ".php": - case ".py": - case ".ts": - case ".tsx": - fileIcon = "resources/code-file.png"; - break; - case ".png": - case ".jpg": - case ".jpeg": - case ".gif": - case ".webp": - case ".svg": - case ".ico": - case ".bmp": - case ".tiff": - case ".tif": - case ".jfif": - case ".avif": - case ".icns": - if (IsImagePreview) { - if (item.size < 10000000 && items.length < 1000) { // ~10 mb - fileIcon = convertFileSrc(item.path); // Beispiel für die Verwendung der Funktion - } else { - fileIcon = "resources/img-file.png"; - } - } else { - fileIcon = "resources/img-file.png"; - } - break; - case ".pdf": - if (IsImagePreview) { - if (item.size < 5000000) { // ~5 mb - fileIcon = convertFileSrc(item.path); // Beispiel für die Verwendung der Funktion - } - } else { - fileIcon = "resources/pdf-file.png"; - } - break; - case ".txt": - case ".rtf": - fileIcon = "resources/text-file.png"; - break; - case ".docx": - case ".doc": - fileIcon = "resources/word-file.png"; - break; - case ".zip": - case ".rar": - case ".tar": - case ".zst": - case ".7z": - case ".gz": - case ".xz": - case ".bz2": - case ".lz": - case ".lz4": - case ".lzma": - case ".lzo": - case ".z": - case ".zstd": - case ".br": - fileIcon = "resources/zip-file.png"; - break; - case ".xlsx": - fileIcon = "resources/spreadsheet-file.png"; - break; - case ".appimage": - fileIcon = "resources/appimage-file.png"; - break; - case ".mp4": - case ".mkv": - case ".avi": - case ".mov": - case ".wmv": - case ".flv": - case ".webm": - fileIcon = "resources/video-file.png"; - break; - case ".mp3": - case ".wav": - case ".ogg": - case ".opus": - fileIcon = "resources/audio-file.png"; - break; - case ".iso": - fileIcon = "resources/iso-file.png"; - break; - default: - fileIcon = "resources/file-icon.png"; - break; - } - } - itemLink.className = "item-link directory-entry"; - if (ViewMode == "wrap") { - var itemButton = document.createElement("div"); - itemButton.innerHTML = ` - -

${item.name}

- `; - itemButton.className = "item-button directory-entry"; - itemLink.append(itemButton); - DirectoryList.style.gridTemplateColumns = - "repeat(auto-fill, minmax(80px, 1fr))"; - DirectoryList.style.rowGap = "15px"; - } else if (ViewMode == "column") { - var itemButtonList = document.createElement("div"); - itemButtonList.innerHTML = ` - - -

${item.name}

-
- -

${item.last_modified}

-

${formatBytes(parseInt(item.size), 2)}

-
- `; - if (dualPaneSide != null && dualPaneSide != "") { - itemButtonList.className = "directory-entry dual-pane-list-item"; - } else { - itemButtonList.className = "item-button-list directory-entry"; - } - itemLink.append(itemButtonList); - DirectoryList.style.gridTemplateColumns = "unset"; - DirectoryList.style.rowGap = "2px"; - } - else if (ViewMode == "miller") { - var itemButtonList = document.createElement("div"); - itemButtonList.innerHTML = ` - - -

${item.name}

-
- `; - if (dualPaneSide != null && dualPaneSide != "") { - itemButtonList.className = "directory-entry dual-pane-list-item"; - } else { - itemButtonList.className = "item-button-list directory-entry"; - } - itemLink.append(itemButtonList); - DirectoryList.style.gridTemplateColumns = "unset"; - DirectoryList.style.rowGap = "1px"; - } - DirectoryList.append(itemLink); - ArrDirectoryItems.push(itemLink); - let itemIconElement = document.getElementById(itemIconId); + } else { + switch (item.extension.toLowerCase()) { + case ".rs": + fileIcon = "resources/rust-file.png"; + break; + case ".js": + case ".jsx": + fileIcon = "resources/javascript-file.png"; + break; + case ".css": + case ".scss": + fileIcon = "resources/css-file.png"; + break; + case ".sql": + case ".db": + fileIcon = "resources/sql-file.png"; + break; + case ".go": + fileIcon = "resources/go-file.png"; + break; + case ".md": + fileIcon = "resources/markdown-file.png"; + break; + case ".bin": + fileIcon = "resources/bin-file.png"; + break; + case ".json": + case ".cs": + case ".c": + case ".xml": + case ".htm": + case ".html": + case ".php": + case ".py": + case ".ts": + case ".tsx": + fileIcon = "resources/code-file.png"; + break; + case ".png": + case ".jpg": + case ".jpeg": + case ".gif": + case ".webp": + case ".svg": + case ".ico": + case ".bmp": + case ".tiff": + case ".tif": + case ".jfif": + case ".avif": + case ".icns": + if (IsImagePreview) { + if (item.size < 10000000 && items.length < 1000) { // ~10 mb + fileIcon = convertFileSrc(item.path); // Beispiel für die Verwendung der Funktion + } else { + fileIcon = "resources/img-file.png"; + } + } else { + fileIcon = "resources/img-file.png"; + } + break; + case ".pdf": + if (IsImagePreview) { + if (item.size < 5000000) { // ~5 mb + fileIcon = convertFileSrc(item.path); // Beispiel für die Verwendung der Funktion + } + } else { + fileIcon = "resources/pdf-file.png"; + } + break; + case ".txt": + case ".rtf": + fileIcon = "resources/text-file.png"; + break; + case ".docx": + case ".doc": + fileIcon = "resources/word-file.png"; + break; + case ".zip": + case ".rar": + case ".tar": + case ".zst": + case ".7z": + case ".gz": + case ".xz": + case ".bz2": + case ".lz": + case ".lz4": + case ".lzma": + case ".lzo": + case ".z": + case ".zstd": + case ".br": + fileIcon = "resources/zip-file.png"; + break; + case ".xlsx": + fileIcon = "resources/spreadsheet-file.png"; + break; + case ".appimage": + fileIcon = "resources/appimage-file.png"; + break; + case ".mp4": + case ".mkv": + case ".avi": + case ".mov": + case ".wmv": + case ".flv": + case ".webm": + fileIcon = "resources/video-file.png"; + break; + case ".mp3": + case ".wav": + case ".ogg": + case ".opus": + fileIcon = "resources/audio-file.png"; + break; + case ".iso": + fileIcon = "resources/iso-file.png"; + break; + default: + fileIcon = "resources/file-icon.png"; + break; + } + } + itemLink.className = "item-link directory-entry"; + if (ViewMode == "wrap") { + var itemButton = document.createElement("div"); + itemButton.innerHTML = ` + +

${item.name}

+ `; + itemButton.className = "item-button directory-entry"; + itemLink.append(itemButton); + DirectoryList.style.gridTemplateColumns = + "repeat(auto-fill, minmax(80px, 1fr))"; + DirectoryList.style.rowGap = "15px"; + } else if (ViewMode == "column") { + var itemButtonList = document.createElement("div"); + itemButtonList.innerHTML = ` + + +

${item.name}

+
+ +

${item.last_modified}

+

${formatBytes(parseInt(item.size), 2)}

+
+ `; + if (dualPaneSide != null && dualPaneSide != "") { + itemButtonList.className = "directory-entry dual-pane-list-item"; + } else { + itemButtonList.className = "item-button-list directory-entry"; + } + itemLink.append(itemButtonList); + DirectoryList.style.gridTemplateColumns = "unset"; + DirectoryList.style.rowGap = "2px"; + } + else if (ViewMode == "miller") { + var itemButtonList = document.createElement("div"); + itemButtonList.innerHTML = ` + + +

${item.name}

+
+ `; + if (dualPaneSide != null && dualPaneSide != "") { + itemButtonList.className = "directory-entry dual-pane-list-item"; + } else { + itemButtonList.className = "item-button-list directory-entry"; + } + itemLink.append(itemButtonList); + DirectoryList.style.gridTemplateColumns = "unset"; + DirectoryList.style.rowGap = "1px"; + } + DirectoryList.append(itemLink); + ArrDirectoryItems.push(itemLink); + let itemIconElement = document.getElementById(itemIconId); if (itemIconElement) { if (item.size > 10000000) { // ~10 mb item.src = convertFileSrc(await getThumbnail(item.path)); } } - }); - DirectoryList.querySelectorAll("#item-link").forEach((item) => { - // Start dragging item - item.ondragstart = async (e) => { - e.preventDefault(); - IsFileOpIntern = true; - let icon = DefaultFileIcon; - if (item.getAttribute("itemisdir") == 1) { - icon = DefaultFolderIcon; - } - if ( - ArrSelectedItems.find( - (itemOfArray) => - itemOfArray.getAttribute("itempath") == - item.getAttribute("itempath"), - ) == null || - ArrSelectedItems.length == 0 - ) { - ArrSelectedItems.push(item); - } - let arr = ArrSelectedItems.map((item) => item.getAttribute("itempath")); - if ( - Platform != "darwin" && - (Platform.includes("win") || Platform.includes("linux")) - ) { - await startDrag({ item: arr, icon: icon }); - await unSelectAllItems(); - await refreshView(); - } else { - await startDrag({ item: arr, icon: icon }); - await unSelectAllItems(); - await refreshView(); - } - }; - // Accept file drop into folders - item.addEventListener("dragover", (e) => { - MousePos = [e.clientX, e.clientY]; - if (item.getAttribute("itemisdir") == "1") { - if (!ArrSelectedItems.includes(item)) { - item.style.opacity = "0.5"; - item.style.border = "1px solid var(--textColor)"; - DraggedOverElement = item; - } - } - }); - item.addEventListener("dragleave", () => { - item.style.opacity = "1"; - item.style.border = "1px solid transparent"; - }); - // :item_right_click :context_menu | showItems() - // Open context menu when right-clicking on file/folder - item.addEventListener("contextmenu", async (e) => { - e.preventDefault(); - console.log(IsPopUpOpen, IsInputFocused); - if (IsPopUpOpen == false && IsInputFocused == false) { - setupItemContextMenu(item, e); - } - }); + }); + DirectoryList.querySelectorAll("#item-link").forEach((item) => { + // Start dragging item + item.ondragstart = async (e) => { + e.preventDefault(); + IsFileOpIntern = true; + let icon = DefaultFileIcon; + if (item.getAttribute("itemisdir") == 1) { + icon = DefaultFolderIcon; + } + if ( + ArrSelectedItems.find( + (itemOfArray) => + itemOfArray.getAttribute("itempath") == + item.getAttribute("itempath"), + ) == null || + ArrSelectedItems.length == 0 + ) { + ArrSelectedItems.push(item); + } + let arr = ArrSelectedItems.map((item) => item.getAttribute("itempath")); + if ( + Platform != "darwin" && + (Platform.includes("win") || Platform.includes("linux")) + ) { + await startDrag({ item: arr, icon: icon }); + await unSelectAllItems(); + await refreshView(); + } else { + await startDrag({ item: arr, icon: icon }); + await unSelectAllItems(); + await refreshView(); + } + }; + // Accept file drop into folders + item.addEventListener("dragover", (e) => { + MousePos = [e.clientX, e.clientY]; + if (item.getAttribute("itemisdir") == "1") { + if (!ArrSelectedItems.includes(item)) { + item.style.opacity = "0.5"; + item.style.border = "1px solid var(--textColor)"; + DraggedOverElement = item; + } + } + }); + item.addEventListener("dragleave", () => { + item.style.opacity = "1"; + item.style.border = "1px solid transparent"; + }); + // :item_right_click :context_menu | showItems() + // Open context menu when right-clicking on file/folder + item.addEventListener("contextmenu", async (e) => { + e.preventDefault(); + if (IsPopUpOpen == false && IsInputFocused == false) { + setupItemContextMenu(item, e); + } + }); (async () => { if (isImage(item.getAttribute("itemext"))) { if (item.getAttribute("itemrawsize") > 10000000) { // ~10 mb @@ -1211,1865 +1210,1865 @@ async function showItems(items, dualPaneSide = "", millerCol = 1) { item.querySelector("img").src = convertFileSrc(await invoke("get_app_icns", { path: item.getAttribute("itempath") })); } })(); - }); - if (IsDualPaneEnabled == true) { - if (dualPaneSide == "left") { - document.querySelector(".dual-pane-left").append(DirectoryList); - LeftDualPanePath = CurrentDir; - LeftPaneItemCollection = DirectoryList; - } else if (dualPaneSide == "right") { - document.querySelector(".dual-pane-right").append(DirectoryList); - RightDualPanePath = CurrentDir; - RightPaneItemCollection = DirectoryList; - } - } else if (ViewMode == "miller") { - $(".miller-col-" + millerCol).html(""); - $(".miller-col-" + millerCol).append(DirectoryList); - $(".miller-col-" + millerCol).attr("miller-col-path", CurrentDir); - CurrentMillerCol = millerCol; - } else { - document.querySelector(".explorer-container").innerHTML = ""; - document.querySelector(".explorer-container").append(DirectoryList); - } - ds.setSettings({ - selectables: document.querySelectorAll(".item-link"), - area: document.querySelector(".explorer-container"), - draggability: false }); - closeLoadingPopup(); + if (IsDualPaneEnabled == true) { + if (dualPaneSide == "left") { + document.querySelector(".dual-pane-left").append(DirectoryList); + LeftDualPanePath = CurrentDir; + LeftPaneItemCollection = DirectoryList; + } else if (dualPaneSide == "right") { + document.querySelector(".dual-pane-right").append(DirectoryList); + RightDualPanePath = CurrentDir; + RightPaneItemCollection = DirectoryList; + } + } else if (ViewMode == "miller") { + $(".miller-col-" + millerCol).html(""); + $(".miller-col-" + millerCol).append(DirectoryList); + $(".miller-col-" + millerCol).attr("miller-col-path", CurrentDir); + CurrentMillerCol = millerCol; + } else { + document.querySelector(".explorer-container").innerHTML = ""; + document.querySelector(".explorer-container").append(DirectoryList); + } + ds.setSettings({ + selectables: document.querySelectorAll(".item-link"), + area: document.querySelector(".explorer-container"), + draggability: false + }); + closeLoadingPopup(); } listen("addSingleItem", async (item) => { - item = JSON.parse(item.payload); - // We need to wait here, otherwise the function won't be triggered - setTimeout(async () => { - if (IsDualPaneEnabled == true) { - await addSingleItem(item, SelectedItemPaneSide); - } else { - await addSingleItem(item); - } - }, 10); + item = JSON.parse(item.payload); + // We need to wait here, otherwise the function won't be triggered + setTimeout(async () => { + if (IsDualPaneEnabled == true) { + await addSingleItem(item, SelectedItemPaneSide); + } else { + await addSingleItem(item); + } + }, 10); }); async function addSingleItem(item, dualPaneSide = "", millerCol = 1, itemIndex = 0) { - if (IsShowHiddenFiles === false) { - if (item.name.startsWith(".") == true || item.name.toLowerCase().includes("desktop.ini")) { - return; - } - } - if (item.name.toLowerCase().includes("ntuser")) { - return; - } - IsShowDisks = false; - // Reset position when navigating in another directory - window.scrollTo(0, 0); - if (IsDualPaneEnabled == true) { - if (dualPaneSide == "left") { - document.querySelector(".dual-pane-left").scrollTop = 0; - } else if (dualPaneSide == "right") { - document.querySelector(".dual-pane-right").scrollTop = 0; - } else { - document.querySelector(".dual-pane-left").scrollTop = 0; - document.querySelector(".dual-pane-right").scrollTop = 0; - } - } - document.querySelector(".normal-list-column-header").style.display = "block"; - document.querySelector(".disk-list-column-header").style.display = "none"; - - let itemLink = document.createElement("button"); - itemLink.setAttribute( - "onclick", - "interactWithItem(this, '" + dualPaneSide + "')", - ); - itemLink.setAttribute("itempath", item.path); - itemLink.setAttribute("itemindex", FoundItemsCountIndex++); - itemLink.setAttribute("itempaneside", dualPaneSide); - itemLink.setAttribute("itemisdir", item.is_dir ? 1 : 0); - itemLink.setAttribute("itemext", item.extension); - itemLink.setAttribute("itemname", item.name); - itemLink.setAttribute("itemsize", formatBytes(item.size)); - itemLink.setAttribute("itemrawsize", item.size); - itemLink.setAttribute("itemmodified", item.last_modified); - itemLink.setAttribute("draggable", true); - itemLink.setAttribute("id", "item-link"); - itemLink.setAttribute("itemformillercol", parseInt(millerCol) + 1); - - let fileIcon = "resources/file-icon.png"; // Default - let iconSize = "56px"; - if (item.is_dir == 1) { - fileIcon = "resources/folder-icon.png"; - // Check for dir name to apply custom icons - if (item.name.toLowerCase().includes("downloads")) { - fileIcon = "resources/folder-downloads.png"; - } else if ( - item.name.toLowerCase().includes("desktop") || - item.name.toLowerCase().includes("schreibtisch") - ) { - fileIcon = "resources/folder-desktop.png"; - } else if ( - item.name.toLowerCase().includes("dokumente") || - item.name.toLowerCase().includes("documents") || - item.name.toLowerCase().includes("docs") - ) { - fileIcon = "resources/folder-docs.png"; - } else if ( - item.name.toLowerCase().includes("musik") || - item.name.toLowerCase().includes("music") - ) { - fileIcon = "resources/folder-music.png"; - } else if ( - item.name.toLowerCase().includes("bilder") || - item.name.toLowerCase().includes("pictures") || - item.name.toLowerCase().includes("images") - ) { - fileIcon = "resources/folder-images.png"; - } else if ( - item.name.toLowerCase().includes("videos") || - item.name.toLowerCase().includes("movies") || - item.name.toLowerCase().includes("films") || - item.name.toLowerCase().includes("filme") - ) { - fileIcon = "resources/folder-videos.png"; - } else if ( - item.name.toLowerCase().includes("coding") || - item.name.toLowerCase().includes("programming") || - item.name.toLowerCase().includes("programmieren") || - item.name.toLowerCase().includes("code") - ) { - fileIcon = "resources/folder-coding.png"; - } else if ( - item.name.toLowerCase().includes("werkzeuge") || - item.name.toLowerCase().includes("tools") - ) { - fileIcon = "resources/folder-tools.png"; - } else if ( - item.name.toLowerCase().includes("public") || - item.name.toLowerCase().includes("öffentlich") || - item.name.toLowerCase().includes("shared") || - item.name.toLowerCase().includes("geteilt") - ) { - fileIcon = "resources/folder-public.png"; - } else if ( - item.name.toLowerCase().includes("games") || - item.name.toLowerCase().includes("spiele") - ) { - fileIcon = "resources/folder-games.png"; - } else if ( - item.name.toLowerCase().includes("developer") || - item.name.toLowerCase().includes("development") - ) { - fileIcon = "resources/folder-development.png"; - } - } else { - switch (item.extension) { - case ".rs": - fileIcon = "resources/rust-file.png"; - break; - case ".js": - case ".jsx": - fileIcon = "resources/javascript-file.png"; - break; - case ".css": - case ".scss": - fileIcon = "resources/css-file.png"; - break; - case ".sql": - case ".db": - fileIcon = "resources/sql-file.png"; - break; - case ".go": - fileIcon = "resources/go-file.png"; - break; - case ".md": - fileIcon = "resources/markdown-file.png"; - break; - case ".bin": - fileIcon = "resources/bin-file.png"; - break; - case ".json": - case ".cs": - case ".c": - case ".xml": - case ".htm": - case ".html": - case ".php": - case ".py": - case ".ts": - case ".tsx": - fileIcon = "resources/code-file.png"; - break; - case ".png": - case ".jpg": - case ".jpeg": - case ".gif": - case ".webp": - case ".svg": - case ".ico": - case ".bmp": - case ".tiff": - case ".tif": - case ".jfif": - case ".avif": - case ".icns": - if (IsImagePreview) { - if (item.size < 10000000) { // ~10 mb - fileIcon = convertFileSrc(item.path); - } - else { - fileIcon = "resources/img-file.png"; - } - } else { - fileIcon = "resources/img-file.png"; - } - break; - case ".pdf": - if (IsImagePreview) { - fileIcon = convertFileSrc(item.path); - } else { - fileIcon = "resources/pdf-file.png"; - } - break; - case ".txt": - fileIcon = "resources/text-file.png"; - break; - case ".docx": - case ".doc": - fileIcon = "resources/word-file.png"; - break; - case ".zip": - case ".rar": - case ".tar": - case ".zst": - case ".7z": - case ".gz": - case ".xz": - case ".bz2": - case ".lz": - case ".lz4": - case ".lzma": - case ".lzo": - case ".z": - case ".zstd": - case ".br": - fileIcon = "resources/zip-file.png"; - break; - case ".xlsx": - fileIcon = "resources/spreadsheet-file.png"; - break; - case ".appimage": - fileIcon = "resources/appimage-file.png"; - break; - case ".mp4": - case ".mkv": - case ".avi": - case ".mov": - case ".wmv": - case ".flv": - case ".webm": - fileIcon = "resources/video-file.png"; - break; - case ".mp3": - case ".wav": - case ".ogg": - case ".opus": - fileIcon = "resources/audio-file.png"; - break; - case ".iso": - fileIcon = "resources/iso-file.png"; - break; - default: - fileIcon = "resources/file-icon.png"; - break; - } - } - itemLink.className = "item-link directory-entry"; - if (ViewMode == "wrap") { - var itemButton = document.createElement("div"); - itemButton.innerHTML = ` - -

${item.name}

- `; - itemButton.className = "item-button directory-entry"; - itemLink.append(itemButton); - $(".directory-list").css( - "gridTemplateColumns", - "repeat(auto-fill, minmax(80px, 1fr))", - ); - $(".directory-list").css("rowGap", "15px"); - } else if (ViewMode == "column") { - var itemButtonList = document.createElement("div"); - itemButtonList.innerHTML = ` - - -

${item.name}

-
- -

${item.last_modified}

-

${formatBytes(parseInt(item.size), 2)}

-
- `; - if (dualPaneSide != null && dualPaneSide != "") { - itemButtonList.className = "directory-entry dual-pane-list-item"; - } else { - itemButtonList.className = "item-button-list directory-entry"; - } - itemLink.append(itemButtonList); - $(".directory-list").css("gridTemplateColumns", "unset"); - $(".directory-list").css("rowGap", "2px"); - } - if (ViewMode == "miller") { - $(".directory-list").style.gridTemplateColumns = "unset"; - $(".directory-list").style.rowGap = "1px"; - } - // Start dragging item - itemLink.ondragstart = async (e) => { - e.preventDefault(); - IsFileOpIntern = true; - let icon = DefaultFileIcon; - if (itemLink.getAttribute("itemisdir") == 1) { - icon = DefaultFolderIcon; - } - if ( - ArrSelectedItems.find( - (itemOfArray) => - itemOfArray.getAttribute("itempath") == - itemLink.getAttribute("itempath"), - ) == null || - ArrSelectedItems.length == 0 - ) { - ArrSelectedItems.push(itemLink); - } - let arr = ArrSelectedItems.map((item) => item.getAttribute("itempath")); - if ( - Platform != "darwin" && - (Platform.includes("win") || Platform.includes("linux")) - ) { - await startDrag({ item: arr, icon: "" }); - unSelectAllItems(); - } else { - await startDrag({ item: arr, icon: icon }); - unSelectAllItems(); - } - }; - // Accept file drop into folders - itemLink.addEventListener("dragover", (e) => { - MousePos = [e.clientX, e.clientY]; - if (itemLink.getAttribute("itemisdir") == "1") { - if (!ArrSelectedItems.includes(itemLink)) { - itemLink.style.opacity = "0.5"; - itemLink.style.border = "1px solid var(--textColor)"; - DraggedOverElement = itemLink; - } - } - }); - itemLink.addEventListener("dragleave", () => { - itemLink.style.opacity = "1"; - itemLink.style.border = "1px solid transparent"; - }); - // :item_right_click :context_menu | AddSingleItem() - // Open context menu when right-clicking on file/folder - itemLink.addEventListener("contextmenu", async (e) => { - e.preventDefault(); - if (IsPopUpOpen == false && IsInputFocused == false) { - setupItemContextMenu(itemLink, e); - } - }); - - if (IsDualPaneEnabled === true) { - if (dualPaneSide === "left") { - $(".dual-pane-left").append(itemLink); - LeftPaneItemCollection = document.querySelector(".dual-pane-left"); - goUp(false, true); - } else if (dualPaneSide === "right") { - $(".dual-pane-right").append(itemLink); - RightPaneItemCollection = document.querySelector(".dual-pane-right"); - goUp(false, true); - } - } - else { - $(".directory-list").append(itemLink); - } - ArrDirectoryItems.push(itemLink); + if (IsShowHiddenFiles === false) { + if (item.name.startsWith(".") == true || item.name.toLowerCase().includes("desktop.ini")) { + return; + } + } + if (item.name.toLowerCase().includes("ntuser")) { + return; + } + IsShowDisks = false; + // Reset position when navigating in another directory + window.scrollTo(0, 0); + if (IsDualPaneEnabled == true) { + if (dualPaneSide == "left") { + document.querySelector(".dual-pane-left").scrollTop = 0; + } else if (dualPaneSide == "right") { + document.querySelector(".dual-pane-right").scrollTop = 0; + } else { + document.querySelector(".dual-pane-left").scrollTop = 0; + document.querySelector(".dual-pane-right").scrollTop = 0; + } + } + document.querySelector(".normal-list-column-header").style.display = "block"; + document.querySelector(".disk-list-column-header").style.display = "none"; + + let itemLink = document.createElement("button"); + itemLink.setAttribute( + "onclick", + "interactWithItem(this, '" + dualPaneSide + "')", + ); + itemLink.setAttribute("itempath", item.path); + itemLink.setAttribute("itemindex", FoundItemsCountIndex++); + itemLink.setAttribute("itempaneside", dualPaneSide); + itemLink.setAttribute("itemisdir", item.is_dir ? 1 : 0); + itemLink.setAttribute("itemext", item.extension); + itemLink.setAttribute("itemname", item.name); + itemLink.setAttribute("itemsize", formatBytes(item.size)); + itemLink.setAttribute("itemrawsize", item.size); + itemLink.setAttribute("itemmodified", item.last_modified); + itemLink.setAttribute("draggable", true); + itemLink.setAttribute("id", "item-link"); + itemLink.setAttribute("itemformillercol", parseInt(millerCol) + 1); + + let fileIcon = "resources/file-icon.png"; // Default + let iconSize = "56px"; + if (item.is_dir == 1) { + fileIcon = "resources/folder-icon.png"; + // Check for dir name to apply custom icons + if (item.name.toLowerCase().includes("downloads")) { + fileIcon = "resources/folder-downloads.png"; + } else if ( + item.name.toLowerCase().includes("desktop") || + item.name.toLowerCase().includes("schreibtisch") + ) { + fileIcon = "resources/folder-desktop.png"; + } else if ( + item.name.toLowerCase().includes("dokumente") || + item.name.toLowerCase().includes("documents") || + item.name.toLowerCase().includes("docs") + ) { + fileIcon = "resources/folder-docs.png"; + } else if ( + item.name.toLowerCase().includes("musik") || + item.name.toLowerCase().includes("music") + ) { + fileIcon = "resources/folder-music.png"; + } else if ( + item.name.toLowerCase().includes("bilder") || + item.name.toLowerCase().includes("pictures") || + item.name.toLowerCase().includes("images") + ) { + fileIcon = "resources/folder-images.png"; + } else if ( + item.name.toLowerCase().includes("videos") || + item.name.toLowerCase().includes("movies") || + item.name.toLowerCase().includes("films") || + item.name.toLowerCase().includes("filme") + ) { + fileIcon = "resources/folder-videos.png"; + } else if ( + item.name.toLowerCase().includes("coding") || + item.name.toLowerCase().includes("programming") || + item.name.toLowerCase().includes("programmieren") || + item.name.toLowerCase().includes("code") + ) { + fileIcon = "resources/folder-coding.png"; + } else if ( + item.name.toLowerCase().includes("werkzeuge") || + item.name.toLowerCase().includes("tools") + ) { + fileIcon = "resources/folder-tools.png"; + } else if ( + item.name.toLowerCase().includes("public") || + item.name.toLowerCase().includes("öffentlich") || + item.name.toLowerCase().includes("shared") || + item.name.toLowerCase().includes("geteilt") + ) { + fileIcon = "resources/folder-public.png"; + } else if ( + item.name.toLowerCase().includes("games") || + item.name.toLowerCase().includes("spiele") + ) { + fileIcon = "resources/folder-games.png"; + } else if ( + item.name.toLowerCase().includes("developer") || + item.name.toLowerCase().includes("development") + ) { + fileIcon = "resources/folder-development.png"; + } + } else { + switch (item.extension) { + case ".rs": + fileIcon = "resources/rust-file.png"; + break; + case ".js": + case ".jsx": + fileIcon = "resources/javascript-file.png"; + break; + case ".css": + case ".scss": + fileIcon = "resources/css-file.png"; + break; + case ".sql": + case ".db": + fileIcon = "resources/sql-file.png"; + break; + case ".go": + fileIcon = "resources/go-file.png"; + break; + case ".md": + fileIcon = "resources/markdown-file.png"; + break; + case ".bin": + fileIcon = "resources/bin-file.png"; + break; + case ".json": + case ".cs": + case ".c": + case ".xml": + case ".htm": + case ".html": + case ".php": + case ".py": + case ".ts": + case ".tsx": + fileIcon = "resources/code-file.png"; + break; + case ".png": + case ".jpg": + case ".jpeg": + case ".gif": + case ".webp": + case ".svg": + case ".ico": + case ".bmp": + case ".tiff": + case ".tif": + case ".jfif": + case ".avif": + case ".icns": + if (IsImagePreview) { + if (item.size < 10000000) { // ~10 mb + fileIcon = convertFileSrc(item.path); + } + else { + fileIcon = "resources/img-file.png"; + } + } else { + fileIcon = "resources/img-file.png"; + } + break; + case ".pdf": + if (IsImagePreview) { + fileIcon = convertFileSrc(item.path); + } else { + fileIcon = "resources/pdf-file.png"; + } + break; + case ".txt": + fileIcon = "resources/text-file.png"; + break; + case ".docx": + case ".doc": + fileIcon = "resources/word-file.png"; + break; + case ".zip": + case ".rar": + case ".tar": + case ".zst": + case ".7z": + case ".gz": + case ".xz": + case ".bz2": + case ".lz": + case ".lz4": + case ".lzma": + case ".lzo": + case ".z": + case ".zstd": + case ".br": + fileIcon = "resources/zip-file.png"; + break; + case ".xlsx": + fileIcon = "resources/spreadsheet-file.png"; + break; + case ".appimage": + fileIcon = "resources/appimage-file.png"; + break; + case ".mp4": + case ".mkv": + case ".avi": + case ".mov": + case ".wmv": + case ".flv": + case ".webm": + fileIcon = "resources/video-file.png"; + break; + case ".mp3": + case ".wav": + case ".ogg": + case ".opus": + fileIcon = "resources/audio-file.png"; + break; + case ".iso": + fileIcon = "resources/iso-file.png"; + break; + default: + fileIcon = "resources/file-icon.png"; + break; + } + } + itemLink.className = "item-link directory-entry"; + if (ViewMode == "wrap") { + var itemButton = document.createElement("div"); + itemButton.innerHTML = ` + +

${item.name}

+ `; + itemButton.className = "item-button directory-entry"; + itemLink.append(itemButton); + $(".directory-list").css( + "gridTemplateColumns", + "repeat(auto-fill, minmax(80px, 1fr))", + ); + $(".directory-list").css("rowGap", "15px"); + } else if (ViewMode == "column") { + var itemButtonList = document.createElement("div"); + itemButtonList.innerHTML = ` + + +

${item.name}

+
+ +

${item.last_modified}

+

${formatBytes(parseInt(item.size), 2)}

+
+ `; + if (dualPaneSide != null && dualPaneSide != "") { + itemButtonList.className = "directory-entry dual-pane-list-item"; + } else { + itemButtonList.className = "item-button-list directory-entry"; + } + itemLink.append(itemButtonList); + $(".directory-list").css("gridTemplateColumns", "unset"); + $(".directory-list").css("rowGap", "2px"); + } + if (ViewMode == "miller") { + $(".directory-list").style.gridTemplateColumns = "unset"; + $(".directory-list").style.rowGap = "1px"; + } + // Start dragging item + itemLink.ondragstart = async (e) => { + e.preventDefault(); + IsFileOpIntern = true; + let icon = DefaultFileIcon; + if (itemLink.getAttribute("itemisdir") == 1) { + icon = DefaultFolderIcon; + } + if ( + ArrSelectedItems.find( + (itemOfArray) => + itemOfArray.getAttribute("itempath") == + itemLink.getAttribute("itempath"), + ) == null || + ArrSelectedItems.length == 0 + ) { + ArrSelectedItems.push(itemLink); + } + let arr = ArrSelectedItems.map((item) => item.getAttribute("itempath")); + if ( + Platform != "darwin" && + (Platform.includes("win") || Platform.includes("linux")) + ) { + await startDrag({ item: arr, icon: "" }); + unSelectAllItems(); + } else { + await startDrag({ item: arr, icon: icon }); + unSelectAllItems(); + } + }; + // Accept file drop into folders + itemLink.addEventListener("dragover", (e) => { + MousePos = [e.clientX, e.clientY]; + if (itemLink.getAttribute("itemisdir") == "1") { + if (!ArrSelectedItems.includes(itemLink)) { + itemLink.style.opacity = "0.5"; + itemLink.style.border = "1px solid var(--textColor)"; + DraggedOverElement = itemLink; + } + } + }); + itemLink.addEventListener("dragleave", () => { + itemLink.style.opacity = "1"; + itemLink.style.border = "1px solid transparent"; + }); + // :item_right_click :context_menu | AddSingleItem() + // Open context menu when right-clicking on file/folder + itemLink.addEventListener("contextmenu", async (e) => { + e.preventDefault(); + if (IsPopUpOpen == false && IsInputFocused == false) { + setupItemContextMenu(itemLink, e); + } + }); + + if (IsDualPaneEnabled === true) { + if (dualPaneSide === "left") { + $(".dual-pane-left").append(itemLink); + LeftPaneItemCollection = document.querySelector(".dual-pane-left"); + goUp(false, true); + } else if (dualPaneSide === "right") { + $(".dual-pane-right").append(itemLink); + RightPaneItemCollection = document.querySelector(".dual-pane-right"); + goUp(false, true); + } + } + else { + $(".directory-list").append(itemLink); + } + ArrDirectoryItems.push(itemLink); } async function getCurrentDir() { - return await invoke("get_current_dir"); + return await invoke("get_current_dir"); } async function setCurrentDir(currentDir = "", dualPaneSide = "") { - if (currentDir == "") return; - - if (dualPaneSide != "") { - SelectedItemPaneSide = dualPaneSide; - } - - await invoke("set_dir", { currentDir }).then(async (isSuccess) => { - if (isSuccess === false) { - alert("Switching directory failed. Probably no permissions."); - return; - } - CurrentDir = currentDir; - let currentDirContainer = document.querySelector(".current-path"); - currentDirContainer.innerHTML = ""; - let currentPathTracker = "/"; - if (Platform != "darwin" && Platform.includes("win")) { - currentPathTracker = ""; - } - currentDir.split("/").forEach((path) => { - if (path == "") return; - let pathItem = document.createElement("button"); - pathItem.textContent = path; - pathItem.className = "path-item"; - currentPathTracker += path + "/"; - pathItem.setAttribute("itempath", currentPathTracker); - pathItem.setAttribute("itempaneside", dualPaneSide); - pathItem.setAttribute("itemisdir", 1); - pathItem.setAttribute( - "onClick", - "openItem(this, '" + dualPaneSide + "', '')", - ); - pathItem.ondragover = (e) => { - MousePos = [e.clientX, e.clientY-60]; - e.preventDefault(); - pathItem.style.opacity = 0.5; - pathItem.style.border = "1px solid var(--textColor)"; - DraggedOverElement = pathItem; - } - pathItem.ondragleave = (e) => { - e.preventDefault(); - pathItem.style.opacity = 1; - pathItem.style.border = "1px solid transparent"; - } - let divider = document.createElement("i"); - divider.className = "fa fa-chevron-right"; - divider.style.color = "var(--textColor)"; - currentDirContainer.appendChild(pathItem); - currentDirContainer.appendChild(divider); - }); - try { - if (currentDirContainer?.lastElementChild?.textContent !== "/") { - currentDirContainer?.removeChild(currentDirContainer?.lastElementChild); - } - } - catch (err) { + if (currentDir == "") return; + + if (dualPaneSide != "") { + SelectedItemPaneSide = dualPaneSide; + } + + await invoke("set_dir", { currentDir }).then(async (isSuccess) => { + if (isSuccess === false) { + alert("Switching directory failed. Probably no permissions."); + return; + } + CurrentDir = currentDir; + let currentDirContainer = document.querySelector(".current-path"); + currentDirContainer.innerHTML = ""; + let currentPathTracker = "/"; + if (Platform != "darwin" && Platform.includes("win")) { + currentPathTracker = ""; + } + currentDir.split("/").forEach((path) => { + if (path == "") return; + let pathItem = document.createElement("button"); + pathItem.textContent = path; + pathItem.className = "path-item"; + currentPathTracker += path + "/"; + pathItem.setAttribute("itempath", currentPathTracker); + pathItem.setAttribute("itempaneside", dualPaneSide); + pathItem.setAttribute("itemisdir", 1); + pathItem.setAttribute( + "onClick", + "openItem(this, '" + dualPaneSide + "', '')", + ); + pathItem.ondragover = (e) => { + MousePos = [e.clientX, e.clientY-60]; + e.preventDefault(); + pathItem.style.opacity = 0.5; + pathItem.style.border = "1px solid var(--textColor)"; + DraggedOverElement = pathItem; + } + pathItem.ondragleave = (e) => { + e.preventDefault(); + pathItem.style.opacity = 1; + pathItem.style.border = "1px solid transparent"; + } + let divider = document.createElement("i"); + divider.className = "fa fa-chevron-right"; + divider.style.color = "var(--textColor)"; + currentDirContainer.appendChild(pathItem); + currentDirContainer.appendChild(divider); + }); + try { + if (currentDirContainer?.lastElementChild?.textContent !== "/") { + currentDirContainer?.removeChild(currentDirContainer?.lastElementChild); + } + } + catch (err) { await writeLog(err); - } - }); - - if (dualPaneSide == "left") { - LeftDualPanePath = currentDir; - $(".dual-pane-left").css("box-shadow", "inset 0px 0px 30px 3px var(--transparentColorActive)"); - $(".dual-pane-right").css("box-shadow", "none"); - } else if (dualPaneSide == "right") { - RightDualPanePath = currentDir; - $(".dual-pane-right").css("box-shadow", "inset 0px 0px 30px 3px var(--transparentColorActive)"); - $(".dual-pane-left").css("box-shadow", "none"); - } + } + }); + + if (dualPaneSide == "left") { + LeftDualPanePath = currentDir; + $(".dual-pane-left").css("box-shadow", "inset 0px 0px 30px 3px var(--transparentColorActive)"); + $(".dual-pane-right").css("box-shadow", "none"); + } else if (dualPaneSide == "right") { + RightDualPanePath = currentDir; + $(".dual-pane-right").css("box-shadow", "inset 0px 0px 30px 3px var(--transparentColorActive)"); + $(".dual-pane-left").css("box-shadow", "none"); + } } async function deleteItems() { - ContextMenu.style.display = "none"; - let msg = "Do you really want to delete:

"; - for (let i = 0; i < ArrSelectedItems.length; i++) { - if (i == 0) { - msg += "" + ArrSelectedItems[i].getAttribute("itemname") + ""; - } else { - msg += "
" + ArrSelectedItems[i].getAttribute("itemname") + ""; - } - } - let arr = ArrSelectedItems.map((item) => item.getAttribute("itempath")); - let isConfirm = await confirmPopup(msg, PopupType.DELETE); - if (isConfirm == true) { - let actionId = new Date().getMilliseconds(); - createNewAction(actionId, "Deleting", "Delete Items", "Delete Items"); - for (let i = 0; i < arr.length; i++) { - let actFileName = arr[i]; - await invoke("delete_item", { actFileName }); - } - IsCopyToCut = false; - await listDirectories(); - ArrSelectedItems = []; - showToast("Deletion of items is done", ToastType.INFO); - removeAction(actionId); - } + ContextMenu.style.display = "none"; + let msg = "Do you really want to delete:

"; + for (let i = 0; i < ArrSelectedItems.length; i++) { + if (i == 0) { + msg += "" + ArrSelectedItems[i].getAttribute("itemname") + ""; + } else { + msg += "
" + ArrSelectedItems[i].getAttribute("itemname") + ""; + } + } + let arr = ArrSelectedItems.map((item) => item.getAttribute("itempath")); + let isConfirm = await confirmPopup(msg, PopupType.DELETE); + if (isConfirm == true) { + let actionId = new Date().getMilliseconds(); + createNewAction(actionId, "Deleting", "Delete Items", "Delete Items"); + for (let i = 0; i < arr.length; i++) { + let actFileName = arr[i]; + await invoke("delete_item", { actFileName }); + } + IsCopyToCut = false; + await listDirectories(); + ArrSelectedItems = []; + showToast("Deletion of items is done", ToastType.INFO); + removeAction(actionId); + } } async function copyItem(item, toCut = false, fromInternal = false) { - if (item == null) { - return; - } - CopyFilePath = item?.getAttribute("itempath"); - let tempCopyFilePath = item?.getAttribute("itempath").split("/"); - CopyFileName = tempCopyFilePath[tempCopyFilePath.length - 1].replace("'", ""); - if (fromInternal == false) { - ArrCopyItems = []; - } - if (ArrSelectedItems.length > 0) { - for (let i = 0; i < ArrSelectedItems.length; i++) { - if (toCut === true) { - ArrSelectedItems[i].style.opacity = "0.5"; - ArrSelectedItems[i].style.filter = "blur(2px)"; - } - ArrCopyItems.push(ArrSelectedItems[i]); - } - } else { - ArrCopyItems.push(item); - if (toCut === true) { - item.style.opacity = "0.5"; - item.style.filter = "blur(2px)"; - } - } - ContextMenu.style.display = "none"; - await writeText(CopyFilePath); - if (toCut == true) { - IsCopyToCut = true; - } else { - IsCopyToCut = false; - } + if (item == null) { + return; + } + CopyFilePath = item?.getAttribute("itempath"); + let tempCopyFilePath = item?.getAttribute("itempath").split("/"); + CopyFileName = tempCopyFilePath[tempCopyFilePath.length - 1].replace("'", ""); + if (fromInternal == false) { + ArrCopyItems = []; + } + if (ArrSelectedItems.length > 0) { + for (let i = 0; i < ArrSelectedItems.length; i++) { + if (toCut === true) { + ArrSelectedItems[i].style.opacity = "0.5"; + ArrSelectedItems[i].style.filter = "blur(2px)"; + } + ArrCopyItems.push(ArrSelectedItems[i]); + } + } else { + ArrCopyItems.push(item); + if (toCut === true) { + item.style.opacity = "0.5"; + item.style.filter = "blur(2px)"; + } + } + ContextMenu.style.display = "none"; + await writeText(CopyFilePath); + if (toCut == true) { + IsCopyToCut = true; + } else { + IsCopyToCut = false; + } } async function extractItem(item) { - let compressFilePath = item.getAttribute("itempath"); - let compressFileName = compressFilePath.split("/")[compressFilePath.split("/").length - 1].replace("'", ""); - ContextMenu.style.display = "none"; - let isExtracting = await confirmPopup("Do you want to extract " + compressFileName + "?", PopupType.EXTRACT); - if (isExtracting == true) { - ContextMenu.style.display = "none"; - let extractFilePath = item.getAttribute("itempath"); - let extractFileName = item.getAttribute("itemname"); - if (extractFileName != "") { - let fromPath = extractFilePath.toString(); - await invoke("extract_item", { fromPath, appWindow }); - showToast("Extraction done", ToastType.SUCCESS); - await listDirectories(); - } - } + let compressFilePath = item.getAttribute("itempath"); + let compressFileName = compressFilePath.split("/")[compressFilePath.split("/").length - 1].replace("'", ""); + ContextMenu.style.display = "none"; + let isExtracting = await confirmPopup("Do you want to extract " + compressFileName + "?", PopupType.EXTRACT); + if (isExtracting == true) { + ContextMenu.style.display = "none"; + let extractFilePath = item.getAttribute("itempath"); + let extractFileName = item.getAttribute("itemname"); + if (extractFileName != "") { + let fromPath = extractFilePath.toString(); + await invoke("extract_item", { fromPath, appWindow }); + showToast("Extraction done", ToastType.SUCCESS); + await listDirectories(); + } + } } async function showCompressPopup(item) { - IsPopUpOpen = true; - ContextMenu.style.display = "none"; - let arrCompressItems = ArrSelectedItems; - if (ArrSelectedItems.length > 1) { - arrCompressItems = ArrSelectedItems; - } else { - arrCompressItems = [item]; - } - let compressFileName = ""; - if (arrCompressItems.length > 1) { - for (let i = 0; i < arrCompressItems.length; i++) { - compressFileName += arrCompressItems[i].getAttribute("itemname") + "
"; - } - } else { - compressFileName = item.getAttribute("itemname"); - } - if (compressFileName != "") { - let popup = document.createElement("div"); - popup.innerHTML = ` - -
-

Selected item

-
${compressFileName}
-
- - - `; - popup.className = "uni-popup compression-popup"; - document.querySelector("body").append(popup); - document - .querySelector(".compress-item-button") - .addEventListener("click", async () => { - await compressItem( - arrCompressItems, - $(".compression-popup-level-input").val(), - ); - }); - $(".compression-popup-level-input").on( - "focus", - () => (IsInputFocused = true), - ); - $(".compression-popup-level-input").on( - "blur", - () => (IsInputFocused = false), - ); - $(".compression-popup-level-input").on("keyup", (e) => { - if ( - ((e.ctrlKey && Platform != "darwin") || e.metaKey) && - e.key == "Enter" - ) { - $(".compress-item-button").click(); - } - }); - } + IsPopUpOpen = true; + ContextMenu.style.display = "none"; + let arrCompressItems = ArrSelectedItems; + if (ArrSelectedItems.length > 1) { + arrCompressItems = ArrSelectedItems; + } else { + arrCompressItems = [item]; + } + let compressFileName = ""; + if (arrCompressItems.length > 1) { + for (let i = 0; i < arrCompressItems.length; i++) { + compressFileName += arrCompressItems[i].getAttribute("itemname") + "
"; + } + } else { + compressFileName = item.getAttribute("itemname"); + } + if (compressFileName != "") { + let popup = document.createElement("div"); + popup.innerHTML = ` + +
+

Selected item

+
${compressFileName}
+
+ + + `; + popup.className = "uni-popup compression-popup"; + document.querySelector("body").append(popup); + document + .querySelector(".compress-item-button") + .addEventListener("click", async () => { + await compressItem( + arrCompressItems, + $(".compression-popup-level-input").val(), + ); + }); + $(".compression-popup-level-input").on( + "focus", + () => (IsInputFocused = true), + ); + $(".compression-popup-level-input").on( + "blur", + () => (IsInputFocused = false), + ); + $(".compression-popup-level-input").on("keyup", (e) => { + if ( + ((e.ctrlKey && Platform != "darwin") || e.metaKey) && + e.key == "Enter" + ) { + $(".compress-item-button").click(); + } + }); + } } async function compressItem(arrItems, compressionLevel = 3) { - closeCompressPopup(); - if (arrItems.length > 1) { - ContextMenu.style.display = "none"; - await invoke("arr_compress_items", { - arrItems: arrItems.map((item) => item.getAttribute("itempath")), - compressionLevel: parseInt(compressionLevel), - appWindow - }); - await listDirectories(); - showToast("Compressing done", ToastType.INFO); - } else { - let item = arrItems[0]; - let compressFilePath = item.getAttribute("itempath"); - let compressFileName = item.getAttribute("itemname"); - if (compressFileName != "") { - // open compressing... popup - ContextMenu.style.display = "none"; - SelectedItemPaneSide = item.getAttribute("itempaneside"); - await invoke("compress_item", { - fromPath: compressFilePath, - compressionLevel: parseInt(compressionLevel), - pathToZip: compressFilePath, - appWindow - }); - await listDirectories(); - showToast("Compressing done", ToastType.INFO); - } - } + closeCompressPopup(); + if (arrItems.length > 1) { + ContextMenu.style.display = "none"; + await invoke("arr_compress_items", { + arrItems: arrItems.map((item) => item.getAttribute("itempath")), + compressionLevel: parseInt(compressionLevel), + appWindow + }); + await listDirectories(); + showToast("Compressing done", ToastType.INFO); + } else { + let item = arrItems[0]; + let compressFilePath = item.getAttribute("itempath"); + let compressFileName = item.getAttribute("itemname"); + if (compressFileName != "") { + // open compressing... popup + ContextMenu.style.display = "none"; + SelectedItemPaneSide = item.getAttribute("itempaneside"); + await invoke("compress_item", { + fromPath: compressFilePath, + compressionLevel: parseInt(compressionLevel), + pathToZip: compressFilePath, + appWindow + }); + await listDirectories(); + showToast("Compressing done", ToastType.INFO); + } + } } async function closeCompressPopup() { - $(".compression-popup").remove(); - IsPopUpOpen = false; + $(".compression-popup").remove(); + IsPopUpOpen = false; IsInputFocused = false; } function showLoadingPopup(msg) { - let body = document.querySelector("body"); - let popup = document.createElement("div"); - popup.innerHTML = ` -

${msg}

-
- `; - popup.className = "uni-popup loading-popup"; - body.append(popup); - IsPopUpOpen = true; + let body = document.querySelector("body"); + let popup = document.createElement("div"); + popup.innerHTML = ` +

${msg}

+
+ `; + popup.className = "uni-popup loading-popup"; + body.append(popup); + IsPopUpOpen = true; } function closeLoadingPopup() { - $(".loading-popup").remove(); - IsPopUpOpen = false; + $(".loading-popup").remove(); + IsPopUpOpen = false; } function showInputPopup(msg) { - let body = document.querySelector("body"); - let popup = document.createElement("div"); - popup.innerHTML = ` -

${msg}

- - `; - popup.className = "input-popup input-dialog uni-popup"; - popup.children[1].addEventListener("keyup", async (e) => { - if (e.keyCode == 13) { + let body = document.querySelector("body"); + let popup = document.createElement("div"); + popup.innerHTML = ` +

${msg}

+ + `; + popup.className = "input-popup input-dialog uni-popup"; + popup.children[1].addEventListener("keyup", async (e) => { + if (e.keyCode == 13) { await openDirAndSwitch(popup.children[1].value); - await listDirectories(); - closeInputPopup(); - } - }); - body.append(popup); - IsPopUpOpen = true; - popup.children[1].focus(); - IsInputFocused = true; - popup.children[1].addEventListener("focusout", () => { - resetEverything(); - IsInputFocused = false; - }); + await listDirectories(); + closeInputPopup(); + } + }); + body.append(popup); + IsPopUpOpen = true; + popup.children[1].focus(); + IsInputFocused = true; + popup.children[1].addEventListener("focusout", () => { + resetEverything(); + IsInputFocused = false; + }); } function closeInputPopup() { - $(".input-popup").remove(); - IsPopUpOpen = false; + $(".input-popup").remove(); + IsPopUpOpen = false; IsInputFocused = false; } async function itemMoveTo(isForDualPane = false) { - ContextMenu.style.display = "none"; - let selectedPath = ""; - if (isForDualPane == false) { - selectedPath = await open({ multiple: false, directory: true }); - } else { - switch (SelectedItemPaneSide) { - case "left": - await setCurrentDir(RightDualPanePath, "right"); - selectedPath = CurrentDir; - break; - case "right": - await setCurrentDir(LeftDualPanePath, "left"); - selectedPath = CurrentDir; - break; - } - } - if (selectedPath != "" && selectedPath != null) { - await invoke("arr_copy_paste", { - appWindow, - arrItems: ArrSelectedItems.map((item) => item.getAttribute("itempath")), - isForDualPane: isForDualPane ? "1" : "0", - copyToPath: selectedPath, - }).then(async () => { - await invoke("arr_delete_items", { - arrItems: ArrSelectedItems.map((item) => item.getAttribute("itempath")), - }); - if (isForDualPane) { - refreshBothViews(SelectedItemPaneSide); - } else { - refreshView(); - } - }); - } + ContextMenu.style.display = "none"; + let selectedPath = ""; + if (isForDualPane == false) { + selectedPath = await open({ multiple: false, directory: true }); + } else { + switch (SelectedItemPaneSide) { + case "left": + await setCurrentDir(RightDualPanePath, "right"); + selectedPath = CurrentDir; + break; + case "right": + await setCurrentDir(LeftDualPanePath, "left"); + selectedPath = CurrentDir; + break; + } + } + if (selectedPath != "" && selectedPath != null) { + await invoke("arr_copy_paste", { + appWindow, + arrItems: ArrSelectedItems.map((item) => item.getAttribute("itempath")), + isForDualPane: isForDualPane ? "1" : "0", + copyToPath: selectedPath, + }).then(async () => { + await invoke("arr_delete_items", { + arrItems: ArrSelectedItems.map((item) => item.getAttribute("itempath")), + }); + if (isForDualPane) { + refreshBothViews(SelectedItemPaneSide); + } else { + refreshView(); + } + }); + } } async function pasteItem(copyToPath = "") { - let arr = []; - if (IsDualPaneEnabled == true) { - arr = ArrSelectedItems; - } else { - arr = ArrCopyItems; - } - - arr = arr.map((item) => ({ - name: item.getAttribute("itemname") ?? "", - path: item.getAttribute("itempath") ?? "", - is_dir: parseInt(item.getAttribute("itemisdir") ?? 0) ?? 0, - size: item.getAttribute("itemrawsize") ?? "", - last_modified: item.getAttribute("itemmodified") ?? "", - extension: item.getAttribute("itemext") ?? "", - })); - - ContextMenu.style.display = "none"; - if (IsDualPaneEnabled == true) { - if (SelectedItemPaneSide == "left") { - await invoke("set_dir", { currentDir: RightDualPanePath }); - await invoke("arr_copy_paste", { - appWindow, - arrItems: arr, - isForDualPane: "1", - copyToPath, - }); - } else if (SelectedItemPaneSide == "right") { - await invoke("set_dir", { currentDir: LeftDualPanePath }); - await invoke("arr_copy_paste", { - appWindow, - arrItems: arr, - isForDualPane: "1", - copyToPath, - }); - } - } else { - await invoke("arr_copy_paste", { - appWindow, - arrItems: arr, - isForDualPane: "0", - copyToPath, - }); - ContextMenu.style.display = "none"; - } - if (IsCopyToCut == true) { + let arr = []; + if (IsDualPaneEnabled == true) { + arr = ArrSelectedItems; + } else { + arr = ArrCopyItems; + } + + arr = arr.map((item) => ({ + name: item.getAttribute("itemname") ?? "", + path: item.getAttribute("itempath") ?? "", + is_dir: parseInt(item.getAttribute("itemisdir") ?? 0) ?? 0, + size: item.getAttribute("itemrawsize") ?? "", + last_modified: item.getAttribute("itemmodified") ?? "", + extension: item.getAttribute("itemext") ?? "", + })); + + ContextMenu.style.display = "none"; + if (IsDualPaneEnabled == true) { + if (SelectedItemPaneSide == "left") { + await invoke("set_dir", { currentDir: RightDualPanePath }); + await invoke("arr_copy_paste", { + appWindow, + arrItems: arr, + isForDualPane: "1", + copyToPath, + }); + } else if (SelectedItemPaneSide == "right") { + await invoke("set_dir", { currentDir: LeftDualPanePath }); + await invoke("arr_copy_paste", { + appWindow, + arrItems: arr, + isForDualPane: "1", + copyToPath, + }); + } + } else { + await invoke("arr_copy_paste", { + appWindow, + arrItems: arr, + isForDualPane: "0", + copyToPath, + }); + ContextMenu.style.display = "none"; + } + if (IsCopyToCut == true) { arr = arr.map((element) => element.path); if (arr.includes(copyToPath)) { alert("Cannot copy to the same directory"); writeLog("Cannot copy to the same directory"); return; } - await invoke("arr_delete_items", { - arrItems: arr, - }); - ArrCopyItems = []; - if (IsDualPaneEnabled === true) { - refreshBothViews(SelectedItemPaneSide); - } - await listDirectories(); - IsCopyToCut = false; - } - else { - await unSelectAllItems(); - await listDirectories(true); - } - if (arr.length >= 1) { - showToast("Done copying some files", ToastType.SUCCESS); - } + await invoke("arr_delete_items", { + arrItems: arr, + }); + ArrCopyItems = []; + if (IsDualPaneEnabled === true) { + refreshBothViews(SelectedItemPaneSide); + } + await listDirectories(); + IsCopyToCut = false; + } + else { + await unSelectAllItems(); + await listDirectories(true); + } + if (arr.length >= 1) { + showToast("Done copying some files", ToastType.SUCCESS); + } } function resetProgressBar() { - document.querySelector(".progress-bar-text").textContent = ""; - document.querySelector(".progress-bar-item-text").textContent = ""; - document.querySelector(".progress-bar-fill").style.width = "0px"; - document.querySelector(".progress-bar-container-popup").style.display = "none"; - document.querySelector(".progress-bar-2-fill").style.width = "0px"; + document.querySelector(".progress-bar-text").textContent = ""; + document.querySelector(".progress-bar-item-text").textContent = ""; + document.querySelector(".progress-bar-fill").style.width = "0px"; + document.querySelector(".progress-bar-container-popup").style.display = "none"; + document.querySelector(".progress-bar-2-fill").style.width = "0px"; } function createFolderInputPrompt() { - document.querySelectorAll(".input-dialog").forEach((item) => { - item.remove(); - }); - let nameInput = document.createElement("div"); - nameInput.className = "input-dialog uni-popup"; - nameInput.innerHTML = ` -

Type in a name for your new folder.

- - `; - document.querySelector("body").append(nameInput); - ContextMenu.style.display = "none"; - nameInput.children[1].focus(); - IsInputFocused = true; - IsDisableShortcuts = true; - IsPopUpOpen = false; - nameInput.addEventListener("keyup", (e) => { - if (e.keyCode === 13) { - createFolder(nameInput.children[1].value); - resetEverything(); - nameInput.remove(); - } - }); - IsPopUpOpen = true; - nameInput.addEventListener("focusout", () => { - IsInputFocused = false; - }); - nameInput.addEventListener("focusin", () => { - IsInputFocused = true; - }); + document.querySelectorAll(".input-dialog").forEach((item) => { + item.remove(); + }); + let nameInput = document.createElement("div"); + nameInput.className = "input-dialog uni-popup"; + nameInput.innerHTML = ` +

Type in a name for your new folder.

+ + `; + document.querySelector("body").append(nameInput); + ContextMenu.style.display = "none"; + nameInput.children[1].focus(); + IsInputFocused = true; + IsDisableShortcuts = true; + IsPopUpOpen = false; + nameInput.addEventListener("keyup", (e) => { + if (e.keyCode === 13) { + createFolder(nameInput.children[1].value); + resetEverything(); + nameInput.remove(); + } + }); + IsPopUpOpen = true; + nameInput.addEventListener("focusout", () => { + IsInputFocused = false; + }); + nameInput.addEventListener("focusin", () => { + IsInputFocused = true; + }); } function createFileInputPrompt(e) { - $(".input-dialog").remove(); - let nameInput = document.createElement("div"); - nameInput.className = "input-dialog"; - nameInput.innerHTML = ` -

Type in a name for your new file.

- - `; - document.querySelector("body").append(nameInput); - ContextMenu.style.display = "none"; - nameInput.children[1].focus(); - IsInputFocused = true; - IsDisableShortcuts = true; - nameInput.addEventListener("keyup", (e) => { - if (e.keyCode === 13) { - createFile(nameInput.children[1].value); - resetEverything(); - nameInput.remove(); - } - }); - IsPopUpOpen = true; - nameInput.addEventListener("focusout", () => { - IsInputFocused = false; - }); - nameInput.addEventListener("focusin", () => { - IsInputFocused = true; - }); + $(".input-dialog").remove(); + let nameInput = document.createElement("div"); + nameInput.className = "input-dialog"; + nameInput.innerHTML = ` +

Type in a name for your new file.

+ + `; + document.querySelector("body").append(nameInput); + ContextMenu.style.display = "none"; + nameInput.children[1].focus(); + IsInputFocused = true; + IsDisableShortcuts = true; + nameInput.addEventListener("keyup", (e) => { + if (e.keyCode === 13) { + createFile(nameInput.children[1].value); + resetEverything(); + nameInput.remove(); + } + }); + IsPopUpOpen = true; + nameInput.addEventListener("focusout", () => { + IsInputFocused = false; + }); + nameInput.addEventListener("focusin", () => { + IsInputFocused = true; + }); } function closeInputDialogs() { - $(".input-dialog").remove(); - IsDisableShortcuts = false; - IsPopUpOpen = false; + $(".input-dialog").remove(); + IsDisableShortcuts = false; + IsPopUpOpen = false; } function renameElementInputPrompt(item) { - unSelectAllItems(); - let tempFilePath = item.getAttribute("itempath"); - let tempRenameFilePath = item.getAttribute("itempath").split("/"); - let tempFileName = tempRenameFilePath[tempRenameFilePath.length - 1].replace( - "'", - "", - ); - let nameInput = document.createElement("div"); - - nameInput.className = "input-dialog"; - nameInput.innerHTML = ` -

Type in a new name for this item.

- - `; - - document.querySelector("body").append(nameInput); - ContextMenu.style.display = "none"; - IsDisableShortcuts = true; - IsPopUpOpen = true; - nameInput.children[1].focus(); - IsInputFocused = true; - nameInput.addEventListener("keydown", (e) => { - if (e.key == "Enter" && IsPopUpOpen == true) { - renameElement(tempFilePath, nameInput.children[1].value); - nameInput.remove(); - IsDisableShortcuts = false; - IsPopUpOpen = false; - } - }); - nameInput.addEventListener("focusout", () => { + unSelectAllItems(); + let tempFilePath = item.getAttribute("itempath"); + let tempRenameFilePath = item.getAttribute("itempath").split("/"); + let tempFileName = tempRenameFilePath[tempRenameFilePath.length - 1].replace( + "'", + "", + ); + let nameInput = document.createElement("div"); + + nameInput.className = "input-dialog"; + nameInput.innerHTML = ` +

Type in a new name for this item.

+ + `; + + document.querySelector("body").append(nameInput); + ContextMenu.style.display = "none"; + IsDisableShortcuts = true; + IsPopUpOpen = true; + nameInput.children[1].focus(); + IsInputFocused = true; + nameInput.addEventListener("keydown", (e) => { + if (e.key == "Enter" && IsPopUpOpen == true) { + renameElement(tempFilePath, nameInput.children[1].value); + nameInput.remove(); + IsDisableShortcuts = false; + IsPopUpOpen = false; + } + }); + nameInput.addEventListener("focusout", () => { IsInputFocused = false; - }); - nameInput.addEventListener("focusin", () => { - IsInputFocused = true; - }); - IsPopUpOpen = true; + }); + nameInput.addEventListener("focusin", () => { + IsInputFocused = true; + }); + IsPopUpOpen = true; } async function createFolder(folderName) { - let isDualPaneEnabled = IsDualPaneEnabled; - await invoke("create_folder", { folderName, isDualPaneEnabled }); - listDirectories(); + let isDualPaneEnabled = IsDualPaneEnabled; + await invoke("create_folder", { folderName, isDualPaneEnabled }); + listDirectories(); } async function createFile(fileName) { - await invoke("create_file", { fileName }); - listDirectories(); + await invoke("create_file", { fileName }); + listDirectories(); } async function renameElement(path, newName) { - await invoke("rename_element", { path, newName, appWindow }); - IsInputFocused = false; - await listDirectories(); + await invoke("rename_element", { path, newName, appWindow }); + IsInputFocused = false; + await listDirectories(); } async function showAppInfo() { - alert(` - App version: ${await getVersion()} - Tauri version: ${await getTauriVersion()} - Architecture: ${await arch()} - Developer: Ricky Dane - `); + alert(` + App version: ${await getVersion()} + Tauri version: ${await getTauriVersion()} + Architecture: ${await arch()} + Developer: Ricky Dane + `); } async function checkAppConfig() { - await applyPlatformFeatures(); - await invoke("check_app_config").then(async (appConfig) => { - let viewMode = appConfig.view_mode.replaceAll('"', ""); - switch (viewMode) { - case "wrap": - ViewMode = "miller"; - break; - case "column": - ViewMode = "wrap"; - break; - case "miller": - ViewMode = "column"; - break; - } - - await switchView(); - - // document.querySelector(".context-open-in-terminal").style.display = "none"; - - if (appConfig.is_dual_pane_enabled.includes("1")) { - document.querySelector(".show-dual-pane-checkbox").checked = true; - document.querySelector(".switch-dualpane-view-button").style.display = - "block"; - } else { - document.querySelector(".show-dual-pane-checkbox").checked = false; - document.querySelector(".switch-dualpane-view-button").style.display = - "none"; - } - if (appConfig.is_select_mode.includes("1")) { - document.querySelector("#choose-interaction-mode").checked = true; - IsSelectMode = true; - } else { - document.querySelector("#choose-interaction-mode").checked = false; - IsSelectMode = false; - } - - if (appConfig.is_image_preview.includes("1")) { - document.querySelector(".image-preview-checkbox").checked = - IsImagePreview = true; - } else { - document.querySelector(".image-preview-checkbox").checked = false; - } - - // Theme options - CurrentTheme = appConfig.current_theme; - appConfig.themes = await invoke("get_themes"); - // Fallback when there's no theme installed - if (appConfig.themes.length == 0) { - appConfig.themes = [ - { - "name": "Default", - "primary_color": "#3f4352", - "secondary_color": "rgba(56, 59, 71, 1)", - "tertiary_color": "#474b5c", - "text_color": "rgba(255, 255, 255, 0.8)", - "text_color2": "rgba(255, 255, 255, 0.6)", - "text_color3": "rgb(255, 255, 255)", - "transparent_color": "rgba(0, 0, 0, 0.15)", - "transparent_color_active": "rgba(0, 0, 0, 0.25)", - "site_bar_color": "rgb(45, 47, 57)", - "nav_bar_color": "rgba(30, 30, 40, 0.5)" - } - ]; - } - let themeSelect = document.querySelector(".theme-select"); - themeSelect.innerHTML = ""; - let themeCounter = 0; - appConfig.themes.forEach((theme) => { - let themeOption = document.createElement("option"); - themeOption.value = themeCounter; - themeOption.textContent = theme.name; - themeSelect.appendChild(themeOption); - themeCounter++; - }); - - // Set current theme - themeSelect.value = CurrentTheme; - - checkColorMode(appConfig); - - // General configurations - document.querySelector(".configured-path-one-input").value = ConfiguredPathOne = appConfig.configured_path_one; - document.querySelector(".configured-path-two-input").value = ConfiguredPathTwo = appConfig.configured_path_two; - document.querySelector(".configured-path-three-input").value = ConfiguredPathThree = appConfig.configured_path_three; - document.querySelector(".launch-path-input").value = appConfig.launch_path; - document.querySelector(".search-depth-input").value = SettingsSearchDepth = parseInt(appConfig.search_depth); - document.querySelector(".max-items-input").value = SettingsMaxItems = parseInt(appConfig.max_items); - - if (appConfig.is_dual_pane_active.includes("1")) { - await switchToDualPane(); - if (appConfig.launch_path.length >= 1) { - let path = appConfig.launch_path; - let isSwitched = await invoke("open_dir", { path }); - if (isSwitched === true) { - await setCurrentDir(path, "left"); - await listDirectories(); - } - } else { - await initDualPane(await getCurrentDir()); - await goHome(); - } - } else if (appConfig.launch_path.length >= 1 && IsFirstRun == true) { - let path = appConfig.launch_path; - let isSwitched = await invoke("open_dir", { path }); - if (isSwitched === true) { - await setCurrentDir(path, "left"); - await listDirectories(); - } else { - alert("No directory found or unable to open due to missing permissions"); - } - } else { - await initDualPane(await getCurrentDir()); - await goHome(); - } - }); - await unSelectAllItems(); - IsFirstRun = false; + await applyPlatformFeatures(); + await invoke("check_app_config").then(async (appConfig) => { + let viewMode = appConfig.view_mode.replaceAll('"', ""); + switch (viewMode) { + case "wrap": + ViewMode = "miller"; + break; + case "column": + ViewMode = "wrap"; + break; + case "miller": + ViewMode = "column"; + break; + } + + await switchView(); + + // document.querySelector(".context-open-in-terminal").style.display = "none"; + + if (appConfig.is_dual_pane_enabled.includes("1")) { + document.querySelector(".show-dual-pane-checkbox").checked = true; + document.querySelector(".switch-dualpane-view-button").style.display = + "block"; + } else { + document.querySelector(".show-dual-pane-checkbox").checked = false; + document.querySelector(".switch-dualpane-view-button").style.display = + "none"; + } + if (appConfig.is_select_mode.includes("1")) { + document.querySelector("#choose-interaction-mode").checked = true; + IsSelectMode = true; + } else { + document.querySelector("#choose-interaction-mode").checked = false; + IsSelectMode = false; + } + + if (appConfig.is_image_preview.includes("1")) { + document.querySelector(".image-preview-checkbox").checked = + IsImagePreview = true; + } else { + document.querySelector(".image-preview-checkbox").checked = false; + } + + // Theme options + CurrentTheme = appConfig.current_theme; + appConfig.themes = await invoke("get_themes"); + // Fallback when there's no theme installed + if (appConfig.themes.length == 0) { + appConfig.themes = [ + { + "name": "Default", + "primary_color": "#3f4352", + "secondary_color": "rgba(56, 59, 71, 1)", + "tertiary_color": "#474b5c", + "text_color": "rgba(255, 255, 255, 0.8)", + "text_color2": "rgba(255, 255, 255, 0.6)", + "text_color3": "rgb(255, 255, 255)", + "transparent_color": "rgba(0, 0, 0, 0.15)", + "transparent_color_active": "rgba(0, 0, 0, 0.25)", + "site_bar_color": "rgb(45, 47, 57)", + "nav_bar_color": "rgba(30, 30, 40, 0.5)" + } + ]; + } + let themeSelect = document.querySelector(".theme-select"); + themeSelect.innerHTML = ""; + let themeCounter = 0; + appConfig.themes.forEach((theme) => { + let themeOption = document.createElement("option"); + themeOption.value = themeCounter; + themeOption.textContent = theme.name; + themeSelect.appendChild(themeOption); + themeCounter++; + }); + + // Set current theme + themeSelect.value = CurrentTheme; + + checkColorMode(appConfig); + + // General configurations + document.querySelector(".configured-path-one-input").value = ConfiguredPathOne = appConfig.configured_path_one; + document.querySelector(".configured-path-two-input").value = ConfiguredPathTwo = appConfig.configured_path_two; + document.querySelector(".configured-path-three-input").value = ConfiguredPathThree = appConfig.configured_path_three; + document.querySelector(".launch-path-input").value = appConfig.launch_path; + document.querySelector(".search-depth-input").value = SettingsSearchDepth = parseInt(appConfig.search_depth); + document.querySelector(".max-items-input").value = SettingsMaxItems = parseInt(appConfig.max_items); + + if (appConfig.is_dual_pane_active.includes("1")) { + await switchToDualPane(); + if (appConfig.launch_path.length >= 1) { + let path = appConfig.launch_path; + let isSwitched = await invoke("open_dir", { path }); + if (isSwitched === true) { + await setCurrentDir(path, "left"); + await listDirectories(); + } + } else { + await initDualPane(await getCurrentDir()); + await goHome(); + } + } else if (appConfig.launch_path.length >= 1 && IsFirstRun == true) { + let path = appConfig.launch_path; + let isSwitched = await invoke("open_dir", { path }); + if (isSwitched === true) { + await setCurrentDir(path, "left"); + await listDirectories(); + } else { + alert("No directory found or unable to open due to missing permissions"); + } + } else { + await initDualPane(await getCurrentDir()); + await goHome(); + } + }); + await unSelectAllItems(); + IsFirstRun = false; } async function applyPlatformFeatures() { - Platform = await platform(); - // Check for macOS and position titlebar buttons on the left - if (Platform == "darwin") { - let headerNav = document.querySelector(".header-nav"); - // headerNav.style.borderBottom = "none"; - headerNav.style.boxShadow = "none"; - $(".site-nav-bar").css("padding-top", "50px"); - $(".search-bar-input").attr("placeholder", "Cmd + F"); - $(".settings-ui-header").css("padding", "5px 5px 5px 100px"); - } else { - appWindow.transparent = true; - appWindow.setDecorations(false); - $(".windows-linux-titlebar-buttons").css("display", "flex"); - $('.minimize-button').on('click', () => appWindow.minimize()) - $('.maximize-button').on('click', () => appWindow.toggleMaximize()) - $('.close-button').on('click', () => appWindow.close()) - $(".search-bar-input").attr("placeholder", "Ctrl + F"); - } - DefaultFileIcon = await resolveResource("resources/file-icon.png"); - DefaultFolderIcon = await resolveResource("resources/folder-icon.png"); + Platform = await platform(); + // Check for macOS and position titlebar buttons on the left + if (Platform == "darwin") { + let headerNav = document.querySelector(".header-nav"); + // headerNav.style.borderBottom = "none"; + headerNav.style.boxShadow = "none"; + $(".site-nav-bar").css("padding-top", "50px"); + $(".search-bar-input").attr("placeholder", "Cmd + F"); + $(".settings-ui-header").css("padding", "5px 5px 5px 100px"); + } else { + appWindow.transparent = true; + appWindow.setDecorations(false); + $(".windows-linux-titlebar-buttons").css("display", "flex"); + $('.minimize-button').on('click', () => appWindow.minimize()) + $('.maximize-button').on('click', () => appWindow.toggleMaximize()) + $('.close-button').on('click', () => appWindow.close()) + $(".search-bar-input").attr("placeholder", "Ctrl + F"); + } + DefaultFileIcon = await resolveResource("resources/file-icon.png"); + DefaultFolderIcon = await resolveResource("resources/folder-icon.png"); } async function listDisks() { - await invoke("list_disks").then((disks) => { - IsShowDisks = true; - document.querySelector(".disk-list-column-header").style.display = "block"; - document.querySelector(".normal-list-column-header").style.display = "none"; - document.querySelector(".tab-container-" + CurrentActiveTab).innerHTML = ""; - DirectoryList = document.createElement("div"); - DirectoryList.className = "directory-list"; - disks.forEach((item) => { - let itemLink = document.createElement("button"); - itemLink.setAttribute( - "itempath", - item.path.replace('"', "").replace('"', ""), - ); - itemLink.setAttribute( - "itemname", - item.name.replace('"', "").replace('"', ""), - ); - itemLink.setAttribute("itemisdir", 1); - itemLink.setAttribute("onclick", "interactWithItem(this, '')"); - itemLink.className = "item-link directory-entry"; - let itemButton = document.createElement("div"); - if (item.name == "") { - item.name = "/"; - } - itemButton.innerHTML = ` - -
- - - Description:${item.name} - File-System:${item.format.replace('"', "").replace('"', "")} - - - Total space:${formatBytes(item.capacity)} - Available space:${formatBytes(item.avail)} - -
- -
-

Usage: ${formatBytes(item.capacity)} / ${formatBytes(item.avail)} available (${evalCurrentLoad(item.avail, item.capacity)}%)

-
-
- `; - itemButton.className = "disk-item-button-button directory-entry"; - let itemButtonList = document.createElement("div"); - itemButtonList.innerHTML = ` - - -

${item.name}

-
- -

${formatBytes(item.avail)}

-

${formatBytes(item.capacity)}

-
- `; - itemButtonList.className = "item-button-list directory-entry"; - if (ViewMode == "column") { - itemButton.style.display = "none"; - DirectoryList.style.gridTemplateColumns = "unset"; - DirectoryList.style.rowGap = "2px"; - } else { - itemButtonList.style.display = "none"; - DirectoryList.style.gridTemplateColumns = "unset"; - DirectoryList.style.rowGap = "10px"; - } - itemButton.style.width = "100%"; - itemButton.style.height = "100px"; - itemLink.append(itemButton); - itemLink.append(itemButtonList); - DirectoryList.append(itemLink); - document.querySelector(".current-path").innerHTML = ` -
Disks
- `; - }); - }); - document.querySelector(".tab-container-" + CurrentActiveTab).append(DirectoryList); - insertSiteNavButtons(); + await invoke("list_disks").then((disks) => { + IsShowDisks = true; + document.querySelector(".disk-list-column-header").style.display = "block"; + document.querySelector(".normal-list-column-header").style.display = "none"; + document.querySelector(".tab-container-" + CurrentActiveTab).innerHTML = ""; + DirectoryList = document.createElement("div"); + DirectoryList.className = "directory-list"; + disks.forEach((item) => { + let itemLink = document.createElement("button"); + itemLink.setAttribute( + "itempath", + item.path.replace('"', "").replace('"', ""), + ); + itemLink.setAttribute( + "itemname", + item.name.replace('"', "").replace('"', ""), + ); + itemLink.setAttribute("itemisdir", 1); + itemLink.setAttribute("onclick", "interactWithItem(this, '')"); + itemLink.className = "item-link directory-entry"; + let itemButton = document.createElement("div"); + if (item.name == "") { + item.name = "/"; + } + itemButton.innerHTML = ` + +
+ + + Description:${item.name} + File-System:${item.format.replace('"', "").replace('"', "")} + + + Total space:${formatBytes(item.capacity)} + Available space:${formatBytes(item.avail)} + +
+ +
+

Usage: ${formatBytes(item.capacity)} / ${formatBytes(item.avail)} available (${evalCurrentLoad(item.avail, item.capacity)}%)

+
+
+ `; + itemButton.className = "disk-item-button-button directory-entry"; + let itemButtonList = document.createElement("div"); + itemButtonList.innerHTML = ` + + +

${item.name}

+
+ +

${formatBytes(item.avail)}

+

${formatBytes(item.capacity)}

+
+ `; + itemButtonList.className = "item-button-list directory-entry"; + if (ViewMode == "column") { + itemButton.style.display = "none"; + DirectoryList.style.gridTemplateColumns = "unset"; + DirectoryList.style.rowGap = "2px"; + } else { + itemButtonList.style.display = "none"; + DirectoryList.style.gridTemplateColumns = "unset"; + DirectoryList.style.rowGap = "10px"; + } + itemButton.style.width = "100%"; + itemButton.style.height = "100px"; + itemLink.append(itemButton); + itemLink.append(itemButtonList); + DirectoryList.append(itemLink); + document.querySelector(".current-path").innerHTML = ` +
Disks
+ `; + }); + }); + document.querySelector(".tab-container-" + CurrentActiveTab).append(DirectoryList); + insertSiteNavButtons(); } async function listDirectories(fromDualPaneCopy = false) { - let lsItems = await invoke("list_dirs"); - if (IsDualPaneEnabled == true) { - ViewMode = "column"; - if (fromDualPaneCopy == true) { - switch (SelectedItemPaneSide) { - case "left": - CurrentDir = RightDualPanePath; - await showItems(lsItems, "right"); - break; - case "right": - CurrentDir = LeftDualPanePath; - await showItems(lsItems, "left"); - break; - } - } - else { - await showItems(lsItems, SelectedItemPaneSide); - } - goUp(false, true); - } else { - await showItems(lsItems, "", CurrentMillerCol); - } - setTimeout(() => { - ds.setSettings({ - selectables: document.querySelectorAll(".item-link"), - }); - }, 500); + let lsItems = await invoke("list_dirs"); + if (IsDualPaneEnabled == true) { + ViewMode = "column"; + if (fromDualPaneCopy == true) { + switch (SelectedItemPaneSide) { + case "left": + CurrentDir = RightDualPanePath; + await showItems(lsItems, "right"); + break; + case "right": + CurrentDir = LeftDualPanePath; + await showItems(lsItems, "left"); + break; + } + } + else { + await showItems(lsItems, SelectedItemPaneSide); + } + goUp(false, true); + } else { + await showItems(lsItems, "", CurrentMillerCol); + } + setTimeout(() => { + ds.setSettings({ + selectables: document.querySelectorAll(".item-link"), + }); + }, 500); } async function refreshView() { - await listDirectories(); + await listDirectories(); } async function refreshBothViews(dualPaneSide = "") { - switch (dualPaneSide) { - case "left": - await setCurrentDir(RightDualPanePath, "right"); - await listDirectories(); - await setCurrentDir(LeftDualPanePath, "left"); - await listDirectories(); - goUp(false, true); - break; - case "right": - await setCurrentDir(LeftDualPanePath, "left"); - await listDirectories(); - await setCurrentDir(RightDualPanePath, "right"); - await listDirectories(); - goUp(false, true); - break; - } + switch (dualPaneSide) { + case "left": + await setCurrentDir(RightDualPanePath, "right"); + await listDirectories(); + await setCurrentDir(LeftDualPanePath, "left"); + await listDirectories(); + goUp(false, true); + break; + case "right": + await setCurrentDir(LeftDualPanePath, "left"); + await listDirectories(); + await setCurrentDir(RightDualPanePath, "right"); + await listDirectories(); + goUp(false, true); + break; + } } async function interactWithItem( - element = null, - dualPaneSide = "", - shortcutPath = null, + element = null, + dualPaneSide = "", + shortcutPath = null, ) { - let isDir = element?.getAttribute("itemisdir"); - if (dualPaneSide == "left") { - document.querySelector(".dual-pane-left").style.boxShadow = - "inset 0px 0px 30px 3px rgba(0, 0, 0, 0.2)"; - document.querySelector(".dual-pane-right").style.boxShadow = "none"; - } else if (dualPaneSide == "right") { - document.querySelector(".dual-pane-right").style.boxShadow = - "inset 0px 0px 30px 3px rgba(0, 0, 0, 0.2)"; - document.querySelector(".dual-pane-left").style.boxShadow = "none"; - } - // Interaction mode: Select - if ( - element != null && - element != SelectedItemToOpen && - IsSelectMode == true && - (isDir == 0 || ViewMode != "miller" || IsMetaDown == true) - ) { - if (IsShiftDown === true) { - if (IsDualPaneEnabled === false) { - let firstIndex = parseInt(SelectedElement.getAttribute("itemindex")); - let lastIndex = parseInt(element.getAttribute("itemindex")); - unSelectAllItems(); - if (firstIndex < lastIndex) { - for (let i = firstIndex; i <= lastIndex; i++) { - selectItem(DirectoryList.children[i]); - } - } - else { - for (let i = firstIndex; i >= lastIndex; i--) { - selectItem(DirectoryList.children[i]); - } - } - } - else { - if (dualPaneSide == "left") { - let firstIndex = parseInt(SelectedElement?.getAttribute("itemindex") ?? 0); - let lastIndex = parseInt(element.getAttribute("itemindex")); - unSelectAllItems(); - if (firstIndex < lastIndex) { - for (let i = firstIndex; i <= lastIndex; i++) { - selectItem(LeftPaneItemCollection.children[i]); - } - } - else { - for (let i = firstIndex; i >= lastIndex; i--) { - selectItem(LeftPaneItemCollection.children[i]); - } - } - } - else { - let firstIndex = parseInt(SelectedElement?.getAttribute("itemindex") ?? ß); - let lastIndex = parseInt(element.getAttribute("itemindex")); - unSelectAllItems(); - if (firstIndex < lastIndex) { - for (let i = firstIndex; i <= lastIndex; i++) { - selectItem(RightPaneItemCollection.children[i]); - } - } - else { - for (let i = firstIndex; i >= lastIndex; i--) { - selectItem(RightPaneItemCollection.children[i]); - } - } - } - } - } - else { - selectItem(element); - } - } - // Interaction mode: Open item - else if ( - (element != null && - (element == SelectedItemToOpen || IsSelectMode == false)) || - (isDir == 1 && ViewMode == "miller" && IsMetaDown == false) - ) { - await openItem(element, dualPaneSide, shortcutPath); - } - // Double click logic / reset after 500 ms to force double click to open - setTimeout(() => { - SelectedItemToOpen = null; - }, 250); // Maybe make this customizable in the future + let isDir = element?.getAttribute("itemisdir"); + if (dualPaneSide == "left") { + document.querySelector(".dual-pane-left").style.boxShadow = + "inset 0px 0px 30px 3px rgba(0, 0, 0, 0.2)"; + document.querySelector(".dual-pane-right").style.boxShadow = "none"; + } else if (dualPaneSide == "right") { + document.querySelector(".dual-pane-right").style.boxShadow = + "inset 0px 0px 30px 3px rgba(0, 0, 0, 0.2)"; + document.querySelector(".dual-pane-left").style.boxShadow = "none"; + } + // Interaction mode: Select + if ( + element != null && + element != SelectedItemToOpen && + IsSelectMode == true && + (isDir == 0 || ViewMode != "miller" || IsMetaDown == true) + ) { + if (IsShiftDown === true) { + if (IsDualPaneEnabled === false) { + let firstIndex = parseInt(SelectedElement.getAttribute("itemindex")); + let lastIndex = parseInt(element.getAttribute("itemindex")); + unSelectAllItems(); + if (firstIndex < lastIndex) { + for (let i = firstIndex; i <= lastIndex; i++) { + selectItem(DirectoryList.children[i]); + } + } + else { + for (let i = firstIndex; i >= lastIndex; i--) { + selectItem(DirectoryList.children[i]); + } + } + } + else { + if (dualPaneSide == "left") { + let firstIndex = parseInt(SelectedElement?.getAttribute("itemindex") ?? 0); + let lastIndex = parseInt(element.getAttribute("itemindex")); + unSelectAllItems(); + if (firstIndex < lastIndex) { + for (let i = firstIndex; i <= lastIndex; i++) { + selectItem(LeftPaneItemCollection.children[i]); + } + } + else { + for (let i = firstIndex; i >= lastIndex; i--) { + selectItem(LeftPaneItemCollection.children[i]); + } + } + } + else { + let firstIndex = parseInt(SelectedElement?.getAttribute("itemindex") ?? ß); + let lastIndex = parseInt(element.getAttribute("itemindex")); + unSelectAllItems(); + if (firstIndex < lastIndex) { + for (let i = firstIndex; i <= lastIndex; i++) { + selectItem(RightPaneItemCollection.children[i]); + } + } + else { + for (let i = firstIndex; i >= lastIndex; i--) { + selectItem(RightPaneItemCollection.children[i]); + } + } + } + } + } + else { + selectItem(element); + } + } + // Interaction mode: Open item + else if ( + (element != null && + (element == SelectedItemToOpen || IsSelectMode == false)) || + (isDir == 1 && ViewMode == "miller" && IsMetaDown == false) + ) { + await openItem(element, dualPaneSide, shortcutPath); + } + // Double click logic / reset after 500 ms to force double click to open + setTimeout(() => { + SelectedItemToOpen = null; + }, 250); // Maybe make this customizable in the future } async function openItem(element, dualPaneSide, shortcutDirPath = null) { - let isDir = - element != null - ? parseInt(element.getAttribute("itemisdir")) - : shortcutDirPath != null - ? 1 - : 0; - let path = element != null ? element.getAttribute("itempath") : shortcutDirPath; - let millerCol = element != null ? element.getAttribute("itemformillercol") : null; - let ext = element != null ? element.getAttribute("itemext") : null; - if (IsPopUpOpen == false || IsQuickSearchOpen === true) { - if ( - IsItemPreviewOpen == false && - isDir == 1 && - ext != ".app" - ) { - // Open directory - let isSwitched = await invoke("open_dir", { path }); - if (isSwitched == true) { - if (IsDualPaneEnabled === false) { - if (ViewMode == "miller") { - $(".selected-item").removeClass("selected-item"); - element.classList.add("selected-item"); - await removeExcessMillerCols(parseInt(millerCol)); - await addMillerCol(millerCol); - await setMillerColActive(null, millerCol); - await listDirectories(); - } - else { - await listDirectories(); - } - await setCurrentDir(path); - } else { - if (dualPaneSide == "left") { - LeftDualPanePath = path; - } else { - RightDualPanePath = path; - } - SelectedItemPaneSide = dualPaneSide; - await setCurrentDir(path, SelectedItemPaneSide); - await listDirectories(); - } - await unSelectAllItems(); - } else { - alert("Could not open directory"); - return; - } - } else if (IsItemPreviewOpen == false) { - await invoke("open_item", { path }); - } - } + let isDir = + element != null + ? parseInt(element.getAttribute("itemisdir")) + : shortcutDirPath != null + ? 1 + : 0; + let path = element != null ? element.getAttribute("itempath") : shortcutDirPath; + let millerCol = element != null ? element.getAttribute("itemformillercol") : null; + let ext = element != null ? element.getAttribute("itemext") : null; + if (IsPopUpOpen == false || IsQuickSearchOpen === true) { + if ( + IsItemPreviewOpen == false && + isDir == 1 && + ext != ".app" + ) { + // Open directory + let isSwitched = await invoke("open_dir", { path }); + if (isSwitched == true) { + if (IsDualPaneEnabled === false) { + if (ViewMode == "miller") { + $(".selected-item").removeClass("selected-item"); + element.classList.add("selected-item"); + await removeExcessMillerCols(parseInt(millerCol)); + await addMillerCol(millerCol); + await setMillerColActive(null, millerCol); + await listDirectories(); + } + else { + await listDirectories(); + } + await setCurrentDir(path); + } else { + if (dualPaneSide == "left") { + LeftDualPanePath = path; + } else { + RightDualPanePath = path; + } + SelectedItemPaneSide = dualPaneSide; + await setCurrentDir(path, SelectedItemPaneSide); + await listDirectories(); + } + await unSelectAllItems(); + } else { + alert("Could not open directory"); + return; + } + } else if (IsItemPreviewOpen == false) { + await invoke("open_item", { path }); + } + } } async function selectItem(element, dualPaneSide = "", isNotReset = false) { ContextMenu.style.display = "none"; - let path = element?.getAttribute("itempath"); - let index = element?.getAttribute("itemindex"); - // Reset colored selection - if (SelectedElement != null && IsMetaDown == false && IsCtrlDown == false && IsShiftDown == false && (isNotReset === false)) { - ArrSelectedItems.forEach((item) => { - if (IsDualPaneEnabled) { - item.classList.remove("selected-item"); - } else if (ViewMode == "column" || ViewMode == "miller") { - if (IsShowDisks) { - item.children[1].classList.remove("selected-item"); - } else { - item.children[0].classList.remove("selected-item"); - } - } else { - if (IsShowDisks == true) { - item.children[0].classList.remove("selected-item"); - } else { - item.children[0].classList.remove( - "selected-item", - ); - item.children[0].children[1].classList.remove( - "selected-item-min", - ); - } - } - }); - ArrSelectedItems = []; - } - SelectedElement = element; // Switch to new element / selection - SelectedItemToOpen = isNotReset ? null : element; - if (IsDualPaneEnabled) { - SelectedElement.children[0].classList.add("selected-item"); - } else if (ViewMode == "column" || ViewMode == "miller") { - if (IsShowDisks) { - SelectedElement?.children[1].classList.add("selected-item"); - } else { - SelectedElement?.children[0].classList.add("selected-item"); - } - } else { - if (IsShowDisks == true) { - SelectedElement.children[0].classList.add("selected-item"); - } else { - SelectedElement.children[0].children[0].classList.add( - "selected-item", - ); - SelectedElement.children[0].children[1].classList.add( - "selected-item-min", - ); - } - } - SelectedItemPath = path; - if (dualPaneSide != "" && dualPaneSide != null) { - SelectedItemPaneSide = dualPaneSide; - } - if (dualPaneSide == "left") { - LeftPaneItemIndex = index; - } else if (dualPaneSide == "right") { - RightPaneItemIndex = index; - } - // Switch item preview when already open - if (IsItemPreviewOpen == true) { - showItemPreview(SelectedElement, true); - } - ArrSelectedItems.push(SelectedElement); + let path = element?.getAttribute("itempath"); + let index = element?.getAttribute("itemindex"); + // Reset colored selection + if (SelectedElement != null && IsMetaDown == false && IsCtrlDown == false && IsShiftDown == false && (isNotReset === false)) { + ArrSelectedItems.forEach((item) => { + if (IsDualPaneEnabled) { + item.children[0].classList.remove("selected-item"); + } else if (ViewMode == "column" || ViewMode == "miller") { + if (IsShowDisks) { + item.children[1].classList.remove("selected-item"); + } else { + item.children[0].classList.remove("selected-item"); + } + } else { + if (IsShowDisks == true) { + item.children[0].classList.remove("selected-item"); + } else { + item.children[0].classList.remove( + "selected-item", + ); + item.children[0].children[1].classList.remove( + "selected-item-min", + ); + } + } + }); + ArrSelectedItems = []; + } + SelectedElement = element; // Switch to new element / selection + SelectedItemToOpen = isNotReset ? null : element; + if (IsDualPaneEnabled) { + SelectedElement?.children[0].classList.add("selected-item"); + } else if (ViewMode == "column" || ViewMode == "miller") { + if (IsShowDisks) { + SelectedElement?.children[1].classList.add("selected-item"); + } else { + SelectedElement?.children[0].classList.add("selected-item"); + } + } else { + if (IsShowDisks == true) { + SelectedElement?.children[0].classList.add("selected-item"); + } else { + SelectedElement?.children[0].children[0].classList.add( + "selected-item", + ); + SelectedElement?.children[0].children[1].classList.add( + "selected-item-min", + ); + } + } + SelectedItemPath = path; + if (dualPaneSide != "" && dualPaneSide != null) { + SelectedItemPaneSide = dualPaneSide; + } + if (dualPaneSide == "left") { + LeftPaneItemIndex = index; + } else if (dualPaneSide == "right") { + RightPaneItemIndex = index; + } + // Switch item preview when already open + if (IsItemPreviewOpen == true) { + showItemPreview(SelectedElement, true); + } + ArrSelectedItems.push(SelectedElement); } function deSelectitem(item) { - if (IsDualPaneEnabled) { - item.children[0].classList.remove("selected-item"); - } else if (ViewMode == "column") { - item.children[0].classList.remove("selected-item"); - } else { - item.children[0].children[0].classList.remove("selected-item"); - item.children[0].children[1].classList.remove( - "selected-item-min", - ); - } + if (IsDualPaneEnabled) { + item.children[0].classList.remove("selected-item"); + } else if (ViewMode == "column") { + item.children[0].classList.remove("selected-item"); + } else { + item.children[0].children[0].classList.remove("selected-item"); + item.children[0].children[1].classList.remove( + "selected-item-min", + ); + } } async function unSelectAllItems() { - if (ArrSelectedItems.length > 0) { - for (let i = 0; i < ArrSelectedItems.length; i++) { - if (IsDualPaneEnabled) { - ArrSelectedItems[i].children[0].classList.remove("selected-item"); - } else if (ViewMode == "column" || ViewMode == "miller") { - ArrSelectedItems[i].children[0].classList.remove("selected-item"); - } else { - try { - if (IsShowDisks === true) { - ArrSelectedItems[i].children[0].classList.remove("selected-item"); - ArrSelectedItems[i].children[1].classList.remove("selected-item-min"); - } else { - ArrSelectedItems[i].children[0].children[0].classList.remove("selected-item"); - ArrSelectedItems[i].children[0].children[1].classList.remove("selected-item-min"); - } - } catch (e) { - writeLog(e); - } - } - } - } - SelectedElement = null; - ArrSelectedItems = []; - SelectedItemToOpen = null; - $(".selected-item").removeClass("selected-item"); - $(".selected-item-min").removeClass("selected-item-min"); + if (ArrSelectedItems.length > 0) { + for (let i = 0; i < ArrSelectedItems.length; i++) { + if (IsDualPaneEnabled == true) { + ArrSelectedItems[i].children[0].classList.remove("selected-item"); + } else if (ViewMode == "column" || ViewMode == "miller") { + ArrSelectedItems[i].children[0].classList.remove("selected-item"); + } else { + try { + if (IsShowDisks === true) { + ArrSelectedItems[i].children[0].classList.remove("selected-item"); + ArrSelectedItems[i].children[1].classList.remove("selected-item-min"); + } else { + ArrSelectedItems[i].children[0].children[0].classList.remove("selected-item"); + ArrSelectedItems[i].children[0].children[1].classList.remove("selected-item-min"); + } + } catch (e) { + writeLog(e); + } + } + } + } + SelectedElement = null; + ArrSelectedItems = []; + SelectedItemToOpen = null; + $(".selected-item")?.removeClass("selected-item"); + $(".selected-item-min")?.removeClass("selected-item-min"); } async function goHome() { - await invoke("go_home"); - await listDirectories(); - await setCurrentDir(await getCurrentDir()); + await invoke("go_home"); + await listDirectories(); + await setCurrentDir(await getCurrentDir()); } async function goBack() { - if (IsDualPaneEnabled === true) { - if (SelectedItemPaneSide == "left") { - LeftPaneItemIndex = LastLeftPaneIndex ?? 0; - } else { - RightPaneItemIndex = LastRightPaneIndex ?? 0; - } - } - if (IsMetaDown == false) { - await invoke("go_back", { isDualPane: IsDualPaneEnabled }); - await listDirectories(); - } - await setCurrentDir(await getCurrentDir()); + if (IsDualPaneEnabled === true) { + if (SelectedItemPaneSide == "left") { + LeftPaneItemIndex = LastLeftPaneIndex ?? 0; + } else { + RightPaneItemIndex = LastRightPaneIndex ?? 0; + } + } + if (IsMetaDown == false) { + await invoke("go_back", { isDualPane: IsDualPaneEnabled }); + await listDirectories(); + } + await setCurrentDir(await getCurrentDir()); } function goUp(isSwitched = false, toFirst = false) { - if (IsDualPaneEnabled === true) { - let element = null; - let selectedItemIndex = 0; - if (toFirst == false) { - if (SelectedElement != null) { - if (SelectedItemPaneSide == "left") { - selectedItemIndex = LeftPaneItemIndex; - if (LeftPaneItemIndex > 0 && isSwitched == true) { - selectedItemIndex = LeftPaneItemIndex; - element = - LeftPaneItemCollection.querySelectorAll(".item-link")[ - selectedItemIndex - ]; - } else if (parseInt(selectedItemIndex) < 1) { - selectedItemIndex = 0; - element = LeftPaneItemCollection.querySelectorAll(".item-link")[0]; - } else { - selectedItemIndex = parseInt(selectedItemIndex) - 1; - element = - LeftPaneItemCollection.querySelectorAll(".item-link")[ - selectedItemIndex - ]; - } - LeftPaneItemIndex = selectedItemIndex; - } else if (SelectedItemPaneSide == "right") { - selectedItemIndex = RightPaneItemIndex; - if (RightPaneItemIndex > 0 && isSwitched == true) { - selectedItemIndex = RightPaneItemIndex; - element = - RightPaneItemCollection.querySelectorAll(".item-link")[ - selectedItemIndex - ]; - } else if (parseInt(selectedItemIndex) - 1 < 1) { - selectedItemIndex = 0; - element = RightPaneItemCollection.querySelectorAll(".item-link")[0]; - } else { - selectedItemIndex = parseInt(selectedItemIndex) - 1; - element = - RightPaneItemCollection.querySelectorAll(".item-link")[ - selectedItemIndex - ]; - } - RightPaneItemIndex = selectedItemIndex; - } - SelectedElement.style.backgroundColor = "transparent"; - } else { - SelectedItemPaneSide = "left"; - if (SelectedItemPaneSide == "right") { - RightPaneItemIndex = 0; - element = RightPaneItemCollection.querySelectorAll(".item-link")[0]; - } else { - LeftPaneItemIndex = 0; - element = LeftPaneItemCollection.querySelectorAll(".item-link")[0]; - } - if (element != null && element != SelectedElement) { - element.onclick(); - } - } - if ( - element != SelectedElement && - SelectedElement != null && - element != null - ) { - SelectedElement.style.backgroundColor = "transparent"; - element.onclick(); - } - - /* Scroll logic */ - if (SelectedItemPaneSide == "left") { - if ( - parseInt(selectedItemIndex) * 38 - - document.querySelector(".dual-pane-left").scrollTop < - 10 - ) { - document.querySelector(".dual-pane-left").scrollTop -= 38; - } - } else if (SelectedItemPaneSide == "right") { - if ( - parseInt(selectedItemIndex) * 38 - - document.querySelector(".dual-pane-right").scrollTop < - 10 - ) { - document.querySelector(".dual-pane-right").scrollTop -= 38; - } - } - } else { - if (SelectedItemPaneSide == "right") { - RightPaneItemIndex = 0; - element = RightPaneItemCollection.querySelectorAll(".item-link")[0]; - } else { - LeftPaneItemIndex = 0; - element = LeftPaneItemCollection.querySelectorAll(".item-link")[0]; - } - if (element != null && element != SelectedElement) { - element.onclick(); - } - } - } + if (IsDualPaneEnabled === true) { + let element = null; + let selectedItemIndex = 0; + if (toFirst == false) { + if (SelectedElement != null) { + if (SelectedItemPaneSide == "left") { + selectedItemIndex = LeftPaneItemIndex; + if (LeftPaneItemIndex > 0 && isSwitched == true) { + selectedItemIndex = LeftPaneItemIndex; + element = + LeftPaneItemCollection.querySelectorAll(".item-link")[ + selectedItemIndex + ]; + } else if (parseInt(selectedItemIndex) < 1) { + selectedItemIndex = 0; + element = LeftPaneItemCollection.querySelectorAll(".item-link")[0]; + } else { + selectedItemIndex = parseInt(selectedItemIndex) - 1; + element = + LeftPaneItemCollection.querySelectorAll(".item-link")[ + selectedItemIndex + ]; + } + LeftPaneItemIndex = selectedItemIndex; + } else if (SelectedItemPaneSide == "right") { + selectedItemIndex = RightPaneItemIndex; + if (RightPaneItemIndex > 0 && isSwitched == true) { + selectedItemIndex = RightPaneItemIndex; + element = + RightPaneItemCollection.querySelectorAll(".item-link")[ + selectedItemIndex + ]; + } else if (parseInt(selectedItemIndex) - 1 < 1) { + selectedItemIndex = 0; + element = RightPaneItemCollection.querySelectorAll(".item-link")[0]; + } else { + selectedItemIndex = parseInt(selectedItemIndex) - 1; + element = + RightPaneItemCollection.querySelectorAll(".item-link")[ + selectedItemIndex + ]; + } + RightPaneItemIndex = selectedItemIndex; + } + SelectedElement.style.backgroundColor = "transparent"; + } else { + SelectedItemPaneSide = "left"; + if (SelectedItemPaneSide == "right") { + RightPaneItemIndex = 0; + element = RightPaneItemCollection.querySelectorAll(".item-link")[0]; + } else { + LeftPaneItemIndex = 0; + element = LeftPaneItemCollection.querySelectorAll(".item-link")[0]; + } + if (element != null && element != SelectedElement) { + element.onclick(); + } + } + if ( + element != SelectedElement && + SelectedElement != null && + element != null + ) { + SelectedElement.style.backgroundColor = "transparent"; + element.onclick(); + } + + /* Scroll logic */ + if (SelectedItemPaneSide == "left") { + if ( + parseInt(selectedItemIndex) * 38 - + document.querySelector(".dual-pane-left").scrollTop < + 10 + ) { + document.querySelector(".dual-pane-left").scrollTop -= 38; + } + } else if (SelectedItemPaneSide == "right") { + if ( + parseInt(selectedItemIndex) * 38 - + document.querySelector(".dual-pane-right").scrollTop < + 10 + ) { + document.querySelector(".dual-pane-right").scrollTop -= 38; + } + } + } else { + if (SelectedItemPaneSide == "right") { + RightPaneItemIndex = 0; + element = RightPaneItemCollection.querySelectorAll(".item-link")[0]; + } else { + LeftPaneItemIndex = 0; + element = LeftPaneItemCollection.querySelectorAll(".item-link")[0]; + } + if (element != null && element != SelectedElement) { + element.onclick(); + } + } + } } function goDown() { - let element = null; - let selectedItemIndex = 0; - if (SelectedElement != null) { - selectedItemIndex = SelectedElement.getAttribute("itemindex"); - if (SelectedItemPaneSide == "left") { - if ( - parseInt(selectedItemIndex) + 1 >= - LeftPaneItemCollection.querySelectorAll(".item-link").length - 1 - ) { - selectedItemIndex = - LeftPaneItemCollection.querySelectorAll(".item-link").length - 1; - element = - LeftPaneItemCollection.querySelectorAll(".item-link")[ - parseInt(selectedItemIndex) - ]; - } else { - selectedItemIndex = parseInt(selectedItemIndex) + 1; - element = - LeftPaneItemCollection.querySelectorAll(".item-link")[ - selectedItemIndex - ]; - } - LeftPaneItemIndex = selectedItemIndex; - } else if (SelectedItemPaneSide == "right") { - if ( - parseInt(selectedItemIndex) + 1 >= - RightPaneItemCollection.querySelectorAll(".item-link").length - 1 - ) { - selectedItemIndex = - RightPaneItemCollection.querySelectorAll(".item-link").length - 1; - element = - RightPaneItemCollection.querySelectorAll(".item-link")[ - selectedItemIndex - ]; - } else { - selectedItemIndex = parseInt(selectedItemIndex) + 1; - element = - RightPaneItemCollection.querySelectorAll(".item-link")[ - selectedItemIndex - ]; - } - RightPaneItemIndex = selectedItemIndex; - } - } else { - if (SelectedItemPaneSide == "left") { - element = LeftPaneItemCollection.querySelectorAll(".item-link")[0]; - selectedItemIndex = 0; - LeftPaneItemIndex = selectedItemIndex; - } else if (SelectedItemPaneSide == "right") { - element = RightPaneItemCollection.querySelectorAll(".item-link")[0]; - selectedItemIndex = 0; - RightPaneItemIndex = selectedItemIndex; - } - } - if ( - element != null && - element != SelectedElement && - SelectedElement != null - ) { - SelectedElement.children[0].style.backgroundColor = "transparent"; - element.onclick(); - } - - /* Scroll logic */ - if (SelectedItemPaneSide == "left") { - if ( - parseInt(selectedItemIndex) * 38 - - document.querySelector(".dual-pane-left").scrollTop > - window.innerHeight - 150 - ) { - document.querySelector(".dual-pane-left").scrollTop += 38; - } - } else if (SelectedItemPaneSide == "right") { - if ( - parseInt(selectedItemIndex) * 38 - - document.querySelector(".dual-pane-right").scrollTop > - window.innerHeight - 150 - ) { - document.querySelector(".dual-pane-right").scrollTop += 38; - } - } + let element = null; + let selectedItemIndex = 0; + if (SelectedElement != null) { + selectedItemIndex = SelectedElement.getAttribute("itemindex"); + if (SelectedItemPaneSide == "left") { + if ( + parseInt(selectedItemIndex) + 1 >= + LeftPaneItemCollection.querySelectorAll(".item-link").length - 1 + ) { + selectedItemIndex = + LeftPaneItemCollection.querySelectorAll(".item-link").length - 1; + element = + LeftPaneItemCollection.querySelectorAll(".item-link")[ + parseInt(selectedItemIndex) + ]; + } else { + selectedItemIndex = parseInt(selectedItemIndex) + 1; + element = + LeftPaneItemCollection.querySelectorAll(".item-link")[ + selectedItemIndex + ]; + } + LeftPaneItemIndex = selectedItemIndex; + } else if (SelectedItemPaneSide == "right") { + if ( + parseInt(selectedItemIndex) + 1 >= + RightPaneItemCollection.querySelectorAll(".item-link").length - 1 + ) { + selectedItemIndex = + RightPaneItemCollection.querySelectorAll(".item-link").length - 1; + element = + RightPaneItemCollection.querySelectorAll(".item-link")[ + selectedItemIndex + ]; + } else { + selectedItemIndex = parseInt(selectedItemIndex) + 1; + element = + RightPaneItemCollection.querySelectorAll(".item-link")[ + selectedItemIndex + ]; + } + RightPaneItemIndex = selectedItemIndex; + } + } else { + if (SelectedItemPaneSide == "left") { + element = LeftPaneItemCollection.querySelectorAll(".item-link")[0]; + selectedItemIndex = 0; + LeftPaneItemIndex = selectedItemIndex; + } else if (SelectedItemPaneSide == "right") { + element = RightPaneItemCollection.querySelectorAll(".item-link")[0]; + selectedItemIndex = 0; + RightPaneItemIndex = selectedItemIndex; + } + } + if ( + element != null && + element != SelectedElement && + SelectedElement != null + ) { + SelectedElement.children[0].style.backgroundColor = "transparent"; + element.onclick(); + } + + /* Scroll logic */ + if (SelectedItemPaneSide == "left") { + if ( + parseInt(selectedItemIndex) * 38 - + document.querySelector(".dual-pane-left").scrollTop > + window.innerHeight - 150 + ) { + document.querySelector(".dual-pane-left").scrollTop += 38; + } + } else if (SelectedItemPaneSide == "right") { + if ( + parseInt(selectedItemIndex) * 38 - + document.querySelector(".dual-pane-right").scrollTop > + window.innerHeight - 150 + ) { + document.querySelector(".dual-pane-right").scrollTop += 38; + } + } } async function goToOtherPane() { - if (SelectedItemPaneSide == "right") { - await setCurrentDir(LeftDualPanePath, "left"); - } else { - await setCurrentDir(RightDualPanePath, "right"); - } - try { - goUp(true); - } - catch (e) { + if (SelectedItemPaneSide == "right") { + await setCurrentDir(LeftDualPanePath, "left"); + } else { + await setCurrentDir(RightDualPanePath, "right"); + } + try { + goUp(true); + } + catch (e) { writeLog(e); - } + } } async function initDualPane(path = "") { - LeftDualPanePath = path; - RightDualPanePath = path; - SelectedItemIndex = 0; - SelectedItemPaneSide = "left"; - await refreshBothViews(); - goUp(false, true); + LeftDualPanePath = path; + RightDualPanePath = path; + SelectedItemIndex = 0; + SelectedItemPaneSide = "left"; + await refreshBothViews(); + goUp(false, true); } function goLeft(isToFirst = false, index = null) { - if (index == null) { - if (SelectedElement == null) { - index = 0; - } - else { - index = parseInt(SelectedElement?.getAttribute("itemindex")) - 1 ?? 0; - } - } - if (index < 0) { - index = 0; - } - SelectedElement = DirectoryList.children[index]; - selectItem(SelectedElement); + if (index == null) { + if (SelectedElement == null) { + index = 0; + } + else { + index = parseInt(SelectedElement?.getAttribute("itemindex")) - 1 ?? 0; + } + } + if (index < 0) { + index = 0; + } + SelectedElement = DirectoryList.children[index]; + selectItem(SelectedElement); } function goRight(isToFirst = false, index = null) { - if (index == null) { - if (SelectedElement == null) { - index = 0; - } - else { - index = parseInt(SelectedElement?.getAttribute("itemindex")) + 1 ?? 0; - } - } - if (index > DirectoryList.children.length - 1) { - index = DirectoryList.children.length - 1; - } - SelectedElement = DirectoryList.children[index]; - selectItem(SelectedElement); + if (index == null) { + if (SelectedElement == null) { + index = 0; + } + else { + index = parseInt(SelectedElement?.getAttribute("itemindex")) + 1 ?? 0; + } + } + if (index > DirectoryList.children.length - 1) { + index = DirectoryList.children.length - 1; + } + SelectedElement = DirectoryList.children[index]; + selectItem(SelectedElement); } function goGridUp() { - var rowlen = Array.prototype.reduce.call(DirectoryList.children, function (prev, next) { - if (!prev[2]) { - var ret = next.getBoundingClientRect().left - // if increasing, increment unter - if (!(prev[0] > -1 && ret < prev[1])) { prev[0]++ } - else { prev[2] = 1 } // else stop counting - } - return [prev[0], ret, prev[2]] // [counter, elem, stop-counting] - }, [0, null, 0])[0]; - let index = 0; - if (SelectedElement != null) { - index = parseInt(SelectedElement?.getAttribute("itemindex")) - rowlen; - } - goLeft(false, index); + var rowlen = Array.prototype.reduce.call(DirectoryList.children, function (prev, next) { + if (!prev[2]) { + var ret = next.getBoundingClientRect().left + // if increasing, increment unter + if (!(prev[0] > -1 && ret < prev[1])) { prev[0]++ } + else { prev[2] = 1 } // else stop counting + } + return [prev[0], ret, prev[2]] // [counter, elem, stop-counting] + }, [0, null, 0])[0]; + let index = 0; + if (SelectedElement != null) { + index = parseInt(SelectedElement?.getAttribute("itemindex")) - rowlen; + } + goLeft(false, index); } function goGridDown() { - var rowlen = Array.prototype.reduce.call(DirectoryList.children, function (prev, next) { - if (!prev[2]) { - var ret = next.getBoundingClientRect().left - // if increasing, increment counter - if (!(prev[0] > -1 && ret < prev[1])) { prev[0]++ } - else { prev[2] = 1 } // else stop counting - } - return [prev[0], ret, prev[2]] // [counter, elem, stop-counting] - }, [0, null, 0])[0]; - let index = 0; - if (SelectedElement != null) { - index = parseInt(SelectedElement?.getAttribute("itemindex")) + rowlen; - } - goRight(false, index); + var rowlen = Array.prototype.reduce.call(DirectoryList.children, function (prev, next) { + if (!prev[2]) { + var ret = next.getBoundingClientRect().left + // if increasing, increment counter + if (!(prev[0] > -1 && ret < prev[1])) { prev[0]++ } + else { prev[2] = 1 } // else stop counting + } + return [prev[0], ret, prev[2]] // [counter, elem, stop-counting] + }, [0, null, 0])[0]; + let index = 0; + if (SelectedElement != null) { + index = parseInt(SelectedElement?.getAttribute("itemindex")) + rowlen; + } + goRight(false, index); } async function openSelectedItem() { - if (IsDualPaneEnabled === true) { - if (SelectedItemPaneSide == "left") { - LastLeftPaneIndex = LeftPaneItemIndex; - } - else { - LastRightPaneIndex = RightPaneItemIndex; - } - if (SelectedElement != null) { - await openItem(SelectedElement, SelectedItemPaneSide); - } - } - else { - if (SelectedElement != null) { - await openItem(SelectedElement); - } - } - goUp(false, true); + if (IsDualPaneEnabled === true) { + if (SelectedItemPaneSide == "left") { + LastLeftPaneIndex = LeftPaneItemIndex; + } + else { + LastRightPaneIndex = RightPaneItemIndex; + } + if (SelectedElement != null) { + await openItem(SelectedElement, SelectedItemPaneSide); + } + } + else { + if (SelectedElement != null) { + await openItem(SelectedElement); + } + } + goUp(false, true); } async function goToDir(directory) { - await invoke("go_to_dir", { directory }).then(async (items) => { - if (IsDualPaneEnabled == true) { - await showItems(items, SelectedItemPaneSide); - } else { - await showItems(items); - } - }); - await setCurrentDir(await getCurrentDir()); + await invoke("go_to_dir", { directory }).then(async (items) => { + if (IsDualPaneEnabled == true) { + await showItems(items, SelectedItemPaneSide); + } else { + await showItems(items); + } + }); + await setCurrentDir(await getCurrentDir()); } async function openInTerminal() { - if (!await invoke("open_in_terminal", {"path": ArrSelectedItems.length === 0 ? CurrentDir : SelectedItemPath})) { - if (Platform === "linux") { - showToast("Failed to open terminal. Make sure exo-open is installed and configured.", ToastType.ERROR, 5000); - } else { - showToast("Failed to open terminal.", ToastType.ERROR); - } - } - - ContextMenu.style.display = "none"; + if (!await invoke("open_in_terminal", {"path": ArrSelectedItems.length === 0 ? CurrentDir : SelectedItemPath})) { + if (Platform === "linux") { + showToast("Failed to open terminal. Make sure exo-open is installed and configured.", ToastType.ERROR, 5000); + } else { + showToast("Failed to open terminal.", ToastType.ERROR); + } + } + + ContextMenu.style.display = "none"; } async function searchFor( - fileName = "", - maxItems = SettingsMaxItems, - searchDepth = SettingsSearchDepth, - isQuickSearch = false, - fileContent = "", + fileName = "", + maxItems = SettingsMaxItems, + searchDepth = SettingsSearchDepth, + isQuickSearch = false, + fileContent = "", ) { - if (IsSearching === true) return; - if (fileName.length > 1 || isQuickSearch == true) { - $(".is-file-searching").css("display", "block"); - document.querySelector(".cancel-search-button").style.display = "block"; - if (IsDualPaneEnabled === true) { - if (SelectedItemPaneSide === "left") { - $(".dual-pane-left").html(""); - } - else { - $(".dual-pane-right").html(""); - } - } - else { - $(".directory-list").html(""); - } - IsSearching = true; - FoundItemsCountIndex = 0; - await invoke("search_for", { - fileName, - maxItems, - searchDepth, - fileContent, - appWindow, - isQuickSearch - }); - setTimeout(() => { - ds.setSettings({ - selectables: ArrDirectoryItems, - }); - }, 250); - } else { + if (IsSearching === true) return; + if (fileName.length > 1 || isQuickSearch == true) { + $(".is-file-searching").css("display", "block"); + document.querySelector(".cancel-search-button").style.display = "block"; + if (IsDualPaneEnabled === true) { + if (SelectedItemPaneSide === "left") { + $(".dual-pane-left").html(""); + } + else { + $(".dual-pane-right").html(""); + } + } + else { + $(".directory-list").html(""); + } + IsSearching = true; + FoundItemsCountIndex = 0; + await invoke("search_for", { + fileName, + maxItems, + searchDepth, + fileContent, + appWindow, + isQuickSearch + }); + setTimeout(() => { + ds.setSettings({ + selectables: ArrDirectoryItems, + }); + }, 250); + } else { stopFullSearch(); - alert("Type in a minimum of 2 characters"); - } - IsSearching = false; - IsFullSearching = false; + alert("Type in a minimum of 2 characters"); + } + IsSearching = false; + IsFullSearching = false; } function openFullSearchContainer() { - document.querySelector(".search-full-container").style.display = "flex"; - document.querySelector(".full-dualpane-search-input").focus(); - IsInputFocused = true; - IsPopUpOpen = true; - IsDisableShortcuts = true; + document.querySelector(".search-full-container").style.display = "flex"; + document.querySelector(".full-dualpane-search-input").focus(); + IsInputFocused = true; + IsPopUpOpen = true; + IsDisableShortcuts = true; document.querySelectorAll(".trigger-for-full-search").forEach(element => element.addEventListener("keydown", (e) => { if (e.key == "Enter") { startFullSearch(); @@ -3078,603 +3077,606 @@ function openFullSearchContainer() { } function closeFullSearchContainer() { - document.querySelector(".search-full-container").style.display = "none"; - IsPopUpOpen = false; - IsDisableShortcuts = false; - IsInputFocused = false; + document.querySelector(".search-full-container").style.display = "none"; + IsPopUpOpen = false; + IsDisableShortcuts = false; + IsInputFocused = false; } document.querySelector(".dualpane-search-input").addEventListener("keyup", async (e) => { - if (e.keyCode == 13) { // 13 = Enter - closeSearchBar(); - if (IsDualPaneEnabled == true) { - await openSelectedItem(SelectedElement); - } - } else if (IsQuickSearchOpen == true && e.key !== "Escape" && e.key != "Shift" && e.key != "Control" && e.key != "Alt" && e.key != "Meta") { - await searchFor($(".dualpane-search-input").val(), 999999, 1, true); - } else { - goUp(false, true); - } + if (e.keyCode == 13) { // 13 = Enter + closeSearchBar(); + if (IsDualPaneEnabled == true) { + await openSelectedItem(SelectedElement); + } + } else if (IsQuickSearchOpen == true && e.key !== "Escape" && e.key != "Shift" && e.key != "Control" && e.key != "Alt" && e.key != "Meta") { + await searchFor($(".dualpane-search-input").val(), 999999, 1, true); + } else { + goUp(false, true); + } }); function openSearchBar() { - document.querySelector(".search-bar-container").style.display = "flex"; - document.querySelector(".dualpane-search-input").focus(); - IsInputFocused = true; - IsDisableShortcuts = true; - IsQuickSearchOpen = true; - IsPopUpOpen = true; - document.querySelector(".dualpane-search-input").addEventListener("focusout", () => { - resetEverything(); - }); + document.querySelector(".search-bar-container").style.display = "flex"; + document.querySelector(".dualpane-search-input").focus(); + IsInputFocused = true; + IsDisableShortcuts = true; + IsQuickSearchOpen = true; + IsPopUpOpen = true; + document.querySelector(".dualpane-search-input").addEventListener("focusout", () => { + resetEverything(); + }); } function closeSearchBar() { - document.querySelector(".dualpane-search-input").value = ""; - document.querySelector(".search-bar-container").style.display = "none"; - IsDisableShortcuts = false; - IsQuickSearchOpen = false; - IsPopUpOpen = false; + document.querySelector(".dualpane-search-input").value = ""; + document.querySelector(".search-bar-container").style.display = "none"; + IsDisableShortcuts = false; + IsQuickSearchOpen = false; + IsPopUpOpen = false; } async function cancelSearch() { - document.querySelector(".cancel-search-button").style.display = "none"; - document.querySelector(".search-bar-input").value = ""; - await invoke("stop_searching"); - // await listDirectories(); + document.querySelector(".cancel-search-button").style.display = "none"; + document.querySelector(".search-bar-input").value = ""; + await invoke("stop_searching"); + // await listDirectories(); } async function switchView() { - if (IsDualPaneEnabled == false) { - if (ViewMode == "wrap") { - document.querySelectorAll(".directory-list").forEach((list) => { - list.style.gridTemplateColumns = "unset"; - list.style.rowGap = "2px"; - }); - if (IsShowDisks == false) { - document.querySelector(".switch-view-button").innerHTML = - ``; - } else { - document.querySelector(".switch-view-button").innerHTML = - ``; - } - document - .querySelectorAll(".item-button") - .forEach((item) => (item.style.display = "none")); - document - .querySelectorAll(".item-button-list") - .forEach((item) => (item.style.display = "flex")); - document - .querySelectorAll(".disk-item-button-button") - .forEach((item) => (item.style.display = "none")); - document.querySelector(".list-column-header").style.display = "flex"; - $(".explorer-container")?.css("padding", "100px 10px 10px 10px"); - ViewMode = "column"; - } else if (ViewMode == "column") { - document.querySelector(".list-column-header").style.display = "none"; - document.querySelector(".switch-view-button").innerHTML = ``; - document.querySelector(".miller-container").style.display = "flex"; - document.querySelector(".miller-column").style.display = "inline"; - document.querySelector(".non-dual-pane-container").style.display = "none"; - $(".explorer-container").css("padding", "10px 10px 0 10px"); - $(".file-searchbar").css("opacity", "0"); - $(".file-searchbar").css("pointer-events", "none"); - ViewMode = "miller"; - } else if (ViewMode == "miller" || IsShowDisks == true) { - document.querySelector(".explorer-container").style.width = "100%"; - document.querySelectorAll(".directory-list").forEach((list) => { - if (IsShowDisks == false) { - list.style.gridTemplateColumns = - "repeat(auto-fill, minmax(80px, 1fr))"; - list.style.rowGap = "15px"; - } else { - list.style.rowGap = "15px"; - } - }); - document.querySelector(".miller-container").style.display = "none"; - document.querySelector(".explorer-container").style.display = "block"; - document.querySelector(".switch-view-button").innerHTML = ``; - document.querySelectorAll(".item-button").forEach((item) => (item.style.display = "flex")); - document.querySelectorAll(".item-button-list").forEach((item) => (item.style.display = "none")); - document.querySelectorAll(".disk-item-button-button").forEach((item) => (item.style.display = "flex")); - document.querySelector(".list-column-header").style.display = "none"; - $(".explorer-container")?.css("padding", "85px 20px 20px 20px"); - $(".file-searchbar").css("opacity", "1"); - $(".file-searchbar").css("pointer-events", "all"); - ViewMode = "wrap"; - } - await invoke("switch_view", { viewMode: ViewMode }); - } - if (IsShowDisks === false) { - await listDirectories(); - } + if (IsDualPaneEnabled == false) { + if (ViewMode == "wrap") { + document.querySelectorAll(".directory-list").forEach((list) => { + list.style.gridTemplateColumns = "unset"; + list.style.rowGap = "2px"; + }); + if (IsShowDisks == false) { + document.querySelector(".switch-view-button").innerHTML = + ``; + } else { + document.querySelector(".switch-view-button").innerHTML = + ``; + } + document + .querySelectorAll(".item-button") + .forEach((item) => (item.style.display = "none")); + document + .querySelectorAll(".item-button-list") + .forEach((item) => (item.style.display = "flex")); + document + .querySelectorAll(".disk-item-button-button") + .forEach((item) => (item.style.display = "none")); + document.querySelector(".list-column-header").style.display = "flex"; + $(".explorer-container")?.css("padding", "100px 10px 10px 10px"); + ViewMode = "column"; + } else if (ViewMode == "column") { + document.querySelector(".list-column-header").style.display = "none"; + document.querySelector(".switch-view-button").innerHTML = ``; + document.querySelector(".miller-container").style.display = "flex"; + document.querySelector(".miller-column").style.display = "inline"; + document.querySelector(".non-dual-pane-container").style.display = "none"; + $(".explorer-container").css("padding", "10px 10px 0 10px"); + $(".file-searchbar").css("opacity", "0"); + $(".file-searchbar").css("pointer-events", "none"); + ViewMode = "miller"; + } else if (ViewMode == "miller" || IsShowDisks == true) { + document.querySelector(".explorer-container").style.width = "100%"; + document.querySelectorAll(".directory-list").forEach((list) => { + if (IsShowDisks == false) { + list.style.gridTemplateColumns = + "repeat(auto-fill, minmax(80px, 1fr))"; + list.style.rowGap = "15px"; + } else { + list.style.rowGap = "15px"; + } + }); + document.querySelector(".miller-container").style.display = "none"; + document.querySelector(".explorer-container").style.display = "block"; + document.querySelector(".switch-view-button").innerHTML = ``; + document.querySelectorAll(".item-button").forEach((item) => (item.style.display = "flex")); + document.querySelectorAll(".item-button-list").forEach((item) => (item.style.display = "none")); + document.querySelectorAll(".disk-item-button-button").forEach((item) => (item.style.display = "flex")); + document.querySelector(".list-column-header").style.display = "none"; + $(".explorer-container")?.css("padding", "85px 20px 20px 20px"); + $(".file-searchbar").css("opacity", "1"); + $(".file-searchbar").css("pointer-events", "all"); + ViewMode = "wrap"; + } + await invoke("switch_view", { viewMode: ViewMode }); + } + if (IsShowDisks === false) { + await listDirectories(); + } } async function switchToDualPane() { - if (IsDualPaneEnabled == false) { - OrgViewMode = ViewMode; - IsDualPaneEnabled = true; - ViewMode = "column"; - document.querySelector(".miller-container").style.display = "none"; - if (Platform == "darwin") { - $(".header-nav").css("padding-left", "85px"); - } - document.querySelectorAll(".item-button").forEach((item) => (item.style.display = "none")); - document.querySelectorAll(".item-button-list").forEach((item) => (item.style.display = "flex")); - document.querySelector(".switch-dualpane-view-button").innerHTML = ``; - await invoke("list_dirs").then(async (items) => { - await showItems(items, "left"); - await showItems(items, "right"); - goUp(false, true); - }); - document.querySelector(".site-nav-bar").style.width = "0px"; - document.querySelector(".site-nav-bar").style.minWidth = "0"; - if (Platform == "darwin") { - $(".site-nav-bar").css("padding", "55px 0 0 0"); - } - else { - $(".site-nav-bar").css("padding", "0"); - } - $(".list-column-header").css("height", "0"); - $(".list-column-header").css("padding", "0"); - $(".list-column-header").css("border", "none"); - $(".dual-pane-container").css("opacity", "1"); - $(".dual-pane-container").css("height", "100%"); - $(".dual-pane-container").css("padding-top", "55px"); - $(".non-dual-pane-container").css("width", "0"); - $(".non-dual-pane-container").css("opacity", "0"); - $(".non-dual-pane-container").css("height", "0px"); - $(".non-dual-pane-container").css("overflow", "hidden"); - $(".explorer-container").css("padding", "0"); - $(".file-searchbar").css("opacity", "0"); - $(".file-searchbar").css("pointer-events", "none"); - $(".switch-view-button").css("opacity", "0"); - $(".switch-view-button").css("pointer-events", "none"); - document.querySelectorAll(".item-button-list").forEach((item) => { - item.children[0].style.textOverflow = "none"; - }); - } else { - IsDualPaneEnabled = false; - $(".non-dual-pane-container")?.css("width", "calc(100vw - 150px)"); - $(".non-dual-pane-container")?.css("opacity", "1"); - $(".non-dual-pane-container")?.css("height", "100%"); - $(".non-dual-pane-container")?.css("padding", "10px 20px"); - $(".non-dual-pane-container").css("overflow-y", "auto"); - $(".site-nav-bar")?.css("width", "150px"); - $(".site-nav-bar")?.css("min-width", "150px"); - if (Platform == "darwin") { - $(".site-nav-bar")?.css("padding", "55px 10px 10px 10px"); - } - else { - $(".site-nav-bar")?.css("padding", "10px"); - } - $(".explorer-container").css("padding", "10px"); - $(".list-column-header")?.css("height", "35px"); - $(".list-column-header")?.css("padding", "5px"); - $(".list-column-header")?.css("border-bottom", "1px solid var(--tertiaryColor)"); - $(".dual-pane-container")?.css("opacity", "0"); - $(".dual-pane-container")?.css("height", "0"); - $(".dual-pane-container")?.css("padding-top", "0"); - $(".header-nav-right-container")?.css("opacity", "1"); - $(".header-nav-right-container").css("pointer-events", "all"); - $(".file-searchbar").css("opacity", "1"); - $(".file-searchbar").css("pointer-events", "all"); - $(".switch-view-button").css("opacity", "1"); - $(".switch-view-button").css("pointer-events", "all"); - if (Platform == "darwin") { - $(".header-nav")?.css("padding-left", "10px"); - } - await applyPlatformFeatures(); - document.querySelector(".switch-dualpane-view-button").innerHTML = - ``; - // Reset to view before the - switch (OrgViewMode) { - case "wrap": - ViewMode = "miller"; - break; - case "column": - ViewMode = "wrap"; - break; - case "miller": - ViewMode = "column"; - break; - } - await switchView(); - } - await saveConfig(false, false); + if (IsDualPaneEnabled == false) { + OrgViewMode = ViewMode; + IsDualPaneEnabled = true; + ViewMode = "column"; + document.querySelector(".miller-container").style.display = "none"; + if (Platform == "darwin") { + $(".header-nav").css("padding-left", "85px"); + } + document.querySelectorAll(".item-button").forEach((item) => (item.style.display = "none")); + document.querySelectorAll(".item-button-list").forEach((item) => (item.style.display = "flex")); + document.querySelector(".switch-dualpane-view-button").innerHTML = ``; + await invoke("list_dirs").then(async (items) => { + await showItems(items, "left"); + await showItems(items, "right"); + goUp(false, true); + }); + document.querySelector(".site-nav-bar").style.width = "0px"; + document.querySelector(".site-nav-bar").style.minWidth = "0"; + if (Platform == "darwin") { + $(".site-nav-bar").css("padding", "55px 0 0 0"); + } + else { + $(".site-nav-bar").css("padding", "0"); + } + $(".list-column-header").css("height", "0"); + $(".list-column-header").css("padding", "0"); + $(".list-column-header").css("border", "none"); + $(".dual-pane-container").css("opacity", "1"); + $(".dual-pane-container").css("height", "100%"); + $(".dual-pane-container").css("padding-top", "55px"); + $(".non-dual-pane-container").css("width", "0"); + $(".non-dual-pane-container").css("opacity", "0"); + $(".non-dual-pane-container").css("height", "0px"); + $(".non-dual-pane-container").css("overflow", "hidden"); + $(".explorer-container").css("padding", "0"); + $(".file-searchbar").css("opacity", "0"); + $(".file-searchbar").css("pointer-events", "none"); + $(".switch-view-button").css("opacity", "0"); + $(".switch-view-button").css("pointer-events", "none"); + document.querySelectorAll(".item-button-list").forEach((item) => { + item.children[0].style.textOverflow = "none"; + }); + } else { + IsDualPaneEnabled = false; + $(".non-dual-pane-container")?.css("width", "calc(100vw - 150px)"); + $(".non-dual-pane-container")?.css("opacity", "1"); + $(".non-dual-pane-container")?.css("height", "100%"); + $(".non-dual-pane-container")?.css("padding", "10px 20px"); + $(".non-dual-pane-container").css("overflow-y", "auto"); + $(".site-nav-bar")?.css("width", "150px"); + $(".site-nav-bar")?.css("min-width", "150px"); + if (Platform == "darwin") { + $(".site-nav-bar")?.css("padding", "55px 10px 10px 10px"); + } + else { + $(".site-nav-bar")?.css("padding", "10px"); + } + $(".explorer-container").css("padding", "10px"); + $(".list-column-header")?.css("height", "35px"); + $(".list-column-header")?.css("padding", "5px"); + $(".list-column-header")?.css("border-bottom", "1px solid var(--tertiaryColor)"); + $(".dual-pane-container")?.css("opacity", "0"); + $(".dual-pane-container")?.css("height", "0"); + $(".dual-pane-container")?.css("padding-top", "0"); + $(".header-nav-right-container")?.css("opacity", "1"); + $(".header-nav-right-container").css("pointer-events", "all"); + $(".file-searchbar").css("opacity", "1"); + $(".file-searchbar").css("pointer-events", "all"); + $(".switch-view-button").css("opacity", "1"); + $(".switch-view-button").css("pointer-events", "all"); + if (Platform == "darwin") { + $(".header-nav")?.css("padding-left", "10px"); + } + await applyPlatformFeatures(); + document.querySelector(".switch-dualpane-view-button").innerHTML = + ``; + // Reset to view before the + switch (OrgViewMode) { + case "wrap": + ViewMode = "miller"; + break; + case "column": + ViewMode = "wrap"; + break; + case "miller": + ViewMode = "column"; + break; + } + await switchView(); + } + await saveConfig(false, false); } function switchHiddenFiles() { - if (IsShowHiddenFiles) { - IsShowHiddenFiles = false; - document.querySelector(".switch-hidden-files-button").innerHTML = - ``; - } else { - IsShowHiddenFiles = true; - document.querySelector(".switch-hidden-files-button").innerHTML = - ``; - } - listDirectories(); + if (IsShowHiddenFiles) { + IsShowHiddenFiles = false; + document.querySelector(".switch-hidden-files-button").innerHTML = + ``; + } else { + IsShowHiddenFiles = true; + document.querySelector(".switch-hidden-files-button").innerHTML = + ``; + } + listDirectories(); } function openSettings() { - if (IsPopUpOpen == false) { - $(".settings-ui").css("display", "flex"); - // Workaround for opacity transition - setTimeout(() => { - $(".settings-ui").css("opacity", "1"); - }); - IsDisableShortcuts = true; - IsPopUpOpen = true; - } + if (IsPopUpOpen == false) { + $(".settings-ui").css("display", "flex"); + // Workaround for opacity transition + setTimeout(() => { + $(".settings-ui").css("opacity", "1"); + }); + IsDisableShortcuts = true; + IsPopUpOpen = true; + } } async function saveConfig(isToReload = true, isVerbose = true) { - let configuredPathOne = (ConfiguredPathOne = document.querySelector( - ".configured-path-one-input", - ).value); - let configuredPathTwo = (ConfiguredPathTwo = document.querySelector( - ".configured-path-two-input", - ).value); - let configuredPathThree = (ConfiguredPathThree = document.querySelector( - ".configured-path-three-input", - ).value); - let isOpenInTerminal = false; // document.querySelector(".openin-terminal-checkbox").checked; - let isDualPaneEnabled = document.querySelector( - ".show-dual-pane-checkbox", - ).checked; - let launchPath = document.querySelector(".launch-path-input").value; - let isDualPaneActive = IsDualPaneEnabled; - let searchDepth = parseInt( - document.querySelector(".search-depth-input").value, - ); - let maxItems = parseInt(document.querySelector(".max-items-input").value); - let isImagePreview = (IsImagePreview = document.querySelector( - ".image-preview-checkbox", - ).checked); - let isSelectMode = (IsSelectMode = $("#choose-interaction-mode").is( - ":checked", - )); - let currentTheme = $(".theme-select").val(); - - if (isOpenInTerminal == true) { - isOpenInTerminal = "1"; - } else { - isOpenInTerminal = "0"; - } - if (isDualPaneEnabled == true) { - isDualPaneEnabled = "1"; - } else { - isDualPaneEnabled = "0"; - } - if (isDualPaneActive == true) { - isDualPaneActive = "1"; - } else { - isDualPaneActive = "0"; - } - if (isImagePreview == true) { - isImagePreview = "1"; - } else { - isImagePreview = "0"; - } - if (isSelectMode == true) { - isSelectMode = "1"; - } else { - isSelectMode = "0"; - } - - await invoke("save_config", { - configuredPathOne, - configuredPathTwo, - configuredPathThree, - isOpenInTerminal, - isDualPaneEnabled, - launchPath, - isDualPaneEnabled, - isDualPaneActive, - searchDepth, - maxItems, - isImagePreview, - isSelectMode, - currentTheme, - arrFavorites: ArrFavorites, - }); - if (isVerbose === true) { - showToast("Settings have been saved", ToastType.INFO); - } - if (isToReload == true) { - checkAppConfig(); - } + let configuredPathOne = (ConfiguredPathOne = document.querySelector( + ".configured-path-one-input", + ).value); + let configuredPathTwo = (ConfiguredPathTwo = document.querySelector( + ".configured-path-two-input", + ).value); + let configuredPathThree = (ConfiguredPathThree = document.querySelector( + ".configured-path-three-input", + ).value); + let isOpenInTerminal = false; // document.querySelector(".openin-terminal-checkbox").checked; + let isDualPaneEnabled = document.querySelector( + ".show-dual-pane-checkbox", + ).checked; + let launchPath = document.querySelector(".launch-path-input").value; + let isDualPaneActive = IsDualPaneEnabled; + let searchDepth = parseInt( + document.querySelector(".search-depth-input").value, + ); + let maxItems = parseInt(document.querySelector(".max-items-input").value); + let isImagePreview = (IsImagePreview = document.querySelector( + ".image-preview-checkbox", + ).checked); + let isSelectMode = (IsSelectMode = $("#choose-interaction-mode").is( + ":checked", + )); + let currentTheme = $(".theme-select").val(); + + if (isOpenInTerminal == true) { + isOpenInTerminal = "1"; + } else { + isOpenInTerminal = "0"; + } + if (isDualPaneEnabled == true) { + isDualPaneEnabled = "1"; + } else { + isDualPaneEnabled = "0"; + } + if (isDualPaneActive == true) { + isDualPaneActive = "1"; + } else { + isDualPaneActive = "0"; + } + if (isImagePreview == true) { + isImagePreview = "1"; + } else { + isImagePreview = "0"; + } + if (isSelectMode == true) { + isSelectMode = "1"; + } else { + isSelectMode = "0"; + } + + await invoke("save_config", { + configuredPathOne, + configuredPathTwo, + configuredPathThree, + isOpenInTerminal, + isDualPaneEnabled, + launchPath, + isDualPaneEnabled, + isDualPaneActive, + searchDepth, + maxItems, + isImagePreview, + isSelectMode, + currentTheme, + arrFavorites: ArrFavorites, + }); + if (isVerbose === true) { + showToast("Settings have been saved", ToastType.INFO); + } + if (isToReload == true) { + checkAppConfig(); + } } async function addFavorites(item) { - ArrFavorites.push(item); - // await invoke("save_favorites", { arrFavorites: ArrFavorites }); // Todo: implement this + ArrFavorites.push(item); + // await invoke("save_favorites", { arrFavorites: ArrFavorites }); // Todo: implement this } function closeSettings() { - $(".settings-ui").css("opacity", "0"); - setTimeout(() => { - $(".settings-ui").css("display", "none"); - }, 300) - IsDisableShortcuts = false; - IsPopUpOpen = false; + $(".settings-ui").css("opacity", "0"); + setTimeout(() => { + $(".settings-ui").css("display", "none"); + }, 300) + IsDisableShortcuts = false; + IsPopUpOpen = false; } function getExtDescription(file_extension) { - return fileExtensions[file_extension.replace(".", "").toUpperCase()]; + return fileExtensions[file_extension.replace(".", "").toUpperCase()]; } async function showProperties(item) { - if (IsPopUpOpen === false) { - let name = item.getAttribute("itemname"); - let path = item.getAttribute("itempath"); - let ext = item.getAttribute("itemext"); - let extension_description = getExtDescription(ext); // undefined if it's unknown or a directory - let modifiedAt = item.getAttribute("itemmodified"); - ContextMenu.style.display = "none"; - let popup = document.createElement("div"); - popup.className = "uni-popup item-properties-popup"; - popup.innerHTML = ` - - - - `; - document.querySelector("body").append(popup); - IsPopUpOpen = true; - await getSimpleDirInfo(path, ".properties-item-size", item.getAttribute("itemisdir") == "1"); - } + + + ${extension_description ? `

Type: ${extension_description}

` : ''} +
+

Modified: ${modifiedAt}

+ + + `; + document.querySelector("body").append(popup); + IsPopUpOpen = true; + await getSimpleDirInfo(path, ".properties-item-size", item.getAttribute("itemisdir") == "1"); + } } function closeInfoProperties() { - $(".item-properties-popup")?.remove(); - IsPopUpOpen = false; - IsItemPreviewOpen = false; + $(".item-properties-popup")?.remove(); + IsPopUpOpen = false; + IsItemPreviewOpen = false; } async function showItemPreview(item, isOverride = false) { - let fadeTime = 200; - if (isOverride) { - $(".item-preview-popup")?.fadeOut(fadeTime); - $(".item-properties-popup").remove(); - IsPopUpOpen = false; - } - let name = item.getAttribute("itemname"); - let ext = item.getAttribute("itemext"); - let path = item.getAttribute("itempath"); - let popup = document.createElement("div"); - popup.className = "item-preview-popup"; - IsItemPreviewOpen = true; - let module = ""; + let fadeTime = 200; + if (isOverride) { + $(".item-preview-popup")?.fadeOut(fadeTime); + $(".item-properties-popup").remove(); + IsPopUpOpen = false; + } + let name = item.getAttribute("itemname"); + let ext = item.getAttribute("itemext"); + let path = item.getAttribute("itempath"); + let popup = document.createElement("div"); + popup.className = "item-preview-popup"; + IsItemPreviewOpen = true; + let module = ""; let moduleImgId = crypto.randomUUID(); - switch (ext.toLowerCase()) { - case ".png": - case ".icns": - case ".jpg": - case ".jpeg": - case ".gif": - case ".svg": - case ".webp": - case ".ico": - case ".jfif": - case ".avif": - module = ` -
- -
- `; - break; - case ".pdf": - case ".html": - module = `