not really known
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

141 lines
3.5 KiB

/**
_enyo.Selection_ is used to manage row selection state for lists. It
provides selection state management for both single-select and multi-select
lists.
// The following is an excerpt from enyo.FlyweightRepeater.
enyo.kind({
name: "enyo.FlyweightRepeater",
...
components: [
{kind: "Selection", onSelect: "selectDeselect", onDeselect: "selectDeselect"},
...
],
tap: function(inSender, inEvent) {
...
// mark the tapped row as selected
this.$.selection.select(inEvent.index);
...
},
selectDeselect: function(inSender, inEvent) {
// this is where a row selection highlight might be applied
this.renderRow(inEvent.key);
}
...
})
*/
enyo.kind({
name: "enyo.Selection",
kind: enyo.Component,
published: {
//* If true, multiple selections are allowed.
multi: false
},
events: {
/**
Fires when an item is selected.
{kind: "Selection", onSelect: "selectRow"...
...
selectRow: function(inSender, inKey, inPrivateData) {
...
_inKey_ is whatever key was used to register
the selection (usually a row index).
_inPrivateData_ references data registered
with this key by the code that made the original selection.
*/
onSelect: "",
/**
Fires when an item is deselected.
{kind: "Selection", onSelect: "deselectRow"...
...
deselectRow: function(inSender, inKey, inPrivateData)
...
_inKey_ is whatever key was used to request
the deselection (usually a row index).
_inPrivateData_ references data registered
with this key by the code that made the selection.
*/
onDeselect: "",
//* Sent when selection changes (but not when the selection is cleared).
onChange: ""
},
//* @protected
create: function() {
this.clear();
this.inherited(arguments);
},
multiChanged: function() {
if (!this.multi) {
this.clear();
}
this.doChange();
},
highlander: function(inKey) {
if (!this.multi) {
this.deselect(this.lastSelected);
}
},
//* @public
//* Removes all selections.
clear: function() {
this.selected = {};
},
//* Returns true if the _inKey_ row is selected.
isSelected: function(inKey) {
return this.selected[inKey];
},
//* Manually sets a row's state to selected or unselected.
setByKey: function(inKey, inSelected, inData) {
if (inSelected) {
this.selected[inKey] = (inData || true);
this.lastSelected = inKey;
this.doSelect({key: inKey, data: this.selected[inKey]});
} else {
var was = this.isSelected(inKey);
delete this.selected[inKey];
this.doDeselect({key: inKey, data: was});
}
this.doChange();
},
//* Deselects a row.
deselect: function(inKey) {
if (this.isSelected(inKey)) {
this.setByKey(inKey, false);
}
},
/**
Selects a row. If the _multi_ property is set to false, _select_ will
also deselect the previous selection.
*/
select: function(inKey, inData) {
if (this.multi) {
this.setByKey(inKey, !this.isSelected(inKey), inData);
} else if (!this.isSelected(inKey)) {
this.highlander();
this.setByKey(inKey, true, inData);
}
},
/**
Toggles selection state for a row. If the _multi_ property is set to
false, toggling a selection on will deselect the previous selection.
*/
toggle: function(inKey, inData) {
if (!this.multi && this.lastSelected != inKey) {
this.deselect(this.lastSelected);
}
this.setByKey(inKey, !this.isSelected(inKey), inData);
},
/**
Returns the selection as a hash in which each selected item has a value;
unselected items are undefined.
*/
getSelected: function() {
return this.selected;
}
});