4 $("a[data-filter]").on("click", function(ev) {
5 var filter = this.dataset.filter;
6 var value = this.dataset.filterValue;
7 var re = RegExp(filter+"=[a-z]*");
8 var newhref = location.href;
9 if (!location.href.indexOf("?") < 0) {
10 newhref = location.href + "?" + filter + "=" + value;
11 } else if (location.href.match(re)) {
12 newhref = location.href.replace(RegExp(filter+"=[a-z]*"), filter+"="+value);
14 newhref = location.href + "&" + filter + "=" + value;
16 location.href = newhref;
20 /* log details dialog */
21 $(".log-event").on("click", function(ev) {
22 show_details_for_element(ev.currentTarget);
24 $(".log-event").on("keydown", function(ev) {
25 if (ev.keyCode == 13 || ev.keyCode == 32) {
26 show_details_for_element(ev.currentTarget);
31 $("[data-previous").on("click", function(ev){
32 var currentid = document.getElementById("logdetail").dataset.rowId;
33 var $elm = $("#" + currentid).prev();
34 if ($elm.length == 0) return;
35 show_details_for_element($elm[0]);
38 $("[data-next").on("click", function(ev){
39 var currentid = document.getElementById("logdetail").dataset.rowId;
40 var $elm = $("#" + currentid).next();
41 if ($elm.length == 0) return;
42 show_details_for_element($elm[0]);
46 const $modal = $("#logdetail");
48 $modal.on("hidden.bs.modal", function(ev){
50 .querySelectorAll('[aria-expanded="true"]')
51 .forEach(elm => elm.setAttribute("aria-expanded", false))
54 function show_details_for_element(element) {
55 $modal[0].dataset.rowId = element.id;
57 var tr = $modal.find(".main-data tbody tr")[0];
58 tr.innerHTML = element.innerHTML;
60 var data = JSON.parse(element.dataset.source);
61 $modal.find(".source-data td").each(function(i,elm){
62 var k = elm.dataset.value;
63 elm.innerText = data[k];
66 var elm = $modal.find(".event-data")[0];
67 const event_data_header = $modal.find(".event-data-header")[0];
70 event_data_header.hidden = true;
73 // Fill out event data
74 var data = element.dataset.data;
76 event_data_header.hidden = false;
77 data = JSON.parse(data);
78 elm.innerHTML += recursive_details("", data);
81 $("[data-previous").prop("disabled", $(element).prev().length == 0);
82 $("[data-next").prop("disabled", $(element).next().length == 0);
85 element.setAttribute("aria-expanded", true);
88 function recursive_details(s, data, lev=0) {
90 if (data.hasOwnProperty(k)) {
92 var open = lev > 1 ? "" : "open";
93 s += "<details " + open + "><summary>" + k + "</summary>";
94 if (typeof v === 'object' && v !== null) {
95 s = recursive_details(s, v, lev+1);
97 s += $("<pre>").text(v)[0].outerHTML;