PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.15.0
Independent Analytics – WordPress Analytics Plugin v2.15.0
2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / javascript-source / chart_plugins / html_legend_plugin.js
independent-analytics / javascript-source / chart_plugins Last commit date
corsair_plugin.js 1 year ago html_legend_plugin.js 6 days ago
html_legend_plugin.js
73 lines
1 module.exports = {
2 id: 'htmlLegend',
3 getLegendContainer(options) {
4 if (options.container instanceof HTMLElement) {
5 return options.container
6 } else {
7 return document.getElementById(options.containerID);
8 }
9 },
10 afterUpdate(chart, args, options) {
11 const shouldAnimate = options.shouldAnimate ?? true;
12 const legendContainer = this.getLegendContainer(options)
13 let legendList = legendContainer.querySelector('ul');
14
15 // Create a list as needed
16 if (!legendList) {
17 legendList = document.createElement('ul');
18 legendList.classList.add('legend-list');
19 legendContainer.appendChild(legendList);
20 }
21
22 // Remove old legend items
23 while (legendList.firstChild) {
24 legendList.firstChild.remove();
25 }
26
27 // Reuse the built-in legendItems generator
28 const items = chart.options.plugins.legend.labels.generateLabels(chart);
29
30 items.forEach((legendData) => {
31 const id = chart.data.datasets.find((dataset) => dataset.label === legendData.text).id
32 const li = document.createElement('li');
33
34 li.onclick = () => {
35 const {type} = chart.config;
36 if (type === 'pie' || type === 'doughnut') {
37 // Pie and doughnut charts only have a single dataset and visibility is per item
38 chart.toggleDataVisibility(legendData.index);
39 } else {
40 chart.setDatasetVisibility(legendData.datasetIndex, !chart.isDatasetVisible(legendData.datasetIndex));
41 }
42
43 chart.update(shouldAnimate ? null : 'none');
44
45 if (typeof options.callback === 'function') {
46 const visibleDatasets = chart.data.datasets.filter((dataset, index) => {
47 return chart.isDatasetVisible(index);
48 }).map((dataset) => {
49 return dataset.id
50 })
51 options.callback(visibleDatasets)
52 }
53 };
54
55 li.classList.add('legend-item', `legend-item-for-${id}`)
56
57 if (legendData.hidden) {
58 li.classList.add('hidden')
59 }
60
61 // Color box
62 const boxSpan = document.createElement('span');
63
64 // Text
65 const textContainer = document.createElement('p');
66 textContainer.textContent = legendData.text
67
68 li.appendChild(boxSpan);
69 li.appendChild(textContainer);
70 legendList.appendChild(li);
71 });
72 }
73 };