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

Side by Side Diff: chrome/browser/resources/settings/languages_page/languages.js

Issue 2946563002: Run clang-format on .js files in c/b/r/settings (Closed)
Patch Set: dschuyler@ review Created 3 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 /** 5 /**
6 * @fileoverview 'settings-languages' handles Chrome's language and input 6 * @fileoverview 'settings-languages' handles Chrome's language and input
7 * method settings. The 'languages' property, which reflects the current 7 * method settings. The 'languages' property, which reflects the current
8 * language settings, must not be changed directly. Instead, changes to 8 * language settings, must not be changed directly. Instead, changes to
9 * language settings should be made using the LanguageHelper APIs provided by 9 * language settings should be made using the LanguageHelper APIs provided by
10 * this class via languageHelper. 10 * this class via languageHelper.
(...skipping 16 matching lines...) Expand all
27 27
28 // Some ISO 639 language codes have been renamed, e.g. "he" to "iw", but 28 // Some ISO 639 language codes have been renamed, e.g. "he" to "iw", but
29 // Translate still uses the old versions. TODO(michaelpg): Chrome does too. 29 // Translate still uses the old versions. TODO(michaelpg): Chrome does too.
30 // Follow up with Translate owners to understand the right thing to do. 30 // Follow up with Translate owners to understand the right thing to do.
31 var kTranslateLanguageSynonyms = { 31 var kTranslateLanguageSynonyms = {
32 'he': 'iw', 32 'he': 'iw',
33 'jv': 'jw', 33 'jv': 'jw',
34 }; 34 };
35 35
36 var preferredLanguagesPrefName = cr.isChromeOS ? 36 var preferredLanguagesPrefName = cr.isChromeOS ?
37 'settings.language.preferred_languages' : 'intl.accept_languages'; 37 'settings.language.preferred_languages' :
38 'intl.accept_languages';
38 39
39 /** 40 /**
40 * Singleton element that generates the languages model on start-up and 41 * Singleton element that generates the languages model on start-up and
41 * updates it whenever Chrome's pref store and other settings change. 42 * updates it whenever Chrome's pref store and other settings change.
42 * @implements {LanguageHelper} 43 * @implements {LanguageHelper}
43 */ 44 */
44 Polymer({ 45 Polymer({
45 is: 'settings-languages', 46 is: 'settings-languages',
46 47
47 behaviors: [PrefsBehavior], 48 behaviors: [PrefsBehavior],
48 49
49 properties: { 50 properties: {
50 /** 51 /**
51 * @type {!LanguagesModel|undefined} 52 * @type {!LanguagesModel|undefined}
52 */ 53 */
53 languages: { 54 languages: {
54 type: Object, 55 type: Object,
55 notify: true, 56 notify: true,
56 readOnly: true, 57 readOnly: true,
57 }, 58 },
58 59
59 /** 60 /**
60 * This element, as a LanguageHelper instance for API usage. 61 * This element, as a LanguageHelper instance for API usage.
61 * @type {!LanguageHelper} 62 * @type {!LanguageHelper}
62 */ 63 */
63 languageHelper: { 64 languageHelper: {
64 type: Object, 65 type: Object,
65 notify: true, 66 notify: true,
66 readOnly: true, 67 readOnly: true,
67 value: function() { return /** @type {!LanguageHelper} */(this); }, 68 value: function() {
69 return /** @type {!LanguageHelper} */ (this);
70 },
68 }, 71 },
69 72
70 /** 73 /**
71 * PromiseResolver to be resolved when the singleton has been initialized. 74 * PromiseResolver to be resolved when the singleton has been initialized.
72 * @private {!PromiseResolver} 75 * @private {!PromiseResolver}
73 */ 76 */
74 resolver_: { 77 resolver_: {
75 type: Object, 78 type: Object,
76 value: function() { 79 value: function() {
77 return new PromiseResolver(); 80 return new PromiseResolver();
78 }, 81 },
79 }, 82 },
80 83
81 /** 84 /**
82 * Hash map of supported languages by language codes for fast lookup. 85 * Hash map of supported languages by language codes for fast lookup.
83 * @private {!Map<string, !chrome.languageSettingsPrivate.Language>} 86 * @private {!Map<string, !chrome.languageSettingsPrivate.Language>}
84 */ 87 */
85 supportedLanguageMap_: { 88 supportedLanguageMap_: {
86 type: Object, 89 type: Object,
87 value: function() { return new Map(); }, 90 value: function() {
91 return new Map();
92 },
88 }, 93 },
89 94
90 /** 95 /**
91 * Hash set of enabled language codes for membership testing. 96 * Hash set of enabled language codes for membership testing.
92 * @private {!Set<string>} 97 * @private {!Set<string>}
93 */ 98 */
94 enabledLanguageSet_: { 99 enabledLanguageSet_: {
95 type: Object, 100 type: Object,
96 value: function() { return new Set(); }, 101 value: function() {
102 return new Set();
103 },
97 }, 104 },
98 105
99 /** 106 /**
100 * Hash map of supported input methods by ID for fast lookup. 107 * Hash map of supported input methods by ID for fast lookup.
101 * @private {!Map<string, chrome.languageSettingsPrivate.InputMethod>} 108 * @private {!Map<string, chrome.languageSettingsPrivate.InputMethod>}
102 */ 109 */
103 supportedInputMethodMap_: { 110 supportedInputMethodMap_: {
104 type: Object, 111 type: Object,
105 value: function() { return new Map(); }, 112 value: function() {
113 return new Map();
114 },
106 }, 115 },
107 116
108 /** 117 /**
109 * Hash map of input methods supported for each language. 118 * Hash map of input methods supported for each language.
110 * @type {!Map<string, 119 * @type {!Map<string,
111 * !Array<!chrome.languageSettingsPrivate.InputMethod>>} 120 * !Array<!chrome.languageSettingsPrivate.InputMethod>>}
112 * @private 121 * @private
113 */ 122 */
114 languageInputMethods_: { 123 languageInputMethods_: {
115 type: Object, 124 type: Object,
116 value: function() { return new Map(); }, 125 value: function() {
126 return new Map();
127 },
117 }, 128 },
118 129
119 /** @private Prospective UI language when the page was loaded. */ 130 /** @private Prospective UI language when the page was loaded. */
120 originalProspectiveUILanguage_: String, 131 originalProspectiveUILanguage_: String,
121 }, 132 },
122 133
123 observers: [ 134 observers: [
124 // All observers wait for the model to be populated by including the 135 // All observers wait for the model to be populated by including the
125 // |languages| property. 136 // |languages| property.
126 'prospectiveUILanguageChanged_(prefs.intl.app_locale.value, languages)', 137 'prospectiveUILanguageChanged_(prefs.intl.app_locale.value, languages)',
(...skipping 14 matching lines...) Expand all
141 152
142 /** @private {?Function} */ 153 /** @private {?Function} */
143 boundOnInputMethodChanged_: null, 154 boundOnInputMethodChanged_: null,
144 155
145 /** @private {?settings.LanguagesBrowserProxy} */ 156 /** @private {?settings.LanguagesBrowserProxy} */
146 browserProxy_: null, 157 browserProxy_: null,
147 158
148 /** @private {?LanguageSettingsPrivate} */ 159 /** @private {?LanguageSettingsPrivate} */
149 languageSettingsPrivate_: null, 160 languageSettingsPrivate_: null,
150 161
151 // <if expr="chromeos"> 162 // <if expr="chromeos">
152 /** @private {?InputMethodPrivate} */ 163 /** @private {?InputMethodPrivate} */
153 inputMethodPrivate_: null, 164 inputMethodPrivate_: null,
154 // </if> 165 // </if>
155 166
156 /** @override */ 167 /** @override */
157 attached: function() { 168 attached: function() {
158 this.browserProxy_ = settings.LanguagesBrowserProxyImpl.getInstance(); 169 this.browserProxy_ = settings.LanguagesBrowserProxyImpl.getInstance();
159 this.languageSettingsPrivate_ = 170 this.languageSettingsPrivate_ =
160 this.browserProxy_.getLanguageSettingsPrivate(); 171 this.browserProxy_.getLanguageSettingsPrivate();
161 // <if expr="chromeos"> 172 // <if expr="chromeos">
162 this.inputMethodPrivate_ = this.browserProxy_.getInputMethodPrivate(); 173 this.inputMethodPrivate_ = this.browserProxy_.getInputMethodPrivate();
163 // </if> 174 // </if>
164 175
165 var promises = []; 176 var promises = [];
166 177
167 // Wait until prefs are initialized before creating the model, so we can 178 // Wait until prefs are initialized before creating the model, so we can
168 // include information about enabled languages. 179 // include information about enabled languages.
169 promises[0] = CrSettingsPrefs.initialized; 180 promises[0] = CrSettingsPrefs.initialized;
170 181
171 // Get the language list. 182 // Get the language list.
172 promises[1] = new Promise(function(resolve) { 183 promises[1] = new Promise(function(resolve) {
173 this.languageSettingsPrivate_.getLanguageList(resolve); 184 this.languageSettingsPrivate_.getLanguageList(resolve);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 this.boundOnInputMethodChanged_ = null; 240 this.boundOnInputMethodChanged_ = null;
230 } 241 }
231 }, 242 },
232 243
233 /** 244 /**
234 * Updates the prospective UI language based on the new pref value. 245 * Updates the prospective UI language based on the new pref value.
235 * @param {string} prospectiveUILanguage 246 * @param {string} prospectiveUILanguage
236 * @private 247 * @private
237 */ 248 */
238 prospectiveUILanguageChanged_: function(prospectiveUILanguage) { 249 prospectiveUILanguageChanged_: function(prospectiveUILanguage) {
239 this.set('languages.prospectiveUILanguage', 250 this.set(
251 'languages.prospectiveUILanguage',
240 prospectiveUILanguage || this.originalProspectiveUILanguage_); 252 prospectiveUILanguage || this.originalProspectiveUILanguage_);
241 }, 253 },
242 254
243 /** 255 /**
244 * Updates the list of enabled languages from the preferred languages pref. 256 * Updates the list of enabled languages from the preferred languages pref.
245 * @private 257 * @private
246 */ 258 */
247 preferredLanguagesPrefChanged_: function() { 259 preferredLanguagesPrefChanged_: function() {
248 var enabledLanguageStates = this.getEnabledLanguageStates_( 260 var enabledLanguageStates = this.getEnabledLanguageStates_(
249 this.languages.translateTarget, this.languages.prospectiveUILanguage); 261 this.languages.translateTarget, this.languages.prospectiveUILanguage);
250 262
251 // Recreate the enabled language set before updating languages.enabled. 263 // Recreate the enabled language set before updating languages.enabled.
252 this.enabledLanguageSet_.clear(); 264 this.enabledLanguageSet_.clear();
253 for (var i = 0; i < enabledLanguageStates.length; i++) 265 for (var i = 0; i < enabledLanguageStates.length; i++)
254 this.enabledLanguageSet_.add(enabledLanguageStates[i].language.code); 266 this.enabledLanguageSet_.add(enabledLanguageStates[i].language.code);
255 267
256 this.set('languages.enabled', enabledLanguageStates); 268 this.set('languages.enabled', enabledLanguageStates);
257 }, 269 },
258 270
259 /** 271 /**
260 * Updates the spellCheckEnabled state of each enabled language. 272 * Updates the spellCheckEnabled state of each enabled language.
261 * @private 273 * @private
262 */ 274 */
263 spellCheckDictionariesPrefChanged_: function() { 275 spellCheckDictionariesPrefChanged_: function() {
264 var spellCheckSet = this.makeSetFromArray_(/** @type {!Array<string>} */( 276 var spellCheckSet = this.makeSetFromArray_(/** @type {!Array<string>} */ (
265 this.getPref('spellcheck.dictionaries').value)); 277 this.getPref('spellcheck.dictionaries').value));
266 for (var i = 0; i < this.languages.enabled.length; i++) { 278 for (var i = 0; i < this.languages.enabled.length; i++) {
267 var languageState = this.languages.enabled[i]; 279 var languageState = this.languages.enabled[i];
268 this.set('languages.enabled.' + i + '.spellCheckEnabled', 280 this.set(
269 !!spellCheckSet.has(languageState.language.code)); 281 'languages.enabled.' + i + '.spellCheckEnabled',
282 !!spellCheckSet.has(languageState.language.code));
270 } 283 }
271 }, 284 },
272 285
273 /** @private */ 286 /** @private */
274 translateLanguagesPrefChanged_: function() { 287 translateLanguagesPrefChanged_: function() {
275 var translateBlockedPref = this.getPref('translate_blocked_languages'); 288 var translateBlockedPref = this.getPref('translate_blocked_languages');
276 var translateBlockedSet = this.makeSetFromArray_( 289 var translateBlockedSet = this.makeSetFromArray_(
277 /** @type {!Array<string>} */(translateBlockedPref.value)); 290 /** @type {!Array<string>} */ (translateBlockedPref.value));
278 291
279 for (var i = 0; i < this.languages.enabled.length; i++) { 292 for (var i = 0; i < this.languages.enabled.length; i++) {
280 if (this.languages.enabled[i].language.code == 293 if (this.languages.enabled[i].language.code ==
281 this.languages.prospectiveUILanguage) { 294 this.languages.prospectiveUILanguage) {
282 continue; 295 continue;
283 } 296 }
284 var translateCode = this.convertLanguageCodeForTranslate( 297 var translateCode = this.convertLanguageCodeForTranslate(
285 this.languages.enabled[i].language.code); 298 this.languages.enabled[i].language.code);
286 this.set( 299 this.set(
287 'languages.enabled.' + i + '.translateEnabled', 300 'languages.enabled.' + i + '.translateEnabled',
288 !translateBlockedSet.has(translateCode)); 301 !translateBlockedSet.has(translateCode));
289 } 302 }
290 }, 303 },
291 304
292 /** 305 /**
293 * Constructs the languages model. 306 * Constructs the languages model.
294 * @param {!Array<!chrome.languageSettingsPrivate.Language>} 307 * @param {!Array<!chrome.languageSettingsPrivate.Language>}
295 * supportedLanguages 308 * supportedLanguages
296 * @param {string} translateTarget Language code of the default translate 309 * @param {string} translateTarget Language code of the default translate
297 * target language. 310 * target language.
298 * @param {!Array<!chrome.languageSettingsPrivate.InputMethod>|undefined} 311 * @param {!Array<!chrome.languageSettingsPrivate.InputMethod>|undefined}
299 * supportedInputMethods Input methods (Chrome OS only). 312 * supportedInputMethods Input methods (Chrome OS only).
300 * @param {string|undefined} currentInputMethodId ID of the currently used 313 * @param {string|undefined} currentInputMethodId ID of the currently used
301 * input method (Chrome OS only). 314 * input method (Chrome OS only).
302 * @private 315 * @private
303 */ 316 */
304 createModel_: function(supportedLanguages, translateTarget, 317 createModel_: function(
305 supportedInputMethods, currentInputMethodId) { 318 supportedLanguages, translateTarget, supportedInputMethods,
319 currentInputMethodId) {
306 // Populate the hash map of supported languages. 320 // Populate the hash map of supported languages.
307 for (var i = 0; i < supportedLanguages.length; i++) { 321 for (var i = 0; i < supportedLanguages.length; i++) {
308 var language = supportedLanguages[i]; 322 var language = supportedLanguages[i];
309 language.supportsUI = !!language.supportsUI; 323 language.supportsUI = !!language.supportsUI;
310 language.supportsTranslate = !!language.supportsTranslate; 324 language.supportsTranslate = !!language.supportsTranslate;
311 language.supportsSpellcheck = !!language.supportsSpellcheck; 325 language.supportsSpellcheck = !!language.supportsSpellcheck;
312 this.supportedLanguageMap_.set(language.code, language); 326 this.supportedLanguageMap_.set(language.code, language);
313 } 327 }
314 328
315 if (supportedInputMethods) { 329 if (supportedInputMethods) {
(...skipping 13 matching lines...) Expand all
329 this.languageInputMethods_.set(languageCode, [inputMethod]); 343 this.languageInputMethods_.set(languageCode, [inputMethod]);
330 else 344 else
331 this.languageInputMethods_.get(languageCode).push(inputMethod); 345 this.languageInputMethods_.get(languageCode).push(inputMethod);
332 } 346 }
333 } 347 }
334 } 348 }
335 349
336 var prospectiveUILanguage; 350 var prospectiveUILanguage;
337 if (cr.isChromeOS || cr.isWindows) { 351 if (cr.isChromeOS || cr.isWindows) {
338 prospectiveUILanguage = 352 prospectiveUILanguage =
339 /** @type {string} */(this.getPref('intl.app_locale').value) || 353 /** @type {string} */ (this.getPref('intl.app_locale').value) ||
340 this.originalProspectiveUILanguage_; 354 this.originalProspectiveUILanguage_;
341 } 355 }
342 356
343 // Create a list of enabled languages from the supported languages. 357 // Create a list of enabled languages from the supported languages.
344 var enabledLanguageStates = 358 var enabledLanguageStates =
345 this.getEnabledLanguageStates_(translateTarget, prospectiveUILanguage); 359 this.getEnabledLanguageStates_(translateTarget, prospectiveUILanguage);
346 // Populate the hash set of enabled languages. 360 // Populate the hash set of enabled languages.
347 for (var l = 0; l < enabledLanguageStates.length; l++) 361 for (var l = 0; l < enabledLanguageStates.length; l++)
348 this.enabledLanguageSet_.add(enabledLanguageStates[l].language.code); 362 this.enabledLanguageSet_.add(enabledLanguageStates[l].language.code);
349 363
350 var model = /** @type {!LanguagesModel} */({ 364 var model = /** @type {!LanguagesModel} */ ({
351 supported: supportedLanguages, 365 supported: supportedLanguages,
352 enabled: enabledLanguageStates, 366 enabled: enabledLanguageStates,
353 translateTarget: translateTarget, 367 translateTarget: translateTarget,
354 }); 368 });
355 369
356 if (cr.isChromeOS || cr.isWindows) 370 if (cr.isChromeOS || cr.isWindows)
357 model.prospectiveUILanguage = prospectiveUILanguage; 371 model.prospectiveUILanguage = prospectiveUILanguage;
358 372
359 if (cr.isChromeOS) { 373 if (cr.isChromeOS) {
360 model.inputMethods = /** @type {!InputMethodsModel} */({ 374 model.inputMethods = /** @type {!InputMethodsModel} */ ({
361 supported: supportedInputMethods, 375 supported: supportedInputMethods,
362 enabled: this.getEnabledInputMethods_(), 376 enabled: this.getEnabledInputMethods_(),
363 currentId: currentInputMethodId, 377 currentId: currentInputMethodId,
364 }); 378 });
365 } 379 }
366 380
367 // Initialize the Polymer languages model. 381 // Initialize the Polymer languages model.
368 this._setLanguages(model); 382 this._setLanguages(model);
369 }, 383 },
370 384
371 /** 385 /**
372 * Returns a list of LanguageStates for each enabled language in the supported 386 * Returns a list of LanguageStates for each enabled language in the supported
373 * languages list. 387 * languages list.
374 * @param {string} translateTarget Language code of the default translate 388 * @param {string} translateTarget Language code of the default translate
375 * target language. 389 * target language.
376 * @param {(string|undefined)} prospectiveUILanguage Prospective UI display 390 * @param {(string|undefined)} prospectiveUILanguage Prospective UI display
377 * language. Only defined on Windows and Chrome OS. 391 * language. Only defined on Windows and Chrome OS.
378 * @return {!Array<!LanguageState>} 392 * @return {!Array<!LanguageState>}
379 * @private 393 * @private
380 */ 394 */
381 getEnabledLanguageStates_: function(translateTarget, prospectiveUILanguage) { 395 getEnabledLanguageStates_: function(translateTarget, prospectiveUILanguage) {
382 assert(CrSettingsPrefs.isInitialized); 396 assert(CrSettingsPrefs.isInitialized);
383 397
384 var pref = this.getPref(preferredLanguagesPrefName); 398 var pref = this.getPref(preferredLanguagesPrefName);
385 var enabledLanguageCodes = pref.value.split(','); 399 var enabledLanguageCodes = pref.value.split(',');
386 var spellCheckPref = this.getPref('spellcheck.dictionaries'); 400 var spellCheckPref = this.getPref('spellcheck.dictionaries');
387 var spellCheckSet = this.makeSetFromArray_(/** @type {!Array<string>} */( 401 var spellCheckSet = this.makeSetFromArray_(
388 spellCheckPref.value)); 402 /** @type {!Array<string>} */ (spellCheckPref.value));
389 403
390 var translateBlockedPref = this.getPref('translate_blocked_languages'); 404 var translateBlockedPref = this.getPref('translate_blocked_languages');
391 var translateBlockedSet = this.makeSetFromArray_( 405 var translateBlockedSet = this.makeSetFromArray_(
392 /** @type {!Array<string>} */(translateBlockedPref.value)); 406 /** @type {!Array<string>} */ (translateBlockedPref.value));
393 407
394 var enabledLanguageStates = []; 408 var enabledLanguageStates = [];
395 for (var i = 0; i < enabledLanguageCodes.length; i++) { 409 for (var i = 0; i < enabledLanguageCodes.length; i++) {
396 var code = enabledLanguageCodes[i]; 410 var code = enabledLanguageCodes[i];
397 var language = this.supportedLanguageMap_.get(code); 411 var language = this.supportedLanguageMap_.get(code);
398 // Skip unsupported languages. 412 // Skip unsupported languages.
399 if (!language) 413 if (!language)
400 continue; 414 continue;
401 var languageState = /** @type {LanguageState} */({}); 415 var languageState = /** @type {LanguageState} */ ({});
402 languageState.language = language; 416 languageState.language = language;
403 languageState.spellCheckEnabled = !!spellCheckSet.has(code); 417 languageState.spellCheckEnabled = !!spellCheckSet.has(code);
404 // Translate is considered disabled if this language maps to any translate 418 // Translate is considered disabled if this language maps to any translate
405 // language that is blocked. 419 // language that is blocked.
406 var translateCode = this.convertLanguageCodeForTranslate(code); 420 var translateCode = this.convertLanguageCodeForTranslate(code);
407 languageState.translateEnabled = 421 languageState.translateEnabled = !!language.supportsTranslate &&
408 !!language.supportsTranslate &&
409 !translateBlockedSet.has(translateCode) && 422 !translateBlockedSet.has(translateCode) &&
410 translateCode != translateTarget && 423 translateCode != translateTarget &&
411 (!prospectiveUILanguage || code != prospectiveUILanguage); 424 (!prospectiveUILanguage || code != prospectiveUILanguage);
412 enabledLanguageStates.push(languageState); 425 enabledLanguageStates.push(languageState);
413 } 426 }
414 return enabledLanguageStates; 427 return enabledLanguageStates;
415 }, 428 },
416 429
417 /** 430 /**
418 * Returns a list of enabled input methods. 431 * Returns a list of enabled input methods.
419 * @return {!Array<!chrome.languageSettingsPrivate.InputMethod>} 432 * @return {!Array<!chrome.languageSettingsPrivate.InputMethod>}
420 * @private 433 * @private
421 */ 434 */
422 getEnabledInputMethods_: function() { 435 getEnabledInputMethods_: function() {
423 assert(cr.isChromeOS); 436 assert(cr.isChromeOS);
424 assert(CrSettingsPrefs.isInitialized); 437 assert(CrSettingsPrefs.isInitialized);
425 438
426 var enabledInputMethodIds = 439 var enabledInputMethodIds =
427 this.getPref('settings.language.preload_engines').value.split(','); 440 this.getPref('settings.language.preload_engines').value.split(',');
428 enabledInputMethodIds = enabledInputMethodIds.concat(this.getPref( 441 enabledInputMethodIds = enabledInputMethodIds.concat(
429 'settings.language.enabled_extension_imes').value.split(',')); 442 this.getPref('settings.language.enabled_extension_imes')
443 .value.split(','));
430 444
431 // Return only supported input methods. 445 // Return only supported input methods.
432 return enabledInputMethodIds.map(function(id) { 446 return enabledInputMethodIds
433 return this.supportedInputMethodMap_.get(id); 447 .map(function(id) {
434 }.bind(this)).filter(function(inputMethod) { 448 return this.supportedInputMethodMap_.get(id);
435 return !!inputMethod; 449 }.bind(this))
436 }); 450 .filter(function(inputMethod) {
451 return !!inputMethod;
452 });
437 }, 453 },
438 454
439 /** @private */ 455 /** @private */
440 updateEnabledInputMethods_: function() { 456 updateEnabledInputMethods_: function() {
441 assert(cr.isChromeOS); 457 assert(cr.isChromeOS);
442 var enabledInputMethods = this.getEnabledInputMethods_(); 458 var enabledInputMethods = this.getEnabledInputMethods_();
443 var enabledInputMethodSet = this.makeSetFromArray_(enabledInputMethods); 459 var enabledInputMethodSet = this.makeSetFromArray_(enabledInputMethods);
444 460
445 for (var i = 0; i < this.languages.inputMethods.supported.length; i++) { 461 for (var i = 0; i < this.languages.inputMethods.supported.length; i++) {
446 this.set('languages.inputMethods.supported.' + i + '.enabled', 462 this.set(
463 'languages.inputMethods.supported.' + i + '.enabled',
447 enabledInputMethodSet.has(this.languages.inputMethods.supported[i])); 464 enabledInputMethodSet.has(this.languages.inputMethods.supported[i]));
448 } 465 }
449 this.set('languages.inputMethods.enabled', enabledInputMethods); 466 this.set('languages.inputMethods.enabled', enabledInputMethods);
450 }, 467 },
451 468
452 /** 469 /**
453 * Updates the |removable| property of the enabled language states based 470 * Updates the |removable| property of the enabled language states based
454 * on what other languages and input methods are enabled. 471 * on what other languages and input methods are enabled.
455 * @private 472 * @private
456 */ 473 */
457 updateRemovableLanguages_: function() { 474 updateRemovableLanguages_: function() {
458 assert(this.languages); 475 assert(this.languages);
459 // TODO(michaelpg): Enabled input methods can affect which languages are 476 // TODO(michaelpg): Enabled input methods can affect which languages are
460 // removable, so run updateEnabledInputMethods_ first (if it has been 477 // removable, so run updateEnabledInputMethods_ first (if it has been
461 // scheduled). 478 // scheduled).
462 if (cr.isChromeOS) 479 if (cr.isChromeOS)
463 this.updateEnabledInputMethods_(); 480 this.updateEnabledInputMethods_();
464 481
465 for (var i = 0; i < this.languages.enabled.length; i++) { 482 for (var i = 0; i < this.languages.enabled.length; i++) {
466 var languageState = this.languages.enabled[i]; 483 var languageState = this.languages.enabled[i];
467 this.set('languages.enabled.' + i + '.removable', 484 this.set(
485 'languages.enabled.' + i + '.removable',
468 this.canDisableLanguage(languageState.language.code)); 486 this.canDisableLanguage(languageState.language.code));
469 } 487 }
470 }, 488 },
471 489
472 /** 490 /**
473 * Creates a Set from the elements of the array. 491 * Creates a Set from the elements of the array.
474 * @param {!Array<T>} list 492 * @param {!Array<T>} list
475 * @return {!Set<T>} 493 * @return {!Set<T>}
476 * @template T 494 * @template T
477 * @private 495 * @private
478 */ 496 */
479 makeSetFromArray_: function(list) { 497 makeSetFromArray_: function(list) {
480 return new Set(list); 498 return new Set(list);
481 }, 499 },
482 500
483 // LanguageHelper implementation. 501 // LanguageHelper implementation.
484 // TODO(michaelpg): replace duplicate docs with @override once b/24294625 502 // TODO(michaelpg): replace duplicate docs with @override once b/24294625
485 // is fixed. 503 // is fixed.
486 504
487 /** @return {!Promise} */ 505 /** @return {!Promise} */
488 whenReady: function() { 506 whenReady: function() {
489 return this.resolver_.promise; 507 return this.resolver_.promise;
490 }, 508 },
491 509
492 // <if expr="chromeos or is_win"> 510 // <if expr="chromeos or is_win">
493 /** 511 /**
494 * Sets the prospective UI language to the chosen language. This won't affect 512 * Sets the prospective UI language to the chosen language. This won't affect
495 * the actual UI language until a restart. 513 * the actual UI language until a restart.
496 * @param {string} languageCode 514 * @param {string} languageCode
497 */ 515 */
498 setProspectiveUILanguage: function(languageCode) { 516 setProspectiveUILanguage: function(languageCode) {
499 this.browserProxy_.setProspectiveUILanguage(languageCode); 517 this.browserProxy_.setProspectiveUILanguage(languageCode);
500 }, 518 },
501 519
502 /** 520 /**
503 * True if the prospective UI language was changed from its starting value. 521 * True if the prospective UI language was changed from its starting value.
504 * @return {boolean} 522 * @return {boolean}
505 */ 523 */
506 requiresRestart: function() { 524 requiresRestart: function() {
507 return this.originalProspectiveUILanguage_ != 525 return this.originalProspectiveUILanguage_ !=
508 this.languages.prospectiveUILanguage; 526 this.languages.prospectiveUILanguage;
509 }, 527 },
510 // </if> 528 // </if>
511 529
512 /** 530 /**
513 * @param {string} languageCode 531 * @param {string} languageCode
514 * @return {boolean} True if the language is enabled. 532 * @return {boolean} True if the language is enabled.
515 */ 533 */
516 isLanguageEnabled: function(languageCode) { 534 isLanguageEnabled: function(languageCode) {
517 return this.enabledLanguageSet_.has(languageCode); 535 return this.enabledLanguageSet_.has(languageCode);
518 }, 536 },
519 537
520 /** 538 /**
(...skipping 19 matching lines...) Expand all
540 assert(this.canDisableLanguage(languageCode)); 558 assert(this.canDisableLanguage(languageCode));
541 559
542 // Remove the language from spell check. 560 // Remove the language from spell check.
543 this.deletePrefListItem('spellcheck.dictionaries', languageCode); 561 this.deletePrefListItem('spellcheck.dictionaries', languageCode);
544 562
545 if (cr.isChromeOS) { 563 if (cr.isChromeOS) {
546 // Remove input methods that don't support any other enabled language. 564 // Remove input methods that don't support any other enabled language.
547 var inputMethods = this.languageInputMethods_.get(languageCode) || []; 565 var inputMethods = this.languageInputMethods_.get(languageCode) || [];
548 for (var i = 0; i < inputMethods.length; i++) { 566 for (var i = 0; i < inputMethods.length; i++) {
549 var inputMethod = inputMethods[i]; 567 var inputMethod = inputMethods[i];
550 var supportsOtherEnabledLanguages = inputMethod.languageCodes.some( 568 var supportsOtherEnabledLanguages =
551 function(otherLanguageCode) { 569 inputMethod.languageCodes.some(function(otherLanguageCode) {
552 return otherLanguageCode != languageCode && 570 return otherLanguageCode != languageCode &&
553 this.isLanguageEnabled(otherLanguageCode); 571 this.isLanguageEnabled(otherLanguageCode);
554 }.bind(this)); 572 }.bind(this));
555 if (!supportsOtherEnabledLanguages) 573 if (!supportsOtherEnabledLanguages)
556 this.removeInputMethod(inputMethod.id); 574 this.removeInputMethod(inputMethod.id);
557 } 575 }
558 } 576 }
559 577
560 // Remove the language from preferred languages. 578 // Remove the language from preferred languages.
561 this.languageSettingsPrivate_.disableLanguage(languageCode); 579 this.languageSettingsPrivate_.disableLanguage(languageCode);
(...skipping 11 matching lines...) Expand all
573 591
574 // Cannot disable the only enabled language. 592 // Cannot disable the only enabled language.
575 if (this.languages.enabled.length == 1) 593 if (this.languages.enabled.length == 1)
576 return false; 594 return false;
577 595
578 if (!cr.isChromeOS) 596 if (!cr.isChromeOS)
579 return true; 597 return true;
580 598
581 // If this is the only enabled language that is supported by all enabled 599 // If this is the only enabled language that is supported by all enabled
582 // component IMEs, it cannot be disabled because we need those IMEs. 600 // component IMEs, it cannot be disabled because we need those IMEs.
583 var otherInputMethodsEnabled = this.languages.enabled.some( 601 var otherInputMethodsEnabled =
584 function(languageState) { 602 this.languages.enabled.some(function(languageState) {
585 var otherLanguageCode = languageState.language.code; 603 var otherLanguageCode = languageState.language.code;
586 if (otherLanguageCode == languageCode) 604 if (otherLanguageCode == languageCode)
587 return false; 605 return false;
588 var inputMethods = this.languageInputMethods_.get(otherLanguageCode); 606 var inputMethods = this.languageInputMethods_.get(otherLanguageCode);
589 return inputMethods && inputMethods.some(function(inputMethod) { 607 return inputMethods && inputMethods.some(function(inputMethod) {
590 return this.isComponentIme(inputMethod) && 608 return this.isComponentIme(inputMethod) &&
591 this.supportedInputMethodMap_.get(inputMethod.id).enabled; 609 this.supportedInputMethodMap_.get(inputMethod.id).enabled;
592 }, this); 610 }, this);
593 }, this); 611 }, this);
594 return otherInputMethodsEnabled; 612 return otherInputMethodsEnabled;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
657 languageCode = this.convertLanguageCodeForTranslate(languageCode); 675 languageCode = this.convertLanguageCodeForTranslate(languageCode);
658 this.deletePrefListItem('translate_blocked_languages', languageCode); 676 this.deletePrefListItem('translate_blocked_languages', languageCode);
659 }, 677 },
660 678
661 /** 679 /**
662 * Disables translate for the given language by adding the translate 680 * Disables translate for the given language by adding the translate
663 * language to the blocked languages preference. 681 * language to the blocked languages preference.
664 * @param {string} languageCode 682 * @param {string} languageCode
665 */ 683 */
666 disableTranslateLanguage: function(languageCode) { 684 disableTranslateLanguage: function(languageCode) {
667 this.appendPrefListItem('translate_blocked_languages', 685 this.appendPrefListItem(
686 'translate_blocked_languages',
668 this.convertLanguageCodeForTranslate(languageCode)); 687 this.convertLanguageCodeForTranslate(languageCode));
669 }, 688 },
670 689
671 /** 690 /**
672 * Enables or disables spell check for the given language. 691 * Enables or disables spell check for the given language.
673 * @param {string} languageCode 692 * @param {string} languageCode
674 * @param {boolean} enable 693 * @param {boolean} enable
675 */ 694 */
676 toggleSpellCheck: function(languageCode, enable) { 695 toggleSpellCheck: function(languageCode, enable) {
677 if (!this.languages) 696 if (!this.languages)
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 }, 745 },
727 746
728 /** 747 /**
729 * @param {string} languageCode 748 * @param {string} languageCode
730 * @return {!chrome.languageSettingsPrivate.Language|undefined} 749 * @return {!chrome.languageSettingsPrivate.Language|undefined}
731 */ 750 */
732 getLanguage: function(languageCode) { 751 getLanguage: function(languageCode) {
733 return this.supportedLanguageMap_.get(languageCode); 752 return this.supportedLanguageMap_.get(languageCode);
734 }, 753 },
735 754
736 // <if expr="chromeos"> 755 // <if expr="chromeos">
737 /** @param {string} id */ 756 /** @param {string} id */
738 addInputMethod: function(id) { 757 addInputMethod: function(id) {
739 if (!this.supportedInputMethodMap_.has(id)) 758 if (!this.supportedInputMethodMap_.has(id))
740 return; 759 return;
741 this.languageSettingsPrivate_.addInputMethod(id); 760 this.languageSettingsPrivate_.addInputMethod(id);
742 }, 761 },
743 762
744 /** @param {string} id */ 763 /** @param {string} id */
745 removeInputMethod: function(id) { 764 removeInputMethod: function(id) {
746 if (!this.supportedInputMethodMap_.has(id)) 765 if (!this.supportedInputMethodMap_.has(id))
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
781 800
782 /** @param {string} id Added input method ID. */ 801 /** @param {string} id Added input method ID. */
783 onInputMethodAdded_: function(id) { 802 onInputMethodAdded_: function(id) {
784 this.updateEnabledInputMethods_(); 803 this.updateEnabledInputMethods_();
785 }, 804 },
786 805
787 /** @param {string} id Removed input method ID. */ 806 /** @param {string} id Removed input method ID. */
788 onInputMethodRemoved_: function(id) { 807 onInputMethodRemoved_: function(id) {
789 this.updateEnabledInputMethods_(); 808 this.updateEnabledInputMethods_();
790 }, 809 },
791 // </if> 810 // </if>
792 }); 811 });
793 })(); 812 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698