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 |