CatalystX-CRUD-YUI
view release on metacpan or search on metacpan
lib/CatalystX/CRUD/YUI/TT/static/js/livegrid/src/RowSelectionModel.js view on Meta::CPAN
* @param {Array} records The records that have been loaded
* @param {Array} ranges An array representing the model index ranges the
* reords have been loaded for.
*/
onSelectionsLoad : function(store, records, ranges)
{
this.replaceSelections(records);
},
/**
* Returns true if there is a next record to select
* @return {Boolean}
*/
hasNext : function()
{
return this.last !== false && (this.last+1) < this.grid.store.getTotalCount();
},
/**
* Gets the number of selected rows.
* @return {Number}
*/
getCount : function()
{
return this.selections.length + this.getPendingSelections().length;
},
/**
* Returns True if the specified row is selected.
*
* @param {Number/Record} record The record or index of the record to check
* @return {Boolean}
*/
isSelected : function(index)
{
if (typeof index == "number") {
var orgInd = index;
index = this.grid.store.getAt(orgInd);
if (!index) {
var ind = this.getPendingSelections().indexOf(orgInd);
if (ind != -1) {
return true;
}
return false;
}
}
var r = index;
return (r && this.selections.key(r.id) ? true : false);
},
/**
* Deselects a record.
* The emthod assumes that the record is physically available, i.e.
* pendingSelections will not be taken into account
*/
deselectRecord : function(record, preventViewNotify)
{
if(this.locked) {
return;
}
var isSelected = this.selections.key(record.id);
if (!isSelected) {
return;
}
var store = this.grid.store;
var index = store.indexOfId(record.id);
if (index == -1) {
index = store.findInsertIndex(record);
if (index != Number.MIN_VALUE && index != Number.MAX_VALUE) {
index += store.bufferRange[0];
}
} else {
// just to make sure, though this should not be
// set if the record was availablein the selections
delete this.pendingSelections[index];
}
if (this.last == index) {
this.last = false;
}
if (this.lastActive == index) {
this.lastActive = false;
}
this.selections.remove(record);
if(!preventViewNotify){
this.grid.getView().onRowDeselect(index);
}
this.fireEvent("rowdeselect", this, index, record);
this.fireEvent("selectionchange", this);
},
/**
* Deselects a row.
* @param {Number} row The index of the row to deselect
*/
deselectRow : function(index, preventViewNotify)
{
if(this.locked) return;
if(this.last == index){
this.last = false;
}
if(this.lastActive == index){
this.lastActive = false;
}
var r = this.grid.store.getAt(index);
delete this.pendingSelections[index];
if (r) {
this.selections.remove(r);
}
if(!preventViewNotify){
this.grid.getView().onRowDeselect(index);
}
this.fireEvent("rowdeselect", this, index, r);
this.fireEvent("selectionchange", this);
},
/**
* Selects a row.
* @param {Number} row The index of the row to select
* @param {Boolean} keepExisting (optional) True to keep existing selections
*/
selectRow : function(index, keepExisting, preventViewNotify)
{
if(//this.last === index
//||
this.locked
|| index < 0
|| index >= this.grid.store.getTotalCount()) {
return;
}
var r = this.grid.store.getAt(index);
if(this.fireEvent("beforerowselect", this, index, keepExisting, r) !== false){
if(!keepExisting || this.singleSelect){
this.clearSelections();
}
if (r) {
this.selections.add(r);
delete this.pendingSelections[index];
} else {
this.pendingSelections[index] = true;
}
this.last = this.lastActive = index;
if(!preventViewNotify){
this.grid.getView().onRowSelect(index);
}
this.fireEvent("rowselect", this, index, r);
this.fireEvent("selectionchange", this);
}
},
clearPendingSelections : function(startIndex, endIndex)
{
if (endIndex == undefined) {
endIndex = Number.MAX_VALUE;
}
var newSelections = {};
var ranges = this.getPendingSelections();
var rangesLength = ranges.length;
var index = 0;
for (var i = 0; i < rangesLength; i++) {
index = ranges[i];
if (index <= endIndex && index >= startIndex) {
continue;
}
newSelections[index] = true;
}
this.pendingSelections = newSelections;
},
/**
* Replaces already set data with new data from the store if those
* records can be found within this.selections or this.pendingSelections
*
* @param {Array} An array with records buffered by the store
lib/CatalystX/CRUD/YUI/TT/static/js/livegrid/src/RowSelectionModel.js view on Meta::CPAN
var id = null;
for (i = 0, len = records.length; i < len; i++) {
rec = records[i];
id = rec.id;
if (assigned.indexOf(id) == -1 && selections.containsKey(id)) {
selections.add(rec);
}
}
},
getPendingSelections : function(asRange)
{
var index = 1;
var ranges = [];
var currentRange = 0;
var tmpArray = [];
for (var i in this.pendingSelections) {
tmpArray.push(parseInt(i));
}
tmpArray.sort(function(o1,o2){
if (o1 > o2) {
return 1;
} else if (o1 < o2) {
return -1;
} else {
return 0;
}
});
if (!asRange) {
return tmpArray;
}
var max_i = tmpArray.length;
if (max_i == 0) {
return [];
}
ranges[currentRange] = [tmpArray[0], tmpArray[0]];
for (var i = 0, max_i = max_i-1; i < max_i; i++) {
if (tmpArray[i+1] - tmpArray[i] == 1) {
ranges[currentRange][1] = tmpArray[i+1];
} else {
currentRange++;
ranges[currentRange] = [tmpArray[i+1], tmpArray[i+1]];
}
}
return ranges;
},
/**
* Clears all selections.
*/
clearSelections : function(fast)
{
if(this.locked) return;
if(fast !== true){
var ds = this.grid.store;
var s = this.selections;
var ind = -1;
s.each(function(r){
ind = ds.indexOfId(r.id);
if (ind != -1) {
this.deselectRow(ind+ds.bufferRange[0]);
}
}, this);
s.clear();
this.pendingSelections = {};
}else{
this.selections.clear();
this.pendingSelections = {};
}
this.last = false;
},
/**
* Selects a range of rows. All rows in between startRow and endRow are also
* selected.
*
* @param {Number} startRow The index of the first row in the range
* @param {Number} endRow The index of the last row in the range
* @param {Boolean} keepExisting (optional) True to retain existing selections
*/
selectRange : function(startRow, endRow, keepExisting)
{
if(this.locked) {
return;
}
if(!keepExisting) {
this.clearSelections();
}
if (startRow <= endRow) {
for(var i = startRow; i <= endRow; i++) {
this.selectRow(i, true);
}
} else {
for(var i = startRow; i >= endRow; i--) {
this.selectRow(i, true);
}
}
}
});
( run in 1.578 second using v1.01-cache-2.11-cpan-39bf76dae61 )