2008-07-03 14:59:31 +00:00
|
|
|
/*
|
|
|
|
* MIT License
|
|
|
|
* Copyright (c) 2008 Ishan Arora <ishan@qbittorrent.org>
|
|
|
|
*
|
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
|
|
* in the Software without restriction, including without limitation the rights
|
|
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
|
|
* furnished to do so, subject to the following conditions:
|
|
|
|
*
|
|
|
|
* The above copyright notice and this permission notice shall be included in
|
|
|
|
* all copies or substantial portions of the Software.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
|
* THE SOFTWARE.
|
2008-07-04 07:48:15 +00:00
|
|
|
*/
|
2008-05-17 12:44:42 +00:00
|
|
|
|
|
|
|
/**************************************************************
|
|
|
|
|
|
|
|
Script : Dynamic Table
|
|
|
|
Version : 0.4
|
|
|
|
Authors : Ishan Arora
|
|
|
|
Desc : Programable sortable table
|
|
|
|
Licence : Open Source MIT Licence
|
|
|
|
|
|
|
|
**************************************************************/
|
|
|
|
|
|
|
|
var dynamicTable = new Class ({
|
|
|
|
|
|
|
|
initialize: function(table, options){
|
|
|
|
this.setOptions({
|
|
|
|
overCls: false,
|
|
|
|
selectCls: false,
|
|
|
|
altCls: false
|
|
|
|
}, options);
|
|
|
|
this.table = $(table);
|
|
|
|
this.rows = new Object();
|
2008-09-27 10:08:07 +00:00
|
|
|
this.cur = new Array();
|
2008-05-17 12:44:42 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
altRow: function()
|
|
|
|
{
|
|
|
|
var trs = this.table.getElements('tr');
|
|
|
|
if(this.options.altCls)
|
|
|
|
{
|
|
|
|
trs.each(function(el,i){
|
|
|
|
if(i % 2){
|
|
|
|
el.addClass(this.options.altCls);
|
|
|
|
}else{
|
|
|
|
el.removeClass(this.options.altCls);
|
|
|
|
}
|
|
|
|
}.bind(this));
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
insertRow: function(id, row){
|
|
|
|
this.removeRow(id);
|
|
|
|
var tr = new Element('tr');
|
|
|
|
this.rows[id] = tr;
|
|
|
|
for(var i=0; i<row.length; i++)
|
|
|
|
{
|
|
|
|
var td = new Element('td');
|
2008-09-14 10:14:54 +00:00
|
|
|
td.set('html', row[i]);
|
2008-05-17 12:44:42 +00:00
|
|
|
td.injectInside(tr);
|
|
|
|
};
|
|
|
|
|
|
|
|
if(this.options.overCls){
|
2008-09-15 05:27:56 +00:00
|
|
|
tr.addEvent('mouseover', function(e){
|
2008-05-17 12:44:42 +00:00
|
|
|
tr.addClass(this.options.overCls);
|
|
|
|
}.bind(this));
|
2008-09-15 05:27:56 +00:00
|
|
|
tr.addEvent('mouseout', function(e){
|
2008-05-17 12:44:42 +00:00
|
|
|
tr.removeClass(this.options.overCls);
|
|
|
|
}.bind(this));
|
|
|
|
}
|
2008-09-15 05:27:56 +00:00
|
|
|
tr.addEvent('click', function(e){
|
2008-09-27 10:08:07 +00:00
|
|
|
if(e.control) {
|
|
|
|
found = false;
|
|
|
|
if(this.cur.contains(id)) {
|
|
|
|
// remove it
|
|
|
|
this.cur.erase(id);
|
|
|
|
// Remove selected style
|
|
|
|
temptr = this.rows[id];
|
|
|
|
if(temptr){
|
|
|
|
temptr.removeClass(this.options.selectCls);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
this.cur[this.cur.length] = id;
|
|
|
|
// Add selected style
|
|
|
|
temptr = this.rows[id];
|
|
|
|
if(temptr){
|
|
|
|
temptr.addClass(this.options.selectCls);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
//TODO: handle alt key
|
|
|
|
// Control key is not pressed
|
|
|
|
// Remove selected style from previous ones
|
|
|
|
for(i=0; i<this.cur.length; i++) {
|
|
|
|
var temptr = this.rows[this.cur[i]];
|
|
|
|
if(temptr){
|
|
|
|
temptr.removeClass(this.options.selectCls);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Add selected style to new one
|
|
|
|
temptr = this.rows[id];
|
|
|
|
if(temptr){
|
|
|
|
temptr.addClass(this.options.selectCls);
|
|
|
|
}
|
|
|
|
this.cur[0] = id;
|
2008-05-17 12:44:42 +00:00
|
|
|
}
|
|
|
|
}.bind(this));
|
|
|
|
|
|
|
|
tr.injectInside(this.table);
|
|
|
|
this.altRow();
|
|
|
|
},
|
|
|
|
|
|
|
|
updateRow: function(id, row){
|
|
|
|
var tr = this.rows[id];
|
|
|
|
if($defined(tr))
|
|
|
|
{
|
|
|
|
var tds = tr.getElements('td');
|
|
|
|
row.each(function(el, i){
|
2008-09-14 10:14:54 +00:00
|
|
|
tds[i].set('html', el);
|
2008-05-17 12:44:42 +00:00
|
|
|
});
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
},
|
|
|
|
|
|
|
|
removeRow: function(id){
|
2008-09-27 10:08:07 +00:00
|
|
|
if(this.cur.contains(id))
|
2008-05-17 12:44:42 +00:00
|
|
|
{
|
2008-09-27 10:08:07 +00:00
|
|
|
this.cur.erase(id);
|
2008-05-17 12:44:42 +00:00
|
|
|
}
|
|
|
|
var tr = this.rows[id];
|
|
|
|
if($defined(tr))
|
|
|
|
{
|
2008-09-14 10:14:54 +00:00
|
|
|
tr.dispose();
|
2008-05-17 12:44:42 +00:00
|
|
|
this.altRow();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
},
|
|
|
|
|
2008-09-27 10:08:07 +00:00
|
|
|
selectedIds: function(){
|
2008-05-17 12:44:42 +00:00
|
|
|
return this.cur;
|
|
|
|
},
|
|
|
|
|
|
|
|
getRowIds: function(){
|
|
|
|
var ids = new Array();
|
|
|
|
var i = 0;
|
|
|
|
for (var id in this.rows) {
|
|
|
|
ids[i] = id;
|
|
|
|
i++
|
|
|
|
}
|
|
|
|
return ids;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
dynamicTable.implement(new Options);
|
|
|
|
dynamicTable.implement(new Events);
|
|
|
|
|
|
|
|
/*************************************************************/
|