| 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 |