From 932ea54e425695b06e7a51eaac516e272d775079 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Fri, 19 May 2017 17:18:27 +0200 Subject: [PATCH] promises are simplified --- frontend-js/src/main/js/map/CustomMap.js | 251 ++++++++++++----------- 1 file changed, 129 insertions(+), 122 deletions(-) diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js index 3373cba537..71c01b9e11 100644 --- a/frontend-js/src/main/js/map/CustomMap.js +++ b/frontend-js/src/main/js/map/CustomMap.js @@ -34,7 +34,7 @@ var TouchMap = require('./TouchMap'); */ function CustomMap(options) { this._controls = []; - + if (!(options instanceof CustomMapOptions)) { options = new CustomMapOptions(options); } @@ -56,7 +56,7 @@ function CustomMap(options) { // list of reference genomes this._referenceGenome = []; - + if (options.isCustomTouchInterface()) { this._touchInterface = new TouchMap(this); } @@ -79,7 +79,7 @@ CustomMap.prototype.createSubmaps = function() { CustomMap.prototype.createLogo = function() { var logoControlDiv2 = document.createElement('DIV'); var logo2 = document.createElement('IMG'); - ServerConnector.getLogoImg().then(function(url){ + ServerConnector.getLogoImg().then(function(url) { if (!/^(f|ht)tps?:\/\//i.test(url)) { url = GuiConnector.getImgPrefix() + url; } @@ -89,13 +89,13 @@ CustomMap.prototype.createLogo = function() { logo2.style.width = "80px"; logo2.id = ControlType.LOGO_2_IMG; this.addControl(logo2); - + logoControlDiv2.appendChild(logo2); google.maps.event.addDomListener(logo2, 'click', function() { - return ServerConnector.getLogoLink().then(function(url){ + return ServerConnector.getLogoLink().then(function(url) { var win = window.open(url, '_blank'); win.focus(); - }).catch(GuiConnector.alert); + }); }); logoControlDiv2.index = 0; // used for ordering this.getGoogleMap().controls[google.maps.ControlPosition.LEFT_BOTTOM].push(logoControlDiv2); @@ -123,9 +123,9 @@ CustomMap.prototype.clearOverlays = function() { for ( var overlayName in this.overlayCollections) { if (this.overlayCollections.hasOwnProperty(overlayName)) { var collection = this.overlayCollections[overlayName]; - if (collection.constructor.name==="OverlayCollection") { + if (collection.constructor.name === "OverlayCollection") { this.clearOverlayCollection(collection); - }else { + } else { collection.clear(); } } @@ -177,7 +177,10 @@ CustomMap.prototype.clearOverlayCollection = function(collection) { */ CustomMap.prototype.updateOverlayCollection = function(overlayCollection, fitBounds) { this.clearOverlayCollection(overlayCollection); - return this.renderOverlayCollection({overlayCollection:overlayCollection, fitBounds:fitBounds}); + return this.renderOverlayCollection({ + overlayCollection : overlayCollection, + fitBounds : fitBounds + }); }; /** @@ -189,7 +192,7 @@ CustomMap.prototype.updateOverlayCollection = function(overlayCollection, fitBou */ CustomMap.prototype.openLayout = function(identifier) { var self = this; - + logger.debug("Opening layout: " + identifier); this.getGoogleMap().setMapTypeId(identifier); @@ -263,16 +266,17 @@ CustomMap.prototype.registerSource = function(overlayCollection) { overlayCollection.pointMarkers = []; overlayCollection.reactionMarkers = []; - if (overlayCollection.getName()==="search") { + if (overlayCollection.getName() === "search") { overlayCollection.addListener("onSearch", function() { return self.updateOverlayCollection(overlayCollection, false); }); } - if (overlayCollection.getName() === "drug" || overlayCollection.getName() === "chemical" ||overlayCollection.getName() === "mirna" ) { + if (overlayCollection.getName() === "drug" || overlayCollection.getName() === "chemical" + || overlayCollection.getName() === "mirna") { overlayCollection.addListener("onSearch", function() { return self.updateOverlayCollection(overlayCollection, false); }); - + overlayCollection.addListener("onTargetVisibilityChange", function() { return self.updateOverlayCollection(overlayCollection, false); }); @@ -282,13 +286,15 @@ CustomMap.prototype.registerSource = function(overlayCollection) { CustomMap.prototype.refreshComments = function() { var self = this; - + var collection = self.getOverlayByName("comment"); - if (collection!==undefined) { + if (collection !== undefined) { self.clearOverlayCollection(collection); if (ServerConnector.getSessionData(self.getProject()).getShowComments()) { - return collection.refresh().then(function(){ - return self.renderOverlayCollection({overlayCollection:collection}); + return collection.refresh().then(function() { + return self.renderOverlayCollection({ + overlayCollection : collection + }); }); } else { return collection.clear(); @@ -372,8 +378,10 @@ CustomMap.prototype.getSubmapDialogDiv = function(id) { dialogDiv.setAttribute("name", "dialog-" + id); this._dialogs[id] = dialogDiv; - - $(dialogDiv).dialog({autoOpen: false}); + + $(dialogDiv).dialog({ + autoOpen : false + }); } return dialogDiv; }; @@ -384,7 +392,7 @@ CustomMap.prototype.openSubmodel = function(id) { if (submap === null) { throw new Error("Unknown submap for id: " + id); } - if (submap!==this) { + if (submap !== this) { var dialogDiv = self.getSubmapDialogDiv(id); @@ -427,7 +435,7 @@ CustomMap.prototype.customizeGoogleMapView = function(div) { // center map and zoom in to fit into browser window if there is no // information about coordinates in the session - if (ServerConnector.getSessionData(this.getProject()).getCenter(this.getModel())===undefined) { + if (ServerConnector.getSessionData(this.getProject()).getCenter(this.getModel()) === undefined) { var bounds = new google.maps.LatLngBounds(); bounds.extend(this.getTopLeftLatLng()); bounds.extend(this.getBottomRightLatLng()); @@ -471,10 +479,10 @@ CustomMap.prototype.setZoom = function(mapIdentifier, zoom) { */ CustomMap.prototype.createMapChangedCallbacks = function() { var customMapSelf = this; - var sessionData = ServerConnector.getSessionData(customMapSelf.getProject()); + var sessionData = ServerConnector.getSessionData(customMapSelf.getProject()); // listener for changing zoom level google.maps.event.addListener(this.getGoogleMap(), 'zoom_changed', function() { - sessionData.setZoomLevel(customMapSelf.getModel(),customMapSelf.getGoogleMap().getZoom()); + sessionData.setZoomLevel(customMapSelf.getModel(), customMapSelf.getGoogleMap().getZoom()); }); // if we have zoom level data stored in session then restore it @@ -483,14 +491,14 @@ CustomMap.prototype.createMapChangedCallbacks = function() { level = parseInt(level); this.getGoogleMap().setZoom(level); } else { - sessionData.setZoomLevel(customMapSelf.getModel(),customMapSelf.getGoogleMap().getZoom()); + sessionData.setZoomLevel(customMapSelf.getModel(), customMapSelf.getGoogleMap().getZoom()); } // listener for changing location of the map (moving left/reght/top/bottom google.maps.event.addListener(this.getGoogleMap(), 'center_changed', function() { var coord = customMapSelf.getGoogleMap().getCenter(); var point = customMapSelf.fromLatLngToPoint(coord); - sessionData.setCenter(customMapSelf.getModel(),point); + sessionData.setCenter(customMapSelf.getModel(), point); }); // listener for changing type of layout @@ -522,7 +530,7 @@ CustomMap.prototype.getSubmodelById = function(identifier) { return this.submaps[i]; } } - logger.warn("Cannot find submodel with id: "+identifier); + logger.warn("Cannot find submodel with id: " + identifier); return null; }; @@ -548,7 +556,6 @@ CustomMap.prototype.showModel = function(id, point, zoomLevel) { } }; - /** * Adds layout to be visualized. * @@ -557,24 +564,18 @@ CustomMap.prototype.showModel = function(id, point, zoomLevel) { */ CustomMap.prototype.addSelectedLayout = function(identifier) { var self = this; - return new Promise(function(resolve, reject) { - logger.debug("Selecting layout: " + identifier); + logger.debug("Selecting layout: " + identifier); - if (self.selectedLayouts[identifier] === true) { - logger.warn("Layout " + identifier + " already selected"); - resolve(); - } else { - self.selectedLayouts[identifier] = true; - ServerConnector.getSessionData(self.getProject()).setVisibleOverlays(self.getSelectedLayouts()); - return self.getModel().initLayoutDataByLayoutId(identifier).then(function() { - return self.refreshSelectedLayouts(); - }).then(function() { - resolve(); - }).catch(function(exception){ - reject(exception); - }); - } - }); + if (self.selectedLayouts[identifier] === true) { + logger.warn("Layout " + identifier + " already selected"); + return Promise.resolve(); + } else { + self.selectedLayouts[identifier] = true; + ServerConnector.getSessionData(self.getProject()).setVisibleOverlays(self.getSelectedLayouts()); + return self.getModel().initLayoutDataByLayoutId(identifier).then(function() { + return self.refreshSelectedLayouts(); + }); + } }; /** @@ -641,7 +642,7 @@ CustomMap.prototype.refreshSelectedLayouts = function() { } } } - return self.refreshInfoWindows(); + return self.refreshInfoWindows(); }); }; @@ -774,7 +775,7 @@ CustomMap.prototype.renderOverlayCollection = function(overlayCollection, fitBou fitBounds = overlayCollection.fitBounds; overlayCollection = overlayCollection.overlayCollection; } - + var elements; var boundsArray = []; boundsArray[self.getId()] = new google.maps.LatLngBounds(); @@ -782,14 +783,13 @@ CustomMap.prototype.renderOverlayCollection = function(overlayCollection, fitBou boundsArray[self.submaps[j].getId()] = new google.maps.LatLngBounds(); } - return overlayCollection.getIdentifiedElements().then(function(identifiedElements){ - elements = identifiedElements; + return overlayCollection.getIdentifiedElements().then( + function(identifiedElements) { + elements = identifiedElements; - var bounds; + var bounds; - return Promise.each( - elements, - function(element) { + return Promise.each(elements, function(element) { var model = self.getSubmodelById(element.modelId); if (element.getType() === "ALIAS") { if (overlayCollection.aliasMarkers[element.getId()] !== undefined) { @@ -831,7 +831,7 @@ CustomMap.prototype.renderOverlayCollection = function(overlayCollection, fitBou }); } else if (element.getType() === "POINT") { var pointData = model.getModel().getPointDataByPoint(element.getPoint()); - if (overlayCollection.pointMarkers[pointData.getId()] === undefined) { + if (overlayCollection.pointMarkers[pointData.getId()] === undefined) { var pointMarker = new PointMarker(pointData, element.icon, model); overlayCollection.pointMarkers[pointData.getId()] = pointMarker; bounds = pointMarker.getBounds(); @@ -843,7 +843,7 @@ CustomMap.prototype.renderOverlayCollection = function(overlayCollection, fitBou throw new Error("Unknown type of the element in overlay: " + element.type); } }); - }).then(function() { + }).then(function() { for (var i = 0; i < elements.length; i++) { var element = elements[i]; @@ -860,7 +860,7 @@ CustomMap.prototype.renderOverlayCollection = function(overlayCollection, fitBou var map = self.getSubmodelById(mapId).getGoogleMap(); var bounds = boundsArray[mapId]; if (map !== undefined && !bounds.isEmpty()) { - map.fitBounds(bounds); + map.fitBounds(bounds); } } } @@ -1011,18 +1011,20 @@ CustomMap.prototype.getOverlayDataForIdentifiedElement = function(identifiedElem generalFlag = false; } overlays.push(overlay); - promises.push(overlay.getDetailDataByIdentifiedElement(identifiedElement, !overlay.allowSearchById() || generalFlag)); + promises.push(overlay.getDetailDataByIdentifiedElement(identifiedElement, !overlay.allowSearchById() + || generalFlag)); } } } - return new Promise(function(resolve,reject){ - Promise.all(promises).then(function(values){ - var result = []; - for (var i=0;i<values.length;i++){ - result.push({overlay:overlays[i], data:values[i]}); - } - resolve(result); - }).catch(reject); + return Promise.all(promises).then(function(values) { + var result = []; + for (var i = 0; i < values.length; i++) { + result.push({ + overlay : overlays[i], + data : values[i] + }); + } + return result; }); }; @@ -1063,7 +1065,7 @@ CustomMap.prototype.setActiveSubmapId = function(submapId) { CustomMap.prototype.setActiveSubmapClickCoordinates = function(coordinates) { if (!(coordinates instanceof google.maps.Point)) { - throw new Error("Coordinates must be provided as google.maps.Point object, but found: "+coordinates ); + throw new Error("Coordinates must be provided as google.maps.Point object, but found: " + coordinates); } this._activeSubmapCoordinates = coordinates; }; @@ -1073,20 +1075,20 @@ CustomMap.prototype.getActiveSubmapClickCoordinates = function() { CustomMap.prototype.getReferenceGenome = function(type, version) { var self = this; - if (self.getProject().getOrganism()===undefined) { + if (self.getProject().getOrganism() === undefined) { return Promise.resolve(new ReferenceGenome(null)); } - + if (self._referenceGenome[type] === undefined) { self._referenceGenome[type] = []; } if (self._referenceGenome[type][version] === undefined) { return ServerConnector.getReferenceGenome({ - type:type, - version:version, - organism:self.getProject().getOrganism().name, - }).then(function(genome){ - self._referenceGenome[type][version] =genome; + type : type, + version : version, + organism : self.getProject().getOrganism().name, + }).then(function(genome) { + self._referenceGenome[type][version] = genome; return genome; }); } else { @@ -1111,16 +1113,16 @@ CustomMap.prototype.getTopOverviewImage = function() { CustomMap.prototype.addControl = function(element) { if (this._controls[element.id] !== undefined) { - throw new Error("Element with id "+element.id+" already added to controls"); + throw new Error("Element with id " + element.id + " already added to controls"); } - if (ControlType[element.id]===undefined) { - throw new Error("Unknown control type: "+element.id); + if (ControlType[element.id] === undefined) { + throw new Error("Unknown control type: " + element.id); } - this._controls[element.id]= element; + this._controls[element.id] = element; }; CustomMap.prototype.getControl = function(type) { - if (ControlType[type]===undefined) { + if (ControlType[type] === undefined) { throw new Error("Unknown control type: " + type); } return this._controls[type]; @@ -1152,16 +1154,24 @@ CustomMap.prototype.getSelectionContextMenu = function() { CustomMap.prototype.openCommentDialog = function() { var self = this; - return ServerConnector.getClosestElementsByCoordinates({modelId:this.getActiveSubmapId(), coordinates:this.getActiveSubmapClickCoordinates()}).then(function(elements){ + return ServerConnector.getClosestElementsByCoordinates({ + modelId : this.getActiveSubmapId(), + coordinates : this.getActiveSubmapClickCoordinates() + }).then(function(elements) { var commentDialog = self.getCommentDialog(); - if (commentDialog===undefined) { - var div = Functions.createElement({type: "div"}); + if (commentDialog === undefined) { + var div = Functions.createElement({ + type : "div" + }); self.getElement().appendChild(div); - commentDialog = new CommentDialog({element:div, customMap:self}); + commentDialog = new CommentDialog({ + element : div, + customMap : self + }); self.setCommentDialog(commentDialog); } self.setCommentDialog(commentDialog); - + return commentDialog.open(elements); }); }; @@ -1170,86 +1180,83 @@ CustomMap.prototype.fetchIdentifiedElements = function(elements, complete) { var modelIds = []; var modelElements = []; var i; - for (i=0;i<elements.length;i++) { + for (i = 0; i < elements.length; i++) { var element = elements[i]; - if (modelElements[element.getModelId()]===undefined) { + if (modelElements[element.getModelId()] === undefined) { modelIds.push(element.getModelId()); - modelElements[element.getModelId()]=[]; + modelElements[element.getModelId()] = []; } modelElements[element.getModelId()].push(element); - } - + } + var promises = []; - for (i=0;i<modelIds.length;i++) { + for (i = 0; i < modelIds.length; i++) { var modelId = modelIds[i]; promises.push(this.getSubmodelById(modelId).getModel().getByIdentifiedElements(modelElements[modelId], complete)); } return Promise.all(promises); - + }; -CustomMap.prototype.refreshSearchAutocomplete = function(){ +CustomMap.prototype.refreshSearchAutocomplete = function() { var self = this; - self._searchAutocomplete=[]; - return new Promise(function(resolve, reject){ - return ServerConnector.getSuggestedQueryList().then(function(queries){ - for (var i = 0; i < queries.length; i++) { - var mainString = queries[i]; - for (var j = 0; j < mainString.length; j++) { - var substring = mainString.substring(0, j + 1); - if (self._searchAutocomplete[substring] !== undefined) { - continue; - } + self._searchAutocomplete = []; + return ServerConnector.getSuggestedQueryList().then(function(queries) { + for (var i = 0; i < queries.length; i++) { + var mainString = queries[i]; + for (var j = 0; j < mainString.length; j++) { + var substring = mainString.substring(0, j + 1); + if (self._searchAutocomplete[substring] !== undefined) { + continue; + } - var list = []; - for (var k = 0; k < 5; k++) { - if (k + i >= queries.length) { - break; - } else if (queries[k + i].toLowerCase().startsWith(substring.toLowerCase())) { - list.push(queries[k + i]); - } + var list = []; + for (var k = 0; k < 5; k++) { + if (k + i >= queries.length) { + break; + } else if (queries[k + i].toLowerCase().startsWith(substring.toLowerCase())) { + list.push(queries[k + i]); } - - self._searchAutocomplete[substring]=list; } + + self._searchAutocomplete[substring] = list; } - resolve(self._searchAutocomplete); - }).catch(reject); + } + return self._searchAutocomplete; }); }; -CustomMap.prototype.getSearchAutocomplete = function(query){ - if (this._searchAutocomplete===undefined) { +CustomMap.prototype.getSearchAutocomplete = function(query) { + if (this._searchAutocomplete === undefined) { this.refreshSearchAutocomplete(); return []; } - + return this._searchAutocomplete[query]; }; -CustomMap.prototype.setSelectedPolygon = function(polygonData){ +CustomMap.prototype.setSelectedPolygon = function(polygonData) { this._selectedPolygon = polygonData; }; -CustomMap.prototype.getSelectedPolygon = function(){ +CustomMap.prototype.getSelectedPolygon = function() { return this._selectedPolygon; }; -CustomMap.prototype.getSubmaps = function(){ +CustomMap.prototype.getSubmaps = function() { var submaps = this.submaps; - if (submaps===undefined) { - submaps=[]; + if (submaps === undefined) { + submaps = []; } return submaps; }; -CustomMap.prototype.destroy = function(){ +CustomMap.prototype.destroy = function() { var self = this; var commentDialog = self.getCommentDialog(); - if (commentDialog!==undefined) { + if (commentDialog !== undefined) { commentDialog.destroy(); } - }; module.exports = CustomMap; -- GitLab