Community FAQ
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
QBass
Engaged Sweeper
I added function to sort tables in webconsole:
file: sorttable.js (found long ago, don't know author)

addEvent(window, "load", sortables_init);

var SORT_COLUMN_INDEX;

function sortables_init() {
// Find all tables with class sortable and make them sortable
if (!document.getElementsByTagName) return;
tbls = document.getElementsByTagName("table");
for (ti=0;ti<tbls.length;ti++) {
thisTbl = tbls[ti];
if (((' '+thisTbl.className+' ').indexOf("sortable") != -1) && (thisTbl.id)) {
//initTable(thisTbl.id);
ts_makeSortable(thisTbl);
}
}
}

function ts_makeSortable(table) {
if (table.rows && table.rows.length > 0) {
var firstRow = table.rows[0];
}
if (!firstRow) return;

// We have a first row: assume it's the header, and make its contents clickable links
for (var i=0;i<firstRow.cells.length;i++) {
var cell = firstRow.cells;
var txt = ts_getInnerText(cell);
cell.innerHTML = '<a href="#" class="sortheader" '+
'onclick="ts_resortTable(this, '+i+');return false;">' +
txt+'<span class="sortarrow">&nbsp;&nbsp;&nbsp;</span></a>';
}
}

function ts_getInnerText(el) {
if (typeof el == "string") return el;
if (typeof el == "undefined") { return el };
if (el.innerText) return el.innerText; //Not needed but it is faster
var str = "";

var cs = el.childNodes;
var l = cs.length;
for (var i = 0; i < l; i++) {
switch (cs.nodeType) {
case 1: //ELEMENT_NODE
str += ts_getInnerText(cs);
break;
case 3: //TEXT_NODE
str += cs.nodeValue;
break;
}
}
return str;
}

function ts_resortTable(lnk,clid) {
// get the span
var span;
for (var ci=0;ci<lnk.childNodes.length;ci++) {
if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];
}
var spantext = ts_getInnerText(span);
var td = lnk.parentNode;
var column = clid || td.cellIndex;
var table = getParent(td,'TABLE');

// Work out a type for the column
if (table.rows.length <= 1) return;
var itm = ts_getInnerText(table.rows[1].cells[column]);
sortfn = ts_sort_caseinsensitive;
if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;
if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = ts_sort_date;
if (itm.match(/^[Ł$]/)) sortfn = ts_sort_currency;
if (itm.match(/^[\d\.]+$/)) sortfn = ts_sort_numeric;
SORT_COLUMN_INDEX = column;
var firstRow = new Array();
var newRows = new Array();
for (i=0;i<table.rows[0].length;i++) { firstRow = table.rows[0]; }
for (j=1;j<table.rows.length;j++) { newRows[j-1] = table.rows; }

newRows.sort(sortfn);

if (span.getAttribute("sortdir") == 'down') {
ARROW = '&nbsp;&nbsp;&uarr;';
newRows.reverse();
span.setAttribute('sortdir','up');
} else {
ARROW = '&nbsp;&nbsp;&darr;';
span.setAttribute('sortdir','down');
}

// We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
// don't do sortbottom rows
for (i=0;i<newRows.length;i++) { if (!newRows.className || (newRows.className && (newRows.className.indexOf('sortbottom') == -1))) table.tBodies[0].appendChild(newRows);}
// do sortbottom rows only
for (i=0;i<newRows.length;i++) { if (newRows.className && (newRows.className.indexOf('sortbottom') != -1)) table.tBodies[0].appendChild(newRows);}

// Delete any other arrows there may be showing
var allspans = document.getElementsByTagName("span");
for (var ci=0;ci<allspans.length;ci++) {
if (allspans[ci].className == 'sortarrow') {
if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?
allspans[ci].innerHTML = '&nbsp;&nbsp;&nbsp;';
}
}
}

span.innerHTML = ARROW;
}

function getParent(el, pTagName) {
if (el == null) return null;
else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) // Gecko bug, supposed to be uppercase
return el;
else
return getParent(el.parentNode, pTagName);
}
function ts_sort_date(a,b) {
// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
if (aa.length == 10) {
dt1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);
} else {
yr = aa.substr(6,2);
if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
dt1 = yr+aa.substr(3,2)+aa.substr(0,2);
}
if (bb.length == 10) {
dt2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);
} else {
yr = bb.substr(6,2);
if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
dt2 = yr+bb.substr(3,2)+bb.substr(0,2);
}
if (dt1==dt2) return 0;
if (dt1<dt2) return -1;
return 1;
}

function ts_sort_currency(a,b) {
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
return parseFloat(aa) - parseFloat(bb);
}

function ts_sort_numeric(a,b) {
aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
if (isNaN(aa)) aa = 0;
bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]));
if (isNaN(bb)) bb = 0;
return aa-bb;
}

function ts_sort_caseinsensitive(a,b) {
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
if (aa==bb) return 0;
if (aa<bb) return -1;
return 1;
}

function ts_sort_default(a,b) {
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
if (aa==bb) return 0;
if (aa<bb) return -1;
return 1;
}


function addEvent(elm, evType, fn, useCapture)
// addEvent and removeEvent
// cross-browser event handling for IE5+, NS6 and Mozilla
// By Scott Andrew
{
if (elm.addEventListener){
elm.addEventListener(evType, fn, useCapture);
return true;
} else if (elm.attachEvent){
var r = elm.attachEvent("on"+evType, fn);
return r;
} else {
alert("Handler could not be removed");
}
}


then adding
<script src="sorttable.js"></script>
in document (for example Computers.aspx)
and adding
class="sortable"
to
<td bgcolor="#FFFFFF"><table width="100%"  border="0" cellpadding="1" cellspacing="1" id="Resulttable">

gives abbility to sort computers list by lastseen for example.
Best regards
Kuba
2 REPLIES 2
SofaKing
Engaged Sweeper II
Bulwinkle, you are almost there. You will need some minor adjustments to get it working. You will want to remove the <script src="sorttable.js"></script> line and insert <script src="_mmServerScripts/sorttable.js"></script> into a new line in the <head> section.
Bulwinkle
Engaged Sweeper
I need some help with this:

created file sorttable.js then put it in the C:\LanSweeper\Webconsole\_mmServerScripts folder and then added the rest of your post to the computers.aspx file.

The bold blue are the changes I made to the file. Did I put somthing in the wrong place and should I be able to sort the webpage by the domain or last seen by clicking on the heading?

Thanks for the response:)

-runat="Server"
-id="DScomputers"
-IsStoredProcedure="true"
-CreateDataSet="true"
-ConnectionString='<%# System.Configuration.ConfigurationSettings.AppSettings("MM_CONNECTION_STRING_Lansweeper") %>'
-DatabaseType='<%# System.Configuration.ConfigurationSettings.AppSettings("MM_CONNECTION_DATABASETYPE_Lansweeper") %>'
-CommandText="dbo.WebComputers"
-Debug="true"
-><Parameters>
- <Parameter Name="@RETURN_VALUE" Type="Int" Direction="ReturnValue" />
- <Parameter Name="@computername" Value='<%# request("computername") %>' Type="VarChar" Direction="Input" />
- <Parameter Name="@description" Value='<%# request("description") %>' Type="VarChar" Direction="Input" />
- <Parameter Name="@addomaindns" Value='<%# request("addomaindns") %>' Type="VarChar" Direction="Input" />
-</Parameters></MM:DataSet>
-<MM:PageBind runat="server" PostBackBind="true" />
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<title>New Page 3</title>
-<link href="CSS/lansweeper.css" rel="stylesheet" type="text/css">
-</head>
-<body topmargin="0" leftmargin="0" rightmargin="0" marginwidth="0" marginheight="0" bottommargin="0">
-<table border="0" cellpadding="2" cellspacing="0" width="100%" id="table1">
- <tr>
- <td bgcolor="#FFFFFF"><table width="100%" border="0" cellpadding="1" cellspacing="1" id="Resulttable" class="sortable">
- <script src="sorttable.js"></script>
- <tr>
- <td width="18" class="columngrey">&nbsp;</td>
- <td class="columngrey">Computer (<%= DScomputers.RecordCount %>)</td>
- <td class="columngrey">Description</td>
- <td class="columngrey">Domain</td>
- <td class="columngrey">Last seen</td>
-
- </tr>
- <ASP:Repeater runat="server" DataSource='<%# DScomputers.DefaultView %>'>
- <ItemTemplate>
- <tr>

Archive

This board contains archived posts from the retired Lansweeper Forum and Insiders Community.

New to Lansweeper?

Try Lansweeper For Free

Experience Lansweeper with your own data.
Sign up now for a 14-day free trial.

Try Now