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

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

Issue 1372053002: Flesh out the location-page class to make it more general. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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' provides convenient access to 6 * @fileoverview 'settings-languages' provides convenient access to
7 * Chrome's language and input method settings. 7 * Chrome's language and input method settings.
8 * 8 *
9 * Instances of this element have a 'languages' property, which reflects the 9 * Instances of this element have a 'languages' property, which reflects the
10 * current language settings. The 'languages' property is read-only, meaning 10 * current language settings. The 'languages' property is read-only, meaning
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 /** 185 /**
186 * Singleton element created when settings-languages is registered. 186 * Singleton element created when settings-languages is registered.
187 * Generates the languages model on start-up, and updates it whenever Chrome's 187 * Generates the languages model on start-up, and updates it whenever Chrome's
188 * pref store and other settings change. These updates propagate to each 188 * pref store and other settings change. These updates propagate to each
189 * <settings-language> instance so that their 'languages' property updates 189 * <settings-language> instance so that their 'languages' property updates
190 * like any other Polymer property. 190 * like any other Polymer property.
191 */ 191 */
192 Polymer({ 192 Polymer({
193 is: 'settings-languages-singleton', 193 is: 'settings-languages-singleton',
194 194
195 behaviors: [PrefsBehavior],
196
195 properties: { 197 properties: {
196 /** 198 /**
197 * @type {LanguagesModel|undefined} 199 * @type {LanguagesModel|undefined}
198 */ 200 */
199 languages: { 201 languages: {
200 type: Object, 202 type: Object,
201 notify: true, 203 notify: true,
202 }, 204 },
203 205
204 /** 206 /**
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 * Returns a list of LanguageInfos for each enabled language in the supported 303 * Returns a list of LanguageInfos for each enabled language in the supported
302 * languages list. 304 * languages list.
303 * @param {string} translateTarget Language code of the default translate 305 * @param {string} translateTarget Language code of the default translate
304 * target language. 306 * target language.
305 * @return {!Array<!LanguageInfo>} 307 * @return {!Array<!LanguageInfo>}
306 * @private 308 * @private
307 */ 309 */
308 getEnabledLanguages_: function(translateTarget) { 310 getEnabledLanguages_: function(translateTarget) {
309 assert(CrSettingsPrefs.isInitialized); 311 assert(CrSettingsPrefs.isInitialized);
310 312
311 var pref = this.getPref_(preferredLanguagesPrefName); 313 var pref = this.getPref(preferredLanguagesPrefName);
312 var enabledLanguageCodes = pref.value.split(','); 314 var enabledLanguageCodes = pref.value.split(',');
313 var enabledLanguages = /** @type {!Array<!LanguageInfo>} */ []; 315 var enabledLanguages = /** @type {!Array<!LanguageInfo>} */ [];
314 316
315 var spellCheckPref = this.getPref_('spellcheck.dictionaries'); 317 var spellCheckPref = this.getPref('spellcheck.dictionaries');
316 var spellCheckMap = this.makeMapFromArray_(/** @type {!Array<string>} */( 318 var spellCheckMap = this.makeMapFromArray_(/** @type {!Array<string>} */(
317 spellCheckPref.value)); 319 spellCheckPref.value));
318 320
319 var translateBlockedPref = this.getPref_('translate_blocked_languages'); 321 var translateBlockedPref = this.getPref('translate_blocked_languages');
320 var translateBlockedMap = this.makeMapFromArray_( 322 var translateBlockedMap = this.makeMapFromArray_(
321 /** @type {!Array<string>} */(translateBlockedPref.value)); 323 /** @type {!Array<string>} */(translateBlockedPref.value));
322 324
323 for (var i = 0; i < enabledLanguageCodes.length; i++) { 325 for (var i = 0; i < enabledLanguageCodes.length; i++) {
324 var code = enabledLanguageCodes[i]; 326 var code = enabledLanguageCodes[i];
325 var language = this.supportedLanguageMap_[code]; 327 var language = this.supportedLanguageMap_[code];
326 if (!language) 328 if (!language)
327 continue; 329 continue;
328 var state = {}; 330 var state = {};
329 state.spellCheckEnabled = !!spellCheckMap[code]; 331 state.spellCheckEnabled = !!spellCheckMap[code];
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 374
373 /** 375 /**
374 * Updates the spellCheckEnabled state of each enabled language. 376 * Updates the spellCheckEnabled state of each enabled language.
375 * @private 377 * @private
376 */ 378 */
377 spellCheckDictionariesPrefChanged_: function() { 379 spellCheckDictionariesPrefChanged_: function() {
378 if (!this.initialized_) 380 if (!this.initialized_)
379 return; 381 return;
380 382
381 var spellCheckMap = this.makeMapFromArray_(/** @type {!Array<string>} */( 383 var spellCheckMap = this.makeMapFromArray_(/** @type {!Array<string>} */(
382 this.getPref_('spellcheck.dictionaries').value)); 384 this.getPref('spellcheck.dictionaries').value));
383 for (var i = 0; i < this.languages.enabledLanguages.length; i++) { 385 for (var i = 0; i < this.languages.enabledLanguages.length; i++) {
384 var languageCode = this.languages.enabledLanguages[i].language.code; 386 var languageCode = this.languages.enabledLanguages[i].language.code;
385 this.set('languages.enabledLanguages.' + i + '.state.spellCheckEnabled', 387 this.set('languages.enabledLanguages.' + i + '.state.spellCheckEnabled',
386 !!spellCheckMap[languageCode]); 388 !!spellCheckMap[languageCode]);
387 } 389 }
388 }, 390 },
389 391
390 translateLanguagesPrefChanged_: function() { 392 translateLanguagesPrefChanged_: function() {
391 if (!this.initialized_) 393 if (!this.initialized_)
392 return; 394 return;
393 395
394 var translateBlockedPref = this.getPref_('translate_blocked_languages'); 396 var translateBlockedPref = this.getPref('translate_blocked_languages');
395 var translateBlockedMap = this.makeMapFromArray_( 397 var translateBlockedMap = this.makeMapFromArray_(
396 /** @type {!Array<string>} */(translateBlockedPref.value)); 398 /** @type {!Array<string>} */(translateBlockedPref.value));
397 399
398 for (var i = 0; i < this.languages.enabledLanguages.length; i++) { 400 for (var i = 0; i < this.languages.enabledLanguages.length; i++) {
399 var translateCode = this.convertLanguageCodeForTranslate( 401 var translateCode = this.convertLanguageCodeForTranslate(
400 this.languages.enabledLanguages[i].language.code); 402 this.languages.enabledLanguages[i].language.code);
401 this.set( 403 this.set(
402 'languages.enabledLanguages.' + i + '.state.translateEnabled', 404 'languages.enabledLanguages.' + i + '.state.translateEnabled',
403 !translateBlockedMap[translateCode]); 405 !translateBlockedMap[translateCode]);
404 } 406 }
405 }, 407 },
406 408
407 /** 409 /**
408 * Gets the pref at the given key. Asserts if the pref is not found.
409 * @param {string} key
410 * @return {!chrome.settingsPrivate.PrefObject}
411 */
412 getPref_: function(key) {
413 var pref = /** @type {!chrome.settingsPrivate.PrefObject} */(
414 this.get(key, this.prefs));
415 assert(typeof pref != 'undefined', 'Pref is missing: ' + key);
416 return pref;
417 },
418
419 /**
420 * Sets the value of the pref at the given key. Asserts if the pref is not
421 * found.
422 * @param {string} key
423 * @param {*} value
424 */
425 setPrefValue_: function(key, value) {
426 this.getPref_(key);
427 this.set('prefs.' + key + '.value', value);
428 },
429
430 /**
431 * Deletes the given item from the pref at the given key if the item is found. 410 * Deletes the given item from the pref at the given key if the item is found.
432 * Asserts if the pref itself is not found or is not an Array type. 411 * Asserts if the pref itself is not found or is not an Array type.
433 * @param {string} key 412 * @param {string} key
434 * @param {*} item 413 * @param {*} item
435 */ 414 */
436 deletePrefItem_: function(key, item) { 415 deletePrefItem_: function(key, item) {
437 assert(this.getPref_(key).type == chrome.settingsPrivate.PrefType.LIST); 416 assert(this.getPref(key).type == chrome.settingsPrivate.PrefType.LIST);
438 this.arrayDelete('prefs.' + key + '.value', item); 417 this.arrayDelete('prefs.' + key + '.value', item);
439 }, 418 },
440 419
441 /** 420 /**
442 * Windows and Chrome OS only: Sets the prospective UI language to the chosen 421 * Windows and Chrome OS only: Sets the prospective UI language to the chosen
443 * language. This dosen't affect the actual UI language until a restart. 422 * language. This dosen't affect the actual UI language until a restart.
444 * @param {string} languageCode 423 * @param {string} languageCode
445 */ 424 */
446 setUILanguage: function(languageCode) { 425 setUILanguage: function(languageCode) {
447 chrome.send('setUILanguage', [languageCode]); 426 chrome.send('setUILanguage', [languageCode]);
448 }, 427 },
449 428
450 /** 429 /**
451 * Windows and Chrome OS only: Resets the prospective UI language back to the 430 * Windows and Chrome OS only: Resets the prospective UI language back to the
452 * actual UI language. 431 * actual UI language.
453 */ 432 */
454 resetUILanguage: function() { 433 resetUILanguage: function() {
455 chrome.send('setUILanguage', [navigator.language]); 434 chrome.send('setUILanguage', [navigator.language]);
456 }, 435 },
457 436
458 /** 437 /**
459 * Returns the "prospective" UI language, i.e. the one to be used on next 438 * Returns the "prospective" UI language, i.e. the one to be used on next
460 * restart. If the pref is not set, the current UI language is also the 439 * restart. If the pref is not set, the current UI language is also the
461 * "prospective" language. 440 * "prospective" language.
462 * @return {string} Language code of the prospective UI language. 441 * @return {string} Language code of the prospective UI language.
463 * @private 442 * @private
464 */ 443 */
465 getProspectiveUILanguage: function() { 444 getProspectiveUILanguage: function() {
466 return /** @type {string} */(this.getPref_('intl.app_locale').value) || 445 return /** @type {string} */(this.getPref('intl.app_locale').value) ||
467 navigator.language; 446 navigator.language;
468 }, 447 },
469 448
470 /** 449 /**
471 * Enables the language, making it available for spell check and input. 450 * Enables the language, making it available for spell check and input.
472 * @param {string} languageCode 451 * @param {string} languageCode
473 */ 452 */
474 enableLanguage: function(languageCode) { 453 enableLanguage: function(languageCode) {
475 if (!CrSettingsPrefs.isInitialized) 454 if (!CrSettingsPrefs.isInitialized)
476 return; 455 return;
477 456
478 var languageCodes = 457 var languageCodes =
479 this.getPref_(preferredLanguagesPrefName).value.split(','); 458 this.getPref(preferredLanguagesPrefName).value.split(',');
480 if (languageCodes.indexOf(languageCode) > -1) 459 if (languageCodes.indexOf(languageCode) > -1)
481 return; 460 return;
482 languageCodes.push(languageCode); 461 languageCodes.push(languageCode);
483 chrome.languageSettingsPrivate.setLanguageList(languageCodes); 462 chrome.languageSettingsPrivate.setLanguageList(languageCodes);
484 this.disableTranslateLanguage(languageCode); 463 this.disableTranslateLanguage(languageCode);
485 }, 464 },
486 465
487 /** 466 /**
488 * Disables the language. 467 * Disables the language.
489 * @param {string} languageCode 468 * @param {string} languageCode
490 */ 469 */
491 disableLanguage: function(languageCode) { 470 disableLanguage: function(languageCode) {
492 if (!CrSettingsPrefs.isInitialized) 471 if (!CrSettingsPrefs.isInitialized)
493 return; 472 return;
494 473
495 // Cannot disable the UI language. 474 // Cannot disable the UI language.
496 assert(languageCode != this.getProspectiveUILanguage()); 475 assert(languageCode != this.getProspectiveUILanguage());
497 476
498 // Cannot disable the only enabled language. 477 // Cannot disable the only enabled language.
499 var languageCodes = 478 var languageCodes =
500 this.getPref_(preferredLanguagesPrefName).value.split(','); 479 this.getPref(preferredLanguagesPrefName).value.split(',');
501 assert(languageCodes.length > 1); 480 assert(languageCodes.length > 1);
502 481
503 // Remove the language from spell check. 482 // Remove the language from spell check.
504 this.deletePrefItem_('spellcheck.dictionaries', languageCode); 483 this.deletePrefItem_('spellcheck.dictionaries', languageCode);
505 484
506 var languageIndex = languageCodes.indexOf(languageCode); 485 var languageIndex = languageCodes.indexOf(languageCode);
507 if (languageIndex == -1) 486 if (languageIndex == -1)
508 return; 487 return;
509 languageCodes.splice(languageIndex, 1); 488 languageCodes.splice(languageIndex, 1);
510 chrome.languageSettingsPrivate.setLanguageList(languageCodes); 489 chrome.languageSettingsPrivate.setLanguageList(languageCodes);
(...skipping 18 matching lines...) Expand all
529 this.arrayDelete('prefs.translate_blocked_languages.value', languageCode); 508 this.arrayDelete('prefs.translate_blocked_languages.value', languageCode);
530 }, 509 },
531 510
532 /** 511 /**
533 * Disables translate for the given language by adding the translate 512 * Disables translate for the given language by adding the translate
534 * language to the blocked languages preference. 513 * language to the blocked languages preference.
535 * @param {string} languageCode 514 * @param {string} languageCode
536 */ 515 */
537 disableTranslateLanguage: function(languageCode) { 516 disableTranslateLanguage: function(languageCode) {
538 languageCode = this.convertLanguageCodeForTranslate(languageCode); 517 languageCode = this.convertLanguageCodeForTranslate(languageCode);
539 if (this.getPref_('translate_blocked_languages').value 518 if (this.getPref('translate_blocked_languages').value
540 .indexOf(languageCode) == -1) { 519 .indexOf(languageCode) == -1) {
541 this.push('prefs.translate_blocked_languages.value', languageCode); 520 this.push('prefs.translate_blocked_languages.value', languageCode);
542 } 521 }
543 }, 522 },
544 523
545 /** 524 /**
546 * Enables or disables spell check for the given language. 525 * Enables or disables spell check for the given language.
547 * @param {string} languageCode 526 * @param {string} languageCode
548 * @param {boolean} enable 527 * @param {boolean} enable
549 */ 528 */
550 toggleSpellCheck: function(languageCode, enable) { 529 toggleSpellCheck: function(languageCode, enable) {
551 if (!this.initialized_) 530 if (!this.initialized_)
552 return; 531 return;
553 532
554 if (enable) { 533 if (enable) {
555 var spellCheckPref = this.getPref_('spellcheck.dictionaries'); 534 var spellCheckPref = this.getPref('spellcheck.dictionaries');
556 if (spellCheckPref.value.indexOf(languageCode) == -1) 535 if (spellCheckPref.value.indexOf(languageCode) == -1)
557 this.push('prefs.spellcheck.dictionaries.value', languageCode); 536 this.push('prefs.spellcheck.dictionaries.value', languageCode);
558 } else { 537 } else {
559 this.arrayDelete('prefs.spellcheck.dictionaries.value', languageCode); 538 this.arrayDelete('prefs.spellcheck.dictionaries.value', languageCode);
560 } 539 }
561 }, 540 },
562 541
563 /** 542 /**
564 * Converts the language code for translate. There are some differences 543 * Converts the language code for translate. There are some differences
565 * between the language set the Translate server uses and that for 544 * between the language set the Translate server uses and that for
(...skipping 12 matching lines...) Expand all
578 // necessary as a language code for the Translate server. 557 // necessary as a language code for the Translate server.
579 return languageCode; 558 return languageCode;
580 } 559 }
581 if (main in kTranslateLanguageSynonyms) 560 if (main in kTranslateLanguageSynonyms)
582 return kTranslateLanguageSynonyms[main]; 561 return kTranslateLanguageSynonyms[main];
583 562
584 return main; 563 return main;
585 }, 564 },
586 }); 565 });
587 })(); 566 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698