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

Side by Side Diff: chrome/browser/resources/options/language_list.js

Issue 23923007: Bug fix: Append a language to the list after blocking it for Translate on Chrome OS (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 3 months 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 (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
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 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698