Skip to content
Snippets Groups Projects
start.ts 5.43 KiB
Newer Older
  • Learn to ignore specific revisions
  • Francesco Giacomini's avatar
    Francesco Giacomini committed
    // Copyright 2017 Istituto Nazionale di Fisica Nucleare
    //
    // Licensed under the EUPL
    
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
    import $ from "jquery";
    
    import Dygraph from "dygraphs";
    import "./globals";
    import * as fs from "./loaddir";
    import * as img from "./draw";
    
    Laura Cappelli's avatar
    Laura Cappelli committed
    
    //INIZIO DELLO SCRIPT
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
    $(document).ready(function ()
    {
    
    Laura Cappelli's avatar
    Laura Cappelli committed
    
    
      //abilito tooltip
    
      $('[data-toggle="tooltip"]').tooltip();
    
    Laura Cappelli's avatar
    Laura Cappelli committed
      //creazione dell'albero e gestione barre laterali
    
      compressingSidenav();
    
    Laura Cappelli's avatar
    Laura Cappelli committed
    
      //abilitazione drag&drop
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
      let droppableArea: any = document.querySelector('.droppable');
    
    Laura Cappelli's avatar
    Laura Cappelli committed
      makeDroppable(droppableArea, callback);
    
    
      //inizializzazione variabili
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
      zPixel1 = { xp: 0, yp: 0 };
      zPixel2 = { xp: 0, yp: 0 };
    
    Laura Cappelli's avatar
    Laura Cappelli committed
    
    });
    
    //funzione per la compressione della sidenav sx
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
    function compressingSidenav()
    {
    
    Laura Cappelli's avatar
    Laura Cappelli committed
    
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
      let fsLabel: any = $('.sidebar-label');
      let isClosedfs: boolean = false;
    
    Laura Cappelli's avatar
    Laura Cappelli committed
      fsLabel.click(function () { fsLabel_cross(); });
    
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
      function fsLabel_cross()
      {
    
    Laura Cappelli's avatar
    Laura Cappelli committed
        if (isClosedfs == true) {
          isClosedfs = false;
    
          $('.w3-bar-block').css('width', "65px");
          $('.text-sidenav').css('display', 'none');
          $('#collapse-symbol').attr('title', 'Open Sidebar');
          $("#collapse-symbol").removeClass("fa-angle-double-left");
          $("#collapse-symbol").addClass("fa-angle-double-right");
    
    Laura Cappelli's avatar
    Laura Cappelli committed
        } else {
          isClosedfs = true;
    
          $('.w3-bar-block').css('width', "200px");
          $('.text-sidenav').css('display', 'inline');
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
          $('#collapse-symbol').attr('title', 'Close Sidebar');
    
          $("#collapse-symbol").removeClass("fa-angle-double-right");
          $("#collapse-symbol").addClass("fa-angle-double-left");
    
    Laura Cappelli's avatar
    Laura Cappelli committed
        }
      }
    
    }
    
    //funzione che definisce l'area su cui si può eseguire il drag&drop
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
    function makeDroppable(droppableArea, callback)
    {
    
    Laura Cappelli's avatar
    Laura Cappelli committed
    
      //creo l'elemento "input type file" non visibile e lo aggiungo a "droppableArea"
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
      let input: any = document.createElement('input');
    
    Laura Cappelli's avatar
    Laura Cappelli committed
      input.setAttribute('type', 'file');
      input.setAttribute('multiple', true);
      input.style.display = 'none';
      droppableArea.appendChild(input);
    
      //questo evento è chiamato quando i file sono trascinati ma non ancora lasciati
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
      droppableArea.addEventListener('dragover', function (e)
      {
    
    Laura Cappelli's avatar
    Laura Cappelli committed
        e.preventDefault(); //impediamo l'apertura del file
        e.stopPropagation();
        e.dataTransfer.dropEffect = 'copy';
        droppableArea.classList.add('dragover');
      });
    
      //l'evento è chiamato quando un file lascia la zona predefinita per il drag&drop
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
      droppableArea.addEventListener('dragleave', function (e)
      {
    
    Laura Cappelli's avatar
    Laura Cappelli committed
        e.preventDefault();
        e.stopPropagation();
        droppableArea.classList.remove('dragover');
      });
    
      //questo evento si innesca quando il drop è effettivamente avvenuto
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
      droppableArea.addEventListener('drop', function (e)
      {
    
    Laura Cappelli's avatar
    Laura Cappelli committed
        e.preventDefault();
        e.stopPropagation();
        droppableArea.classList.remove('dragover');
        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()
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
    function callback(files)
    {
    
      $("#load-spinner").css("display", "inline");
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
      console.log("Try to open " + files[files.length - 1].name + " ...");
      let readerObject: any = new FileReader();
      readerObject.readAsBinaryString(files[files.length - 1]);
      readerObject.onload = function ()
      {
        let fileString: string = readerObject.result;
    
        fs.readData(fileString);
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
      }
    
    Laura Cappelli's avatar
    Laura Cappelli committed
    }
    
    //la funzione findPosition definisce la posizione del cursore del mouse
    //relativa al canvas nel momento in cui avviene l'evento passato in input 
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
    function findPosition(event: any, pixel: coordinates)
    {
    
    Laura Cappelli's avatar
    Laura Cappelli committed
    
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
      let scrollTOP: number = (document.documentElement.scrollTop) ?
    
    Laura Cappelli's avatar
    Laura Cappelli committed
        document.documentElement.scrollTop : document.body.scrollTop;
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
      let scrollLEFT: number = (document.documentElement.scrollLeft) ?
    
    Laura Cappelli's avatar
    Laura Cappelli committed
        document.documentElement.scrollLeft : document.body.scrollLeft;
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
      let allX: number = event.clientX + scrollLEFT;
      let allY: number = event.clientY + scrollTOP;
      let elParent: any = document.getElementById('myCanvas');
      let objX: number = 0, objY: number = 0;
      while (elParent) {
    
    Laura Cappelli's avatar
    Laura Cappelli committed
        objX += elParent.offsetLeft;
        objY += elParent.offsetTop;
        elParent = elParent.offsetParent;
      }
    
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
      pixel.xp = Math.floor((allX - objX - 1) / pixelDim) + newOrigin.xp;
      pixel.yp = Math.floor((allY - objY - 1) / pixelDim) + newOrigin.yp;
    
    Laura Cappelli's avatar
    Laura Cappelli committed
    }
    
    
    //la funzione findPosDown memorizza la posizione del pixel cliccato
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
    function findPosDown(event: any)
    {
    
    Laura Cappelli's avatar
    Laura Cappelli committed
    
      findPosition(event, zPixel1);
    
    }
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
    
    
    Laura Cappelli's avatar
    Laura Cappelli committed
    //la funzione findPosUp memorizza la posizione del pixel quando il mouse viene
    //rilasciato, ordina le coordinate, aggiorna l'origine e la pagina.
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
    function findPosUp(event: any)
    {
    
    Laura Cappelli's avatar
    Laura Cappelli committed
    
      findPosition(event, zPixel2);
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
      let tmp: number;
    
    Laura Cappelli's avatar
    Laura Cappelli committed
      if (zPixel1.xp > zPixel2.xp) {
        tmp = zPixel1.xp;
        zPixel1.xp = zPixel2.xp;
        zPixel2.xp = tmp;
      }
      if (zPixel1.yp > zPixel2.yp) {
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
        tmp = zPixel1.yp;
        zPixel1.yp = zPixel2.yp;
        zPixel2.yp = tmp;
    
    Laura Cappelli's avatar
    Laura Cappelli committed
      }
      //se è stato cliccato un punto disegno il grafico, altrimenti disegno anche il
      //canvas e aggiorno l'origine
    
      //alert(zPixel1.xp + ", " + zPixel1.yp + " - " + zPixel2.xp + ", " + zPixel2.yp);
    
    Francesco Giacomini's avatar
    Francesco Giacomini committed
      if (zPixel1.xp != zPixel2.xp || zPixel1.yp != zPixel2.yp) {
        newOrigin = { xp: zPixel1.xp, yp: zPixel1.yp };
    
        img.drawImg(zPixel1, zPixel2, globalxMinRange, globalxMaxRange);
    
    Laura Cappelli's avatar
    Laura Cappelli committed
      }
    
      img.drawChart(zPixel1, zPixel2, globalxMinRange, globalxMaxRange);