$(function(){
+
+ /* column filter */
+ $("a[data-filter]").on("click", function(ev) {
+ var filter = this.dataset.filter;
+ var value = this.dataset.filterValue;
+ var re = RegExp(filter+"=[a-z]*");
+ var newhref = location.href;
+ if (!location.href.indexOf("?") < 0) {
+ newhref = location.href + "?" + filter + "=" + value;
+ } else if (location.href.match(re)) {
+ newhref = location.href.replace(RegExp(filter+"=[a-z]*"), filter+"="+value);
+ } else {
+ newhref = location.href + "&" + filter + "=" + value;
+ }
+ location.href = newhref;
+ return false;
+ });
+
+ /* log details dialog */
$(".log-event").on("click", function(ev) {
- var $modal = $("#logdetail");
- var tr = $modal.find(".main-data tbody tr")[0];
- tr.innerHTML = ev.currentTarget.innerHTML;
+ show_details_for_element(ev.currentTarget);
+ });
+ $(".log-event").on("keydown", function(ev) {
+ if (ev.keyCode == 13 || ev.keyCode == 32) {
+ show_details_for_element(ev.currentTarget);
+ }
+ });
+
+
+ $("[data-previous").on("click", function(ev){
+ var currentid = document.getElementById("logdetail").dataset.rowId;
+ var $elm = $("#" + currentid).prev();
+ if ($elm.length == 0) return;
+ show_details_for_element($elm[0]);
+ });
- var data = JSON.parse(ev.currentTarget.dataset.source);
+ $("[data-next").on("click", function(ev){
+ var currentid = document.getElementById("logdetail").dataset.rowId;
+ var $elm = $("#" + currentid).next();
+ if ($elm.length == 0) return;
+ show_details_for_element($elm[0]);
+ });
+
+
+ const $modal = $("#logdetail");
+
+ $modal.on("hidden.bs.modal", function(ev){
+ document
+ .querySelectorAll('[aria-expanded="true"]')
+ .forEach(elm => elm.setAttribute("aria-expanded", false))
+ });
+
+ function show_details_for_element(element) {
+ $modal[0].dataset.rowId = element.id;
+
+ var tr = $modal.find(".main-data tbody tr")[0];
+ tr.innerHTML = element.innerHTML;
+
+ var data = JSON.parse(element.dataset.source);
$modal.find(".source-data td").each(function(i,elm){
var k = elm.dataset.value;
elm.innerText = data[k];
var elm = $modal.find(".event-data")[0];
elm.innerHTML = "";
- var data = ev.currentTarget.dataset.data;
+ var data = element.dataset.data;
if (data !== "") {
elm.innerHTML = "<h3>Data</h3>";
data = JSON.parse(data);
elm.innerHTML += recursive_details("", data);
}
+ $("[data-previous").prop("disabled", $(element).prev().length == 0);
+ $("[data-next").prop("disabled", $(element).next().length == 0);
+
$modal.modal({})
- })
+ element.setAttribute("aria-expanded", true);
+ }
function recursive_details(s, data, lev=0) {
for(var k in data) {