nakarte

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

leaflet.hashState.js (1545B)


      1 import L from 'leaflet';
      2 import {hashState} from './hashState';
      3 import * as logging from '~/lib/logging';
      4 
      5 L.Mixin.HashState = {
      6     enableHashState: function(key, defaultInitialState = null) {
      7         this._hashStateKey = key;
      8         const eventSource = this.stateChangeEventsSource ? this[this.stateChangeEventsSource] : this;
      9 
     10         // setup event listeners
     11         if (this.stateChangeEvents) {
     12             this.stateChangeEvents.forEach((event) => {
     13                     eventSource.on(event, this._onControlStateChanged, this);
     14                 }
     15             );
     16         }
     17 
     18         hashState.addEventListener(key, (state) => this._onExternalStateChanged(state));
     19 
     20         // initialize control state from hash
     21 
     22         const state = hashState.getState(key) || defaultInitialState;
     23         if (!state || !this.unserializeState(state)) {
     24             this.unserializeState(defaultInitialState);
     25         }
     26         hashState.updateState(this._hashStateKey, this.serializeState());
     27         return this;
     28     },
     29 
     30     _onControlStateChanged: function() {
     31         const state = this.serializeState();
     32         hashState.updateState(this._hashStateKey, state);
     33     },
     34 
     35     _onExternalStateChanged: function(state) {
     36         if (!this.unserializeState(state)) { // state from hash is invalid, update hash from component state
     37             logging.captureMessage(`Invalid state in hash string (key "${this._hashStateKey}")`);
     38             hashState.updateState(this._hashStateKey, this.serializeState());
     39         }
     40     }
     41 
     42     // TODO: disableHashState
     43 };