nakarte

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

commit 06289c3790bd0fdddb4566e69c5fc135c1fe2a93
parent 6a81888228bd48450985e171274c8fec5e32f7b3
Author: Sergej Orlov <wladimirych@gmail.com>
Date:   Mon, 28 Nov 2016 22:15:05 +0300

[layers hotkeys] enable hotkeys explicitly

Diffstat:
Msrc/App.js | 8+++++---
Msrc/lib/leaflet.control.layers.hotkeys/control.Layers-hotkeys.js | 124+++++++++++++++++++++++++++++++++++++++++++++++--------------------------------
2 files changed, 79 insertions(+), 53 deletions(-)

diff --git a/src/App.js b/src/App.js @@ -7,7 +7,7 @@ import 'lib/leaflet.control.printPages/control' import 'lib/leaflet.control.caption/caption' import config from './config' import 'lib/leaflet.control.coordinates/coordinates'; -import 'lib/leaflet.control.layers.hotkeys/control.Layers-hotkeys'; +import enableLayersControlHotKeys from 'lib/leaflet.control.layers.hotkeys/control.Layers-hotkeys'; import 'lib/leaflet.hashState/Leaflet.Map'; import 'lib/leaflet.hashState/Leaflet.Control.Layers'; import fixAnimationBug from 'lib/leaflet.fixAnimationBug/leaflet.fixAnimationBug' @@ -64,9 +64,11 @@ function setUp() { let baseLayers = layers.getBaseMaps(); - const layersControl = L.control.layers(baseLayers, layers.getOverlays(), {collapsed: false}).addTo(map); map.addLayer(baseLayers['OpenStreetMap']); - layersControl.enableHashState('l'); + const layersControl = L.control.layers(baseLayers, layers.getOverlays(), {collapsed: false}) + .addTo(map) + .enableHashState('l'); + enableLayersControlHotKeys (layersControl); new L.Control.PrintPages({position: 'bottomleft'}).addTo(map); diff --git a/src/lib/leaflet.control.layers.hotkeys/control.Layers-hotkeys.js b/src/lib/leaflet.control.layers.hotkeys/control.Layers-hotkeys.js @@ -1,66 +1,90 @@ -import L from 'leaflet' +import L from 'leaflet'; import './style.css'; -const originalOnAdd = L.Control.Layers.prototype.onAdd; -const originalOnRemove = L.Control.Layers.prototype.onRemove; -const originalAddLayer = L.Control.Layers.prototype._addLayer; +function extendLayerName(name, layer) { + if (layer.options) { + const code = layer.options.code; + if (code && code.length === 1) { + name += `<span class="layers-control-hotkey">${code}</span>`; + } + } + return name; +} -L.Control.Layers.include({ - _addLayer: function(layer, name, overlay) { - if (layer.options) { - const code = layer.options.code; - if (code && code.length === 1) { - name += `<span class="layers-control-hotkey">${code}</span>`; - } - } - return originalAddLayer.call(this, layer, name, overlay); - }, +function enableHotKeys(control) { + const originalOnAdd = control.onAdd; + const originalOnRemove = control.onRemove; + const originalAddLayer = control._addLayer; - onAdd: function(map) { - var result = originalOnAdd.call(this, map); - L.DomEvent.on(document, 'keyup', this._onHotkeyUp, this); - L.DomEvent.on(document, 'keydown', this.onKeyDown, this); - return result; - }, + if (control._hotKeysEnabled) { + return control; + } - onRemove: function(map) { - L.DomEvent.off(document, 'keyup', this._onHotkeyUp, this); - L.DomEvent.off(document, 'keydown', this.onKeyDown, this); - originalOnRemove.call(this, map); + L.Util.extend(control, { + _hotKeysEnabled: true, - }, + _addLayer: function(layer, name, overlay) { + name = extendLayerName(name, layer); + return originalAddLayer.call(this, layer, name, overlay); + }, - onKeyDown: function(e) { - if (e.altKey || e.ctrlKey || e.shiftKey) { - return; - } - this._keyDown = e.keyCode; - }, + onAdd: function(map) { + var result = originalOnAdd.call(this, map); + this._addHotketEvents(); + return result; + }, - _onHotkeyUp: function(e) { - const pressedKey = this._keyDown; - this._keyDown = null; - const targetTag = e.target.tagName.toLowerCase(); - if (('input' === targetTag && e.target.type === 'text')|| 'textarea' === targetTag || pressedKey !== e.keyCode) { - return; - } - const key = String.fromCharCode(e.keyCode); - for (let layer of this._layers) { - let layerId = L.stamp(layer.layer); - if (layer.layer.options && layer.layer.options.code && layer.layer.options.code.toUpperCase() === key) { - const inputs = this._form.getElementsByTagName('input'); - for (let input of inputs) { - if (input.layerId === layerId) { - input.click(); - break; + onRemove: function(map) { + L.DomEvent.off(document, 'keyup', this._onHotkeyUp, this); + L.DomEvent.off(document, 'keydown', this.onKeyDown, this); + originalOnRemove.call(this, map); + + }, + + _addHotKetEvents: function() { + L.DomEvent.on(document, 'keyup', this._onHotkeyUp, this); + L.DomEvent.on(document, 'keydown', this.onKeyDown, this); + }, + + onKeyDown: function(e) { + if (e.altKey || e.ctrlKey || e.shiftKey) { + return; + } + this._keyDown = e.keyCode; + }, + + _onHotkeyUp: function(e) { + const pressedKey = this._keyDown; + this._keyDown = null; + const targetTag = e.target.tagName.toLowerCase(); + if (('input' === targetTag && e.target.type === 'text') || 'textarea' === targetTag || + pressedKey !== e.keyCode) { + return; + } + const key = String.fromCharCode(e.keyCode); + for (let layer of this._layers) { + let layerId = L.stamp(layer.layer); + if (layer.layer.options && layer.layer.options.code && layer.layer.options.code.toUpperCase() === key) { + const inputs = this._form.getElementsByTagName('input'); + for (let input of inputs) { + if (input.layerId === layerId) { + input.click(); + break; + } } + break; } - break; } } } - + ); + for (let layer of control._layers) { + layer.name = extendLayerName(layer.name, layer.layer); } -); + control._addHotKetEvents(); + control._update(); + return control; +} +export default enableHotKeys;