Chromium Code Reviews| Index: chrome/browser/resources/options/language_options.js |
| diff --git a/chrome/browser/resources/options/language_options.js b/chrome/browser/resources/options/language_options.js |
| index 63ddd7d1345e6bd83cf92961a0b541bfeb988d02..eb45d54caff89a1d8fde640d358b4d19db307e5c 100644 |
| --- a/chrome/browser/resources/options/language_options.js |
| +++ b/chrome/browser/resources/options/language_options.js |
| @@ -95,6 +95,8 @@ cr.define('options', function() { |
| var addLanguageList = $('add-language-overlay-language-list'); |
| addLanguageList.addEventListener('click', |
| this.handleAddLanguageListClick_.bind(this)); |
| + $('language-options-extension-ime-button').addEventListener('click', |
|
James Hawkins
2012/09/12 16:11:58
nit: The start of parameter rows must align on the
Zachary Kuznia
2012/09/13 09:28:32
Done.
|
| + this.handleExtensionImeButtonClick_.bind(this)); |
| } else { |
| // Listen to add language dialog ok button. |
| var addLanguageOkButton = $('add-language-overlay-ok-button'); |
| @@ -136,6 +138,11 @@ cr.define('options', function() { |
| preloadEnginesPref: 'settings.language.preload_engines', |
| // The list of preload engines, like ['mozc', 'pinyin']. |
| preloadEngines_: [], |
| + // The preference that lists the extension IMEs that are filtered out of |
| + // the language menu. |
| + filteredExtensionImesPref: 'settings.language.filtered_extension_imes', |
| + // The list of extension IMEs that are filtered out of the language menu. |
| + filteredExtensionImes_: [], |
| // The preference is a string that describes the spell check |
| // dictionary language, like "en-US". |
| spellCheckDictionaryPref: 'spellcheck.dictionary', |
| @@ -180,9 +187,31 @@ cr.define('options', function() { |
| } |
| inputMethodList.appendChild(element); |
| } |
| + |
| + var extensionImeList = loadTimeData.getValue('extensionImeList'); |
| + for (var i = 0; i < extensionImeList.length; i++) { |
| + var inputMethod = extensionImeList[i]; |
| + var element = inputMethodPrototype.cloneNode(true); |
| + element.id = ''; |
| + //element.languageCodeSet = {kExtensionImePage: true}; |
|
James Hawkins
2012/09/12 16:11:58
Dead code?
Zachary Kuznia
2012/09/13 09:28:32
Done.
|
| + element.languageCodeSet = {}; |
| + var input = element.querySelectorAll('input')[0]; |
| + input.inputMethodId = inputMethod.id; |
| + var span = element.querySelectorAll('span')[0]; |
| + span.textContent = inputMethod.displayName; |
| + |
| + // Listen to user clicks. |
|
James Hawkins
2012/09/12 16:11:58
nit: This comment is superfluous.
Zachary Kuznia
2012/09/13 09:28:32
Done.
|
| + input.addEventListener('click', |
| + this.handleExtensionCheckboxClick_.bind(this)); |
| + |
| + inputMethodList.appendChild(element); |
| + } |
| + |
| // Listen to pref change once the input method list is initialized. |
| Preferences.getInstance().addEventListener(this.preloadEnginesPref, |
| this.handlePreloadEnginesPrefChange_.bind(this)); |
| + Preferences.getInstance().addEventListener(this.filteredExtensionImesPref, |
|
James Hawkins
2012/09/12 16:11:58
nit: The start of parameter rows must align on the
Zachary Kuznia
2012/09/13 09:28:32
Done.
|
| + this.handleFilteredExtensionsPrefChange_.bind(this)); |
| }, |
| /** |
| @@ -226,6 +255,10 @@ cr.define('options', function() { |
| var languageOptionsList = $('language-options-list'); |
| var languageCode = languageOptionsList.getSelectedLanguageCode(); |
| + // If there's no selection, just return. |
| + if (!languageCode) |
| + return; |
| + |
| // Select the language if it's specified in the URL hash (ex. lang=ja). |
| // Used for automated testing. |
| var match = document.location.hash.match(/\blang=([\w-]+)/); |
| @@ -518,6 +551,17 @@ cr.define('options', function() { |
| }, |
| /** |
| + * Handles filteredExtensionImesPref change. |
| + * @param {Event} e Change event. |
| + * @private |
| + */ |
| + handleFilteredExtensionsPrefChange_: function(e) { |
| + var value = e.value.value; |
| + this.filteredExtensionImes_ = value.split(','); |
| + this.updateCheckboxesFromFilteredExtensions_(); |
| + }, |
| + |
| + /** |
| * Handles input method checkbox's click event. |
| * @param {Event} e Click event. |
| * @private |
| @@ -543,6 +587,23 @@ cr.define('options', function() { |
| }, |
| /** |
| + * Handles extension input method checkbox's click event. |
| + * @param {Event} e Click event. |
| + * @private |
| + */ |
| + handleExtensionCheckboxClick_: function(e) { |
| + var checkbox = e.target; |
| + /* |
| + if (checkbox.checked) { |
| + chrome.send('inputMethodEnable', [checkbox.inputMethodId]); |
|
James Hawkins
2012/09/12 16:11:58
Dead code?
Zachary Kuznia
2012/09/13 09:28:32
Done.
|
| + } else { |
| + chrome.send('inputMethodDisable', [checkbox.inputMethodId]); |
| + }*/ |
| + this.updateFilteredExtensionsFromCheckboxes_(); |
| + this.saveFilteredExtensionPref_(); |
| + }, |
| + |
| + /** |
| * Handles add language list's click event. |
| * @param {Event} e Click event. |
| */ |
| @@ -571,8 +632,40 @@ cr.define('options', function() { |
| }, |
| /** |
| - * Handles add language dialog ok button. |
| + * Handles extension IME button. |
| */ |
| + handleExtensionImeButtonClick_: function() { |
| + $('language-options-list').clearSelection(); |
| + |
| + var languageName = $('language-options-language-name'); |
| + languageName.textContent = loadTimeData.getString('extension_ime_label'); |
| + |
| + var uiLanguageMessage = $('language-options-ui-language-message'); |
| + uiLanguageMessage.textContent = |
| + loadTimeData.getString('extension_ime_description'); |
| + |
| + var uiLanguageButton = $('language-options-ui-language-button'); |
| + uiLanguageButton.onclick = null; |
| + uiLanguageButton.hidden = true; |
| + |
| + this.updateSpellCheckLanguageButton_(); |
| + |
| + // Hide all input method checkboxes that aren't extension IMEs. |
| + var inputMethodList = $('language-options-input-method-list'); |
| + var methods = inputMethodList.querySelectorAll('.input-method'); |
| + for (var i = 0; i < methods.length; i++) { |
| + var method = methods[i]; |
| + var input = method.querySelectorAll('input')[0]; |
| + // Give it focus if the ID matches. |
| + if (input.inputMethodId.match(/^_ext_ime_/)) { |
|
James Hawkins
2012/09/12 16:11:58
nit: No braces for single-line blocks.
Zachary Kuznia
2012/09/13 09:28:32
Done.
|
| + method.hidden = false; |
| + } else { |
| + method.hidden = true; |
| + } |
| + } |
| + }, |
| + |
| + |
| handleAddLanguageOkButtonClick_: function() { |
| var languagesSelect = $('add-language-overlay-language-list'); |
| var selectedIndex = languagesSelect.selectedIndex; |
| @@ -685,6 +778,54 @@ cr.define('options', function() { |
| }, |
| /** |
| + * Saves the filtered extension preference. |
| + * @private |
| + */ |
| + saveFilteredExtensionPref_: function() { |
| + Preferences.setStringPref(this.filteredExtensionImesPref, |
| + this.filteredExtensionImes_.join(','), true); |
| + }, |
| + |
| + /** |
| + * Updates the checkboxes in the input method list from the filtered |
| + * extensions preference. |
| + * @private |
| + */ |
| + updateCheckboxesFromFilteredExtensions_: function() { |
| + // Convert the list into a dictonary for simpler lookup. |
| + var dictionary = {}; |
| + for (var i = 0; i < this.filteredExtensionImes_.length; i++) { |
|
James Hawkins
2012/09/12 16:11:58
nit: No braces for single-line blocks.
Zachary Kuznia
2012/09/13 09:28:32
Done.
|
| + dictionary[this.filteredExtensionImes_[i]] = true; |
| + } |
| + |
| + var inputMethodList = $('language-options-input-method-list'); |
| + var checkboxes = inputMethodList.querySelectorAll('input'); |
| + for (var i = 0; i < checkboxes.length; i++) { |
| + if (checkboxes[i].inputMethodId.match(/^_ext_ime_/)) { |
|
James Hawkins
2012/09/12 16:11:58
nit: No braces for single-line blocks.
Zachary Kuznia
2012/09/13 09:28:32
Done.
|
| + checkboxes[i].checked = !(checkboxes[i].inputMethodId in dictionary); |
| + } |
| + } |
| + }, |
| + |
| + /** |
| + * Updates the filtered extensions preference from the checkboxes in the |
| + * input method list. |
| + * @private |
| + */ |
| + updateFilteredExtensionsFromCheckboxes_: function() { |
| + this.filteredExtensionImes_ = []; |
| + var inputMethodList = $('language-options-input-method-list'); |
| + var checkboxes = inputMethodList.querySelectorAll('input'); |
| + for (var i = 0; i < checkboxes.length; i++) { |
| + if (checkboxes[i].inputMethodId.match(/^_ext_ime_/)) { |
| + if (!checkboxes[i].checked) { |
|
James Hawkins
2012/09/12 16:11:58
nit: No braces for single-line blocks.
Zachary Kuznia
2012/09/13 09:28:32
Done.
|
| + this.filteredExtensionImes_.push(checkboxes[i].inputMethodId); |
| + } |
| + } |
| + } |
| + }, |
| + |
| + /** |
| * Saves the preload engines preference. |
| * @private |
| */ |
| @@ -708,7 +849,9 @@ cr.define('options', function() { |
| var inputMethodList = $('language-options-input-method-list'); |
| var checkboxes = inputMethodList.querySelectorAll('input'); |
| for (var i = 0; i < checkboxes.length; i++) { |
| - checkboxes[i].checked = (checkboxes[i].inputMethodId in dictionary); |
| + if (!checkboxes[i].inputMethodId.match(/^_ext_ime_/)) { |
| + checkboxes[i].checked = (checkboxes[i].inputMethodId in dictionary); |
|
James Hawkins
2012/09/12 16:11:58
nit: No braces for single-line blocks.
Zachary Kuznia
2012/09/13 09:28:32
Done.
|
| + } |
| } |
| }, |
| @@ -722,8 +865,10 @@ cr.define('options', function() { |
| var inputMethodList = $('language-options-input-method-list'); |
| var checkboxes = inputMethodList.querySelectorAll('input'); |
| for (var i = 0; i < checkboxes.length; i++) { |
| - if (checkboxes[i].checked) { |
| - this.preloadEngines_.push(checkboxes[i].inputMethodId); |
| + if (!checkboxes[i].inputMethodId.match(/^_ext_ime_/)) { |
| + if (checkboxes[i].checked) { |
|
James Hawkins
2012/09/12 16:11:58
nit: No braces for single-line blocks.
Zachary Kuznia
2012/09/13 09:28:32
Done.
|
| + this.preloadEngines_.push(checkboxes[i].inputMethodId); |
| + } |
| } |
| } |
| var languageOptionsList = $('language-options-list'); |