I read about dragtable on ajaxian.com.
It is a library-independent js-function that gives you the ability to re-order table columns by using drag'n'drop.
This function does not exactly fulfill my needs. So I thought to myself 'Why not doing it the jQuery way?'
And my next thought was like in Trash of the Titans 'Can't someone else do it?'
I started google-ing and found nothing. So why not being the garbage man and doing the stuff on my own? That couldn't be that hard.
There is some really cool stuff growing around jQuery (especially jQuery-ui). So I took the jQuery-core and the
sortable-Plugin form jQuery-ui and put my stuff on the top of this stack. One weekend and some coffees later this is the result.
Enjoy.
akottr / the garbage man / email (mouseover)
fork me on github
Enjoy.
akottr / the garbage man / email (mouseover)
fork me on github
description
Simple table with default options
code
$('.defaultTable').dragtable();
demo
TIME | %user | %nice | %system | %iowait | %idle |
---|---|---|---|---|---|
12:10:01 AM | 28.86 | 0.04 | 1.65 | 0.08 | 69.36 |
12:20:01 AM | 26.54 | 0.00 | 1.64 | 0.08 | 71.74 |
12:30:01 AM | 29.73 | 0.00 | 1.66 | 0.09 | 68.52 |
demo (width:100%)
TIME | %user | %nice | %system | %iowait | %idle |
---|---|---|---|---|---|
12:10:01 AM | 28.86 | 0.04 | 1.65 | 0.08 | 69.36 |
12:20:01 AM | 26.54 | 0.00 | 1.64 | 0.08 | 71.74 |
12:30:01 AM | 29.73 | 0.00 | 1.66 | 0.09 | 68.52 |
description
Table with a fixed footer.
code
$('#footerTable').dragtable({excludeFooter:true});
demo
TIME | %user | %nice | %system | %iowait | %idle |
---|---|---|---|---|---|
12:10:01 AM | 28.86 | 0.04 | 1.65 | 0.08 | 69.36 |
12:20:01 AM | 26.54 | 0.00 | 1.64 | 0.08 | 71.74 |
12:30:01 AM | 29.73 | 0.00 | 1.66 | 0.09 | 68.52 |
Footer: Some random sar values |
description
Moving only the header. Recommended for very large tables (cells > 1000)
code
$('#onlyHeaderTable').dragtable({maxMovingRows:1});
demo
TIME | %user | %nice | %system | %iowait | %idle |
---|---|---|---|---|---|
12:10:01 AM | 28.86 | 0.04 | 1.65 | 0.08 | 69.36 |
12:20:01 AM | 26.54 | 0.00 | 1.64 | 0.08 | 71.74 |
12:30:01 AM | 29.73 | 0.00 | 1.66 | 0.09 | 68.52 |
description
Persist your state on the server
code
$('#persistTable').dragtable({persistState:'/someAjaxUrl'});
demo
TIME | %user | %nice | %system | %iowait | %idle |
---|---|---|---|---|---|
12:10:01 AM | 28.86 | 0.04 | 1.65 | 0.08 | 69.36 |
12:20:01 AM | 26.54 | 0.00 | 1.64 | 0.08 | 71.74 |
12:30:01 AM | 29.73 | 0.00 | 1.66 | 0.09 | 68.52 |
description
Maybe you want to sort the columns ascending/descending by clicking into the table-head.
No problem! Use a handle to drag'n'drop the columns.
code
$('#handlerTable').dragtable({dragHandle:'.some-handle'});
demo
TIME | %user | %nice | %system | %iowait | %idle |
---|---|---|---|---|---|
12:10:01 AM | 28.86 | 0.04 | 1.65 | 0.08 | 69.36 |
12:20:01 AM | 26.54 | 0.00 | 1.64 | 0.08 | 71.74 |
12:30:01 AM | 29.73 | 0.00 | 1.66 | 0.09 | 68.52 |
description
Allow only some rows to be draggable ('time' is not draggable anymore)
code
$('#constrainTable').dragtable({dragaccept:'.accept'});
demo
TIME | %user | %nice | %system | %iowait | %idle |
---|---|---|---|---|---|
12:10:01 AM | 28.86 | 0.04 | 1.65 | 0.08 | 69.36 |
12:20:01 AM | 26.54 | 0.00 | 1.64 | 0.08 | 71.74 |
12:30:01 AM | 29.73 | 0.00 | 1.66 | 0.09 | 68.52 |
description
Write your own persistence function
code
$('#customPersistTable').dragtable({persistState: function(table) {
table.el.find('th').each(function(i) {
if(this.id != '') {table.sortOrder[this.id]=i;}
});
$.ajax({url: '/myAjax?hello=world',
data: table.sortOrder});
}
});
demo
TIME | %user | %nice | %system | %iowait | %idle |
---|---|---|---|---|---|
12:10:01 AM | 28.86 | 0.04 | 1.65 | 0.08 | 69.36 |
12:20:01 AM | 26.54 | 0.00 | 1.64 | 0.08 | 71.74 |
12:30:01 AM | 29.73 | 0.00 | 1.66 | 0.09 | 68.52 |
description
Write your own persistence function to store your data on the client-side and restore the state onload.
Drag some rows and reload this page. The table remains ordered.
(does not work in IE6/7 and without a server)
code
$('#localStorageTable').dragtable({
persistState: function(table) {
if (!window.sessionStorage) return;
var ss = window.sessionStorage;
table.el.find('th').each(function(i) {
if(this.id != '') {table.sortOrder[this.id]=i;}
});
ss.setItem('tableorder',JSON.stringify(table.sortOrder));
},
restoreState: eval('(' + window.sessionStorage.getItem('tableorder') + ')')
});
demo
TIME | %user | %nice | %system | %iowait | %idle |
---|---|---|---|---|---|
12:10:01 AM | 28.86 | 0.04 | 1.65 | 0.08 | 69.36 |
12:20:01 AM | 26.54 | 0.00 | 1.64 | 0.08 | 71.74 |
12:30:01 AM | 29.73 | 0.00 | 1.66 | 0.09 | 68.52 |