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; |
11 /** @const */ var ListSingleSelectionModel = cr.ui.ListSingleSelectionModel; | 11 /** @const */ var ListSingleSelectionModel = cr.ui.ListSingleSelectionModel; |
12 | 12 |
13 /** | 13 /** |
14 * Creates a new Language list item. | 14 * Creates a new Language list item. |
15 * @param {Object} languageInfo The information of the language. | 15 * @param {Object} languageInfo The information of the language. |
16 * @constructor | 16 * @constructor |
17 * @extends {options.DeletableItem.ListItem} | 17 * @extends {options.DeletableItem} |
18 */ | 18 */ |
19 function LanguageListItem(languageInfo) { | 19 function LanguageListItem(languageInfo) { |
20 var el = cr.doc.createElement('li'); | 20 var el = cr.doc.createElement('li'); |
21 el.__proto__ = LanguageListItem.prototype; | 21 el.__proto__ = LanguageListItem.prototype; |
22 el.language_ = languageInfo; | 22 el.language_ = languageInfo; |
23 el.decorate(); | 23 el.decorate(); |
24 return el; | 24 return el; |
25 }; | 25 }; |
26 | 26 |
27 LanguageListItem.prototype = { | 27 LanguageListItem.prototype = { |
28 __proto__: DeletableItem.prototype, | 28 __proto__: DeletableItem.prototype, |
29 | 29 |
30 /** | 30 /** |
31 * The language code of this language. | 31 * The language code of this language. |
32 * @type {string} | 32 * @type {?string} |
33 * @private | 33 * @private |
34 */ | 34 */ |
35 languageCode_: null, | 35 languageCode_: null, |
36 | 36 |
37 /** @override */ | 37 /** @override */ |
38 decorate: function() { | 38 decorate: function() { |
39 DeletableItem.prototype.decorate.call(this); | 39 DeletableItem.prototype.decorate.call(this); |
40 | 40 |
41 var languageCode = this.language_.code; | 41 var languageCode = this.language_.code; |
42 var languageOptions = options.LanguageOptions.getInstance(); | 42 var languageOptions = options.LanguageOptions.getInstance(); |
43 this.deletable = languageOptions.languageIsDeletable(languageCode); | 43 this.deletable = languageOptions.languageIsDeletable(languageCode); |
44 this.languageCode = languageCode; | 44 this.languageCode = languageCode; |
45 this.languageName = cr.doc.createElement('div'); | 45 this.languageName = cr.doc.createElement('div'); |
46 this.languageName.className = 'language-name'; | 46 this.languageName.className = 'language-name'; |
47 this.languageName.dir = this.language_.textDirection; | 47 this.languageName.dir = this.language_.textDirection; |
48 this.languageName.textContent = this.language_.displayName; | 48 this.languageName.textContent = this.language_.displayName; |
49 this.contentElement.appendChild(this.languageName); | 49 this.contentElement.appendChild(this.languageName); |
50 this.title = this.language_.nativeDisplayName; | 50 this.title = this.language_.nativeDisplayName; |
51 this.draggable = true; | 51 this.draggable = true; |
52 }, | 52 }, |
53 }; | 53 }; |
54 | 54 |
55 /** | 55 /** |
56 * Creates a new language list. | 56 * Creates a new language list. |
57 * @param {Object=} opt_propertyBag Optional properties. | 57 * @param {Object=} opt_propertyBag Optional properties. |
58 * @constructor | 58 * @constructor |
59 * @extends {cr.ui.List} | 59 * @extends {options.DeletableItemList} |
60 */ | 60 */ |
61 var LanguageList = cr.ui.define('list'); | 61 var LanguageList = cr.ui.define('list'); |
62 | 62 |
63 /** | 63 /** |
64 * Gets information of a language from the given language code. | 64 * Gets information of a language from the given language code. |
65 * @param {string} languageCode Language code (ex. "fr"). | 65 * @param {string} languageCode Language code (ex. "fr"). |
66 */ | 66 */ |
67 LanguageList.getLanguageInfoFromLanguageCode = function(languageCode) { | 67 LanguageList.getLanguageInfoFromLanguageCode = function(languageCode) { |
68 // Build the language code to language info dictionary at first time. | 68 // Build the language code to language info dictionary at first time. |
69 if (!this.languageCodeToLanguageInfo_) { | 69 if (!this.languageCodeToLanguageInfo_) { |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 } | 125 } |
126 | 126 |
127 // Listen to drag and drop events. | 127 // Listen to drag and drop events. |
128 this.addEventListener('dragstart', this.handleDragStart_.bind(this)); | 128 this.addEventListener('dragstart', this.handleDragStart_.bind(this)); |
129 this.addEventListener('dragenter', this.handleDragEnter_.bind(this)); | 129 this.addEventListener('dragenter', this.handleDragEnter_.bind(this)); |
130 this.addEventListener('dragover', this.handleDragOver_.bind(this)); | 130 this.addEventListener('dragover', this.handleDragOver_.bind(this)); |
131 this.addEventListener('drop', this.handleDrop_.bind(this)); | 131 this.addEventListener('drop', this.handleDrop_.bind(this)); |
132 this.addEventListener('dragleave', this.handleDragLeave_.bind(this)); | 132 this.addEventListener('dragleave', this.handleDragLeave_.bind(this)); |
133 }, | 133 }, |
134 | 134 |
| 135 /** |
| 136 * @override |
| 137 * @param {string} languageCode |
| 138 */ |
135 createItem: function(languageCode) { | 139 createItem: function(languageCode) { |
136 languageInfo = LanguageList.getLanguageInfoFromLanguageCode(languageCode); | 140 var languageInfo = |
| 141 LanguageList.getLanguageInfoFromLanguageCode(languageCode); |
137 return new LanguageListItem(languageInfo); | 142 return new LanguageListItem(languageInfo); |
138 }, | 143 }, |
139 | 144 |
140 /* | 145 /* |
141 * For each item, determines whether it's deletable. | 146 * For each item, determines whether it's deletable. |
142 */ | 147 */ |
143 updateDeletable: function() { | 148 updateDeletable: function() { |
144 var items = this.items; | 149 var items = this.items; |
145 for (var i = 0; i < items.length; ++i) { | 150 for (var i = 0; i < items.length; ++i) { |
146 var item = items[i]; | 151 var item = items[i]; |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
372 */ | 377 */ |
373 handleAcceptLanguagesPrefChange_: function(e) { | 378 handleAcceptLanguagesPrefChange_: function(e) { |
374 var languageCodesInCsv = e.value.value; | 379 var languageCodesInCsv = e.value.value; |
375 var languageCodes = this.filterBadLanguageCodes_( | 380 var languageCodes = this.filterBadLanguageCodes_( |
376 languageCodesInCsv.split(',')); | 381 languageCodesInCsv.split(',')); |
377 this.load_(languageCodes); | 382 this.load_(languageCodes); |
378 }, | 383 }, |
379 | 384 |
380 /** | 385 /** |
381 * Loads given language list. | 386 * Loads given language list. |
382 * @param {Array} languageCodes List of language codes. | 387 * @param {!Array} languageCodes List of language codes. |
383 * @private | 388 * @private |
384 */ | 389 */ |
385 load_: function(languageCodes) { | 390 load_: function(languageCodes) { |
386 // Preserve the original selected index. See comments below. | 391 // Preserve the original selected index. See comments below. |
387 var originalSelectedIndex = (this.selectionModel ? | 392 var originalSelectedIndex = (this.selectionModel ? |
388 this.selectionModel.selectedIndex : -1); | 393 this.selectionModel.selectedIndex : -1); |
389 this.dataModel = new ArrayDataModel(languageCodes); | 394 this.dataModel = new ArrayDataModel(languageCodes); |
390 if (originalSelectedIndex >= 0 && | 395 if (originalSelectedIndex >= 0 && |
391 originalSelectedIndex < this.dataModel.length) { | 396 originalSelectedIndex < this.dataModel.length) { |
392 // Restore the original selected index if the selected index is | 397 // Restore the original selected index if the selected index is |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
431 } | 436 } |
432 return filteredLanguageCodes; | 437 return filteredLanguageCodes; |
433 }, | 438 }, |
434 }; | 439 }; |
435 | 440 |
436 return { | 441 return { |
437 LanguageList: LanguageList, | 442 LanguageList: LanguageList, |
438 LanguageListItem: LanguageListItem | 443 LanguageListItem: LanguageListItem |
439 }; | 444 }; |
440 }); | 445 }); |
OLD | NEW |