Skip to content
Snippets Groups Projects
start.ts 5.43 KiB
Newer Older
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);