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

Side by Side Diff: chrome/browser/resources/chromeos/switch_access/options.js

Issue 2939133004: Added to options page to let users change keyboard mappings. (Closed)
Patch Set: Fixed merge conflict and formatting error Created 3 years, 6 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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 * Alias for document.getElementById. 6 * Alias for document.getElementById.
7 * 7 *
8 * @param {string} id 8 * @param {string} id
9 * @return {Element} 9 * @return {Element}
10 */ 10 */
11 let $ = function(id) { 11 let $ = function(id) {
12 // eslint-disable-next-line no-restricted-properties 12 // eslint-disable-next-line no-restricted-properties
13 return document.getElementById(id); 13 return document.getElementById(id);
14 }; 14 };
15 15
16 /** 16 /**
17 * Class to manage the options page. 17 * Class to manage the options page.
18 * 18 *
19 * @constructor 19 * @constructor
20 */ 20 */
21 function SwitchAccessOptions() { 21 function SwitchAccessOptions() {
22 let background = chrome.extension.getBackgroundPage(); 22 let background = chrome.extension.getBackgroundPage();
23 23
24 /** 24 /**
25 * User preferences. 25 * SwitchAccess reference.
26 * 26 *
27 * @type {SwitchAccessPrefs} 27 * @private {SwitchAccessInterface}
28 */ 28 */
29 this.switchAccessPrefs_ = background.switchAccess.switchAccessPrefs; 29 this.switchAccess_ = background.switchAccess;
30 30
31 this.init_(); 31 this.init_();
32 document.addEventListener('change', this.handleInputChange_.bind(this)); 32 document.addEventListener('change', this.handleInputChange_.bind(this));
33 background.document.addEventListener( 33 background.document.addEventListener(
34 'prefsUpdate', this.handlePrefsUpdate_.bind(this)); 34 'prefsUpdate', this.handlePrefsUpdate_.bind(this));
35 } 35 }
36 36
37 SwitchAccessOptions.prototype = { 37 SwitchAccessOptions.prototype = {
38 /** 38 /**
39 * Initialize the options page by setting all elements representing a user 39 * Initialize the options page by setting all elements representing a user
40 * preference to show the correct value. 40 * preference to show the correct value.
41 * 41 *
42 * @private 42 * @private
43 */ 43 */
44 init_: function() { 44 init_: function() {
45 $('enableAutoScan').checked = 45 $('enableAutoScan').checked =
46 this.switchAccessPrefs_.getBooleanPref('enableAutoScan'); 46 this.switchAccess_.getBooleanPref('enableAutoScan');
47 $('autoScanTime').value = 47 $('autoScanTime').value =
48 this.switchAccessPrefs_.getNumberPref('autoScanTime') / 1000; 48 this.switchAccess_.getNumberPref('autoScanTime') / 1000;
49
50 for (let command of this.switchAccess_.getCommands()) {
51 $(command).value =
52 String.fromCharCode(this.switchAccess_.getNumberPref(command));
53 }
49 }, 54 },
50 55
51 /** 56 /**
52 * Handle a change by the user to an element representing a user preference. 57 * Handle a change by the user to an element representing a user preference.
53 * 58 *
54 * @param {!Event} event 59 * @param {!Event} event
55 * @private 60 * @private
56 */ 61 */
57 handleInputChange_: function(event) { 62 handleInputChange_: function(event) {
58 let input = event.target; 63 let input = event.target;
59 switch (input.id) { 64 switch (input.id) {
60 case 'enableAutoScan': 65 case 'enableAutoScan':
61 this.switchAccessPrefs_.setPref(input.id, input.checked); 66 this.switchAccess_.setPref(input.id, input.checked);
62 break; 67 break;
63 case 'autoScanTime': 68 case 'autoScanTime':
64 let oldVal = this.switchAccessPrefs_.getNumberPref(input.id); 69 let oldVal = this.switchAccess_.getNumberPref(input.id);
65 let val = Number(input.value) * 1000; 70 let val = Number(input.value) * 1000;
66 let min = Number(input.min) * 1000; 71 let min = Number(input.min) * 1000;
67 if (this.isValidInput_(val, oldVal, min)) { 72 if (this.isValidScanTimeInput_(val, oldVal, min)) {
68 input.value = Number(input.value); 73 input.value = Number(input.value);
69 this.switchAccessPrefs_.setPref(input.id, val); 74 this.switchAccess_.setPref(input.id, val);
70 } else { 75 } else {
71 input.value = oldVal; 76 input.value = oldVal;
72 } 77 }
73 break; 78 break;
79 default:
80 if (this.switchAccess_.getCommands().includes(input.id)) {
81 let keyCode = input.value.toUpperCase().charCodeAt(0);
82 if (this.isValidKeyCode_(keyCode)) {
83 input.value = input.value.toUpperCase();
84 this.switchAccess_.setPref(input.id, keyCode);
85 } else {
86 let oldKeyCode = this.switchAccess_.getNumberPref(input.id);
87 input.value = String.fromCharCode(oldKeyCode);
88 }
89 }
74 } 90 }
75 }, 91 },
76 92
77 /** 93 /**
94 * Return true if |keyCode| is a letter or number, and if it is not already
95 * being used.
96 *
97 * @param {number} keyCode
98 * @return {boolean}
99 */
100 isValidKeyCode_: function(keyCode) {
101 return ((keyCode >= '0'.charCodeAt(0) && keyCode <= '9'.charCodeAt(0)) ||
102 (keyCode >= 'A'.charCodeAt(0) && keyCode <= 'Z'.charCodeAt(0))) &&
103 !this.switchAccess_.keyCodeIsUsed(keyCode);
104 },
105
106 /**
78 * Return true if the input is a valid autoScanTime input. Otherwise, return 107 * Return true if the input is a valid autoScanTime input. Otherwise, return
79 * false. 108 * false.
80 * 109 *
81 * @param {number} value 110 * @param {number} value
82 * @param {number} oldValue 111 * @param {number} oldValue
83 * @param {number} min 112 * @param {number} min
84 * @return {boolean} 113 * @return {boolean}
85 */ 114 */
86 isValidInput_: function(value, oldValue, min) { 115 isValidScanTimeInput_: function(value, oldValue, min) {
87 return (value !== oldValue) && (value >= min); 116 return (value !== oldValue) && (value >= min);
88 }, 117 },
89 118
90 /** 119 /**
91 * Handle a change in user preferences. 120 * Handle a change in user preferences.
92 * 121 *
93 * @param {!Event} event 122 * @param {!Event} event
94 * @private 123 * @private
95 */ 124 */
96 handlePrefsUpdate_: function(event) { 125 handlePrefsUpdate_: function(event) {
97 let updatedPrefs = event.detail; 126 let updatedPrefs = event.detail;
98 for (let key of Object.keys(updatedPrefs)) { 127 for (let key of Object.keys(updatedPrefs)) {
99 switch (key) { 128 switch (key) {
100 case 'enableAutoScan': 129 case 'enableAutoScan':
101 $(key).checked = updatedPrefs[key]; 130 $(key).checked = updatedPrefs[key];
102 break; 131 break;
103 case 'autoScanTime': 132 case 'autoScanTime':
104 $(key).value = updatedPrefs[key] / 1000; 133 $(key).value = updatedPrefs[key] / 1000;
105 break; 134 break;
135 default:
136 if (this.switchAccess_.getCommands().includes(key))
137 $(key).value = String.fromCharCode(updatedPrefs[key]);
106 } 138 }
107 } 139 }
108 } 140 }
109 }; 141 };
110 142
111 document.addEventListener('DOMContentLoaded', function() { 143 document.addEventListener('DOMContentLoaded', function() {
112 new SwitchAccessOptions(); 144 new SwitchAccessOptions();
113 }); 145 });
OLDNEW
« no previous file with comments | « chrome/browser/resources/chromeos/switch_access/options.html ('k') | chrome/browser/resources/chromeos/switch_access/prefs.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698