From deed0773f3f4a45b6c481930cdb89037c42e091c Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Fri, 21 Dec 2018 14:26:55 +0100 Subject: [PATCH] opening submap changes url GET parameter --- frontend-js/src/main/js/GuiConnector.js | 21 +++++++++++++++ .../src/main/js/ObjectWithListeners.js | 6 ++++- frontend-js/src/main/js/map/CustomMap.js | 26 ++++++++++--------- frontend-js/src/main/js/minerva.js | 11 ++++++++ 4 files changed, 51 insertions(+), 13 deletions(-) diff --git a/frontend-js/src/main/js/GuiConnector.js b/frontend-js/src/main/js/GuiConnector.js index b15a812aaf..24437c1873 100644 --- a/frontend-js/src/main/js/GuiConnector.js +++ b/frontend-js/src/main/js/GuiConnector.js @@ -109,6 +109,27 @@ GuiConnector.prototype.init = function () { } }; + +/** + * + * @param {string} key + * @param {string} value + */ +GuiConnector.prototype.setUrlParam = function (key, value) { + var self = this; + if (self.getParams[key] !== value) { + self.getParams[key] = value; + var url = location.pathname + '?'; + for (var getParamKey in self.getParams) { + if (self.getParams.hasOwnProperty(getParamKey)) { + var getParamValue = self.getParams[getParamKey]; + url += getParamKey + "=" + getParamValue + "&"; + } + } + window.history.replaceState(null, null, url); + } +}; + /** * * @param {function} handler diff --git a/frontend-js/src/main/js/ObjectWithListeners.js b/frontend-js/src/main/js/ObjectWithListeners.js index 219b102584..ce215052b8 100644 --- a/frontend-js/src/main/js/ObjectWithListeners.js +++ b/frontend-js/src/main/js/ObjectWithListeners.js @@ -16,8 +16,12 @@ function ObjectWithListeners() { /** * @callback ListenerCallback - * @param event + * @param {Object} event + * @param {string} event.type + * @param {ObjectWithListeners} event.object + * @param {Object} event.arg */ + /** * Adds a listener function to the object. * diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js index 4209da61ba..bfc79ed439 100644 --- a/frontend-js/src/main/js/map/CustomMap.js +++ b/frontend-js/src/main/js/map/CustomMap.js @@ -45,6 +45,7 @@ function CustomMap(options) { this.registerListenerType("onShowOverlay"); this.registerListenerType("onHideOverlay"); this.registerListenerType("onBackgroundOverlayChange"); + this.registerListenerType("onSubmapOpen"); // @type {boolean[]} this._selectedOverlays = []; @@ -479,11 +480,12 @@ CustomMap.prototype.openSubmap = function (id) { return self.refreshMarkers(); }); } + }).then(function (value) { + return self.callListeners("onSubmapOpen", {mapId: id}); }); } else { return Promise.resolve(); } - }; /** @@ -1218,26 +1220,26 @@ CustomMap.prototype.getDistance = function (params) { if (element.getY() <= y && element.getY() + element.getHeight() >= y) { return 0; } else { - return Math.min( - Math.abs(element.getY() - y), - Math.abs(element.getY() + element.getHeight() - y) + return Math.min( + Math.abs(element.getY() - y), + Math.abs(element.getY() + element.getHeight() - y) ); } } else if (element.getY() <= y && element.getY() + element.getHeight() >= y) { - return Math.min( - Math.abs(element.getX() - x), - Math.abs(element.getX() + element.getWidth() - x) + return Math.min( + Math.abs(element.getX() - x), + Math.abs(element.getX() + element.getWidth() - x) ); } else { var elementX = element.getX(); var elementY = element.getY(); var elementWidth = element.getWidth(); var elementHeight = element.getHeight(); - return Math.min( - Functions.distance(p1, new Point(elementX, y)), - Functions.distance(p1, new Point(elementX + elementWidth, elementY)), - Functions.distance(p1, new Point(elementX, elementY + elementHeight)), - Functions.distance(p1, new Point(elementX + elementWidth, elementY + elementHeight)) + return Math.min( + Functions.distance(p1, new Point(elementX, y)), + Functions.distance(p1, new Point(elementX + elementWidth, elementY)), + Functions.distance(p1, new Point(elementX, elementY + elementHeight)), + Functions.distance(p1, new Point(elementX + elementWidth, elementY + elementHeight)) ); } } else if (element instanceof Reaction) { diff --git a/frontend-js/src/main/js/minerva.js b/frontend-js/src/main/js/minerva.js index 9a82fd917f..cfd3876fdd 100644 --- a/frontend-js/src/main/js/minerva.js +++ b/frontend-js/src/main/js/minerva.js @@ -317,6 +317,16 @@ function assignSplitBarHandler(customMap, pluginManager) { }); } +/** + * + * @param {CustomMap} customMap + */ +function addUrlChangeListenersToCustomMap(customMap) { + customMap.addListener("onSubmapOpen", function (event) { + GuiConnector.setUrlParam("submap", event.arg.mapId.toString()); + }); +} + /** * * @param {CustomMapOptions|*} params @@ -367,6 +377,7 @@ function create(params) { customMap = new CustomMap(params); + addUrlChangeListenersToCustomMap(customMap); new DbOverlayCollection({ map: customMap -- GitLab