Wiki source code of TableToChartJS

Last modified by Vincent Massol on 2024/10/30

Show last authors
1 == Description ==
2
3 Draws charts using Chart.js and the data from a table.
4
5 == Usage ==
6
7 {{code language="none"}}
8 (% id="myTable" %)
9 |=Header1|=Header2
10 |label|numeric value
11 ...
12
13 {{tableToChartJS type="..." table="myTable" /}}
14 {{/code}}
15
16 == Parameters ==
17
18 {{velocity}}
19 #set ($parameters = $doc.getObjects('XWiki.WikiMacroParameterClass'))
20 #set ($headers = '|=Name|=Description|=Mandatory|=Default')
21 #set ($body = '')
22 #foreach ($parameter in $parameters)
23 #set ($isMandatory = ${parameter.getProperty('mandatory').value})
24 #if ($isMandatory == 1) #set ($isMandatory = "Yes") #else #set ($isMandatory = "No") #end
25 #set ($body = "$body|${parameter.getProperty('name').value}|(((${parameter.getProperty('description').value})))|$isMandatory|$parameter.getProperty('defaultValue').value
26 ")
27 #end
28 ## This option is handy for generating the code to be pasted to the online extension.xwiki.org page for documenting the parameters statically (i.e. without having the macro object attached to the page).
29 #if ($request.debug)
30 {{code}}
31 $headers
32 $body
33 {{/code}}
34 #end
35
36 $headers
37 $body
38 {{/velocity}}
39
40 == Examples ==
41
42 === Single Data Set ===
43
44 (% id="singleDataSet" %)
45 |=Issue Type|=Count
46 |Bug|23
47 |Improvement|17
48 |{{html}}New
Feature{{/html}}|9
49 |Ideas|0
50
51 {{velocity}}
52 #set ($chartOptions = {
53 "backgroundColors": ["#ff16e8", "#0018f4","#065d00"],
54 "opacity": 0.8,
55 "skipZeros": true,
56 "legend": {
57 "display": false
58 },
59 "layout": {
60 "padding": {
61 "left": 50,
62 "right": 50,
63 "top": 50,
64 "bottom": 50
65 }
66 },
67 "plugins" : {
68 "datalabels": {
69 "anchor": "end",
70 "align": "end",
71 "includeLegend": true
72 }
73 }
74 })
75 #set ($options = $jsontool.serialize($chartOptions).replaceAll("~","~~").replaceAll("'","~'"))
76
77 (% class="row" %)(((
78 #foreach ($type in ['pie', 'doughnut', 'polarArea'])
79 (% class="col-sm-6 col-md-4" %)(((
80 {{tableToChartJS type="$type" id="issues-$type" title="Issues" table="singleDataSet" options='$options' height="200px" cssClass="my-chart"/}}
81 )))
82 #end
83 )))
84 {{/velocity}}
85
86 === Multiple Data Sets ===
87
88 {{velocity}}
89 #set ($chartOptions = {
90 "backgroundColors": ["#ff16e8", "#0018f4","#065d00"],
91 "opacity": 0.8,
92 "skipZeros": true
93 })
94 #set ($options = $jsontool.serialize($chartOptions).replaceAll("~","~~").replaceAll("'","~'"))
95 {{/velocity}}
96
97 (% id="multipleDataSetsMerged" %)
98 |=Issue Type|=CKEditor|=Diagram
99 |Bug|25|34
100 |Improvement|17|11
101 |New Feature|5|6
102 |Ideas|0|0
103
104 {{velocity}}
105 (% class="row" %)(((
106 #foreach ($type in ['pie', 'doughnut'])
107 (% class="col-sm-6 col-md-4" %)(((
108 {{tableToChartJS type="$type" table="multipleDataSetsMerged" multipleDataSets="true" options='$options' /}}
109 )))
110 #end
111 #set($chartOptions = {
112 "backgroundColors": ["#0079b6", "#ffe600"],
113 "opacity": 0.8,
114 "skipZeros": true,
115 "plugins" : {
116 "datalabels": {
117 "anchor": "end",
118 "align": "end",
119 "showLegend": true
120 }
121 }
122 })
123 #set ($options = $jsontool.serialize($chartOptions).replaceAll("~","~~").replaceAll("'","~'"))
124
125 (% class="col-sm-6 col-md-4" %)(((
126 {{tableToChartJS type="bar" table="multipleDataSetsMerged" multipleDataSets="true" options='$options' /}}
127 )))
128
129 )))
130 {{/velocity}}
131
132 (% id="multipleDataSetsLine" %)
133 |=Month|=2016|=2017
134 |January|65|61
135 |February|59|73
136 |March|80|82
137 |April|81|69
138 |May|56|70
139 |June|55|58
140 |July|40|47
141
142 (% class="row" %)(((
143 (% class="col-sm-6" %)(((
144 {{tableToChartJS type="line" table="multipleDataSetsLine" multipleDataSets="true"/}}
145 )))
146
147 {{velocity}}
148 #set ($stackedLineOptions = {
149 'scales': {
150 'yAxes': [{
151 'stacked': true
152 }]
153 }
154 })
155 (% class="col-sm-6" %)(((
156 {{tableToChartJS type="line" table="multipleDataSetsLine" multipleDataSets="true"
157 options='$jsontool.serialize($stackedLineOptions)'/}}
158 )))
159 {{/velocity}}
160 )))
161
162 (% class="row" %)(((
163 (% class="col-sm-6" %)(((
164 (% id="multipleDataSetsRadar" %)
165 |=Month|=2016|=2017
166 |Eating|65|28
167 |Running|40|100
168 |Cycling|55|27
169 |Coding|56|96
170 |Designing|81|19
171 |Sleeping|90|40
172 |Drinking|59|48
173 )))
174
175 (% class="col-sm-6" %)(((
176 {{tableToChartJS type="radar" table="multipleDataSetsRadar" multipleDataSets="true"/}}
177 )))
178 )))
179
180 === Merged Data Sets ===
181
182 (% id="multipleDataSetsSplit" %)
183 |=Issue Type|=Project|=Count
184 |Bug|CKEditor|23
185 |Bug|Diagram|34
186 |Improvement|CKEditor|17
187 |Improvement|Diagram|11
188 |New Feature|CKEditor|5
189 |New Feature|Diagram|6
190
191 (% class="row" %)(((
192 (% class="col-sm-6" %)(((
193 {{tableToChartJS type="bar" table="multipleDataSetsSplit" multipleDataSets="true" dataSetLabel="1"/}}
194 )))
195
196 (% class="col-sm-6" %)(((
197 {{tableToChartJS type="horizontalBar" table="multipleDataSetsSplit" multipleDataSets="true" dataSetLabel="1"/}}
198 )))
199
200 {{velocity}}
201 #set ($stackedBarOptions = {
202 'scales': {
203 'xAxes': [{
204 'stacked': true
205 }],
206 'yAxes': [{
207 'stacked': true
208 }]
209 }
210 })
211 (% class="col-sm-6" %)(((
212 {{tableToChartJS type="bar" table="multipleDataSetsSplit" multipleDataSets="true" dataSetLabel="1"
213 options='$jsontool.serialize($stackedBarOptions)'/}}
214 )))
215
216 (% class="col-sm-6" %)(((
217 {{tableToChartJS type="horizontalBar" table="multipleDataSetsSplit" multipleDataSets="true" dataSetLabel="1"
218 options='$jsontool.serialize($stackedBarOptions)'/}}
219 )))
220 {{/velocity}}
221 )))

Get Connected