OLD | NEW |
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 Loading... |
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 Loading... |
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 | |
OLD | NEW |