From dbc7fce91d3b93c0634196c3e7feaad5a6566d07 Mon Sep 17 00:00:00 2001 From: Norbert Renner Date: Thu, 28 Mar 2019 11:40:50 +0100 Subject: [PATCH] Persist layer selection with local storage (#146) --- js/LayersConfig.js | 25 +++++++++++++++++++++++++ js/control/LayersTab.js | 24 ++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/js/LayersConfig.js b/js/LayersConfig.js index 3826701..a710e29 100644 --- a/js/LayersConfig.js +++ b/js/LayersConfig.js @@ -18,6 +18,29 @@ BR.LayersConfig = L.Class.extend({ this._addLeafletProvidersLayers(); this._customizeLayers(); + + this.loadDefaultLayers(); + }, + + loadDefaultLayers: function() { + if (BR.Util.localStorageAvailable()) { + var item = localStorage.getItem("map/defaultLayers"); + if (item) { + var defaultLayers = JSON.parse(item); + this.defaultBaseLayers = defaultLayers.baseLayers; + this.defaultOverlays = defaultLayers.overlays; + } + } + }, + + storeDefaultLayers: function (baseLayers, overlays) { + if (BR.Util.localStorageAvailable()) { + var defaultLayers = { + baseLayers: baseLayers, + overlays: overlays + }; + localStorage.setItem("map/defaultLayers", JSON.stringify(defaultLayers)); + } }, _addLeafletProvidersLayers: function () { @@ -230,6 +253,8 @@ BR.LayersConfig = L.Class.extend({ } layer.getAttribution = getAttribution; + layer.id = props.id; + return layer; } }); diff --git a/js/control/LayersTab.js b/js/control/LayersTab.js index be03d33..3f42c01 100644 --- a/js/control/LayersTab.js +++ b/js/control/LayersTab.js @@ -118,6 +118,8 @@ BR.LayersTab = L.Control.Layers.extend({ } else { this.addBaseLayer(layer, name); } + + this.storeDefaultLayers(); }; var onUncheckNode = function (e, data) { @@ -132,6 +134,8 @@ BR.LayersTab = L.Control.Layers.extend({ this.addFirstLayer(); } } + + this.storeDefaultLayers(); }; $('#optional-layers-tree') @@ -263,6 +267,26 @@ BR.LayersTab = L.Control.Layers.extend({ return data; }, + storeDefaultLayers: function () { + var baseLayers = []; + var overlays = []; + + for (var i = 0; i < this._layers.length; i++) { + var obj = this._layers[i]; + // id set in LayersConfig.createLayer + var id = obj.layer.id; + if (id) { + if (obj.overlay) { + overlays.push(id); + } else { + baseLayers.push(id); + } + } + } + + this.layersConfig.storeDefaultLayers(baseLayers, overlays); + }, + addFirstLayer: function () { for (var i = 0; i < this._layers.length; i++) { var obj = this._layers[i];