| Index: chrome/browser/resources/options/chromeos_language_options.js
|
| diff --git a/chrome/browser/resources/options/chromeos_language_options.js b/chrome/browser/resources/options/chromeos_language_options.js
|
| index 59d4a7589cd13634dcddf4c7aa1a3dec6afc0e01..3a14612eeee2c03506f35679ae9929dfd61f42e4 100644
|
| --- a/chrome/browser/resources/options/chromeos_language_options.js
|
| +++ b/chrome/browser/resources/options/chromeos_language_options.js
|
| @@ -4,7 +4,9 @@
|
|
|
| cr.define('options', function() {
|
|
|
| - var OptionsPage = options.OptionsPage;
|
| + const OptionsPage = options.OptionsPage;
|
| + const AddLanguageOverlay = options.language.AddLanguageOverlay;
|
| + const LanguageList = options.language.LanguageList;
|
|
|
| /////////////////////////////////////////////////////////////////////////////
|
| // LanguageOptions class:
|
| @@ -32,15 +34,31 @@ cr.define('options', function() {
|
| OptionsPage.prototype.initializePage.call(this);
|
|
|
| var languageOptionsList = $('language-options-list');
|
| - options.language.LanguageList.decorate(languageOptionsList);
|
| + LanguageList.decorate(languageOptionsList);
|
|
|
| languageOptionsList.addEventListener('change',
|
| cr.bind(this.handleLanguageOptionsListChange_, this));
|
|
|
| - this.addEventListener('visibleChange',
|
| + this.addEventListener('visibleChange',
|
| cr.bind(this.handleVisibleChange_, this));
|
|
|
| this.initializeInputMethodList_();
|
| +
|
| + // Set up add button.
|
| + $('language-options-add-button').onclick = function(e) {
|
| + OptionsPage.showOverlay('addLanguageOverlay');
|
| + };
|
| + // Set up remove button.
|
| + $('language-options-remove-button').addEventListener('click',
|
| + cr.bind(this.handleRemoveButtonClick_, this));
|
| +
|
| + // Setup add language overlay page.
|
| + OptionsPage.registerOverlay(AddLanguageOverlay.getInstance());
|
| +
|
| + // Listen to user clicks on the add language list.
|
| + var addLanguageList = $('add-language-overlay-language-list');
|
| + addLanguageList.addEventListener('click',
|
| + cr.bind(this.handleAddLanguageListClick_, this));
|
| },
|
|
|
| languageListInitalized_: false,
|
| @@ -82,18 +100,6 @@ cr.define('options', function() {
|
| },
|
|
|
| /**
|
| - * Handler for OptionsPage's visible property change event.
|
| - * @param {Event} e Property change event.
|
| - * @private
|
| - */
|
| - handleVisibleChange_ : function(e) {
|
| - if (!this.languageListInitalized_ && this.visible) {
|
| - this.languageListInitalized_ = true;
|
| - $('language-options-list').redraw();
|
| - }
|
| - },
|
| -
|
| - /**
|
| * Handler for languageOptionsList's change event.
|
| * @param {Event} e Change event.
|
| * @private
|
| @@ -104,8 +110,9 @@ cr.define('options', function() {
|
| if (index == -1)
|
| return;
|
|
|
| - var languageCode = languageOptionsList.dataModel.item(index);
|
| - var languageDisplayName = localStrings.getString(languageCode);
|
| + var languageCode = languageOptionsList.getLanguageCodes()[index];
|
| + var languageDisplayName = LanguageList.getDisplayNameFromLanguageCode(
|
| + languageCode);
|
|
|
| $('language-options-language-name').textContent = languageDisplayName;
|
| // TODO(satorux): The button text should be changed to
|
| @@ -125,6 +132,26 @@ cr.define('options', function() {
|
| labels[i].style.display = 'none';
|
| }
|
| }
|
| +
|
| + // Change the visibility of the language list in the add language
|
| + // overlay. Languages that are already active will become invisible,
|
| + // so that users don't add the same language twice.
|
| + var languageCodes = languageOptionsList.getLanguageCodes();
|
| + var languageCodeSet = {};
|
| + for (var i = 0; i < languageCodes.length; i++) {
|
| + languageCodeSet[languageCodes[i]] = true;
|
| + }
|
| + var addLanguageList = $('add-language-overlay-language-list');
|
| + var lis = addLanguageList.querySelectorAll('li');
|
| + for (var i = 0; i < lis.length; i++) {
|
| + // The first child button knows the language code.
|
| + var button = lis[i].childNodes[0];
|
| + if (button.languageCode in languageCodeSet) {
|
| + lis[i].style.display = 'none';
|
| + } else {
|
| + lis[i].style.display = 'block';
|
| + }
|
| + }
|
| },
|
|
|
| /**
|
| @@ -144,6 +171,63 @@ cr.define('options', function() {
|
| */
|
| handleCheckboxClick_ : function(e) {
|
| this.updatePreloadEnginesFromCheckboxes_();
|
| + this.savePreloadEnginesPref_();
|
| + },
|
| +
|
| + /**
|
| + * Handles add language list's click event.
|
| + * @param {Event} e Click event.
|
| + */
|
| + handleAddLanguageListClick_ : function(e) {
|
| + var languageOptionsList = $('language-options-list');
|
| + languageOptionsList.addLanguage(e.target.languageCode);
|
| + OptionsPage.clearOverlays();
|
| + },
|
| +
|
| + /**
|
| + * Handles remove button's click event.
|
| + * @param {Event} e Click event.
|
| + */
|
| + handleRemoveButtonClick_: function(e) {
|
| + var languageOptionsList = $('language-options-list');
|
| + var languageCode = languageOptionsList.getSelectedLanguageCode();
|
| + // Disable input methods associated with |languageCode|.
|
| + this.removePreloadEnginesByLanguageCode_(languageCode);
|
| + languageOptionsList.removeSelectedLanguage();
|
| + },
|
| +
|
| + /**
|
| + * Removes preload engines associated with the given language code.
|
| + * @param {string} languageCode Language code (ex. "fr").
|
| + * @private
|
| + */
|
| + removePreloadEnginesByLanguageCode_: function(languageCode) {
|
| + // First create the set of engines to be removed.
|
| + var enginesToBeRemoved = {};
|
| + var inputMethodList = templateData.inputMethodList;
|
| + for (var i = 0; i < inputMethodList.length; i++) {
|
| + var inputMethod = inputMethodList[i];
|
| + if (inputMethod.languageCode == languageCode) {
|
| + enginesToBeRemoved[inputMethod.id] = true;
|
| + }
|
| + }
|
| +
|
| + // Update the preload engine list with the to-be-removed set.
|
| + var newPreloadEngines = [];
|
| + for (var i = 0; i < this.preloadEngines_.length; i++) {
|
| + if (!this.preloadEngines_[i] in enginesToBeRemoved) {
|
| + newPreloadEngines.push(this.preloadEngines_[i]);
|
| + }
|
| + }
|
| + this.preloadEngines_ = newPreloadEngines;
|
| + this.savePreloadEnginesPref_();
|
| + },
|
| +
|
| + /**
|
| + * Saves the preload engines preference.
|
| + * @private
|
| + */
|
| + savePreloadEnginesPref_: function() {
|
| Preferences.setStringPref(this.preloadEnginesPref,
|
| this.preloadEngines_.join(','));
|
| },
|
| @@ -214,4 +298,3 @@ cr.define('options', function() {
|
| };
|
|
|
| });
|
| -
|
|
|