nakarte

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

hash-state.js (1959B)


      1 import L from 'leaflet';
      2 import '~/lib/leaflet.hashState/leaflet.hashState';
      3 
      4 L.Control.JNX.include(L.Mixin.HashState);
      5 L.Control.JNX.include({
      6         stateChangeEvents: ['selectionchange'],
      7 
      8         serializeState: function() {
      9             let state;
     10             if (this._selector) {
     11                 const bounds = this._selector.getBounds();
     12                 state = [
     13                     bounds.getSouth().toFixed(5),
     14                     bounds.getWest().toFixed(5),
     15                     bounds.getNorth().toFixed(5),
     16                     bounds.getEast().toFixed(5)
     17                 ];
     18             }
     19             return state;
     20         },
     21 
     22         unserializeState: function(values) {
     23             function validateFloat(value) {
     24                 value = parseFloat(value);
     25                 if (isNaN(value)) {
     26                     throw new Error('INVALID VALUE');
     27                 }
     28                 return value;
     29             }
     30 
     31             function validateFloatRange(value, min, max) {
     32                 value = validateFloat(value);
     33                 if (value < min || value > max) {
     34                     throw new Error('INVALID VALUE');
     35                 }
     36                 return value;
     37             }
     38 
     39             if (values && values.length === 4) {
     40                 let south, west, north, east;
     41                 try {
     42                         south = validateFloatRange(values[0], -86, 86);
     43                         west = validateFloat(values[1]);
     44                         north = validateFloatRange(values[2], -86, 86);
     45                         east = validateFloat(values[3]);
     46                 } catch (e) {
     47                     if (e.message === 'INVALID VALUE') {
     48                         return false;
     49                     }
     50                     throw e;
     51                 }
     52                 this.removeSelector();
     53                 this.addSelector([[south, west], [north, east]]);
     54                 return true;
     55             }
     56             return false;
     57         }
     58     }
     59 );