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

Side by Side Diff: chrome/browser/resources/options/chromeos_language_options.js

Issue 3041025: Implement "Add" and "Remove" buttons in Language and Input page. (Closed)
Patch Set: link-button Created 10 years, 4 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 (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 cr.define('options', function() { 5 cr.define('options', function() {
6 6
7 var OptionsPage = options.OptionsPage; 7 const OptionsPage = options.OptionsPage;
8 const AddLanguageOverlay = options.language.AddLanguageOverlay;
9 const LanguageList = options.language.LanguageList;
8 10
9 ///////////////////////////////////////////////////////////////////////////// 11 /////////////////////////////////////////////////////////////////////////////
10 // LanguageOptions class: 12 // LanguageOptions class:
11 13
12 /** 14 /**
13 * Encapsulated handling of ChromeOS language options page. 15 * Encapsulated handling of ChromeOS language options page.
14 * @constructor 16 * @constructor
15 */ 17 */
16 function LanguageOptions(model) { 18 function LanguageOptions(model) {
17 OptionsPage.call(this, 'language', localStrings.getString('languagePage'), 19 OptionsPage.call(this, 'language', localStrings.getString('languagePage'),
18 'languagePage'); 20 'languagePage');
19 } 21 }
20 22
21 cr.addSingletonGetter(LanguageOptions); 23 cr.addSingletonGetter(LanguageOptions);
22 24
23 // Inherit LanguageOptions from OptionsPage. 25 // Inherit LanguageOptions from OptionsPage.
24 LanguageOptions.prototype = { 26 LanguageOptions.prototype = {
25 __proto__: OptionsPage.prototype, 27 __proto__: OptionsPage.prototype,
26 28
27 /** 29 /**
28 * Initializes LanguageOptions page. 30 * Initializes LanguageOptions page.
29 * Calls base class implementation to starts preference initialization. 31 * Calls base class implementation to starts preference initialization.
30 */ 32 */
31 initializePage: function() { 33 initializePage: function() {
32 OptionsPage.prototype.initializePage.call(this); 34 OptionsPage.prototype.initializePage.call(this);
33 35
34 var languageOptionsList = $('language-options-list'); 36 var languageOptionsList = $('language-options-list');
35 options.language.LanguageList.decorate(languageOptionsList); 37 LanguageList.decorate(languageOptionsList);
36 38
37 languageOptionsList.addEventListener('change', 39 languageOptionsList.addEventListener('change',
38 cr.bind(this.handleLanguageOptionsListChange_, this)); 40 cr.bind(this.handleLanguageOptionsListChange_, this));
39 41
40 this.addEventListener('visibleChange', 42 this.addEventListener('visibleChange',
41 cr.bind(this.handleVisibleChange_, this)); 43 cr.bind(this.handleVisibleChange_, this));
42 44
43 this.initializeInputMethodList_(); 45 this.initializeInputMethodList_();
46
47 // Set up add button.
48 $('language-options-add-button').onclick = function(e) {
49 OptionsPage.showOverlay('addLanguageOverlay');
50 };
51 // Set up remove button.
52 $('language-options-remove-button').addEventListener('click',
53 cr.bind(this.handleRemoveButtonClick_, this));
54
55 // Setup add language overlay page.
56 OptionsPage.registerOverlay(AddLanguageOverlay.getInstance());
57
58 // Listen to user clicks on the add language list.
59 var addLanguageList = $('add-language-overlay-language-list');
60 addLanguageList.addEventListener('click',
61 cr.bind(this.handleAddLanguageListClick_, this));
44 }, 62 },
45 63
46 languageListInitalized_: false, 64 languageListInitalized_: false,
47 // The preference is a CSV string that describes preload engines 65 // The preference is a CSV string that describes preload engines
48 // (i.e. active input methods). 66 // (i.e. active input methods).
49 preloadEnginesPref: 'settings.language.preload_engines', 67 preloadEnginesPref: 'settings.language.preload_engines',
50 preloadEngines_: [], 68 preloadEngines_: [],
51 69
52 /** 70 /**
53 * Initializes the input method list. 71 * Initializes the input method list.
(...skipping 21 matching lines...) Expand all
75 label.languageCode = inputMethod.languageCode; 93 label.languageCode = inputMethod.languageCode;
76 94
77 inputMethodList.appendChild(label); 95 inputMethodList.appendChild(label);
78 } 96 }
79 // Listen to pref change once the input method list is initialized. 97 // Listen to pref change once the input method list is initialized.
80 Preferences.getInstance().addEventListener(this.preloadEnginesPref, 98 Preferences.getInstance().addEventListener(this.preloadEnginesPref,
81 cr.bind(this.handlePreloadEnginesPrefChange_, this)); 99 cr.bind(this.handlePreloadEnginesPrefChange_, this));
82 }, 100 },
83 101
84 /** 102 /**
85 * Handler for OptionsPage's visible property change event.
86 * @param {Event} e Property change event.
87 * @private
88 */
89 handleVisibleChange_ : function(e) {
90 if (!this.languageListInitalized_ && this.visible) {
91 this.languageListInitalized_ = true;
92 $('language-options-list').redraw();
93 }
94 },
95
96 /**
97 * Handler for languageOptionsList's change event. 103 * Handler for languageOptionsList's change event.
98 * @param {Event} e Change event. 104 * @param {Event} e Change event.
99 * @private 105 * @private
100 */ 106 */
101 handleLanguageOptionsListChange_: function(e) { 107 handleLanguageOptionsListChange_: function(e) {
102 var languageOptionsList = $('language-options-list'); 108 var languageOptionsList = $('language-options-list');
103 var index = languageOptionsList.selectionModel.selectedIndex; 109 var index = languageOptionsList.selectionModel.selectedIndex;
104 if (index == -1) 110 if (index == -1)
105 return; 111 return;
106 112
107 var languageCode = languageOptionsList.dataModel.item(index); 113 var languageCode = languageOptionsList.getLanguageCodes()[index];
108 var languageDisplayName = localStrings.getString(languageCode); 114 var languageDisplayName = LanguageList.getDisplayNameFromLanguageCode(
115 languageCode);
109 116
110 $('language-options-language-name').textContent = languageDisplayName; 117 $('language-options-language-name').textContent = languageDisplayName;
111 // TODO(satorux): The button text should be changed to 118 // TODO(satorux): The button text should be changed to
112 // 'is_displayed_in_this_language', depending on the current UI 119 // 'is_displayed_in_this_language', depending on the current UI
113 // language. 120 // language.
114 $('language-options-ui-language-button').textContent = ( 121 $('language-options-ui-language-button').textContent = (
115 localStrings.getString('display_in_this_language')); 122 localStrings.getString('display_in_this_language'));
116 123
117 // Change the visibility of the input method list. Input methods that 124 // Change the visibility of the input method list. Input methods that
118 // matches |languageCode| will become visible. 125 // matches |languageCode| will become visible.
119 var inputMethodList = $('language-options-input-method-list'); 126 var inputMethodList = $('language-options-input-method-list');
120 var labels = inputMethodList.querySelectorAll('label'); 127 var labels = inputMethodList.querySelectorAll('label');
121 for (var i = 0; i < labels.length; i++) { 128 for (var i = 0; i < labels.length; i++) {
122 if (labels[i].languageCode == languageCode) { 129 if (labels[i].languageCode == languageCode) {
123 labels[i].style.display = 'block'; 130 labels[i].style.display = 'block';
124 } else { 131 } else {
125 labels[i].style.display = 'none'; 132 labels[i].style.display = 'none';
126 } 133 }
127 } 134 }
135
136 // Change the visibility of the language list in the add language
137 // overlay. Languages that are already active will become invisible,
138 // so that users don't add the same language twice.
139 var languageCodes = languageOptionsList.getLanguageCodes();
140 var languageCodeSet = {};
141 for (var i = 0; i < languageCodes.length; i++) {
142 languageCodeSet[languageCodes[i]] = true;
143 }
144 var addLanguageList = $('add-language-overlay-language-list');
145 var lis = addLanguageList.querySelectorAll('li');
146 for (var i = 0; i < lis.length; i++) {
147 // The first child button knows the language code.
148 var button = lis[i].childNodes[0];
149 if (button.languageCode in languageCodeSet) {
150 lis[i].style.display = 'none';
151 } else {
152 lis[i].style.display = 'block';
153 }
154 }
128 }, 155 },
129 156
130 /** 157 /**
131 * Handles preloadEnginesPref change. 158 * Handles preloadEnginesPref change.
132 * @param {Event} e Change event. 159 * @param {Event} e Change event.
133 * @private 160 * @private
134 */ 161 */
135 handlePreloadEnginesPrefChange_: function(e) { 162 handlePreloadEnginesPrefChange_: function(e) {
136 this.preloadEngines_ = this.filterBadPreloadEngines_(e.value.split(',')); 163 this.preloadEngines_ = this.filterBadPreloadEngines_(e.value.split(','));
137 this.updateCheckboxesFromPreloadEngines_(); 164 this.updateCheckboxesFromPreloadEngines_();
138 }, 165 },
139 166
140 /** 167 /**
141 * Handles input method checkbox's click event. 168 * Handles input method checkbox's click event.
142 * @param {Event} e Click event. 169 * @param {Event} e Click event.
143 * @private 170 * @private
144 */ 171 */
145 handleCheckboxClick_ : function(e) { 172 handleCheckboxClick_ : function(e) {
146 this.updatePreloadEnginesFromCheckboxes_(); 173 this.updatePreloadEnginesFromCheckboxes_();
174 this.savePreloadEnginesPref_();
175 },
176
177 /**
178 * Handles add language list's click event.
179 * @param {Event} e Click event.
180 */
181 handleAddLanguageListClick_ : function(e) {
182 var languageOptionsList = $('language-options-list');
183 languageOptionsList.addLanguage(e.target.languageCode);
184 OptionsPage.clearOverlays();
185 },
186
187 /**
188 * Handles remove button's click event.
189 * @param {Event} e Click event.
190 */
191 handleRemoveButtonClick_: function(e) {
192 var languageOptionsList = $('language-options-list');
193 var languageCode = languageOptionsList.getSelectedLanguageCode();
194 // Disable input methods associated with |languageCode|.
195 this.removePreloadEnginesByLanguageCode_(languageCode);
196 languageOptionsList.removeSelectedLanguage();
197 },
198
199 /**
200 * Removes preload engines associated with the given language code.
201 * @param {string} languageCode Language code (ex. "fr").
202 * @private
203 */
204 removePreloadEnginesByLanguageCode_: function(languageCode) {
205 // First create the set of engines to be removed.
206 var enginesToBeRemoved = {};
207 var inputMethodList = templateData.inputMethodList;
208 for (var i = 0; i < inputMethodList.length; i++) {
209 var inputMethod = inputMethodList[i];
210 if (inputMethod.languageCode == languageCode) {
211 enginesToBeRemoved[inputMethod.id] = true;
212 }
213 }
214
215 // Update the preload engine list with the to-be-removed set.
216 var newPreloadEngines = [];
217 for (var i = 0; i < this.preloadEngines_.length; i++) {
218 if (!this.preloadEngines_[i] in enginesToBeRemoved) {
219 newPreloadEngines.push(this.preloadEngines_[i]);
220 }
221 }
222 this.preloadEngines_ = newPreloadEngines;
223 this.savePreloadEnginesPref_();
224 },
225
226 /**
227 * Saves the preload engines preference.
228 * @private
229 */
230 savePreloadEnginesPref_: function() {
147 Preferences.setStringPref(this.preloadEnginesPref, 231 Preferences.setStringPref(this.preloadEnginesPref,
148 this.preloadEngines_.join(',')); 232 this.preloadEngines_.join(','));
149 }, 233 },
150 234
151 /** 235 /**
152 * Updates the checkboxes in the input method list from the preload 236 * Updates the checkboxes in the input method list from the preload
153 * engines preference. 237 * engines preference.
154 * @private 238 * @private
155 */ 239 */
156 updateCheckboxesFromPreloadEngines_: function() { 240 updateCheckboxesFromPreloadEngines_: function() {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 return filteredPreloadEngines; 291 return filteredPreloadEngines;
208 } 292 }
209 }; 293 };
210 294
211 // Export 295 // Export
212 return { 296 return {
213 LanguageOptions: LanguageOptions 297 LanguageOptions: LanguageOptions
214 }; 298 };
215 299
216 }); 300 });
217
OLDNEW
« no previous file with comments | « chrome/browser/resources/options/chromeos_language_options.css ('k') | chrome/browser/resources/options/options_page.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698