~keith-hughitt/helioviewer.org/2.0

« back to all changes in this revision

Viewing changes to src/Utility/KeyboardManager.js

  • Committer: Keith Hughitt
  • Date: 2010-04-17 16:54:20 UTC
  • Revision ID: keith.hughitt@nasa.gov-20100417165420-z3dpv7j9hul14785
Helioviewer.orgĀ 2.0.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**
 
2
 * @fileOverview
 
3
 * @author <a href="mailto:keith.hughitt@nasa.gov">Keith Hughitt</a>
 
4
 */
 
5
/*jslint browser: true, white: true, onevar: true, undef: true, nomen: false, eqeqeq: true, plusplus: true, 
 
6
bitwise: true, regexp: true, strict: true, newcap: true, immed: true, maxlen: 120, sub: true */
 
7
/*globals document, $, Class */
 
8
"use strict";
 
9
var KeyboardManager = Class.extend(
 
10
/** @lends KeyboardManager.prototype */
 
11
{
 
12
    /**
 
13
     * @constructs
 
14
     */
 
15
    init: function (controller) {
 
16
        this.controller = controller;
 
17
        this._initEventHandlers();
 
18
    },
 
19
    
 
20
 
 
21
    /**
 
22
     * @description Initialize keyboard-related event handlers.
 
23
     * 
 
24
     * TODO: use events or public method instead of zoomControl's (private) method.
 
25
     * 
 
26
     * TODO (2009/07/29): Webkit doesn't support keypress events for non alphanumeric
 
27
     * keys (http://ejohn.org/blog/keypress-in-safari-31/).
 
28
     * 
 
29
     * Instead of using keypress, it may be better to use keydown and a boolean to decide 
 
30
     * when vp is moving and when it should be stationary.
 
31
     * 
 
32
     * Simple implementation:
 
33
     *     vp.movingUp (Boolean), vp.movingDown (Boolean), vp.movingLeft (Boolean), vp.movingRight (Boolean)
 
34
     *     
 
35
     * From there it is also simple to add support for diagonal movement, etc.
 
36
     */
 
37
    _initEventHandlers: function () {
 
38
        var onKeyPress, self = this;
 
39
 
 
40
        /**
 
41
         * @description Sets up keyboard shortcuts
 
42
         * @TODO 01/04/2010: Use something like js-hotkeys (http://code.google.com/p/js-hotkeys/)
 
43
         *                   to allow for more advanced keyboard navigation such as "cntl + z" to undo, etc
 
44
         * TODO 01/16/2009: Create buttons for mouse-coord and detail toggles
 
45
         */
 
46
        onKeyPress = function (e) {
 
47
            var key, character, vp = self.controller.viewport;
 
48
            
 
49
            // Letters use Event.which, while arrows, etc. use Event.keyCode
 
50
            if (e.keyCode) {
 
51
                key = e.keyCode;
 
52
            }
 
53
            else if (e.which) {
 
54
                key = e.which;
 
55
            }
 
56
            
 
57
            // Get character pressed (letters, etc)
 
58
            character = String.fromCharCode(key);
 
59
 
 
60
            // Arrow keys
 
61
            if (key === 37 || key === 38 || key === 39 || key === 40) {
 
62
                vp.startMoving();
 
63
                vp.moveCounter += 1; // Threshold
 
64
                //if ((vp.moveCounter % vp.imageUpdateThrottle) !== 0)
 
65
                //    return;
 
66
                vp.moveCounter = vp.moveCounter % vp.tileUpdateThrottle;
 
67
                
 
68
                //Right-arrow
 
69
                if (key === 37) {
 
70
                    vp.moveBy(8, 0);
 
71
                }
 
72
                    
 
73
                //Up-arrow
 
74
                else if (key === 38) {
 
75
                    vp.moveBy(0, 8);
 
76
                }
 
77
                    
 
78
                //Left-arrow
 
79
                else if (key === 39) {
 
80
                    vp.moveBy(-8, 0);
 
81
                }
 
82
                    
 
83
                //Down-arrow
 
84
                else if (key === 40) {
 
85
                    vp.moveBy(0, -8);
 
86
                }
 
87
                
 
88
                vp.endMoving();
 
89
                return false;
 
90
            }        
 
91
 
 
92
            else if (character === "c") {
 
93
                $("#center-button").click();
 
94
            }
 
95
            else if (character === "m") {
 
96
                vp.toggleMouseCoords();
 
97
            }
 
98
            else if (character === "-" || character === "_") {
 
99
                $("#zoomControlZoomOut").click();
 
100
            }
 
101
            else if (character === "=" || character === "+") {
 
102
                $("#zoomControlZoomIn").click();
 
103
            }
 
104
            else if (character === "d") {
 
105
                self.controller.eventLayers.toggleLabels();
 
106
            }
 
107
            else if (character === "f") {
 
108
                $("#fullscreen-btn").click();
 
109
            }
 
110
            else if (character === ",") {
 
111
                $("#timeBackBtn").click();
 
112
            }
 
113
            else if (character === ".") {
 
114
                $("#timeForwardBtn").click();
 
115
            }
 
116
        };
 
117
        
 
118
        // Event-handlers
 
119
        $(document).keypress(function (e) {
 
120
            if (e.target.tagName !== "INPUT") {
 
121
                onKeyPress(e);
 
122
            }
 
123
        });     
 
124
    }
 
125
});