home.js 3.84 KB
$(document).ready(function() {

/********** Tableau **********/

  var tableNodes = $('#nodes-table').DataTable( {
      select: {
          style: 'multi'
      }
  } );

  var nodeSet = new Set();

  tableNodes.on('select', function (e, dt, type, indexes) {
    var rowData = tableNodes.rows(indexes).data().toArray()[0];
    nodeSet.add(rowData[0]);
  } );

  tableNodes.on('deselect', function (e, dt, type, indexes) {
    var rowData = tableNodes.rows(indexes).data().toArray()[0];
    nodeSet.delete(rowData[0]);
  } );

/********** Drop Zone **********/

  var formData = new FormData();
  var dropZone = document.querySelector("#drop-zone");
  dropZone.style.cursor = "pointer";
  var file = document.getElementById("filesExplorer");
  var fileProgress = document.getElementById("file-progress");
  var readyToSend = false;

  dropZone.addEventListener('click', function() {
    delete formData;
    formData = new FormData();
    file.click();
  })

  file.addEventListener('change', function() {
    dropZone.innerHTML = this.files[0].name;
    formData.append("file", this.files[0]);
    formData.append("filename", this.files[0].name);
    readyToSend = true;
  }, false)

  dropZone.addEventListener('drop', function(e) {
    e.preventDefault();
    delete formData;
    formData = new FormData();
    dropZone.style.borderWidth = '2px';
    var files = e.dataTransfer.files;

    if(files.length > 1) {
      $("#warningFilesNumber").modal()
      return;
    }
    dropZone.innerHTML = files[0].name;
    formData.append("file", files[0]);
    formData.append("filename", files[0].name);
    readyToSend = true;
  }, false)

  dropZone.addEventListener('dragenter', function(e) {
      console.log("Enter");
      dropZone.style.borderWidth = '5px';
  }, false);

  dropZone.addEventListener('dragleave', function(e) {
    console.log("Leave");
    dropZone.style.borderWidth = '2px';
  }, false);

  dropZone.addEventListener('dragover', function(e) {
      e.preventDefault();
  }, false);

  document.getElementById("sendButton").addEventListener('click', function() {
    var modalContent = document.getElementById("modal-content");
    var modalTitle = document.getElementById("modal-title");
    if(readyToSend && nodeSet.size > 0) {
      formData.append("nodes", Array.from(nodeSet).join(';'));
      var request = new XMLHttpRequest();
      request.open("POST", "/file");

      request.upload.onloadstart = function(e) {
        fileProgress.style.display = 'block';
        fileProgress.style.width = 0 + "px"
        fileProgress.innerHTML = "0%";
      }

      request.upload.onprogress = function(e) {
        var p = 100 - ((e.total - e.loaded) / e.total * 100);
        fileProgress.style.width = Math.ceil(p) + "%"
        fileProgress.innerHTML = Math.ceil(p) + "%";
      }

      request.upload.onloadend = function(e) {
        fileProgress.style.width = 100 + "%"
        fileProgress.innerHTML = "100%";
        var modalButton = document.getElementById("modal-button");

        modalButton.addEventListener('click', function(e) {
          location.reload();
        })

        modalContent.innerHTML = "Upload terminé !";
        modalTitle.innerHTML = "Félicitations";
        $("#warningFilesNumber").modal()
      }

      request.onreadystatechange = function() {
          if(this.readyState === XMLHttpRequest.DONE && this.status === 200) {
              formData = new FormData();
          }
      }

      request.send(formData);

    }
    else {
      if(readyToSend) {
        modalContent.innerHTML = "Veuillez choisir un ou plusieurs noeuds !";
      }
      else {
        modalContent.innerHTML = "Veuillez choisir un fichier !";
      }
      modalTitle.innerHTML = "Attention";
      $("#warningFilesNumber").modal()
    }
  })

} );