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

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

Issue 3041025: Implement "Add" and "Remove" buttons in Language and Input page. (Closed)
Patch Set: link-button Created 10 years, 4 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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.language', function() { 5 cr.define('options.language', function() {
6 const List = cr.ui.List; 6 const List = cr.ui.List;
7 const ListItem = cr.ui.ListItem; 7 const ListItem = cr.ui.ListItem;
8 const ArrayDataModel = cr.ui.ArrayDataModel; 8 const ArrayDataModel = cr.ui.ArrayDataModel;
9 const LanguageOptions = options.LanguageOptions;
9 10
10 /** 11 /**
11 * Creates a new language list. 12 * Creates a new language list.
12 * @param {Object=} opt_propertyBag Optional properties. 13 * @param {Object=} opt_propertyBag Optional properties.
13 * @constructor 14 * @constructor
14 * @extends {cr.ui.List} 15 * @extends {cr.ui.List}
15 */ 16 */
16 var LanguageList = cr.ui.define('list'); 17 var LanguageList = cr.ui.define('list');
17 18
19 /**
20 * Gets display name from the given language code.
21 * @param {string} languageCode Language code (ex. "fr").
22 */
23 LanguageList.getDisplayNameFromLanguageCode = function(languageCode) {
24 // Build the language code to display name dictionary at first time.
25 if (!this.languageCodeToDisplayName_) {
26 this.languageCodeToDisplayName_ = {};
27 var languageList = templateData.languageList;
28 for (var i = 0; i < languageList.length; i++) {
29 var language = languageList[i];
30 this.languageCodeToDisplayName_[language.code] = language.displayName;
31 }
32 }
33
34 return this.languageCodeToDisplayName_[languageCode];
35 }
36
18 LanguageList.prototype = { 37 LanguageList.prototype = {
19 __proto__: List.prototype, 38 __proto__: List.prototype,
20 39
21 pref: 'settings.language.preferred_languages', 40 pref: 'settings.language.preferred_languages',
22 41
23 /** @inheritDoc */ 42 /** @inheritDoc */
24 decorate: function() { 43 decorate: function() {
25 List.prototype.decorate.call(this); 44 List.prototype.decorate.call(this);
26 45
27 // HACK(arv): http://crbug.com/40902 46 // HACK(arv): http://crbug.com/40902
28 window.addEventListener('resize', cr.bind(this.redraw, this)); 47 window.addEventListener('resize', cr.bind(this.redraw, this));
29 48
30 // Listen to pref change. 49 // Listen to pref change.
31 Preferences.getInstance().addEventListener(this.pref, 50 Preferences.getInstance().addEventListener(this.pref,
32 cr.bind(this.handlePrefChange_, this)); 51 cr.bind(this.handlePrefChange_, this));
33 }, 52 },
34 53
35 createItem: function(languageCode) { 54 createItem: function(languageCode) {
36 var languageDisplayName = localStrings.getString(languageCode); 55 var languageDisplayName =
56 LanguageList.getDisplayNameFromLanguageCode(languageCode);
37 return new ListItem({label: languageDisplayName}); 57 return new ListItem({label: languageDisplayName});
38 }, 58 },
39 59
60 /*
61 * Adds a language to the language list.
62 * @param {string} languageCode language code (ex. "fr").
63 */
64 addLanguage: function(languageCode) {
65 var dataModel = this.dataModel;
66 dataModel.push(languageCode);
67
68 this.updateBackend_();
69 },
70
71 /*
72 * Gets the language codes of the currently listed languages.
73 */
74 getLanguageCodes: function() {
75 return this.dataModel.slice();
76 },
77
78 /*
79 * Gets the language code of the selected language.
80 */
81 getSelectedLanguageCode: function() {
82 return this.selectedItem;
83 },
84
85 /*
86 * Removes the currently selected language.
87 */
88 removeSelectedLanguage: function() {
89 if (this.selectionModel.selectedIndex >= 0 &&
90 // Don't allow removing the last language.
91 this.dataModel.length > 1) {
92 // TODO(satorux): Until we switch to the single selection model,
93 // it's possible that multiple languages are selected, but we don't
94 // handle that case here.
95 var originalIndex = this.selectionModel.selectedIndex;
96 this.dataModel.splice(this.selectionModel.selectedIndex, 1);
97 // Select the item at the original index if possible. Otherwise,
98 // select the last item.
99 // TODO(satorux): This should be handled by the selection model
100 // See crbug.com/49893.
101 this.selectionModel.selectedIndex = Math.min(
102 originalIndex,
103 this.dataModel.length - 1);
104 var newLanguageCodes = this.dataModel.slice();
105 this.load_(newLanguageCodes);
106 this.updateBackend_();
107 }
108 },
109
40 /** 110 /**
41 * Handles pref change. 111 * Handles pref change.
42 * @param {Event} e The change event object. 112 * @param {Event} e The change event object.
43 * @private 113 * @private
44 */ 114 */
45 handlePrefChange_: function(e) { 115 handlePrefChange_: function(e) {
46 var languageCodesInCsv = e.value; 116 var languageCodesInCsv = e.value;
47 var languageCodes = this.filterBadLanguageCodes_( 117 var languageCodes = this.filterBadLanguageCodes_(
48 languageCodesInCsv.split(',')); 118 languageCodesInCsv.split(','));
49 this.load_(languageCodes); 119 this.load_(languageCodes);
(...skipping 25 matching lines...) Expand all
75 * Filters bad language codes in case bad language codes are 145 * Filters bad language codes in case bad language codes are
76 * stored in the preference. 146 * stored in the preference.
77 * @param {Array} languageCodes List of language codes. 147 * @param {Array} languageCodes List of language codes.
78 * @private 148 * @private
79 */ 149 */
80 filterBadLanguageCodes_: function(languageCodes) { 150 filterBadLanguageCodes_: function(languageCodes) {
81 var filteredLanguageCodes = []; 151 var filteredLanguageCodes = [];
82 for (var i = 0; i < languageCodes.length; i++) { 152 for (var i = 0; i < languageCodes.length; i++) {
83 // Check if the translation for the language code is 153 // Check if the translation for the language code is
84 // present. Otherwise, skip it. 154 // present. Otherwise, skip it.
85 if (localStrings.getString(languageCodes[i])) { 155 if (LanguageList.getDisplayNameFromLanguageCode(languageCodes[i])) {
86 filteredLanguageCodes.push(languageCodes[i]); 156 filteredLanguageCodes.push(languageCodes[i]);
87 } 157 }
88 } 158 }
89 return filteredLanguageCodes; 159 return filteredLanguageCodes;
90 }, 160 },
91 }; 161 };
92 162
93 return { 163 return {
94 LanguageList: LanguageList 164 LanguageList: LanguageList
95 }; 165 };
96 }); 166 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698