Skip to content
Snippets Groups Projects
start.ts 5.77 KiB
Newer Older
Francesco Giacomini's avatar
Francesco Giacomini committed
// Copyright 2017 Istituto Nazionale di Fisica Nucleare
//
// Licensed under the EUPL

import * as $ from "jquery";
import { DrawChart } from './drawChart';
import { DrawImage } from './drawImage';
import * as fs from "./fs";
import G = require("./globals");
import Callback = require("./callbacks");

Francesco Giacomini's avatar
Francesco Giacomini committed

//INIZIO DELLO SCRIPT
window.onload = () => {
Francesco Giacomini's avatar
Francesco Giacomini committed
  // skip the tooltip for the moment; it generates an apparently fatal error
  //$('[data-toggle="tooltip"]').tooltip();
  let drawImage = new DrawImage("selectionCanvas");
  let drawChart = drawImage._drawChart;

Francesco Giacomini's avatar
Francesco Giacomini committed
  //creazione dell'albero e gestione barre laterali
  setImportFile(drawImage, drawChart);
Francesco Giacomini's avatar
Francesco Giacomini committed

  compressingSidenav();

  // enable drag&drop
  let droppableArea: any = document.querySelector('.droppable');
Francesco Giacomini's avatar
Francesco Giacomini committed
  makeDroppable(droppableArea, callback);
  let image: G.Image = G.Image.getInstance();

  image.zPixel1 = { x: 0, y: 0 };
  image.zPixel2 = { x: 0, y: 0 };
Francesco Giacomini's avatar
Francesco Giacomini committed

//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(drawImage: DrawImage, drawChart: DrawChart) {
Francesco Giacomini's avatar
Francesco Giacomini committed

Francesco Giacomini's avatar
Francesco Giacomini committed
  // genero e leggo il contenuto della directory "filesystem"
  // comment out waiting to properly address the request
  /*let xmlDoc: Document;
Francesco Giacomini's avatar
Francesco Giacomini committed
  let xmlListingFile: any = new XMLHttpRequest();
  xmlListingFile.open("PROPFIND", "CHNET/", false);
  xmlListingFile.setRequestHeader("Depth", "infinity");
  xmlListingFile.onreadystatechange = function ()
  {
    if (xmlListingFile.readyState === 4) {
      if (xmlListingFile.status === 207) {
        let parser = new DOMParser();
        xmlDoc = parser.parseFromString(xmlListingFile.responseText, "text/xml");
      }
    }
  }
  xmlListingFile.send(null);
Francesco Giacomini's avatar
Francesco Giacomini committed
  //ora genero l'albero e definisco l'evento in caso di selezione di un nodo
  $('#FileTreeview').treeview({data: fs.generateTree(xmlDoc)});
Francesco Giacomini's avatar
Francesco Giacomini committed
  $('#FileTreeview').on('nodeSelected', function (e, node)
  {
    if (node['url'] != undefined) {
      $("#load-spinner").css("display", "inline");
      fs.openFileFromServer(node['url']);
Francesco Giacomini's avatar
Francesco Giacomini committed

  // import a local file
  let fileInputButton: any = document.getElementById("myImport");
  fileInputButton.onchange = function () {
    Callback.CallbackManager.getInstance().showElement("load-spinner", true);
Francesco Giacomini's avatar
Francesco Giacomini committed
    let file: File = fileInputButton.files[0];
    let readerObject = new FileReader();
    readerObject.onload = function () {
Francesco Giacomini's avatar
Francesco Giacomini committed
      let content: string = readerObject.result;
      let image: G.Image = fs.readImage(content);
      Callback.CallbackManager.getInstance().showElement("load-spinner", false);
      drawImage.drawImg(image, { x: 0, y: 0 }, { x: image.width - 1, y: image.height - 1 }, 0, image.channelDepth,
        () => { Callback.CallbackManager.getInstance().closeBootstrapModel("btnCloseModal"); });
      drawChart.drawChart(image, { x: 0, y: 0 }, { x: image.width - 1, y: image.height - 1 }, 0, image.channelDepth);
Francesco Giacomini's avatar
Francesco Giacomini committed
      // install callbacks for the canvas and chart?
Francesco Giacomini's avatar
Francesco Giacomini committed
    readerObject.readAsText(file);
Francesco Giacomini's avatar
Francesco Giacomini committed
}

//funzione per la compressione della sidenav sx
function compressingSidenav() {
  let fsLabel = document.getElementById("collapse-symbol");
Francesco Giacomini's avatar
Francesco Giacomini committed
  let isClosedfs = false;
  let fsLabel_cross = () => {
Francesco Giacomini's avatar
Francesco Giacomini committed
    if (isClosedfs == true) {
      isClosedfs = false;
      console.log("closed");
      $(".w3-bar-block").css("width", "65px");
      $(".text-sidenav").css("display", "none");
      document.getElementById("collapse-symbol").title = "Open Sidebar";
      document.getElementById("collapse-symbol").classList.replace("fa-angle-double-left","fa-angle-double-right");
    
Francesco Giacomini's avatar
Francesco Giacomini committed
    } else {
      isClosedfs = true;
      $(".w3-bar-block").css("width", "200px");
      $(".text-sidenav").css("display", "inline");
      document.getElementById("collapse-symbol").title = "Close Sidebar";      
      document.getElementById("collapse-symbol").classList.replace("fa-angle-double-right","fa-angle-double-left");
  };

  fsLabel.addEventListener("mousedown", fsLabel_cross, false);

Francesco Giacomini's avatar
Francesco Giacomini committed
}

//funzione che definisce l'area su cui si può eseguire il drag&drop
function makeDroppable(droppableArea, callback) {
Francesco Giacomini's avatar
Francesco Giacomini committed
  //creo l'elemento "input type file" non visibile e lo aggiungo a "droppableArea"
  let input: any = document.createElement("input");
  input.type = "file";
  input.multiple = true;
  input.style.display = "none";
Francesco Giacomini's avatar
Francesco Giacomini committed
  droppableArea.appendChild(input);

  //questo evento è chiamato quando i file sono trascinati ma non ancora lasciati
  droppableArea.addEventListener("dragover", function (e) {
Francesco Giacomini's avatar
Francesco Giacomini committed
    e.preventDefault(); //impediamo l'apertura del file
    e.stopPropagation();
    e.dataTransfer.dropEffect = "copy";
    droppableArea.classList.add("dragover");
Francesco Giacomini's avatar
Francesco Giacomini committed
  });

  //l'evento è chiamato quando un file lascia la zona predefinita per il drag&drop
  droppableArea.addEventListener("dragleave", function (e) {
Francesco Giacomini's avatar
Francesco Giacomini committed
    e.preventDefault();
    e.stopPropagation();
    droppableArea.classList.remove("dragover");
Francesco Giacomini's avatar
Francesco Giacomini committed
  });

  //questo evento si innesca quando il drop è effettivamente avvenuto
  droppableArea.addEventListener("drop", function (e) {
Francesco Giacomini's avatar
Francesco Giacomini committed
    e.preventDefault();
    e.stopPropagation();
    droppableArea.classList.remove("dragover");
Francesco Giacomini's avatar
Francesco Giacomini committed
    callback.call(null, e.dataTransfer.files);
  });
}

//funzione chiamata in caso di drag&drop responsabile dell'apertura del file droppato,
//della sua lettura e del passaggio del suo contenuto alla funzione readData()
function callback(files) {
  Callback.CallbackManager.getInstance().showElement("load-spinner", true);
  let file: File = files[files.length - 1];
  console.log("Try to open " + file.name + " ...");
  let readerObject = new FileReader();
  readerObject.onload = function () {
    let content: string = readerObject.result;
    fs.readImage(content);
    Callback.CallbackManager.getInstance().showElement("load-spinner", false);
  readerObject.readAsText(file);