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 );