summaryrefslogtreecommitdiffstats
path: root/js/gui/keyboardshortcuts.js
blob: 3062e6dac227b091771e3b35e8c391571f741f51 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/**
 * ownCloud - News
 *
 * This file is licensed under the Affero General Public License version 3 or
 * later. See the COPYING file.
 *
 * @author Bernhard Posselt <dev@bernhard-posselt.com>
 * @copyright Bernhard Posselt 2014
 */

/**
 * Code in here acts only as a click shortcut mechanism. That's why its not
 * being put into a directive since it has to be tested with protractor
 * anyways and theres no benefit from wiring it into the angular app
 */
(function (document, $) {
    'use strict';

    $(document).keyup(function (event) {
        var keyCode,
            noInputFocused,
            noModifierKey,
            scrollArea,
            jumpToNextItem,
            jumpToPreviousItem,
            toggleStar,
            toggleUnread,
            expandItem,
            openLink,
            getActiveItem;

        keyCode = event.keyCode;
        scrollArea = $('#app-content');

        noInputFocused = function (element) {
            return !(
                element.is('input')
                && element.is('select')
                && element.is('textarea')
                && element.is('checkbox')
            );
        };

        noModifierKey = function (event) {
            return !(
                event.shiftKey
                || event.altKey
                || event.ctrlKey
                || event.metaKey
            );
        };

        if (noInputFocused($(':focus')) && noModifierKey(event)) {

            // j, n, right arrow
            if ([74, 78, 34].indexOf(keyCode) >= 0) {

                event.preventDefault();
                jumpToNextItem(scrollArea);

            // k, p, left arrow
            } else if ([75, 80, 37].indexOf(keyCode) >= 0) {

                event.preventDefault();
                jumpToPreviousItem(scrollArea);

            // u
            } else if ([85].indexOf(keyCode) >= 0) {

                event.preventDefault();
                toggleUnread(scrollArea);

            // e
            } else if ([69].indexOf(keyCode) >= 0) {

                event.preventDefault();
                expandItem(scrollArea);

            // s, i, l
            } else if ([73, 83, 76].indexOf(keyCode) >= 0) {

                event.preventDefault();
                toggleStar(scrollArea);

            // h
            } else if ([72].indexOf(keyCode) >= 0) {

                event.preventDefault();
                toggleStar(scrollArea);
                jumpToNextItem(scrollArea);

            // o
            } else if ([79].indexOf(keyCode) >= 0) {

                event.preventDefault();
                openLink(scrollArea);

            }

        }
    });

}(document, jQuery));