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

Unified Diff: chrome/browser/resources/options/language_options.js

Issue 10907196: Add the ability to filter out extension IMEs from the language settings page. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 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 side-by-side diff with in-line comments
Download patch
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');

Powered by Google App Engine
This is Rietveld 408576698