| 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 |