diff --git a/scripts/pi-hole/js/index.js b/scripts/pi-hole/js/index.js index f56d63609..148f82757 100644 --- a/scripts/pi-hole/js/index.js +++ b/scripts/pi-hole/js/index.js @@ -327,13 +327,14 @@ function updateQueryTypesPie() { $(this).toggleClass("strike"); var index = $(this).index(); var ci = e.view.queryTypePieChart; - var meta = ci.data.datasets[0]._meta; - for (var i in meta) { - if (Object.prototype.hasOwnProperty.call(meta, i)) { - var curr = meta[i].data[index]; - curr.hidden = !curr.hidden; - } - } + var mobj = ci.data.datasets[0]._meta; + var metas = Object.keys(mobj).map(function (e) { + return mobj[e]; + }); + metas.forEach(function (meta) { + var curr = meta.data[index]; + curr.hidden = !curr.hidden; + }); ci.update(); } else if (e.which === 1) { @@ -485,19 +486,22 @@ function updateForwardDestinationsPie() { $(this).toggleClass("strike"); var index = $(this).index(); var ci = e.view.forwardDestinationPieChart; - var meta = ci.data.datasets[0]._meta; - for (var i in meta) { - if (Object.prototype.hasOwnProperty.call(meta, i)) { - var curr = meta[i].data[index]; - curr.hidden = !curr.hidden; - } - } + var mobj = ci.data.datasets[0]._meta; + var metas = Object.keys(mobj).map(function (e) { + return mobj[e]; + }); + metas.forEach(function (meta) { + var curr = meta.data[index]; + curr.hidden = !curr.hidden; + }); ci.update(); } else if (e.which === 1) { // which == 1 is left mouse button var obj = encodeURIComponent(e.target.textContent); - window.open("queries.php?forwarddest=" + obj, "_self"); + if (obj.length > 0) { + window.open("queries.php?forwarddest=" + obj, "_self"); + } } }); }).done(function () { @@ -785,6 +789,34 @@ function updateSummaryData(runOnce) { }); } +function doughnutTooltip(tooltipItems, data) { + var dataset = data.datasets[tooltipItems.datasetIndex]; + var label = data.labels[tooltipItems.index]; + // Compute share of total and of displayed + var scale = 0, + total = 0; + var metas = Object.keys(dataset._meta).map(function (e) { + return dataset._meta[e]; + }); + metas.forEach(function (meta) { + meta.data.forEach(function (val, i) { + if (val.hidden) scale += dataset.data[i]; + total += dataset.data[i]; + }); + }); + if (scale === 0) + // All items shown + return label + ": " + dataset.data[tooltipItems.index].toFixed(1) + "%"; + return ( + label + + ":
- " + + dataset.data[tooltipItems.index].toFixed(1) + + "% of all queries
- " + + ((dataset.data[tooltipItems.index] * 100) / (total - scale)).toFixed(1) + + "% of shown items" + ); +} + $(function () { // Pull in data via AJAX updateSummaryData(); @@ -1035,9 +1067,7 @@ $(function () { return "Query types"; }, label: function (tooltipItems, data) { - var dataset = data.datasets[tooltipItems.datasetIndex]; - var label = data.labels[tooltipItems.index]; - return label + ": " + dataset.data[tooltipItems.index].toFixed(1) + "%"; + return doughnutTooltip(tooltipItems, data); } } }, @@ -1077,9 +1107,7 @@ $(function () { return "Forward destinations"; }, label: function (tooltipItems, data) { - var dataset = data.datasets[tooltipItems.datasetIndex]; - var label = data.labels[tooltipItems.index]; - return label + ": " + dataset.data[tooltipItems.index].toFixed(1) + "%"; + return doughnutTooltip(tooltipItems, data); } } },