Mercurial > hg > NetworkVis
view d3s_examples/python-neo4jrestclient/static/platin/js/Dataloader/Dataloader.js @ 23:80010fb9dbce
make new commentaries visualisation the default.
author | casties |
---|---|
date | Fri, 30 Oct 2015 15:37:43 +0100 |
parents | 18ef6948d689 |
children |
line wrap: on
line source
/* * Dataloader.js * * Copyright (c) 2013, Sebastian Kruse. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ /** * @class Dataloader * Implementation for a Dataloader UI * @author Sebastian Kruse (skruse@mpiwg-berlin.mpg.de) * * @param {HTML object} parent div to append the Dataloader */ function Dataloader(parent) { this.dataLoader = this; this.parent = parent; this.options = parent.options; this.initialize(); } Dataloader.prototype = { show : function() { this.dataloaderDiv.style.display = "block"; }, hide : function() { this.dataloaderDiv.style.display = "none"; }, initialize : function() { this.addStaticLoader(); this.addLocalStorageLoader(); this.addKMLLoader(); this.addKMZLoader(); this.addCSVLoader(); this.addLocalKMLLoader(); this.addLocalCSVLoader(); this.addLocalXLSXLoader(); // trigger change event on the select so // that only the first loader div will be shown $(this.parent.gui.loaderTypeSelect).change(); }, getFileName : function(url) { var fileName = $.url(url).attr('file'); if ( (typeof fileName === "undefined") || (fileName.length === 0) ){ fileName = $.url(url).attr('path'); //startsWith and endsWith defined in SIMILE Ajax (string.js) while (fileName.endsWith("/")){ fileName = fileName.substr(0,fileName.length-1); } if (fileName.length > 1) fileName = fileName.substr(fileName.lastIndexOf("/")+1); else fileName = "unnamed dataset"; } return fileName; }, distributeDataset : function(dataSet) { GeoTemConfig.addDataset(dataSet); }, distributeDatasets : function(datasets) { GeoTemConfig.addDatasets(datasets); }, addStaticLoader : function() { if (this.options.staticKML.length > 0){ $(this.parent.gui.loaderTypeSelect).append("<option value='StaticLoader'>Static Data</option>"); this.StaticLoaderTab = document.createElement("div"); $(this.StaticLoaderTab).attr("id","StaticLoader"); this.staticKMLList = document.createElement("select"); $(this.StaticLoaderTab).append(this.staticKMLList); var staticKMLList = this.staticKMLList; var isFirstHeader = true; $(this.options.staticKML).each(function(){ var label = this.label; var url = this.url; var header = this.header; if (typeof header !== "undefined"){ if (!isFirstHeader) $(staticKMLList).append("</optgroup>"); $(staticKMLList).append("<optgroup label='"+header+"'>"); isFirstHeader = false; } else $(staticKMLList).append("<option value='"+url+"'> "+label+"</option>"); }); //close last optgroup (if there were any) if (!isFirstHeader) $(staticKMLList).append("</optgroup>"); this.loadStaticKMLButton = document.createElement("button"); $(this.loadStaticKMLButton).text("load"); $(this.StaticLoaderTab).append(this.loadStaticKMLButton); $(this.loadStaticKMLButton).click($.proxy(function(){ var kmlURL = $(this.staticKMLList).find(":selected").attr("value"); if (kmlURL.length === 0) return; var origURL = kmlURL; var fileName = this.getFileName(kmlURL); if (typeof GeoTemConfig.proxy != 'undefined') kmlURL = GeoTemConfig.proxy + kmlURL; var kml = GeoTemConfig.getKml(kmlURL); if ((typeof kml !== "undefined") && (kml != null)) { var dataSet = new Dataset(GeoTemConfig.loadKml(kml), fileName, origURL); if (dataSet != null) this.distributeDataset(dataSet); } else alert("Could not load file."); },this)); $(this.parent.gui.loaders).append(this.StaticLoaderTab); } }, addKMLLoader : function() { $(this.parent.gui.loaderTypeSelect).append("<option value='KMLLoader'>KML File URL</option>"); this.KMLLoaderTab = document.createElement("div"); $(this.KMLLoaderTab).attr("id","KMLLoader"); this.kmlURL = document.createElement("input"); $(this.kmlURL).attr("type","text"); $(this.KMLLoaderTab).append(this.kmlURL); this.loadKMLButton = document.createElement("button"); $(this.loadKMLButton).text("load KML"); $(this.KMLLoaderTab).append(this.loadKMLButton); $(this.loadKMLButton).click($.proxy(function(){ var kmlURL = $(this.kmlURL).val(); if (kmlURL.length === 0) return; var origURL = kmlURL; var fileName = this.getFileName(kmlURL); if (typeof GeoTemConfig.proxy != 'undefined') kmlURL = GeoTemConfig.proxy + kmlURL; var kml = GeoTemConfig.getKml(kmlURL); if ((typeof kml !== "undefined") && (kml != null)) { var dataSet = new Dataset(GeoTemConfig.loadKml(kml), fileName, origURL); if (dataSet != null) this.distributeDataset(dataSet); } else alert("Could not load file."); },this)); $(this.parent.gui.loaders).append(this.KMLLoaderTab); }, addKMZLoader : function() { $(this.parent.gui.loaderTypeSelect).append("<option value='KMZLoader'>KMZ File URL</option>"); this.KMZLoaderTab = document.createElement("div"); $(this.KMZLoaderTab).attr("id","KMZLoader"); this.kmzURL = document.createElement("input"); $(this.kmzURL).attr("type","text"); $(this.KMZLoaderTab).append(this.kmzURL); this.loadKMZButton = document.createElement("button"); $(this.loadKMZButton).text("load KMZ"); $(this.KMZLoaderTab).append(this.loadKMZButton); $(this.loadKMZButton).click($.proxy(function(){ var dataLoader = this; var kmzURL = $(this.kmzURL).val(); if (kmzURL.length === 0) return; var origURL = kmzURL; var fileName = dataLoader.getFileName(kmzURL); if (typeof GeoTemConfig.proxy != 'undefined') kmzURL = GeoTemConfig.proxy + kmzURL; GeoTemConfig.getKmz(kmzURL, function(kmlArray){ $(kmlArray).each(function(){ var dataSet = new Dataset(GeoTemConfig.loadKml(this), fileName, origURL); if (dataSet != null) dataLoader.distributeDataset(dataSet); }); }); },this)); $(this.parent.gui.loaders).append(this.KMZLoaderTab); }, addCSVLoader : function() { $(this.parent.gui.loaderTypeSelect).append("<option value='CSVLoader'>CSV File URL</option>"); this.CSVLoaderTab = document.createElement("div"); $(this.CSVLoaderTab).attr("id","CSVLoader"); this.csvURL = document.createElement("input"); $(this.csvURL).attr("type","text"); $(this.CSVLoaderTab).append(this.csvURL); this.loadCSVButton = document.createElement("button"); $(this.loadCSVButton).text("load CSV"); $(this.CSVLoaderTab).append(this.loadCSVButton); $(this.loadCSVButton).click($.proxy(function(){ var dataLoader = this; var csvURL = $(this.csvURL).val(); if (csvURL.length === 0) return; var origURL = csvURL; var fileName = dataLoader.getFileName(csvURL); if (typeof GeoTemConfig.proxy != 'undefined') csvURL = GeoTemConfig.proxy + csvURL; GeoTemConfig.getCsv(csvURL, function(json){ if ((typeof json !== "undefined") && (json.length > 0)) { var dataSet = new Dataset(GeoTemConfig.loadJson(json), fileName, origURL); if (dataSet != null) dataLoader.distributeDataset(dataSet); } else alert("Could not load file."); }); },this)); $(this.parent.gui.loaders).append(this.CSVLoaderTab); }, addLocalKMLLoader : function() { $(this.parent.gui.loaderTypeSelect).append("<option value='LocalKMLLoader'>local KML File</option>"); this.localKMLLoaderTab = document.createElement("div"); $(this.localKMLLoaderTab).attr("id","LocalKMLLoader"); this.kmlFile = document.createElement("input"); $(this.kmlFile).attr("type","file"); $(this.localKMLLoaderTab).append(this.kmlFile); this.loadLocalKMLButton = document.createElement("button"); $(this.loadLocalKMLButton).text("load KML"); $(this.localKMLLoaderTab).append(this.loadLocalKMLButton); $(this.loadLocalKMLButton).click($.proxy(function(){ var filelist = $(this.kmlFile).get(0).files; if (filelist.length > 0){ var file = filelist[0]; var fileName = file.name; var reader = new FileReader(); reader.onloadend = ($.proxy(function(theFile) { return function(e) { var dataSet = new Dataset(GeoTemConfig.loadKml($.parseXML(reader.result)), fileName); if (dataSet != null) this.distributeDataset(dataSet); }; }(file),this)); reader.readAsText(file); } },this)); $(this.parent.gui.loaders).append(this.localKMLLoaderTab); }, addLocalCSVLoader : function() { $(this.parent.gui.loaderTypeSelect).append("<option value='LocalCSVLoader'>local CSV File</option>"); this.localCSVLoaderTab = document.createElement("div"); $(this.localCSVLoaderTab).attr("id","LocalCSVLoader"); this.csvFile = document.createElement("input"); $(this.csvFile).attr("type","file"); $(this.localCSVLoaderTab).append(this.csvFile); this.loadLocalCSVButton = document.createElement("button"); $(this.loadLocalCSVButton).text("load CSV"); $(this.localCSVLoaderTab).append(this.loadLocalCSVButton); $(this.loadLocalCSVButton).click($.proxy(function(){ var filelist = $(this.csvFile).get(0).files; if (filelist.length > 0){ var file = filelist[0]; var fileName = file.name; var reader = new FileReader(); reader.onloadend = ($.proxy(function(theFile) { return function(e) { var json = GeoTemConfig.convertCsv(reader.result); var dataSet = new Dataset(GeoTemConfig.loadJson(json), fileName); if (dataSet != null) this.distributeDataset(dataSet); }; }(file),this)); reader.readAsText(file); } },this)); $(this.parent.gui.loaders).append(this.localCSVLoaderTab); }, addLocalStorageLoader : function() { var dataLoader = this; this.localStorageLoaderTab = document.createElement("div"); $(this.localStorageLoaderTab).attr("id","LocalStorageLoader"); var localDatasets = document.createElement("select"); $(this.localStorageLoaderTab).append(localDatasets); var localStorageDatasetCount = 0; for(var key in localStorage){ //TODO: this is a somewhat bad idea, as it is used in multiple widgets. //A global GeoTemCo option "prefix" could be better. But still.. if (key.startsWith("GeoBrowser_dataset_")){ localStorageDatasetCount++; var label = key.substring("GeoBrowser_dataset_".length); var url = key; $(localDatasets).append("<option value='"+url+"'>"+decodeURIComponent(label)+"</option>"); } } //only show if there are datasets if (localStorageDatasetCount > 0) $(this.parent.gui.loaderTypeSelect).append("<option value='LocalStorageLoader'>browser storage</option>"); this.loadLocalStorageButton = document.createElement("button"); $(this.loadLocalStorageButton).text("load"); $(this.localStorageLoaderTab).append(this.loadLocalStorageButton); $(this.loadLocalStorageButton).click($.proxy(function(){ var fileKey = $(localDatasets).find(":selected").attr("value"); if (fileKey.length === 0) return; var csv = $.remember({name:fileKey}); //TODO: this is a somewhat bad idea, as it is used in multiple widgets. //A global GeoTemCo option "prefix" could be better. But still.. var fileName = decodeURIComponent(fileKey.substring("GeoBrowser_dataset_".length)); var json = GeoTemConfig.convertCsv(csv); var dataSet = new Dataset(GeoTemConfig.loadJson(json), fileName, fileKey, "local"); if (dataSet != null) dataLoader.distributeDataset(dataSet); },this)); $(this.parent.gui.loaders).append(this.localStorageLoaderTab); }, addLocalXLSXLoader : function() { //taken from http://oss.sheetjs.com/js-xlsx/ var fixdata = function(data) { var o = "", l = 0, w = 10240; for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint8Array(data.slice(l*w,l*w+w))); o+=String.fromCharCode.apply(null, new Uint8Array(data.slice(o.length))); return o; } $(this.parent.gui.loaderTypeSelect).append("<option value='LocalXLSXLoader'>local XLS/XLSX File</option>"); this.LocalXLSXLoader = document.createElement("div"); $(this.LocalXLSXLoader).attr("id","LocalXLSXLoader"); this.xlsxFile = document.createElement("input"); $(this.xlsxFile).attr("type","file"); $(this.LocalXLSXLoader).append(this.xlsxFile); this.loadLocalXLSXButton = document.createElement("button"); $(this.loadLocalXLSXButton).text("load XLS/XLSX"); $(this.LocalXLSXLoader).append(this.loadLocalXLSXButton); $(this.loadLocalXLSXButton).click($.proxy(function(){ var filelist = $(this.xlsxFile).get(0).files; if (filelist.length > 0){ var file = filelist[0]; var fileName = file.name; var reader = new FileReader(); reader.onloadend = ($.proxy(function(theFile) { return function(e) { var workbook; var json; if (fileName.toLowerCase().indexOf("xlsx")!=-1){ workbook = XLSX.read(btoa(fixdata(reader.result)), {type: 'base64'}); var csv = XLSX.utils.sheet_to_csv(workbook.Sheets[workbook.SheetNames[0]]); var json = GeoTemConfig.convertCsv(csv); } else { workbook = XLS.read(btoa(fixdata(reader.result)), {type: 'base64'}); var csv = XLS.utils.sheet_to_csv(workbook.Sheets[workbook.SheetNames[0]]); var json = GeoTemConfig.convertCsv(csv); } var dataSet = new Dataset(GeoTemConfig.loadJson(json), fileName); if (dataSet != null) this.distributeDataset(dataSet); }; }(file),this)); reader.readAsArrayBuffer(file); } },this)); $(this.parent.gui.loaders).append(this.LocalXLSXLoader); }, };