OLD | NEW |
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('cr.ui', function() { | 5 cr.define('cr.ui', function() { |
6 | 6 |
7 /** | 7 /** |
8 * Creates a new list item element. | 8 * Creates a new list item element. |
9 * @param {string} opt_label The text label for the item. | 9 * @param {string} opt_label The text label for the item. |
10 * @constructor | 10 * @constructor |
11 * @extends {HTMLLIElement} | 11 * @extends {HTMLLIElement} |
12 */ | 12 */ |
13 var ListItem = cr.ui.define('li'); | 13 var ListItem = cr.ui.define('li'); |
14 | 14 |
15 ListItem.prototype = { | 15 ListItem.prototype = { |
16 __proto__: HTMLLIElement.prototype, | 16 __proto__: HTMLLIElement.prototype, |
17 | 17 |
18 /** | 18 /** |
19 * Plain text label. | 19 * Plain text label. |
20 * @type {string} | 20 * @type {string} |
21 */ | 21 */ |
22 get label() { | 22 get label() { |
23 return this.textContent; | 23 return this.textContent; |
24 }, | 24 }, |
25 set label(label) { | 25 set label(label) { |
26 this.textContent = label; | 26 this.textContent = label; |
27 }, | 27 }, |
28 | 28 |
29 /** | 29 /** |
| 30 * The current selection state. |
| 31 * @type {Boolean} |
| 32 */ |
| 33 get selected() { |
| 34 return this.hasAttribute('selected'); |
| 35 }, |
| 36 set selected(selected) { |
| 37 selected = Boolean(selected); |
| 38 var oldSelected = this.selected; |
| 39 if (oldSelected == selected) |
| 40 return; |
| 41 |
| 42 if (selected) |
| 43 this.setAttribute('selected', ''); |
| 44 else |
| 45 this.removeAttribute('selected'); |
| 46 |
| 47 cr.dispatchPropertyChange(this, 'selected', selected, oldSelected); |
| 48 this.selectionChanged(); |
| 49 }, |
| 50 |
| 51 /** |
30 * Called when an element is decorated as a list item. | 52 * Called when an element is decorated as a list item. |
31 */ | 53 */ |
32 decorate: function() { | 54 decorate: function() { |
33 } | 55 }, |
| 56 |
| 57 /** |
| 58 * Called when the selection state of this element changes. |
| 59 */ |
| 60 selectionChanged: function() { |
| 61 }, |
34 }; | 62 }; |
35 | 63 |
36 /** | 64 /** |
37 * Whether the item is selected. Setting this does not update the underlying | 65 * Whether the item is selected. Setting this does not update the underlying |
38 * selection model. This is only used for display purpose. | 66 * selection model. This is only used for display purpose. |
39 * @type {boolean} | 67 * @type {boolean} |
40 */ | 68 */ |
41 cr.defineProperty(ListItem, 'selected', cr.PropertyKind.BOOL_ATTR); | 69 cr.defineProperty(ListItem, 'selected', cr.PropertyKind.BOOL_ATTR); |
42 | 70 |
43 /** | 71 /** |
44 * Whether the item is the lead in a selection. Setting this does not update | 72 * Whether the item is the lead in a selection. Setting this does not update |
45 * the underlying selection model. This is only used for display purpose. | 73 * the underlying selection model. This is only used for display purpose. |
46 * @type {boolean} | 74 * @type {boolean} |
47 */ | 75 */ |
48 cr.defineProperty(ListItem, 'lead', cr.PropertyKind.BOOL_ATTR); | 76 cr.defineProperty(ListItem, 'lead', cr.PropertyKind.BOOL_ATTR); |
49 | 77 |
50 return { | 78 return { |
51 ListItem: ListItem | 79 ListItem: ListItem |
52 }; | 80 }; |
53 }); | 81 }); |
OLD | NEW |