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