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

Reply via email to