function filterTable(tablename) // Used by Radost's single HTML page to sort list of all caves // in expoweb/caves-tabular.htm // where the data is all in that html file, having been extracted from // the svx files by an undocumented method. Probably from the .3d file// produced by //survex. { table = document.getElementById(tablename); mindepth = document.getElementById("CaveDepthMin").value; maxdepth = document.getElementById("CaveDepthMax").value; if(mindepth==0)mindepth=-999999; if(maxdepth==0)maxdepth= 999999; minlength = document.getElementById("CaveLengthMin").value; maxlength = document.getElementById("CaveLengthMax").value; if(minlength==0)minlength=-999999; if(maxlength==0)maxlength= 999999; visitdate = document.getElementById("VisitDate").value; visitor = document.getElementById("Visitor").value; cavename = document.getElementById("CaveName").value.toLowerCase(); incomplete = document.getElementById("Incomplete").checked; var regexmode = false; if(visitor[0]=='/' && visitor[visitor.length-1]=='/') { regexmode = true; visitor = new RegExp(visitor.substr(1,visitor.length-2)); } else { visitor.toLowerCase(); } rows = table.rows; for(i=1; i< rows.length; i++) { name = (rows[i].getElementsByTagName("TD")[0]).innerHTML.toLowerCase(); depth = (rows[i].getElementsByTagName("TD")[1]).innerHTML.toLowerCase(); depth = Number(depth.replace(/[^0-9.]/g,'')); length = (rows[i].getElementsByTagName("TD")[2]).innerHTML.toLowerCase(); length = Number(length.replace(/[^0-9.]/g,'')); date = (rows[i].getElementsByTagName("TD")[3]).innerHTML.toLowerCase(); recentvisitor = (rows[i].getElementsByTagName("TD")[4]).innerHTML.toLowerCase(); if(cavename != "" && !name.includes(cavename)) { rows[i].style.visibility = "collapse"; } if(depthmaxdepth) { rows[i].style.visibility = "collapse"; } if(lengthmaxlength) { rows[i].style.visibility = "collapse"; } if(date < visitdate) { rows[i].style.visibility = "collapse"; } if(visitor != "" && regexmode && !visitor.test(recentvisitor)) { rows[i].style.visibility = "collapse"; } if(visitor != "" && !regexmode && !recentvisitor.includes(visitor)) { rows[i].style.visibility = "collapse"; } crow=rows[i].getElementsByTagName("TD"); for(var j=0; jNumber(kvarray[i+1][0])) { return false; } if(numeric!=1 && kvarray[i][0]>kvarray[i+1][0]) { return false; } } return true; } function sortTable(n, tablename, numeric) { table = document.getElementById(tablename); rows = table.rows; var ordering = []; var i; //construct key-value pairs for sorting for(i = 1; i < rows.length; i++) //remember header rows { key = rows[i].getElementsByTagName("TD")[n]; key = key.innerHTML.toLowerCase(); if(numeric==1) { key=key.replace(/[^0-9.]/g,'') } ordering.push([key,i]); } var ascending = isOrdered(ordering,numeric); //sort either numerically or alphabetically if(numeric==1) { ordering.sort((x,y) => Number(x[0])-Number(y[0])); } else { ordering.sort(); //sorts alphabetically } if(ascending) ordering.reverse(); for(i = 0; i < ordering.length; i++) //add sorted list at the end of the table { var keyval = ordering[i]; id = keyval[1]; //get rownumber of n^th sorted value cln = rows[id].cloneNode(true); //deep clone of current node table.insertBefore(cln,null); //add n^th row at the end } for(i = 1; i < ordering.length+1; i++) //remove unsorted nodes { table.deleteRow(1);// 0 -> header; 1 -> first row } }