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 /** | 6 function onLoad() { |
7 * @param {string} eventName | 7 var jsLog = document.getElementById('javascript-log'); |
8 * @param {number=} opt_space | 8 var pnaclLog = document.getElementById('pnacl-log'); |
9 * @return {string} | 9 var pnaclPlugin = document.getElementById('pnacl-plugin'); |
10 */ | 10 var pnaclListener = document.getElementById('pnacl-listener'); |
11 function jsonifyJavascriptKeyEvent(event, eventName, opt_space) { | 11 var textLog = document.getElementById('text-log'); |
12 return "JavaScript '" + eventName + "' event = " + JSON.stringify( | 12 var textLogContainer = document.getElementById('text-log-container'); |
13 event, | |
14 ['type', 'alt', 'shift', 'control', 'meta', 'charCode', 'keyCode', | |
15 'keyIdentifier', 'repeat'], | |
16 opt_space); | |
17 }; | |
18 | 13 |
19 /** | 14 var eventListeners = new EventListeners(jsLog, pnaclLog, textLog, |
20 * @param {ChordTracker} jsChordTracker | 15 pnaclPlugin, pnaclListener); |
21 * @param {Event} event | 16 eventListeners.activate(); |
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 | 17 |
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() { | |
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 var pnaclEvent = /** @type {PNaClEvent} */ (event.data); | |
74 | |
75 appendToTextLog(jsonifyPnaclKeyboardInputEvent(pnaclEvent, undefined)); | |
76 var title = jsonifyPnaclKeyboardInputEvent(pnaclEvent, 2); | |
77 if (pnaclEvent.type == "KEYDOWN") { | |
78 pnaclChordTracker.addKeyDownEvent(pnaclEvent.keyCode, title); | |
79 } | |
80 if (pnaclEvent.type == "KEYUP") { | |
81 pnaclChordTracker.addKeyUpEvent(pnaclEvent.keyCode, title); | |
82 } | |
83 if (pnaclEvent.type == "CHAR") { | |
84 pnaclChordTracker.addCharEvent(pnaclEvent.characterText, title); | |
85 } | |
86 } | |
87 | |
88 /** | |
89 * @param {string} str | |
90 * @return {void} | |
91 */ | |
92 function appendToTextLog(str) { | |
93 var textLog = document.getElementById('text-log'); | |
94 var div = document.createElement('div'); | |
95 div.innerText = str; | |
96 textLog.appendChild(div); | |
97 } | |
98 | |
99 function onLoad() { | |
100 // Start listening to Javascript keyup/keydown events. | |
101 var jsLog = document.getElementById('javascript-log'); | |
102 var jsChordTracker = new ChordTracker(jsLog); | |
103 document.body.addEventListener( | |
104 'keydown', | |
105 function (event) { | |
106 handleJavascriptKeyDownEvent(jsChordTracker, event); | |
107 }, | |
108 false); | |
109 document.body.addEventListener( | |
110 'keyup', | |
111 function (event) { | |
112 handleJavascriptKeyUpEvent(jsChordTracker, event); | |
113 }, | |
114 false); | |
115 | |
116 // Start listening to PNaCl keyboard input events. | |
117 var pnaclLog = document.getElementById('pnacl-log'); | |
118 var pnaclChordTracker = new ChordTracker(pnaclLog); | |
119 document.getElementById('pnacl-listener').addEventListener( | |
120 'message', | |
121 function (message) { | |
122 handlePNaclMessage(pnaclChordTracker, message); | |
123 }, | |
124 true); | |
125 | |
126 // Start listening to generic, source-agnostic events. | |
127 window.addEventListener( | |
128 'blur', | |
129 function () { | |
130 jsChordTracker.releaseAllKeys(); | |
131 pnaclChordTracker.releaseAllKeys(); | |
132 }, | |
133 false); | |
134 document.getElementById('clear-log').addEventListener( | 18 document.getElementById('clear-log').addEventListener( |
135 'click', | 19 'click', |
136 function() { | 20 function() { |
137 jsLog.innerText = ''; | 21 jsLog.innerText = ''; |
138 pnaclLog.innerText = ''; | 22 pnaclLog.innerText = ''; |
139 document.getElementById('text-log').innerText = ''; | 23 textLog.innerText = ''; |
| 24 }, |
| 25 false); |
| 26 document.getElementById('show-log').addEventListener( |
| 27 'click', |
| 28 function() { |
| 29 eventListeners.deactivate(); |
| 30 textLogContainer.hidden = false; |
| 31 |
| 32 var selection = window.getSelection(); |
| 33 var range = document.createRange(); |
| 34 range.selectNodeContents(textLog); |
| 35 selection.removeAllRanges(); |
| 36 selection.addRange(range); |
| 37 }, |
| 38 false); |
| 39 document.getElementById('hide-log').addEventListener( |
| 40 'click', |
| 41 function() { |
| 42 eventListeners.activate(); |
| 43 textLogContainer.hidden = true; |
140 }, | 44 }, |
141 false); | 45 false); |
142 } | 46 } |
143 | 47 |
144 window.addEventListener('load', onLoad, false); | 48 window.addEventListener('load', onLoad, false); |
OLD | NEW |