nakarte

Source code of https://map.sikmir.ru (fork)
git clone git://git.sikmir.ru/nakarte
Log | Files | Refs | LICENSE

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