|
1 | 1 | (function() { |
| 2 | + |
2 | 3 | 'use strict'; |
3 | 4 |
|
| 5 | + function slugify(str) { |
| 6 | + str = str.replace(/^\s+|\s+$/g, ''); |
| 7 | + // Make the string lowercase |
| 8 | + str = str.toLowerCase(); |
| 9 | + // Remove invalid chars |
| 10 | + str = str.replace(/[^a-z0-9 -]/g, '') |
| 11 | + // Collapse whitespace and replace by - |
| 12 | + .replace(/\s+/g, '-') |
| 13 | + // Collapse dashes |
| 14 | + .replace(/-+/g, '-'); |
| 15 | + return str; |
| 16 | + } |
| 17 | + |
4 | 18 | let elementsParam = Object.values(owDashboardCharts), |
5 | 19 | container = document.getElementById('plot-container'); |
6 | 20 |
|
|
38 | 52 | type: 'pie', |
39 | 53 | hole: 0.6, |
40 | 54 | }, |
41 | | - element = document.createElement('div'); |
| 55 | + element = document.createElement('div'), |
| 56 | + totalValues = 0; |
42 | 57 |
|
43 | 58 | // Show a graph depicting disabled graph when there is insufficient data |
44 | | - if (elementsParam[i].query_params.values.length == 0) { |
| 59 | + if (elementsParam[i].query_params.values.length === 0) { |
45 | 60 | data.values = [1]; |
46 | 61 | data.labels = ['Not enough data']; |
47 | 62 | data.marker = { |
|
71 | 86 | data.filters = elementsParam[i].filters; |
72 | 87 |
|
73 | 88 | // add total to pie chart |
74 | | - var total = 0; |
75 | 89 | for (var c = 0; c < data.values.length; c++) { |
76 | | - total += data.values[c]; |
| 90 | + totalValues += data.values[c]; |
77 | 91 | } |
78 | | - layout.annotations = [ |
79 | | - { |
80 | | - font: { |
81 | | - size: 20, |
82 | | - weight: 'bold' |
83 | | - }, |
84 | | - showarrow: false, |
85 | | - text: `<b>${total}</b>`, |
86 | | - x: 0.5, |
87 | | - y: 0.5 |
88 | | - } |
89 | | - ]; |
90 | 92 | } |
| 93 | + layout.annotations = [ |
| 94 | + { |
| 95 | + font: { |
| 96 | + size: 20, |
| 97 | + weight: 'bold' |
| 98 | + }, |
| 99 | + showarrow: false, |
| 100 | + text: `<b>${totalValues}</b>`, |
| 101 | + x: 0.5, |
| 102 | + y: 0.5 |
| 103 | + } |
| 104 | + ]; |
91 | 105 |
|
92 | 106 | Plotly.newPlot(element, [data], layout, options); |
93 | 107 |
|
|
104 | 118 | window.location = path; |
105 | 119 | }); |
106 | 120 | } |
| 121 | + |
| 122 | + // Add quick link button |
| 123 | + if (elementsParam[i].hasOwnProperty('quick_link')) { |
| 124 | + let quickLinkContainer = document.createElement('div'); |
| 125 | + quickLinkContainer.classList.add('quick-link-container'); |
| 126 | + let quickLink = document.createElement('a'); |
| 127 | + quickLink.href = elementsParam[i].quick_link.url; |
| 128 | + quickLink.innerHTML = elementsParam[i].quick_link.label; |
| 129 | + quickLink.title = elementsParam[i].quick_link.title || elementsParam[i].quick_link.label; |
| 130 | + quickLink.classList.add('button', 'quick-link'); |
| 131 | + // Add custom css classes |
| 132 | + if (elementsParam[i].quick_link.custom_css_classes) { |
| 133 | + for(let j=0; j<elementsParam[i].quick_link.custom_css_classes.length; ++j){ |
| 134 | + quickLink.classList.add(elementsParam[i].quick_link.custom_css_classes[j]); |
| 135 | + } |
| 136 | + } |
| 137 | + quickLinkContainer.appendChild(quickLink); |
| 138 | + element.appendChild( |
| 139 | + quickLinkContainer |
| 140 | + ); |
| 141 | + } |
| 142 | + element.classList.add(slugify(elementsParam[i].name)); |
107 | 143 | container.appendChild(element); |
108 | 144 | } |
109 | 145 |
|
|
0 commit comments