diff --git a/internal/report/render_html.go b/internal/report/render_html.go index a8c825f2..01786950 100644 --- a/internal/report/render_html.go +++ b/internal/report/render_html.go @@ -467,7 +467,33 @@ new Chart(document.getElementById('{{.ID}}'), { } }, legend: { - display: {{.DisplayLegend}} + display: {{.DisplayLegend}}, + onClick: function(e, legendItem, legend) { + const chart = legend.chart; + const datasetIndex = legendItem.datasetIndex; + const nativeEvent = e && e.native ? e.native : e; + const isCtrl = nativeEvent && (nativeEvent.ctrlKey || nativeEvent.metaKey); + + if (isCtrl) { + const onlyThisVisible = chart.data.datasets.every(function(ds, idx) { + if (idx === datasetIndex) { + return chart.isDatasetVisible(idx); + } + return !chart.isDatasetVisible(idx); + }); + + chart.data.datasets.forEach(function(ds, idx) { + const visible = onlyThisVisible ? true : idx === datasetIndex; + chart.setDatasetVisibility(idx, visible); + }); + chart.update(); + return; + } + + const visible = chart.isDatasetVisible(datasetIndex); + chart.setDatasetVisibility(datasetIndex, !visible); + chart.update(); + } } } } @@ -518,7 +544,33 @@ new Chart(document.getElementById('{{.ID}}'), { } }, legend: { - display: {{.DisplayLegend}} + display: {{.DisplayLegend}}, + onClick: function(e, legendItem, legend) { + const chart = legend.chart; + const datasetIndex = legendItem.datasetIndex; + const nativeEvent = e && e.native ? e.native : e; + const isCtrl = nativeEvent && (nativeEvent.ctrlKey || nativeEvent.metaKey); + + if (isCtrl) { + const onlyThisVisible = chart.data.datasets.every(function(ds, idx) { + if (idx === datasetIndex) { + return chart.isDatasetVisible(idx); + } + return !chart.isDatasetVisible(idx); + }); + + chart.data.datasets.forEach(function(ds, idx) { + const visible = onlyThisVisible ? true : idx === datasetIndex; + chart.setDatasetVisibility(idx, visible); + }); + chart.update(); + return; + } + + const visible = chart.isDatasetVisible(datasetIndex); + chart.setDatasetVisibility(datasetIndex, !visible); + chart.update(); + } } } }