Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 cr.define('options', function() { | 5 cr.define('options', function() { |
| 6 /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel; | 6 /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel; |
| 7 /** @const */ var DeletableItem = options.DeletableItem; | 7 /** @const */ var DeletableItem = options.DeletableItem; |
| 8 /** @const */ var DeletableItemList = options.DeletableItemList; | 8 /** @const */ var DeletableItemList = options.DeletableItemList; |
| 9 /** @const */ var List = cr.ui.List; | 9 /** @const */ var List = cr.ui.List; |
| 10 /** @const */ var ListItem = cr.ui.ListItem; | 10 /** @const */ var ListItem = cr.ui.ListItem; |
| (...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 400 // Note that ListSingleSelectionModel won't select an item | 400 // Note that ListSingleSelectionModel won't select an item |
| 401 // automatically, hence we manually select the first item here. | 401 // automatically, hence we manually select the first item here. |
| 402 this.selectionModel.selectedIndex = 0; | 402 this.selectionModel.selectedIndex = 0; |
| 403 } | 403 } |
| 404 }, | 404 }, |
| 405 | 405 |
| 406 /** | 406 /** |
| 407 * Saves the preference. | 407 * Saves the preference. |
| 408 */ | 408 */ |
| 409 savePreference_: function() { | 409 savePreference_: function() { |
| 410 // Encode the language codes into a CSV string. | 410 chrome.send('updateLanguageList', [this.dataModel.slice()]); |
| 411 if (cr.isChromeOS) | |
|
Takashi Toyoshima
2013/09/09 12:26:11
Originally, preferredLanguagesPref is used by othe
hajimehoshi
2013/09/10 03:21:45
I guess that this option page was just only for Ch
| |
| 412 Preferences.setStringPref(this.preferredLanguagesPref, | |
| 413 this.dataModel.slice().join(','), true); | |
| 414 // Save the same language list as accept languages preference as | |
| 415 // well, but we need to expand the language list, to make it more | |
| 416 // acceptable. For instance, some web sites don't understand 'en-US' | |
| 417 // but 'en'. See crosbug.com/9884. | |
| 418 var acceptLanguages = this.expandLanguageCodes(this.dataModel.slice()); | |
| 419 Preferences.setStringPref(this.acceptLanguagesPref, | |
| 420 acceptLanguages.join(','), true); | |
| 421 cr.dispatchSimpleEvent(this, 'save'); | 411 cr.dispatchSimpleEvent(this, 'save'); |
| 422 }, | 412 }, |
| 423 | 413 |
| 424 /** | 414 /** |
| 425 * Expands language codes to make these more suitable for Accept-Language. | |
| 426 * Example: ['en-US', 'ja', 'en-CA'] => ['en-US', 'en', 'ja', 'en-CA']. | |
| 427 * 'en' won't appear twice as this function eliminates duplicates. | |
| 428 * @param {Array} languageCodes List of language codes. | |
| 429 * @private | |
| 430 */ | |
| 431 expandLanguageCodes: function(languageCodes) { | |
| 432 var expandedLanguageCodes = []; | |
| 433 var seen = {}; // Used to eliminiate duplicates. | |
| 434 for (var i = 0; i < languageCodes.length; i++) { | |
| 435 var languageCode = languageCodes[i]; | |
| 436 if (!(languageCode in seen)) { | |
| 437 expandedLanguageCodes.push(languageCode); | |
| 438 seen[languageCode] = true; | |
| 439 } | |
| 440 var parts = languageCode.split('-'); | |
| 441 if (!(parts[0] in seen)) { | |
| 442 expandedLanguageCodes.push(parts[0]); | |
| 443 seen[parts[0]] = true; | |
| 444 } | |
| 445 } | |
| 446 return expandedLanguageCodes; | |
| 447 }, | |
| 448 | |
| 449 /** | |
| 450 * Filters bad language codes in case bad language codes are | 415 * Filters bad language codes in case bad language codes are |
| 451 * stored in the preference. Removes duplicates as well. | 416 * stored in the preference. Removes duplicates as well. |
| 452 * @param {Array} languageCodes List of language codes. | 417 * @param {Array} languageCodes List of language codes. |
| 453 * @private | 418 * @private |
| 454 */ | 419 */ |
| 455 filterBadLanguageCodes_: function(languageCodes) { | 420 filterBadLanguageCodes_: function(languageCodes) { |
| 456 var filteredLanguageCodes = []; | 421 var filteredLanguageCodes = []; |
| 457 var seen = {}; | 422 var seen = {}; |
| 458 for (var i = 0; i < languageCodes.length; i++) { | 423 for (var i = 0; i < languageCodes.length; i++) { |
| 459 // Check if the the language code is valid, and not | 424 // Check if the the language code is valid, and not |
| 460 // duplicate. Otherwise, skip it. | 425 // duplicate. Otherwise, skip it. |
| 461 if (LanguageList.isValidLanguageCode(languageCodes[i]) && | 426 if (LanguageList.isValidLanguageCode(languageCodes[i]) && |
| 462 !(languageCodes[i] in seen)) { | 427 !(languageCodes[i] in seen)) { |
| 463 filteredLanguageCodes.push(languageCodes[i]); | 428 filteredLanguageCodes.push(languageCodes[i]); |
| 464 seen[languageCodes[i]] = true; | 429 seen[languageCodes[i]] = true; |
| 465 } | 430 } |
| 466 } | 431 } |
| 467 return filteredLanguageCodes; | 432 return filteredLanguageCodes; |
| 468 }, | 433 }, |
| 469 }; | 434 }; |
| 470 | 435 |
| 471 return { | 436 return { |
| 472 LanguageList: LanguageList, | 437 LanguageList: LanguageList, |
| 473 LanguageListItem: LanguageListItem | 438 LanguageListItem: LanguageListItem |
| 474 }; | 439 }; |
| 475 }); | 440 }); |
| OLD | NEW |