blob: a670a1f27f424f5fffc8623a2abbcedb3c5c5445 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
cr.define('cr.ui', function() {
/**
* Creates a new list item element.
* @param {string} opt_label The text label for the item.
* @constructor
* @extends {HTMLLIElement}
*/
var ListItem = cr.ui.define('li');
ListItem.prototype = {
__proto__: HTMLLIElement.prototype,
/**
* Plain text label.
* @type {string}
*/
get label() {
return this.textContent;
},
set label(label) {
this.textContent = label;
},
/**
* This item's index in the containing list.
* @type {number}
*/
listIndex_: -1,
/**
* Called when an element is decorated as a list item.
*/
decorate: function() {
this.setAttribute('role', 'listitem');
},
/**
* Called when the selection state of this element changes.
*/
selectionChanged: function() {
},
};
/**
* Whether the item is selected. Setting this does not update the underlying
* selection model. This is only used for display purpose.
* @type {boolean}
*/
cr.defineProperty(ListItem, 'selected', cr.PropertyKind.BOOL_ATTR,
function() {
this.selectionChanged();
});
/**
* Whether the item is the lead in a selection. Setting this does not update
* the underlying selection model. This is only used for display purpose.
* @type {boolean}
*/
cr.defineProperty(ListItem, 'lead', cr.PropertyKind.BOOL_ATTR);
/**
* This item's index in the containing list.
* @type {number}
*/
cr.defineProperty(ListItem, 'listIndex');
return {
ListItem: ListItem
};
});