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