OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 ArrayDataModel = cr.ui.ArrayDataModel; | 6 const ArrayDataModel = cr.ui.ArrayDataModel; |
7 const LanguageOptions = options.LanguageOptions; | 7 const LanguageOptions = options.LanguageOptions; |
8 const List = cr.ui.List; | 8 const List = cr.ui.List; |
9 const ListItem = cr.ui.ListItem; | 9 const ListItem = cr.ui.ListItem; |
10 const ListSingleSelectionModel = cr.ui.ListSingleSelectionModel; | 10 const ListSingleSelectionModel = cr.ui.ListSingleSelectionModel; |
11 | 11 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 | 85 |
86 /** @inheritDoc */ | 86 /** @inheritDoc */ |
87 decorate: function() { | 87 decorate: function() { |
88 List.prototype.decorate.call(this); | 88 List.prototype.decorate.call(this); |
89 this.selectionModel = new ListSingleSelectionModel; | 89 this.selectionModel = new ListSingleSelectionModel; |
90 | 90 |
91 // HACK(arv): http://crbug.com/40902 | 91 // HACK(arv): http://crbug.com/40902 |
92 window.addEventListener('resize', this.redraw.bind(this)); | 92 window.addEventListener('resize', this.redraw.bind(this)); |
93 | 93 |
94 // Listen to pref change. | 94 // Listen to pref change. |
95 Preferences.getInstance().addEventListener(this.preferredLanguagesPref, | 95 if (cr.isChromeOS) { |
96 this.handlePreferredLanguagesPrefChange_.bind(this)); | 96 Preferences.getInstance().addEventListener(this.preferredLanguagesPref, |
| 97 this.handlePreferredLanguagesPrefChange_.bind(this)); |
| 98 } else { |
| 99 Preferences.getInstance().addEventListener(this.acceptLanguagesPref, |
| 100 this.handleAcceptLanguagesPrefChange_.bind(this)); |
| 101 } |
97 | 102 |
98 // Listen to drag and drop events. | 103 // Listen to drag and drop events. |
99 this.addEventListener('dragstart', this.handleDragStart_.bind(this)); | 104 this.addEventListener('dragstart', this.handleDragStart_.bind(this)); |
100 this.addEventListener('dragenter', this.handleDragEnter_.bind(this)); | 105 this.addEventListener('dragenter', this.handleDragEnter_.bind(this)); |
101 this.addEventListener('dragover', this.handleDragOver_.bind(this)); | 106 this.addEventListener('dragover', this.handleDragOver_.bind(this)); |
102 this.addEventListener('drop', this.handleDrop_.bind(this)); | 107 this.addEventListener('drop', this.handleDrop_.bind(this)); |
103 }, | 108 }, |
104 | 109 |
105 createItem: function(languageCode) { | 110 createItem: function(languageCode) { |
106 var languageDisplayName = | 111 var languageDisplayName = |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 * @param {Event} e The dragstart event. | 182 * @param {Event} e The dragstart event. |
178 * @private | 183 * @private |
179 */ | 184 */ |
180 handleDragStart_: function(e) { | 185 handleDragStart_: function(e) { |
181 var target = e.target; | 186 var target = e.target; |
182 // ListItem should be the only draggable element type in the page, | 187 // ListItem should be the only draggable element type in the page, |
183 // but just in case. | 188 // but just in case. |
184 if (target instanceof ListItem) { | 189 if (target instanceof ListItem) { |
185 this.draggedItem = target; | 190 this.draggedItem = target; |
186 e.dataTransfer.effectAllowed = 'move'; | 191 e.dataTransfer.effectAllowed = 'move'; |
| 192 // We need to put some kind of data in the drag or it will be |
| 193 // ignored. Use the display name in case the user drags to a text |
| 194 // field or the desktop. |
| 195 e.dataTransfer.setData('text/plain', target.title); |
187 } | 196 } |
188 }, | 197 }, |
189 | 198 |
190 /* | 199 /* |
191 * Handles the dragenter event. | 200 * Handles the dragenter event. |
192 * @param {Event} e The dragenter event. | 201 * @param {Event} e The dragenter event. |
193 * @private | 202 * @private |
194 */ | 203 */ |
195 handleDragEnter_: function(e) { | 204 handleDragEnter_: function(e) { |
196 e.preventDefault(); | 205 e.preventDefault(); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 * @private | 258 * @private |
250 */ | 259 */ |
251 handlePreferredLanguagesPrefChange_: function(e) { | 260 handlePreferredLanguagesPrefChange_: function(e) { |
252 var languageCodesInCsv = e.value.value; | 261 var languageCodesInCsv = e.value.value; |
253 var languageCodes = this.filterBadLanguageCodes_( | 262 var languageCodes = this.filterBadLanguageCodes_( |
254 languageCodesInCsv.split(',')); | 263 languageCodesInCsv.split(',')); |
255 this.load_(languageCodes); | 264 this.load_(languageCodes); |
256 }, | 265 }, |
257 | 266 |
258 /** | 267 /** |
| 268 * Handles accept languages pref change. |
| 269 * @param {Event} e The change event object. |
| 270 * @private |
| 271 */ |
| 272 handleAcceptLanguagesPrefChange_: function(e) { |
| 273 var languageCodesInCsv = e.value.value; |
| 274 var languageCodes = this.filterBadLanguageCodes_( |
| 275 languageCodesInCsv.split(',')); |
| 276 this.load_(languageCodes); |
| 277 }, |
| 278 |
| 279 /** |
259 * Loads given language list. | 280 * Loads given language list. |
260 * @param {Array} languageCodes List of language codes. | 281 * @param {Array} languageCodes List of language codes. |
261 * @private | 282 * @private |
262 */ | 283 */ |
263 load_: function(languageCodes) { | 284 load_: function(languageCodes) { |
264 // Preserve the original selected index. See comments below. | 285 // Preserve the original selected index. See comments below. |
265 var originalSelectedIndex = (this.selectionModel ? | 286 var originalSelectedIndex = (this.selectionModel ? |
266 this.selectionModel.selectedIndex : -1); | 287 this.selectionModel.selectedIndex : -1); |
267 this.dataModel = new ArrayDataModel(languageCodes); | 288 this.dataModel = new ArrayDataModel(languageCodes); |
268 if (originalSelectedIndex >= 0 && | 289 if (originalSelectedIndex >= 0 && |
(...skipping 10 matching lines...) Expand all Loading... |
279 // automatically, hence we manually select the first item here. | 300 // automatically, hence we manually select the first item here. |
280 this.selectionModel.selectedIndex = 0; | 301 this.selectionModel.selectedIndex = 0; |
281 } | 302 } |
282 }, | 303 }, |
283 | 304 |
284 /** | 305 /** |
285 * Saves the preference. | 306 * Saves the preference. |
286 */ | 307 */ |
287 savePreference_: function() { | 308 savePreference_: function() { |
288 // Encode the language codes into a CSV string. | 309 // Encode the language codes into a CSV string. |
289 Preferences.setStringPref(this.preferredLanguagesPref, | 310 if (cr.isChromeOS) |
290 this.dataModel.slice().join(',')); | 311 Preferences.setStringPref(this.preferredLanguagesPref, |
| 312 this.dataModel.slice().join(',')); |
291 // Save the same language list as accept languages preference as | 313 // Save the same language list as accept languages preference as |
292 // well, but we need to expand the language list, to make it more | 314 // well, but we need to expand the language list, to make it more |
293 // acceptable. For instance, some web sites don't understand 'en-US' | 315 // acceptable. For instance, some web sites don't understand 'en-US' |
294 // but 'en'. See crosbug.com/9884. | 316 // but 'en'. See crosbug.com/9884. |
295 var acceptLanguages = this.expandLanguageCodes(this.dataModel.slice()); | 317 var acceptLanguages = this.expandLanguageCodes(this.dataModel.slice()); |
296 Preferences.setStringPref(this.acceptLanguagesPref, | 318 Preferences.setStringPref(this.acceptLanguagesPref, |
297 acceptLanguages.join(',')); | 319 acceptLanguages.join(',')); |
298 cr.dispatchSimpleEvent(this, 'save'); | 320 cr.dispatchSimpleEvent(this, 'save'); |
299 }, | 321 }, |
300 | 322 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
342 } | 364 } |
343 } | 365 } |
344 return filteredLanguageCodes; | 366 return filteredLanguageCodes; |
345 }, | 367 }, |
346 }; | 368 }; |
347 | 369 |
348 return { | 370 return { |
349 LanguageList: LanguageList | 371 LanguageList: LanguageList |
350 }; | 372 }; |
351 }); | 373 }); |
OLD | NEW |