OLD | NEW |
---|---|
1 /* Copyright (c) 2014 The Chromium Authors. All rights reserved. | 1 /* Copyright (c) 2014 The Chromium Authors. All rights reserved. |
2 * Use of this source code is governed by a BSD-style license that can be | 2 * Use of this source code is governed by a BSD-style license that can be |
3 * found in the LICENSE file. | 3 * found in the LICENSE file. |
4 */ | 4 */ |
5 | 5 |
6 /** | |
7 * @param {string} eventName | |
8 * @param {number|undefined} space | |
Jamie
2015/01/30 23:25:09
{number=} is a simpler annotation, though you shou
Łukasz Anforowicz
2015/01/31 00:44:49
Done. Renamed to "opt_space" as well. (are you s
Jamie
2015/01/31 01:01:56
opt_ as a prefix for optional parameters is a comm
| |
9 * @return {string} | |
10 */ | |
11 function JsonifyJavascriptKeyEvent(event, eventName, space) { | |
Jamie
2015/01/30 23:25:09
Function names in JS don't start with a capital le
Łukasz Anforowicz
2015/01/31 00:44:49
Done.
| |
12 return "JavaScript '" + eventName + "' event = " + JSON.stringify( | |
13 event, | |
14 ['type', 'alt', 'shift', 'control', 'meta', 'charCode', 'keyCode', | |
15 'keyIdentifier', 'repeat'], | |
16 space); | |
17 }; | |
18 | |
19 /** | |
20 * @param {ChordTracker} jsChordTracker | |
21 * @param {Event} event | |
22 * @return {void} | |
23 */ | |
24 function HandleJavascriptKeyDownEvent(jsChordTracker, event) { | |
25 AppendToTextLog(JsonifyJavascriptKeyEvent(event, 'keydown', undefined)); | |
26 jsChordTracker.addKeyDownEvent( | |
27 event.keyCode, JsonifyJavascriptKeyEvent(event, 'keydown', 2)); | |
28 } | |
29 | |
30 /** | |
31 * @param {ChordTracker} jsChordTracker | |
32 * @param {Event} event | |
33 * @return {void} | |
34 */ | |
35 function HandleJavascriptKeyUpEvent(jsChordTracker, event) { | |
36 AppendToTextLog(JsonifyJavascriptKeyEvent(event, 'keyup', undefined)); | |
37 jsChordTracker.addKeyUpEvent( | |
38 event.keyCode, JsonifyJavascriptKeyEvent(event, 'keyup', 2)); | |
39 } | |
40 | |
41 /** @constructor */ | |
42 var PNaClEvent = function(){ | |
Jamie
2015/01/30 23:25:09
Nit: Space after ()
Łukasz Anforowicz
2015/01/31 00:44:49
Done.
| |
43 /** @type {string} */ | |
44 this.type = ""; | |
45 /** @type {number} */ | |
46 this.modifiers = 0; | |
47 /** @type {number} */ | |
48 this.keyCode = 0; | |
49 /** @type {string|undefined} */ | |
50 this.characterText = undefined; | |
51 /** @type {string} */ | |
52 this.code = ""; | |
53 }; | |
54 | |
55 /** | |
56 * @param {PNaClEvent} event | |
57 * @param {number|undefined} space | |
58 * @return {string} | |
59 */ | |
60 function JsonifyPnaclKeyboardInputEvent(event, space) { | |
61 return "PNaCl KeyboardInputEvent = " + JSON.stringify( | |
62 event, | |
63 ['type', 'modifiers', 'keyCode', 'characterText', 'code'], | |
64 space); | |
65 }; | |
66 | |
67 /** | |
68 * @param {ChordTracker} pnaclChordTracker | |
69 * @param {Event} event | |
70 * @return {void} | |
71 */ | |
72 function HandlePNaclMessage(pnaclChordTracker, event) { | |
73 /** @type {PNaClEvent} */ | |
74 var pnaclEvent = event.data; | |
Jamie
2015/01/30 23:25:09
Nit: Since this is effectively a cast (insofar as
Łukasz Anforowicz
2015/01/31 00:44:49
Done.
| |
75 | |
76 AppendToTextLog(JsonifyPnaclKeyboardInputEvent(pnaclEvent, undefined)); | |
77 var title = JsonifyPnaclKeyboardInputEvent(pnaclEvent, 2); | |
78 if (pnaclEvent.type == "KEYDOWN") { | |
79 pnaclChordTracker.addKeyDownEvent(pnaclEvent.keyCode, title); | |
80 } | |
81 if (pnaclEvent.type == "KEYUP") { | |
82 pnaclChordTracker.addKeyUpEvent(pnaclEvent.keyCode, title); | |
83 } | |
84 if (pnaclEvent.type == "CHAR") { | |
85 pnaclChordTracker.addCharEvent(pnaclEvent.characterText, title); | |
86 } | |
87 } | |
88 | |
89 /** | |
90 * @param {string} str | |
91 * @return {void} | |
92 */ | |
93 function AppendToTextLog(str) { | |
94 var textLog = document.getElementById('text-log'); | |
95 var div = document.createElement('div'); | |
96 div.innerText = str; | |
97 textLog.appendChild(div); | |
98 } | |
99 | |
6 function onLoad() { | 100 function onLoad() { |
7 var parentDiv = document.getElementById('key-log'); | 101 // Start listening to Javascript keyup/keydown events. |
8 var chordTracker = new ChordTracker(parentDiv); | 102 var jsLog = document.getElementById('javascript-log'); |
103 var jsChordTracker = new ChordTracker(jsLog); | |
Jamie
2015/01/30 23:25:09
I think two chord trackers is probably overkill. B
Łukasz Anforowicz
2015/01/31 00:44:49
I switched to using RequestFilteringInputEvents, b
Jamie
2015/01/31 01:01:56
I just tested with the Chromoting app and see the
| |
9 document.body.addEventListener( | 104 document.body.addEventListener( |
10 'keydown', chordTracker.addKeyEvent.bind(chordTracker), false); | 105 'keydown', |
106 function (event) { | |
107 HandleJavascriptKeyDownEvent(jsChordTracker, event); | |
108 }, | |
109 false); | |
11 document.body.addEventListener( | 110 document.body.addEventListener( |
12 'keyup', chordTracker.addKeyEvent.bind(chordTracker), false); | 111 'keyup', |
112 function (event) { | |
113 HandleJavascriptKeyUpEvent(jsChordTracker, event); | |
114 }, | |
115 false); | |
116 | |
117 // Start listening to PNaCl keyboard input events. | |
118 var pnaclLog = document.getElementById('pnacl-log'); | |
119 var pnaclChordTracker = new ChordTracker(pnaclLog); | |
120 document.getElementById('pnacl-listener').addEventListener( | |
121 'message', | |
122 function (message) { | |
123 HandlePNaclMessage(pnaclChordTracker, message); | |
124 }, | |
125 true); | |
126 | |
127 // Start listening to generic, source-agnostic events. | |
13 window.addEventListener( | 128 window.addEventListener( |
14 'blur', chordTracker.releaseAllKeys.bind(chordTracker), false); | 129 'blur', |
130 function () { | |
131 jsChordTracker.releaseAllKeys(); | |
132 pnaclChordTracker.releaseAllKeys(); | |
133 }, | |
134 false); | |
15 document.getElementById('clear-log').addEventListener( | 135 document.getElementById('clear-log').addEventListener( |
16 'click', function() { parentDiv.innerText = ''; }, false); | 136 'click', |
137 function() { | |
138 jsLog.innerText = ''; | |
139 pnaclLog.innerText = ''; | |
140 document.getElementById('text-log').innerText = ''; | |
141 }, | |
142 false); | |
17 } | 143 } |
18 | 144 |
19 window.addEventListener('load', onLoad, false); | 145 window.addEventListener('load', onLoad, false); |
OLD | NEW |