PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 2.2.0
Visualizer – Tables & Charts Manager with Built-in AI Generator v2.2.0
4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.10.0 3.10.1 3.10.10 3.10.11 3.10.12 3.10.13 3.10.14 3.10.15 3.10.2 3.10.3 3.10.4 All 148 releases
visualizer / js / render.js

render.js in Visualizer – Tables & Charts Manager with Built-in AI Generator 2.2.0, at js/render.js

322 lines 10.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /* global google */
2 /* global visualizer */
3 (function(v, g) {
4 var gv;
5
6 v.objects = {};
7
8 v.renderChart = function(id) {
9 var chart, render, container, series, data, table, settings, i, j, row, date, axis, property, format, formatter;
10
11 chart = v.charts[id];
12 series = chart.series;
13 data = chart.data;
14 settings = chart.settings;
15
16 container = document.getElementById(id);
17 if (container == null) {
18 return;
19 }
20 table = new gv.DataTable({cols: series});
21
22 render = v.objects[id] || null;
23 if (!render) {
24 switch (chart.type) {
25 case "gauge":
26 case "table":
27 case "timeline":
28 render = chart.type.charAt(0).toUpperCase() + chart.type.slice(1);
29 break;
30 default:
31 render = chart.type.charAt(0).toUpperCase() + chart.type.slice(1) + 'Chart';
32 break;
33 }
34
35 render = new gv[render](container);
36 }
37
38 switch (chart.type) {
39 case 'pie':
40 if (settings.slices) {
41 for (i in settings.slices) {
42 if (settings.slices[i]['color'] === '') {
43 delete settings.slices[i]['color'];
44 }
45 }
46 }
47 break;
48 case 'line':
49 case 'bar':
50 case 'column':
51 case 'area':
52 case 'scatter':
53 case 'candlestick':
54 if (settings.series) {
55 for (i in settings.series) {
56 if (settings.series[i]['color'] === '') {
57 delete settings.series[i]['color'];
58 }
59 }
60 }
61
62 if (settings.series && settings.legend && settings.legend.position === "left")
63 {
64 settings.targetAxisIndex = 1;
65 }
66 break;
67 case 'geo':
68 if (settings.region !== undefined && settings.region.replace(/^\s+|\s+$/g, '') === '') {
69 settings['region'] = 'world';
70 }
71 break;
72 case 'table':
73 if (parseInt(settings['pagination']) !== 1)
74 {
75 delete settings['pageSize'];
76 }
77 break;
78 case 'gauge':
79 break;
80 case 'timeline':
81 settings['timeline'] = [];
82 settings['timeline']['groupByRowLabel'] = settings['groupByRowLabel'] ? true : false;
83 settings['timeline']['colorByRowLabel'] = settings['colorByRowLabel'] ? true : false;
84 settings['timeline']['showRowLabels'] = settings['showRowLabels'] ? true : false;
85 if(settings['singleColor'] !== '') {
86 settings['timeline']['singleColor'] = settings['singleColor'];
87 }
88 break;
89 case 'combo':
90 if (settings.series) {
91 for (i in settings.series) {
92 if (settings.series[i]['type'] === '') {
93 delete settings.series[i]['type'];
94 }
95 if (settings.series[i]['color'] === '') {
96 delete settings.series[i]['color'];
97 }
98 }
99 }
100
101 if (settings.series && settings.legend && settings.legend.position === "left")
102 {
103 settings.targetAxisIndex = 1;
104 }
105 break;
106 default:
107 return;
108 }
109
110 if (series[0] && (series[0].type === 'date' || series[0].type === 'datetime')) {
111 axis = false;
112 switch (chart.type) {
113 case 'line':
114 case 'area':
115 case 'scatter':
116 case 'candlestick':
117 case 'column':
118 axis = settings.hAxis;
119 break;
120 case 'bar':
121 axis = settings.vAxis;
122 break;
123 }
124
125 if (axis) {
126 for (property in axis.viewWindow) {
127 date = new Date(axis.viewWindow[property]);
128 if (Object.prototype.toString.call(date) === "[object Date]") {
129 if (!isNaN(date.getTime())) {
130 axis.viewWindow[property] = date;
131 continue;
132 }
133 }
134
135 delete axis.viewWindow[property];
136 }
137 }
138 }
139
140 if(settings.hAxis){
141 if(settings.hAxis.textStyle && settings.hAxis.textStyle !== ''){
142 if(typeof(settings.hAxis.textStyle) === "string") {
143 settings.hAxis.textStyle = {color: settings.hAxis.textStyle};
144 }
145 }
146 }
147
148 if(settings.vAxis){
149 if(settings.vAxis.textStyle && settings.vAxis.textStyle !== ''){
150 if(typeof(settings.vAxis.textStyle) === "string") {
151 settings.vAxis.textStyle = {color: settings.vAxis.textStyle};
152 }
153 }
154 }
155
156 for (i = 0; i < data.length; i++) {
157 row = [];
158 for (j = 0; j < series.length; j++) {
159 if (series[j].type === 'date' || series[j].type === 'datetime') {
160 date = new Date(data[i][j]);
161 data[i][j] = null;
162 if (Object.prototype.toString.call(date) === "[object Date]") {
163 if (!isNaN(date.getTime())) {
164 data[i][j] = date;
165 }
166 }
167 }
168 row.push(data[i][j]);
169 }
170 table.addRow(row);
171 }
172
173 if (settings.series) {
174 for (i = 0; i < settings.series.length; i++) {
175 format = settings.series[i].format;
176 if (!format || format === '' || !series[i + 1]) {
177 continue;
178 }
179
180 formatter = null;
181 switch (series[i + 1].type) {
182 case 'number':
183 formatter = new g.visualization.NumberFormat({pattern: format});
184 break;
185 case 'date':
186 case 'datetime':
187 case 'timeofday':
188 formatter = new g.visualization.DateFormat({pattern: format});
189 break;
190 }
191
192 if (formatter) {
193 formatter.format(table, i + 1);
194 }
195 }
196 } else if (chart.type === 'pie' && settings.format && settings.format !== '') {
197 formatter = new g.visualization.NumberFormat({pattern: settings.format});
198 formatter.format(table, 1);
199 }
200
201 render.draw(table, settings);
202 };
203
204 v.render = function() {
205 for (var id in (v.charts || {})) {
206 v.renderChart(id);
207 }
208 };
209
210 g.charts.load("current", {packages: ["corechart", "geochart", "gauge", "table", "timeline"], mapsApiKey: v.map_api_key});
211 g.charts.setOnLoadCallback(function() {
212 gv = g.visualization;
213 v.render();
214 });
215 })(visualizer, google);
216
217 (function($, v) {
218 var resizeTimeout;
219
220 $(document).ready(function() {
221 $(window).resize(function() {
222 clearTimeout(resizeTimeout);
223 resizeTimeout = setTimeout(v.render, 100);
224 });
225
226 resizeHiddenContainers(true);
227 initActionsButtons();
228 });
229
230 $(window).load(function(){
231 resizeHiddenContainers(true);
232 });
233
234 function initActionsButtons() {
235 if($('a.visualizer-action[data-visualizer-type=copy]').length > 0) {
236 var clipboard = new Clipboard('a.visualizer-action[data-visualizer-type=copy]'); // jshint ignore:line
237 clipboard.on('success', function(e) {
238 window.alert(v.i10n['copied']);
239 });
240 }
241 $('a.visualizer-action[data-visualizer-type!=copy]').on('click', function(e) {
242 var type = $(this).attr( 'data-visualizer-type' );
243 var chart = $(this).attr( 'data-visualizer-chart-id' );
244 e.preventDefault();
245 $.ajax({
246 url : v.rest_url.replace('#id#', chart).replace('#type#', type),
247 success: function(data) {
248 if (data && data.data) {
249 switch(type){
250 case 'csv':
251 var a = document.createElement("a");
252 document.body.appendChild(a);
253 a.style = "display: none";
254 var blob = new Blob([data.data.csv], {type: $(this).attr( 'data-visualizer-mime' ) }),
255 url = window.URL.createObjectURL(blob);
256 a.href = url;
257 a.download = data.data.name;
258 a.click();
259 setTimeout(function () {
260 window.URL.revokeObjectURL(url);
261 }, 100);
262 break;
263 case 'xls':
264 var $a = $("<a>");
265 $a.attr("href",data.data.csv);
266 $("body").append($a);
267 $a.attr("download",data.data.name);
268 $a[0].click();
269 $a.remove();
270 break;
271 case 'print':
272 var iframe = $('<iframe>').attr("name", "print-visualization").attr("id", "print-visualization").css("position", "absolute");
273 iframe.appendTo($('body'));
274 var iframe_doc = iframe.get(0).contentWindow || iframe.get(0).contentDocument.document || iframe.get(0).contentDocument;
275 iframe_doc.document.open();
276 iframe_doc.document.write(data.data.csv);
277 iframe_doc.document.close();
278 setTimeout(function(){
279 window.frames['print-visualization'].focus();
280 window.frames['print-visualization'].print();
281 iframe.remove();
282 }, 500);
283 break;
284 default:
285 if(window.visualizer_perform_action) {
286 window.visualizer_perform_action(type, data.data);
287 }
288 break;
289 }
290 }
291 }
292 });
293 });
294 }
295
296 function resizeHiddenContainers(everytime){
297 $(".visualizer-front").parents().each(function(){
298 if(!$(this).is(":visible") && !$(this).hasClass("visualizer-hidden-container")){
299 $(this).addClass("visualizer-hidden-container");
300 }
301 });
302
303 var mutateObserver = new MutationObserver(function(records) {
304 records.forEach(function(record) {
305 if(record.attributeName === "style" || record.attributeName === "class"){
306 var element = $(record.target);
307 var displayStyle = window.getComputedStyle(element[0]).getPropertyValue("display");
308 if(element.hasClass("visualizer-hidden-container-resized") || displayStyle === "none") { return ; }
309 element.find(".visualizer-front").resize();
310 if(!everytime) {
311 element.addClass("visualizer-hidden-container-resized");
312 }
313 }
314 });
315 });
316
317 $('.visualizer-hidden-container').each(function(){
318 mutateObserver.observe($(this)[0], {attributes: true});
319 });
320 }
321
322 })(jQuery, visualizer);