mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-13 17:26:34 +00:00
33_readingsGroup.pm: resort after longpoll update
git-svn-id: https://svn.fhem.de/fhem/trunk@12761 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
6b7101faaf
commit
949ef851a8
@ -130,13 +130,8 @@ FW_readingsGroupUpdateLine(d){
|
|||||||
|
|
||||||
if( dd[1] === 'sort' ) {
|
if( dd[1] === 'sort' ) {
|
||||||
var rg = document.getElementById( 'readingsGroup-'+dd[0] );
|
var rg = document.getElementById( 'readingsGroup-'+dd[0] );
|
||||||
var sort = parseInt(d[1]);
|
if( sorttable )
|
||||||
if( rg && sort >= 0 ) {
|
sorttable.doSort( rg );
|
||||||
var col = $(rg).find('tr').eq(0).find('td').eq(sort).get(0);
|
|
||||||
if( sorttable && col !== undefined ) {
|
|
||||||
// TODO: find current sorted collumn and resort with current values
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if( dd[1] != "visibility" )
|
} else if( dd[1] != "visibility" )
|
||||||
return
|
return
|
||||||
|
@ -34,6 +34,7 @@ sorttable = {
|
|||||||
forEach(document.getElementsByTagName('table'), function(table) {
|
forEach(document.getElementsByTagName('table'), function(table) {
|
||||||
if (table.className.search(/\bsortable\b/) != -1) {
|
if (table.className.search(/\bsortable\b/) != -1) {
|
||||||
sorttable.makeSortable(table);
|
sorttable.makeSortable(table);
|
||||||
|
//sorttable.doSort(table,1);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -90,79 +91,134 @@ sorttable = {
|
|||||||
headrow[i].sorttable_columnindex = i;
|
headrow[i].sorttable_columnindex = i;
|
||||||
headrow[i].sorttable_tbody = table.tBodies[0];
|
headrow[i].sorttable_tbody = table.tBodies[0];
|
||||||
dean_addEvent(headrow[i],"click", sorttable.innerSortFunction = function(e) {
|
dean_addEvent(headrow[i],"click", sorttable.innerSortFunction = function(e) {
|
||||||
|
sorttable._doSort.bind(this)();
|
||||||
if (this.className.search(/\bsorttable_sorted\b/) != -1) {
|
|
||||||
// if we're already sorted by this column, just
|
|
||||||
// reverse the table, which is quicker
|
|
||||||
sorttable.reverse(this.sorttable_tbody);
|
|
||||||
this.className = this.className.replace('sorttable_sorted',
|
|
||||||
'sorttable_sorted_reverse');
|
|
||||||
this.removeChild(document.getElementById('sorttable_sortfwdind'));
|
|
||||||
sortrevind = document.createElement('span');
|
|
||||||
sortrevind.id = "sorttable_sortrevind";
|
|
||||||
sortrevind.innerHTML = stIsIE ? ' <font face="webdings">5</font>' : ' ▴';
|
|
||||||
this.appendChild(sortrevind);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) {
|
|
||||||
// if we're already sorted by this column in reverse, just
|
|
||||||
// re-reverse the table, which is quicker
|
|
||||||
sorttable.reverse(this.sorttable_tbody);
|
|
||||||
this.className = this.className.replace('sorttable_sorted_reverse',
|
|
||||||
'sorttable_sorted');
|
|
||||||
this.removeChild(document.getElementById('sorttable_sortrevind'));
|
|
||||||
sortfwdind = document.createElement('span');
|
|
||||||
sortfwdind.id = "sorttable_sortfwdind";
|
|
||||||
sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾';
|
|
||||||
this.appendChild(sortfwdind);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove sorttable_sorted classes
|
|
||||||
theadrow = this.parentNode;
|
|
||||||
forEach(theadrow.childNodes, function(cell) {
|
|
||||||
if (cell.nodeType == 1) { // an element
|
|
||||||
cell.className = cell.className.replace('sorttable_sorted_reverse','');
|
|
||||||
cell.className = cell.className.replace('sorttable_sorted','');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
sortfwdind = document.getElementById('sorttable_sortfwdind');
|
|
||||||
if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); }
|
|
||||||
sortrevind = document.getElementById('sorttable_sortrevind');
|
|
||||||
if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); }
|
|
||||||
|
|
||||||
this.className += ' sorttable_sorted';
|
|
||||||
sortfwdind = document.createElement('span');
|
|
||||||
sortfwdind.id = "sorttable_sortfwdind";
|
|
||||||
sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾';
|
|
||||||
this.appendChild(sortfwdind);
|
|
||||||
|
|
||||||
// build an array to sort. This is a Schwartzian transform thing,
|
|
||||||
// i.e., we "decorate" each row with the actual sort key,
|
|
||||||
// sort based on the sort keys, and then put the rows back in order
|
|
||||||
// which is a lot faster because you only do getInnerText once per row
|
|
||||||
row_array = [];
|
|
||||||
col = this.sorttable_columnindex;
|
|
||||||
rows = this.sorttable_tbody.rows;
|
|
||||||
for (var j=0; j<rows.length; j++) {
|
|
||||||
row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]];
|
|
||||||
}
|
|
||||||
/* If you want a stable sort, uncomment the following line */
|
|
||||||
//sorttable.shaker_sort(row_array, this.sorttable_sortfunction);
|
|
||||||
/* and comment out this one */
|
|
||||||
row_array.sort(this.sorttable_sortfunction);
|
|
||||||
|
|
||||||
tb = this.sorttable_tbody;
|
|
||||||
for (var j=0; j<row_array.length; j++) {
|
|
||||||
tb.appendChild(row_array[j][1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
delete row_array;
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_doSort: function(force, reverse) {
|
||||||
|
if (!force && this.className.search(/\bsorttable_sorted\b/) != -1) {
|
||||||
|
// if we're already sorted by this column, just
|
||||||
|
// reverse the table, which is quicker
|
||||||
|
sorttable.reverse(this.sorttable_tbody);
|
||||||
|
this.className = this.className.replace('sorttable_sorted',
|
||||||
|
'sorttable_sorted_reverse');
|
||||||
|
this.removeChild(document.getElementById('sorttable_sortfwdind'));
|
||||||
|
sortrevind = document.createElement('span');
|
||||||
|
sortrevind.id = "sorttable_sortrevind";
|
||||||
|
sortrevind.innerHTML = stIsIE ? ' <font face="webdings">5</font>' : ' ▴';
|
||||||
|
this.appendChild(sortrevind);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!force && this.className.search(/\bsorttable_sorted_reverse\b/) != -1) {
|
||||||
|
// if we're already sorted by this column in reverse, just
|
||||||
|
// re-reverse the table, which is quicker
|
||||||
|
sorttable.reverse(this.sorttable_tbody);
|
||||||
|
this.className = this.className.replace('sorttable_sorted_reverse',
|
||||||
|
'sorttable_sorted');
|
||||||
|
this.removeChild(document.getElementById('sorttable_sortrevind'));
|
||||||
|
sortfwdind = document.createElement('span');
|
||||||
|
sortfwdind.id = "sorttable_sortfwdind";
|
||||||
|
sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾';
|
||||||
|
this.appendChild(sortfwdind);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove sorttable_sorted classes
|
||||||
|
theadrow = this.parentNode;
|
||||||
|
forEach(theadrow.childNodes, function(cell) {
|
||||||
|
if (cell.nodeType == 1) { // an element
|
||||||
|
cell.className = cell.className.replace('sorttable_sorted_reverse','');
|
||||||
|
cell.className = cell.className.replace('sorttable_sorted','');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sortfwdind = document.getElementById('sorttable_sortfwdind');
|
||||||
|
if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); }
|
||||||
|
sortrevind = document.getElementById('sorttable_sortrevind');
|
||||||
|
if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); }
|
||||||
|
|
||||||
|
if( reverse ) {
|
||||||
|
this.className += ' sorttable_sorted_reverse';
|
||||||
|
sortrevind = document.createElement('span');
|
||||||
|
sortrevind.id = "sorttable_sortrevind";
|
||||||
|
sortrevind.innerHTML = stIsIE ? ' <font face="webdings">5</font>' : ' ▴';
|
||||||
|
this.appendChild(sortrevind);
|
||||||
|
} else {
|
||||||
|
this.className += ' sorttable_sorted';
|
||||||
|
sortfwdind = document.createElement('span');
|
||||||
|
sortfwdind.id = "sorttable_sortfwdind";
|
||||||
|
sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾';
|
||||||
|
this.appendChild(sortfwdind);
|
||||||
|
}
|
||||||
|
|
||||||
|
// build an array to sort. This is a Schwartzian transform thing,
|
||||||
|
// i.e., we "decorate" each row with the actual sort key,
|
||||||
|
// sort based on the sort keys, and then put the rows back in order
|
||||||
|
// which is a lot faster because you only do getInnerText once per row
|
||||||
|
row_array = [];
|
||||||
|
col = this.sorttable_columnindex;
|
||||||
|
rows = this.sorttable_tbody.rows;
|
||||||
|
for (var j=0; j<rows.length; j++) {
|
||||||
|
row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]];
|
||||||
|
}
|
||||||
|
/* If you want a stable sort, uncomment the following line */
|
||||||
|
//sorttable.shaker_sort(row_array, this.sorttable_sortfunction);
|
||||||
|
/* and comment out this one */
|
||||||
|
row_array.sort(this.sorttable_sortfunction);
|
||||||
|
if( reverse )
|
||||||
|
row_array.reverse();
|
||||||
|
|
||||||
|
tb = this.sorttable_tbody;
|
||||||
|
for (var j=0; j<row_array.length; j++) {
|
||||||
|
tb.appendChild(row_array[j][1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
delete row_array;
|
||||||
|
},
|
||||||
|
|
||||||
|
doSort: function(table, column, reverse) {
|
||||||
|
if( typeof column !== 'object' ) {
|
||||||
|
if( table === undefined ) {
|
||||||
|
console.log( 'reSort: no table given' );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
headrow = table.tHead.rows[0].cells;
|
||||||
|
if( column === undefined ) {
|
||||||
|
for( var i=0; i<headrow.length; i++) {
|
||||||
|
if( headrow[i].className.match(/\bsorttable_/) ) {
|
||||||
|
column = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( column === undefined ) {
|
||||||
|
console.log( 'reSort: no current column' );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
column = headrow[column];
|
||||||
|
}
|
||||||
|
if( reverse !== undefined ) {
|
||||||
|
if( reverse && column.className.search(/\bsorttable_sorted\b/) != -1 )
|
||||||
|
force = true;
|
||||||
|
else if( !reverse && column.className.search(/\bsorttable_sorted_reverse\b/) != -1 )
|
||||||
|
force = true;
|
||||||
|
} else {
|
||||||
|
if( column.className.search(/\bsorttable_sorted\b/) != -1 ) {
|
||||||
|
force = true;
|
||||||
|
reverse = false;
|
||||||
|
} else if( column.className.search(/\bsorttable_sorted_reverse\b/) != -1 ) {
|
||||||
|
force = true;
|
||||||
|
reverse = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sorttable._doSort.bind(column)(true, reverse);
|
||||||
|
},
|
||||||
|
|
||||||
guessType: function(table, column) {
|
guessType: function(table, column) {
|
||||||
// guess the type of a column based on its first non-blank row
|
// guess the type of a column based on its first non-blank row
|
||||||
sortfn = sorttable.sort_alpha;
|
sortfn = sorttable.sort_alpha;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user