From 4a358f8bc5509286c4a375e2aaf5d02e07fff288 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Thu, 27 Dec 2018 09:42:31 +0100 Subject: [PATCH] data overlay ids are stored in url GET param --- frontend-js/src/main/js/GuiConnector.js | 3 +- frontend-js/src/main/js/minerva.js | 32 ++++++- frontend-js/src/test/js/minerva-test.js | 115 ++++++++++++------------ 3 files changed, 91 insertions(+), 59 deletions(-) diff --git a/frontend-js/src/main/js/GuiConnector.js b/frontend-js/src/main/js/GuiConnector.js index 4fd72b8073..e3bc805638 100644 --- a/frontend-js/src/main/js/GuiConnector.js +++ b/frontend-js/src/main/js/GuiConnector.js @@ -388,6 +388,7 @@ GuiConnector.prototype.destroy = function () { } if (self._warnDialog !== undefined) { $(self._warnDialog).dialog("destroy").remove(); + self._warnDialog = undefined; } if (self._processingDialog !== undefined) { $(self._processingDialog).dialog("destroy").remove(); @@ -408,7 +409,7 @@ GuiConnector.prototype.destroy = function () { * @param {string} message */ GuiConnector.prototype.warn = function (message) { - var self = GuiConnector; + var self = returnThisOrSingleton(this); logger.warn(message); if (self._warnDialog === undefined) { self._warnDialog = document.createElement("div"); diff --git a/frontend-js/src/main/js/minerva.js b/frontend-js/src/main/js/minerva.js index 177c948a91..d01dd93d85 100644 --- a/frontend-js/src/main/js/minerva.js +++ b/frontend-js/src/main/js/minerva.js @@ -57,6 +57,14 @@ function processUrlGetParams(params) { sessionData.setZoomLevel(model, GuiConnector.getParams["zoom"]); } + if (GuiConnector.getParams["background"] !== undefined) { + sessionData.setSelectedBackgroundOverlay(GuiConnector.getParams["background"]); + } + + if (GuiConnector.getParams["overlays"] !== undefined) { + sessionData.setVisibleOverlays(GuiConnector.getParams["overlays"].split(",")); + } + if (GuiConnector.getParams["comments"] === "on") { sessionData.setShowComments(true); } @@ -363,6 +371,24 @@ function addUrlChangeListenersToCustomMap(customMap) { }); + var onOverlaysChangedHandler = function () { + return customMap.getVisibleDataOverlays().then(function (dataOverlays) { + var ids = []; + for (var i = 0; i < dataOverlays.length; i++) { + ids.push(dataOverlays[i].getId()); + } + GuiConnector.setUrlParam("overlays", ids.join(",")); + }) + }; + + customMap.addListener("onShowOverlay", onOverlaysChangedHandler); + customMap.addListener("onHideOverlay", onOverlaysChangedHandler); + + customMap.addListener("onBackgroundOverlayChange", function (event) { + GuiConnector.setUrlParam("background", event.arg); + }); + + } /** @@ -479,7 +505,7 @@ function create(params) { return customMap.init(); }).then(function () { - return insertGoogleAnalyticsCode(customMap); + return insertGoogleAnalyticsCode(); }).then(function () { return leftPanel.init(); }).then(function () { @@ -499,6 +525,8 @@ function create(params) { for (var j = 0; j < overlays.length; j++) { var overlay = overlays[j]; if (overlay.getName() === GuiConnector.getParams["layout"]) { + GuiConnector.warn("'layout' GET parameter in url is deprecated. Please use 'overlays' GET param instead (take a look at current url)"); + GuiConnector.setUrlParam("layout", undefined); return customMap.openDataOverlay(overlay); } } @@ -529,6 +557,8 @@ function create(params) { return leftPanel.destroy().then(function () { customMap.destroy(); return topMenu.destroy(); + }).then(function () { + return GuiConnector.destroy(); }); }, getProject: function () { diff --git a/frontend-js/src/test/js/minerva-test.js b/frontend-js/src/test/js/minerva-test.js index 5d5ba8387b..166feb4183 100644 --- a/frontend-js/src/test/js/minerva-test.js +++ b/frontend-js/src/test/js/minerva-test.js @@ -7,7 +7,7 @@ var Promise = require("bluebird"); var minerva = require('../../main/js/minerva'); var SecurityError = require('../../main/js/SecurityError'); var ServerConnectorMock = require('./ServerConnector-mock'); -var Point= require('../../main/js/map/canvas/Point'); +var Point = require('../../main/js/map/canvas/Point'); var ProxyAccessPlugin = require('./plugin/ProxyAccessPlugin'); var chai = require('chai'); @@ -126,31 +126,67 @@ describe('minerva global', function () { }); }); - it('create with overlay', function () { - var overlay, project, plugin, map; - return ServerConnectorMock.getProject().then(function (result) { - project = result; - var options = helper.createCustomMapOptions(project); + describe('create with overlay', function () { + it('background as layout param in URL', function () { + var overlay, project, plugin, map; + return ServerConnectorMock.getProject().then(function (result) { + project = result; + var options = helper.createCustomMapOptions(project); - plugin = new ProxyAccessPlugin({}); - options.getPlugins().push(plugin); + plugin = new ProxyAccessPlugin({}); + options.getPlugins().push(plugin); - overlay = project.getDataOverlays()[1]; + overlay = project.getDataOverlays()[1]; - helper.setUrl("http://test/?layout=" + overlay.getName()); + helper.setUrl("http://test/?layout=" + overlay.getName()); - return minerva.create(options); - }).then(function (result) { - map = result; - assert.ok(result); - // input file is not available so it's the background - return plugin.getMinervaPluginProxy().project.map.getVisibleDataOverlays(); - }).then(function (visibleDataOverlays) { - // input file is available so it's not the background file but overlay - assert.equal(visibleDataOverlays.length, 0); - assert.equal(ServerConnectorMock.getSessionData(project).getSelectedBackgroundOverlay(), overlay.getId()); - assert.equal(logger.getWarnings().length, 0); - return map.destroy(); + return minerva.create(options); + }).then(function (result) { + map = result; + assert.ok(result); + // input file is not available so it's the background + return plugin.getMinervaPluginProxy().project.map.getVisibleDataOverlays(); + }).then(function (visibleDataOverlays) { + // input file is available so it's not the background file but overlay + assert.equal(visibleDataOverlays.length, 0); + assert.equal(ServerConnectorMock.getSessionData(project).getSelectedBackgroundOverlay(), overlay.getId()); + assert.equal(logger.getWarnings().length, 1); + return map.destroy(); + }); + }); + it('overlay as layout param in URL', function () { + helper.setUrl("http://test/?layout=xxx"); + var globalObject, plugin; + return ServerConnectorMock.getProject().then(function (project) { + var options = helper.createCustomMapOptions(project); + plugin = new ProxyAccessPlugin(); + options.getPlugins().push(plugin); + return minerva.create(options); + }).then(function (result) { + globalObject = result; + assert.ok(result); + return plugin.getMinervaPluginProxy().project.map.getVisibleDataOverlays(); + }).then(function (visibleDataOverlays) { + // input file is available so it's not the background file but overlay + assert.equal(visibleDataOverlays.length, 1); + assert.equal(logger.getWarnings().length, 1); + return globalObject.destroy(); + }); + }); + it('layout from session data', function () { + var layout; + return ServerConnectorMock.getProject().then(function (project) { + var options = helper.createCustomMapOptions(project); + + layout = project.getDataOverlays()[1]; + + ServerConnectorMock.getSessionData(project).setSelectedBackgroundOverlay(layout.getId()); + + return minerva.create(options); + }).then(function (result) { + assert.equal(ServerConnectorMock.getSessionData().getSelectedBackgroundOverlay(), layout.getId()); + return result.destroy(); + }); }); }); @@ -175,41 +211,6 @@ describe('minerva global', function () { }); }); - it('create with layout from session data', function () { - var layout; - return ServerConnectorMock.getProject().then(function (project) { - var options = helper.createCustomMapOptions(project); - - layout = project.getDataOverlays()[1]; - - ServerConnectorMock.getSessionData(project).setSelectedBackgroundOverlay(layout.getId()); - - return minerva.create(options); - }).then(function (result) { - assert.equal(ServerConnectorMock.getSessionData().getSelectedBackgroundOverlay(), layout.getId()); - return result.destroy(); - }); - }); - - it('create with layout 2', function () { - helper.setUrl("http://test/?layout=xxx"); - var globalObject, plugin; - return ServerConnectorMock.getProject().then(function (project) { - var options = helper.createCustomMapOptions(project); - plugin = new ProxyAccessPlugin(); - options.getPlugins().push(plugin); - return minerva.create(options); - }).then(function (result) { - globalObject = result; - assert.ok(result); - return plugin.getMinervaPluginProxy().project.map.getVisibleDataOverlays(); - }).then(function (visibleDataOverlays) { - // input file is available so it's not the background file but overlay - assert.equal(visibleDataOverlays.length, 1); - assert.equal(logger.getWarnings().length, 0); - return globalObject.destroy(); - }); - }); it('create with search overlay and GET search param', function () { helper.setUrl("http://test/?search=s1"); -- GitLab