summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
Diffstat (limited to 'media')
-rw-r--r--media/css/cavetables.css52
-rw-r--r--media/scripts/TableSort.js158
2 files changed, 210 insertions, 0 deletions
diff --git a/media/css/cavetables.css b/media/css/cavetables.css
new file mode 100644
index 0000000..ba93356
--- /dev/null
+++ b/media/css/cavetables.css
@@ -0,0 +1,52 @@
+body {
+ all: initial;
+ font-size: 100%;
+}
+
+div#inputf {
+ display: inline-block;
+ width: 300px;
+ text-align: justify;
+ margin-top: 0px;
+ margin-bottom: 5px
+}
+
+.menu, ul#links{
+ display: none;
+}
+
+table {
+ border-spacing: 0;
+ width: 100%;
+ border: 1px solid #ddd;
+ font-family: monospace;
+}
+
+th {
+ cursor: pointer;
+ background-color: #bbb
+}
+
+th, td {
+ padding: 16px;
+ max-height: 40px;
+}
+
+tr:nth-child(even) {
+ background-color: #f2f2f2
+}
+
+p {
+
+ margin-right: 80px;
+ margin-left: 80px;
+}
+
+button {
+ width: 300px
+}
+span#mono {
+ font-family: monospace;
+ background-color: #eee;
+ font-size: 120%;
+}
diff --git a/media/scripts/TableSort.js b/media/scripts/TableSort.js
new file mode 100644
index 0000000..39f5e92
--- /dev/null
+++ b/media/scripts/TableSort.js
@@ -0,0 +1,158 @@
+function filterTable(tablename)
+{
+ 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(depth<mindepth || depth>maxdepth)
+ {
+ rows[i].style.visibility = "collapse";
+ }
+ if(length<minlength || length>maxlength)
+ {
+ 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; j<crow.length; j++)
+ {
+ if(crow[j].innerHTML == "" && incomplete)
+ {
+ rows[i].style.visibility = "collapse";
+ break;
+ }
+ }
+
+ }
+}
+
+function filterTableReset(tablename)
+{
+ table = document.getElementById(tablename);
+ rows = table.rows;
+ for(i=1; i< rows.length; i++)
+ {
+ rows[i].style.visibility = "visible";
+ }
+}
+
+
+function isOrdered(kvarray,numeric)
+{
+ for(var i=0;i<kvarray.length-1;i++)
+ {
+ if(numeric==1 && Number(kvarray[i][0])>Number(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
+ }
+
+}