let tree = {};
function create_tree_data(curr_dir) {
let url = base_url + curr_dir;
const xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function () {
if (this.readyState === 4) {
if (xmlHttp.status === 200) {
let data = JSON.parse(xmlHttp.responseText);
for (let i = 0; i < data.length; i++) {
if (data[i]['Type'] === 'dir') {
file_path.push(curr_dir + '/' + data[i]['Name']);
create_tree_data(curr_dir + '/' + data[i]['Name']);
}
}
tree = file_path.reduce((arr, path) => addPath(path.split('/'), arr), [])[0]['children'];
create_tree_view();
}
}
}
xmlHttp.open("GET", url, true);
xmlHttp.setRequestHeader('Authorization', 'Basic ' + sessionStorage.getItem('authorization'));
xmlHttp.send(null);
}
function create_tree_view() {
let html_tree = document.createElement('div');
html_tree.innerHTML = `
`;
document.getElementById("tree").innerHTML = '';
create_list_view(tree, document.getElementById("tree"), '');
// Remove nested-class from root element
document.getElementsByTagName('ul')[0].classList.remove('nested')
let icon = document.getElementsByClassName("folder");
for (let i = 0; i < icon.length; i++) {
icon[i].addEventListener("click", function () {
if (this.parentElement.querySelector(".nested") !== null) {
this.parentElement.querySelector(".nested").classList.toggle("active");
}
this.classList.toggle("folder-open");
});
}
}
function tree_onclick(url) {
window.history.pushState('index', 'Filemanager', 'index.html?path=' + url);
path_changed();
}
function create_list_view(dataRoot, elementRoot, url) {
if (dataRoot) {
const list = document.createElement('ul');
list.classList.add('nested');
elementRoot.appendChild(list);
Object.keys(dataRoot).forEach(key => {
const listElement = document.createElement('li');
listElement.innerHTML = `${dataRoot[key].text}`;
list.appendChild(listElement);
create_list_view(dataRoot[key]['children'], listElement, url + '/' + dataRoot[key].text);
});
}
}
function addPath(pathcomponents, arr) {
let component = pathcomponents.shift()
let comp = arr.find(item => item.text === component)
if (!comp) {
comp = {text: component}
arr.push(comp)
}
if (pathcomponents.length) {
addPath(pathcomponents, comp.children || (comp.children = []))
}
return arr
}