loleaflet/src/map/handler/Map.Keyboard.js | 102 +++++++++++++++++++++++------- 1 file changed, 79 insertions(+), 23 deletions(-)
New commits: commit 4f62d67b80341a4288db89cb20b7d088133390a9 Author: Mihai Varga <mihai.va...@collabora.com> Date: Fri Jul 24 17:17:49 2015 +0300 loleaflet: keyboard navigation now also fires 'scrollby' event diff --git a/loleaflet/src/map/handler/Map.Keyboard.js b/loleaflet/src/map/handler/Map.Keyboard.js index 6078829..f1454b5 100644 --- a/loleaflet/src/map/handler/Map.Keyboard.js +++ b/loleaflet/src/map/handler/Map.Keyboard.js @@ -3,7 +3,9 @@ */ L.Map.mergeOptions({ - keyboard: true + keyboard: true, + keyboardPanOffset: 20, + keyboardZoomOffset: 1 }); L.Map.Keyboard = L.Handler.extend({ @@ -93,8 +95,19 @@ L.Map.Keyboard = L.Handler.extend({ 46 : true // delete }, + navigationKeyCodes: { + left: [37], + right: [39], + down: [40], + up: [38], + zoomIn: [187, 107, 61, 171], + zoomOut: [189, 109, 173] + }, + initialize: function (map) { this._map = map; + this._setPanOffset(map.options.keyboardPanOffset); + this._setZoomOffset(map.options.keyboardZoomOffset); }, addHooks: function () { @@ -109,6 +122,38 @@ L.Map.Keyboard = L.Handler.extend({ this._map.on('keydown keyup keypress', this._onKeyDown, this); }, + _setPanOffset: function (pan) { + var keys = this._panKeys = {}, + codes = this.navigationKeyCodes, + i, len; + + for (i = 0, len = codes.left.length; i < len; i++) { + keys[codes.left[i]] = [-1 * pan, 0]; + } + for (i = 0, len = codes.right.length; i < len; i++) { + keys[codes.right[i]] = [pan, 0]; + } + for (i = 0, len = codes.down.length; i < len; i++) { + keys[codes.down[i]] = [0, pan]; + } + for (i = 0, len = codes.up.length; i < len; i++) { + keys[codes.up[i]] = [0, -1 * pan]; + } + }, + + _setZoomOffset: function (zoom) { + var keys = this._zoomKeys = {}, + codes = this.navigationKeyCodes, + i, len; + + for (i = 0, len = codes.zoomIn.length; i < len; i++) { + keys[codes.zoomIn[i]] = zoom; + } + for (i = 0, len = codes.zoomOut.length; i < len; i++) { + keys[codes.zoomOut[i]] = -zoom; + } + }, + _onMouseDown: function () { if (this._map._docLayer._permission === 'edit') { return; @@ -131,30 +176,41 @@ L.Map.Keyboard = L.Handler.extend({ return; } - if (docLayer._permission !== 'edit') { - return; - } - - var charCode = e.originalEvent.charCode; - var keyCode = e.originalEvent.keyCode; - if (e.type === 'keydown' && this.handleOnKeyDown[keyCode] && charCode === 0) { - docLayer._postKeyboardEvent('input', charCode, this._toUNOKeyCode(keyCode)); - } - else if (e.type === 'keypress' && - (!this.handleOnKeyDown[keyCode] || charCode !== 0)) { - if (charCode === keyCode && charCode !== 13) { - // Chrome sets keyCode = charCode for printable keys - // while LO requires it to be 0 - keyCode = 0; + if (docLayer._permission === 'edit') { + var charCode = e.originalEvent.charCode; + var keyCode = e.originalEvent.keyCode; + if (e.type === 'keydown' && this.handleOnKeyDown[keyCode] && charCode === 0) { + docLayer._postKeyboardEvent('input', charCode, this._toUNOKeyCode(keyCode)); + } + else if (e.type === 'keypress' && + (!this.handleOnKeyDown[keyCode] || charCode !== 0)) { + if (charCode === keyCode && charCode !== 13) { + // Chrome sets keyCode = charCode for printable keys + // while LO requires it to be 0 + keyCode = 0; + } + docLayer._postKeyboardEvent('input', charCode, this._toUNOKeyCode(keyCode)); + } + else if (e.type === 'keyup') { + docLayer._postKeyboardEvent('up', charCode, this._toUNOKeyCode(keyCode)); + } + if (keyCode === 9) { + // tab would change focus to other DOM elements + e.originalEvent.preventDefault(); } - docLayer._postKeyboardEvent('input', charCode, this._toUNOKeyCode(keyCode)); - } - else if (e.type === 'keyup') { - docLayer._postKeyboardEvent('up', charCode, this._toUNOKeyCode(keyCode)); } - if (keyCode === 9) { - // tab would change focus to other DOM elements - e.originalEvent.preventDefault(); + else if (e.type === 'keydown') { + var key = e.originalEvent.keyCode; + var map = this._map; + if (key in this._panKeys) { + if (map._panAnim && map._panAnim._inProgress) { + return; + } + map.fire('scrollby', {x: this._panKeys[key][0], y: this._panKeys[key][1]}); + } + else if (key in this._zoomKeys) { + map.setZoom(map.getZoom() + (e.shiftKey ? 3 : 1) * this._zoomKeys[key]); + } } L.DomEvent.stopPropagation(e.originalEvent); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits