From 0d1c3cb583ec10f08deb03f53ff4b954dcd352a8 Mon Sep 17 00:00:00 2001 From: CodeSteak Date: Wed, 15 Jan 2020 21:32:11 +0100 Subject: [PATCH] implement filter Table --- .../main/resources/static/js/filterTable.js | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 prototype/src/main/resources/static/js/filterTable.js diff --git a/prototype/src/main/resources/static/js/filterTable.js b/prototype/src/main/resources/static/js/filterTable.js new file mode 100644 index 0000000..f760ffc --- /dev/null +++ b/prototype/src/main/resources/static/js/filterTable.js @@ -0,0 +1,50 @@ +function filterTable(caller) { + let target = caller.dataset.targetId; + let searchTerm = caller.value; + + + let table = document.getElementById(target); + let tds = Array.from(table.getElementsByTagName("tr")).filter(elm => + elm.getElementsByTagName("th").length == 0 + ); + + let matching = []; + let notMatching = []; + + for (let td of tds) { + if (td.innerText.toLowerCase().includes(searchTerm.trim().toLowerCase())) { + matching.push(td); + } else { + notMatching.push(td); + } + } + + let valid = matching.length > 0 || tds.length == 0; + if (valid) { + caller.setCustomValidity(""); + for (let td of matching) { + td.style.display = null; + } + for (let td of notMatching) { + td.style.display = "none"; + } + } else { + caller.setCustomValidity("Nothing Matched"); + for (let td of tds) { + td.style.display = null; + } + } +} + +document.addEventListener("DOMContentLoaded", function(event) { + let elms = document.getElementsByClassName("jsFilterTable"); + for (let elm of elms) { + elm.addEventListener('oninput', () => filterTable(elm)); + elm.addEventListener('onpaste', () => filterTable(elm)); + elm.addEventListener('keyup', () => filterTable(elm)); + + window.setTimeout(function() { + filterTable(elm); + }, 10); + } +});