| 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 |