OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 })(); |
OLD | NEW |