MememaView/file_structure.js
2024-05-26 00:52:58 +02:00

90 lines
2.6 KiB
JavaScript

add_file_tree_clickhanlder("left");
add_file_tree_clickhanlder("right");
function add_file_tree_clickhanlder(side) {
var hierarchy = document.getElementById("hierarchy-"+side );
hierarchy.addEventListener("click", function(event) {
var elem = event.target;
if(elem.tagName.toLowerCase() == "span" && elem !== event.currentTarget) {
var type = elem.classList.contains("folder") ? "folder" : "file";
if(type=="file") {
remove_info(side)
let path = cleanup_tree(elem);
path.unshift(elem.textContent);
let root_dir = document.getElementById(side + "_dir").value;
path.push(root_dir);
if( elem.textContent.endsWith('.mkv')) {
fetchmkvdata(path,side);
localStorage.setItem(side, JSON.stringify( [path, "file"]))
} else if ( elem.textContent.endsWith('.mp3') || elem.textContent.endsWith('.mp4')) {
create_convert_button(path, side);
}
handle_merge_button_changes()
}
if (type == "folder") {
var isexpanded = elem.dataset.isexpanded=="true";
if ( !isexpanded ) {
let path = get_path_var(elem);
let root_dir = document.getElementById(side + "_dir").value;
path.push(root_dir);
localStorage.setItem(side, JSON.stringify( [path, "folder"]))
fetchTable(elem.parentElement,path,side );
fetchmkvdata(path.reverse(),side);
} else {
localStorage.setItem(side, null)
remove_info(side)
cleanup_tree(elem);
handle_merge_button_changes()
}
elem.dataset.isexpanded = !isexpanded;
var toggleelms = [].slice.call(elem.parentElement.children);
var classnames = "file,foldercontainer".split(",");
toggleelms.forEach(function(element) {
if(classnames.some(function(val) {
return element.classList.contains(val);
}))
element.style.display = isexpanded ? "none" : "block";
});
}
}
});
}
function cleanup_tree(elem) {
let path = Array();
let parent_el = elem.parentElement;
while ( !parent_el.id || !parent_el.id.startsWith("hierarchy")) {
console.log(parent_el);
path.push(parent_el.dataset.folder);
parent_el = parent_el.parentElement;
}
parent_el.innerHTML ="";
for (let el of path.reverse()) {
let next_node = create_folder(el);
parent_el.appendChild(next_node);
parent_el = next_node;
}
if (elem.classList.contains("file")) {
parent_el.appendChild(elem);
}
return path;
}
function get_path_var(elem) {
let path = Array();
let parent_el = elem.parentElement;
while ( !parent_el.id || !parent_el.id.startsWith("hierarchy")) {
console.log(parent_el);
path.push(parent_el.dataset.folder);
parent_el = parent_el.parentElement;
}
return path;
}