webui-aria2/js/libs/dojox/grid/TreeSelection.js.uncompressed.js

216 lines
5.0 KiB
JavaScript
Raw Normal View History

//>>built
define("dojox/grid/TreeSelection", [
"../main",
"dojo/_base/declare",
"dojo/_base/array",
"dojo/_base/lang",
"dojo/dom-attr",
"dojo/query",
"./DataSelection"
], function(dojox, declare, array, lang, domAttr, query, DataSelection){
return declare("dojox.grid.TreeSelection", DataSelection, {
setMode: function(mode){
this.selected = {};
this.sorted_sel = [];
this.sorted_ltos = {};
this.sorted_stol = {};
DataSelection.prototype.setMode.call(this, mode);
},
addToSelection: function(inItemOrIndex){
if(this.mode == 'none'){ return; }
var idx = null;
if(typeof inItemOrIndex == "number" || typeof inItemOrIndex == "string"){
idx = inItemOrIndex;
}else{
idx = this.grid.getItemIndex(inItemOrIndex);
}
if(this.selected[idx]){
this.selectedIndex = idx;
}else{
if(this.onCanSelect(idx) !== false){
this.selectedIndex = idx;
var rowNodes = query("tr[dojoxTreeGridPath='" + idx + "']", this.grid.domNode);
if(rowNodes.length){
domAttr.set(rowNodes[0], "aria-selected", "true");
}
this._beginUpdate();
this.selected[idx] = true;
this._insertSortedSelection(idx);
//this.grid.onSelected(idx);
this.onSelected(idx);
//this.onSetSelected(idx, true);
this._endUpdate();
}
}
},
deselect: function(inItemOrIndex){
if(this.mode == 'none'){ return; }
var idx = null;
if(typeof inItemOrIndex == "number" || typeof inItemOrIndex == "string"){
idx = inItemOrIndex;
}else{
idx = this.grid.getItemIndex(inItemOrIndex);
}
if(this.selectedIndex == idx){
this.selectedIndex = -1;
}
if(this.selected[idx]){
if(this.onCanDeselect(idx) === false){
return;
}
var rowNodes = query("tr[dojoxTreeGridPath='" + idx + "']", this.grid.domNode);
if(rowNodes.length){
domAttr.set(rowNodes[0], "aria-selected", "false");
}
this._beginUpdate();
delete this.selected[idx];
this._removeSortedSelection(idx);
//this.grid.onDeselected(idx);
this.onDeselected(idx);
//this.onSetSelected(idx, false);
this._endUpdate();
}
},
getSelected: function(){
var result = [];
for(var i in this.selected){
if(this.selected[i]){
result.push(this.grid.getItem(i));
}
}
return result;
},
getSelectedCount: function(){
var c = 0;
for(var i in this.selected){
if(this.selected[i]){
c++;
}
}
return c;
},
_bsearch: function(v){
var o = this.sorted_sel;
var h = o.length - 1, l = 0, m;
while(l<=h){
var cmp = this._comparePaths(o[m = (l + h) >> 1], v);
if(cmp < 0){ l = m + 1; continue; }
if(cmp > 0){ h = m - 1; continue; }
return m;
}
return cmp < 0 ? m - cmp : m;
},
_comparePaths: function(a, b){
for(var i=0, l=(a.length < b.length ? a.length : b.length); i<l; i++){
if(a[i]<b[i]){ return -1; }
if(a[i]>b[i]){ return 1; }
}
if(a.length<b.length){ return -1; }
if(a.length>b.length){ return 1; }
return 0;
},
_insertSortedSelection: function(index){
index = String(index);
var s = this.sorted_sel;
var sl = this.sorted_ltos;
var ss = this.sorted_stol;
var lpath = index.split('/');
lpath = array.map(lpath, function(item){ return parseInt(item, 10); });
sl[lpath] = index;
ss[index] = lpath;
if(s.length === 0){
s.push(lpath);
return;
}
if(s.length==1){
var cmp = this._comparePaths(s[0], lpath);
if(cmp==1){ s.unshift(lpath); }
else{ s.push(lpath); }
return;
}
var idx = this._bsearch(lpath);
this.sorted_sel.splice(idx, 0, lpath);
},
_removeSortedSelection: function(index){
index = String(index);
var s = this.sorted_sel;
var sl = this.sorted_ltos;
var ss = this.sorted_stol;
if(s.length === 0){
return;
}
var lpath = ss[index];
if(!lpath){ return; }
var idx = this._bsearch(lpath);
if(idx > -1){
delete sl[lpath];
delete ss[index];
s.splice(idx, 1);
}
},
getFirstSelected: function(){
if(!this.sorted_sel.length||this.mode == 'none'){ return -1; }
var fpath = this.sorted_sel[0];
if(!fpath){
return -1;
}
fpath = this.sorted_ltos[fpath];
if(!fpath){
return -1;
}
return fpath;
},
getNextSelected: function(inPrev){
if(!this.sorted_sel.length||this.mode == 'none'){ return -1; }
inPrev = String(inPrev);
var prevPath = this.sorted_stol[inPrev];
if(!prevPath){ return -1; }
var idx = this._bsearch(prevPath);
var lpath = this.sorted_sel[idx+1];
if(!lpath){
return -1;
}
return this.sorted_ltos[lpath];
},
_range: function(inFrom, inTo, func){
if(!lang.isString(inFrom) && inFrom < 0){
inFrom = inTo;
}
var cells = this.grid.layout.cells,
store = this.grid.store,
grid = this.grid;
inFrom = new dojox.grid.TreePath(String(inFrom), grid);
inTo = new dojox.grid.TreePath(String(inTo), grid);
if(inFrom.compare(inTo) > 0){
var tmp = inFrom;
inFrom = inTo;
inTo = tmp;
}
var inFromStr = inFrom._str, inToStr = inTo._str;
// select/deselect the first
func(inFromStr);
var p = inFrom;
while((p = p.next())){
if(p._str == inToStr){
break;
}
func(p._str);
}
// select/deselect the last
func(inToStr);
}
});
});