diff --git a/frontend-js/src/main/js/map/AbstractCustomMap.js b/frontend-js/src/main/js/map/AbstractCustomMap.js index b5daee848b2f3de149c979e6eb0c2fae058c72f4..c2b258c9df331d0117442c7d28766a7ef1943ee7 100644 --- a/frontend-js/src/main/js/map/AbstractCustomMap.js +++ b/frontend-js/src/main/js/map/AbstractCustomMap.js @@ -25,7 +25,7 @@ function AbstractCustomMap(model, options) { if (model === undefined) { throw Error("Model must be defined"); } - + this.setElement(options.getElement()); this.setModel(model); @@ -97,12 +97,12 @@ AbstractCustomMap.prototype.setupLayouts = function() { */ AbstractCustomMap.prototype.creatMapOptions = function() { var self = this; - + var centerPoint = this.getModel().getCenterLatLng(); - + // if we have coordinate data stored in session then restore it var point = ServerConnector.getSessionData(self.getProject()).getCenter(self.getModel()); - if (point!== undefined) { + if (point !== undefined) { centerPoint = self.fromPointToLatLng(point); } @@ -317,7 +317,11 @@ AbstractCustomMap.prototype.registerMapClickEvents = function() { google.maps.event.addListener(this.getGoogleMap(), 'click', function(mouseEvent) { var point = self.fromLatLngToPoint(mouseEvent.latLng); var searchDb = customMap.getOverlayByName('search'); - return searchDb.searchByCoordinates({modelId: self.getModel().getId(), coordinates:point, zoom: self.getGoogleMap().getZoom()}).catch(GuiConnector.alert); + return searchDb.searchByCoordinates({ + modelId : self.getModel().getId(), + coordinates : point, + zoom : self.getGoogleMap().getZoom() + }).then(null, GuiConnector.alert); }); // select last clicked map @@ -587,18 +591,18 @@ AbstractCustomMap.prototype._showSelectedLayout = function(layoutId, index, leng layoutAliases = layout.getAliases(); layoutReactions = layout.getReactions(); - return Promise.each(layoutAliases,function(layoutAlias){ - if (layoutAlias.getModelId()===self.getId()) { + return Promise.each(layoutAliases, function(layoutAlias) { + if (layoutAlias.getModelId() === self.getId()) { return self.getModel().getAliasById(layoutAlias.getId()).then(function(aliasData) { return AliasOverlay.create(layoutAlias, aliasData, self, startX, endX); - }).then(function(overlay){ + }).then(function(overlay) { self.selectedLayoutOverlays[layoutId].push(overlay); }); } }); - }).then(function(){ - return Promise.each(layoutReactions,function(layoutReaction){ - if (layoutReaction.getModelId()===self.getId()) { + }).then(function() { + return Promise.each(layoutReactions, function(layoutReaction) { + if (layoutReaction.getModelId() === self.getId()) { return self.getModel().getReactionById(layoutReaction.getId()).then(function(reactionData) { var reactionOverlay = new ReactionOverlay(layoutReaction, reactionData, self, length === 1); self.selectedLayoutOverlays[layoutId].push(reactionOverlay); @@ -606,9 +610,9 @@ AbstractCustomMap.prototype._showSelectedLayout = function(layoutId, index, leng }); } }); - }).then(function(){ + }).then(function() { resolve(); - }).catch(reject); + }).then(null, reject); }); }; @@ -947,7 +951,7 @@ AbstractCustomMap.prototype.getElement = function() { return this._element; }; AbstractCustomMap.prototype.setElement = function(element) { - this._element= element; + this._element = element; }; /** @@ -967,7 +971,6 @@ AbstractCustomMap.prototype.setCenter = function(coordinates) { } }; - /** * Sets zoom level for google maps. * @@ -976,7 +979,7 @@ AbstractCustomMap.prototype.setCenter = function(coordinates) { * @param zoom * new zoom level on map */ -AbstractCustomMap.prototype.setZoom = function( zoom) { +AbstractCustomMap.prototype.setZoom = function(zoom) { if (this.initialized) { this.getGoogleMap().setZoom(zoom); } else { @@ -984,15 +987,15 @@ AbstractCustomMap.prototype.setZoom = function( zoom) { } }; -AbstractCustomMap.prototype.fitBounds = function( markers) { +AbstractCustomMap.prototype.fitBounds = function(markers) { var self = this; - var map = self.getGoogleMap(); - if (map !==undefined) { + var map = self.getGoogleMap(); + if (map !== undefined) { var bounds = new google.maps.LatLngBounds(); - for (var i=0;i<markers.length;i++){ + for (var i = 0; i < markers.length; i++) { var marker = markers[i]; - if (marker.getModelId()===self.getId()) { + if (marker.getModelId() === self.getId()) { var markerBounds = marker.getBounds(); bounds.extend(markerBounds.getNorthEast()); bounds.extend(markerBounds.getSouthWest()); @@ -1004,5 +1007,4 @@ AbstractCustomMap.prototype.fitBounds = function( markers) { } }; - module.exports = AbstractCustomMap; diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js index 78bd410fbc22c8af9ecf9f57b53a43e6f7178bd9..bd8be12e30cbf0666138db28ff4d434b105ef4f1 100644 --- a/frontend-js/src/main/js/map/CustomMap.js +++ b/frontend-js/src/main/js/map/CustomMap.js @@ -155,27 +155,18 @@ CustomMap.prototype.clearDbOverlays = function() { */ CustomMap.prototype.hideMarkersForDbOverlay = function(dbOverlay) { logger.debug("Clear dbOverlay: " + dbOverlay.name); - for ( var aliasKey in dbOverlay.aliasMarkers) { - if (dbOverlay.aliasMarkers.hasOwnProperty(aliasKey)) { - dbOverlay.aliasMarkers[aliasKey].setMap(null); - } - } - - for ( var pointKey in dbOverlay.pointMarkers) { - if (dbOverlay.pointMarkers.hasOwnProperty(pointKey)) { - dbOverlay.pointMarkers[pointKey].setMap(null); - } - } - - for ( var key in dbOverlay.reactionMarkers) { - if (dbOverlay.reactionMarkers.hasOwnProperty(key)) { - dbOverlay.reactionMarkers[key].setMap(null); + for ( var markerType in dbOverlay.markers) { + if (dbOverlay.markers.hasOwnProperty(markerType)) { + var markers = dbOverlay.markers[markerType]; + for ( var key in markers) { + if (markers.hasOwnProperty(key)) { + markers[key].setMap(null); + } + } + markers = []; } } - dbOverlay.aliasMarkers = []; - dbOverlay.pointMarkers = []; - dbOverlay.reactionMarkers = []; }; /** @@ -284,9 +275,11 @@ CustomMap.prototype.registerDbOverlay = function(dbOverlay) { this.overlayCollections[dbOverlay.getName()] = dbOverlay; - dbOverlay.aliasMarkers = []; - dbOverlay.pointMarkers = []; - dbOverlay.reactionMarkers = []; + dbOverlay.markers = { + ALIAS : [], + REACTION : [], + POINT : [] + }; if (dbOverlay.getName() === "search" || dbOverlay.getName() === "user") { dbOverlay.addListener("onSearch", function(e) { @@ -353,38 +346,15 @@ CustomMap.prototype.refreshMarkers = function() { CustomMap.prototype.refreshOverlayMarkers = function(overlay) { logger.debug("Refresh overlay: " + overlay.name); - for ( var aliasKey in overlay.aliasMarkers) { - if (overlay.aliasMarkers.hasOwnProperty(aliasKey) && overlay.aliasMarkers[aliasKey] !== undefined - && overlay.aliasMarkers[aliasKey] !== null) { - var alias = overlay.aliasMarkers[aliasKey]; - if (!this.isMarkerOptimization()) { - alias.hide(); - alias.show(); - } - } - } - - for ( var key in overlay.pointMarkers) { - if (overlay.pointMarkers.hasOwnProperty(key) && overlay.pointMarkers[key] !== undefined - && overlay.pointMarkers[key] !== null) { - var pointMarker = overlay.pointMarkers[key]; - if (!this.isMarkerOptimization()) { - pointMarker.hide(); - pointMarker.show(); - } - } - } - - for ( var reactionKey in overlay.reactionMarkers) { - if (overlay.reactionMarkers.hasOwnProperty(reactionKey) && overlay.reactionMarkers[reactionKey] !== undefined - && overlay.reactionMarkers[reactionKey] !== null) { - var reactionOverlay = overlay.reactionMarkers[reactionKey]; - if (!reactionOverlay.isShown()) { - reactionOverlay.show(); - } - if (!this.isMarkerOptimization()) { - reactionOverlay.hide(); - reactionOverlay.show(); + if (!this.isMarkerOptimization()) { + if (dbOverlay.markers.hasOwnProperty(markerType)) { + var markers = dbOverlay.markers[markerType]; + for ( var key in markers) { + if (markers.hasOwnProperty(key)) { + var marker = markers[key].setMap(null); + marker.hide(); + marker.show(); + } } } } @@ -734,14 +704,14 @@ CustomMap.prototype.renderOverlayCollection = function(overlayCollection, fitBou return Promise.each(elements, function(element) { var model = self.getSubmapById(element.modelId); if (element.getType() === "ALIAS") { - if (overlayCollection.aliasMarkers[element.getId()] !== undefined) { + if (overlayCollection.markers["ALIAS"][element.getId()] !== undefined) { logger.warn("More than one marker in " + overlayCollection.name + " for alias " + element.getId() + ". Skipping duplicates."); return null; } else { return model.getModel().getAliasById(element.getId()).then(function(aliasData) { var aliasMarker = new AliasMarker(element.getId(), element.icon, aliasData, model); - overlayCollection.aliasMarkers[element.getId()] = aliasMarker; + overlayCollection.markers["ALIAS"][element.getId()] = aliasMarker; markers.push(aliasMarker); return aliasMarker; }); @@ -763,18 +733,18 @@ CustomMap.prototype.renderOverlayCollection = function(overlayCollection, fitBou marker = new ReactionMarker(element.getId(), icon, reactionData, model); } marker.show(); - overlayCollection.reactionMarkers[element.getId()] = marker; + overlayCollection.markers["REACTION"][element.getId()] = marker; markers.push(marker); return marker; }); } else if (element.getType() === "POINT") { var pointData = model.getModel().getPointDataByPoint(element.getPoint()); - if (overlayCollection.pointMarkers[pointData.getId()] === undefined) { + if (overlayCollection.markers["POINT"][pointData.getId()] === undefined) { var pointMarker = new PointMarker(pointData, element.icon, model); - overlayCollection.pointMarkers[pointData.getId()] = pointMarker; + overlayCollection.markers["POINT"][pointData.getId()] = pointMarker; markers.push(pointMarker); } - return overlayCollection.pointMarkers[pointData.getId()]; + return overlayCollection.markers["POINT"][pointData.getId()]; } else { throw new Error("Unknown type of the element in overlay: " + element.type); } diff --git a/frontend-js/src/test/js/GuiConnector-mock.js b/frontend-js/src/test/js/GuiConnector-mock.js index 6cafa12520e005885f87c7dea8496b0bed010e06..838c69eb1fd7b7d2fbe46e0037cb1f3e3723445c 100644 --- a/frontend-js/src/test/js/GuiConnector-mock.js +++ b/frontend-js/src/test/js/GuiConnector-mock.js @@ -6,9 +6,13 @@ var OriginalGuiConnector = require('../../main/js/GuiConnector'); var GuiConnectorMock = OriginalGuiConnector; -GuiConnectorMock.alert = function(message) { - logger.error(message); - throw new Error(message); +GuiConnectorMock.alert = function(error) { + logger.error(error); + if (error instanceof Error) { + throw error; + } else { + throw new Error(error); + } }; module.exports = GuiConnectorMock; diff --git a/frontend-js/src/test/js/map/CustomMap-test.js b/frontend-js/src/test/js/map/CustomMap-test.js index 685f4db8cd1660bd1164e7f38195f4e8167d7e1b..344e5e3f6c31019778bc0e62a16f37afdbf4a7ab 100644 --- a/frontend-js/src/test/js/map/CustomMap-test.js +++ b/frontend-js/src/test/js/map/CustomMap-test.js @@ -287,8 +287,9 @@ describe('CustomMap', function() { overlayCollection : oc }).then(function() { var aliasMarkerCount = 0; - for ( var id in oc.aliasMarkers) { - if (oc.aliasMarkers.hasOwnProperty(id)) { + var markers = oc.markers["ALIAS"]; + for ( var id in markers) { + if (markers.hasOwnProperty(id)) { aliasMarkerCount++; } } @@ -316,8 +317,9 @@ describe('CustomMap', function() { overlayCollection : oc }).then(function() { var aliasMarkerCount = 0; - for ( var id in oc.aliasMarkers) { - if (oc.aliasMarkers.hasOwnProperty(id)) { + var markers = oc.markers["ALIAS"]; + for ( var id in markers) { + if (markers.hasOwnProperty(id)) { aliasMarkerCount++; } } @@ -346,8 +348,9 @@ describe('CustomMap', function() { overlayCollection : oc }).then(function() { var markerCount = 0; - for ( var id in oc.pointMarkers) { - if (oc.pointMarkers.hasOwnProperty(id)) { + var markers = oc.markers["POINT"]; + for ( var id in markers) { + if (markers.hasOwnProperty(id)) { markerCount++; } } @@ -376,8 +379,9 @@ describe('CustomMap', function() { overlayCollection : oc }).then(function() { var markerCount = 0; - for ( var id in oc.reactionMarkers) { - if (oc.reactionMarkers.hasOwnProperty(id)) { + var markers = oc.markers["REACTION"]; + for ( var id in markers) { + if (markers.hasOwnProperty(id)) { markerCount++; } } @@ -446,9 +450,9 @@ describe('CustomMap', function() { oc.getIdentifiedElements = function() { return Promise.resolve(searchResults); }; - oc.clear = function(){ + oc.clear = function() { searchResults = []; - return this.callListeners("onSearch",searchResults); + return this.callListeners("onSearch", searchResults); } return map.renderOverlayCollection({ @@ -524,7 +528,7 @@ describe('CustomMap', function() { }).then(function() { assert.equal(map.getId(), map.getActiveSubmapId()); - assert.ok(searchOverlay.aliasMarkers[329171]); + assert.ok(searchOverlay.markers["ALIAS"][329171]); }); }); @@ -546,9 +550,9 @@ describe('CustomMap', function() { return google.maps.event.trigger(map.getGoogleMap(), 'click', mev); }).then(function() { assert.equal(map.getId(), map.getActiveSubmapId()); - assert.ok(searchOverlay.reactionMarkers[153521]); - assert.ok(searchOverlay.reactionMarkers[153521].isShown()); - assert.ok(searchOverlay.aliasMarkers[329165]); + assert.ok(searchOverlay.markers["REACTION"][153521]); + assert.ok(searchOverlay.markers["REACTION"][153521].isShown()); + assert.ok(searchOverlay.markers["ALIAS"][329165]); }); }); @@ -643,9 +647,9 @@ describe('CustomMap', function() { ServerConnector.getSessionData().setShowComments(true); return map.refreshComments().then(function() { - assert.ok(commentsOverlay.pointMarkers['(241.01,372.35)']); - assert.ok(commentsOverlay.pointMarkers['(643.96,144.09)']); - assert.notOk(commentsOverlay.pointMarkers['unkId']); + assert.ok(commentsOverlay.markers["POINT"]['(241.01,372.35)']); + assert.ok(commentsOverlay.markers["POINT"]['(643.96,144.09)']); + assert.notOk(commentsOverlay.markers["POINT"]['unkId']); }); }); @@ -659,7 +663,7 @@ describe('CustomMap', function() { ServerConnector.getSessionData().setShowComments(false); return map.refreshComments(); }).then(function() { - assert.notOk(commentsOverlay.pointMarkers['(241.01, 372.35)']); + assert.notOk(commentsOverlay.markers["POINT"]['(241.01, 372.35)']); }); });