From 4413ef3a2909f3a19add5c5b0c71fc34a0b7e42f Mon Sep 17 00:00:00 2001 From: blavenie <benoit.lavenier@e-is.pro> Date: Wed, 25 Oct 2017 20:16:51 +0200 Subject: [PATCH] [fix] Map network: remember layers visibility (disable cache on view) --- .../map/js/controllers/network-controllers.js | 80 +++++++++++-------- .../map/js/controllers/wot-controllers.js | 8 +- .../map/templates/network/view_map.html | 3 +- 3 files changed, 50 insertions(+), 41 deletions(-) diff --git a/www/plugins/map/js/controllers/network-controllers.js b/www/plugins/map/js/controllers/network-controllers.js index dd3d3125d..03a8ca0a4 100644 --- a/www/plugins/map/js/controllers/network-controllers.js +++ b/www/plugins/map/js/controllers/network-controllers.js @@ -26,7 +26,6 @@ angular.module('cesium.map.network.controllers', ['cesium.services', 'cesium.map controller: 'MapNetworkViewCtrl' } }, - cache: false, data: { silentLocationChange: true } @@ -46,9 +45,6 @@ angular.module('cesium.map.network.controllers', ['cesium.services', 'cesium.map formatPubkey = $filter('formatPubkey'), markerMessageTemplate, markersSearchLayer, - formatPubkey = $filter('formatPubkey'), - loadingControl, - searchControl, icons= { member: { type: 'awesomeMarker', @@ -79,8 +75,9 @@ angular.module('cesium.map.network.controllers', ['cesium.services', 'cesium.map markerMessageTemplate += '</div>'; markerMessageTemplate = markerMessageTemplate.replace(/[:]rebind[:]|[:][:]/g, ''); // remove binding limitation + $scope.loading = true; $scope.mapId = 'map-network-' + $scope.$id; - $scope.helptipPrefix = 'helptip-' + $scope.mapId; // make to override, to avoid error during help tour + $scope.helptipPrefix = 'helptip-' + $scope.mapId; //Override value from super controller (avoid error during help tour) $scope.map = MapUtils.map({ cache: 'map-network', @@ -99,27 +96,43 @@ angular.module('cesium.map.network.controllers', ['cesium.services', 'cesium.map offline: { type: 'featureGroup', name: 'MAP.NETWORK.VIEW.LAYER.OFFLINE', - visible: true + visible: false } } }, + bounds: {}, loading: true, - markers: {} - }); + markers: {} + }); var inheritedEnter = $scope.enter; $scope.enter = function(e, state) { - if ($scope.map.loading) { + if ($scope.loading) { + if (state.stateParams && state.stateParams.c) { + var cPart = state.stateParams.c.split(':'); + $scope.map.center.lat = parseFloat(cPart[0]); + $scope.map.center.lng = parseFloat(cPart[1]); + $scope.map.center.zoom = parseInt(cPart[2]); + } + + $scope.$watch("map.center", function() { + if (!$scope.map.loading) { + return $timeout(function() { + $scope.updateLocationHref(); + }, 300); + } + }, true); // Load the map (and init if need) - $scope.loadMap().then(function(map){ + $scope.loadMap() + .then(function(map){ - // Load indicator - map.fire('dataloading'); + // Load indicator + map.fire('dataloading'); - // inherited - return inheritedEnter(e, state); // will call inherited load() - }); + // inherited + return inheritedEnter(e, state); // will call inherited load() + }); } else { @@ -132,14 +145,6 @@ angular.module('cesium.map.network.controllers', ['cesium.services', 'cesium.map }; $scope.$on('$ionicView.enter', $scope.enter); - // View leave: store map options (center) to cache - $scope.leave = function() { - if ($scope.map.cache) { - MapUtils.cache.save($scope.map); - } - }; - $scope.$on('$ionicView.leave', $scope.leave); - var inheritedComputeOptions = $scope.computeOptions; $scope.computeOptions = function() { var options = inheritedComputeOptions(); @@ -152,17 +157,16 @@ angular.module('cesium.map.network.controllers', ['cesium.services', 'cesium.map if (!$scope.map.loading) return map; // already loaded // Add loading control - loadingControl = L.Control.loading({ + L.Control.loading({ position: 'topright', separate: true - }); - loadingControl.addTo(map); + }).addTo(map); // Add search control // Create a hidden layer, to hold search markers markersSearchLayer = L.layerGroup({visible: false}); var searchTip = $interpolate($templateCache.get('plugins/map/templates/network/item_search_tooltip.html')); - searchControl = MapUtils.control.search({ + MapUtils.control.search({ layer: markersSearchLayer, propertyName: 'title', buildTip: function (text, val) { @@ -180,9 +184,11 @@ angular.module('cesium.map.network.controllers', ['cesium.services', 'cesium.map }); popupMarker && popupMarker.openPopup(); }, 400); - } - }); - searchControl.addTo(map); + }, + firstTipSubmit: true, + tooltipLimit: 50 + }) + .addTo(map); // Add marker cluster layer var _getMarkerColor = function(marker) { @@ -216,7 +222,7 @@ angular.module('cesium.map.network.controllers', ['cesium.services', 'cesium.map }); markerClusterLayer.addTo(map); - $scope.map.layers.overlays['offline'].visible=false; + //$scope.map.layers.overlays['offline'].visible=false; $scope.map.loading = false; return map; @@ -310,7 +316,9 @@ angular.module('cesium.map.network.controllers', ['cesium.services', 'cesium.map // Hide loading indicator, when finished if (!$scope.search.loading) { - leafletData.getMap($scope.mapId).then(function (map) { + leafletData.getMap($scope.mapId) + .then(function (map) { + $scope.loading = false; map.fire('dataload'); }); } @@ -333,9 +341,6 @@ angular.module('cesium.map.network.controllers', ['cesium.services', 'cesium.map return marker; }; - $scope.showHelpTip = function() { - // override subclass - }; // Update the browser location, to be able to refresh the page $scope.updateLocationHref = function(centerHash) { @@ -350,6 +355,7 @@ angular.module('cesium.map.network.controllers', ['cesium.services', 'cesium.map // removeIf(device) // Update the browser location, to be able to refresh the page + // FIXME: not need, should be removed $scope.$on("centerUrlHash", function(event, centerHash) { if (!$scope.loading) { return $timeout(function() { @@ -359,5 +365,9 @@ angular.module('cesium.map.network.controllers', ['cesium.services', 'cesium.map }); // endRemoveIf(device) + /* -- help tip -- */ + $scope.showHelpTip = function() { + // override subclass + }; }); diff --git a/www/plugins/map/js/controllers/wot-controllers.js b/www/plugins/map/js/controllers/wot-controllers.js index 0a2702be0..2abe9ee91 100644 --- a/www/plugins/map/js/controllers/wot-controllers.js +++ b/www/plugins/map/js/controllers/wot-controllers.js @@ -78,6 +78,7 @@ function MapWotViewController($scope, $filter, $templateCache, $interpolate, $ti $scope.loading = true; $scope.mapId = 'map-wot-' + $scope.$id; + $scope.map = MapUtils.map({ cache: 'map-wot', layers: { @@ -227,9 +228,8 @@ function MapWotViewController($scope, $filter, $templateCache, $interpolate, $ti popupMarker && popupMarker.openPopup(); }, 400); }, - //firstTipSubmit: true, - tooltipLimit: 50/*, - hideMarkerOnCollapse: true*/ + firstTipSubmit: true, + tooltipLimit: 50 }).addTo(map); // Add marker cluster layer @@ -353,7 +353,7 @@ function MapWotViewController($scope, $filter, $templateCache, $interpolate, $ti }); }; - + // Update the browser location, to be able to refresh the page $scope.updateLocationHref = function(centerHash) { // removeIf(device) var params = $location.search() || {}; diff --git a/www/plugins/map/templates/network/view_map.html b/www/plugins/map/templates/network/view_map.html index 316a454cf..a2cfff5d8 100644 --- a/www/plugins/map/templates/network/view_map.html +++ b/www/plugins/map/templates/network/view_map.html @@ -7,9 +7,8 @@ </ion-nav-buttons> <ion-content data-tap-disabled="true"> - <leaflet id="{{mapId}}" + <leaflet id="{{::mapId}}" height="100%" - url-hash-center="yes" center="map.center" markers="map.markers" layers="map.layers"> -- GitLab