Leaflet.Control.Layers.js (1686B)
1 import L from 'leaflet'; 2 import './leaflet.hashState'; 3 4 L.Control.Layers.include(L.Mixin.HashState); 5 6 L.Control.Layers.include({ 7 stateChangeEvents: ['baselayerchange', 'overlayadd', 'overlayremove'], 8 stateChangeEventsSource: '_map', 9 10 serializeState: function() { 11 const keys = []; 12 this._map.eachLayer((layer) => { 13 let key = layer.options.code; 14 if (key) { 15 keys.push([key, layer.options.zIndex]); 16 } 17 } 18 ); 19 keys.sort((k1, k2) => k1[1] - k2[1]); 20 const state = keys.map((k) => k[0]); 21 return state; 22 }, 23 24 unserializeState: function(values) { 25 if (!values || values.length === 0) { 26 return false; 27 } 28 29 let hasBaselayer; 30 for (let layer of this._layers) { 31 if (layer.layer.options && values.includes(layer.layer.options.code) && !layer.overlay) { 32 hasBaselayer = true; 33 break; 34 } 35 } 36 37 if (!hasBaselayer) { 38 return false; 39 } 40 41 for (let layer of this._layers) { 42 if (layer.layer.options && !values.includes(layer.layer.options.code)) { 43 this._map.removeLayer(layer.layer); 44 } 45 } 46 for (let layer of this._layers) { 47 if (layer.layer.options && values.includes(layer.layer.options.code)) { 48 this._map.addLayer(layer.layer); 49 } 50 } 51 return true; 52 } 53 } 54 ); 55