Skip to content
Snippets Groups Projects
loaddir.js 8.22 KiB
Newer Older
  • Learn to ignore specific revisions
  • //funzione che definisce tutti gli elementi responsabili dell'apertura di un file.
    //Sono definiti quindi l'albero e il bottone per l'importazione da locale
    function setImportFile() {
        //genero e leggo il contenuto della directory "filesystem"
        var jsonResponse;
        var xmlListingFile = new XMLHttpRequest();
        xmlListingFile.open("GET", "https://baltig.infn.it/api/v4/projects/819/repository/tree?recursive=1&path=XRF-File-System", false);
        xmlListingFile.onreadystatechange = function () {
            if (xmlListingFile.readyState === 4) {
                if (xmlListingFile.status === 200) {
                    jsonResponse = JSON.parse(xmlListingFile.responseText);
                }
            }
        };
        xmlListingFile.send(null);
        //ora genero l'albero e definisco l'evento in caso di selezione di un nodo
        $('#FileTreeview').treeview({ data: generateTree(jsonResponse) });
        $('#FileTreeview').on('nodeSelected', function (e, node) {
            if (node['url'] != undefined) {
                $("#load-spinner").css("display", "inline");
                $("#wrapper").css("opacity", "0.25");
                openFileFromServer(node['url']);
            }
        });
        //bottone per l'importazione locale
        var fileInputButton = document.getElementById('myImport');
        fileInputButton.onchange = function () {
            $("#load-spinner").css("display", "inline");
            $("#wrapper").css("opacity", "0.25");
            var fileName = fileInputButton.files[0];
            var readerObject = new FileReader();
            readerObject.readAsBinaryString(fileName);
            readerObject.onload = function () {
                var fileString = readerObject.result;
                readData(fileString);
            };
        };
    }
    //funzione che genera automaticamente l'albero
    function generateTree(jsonDoc) {
        var tree = [{
                text: "XRF-File-System",
                nodes: []
            }];
        //scorro ogni elemento dell'albero
        for (var i = 0; i < jsonDoc.length; i++) {
            if (jsonDoc[i].type == "tree") {
                var Folder = {
                    text: jsonDoc[i].name,
                    relativePath: jsonDoc[i].path,
                    nodes: []
                };
                insertOBJinFS(Folder, tree);
            }
            else {
                var File = {
                    text: jsonDoc[i].name,
                    relativePath: jsonDoc[i].path,
                    icon: "glyphicon glyphicon-file",
                    selectedIcon: "glyphicon glyphicon-file",
                    url: jsonDoc[i].path
                };
                //inserisco il file nella giusta posizione
                insertOBJinFS(File, tree);
            }
        }
        return tree;
    }
    //funzione che posiziona l'oggetto passato in input nell'albero
    function insertOBJinFS(objfs, tree) {
        //tree[0].nodes.push(objfs);
        var parentPath = objfs.relativePath.slice(0, objfs.relativePath.lastIndexOf("/"));
        //se l'oggetto è figlio della radice lo colloco subito
        if (parentPath == tree[0].text) {
            tree[0].nodes.push(objfs);
        }
        else {
            //ricavo la profondità e posiziono l'oggetto
            var splitPath = parentPath.split("/");
            var depth = splitPath.length;
            switch (depth) {
                case 2:
                    var partialParentPath = splitPath[0] + "/" + splitPath[1];
                    for (var i = 0; i < tree[0].nodes.length; i++) {
                        if (partialParentPath == tree[0].nodes[i].relativePath) {
                            tree[0].nodes[i].nodes.push(objfs);
                            break;
                        }
                    }
                    break;
                case 3:
                    var partialParentPath = splitPath[0] + "/" + splitPath[1];
                    for (var i = 0; i < tree[0].nodes.length; i++) {
                        if (partialParentPath == tree[0].nodes[i].relativePath) {
                            partialParentPath = splitPath[0] + "/" + splitPath[1] + "/" + splitPath[2];
                            for (var j = 0; j < tree[0].nodes[i].nodes.length; j++) {
                                if (partialParentPath == tree[0].nodes[i].nodes[j].relativePath) {
                                    tree[0].nodes[i].nodes[j].nodes.push(objfs);
                                    break;
                                }
                            }
                            break;
                        }
                    }
                    break;
                case 4:
                    var partialParentPath = splitPath[0] + "/" + splitPath[1];
                    for (var i = 0; i < tree[0].nodes.length; i++) {
                        if (partialParentPath == tree[0].nodes[i].relativePath) {
                            partialParentPath = splitPath[0] + "/" + splitPath[1] + "/" + splitPath[2];
                            for (var j = 0; j < tree[0].nodes[i].nodes.length; j++) {
                                if (partialParentPath == tree[0].nodes[i].nodes[j].relativePath) {
                                    partialParentPath = splitPath[0] + "/" + splitPath[1] + "/" + splitPath[2] + "/" + splitPath[3];
                                    for (var k = 0; k < tree[0].nodes[i].nodes[j].nodes.length; k++) {
                                        if (partialParentPath == tree[0].nodes[i].nodes[j].nodes[k].relativePath) {
                                            tree[0].nodes[i].nodes[j].nodes[k].nodes.push(objfs);
                                            break;
                                        }
                                    }
                                    break;
                                }
                            }
                            break;
                        }
                    }
                    break;
                case 5:
                    var partialParentPath = splitPath[0] + "/" + splitPath[1];
                    for (var i = 0; i < tree[0].nodes.length; i++) {
                        if (partialParentPath == tree[0].nodes[i].relativePath) {
                            partialParentPath = splitPath[0] + "/" + splitPath[1] + "/" + splitPath[2];
                            for (var j = 0; j < tree[0].nodes[i].nodes.length; j++) {
                                if (partialParentPath == tree[0].nodes[i].nodes[j].relativePath) {
                                    partialParentPath = splitPath[0] + "/" + splitPath[1] + "/" + splitPath[2] + "/" + splitPath[3];
                                    for (var k = 0; k < tree[0].nodes[i].nodes[j].nodes.length; k++) {
                                        if (partialParentPath == tree[0].nodes[i].nodes[j].nodes[k].relativePath) {
                                            partialParentPath = splitPath[0] + "/" + splitPath[1] + "/" + splitPath[2] + "/" + splitPath[3] + "/" + splitPath[4];
                                            for (var l = 0; l < tree[0].nodes[i].nodes[j].nodes[k].nodes.length; l++) {
                                                if (partialParentPath == tree[0].nodes[i].nodes[j].nodes[k].nodes[l].relativePath) {
                                                    tree[0].nodes[i].nodes[j].nodes[k].nodes[l].nodes.push(objfs);
                                                    break;
                                                }
                                            }
                                            break;
                                        }
                                    }
                                    break;
                                }
                            }
                            break;
                        }
                    }
                    break;
            }
        }
    }
    //funzione che dato l'url di un file, lo apre e lo legge passandone il contenuto
    //alla funzione readData(). Questa funzione è invocata quando viene selezionato
    //un file dall'albero
    function openFileFromServer(url) {
        console.log("Try to open " + url.slice(url.lastIndexOf("/") + 1, url.length));
        url = "https://baltig.infn.it/api/v4/projects/819/repository/files/" + encodeURIComponent(url) + "?ref=master";
        var jsonContentFile = new XMLHttpRequest();
        jsonContentFile.open("GET", url, false);
        jsonContentFile.onreadystatechange = function () {
            if (jsonContentFile.readyState === 4) {
                if (jsonContentFile.status === 200) {
                    var jsonResponse = jsonContentFile.responseText;
                    var startPoint = jsonResponse.indexOf("content") + 10;
                    var endPoint = jsonResponse.indexOf("\", :ref");
                    readData(atob(jsonResponse.slice(startPoint, endPoint)));
                }
            }
        };
        jsonContentFile.send(null);
    }