Mercurial > hg > extraction-interface
diff geotemco/js/Storytelling/StorytellingWidget.js @ 0:b12c99b7c3f0
commit for previous development
author | Zoe Hong <zhong@mpiwg-berlin.mpg.de> |
---|---|
date | Mon, 19 Jan 2015 17:13:49 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/geotemco/js/Storytelling/StorytellingWidget.js Mon Jan 19 17:13:49 2015 +0100 @@ -0,0 +1,198 @@ +/* +* StorytellingWidget.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 StorytellingWidget + * StorytellingWidget Implementation + * @author Sebastian Kruse (skruse@mpiwg-berlin.mpg.de) + * + * @param {WidgetWrapper} core wrapper for interaction to other widgets + * @param {HTML object} div parent div to append the Storytelling widget div + * @param {JSON} options user specified configuration that overwrites options in StorytellingConfig.js + */ +StorytellingWidget = function(core, div, options) { + + this.datasets; + this.core = core; + this.core.setWidget(this); + this.currentStatus = new Object(); + + this.options = (new StorytellingConfig(options)).options; + this.gui = new StorytellingGui(this, div, this.options); + + this.datasetLink; + + Publisher.Subscribe('mapChanged', this, function(mapName) { + this.client.currentStatus["mapChanged"] = mapName; + this.client.createLink(); + }); + + var currentStatus = $.url().param("currentStatus"); + if (typeof currentStatus !== "undefined"){ + this.currentStatus = $.deparam(currentStatus); + $.each(this.currentStatus,function(action,data){ + Publisher.Publish(action, data, this); + }); + } +} + +StorytellingWidget.prototype = { + + initWidget : function(data) { + var storytellingWidget = this; + var gui = storytellingWidget.gui; + + storytellingWidget.datasets = data; + + $(gui.storytellingContainer).empty(); + + var magneticLinkParam = ""; + var datasetIndex = 0; + var linkCount = 1; + $(storytellingWidget.datasets).each(function(){ + var dataset = this; + + if (magneticLinkParam.length > 0) + magneticLinkParam += "&"; + + var paragraph = $("<p></p>"); + paragraph.append(dataset.label); + if (typeof dataset.url !== "undefined"){ + //TODO: makes only sense for KML or CSV URLs, so "type" of + //URL should be preserved (in dataset). + //startsWith and endsWith defined in SIMILE Ajax (string.js) + var type="csv"; + if (typeof dataset.type !== "undefined") + type = dataset.type; + else { + if (dataset.url.toLowerCase().endsWith("kml")) + type = "kml"; + } + + magneticLinkParam += type+linkCount+"="; + linkCount++; + magneticLinkParam += dataset.url; + + var tableLinkDiv = document.createElement('a'); + tableLinkDiv.title = dataset.url; + tableLinkDiv.href = dataset.url; + tableLinkDiv.target = '_'; + tableLinkDiv.setAttribute('class', 'externalLink'); + paragraph.append(tableLinkDiv); + } else { + if (storytellingWidget.options.dariahStorage){ + var uploadToDARIAH = document.createElement('a'); + $(uploadToDARIAH).append("Upload to DARIAH Storage"); + uploadToDARIAH.title = ""; + uploadToDARIAH.href = dataset.url; + + var localDatasetIndex = new Number(datasetIndex); + $(uploadToDARIAH).click(function(){ + var csv = GeoTemConfig.createCSVfromDataset(localDatasetIndex); + // taken from dariah.storage.js + var storageURL = "http://ref.dariah.eu/storage/" + $.ajax({ + url: storageURL, + type: 'POST', + contentType: 'text/csv', + data: csv, + success: function(data, status, xhr) { + var location = xhr.getResponseHeader('Location'); + // the dariah storage id + dsid = location.substring(location.lastIndexOf('/')+1); + + //add URL to dataset + storytellingWidget.datasets[localDatasetIndex].url = location; + storytellingWidget.datasets[localDatasetIndex].type = "csv"; + //refresh list + storytellingWidget.initWidget(storytellingWidget.datasets); + }, + error: function (data, text, error) { + alert('error creating new file in dariah storage because ' + text); + console.log(data); + console.log(text); + console.log(error); + } + }); + //discard link click-event + return(false); + }); + paragraph.append(uploadToDARIAH); + } + // TODO: if layout is more usable, both options could be used ("else" removed) + else if (storytellingWidget.options.localStorage){ + var saveToLocalStorage = document.createElement('a'); + $(saveToLocalStorage).append("Save to Local Storage"); + saveToLocalStorage.title = ""; + saveToLocalStorage.href = dataset.url; + + var localDatasetIndex = new Number(datasetIndex); + $(saveToLocalStorage).click(function(){ + var csv = GeoTemConfig.createCSVfromDataset(localDatasetIndex); + + var storageName = "GeoBrowser_dataset_"+GeoTemConfig.datasets[localDatasetIndex].label; + $.remember({ + name:storageName, + value:csv + }); + + //add URL to dataset + storytellingWidget.datasets[localDatasetIndex].url = storageName; + storytellingWidget.datasets[localDatasetIndex].type = "local"; + //refresh list + storytellingWidget.initWidget(storytellingWidget.datasets); + + //discard link click-event + return(false); + }); + paragraph.append(saveToLocalStorage); + } + } + + $(gui.storytellingContainer).append(paragraph); + datasetIndex++; + }); + + this.datasetLink = magneticLinkParam; + this.createLink(); + }, + + createLink : function() { + $(this.gui.storytellingContainer).find('.magneticLink').remove(); + + var magneticLink = document.createElement('a'); + magneticLink.setAttribute('class', 'magneticLink'); + $(magneticLink).append("Magnetic Link"); + magneticLink.title = "Use this link to reload currently loaded (online) data."; + magneticLink.href = "?"+this.datasetLink; + var currentStatusParam = $.param(this.currentStatus); + if (currentStatusParam.length > 0) + magneticLink.href += "¤tStatus="+currentStatusParam; + magneticLink.target = '_'; + $(this.gui.storytellingContainer).prepend(magneticLink); + }, + + highlightChanged : function(objects) { + }, + + selectionChanged : function(selection) { + }, +};