Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(245)

Side by Side Diff: chrome/browser/resources/chromeos/braille_ime/braille_ime.js

Issue 271723002: Make Braille IME send space bar as an empty cell instead of letting propagate. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ime
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 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 'use strict'; 5 'use strict';
6 6
7 /** 7 /**
8 * @fileoverview Braille hardware keyboard input method. 8 * @fileoverview Braille hardware keyboard input method.
9 * 9 *
10 * This method is automatically enabled when a braille display is connected 10 * This method is automatically enabled when a braille display is connected
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 * @private {number} 86 * @private {number}
87 */ 87 */
88 accumulated_: 0, 88 accumulated_: 0,
89 89
90 /** 90 /**
91 * Maps key codes on a standard keyboard to the correspodning dots. 91 * Maps key codes on a standard keyboard to the correspodning dots.
92 * Keys on the 'home row' correspond to the keys on a Perkins-style keyboard. 92 * Keys on the 'home row' correspond to the keys on a Perkins-style keyboard.
93 * Note that the mapping below is arranged like the dots in a braille cell. 93 * Note that the mapping below is arranged like the dots in a braille cell.
94 * Only 6 dot input is supported. 94 * Only 6 dot input is supported.
95 * @private 95 * @private
96 * @const {Object.<string, string>} 96 * @const {Object.<string, number>}
97 */ 97 */
98 CODE_TO_DOT_: {'KeyF': 0x01, 'KeyJ': 0x08, 98 CODE_TO_DOT_: {'KeyF': 0x01, 'KeyJ': 0x08,
99 'KeyD': 0x02, 'KeyK': 0x10, 99 'KeyD': 0x02, 'KeyK': 0x10,
100 'KeyS': 0x04, 'KeyL': 0x20 }, 100 'KeyS': 0x04, 'KeyL': 0x20 ,
David Tseng 2014/05/07 18:05:54 nit: extra space before comma
101 'Space': 0},
David Tseng 2014/05/07 18:05:54 nit: space before }
101 102
102 /** 103 /**
103 * The current engine ID as set by {@code onActivate}, or the empty string if 104 * The current engine ID as set by {@code onActivate}, or the empty string if
104 * the IME is not active. 105 * the IME is not active.
105 * @type {string} 106 * @type {string}
106 * @private 107 * @private
107 */ 108 */
108 engineID_: '', 109 engineID_: '',
109 110
110 /** 111 /**
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 /** 195 /**
195 * Called by the system when this IME is active and a key event is generated. 196 * Called by the system when this IME is active and a key event is generated.
196 * @param {string} engineID Engine ID, should be 'braille'. 197 * @param {string} engineID Engine ID, should be 'braille'.
197 * @param {!ChromeKeyboardEvent} event The keyboard event. 198 * @param {!ChromeKeyboardEvent} event The keyboard event.
198 * @return {boolean} Whether the event was handled by this IME (true) or 199 * @return {boolean} Whether the event was handled by this IME (true) or
199 * should be allowed to propagate. 200 * should be allowed to propagate.
200 * @private 201 * @private
201 */ 202 */
202 onKeyEvent_: function(engineID, event) { 203 onKeyEvent_: function(engineID, event) {
203 this.log_('onKeyEvent', engineID + ', ' + JSON.stringify(event)); 204 this.log_('onKeyEvent', engineID + ', ' + JSON.stringify(event));
204 return this.processKey_(event.code, event.type); 205 return this.processKey_(event);
205 }, 206 },
206 207
207 /** 208 /**
208 * Called when chrome ends the current text input session. 209 * Called when chrome ends the current text input session.
209 * @param {string} engineID Engine ID, should be 'braille'. 210 * @param {string} engineID Engine ID, should be 'braille'.
210 * @private 211 * @private
211 */ 212 */
212 onReset_: function(engineID) { 213 onReset_: function(engineID) {
213 this.log_('onReset', engineID); 214 this.log_('onReset', engineID);
214 this.engineID_ = engineID; 215 this.engineID_ = engineID;
(...skipping 30 matching lines...) Expand all
245 log_: function(func, message) { 246 log_: function(func, message) {
246 if (func === 'onKeyEvent') { 247 if (func === 'onKeyEvent') {
247 return; 248 return;
248 } 249 }
249 if (this.DEBUG) { 250 if (this.DEBUG) {
250 console.log('BrailleIme.' + func + ': ' + message); 251 console.log('BrailleIme.' + func + ': ' + message);
251 } 252 }
252 }, 253 },
253 254
254 /** 255 /**
255 * Handles a querty key on the home row as a braille key. 256 * Handles a querty key on the home row as a braille key.
David Tseng 2014/05/07 18:05:54 nit: I think it's "qwerty"
256 * @param {string} code Key code. 257 * @param {!ChromeKeyboardEvent} event Keyboard event.
257 * @param {string} type Type of key event.
258 * @return {boolean} Whether the key event was handled or not. 258 * @return {boolean} Whether the key event was handled or not.
259 * @private 259 * @private
260 */ 260 */
261 processKey_: function(code, type) { 261 processKey_: function(event) {
262 if (!this.useStandardKeyboard_) { 262 if (!this.useStandardKeyboard_) {
263 return false; 263 return false;
264 } 264 }
265 var dot = this.CODE_TO_DOT_[code]; 265 var dot = this.CODE_TO_DOT_[event.code];
266 if (!dot) { 266 if (dot === undefined || event.altKey || event.ctrlKey || event.shiftKey ||
267 event.capsLock) {
267 this.pressed_ = 0; 268 this.pressed_ = 0;
268 this.accumulated_ = 0; 269 this.accumulated_ = 0;
269 return false; 270 return false;
270 } 271 }
271 if (type === 'keydown') { 272 if (event.type === 'keydown') {
272 this.pressed_ |= dot; 273 if (dot !== 0) {
273 this.accumulated_ |= this.pressed_; 274 this.pressed_ |= dot;
275 this.accumulated_ |= this.pressed_;
276 } else {
277 // Space cancels other dots.
David Tseng 2014/05/07 18:05:54 Just wondering about the behavior here. If I hold
278 this.pressed_ = this.accumulated_ = 0;
279 }
274 return true; 280 return true;
275 } else if (type == 'keyup') { 281 } else if (event.type === 'keyup') {
276 this.pressed_ &= ~dot; 282 this.pressed_ &= ~dot;
277 if (this.pressed_ == 0 && this.accumulated_ != 0) { 283 if (this.pressed_ === 0 && (this.accumulated_ !== 0 || dot === 0)) {
278 this.sendToChromeVox_({type: 'brailleDots', dots: this.accumulated_}); 284 this.sendToChromeVox_({type: 'brailleDots', dots: this.accumulated_});
279 this.accumulated_ = 0; 285 this.accumulated_ = 0;
280 } 286 }
281 return true; 287 return true;
282 } 288 }
283 return false; 289 return false;
284 }, 290 },
285 291
286 /** 292 /**
287 * Connects to the ChromeVox extension for message passing. 293 * Connects to the ChromeVox extension for message passing.
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 label: 'Use standard keyboard for braille', 410 label: 'Use standard keyboard for braille',
405 style: 'check', 411 style: 'check',
406 visible: true, 412 visible: true,
407 checked: this.useStandardKeyboard_, 413 checked: this.useStandardKeyboard_,
408 enabled: true 414 enabled: true
409 } 415 }
410 ] 416 ]
411 }); 417 });
412 } 418 }
413 }; 419 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698