PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 1.4.2.2
Visualizer – Tables & Charts Manager with Built-in AI Generator v1.4.2.2
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
← All changes | js/render.js +16 -247 3.0.51.4.2.2 View file →
@@ -1,7 +1,4 @@
1 -/* global google */
2 -/* global visualizer */
3 -/* global console */
4 1 (function(v, g) {
5 2 var gv;
6 3
7 4 v.objects = {};
@@ -14,34 +11,24 @@
14 11 data = chart.data;
15 12 settings = chart.settings;
16 13
17 14 container = document.getElementById(id);
18 - if (container == null) {
19 - return;
20 - }
21 15 table = new gv.DataTable({cols: series});
22 16
23 17 render = v.objects[id] || null;
24 18 if (!render) {
25 - switch (chart.type) {
26 - case "gauge":
27 - case "table":
28 - case "timeline":
29 - render = chart.type.charAt(0).toUpperCase() + chart.type.slice(1);
30 - break;
31 - default:
32 - render = chart.type.charAt(0).toUpperCase() + chart.type.slice(1) + 'Chart';
33 - break;
34 - }
19 + render = chart.type == 'gauge'
20 + ? 'Gauge'
21 + : chart.type.charAt(0).toUpperCase() + chart.type.slice(1) + 'Chart';
35 22
36 23 render = new gv[render](container);
37 24 }
38 25
39 - switch (chart.type) {
26 + switch (v.charts[id].type) {
40 27 case 'pie':
41 28 if (settings.slices) {
42 29 for (i in settings.slices) {
43 - if (settings.slices[i]['color'] === '') {
30 + if (settings.slices[i]['color'] == '') {
44 31 delete settings.slices[i]['color'];
45 32 }
46 33 }
47 34 }
@@ -53,65 +40,28 @@
53 40 case 'scatter':
54 41 case 'candlestick':
55 42 if (settings.series) {
56 43 for (i in settings.series) {
57 - if (settings.series[i]['color'] === '') {
44 + if (settings.series[i]['color'] == '') {
58 45 delete settings.series[i]['color'];
59 46 }
60 47 }
61 48 }
62 -
63 - if (settings.series && settings.legend && settings.legend.position === "left")
64 - {
65 - settings.targetAxisIndex = 1;
66 - }
67 49 break;
68 50 case 'geo':
69 - if (settings.region !== undefined && settings.region.replace(/^\s+|\s+$/g, '') === '') {
51 + if (settings.region != undefined && settings.region.replace(/^\s+|\s+$/g, '') == '') {
70 52 settings['region'] = 'world';
71 53 }
72 54 break;
73 - case 'table':
74 - if (parseInt(settings['pagination']) !== 1)
75 - {
76 - delete settings['pageSize'];
77 - }
78 - break;
79 55 case 'gauge':
80 56 break;
81 - case 'timeline':
82 - settings['timeline'] = [];
83 - settings['timeline']['groupByRowLabel'] = settings['groupByRowLabel'] ? true : false;
84 - settings['timeline']['colorByRowLabel'] = settings['colorByRowLabel'] ? true : false;
85 - settings['timeline']['showRowLabels'] = settings['showRowLabels'] ? true : false;
86 - if(settings['singleColor'] !== '') {
87 - settings['timeline']['singleColor'] = settings['singleColor'];
88 - }
89 - break;
90 - case 'combo':
91 - if (settings.series) {
92 - for (i in settings.series) {
93 - if (settings.series[i]['type'] === '') {
94 - delete settings.series[i]['type'];
95 - }
96 - if (settings.series[i]['color'] === '') {
97 - delete settings.series[i]['color'];
98 - }
99 - }
100 - }
101 -
102 - if (settings.series && settings.legend && settings.legend.position === "left")
103 - {
104 - settings.targetAxisIndex = 1;
105 - }
106 - break;
107 57 default:
108 58 return;
109 59 }
110 60
111 - if (series[0] && (series[0].type === 'date' || series[0].type === 'datetime')) {
61 + if (series[0] && (series[0].type == 'date' || series[0].type == 'datetime')) {
112 62 axis = false;
113 - switch (chart.type) {
63 + switch (v.charts[id].type) {
114 64 case 'line':
115 65 case 'area':
116 66 case 'scatter':
117 67 case 'candlestick':
@@ -137,28 +87,12 @@
137 87 }
138 88 }
139 89 }
140 90
141 - if(settings.hAxis){
142 - if(settings.hAxis.textStyle && settings.hAxis.textStyle !== ''){
143 - if(typeof(settings.hAxis.textStyle) === "string") {
144 - settings.hAxis.textStyle = {color: settings.hAxis.textStyle};
145 - }
146 - }
147 - }
148 -
149 - if(settings.vAxis){
150 - if(settings.vAxis.textStyle && settings.vAxis.textStyle !== ''){
151 - if(typeof(settings.vAxis.textStyle) === "string") {
152 - settings.vAxis.textStyle = {color: settings.vAxis.textStyle};
153 - }
154 - }
155 - }
156 -
157 91 for (i = 0; i < data.length; i++) {
158 92 row = [];
159 93 for (j = 0; j < series.length; j++) {
160 - if (series[j].type === 'date' || series[j].type === 'datetime') {
94 + if (series[j].type == 'date' || series[j].type == 'datetime') {
161 95 date = new Date(data[i][j]);
162 96 data[i][j] = null;
163 97 if (Object.prototype.toString.call(date) === "[object Date]") {
164 98 if (!isNaN(date.getTime())) {
@@ -173,9 +107,9 @@
173 107
174 108 if (settings.series) {
175 109 for (i = 0; i < settings.series.length; i++) {
176 110 format = settings.series[i].format;
177 - if (!format || format === '' || !series[i + 1]) {
111 + if (!format || format == '') {
178 112 continue;
179 113 }
180 114
181 115 formatter = null;
@@ -193,30 +127,13 @@
193 127 if (formatter) {
194 128 formatter.format(table, i + 1);
195 129 }
196 130 }
197 - } else if (chart.type === 'pie' && settings.format && settings.format !== '') {
198 - formatter = new g.visualization.NumberFormat({pattern: settings.format});
199 - formatter.format(table, 1);
200 - }
131 + }
201 132
202 - v.override(settings);
203 -
204 133 render.draw(table, settings);
205 134 };
206 135
207 - v.override = function(settings) {
208 - if (settings.manual) {
209 - try{
210 - var options = JSON.parse(settings.manual);
211 - jQuery.extend(settings, options);
212 - delete settings.manual;
213 - }catch(error){
214 - console.error("Error while adding manual configuration override " + settings.manual);
215 - }
216 - }
217 - };
218 -
219 136 v.render = function() {
220 137 for (var id in (v.charts || {})) {
221 138 v.renderChart(id);
222 139 }
@@ -221,10 +138,10 @@
221 138 v.renderChart(id);
222 139 }
223 140 };
224 141
225 - g.charts.load("current", {packages: ["corechart", "geochart", "gauge", "table", "timeline"], mapsApiKey: v.map_api_key});
226 - g.charts.setOnLoadCallback(function() {
142 + g.load("visualization", "1", {packages: ["corechart", "geochart", "gauge"]});
143 + g.setOnLoadCallback(function() {
227 144 gv = g.visualization;
228 145 v.render();
229 146 });
230 147 })(visualizer, google);
@@ -236,154 +153,6 @@
236 153 $(window).resize(function() {
237 154 clearTimeout(resizeTimeout);
238 155 resizeTimeout = setTimeout(v.render, 100);
239 156 });
240 -
241 - resizeHiddenContainers(true);
242 - initActionsButtons();
243 - });
244 -
245 - $(window).load(function(){
246 - resizeHiddenContainers(true);
247 - });
248 -
249 - function initActionsButtons() {
250 - if($('a.visualizer-action[data-visualizer-type=copy]').length > 0) {
251 - var clipboard = new Clipboard('a.visualizer-action[data-visualizer-type=copy]'); // jshint ignore:line
252 - clipboard.on('success', function(e) {
253 - window.alert(v.i10n['copied']);
254 - });
255 - }
256 - $('a.visualizer-action[data-visualizer-type!=copy]').on('click', function(e) {
257 - var type = $(this).attr( 'data-visualizer-type' );
258 - var chart = $(this).attr( 'data-visualizer-chart-id' );
259 - var lock = $('.visualizer-front.visualizer-front-' + chart);
260 - lock.lock();
261 - e.preventDefault();
262 - $.ajax({
263 - url : v.rest_url.replace('#id#', chart).replace('#type#', type),
264 - success: function(data) {
265 - if (data && data.data) {
266 - switch(type){
267 - case 'csv':
268 - var a = document.createElement("a");
269 - document.body.appendChild(a);
270 - a.style = "display: none";
271 - var blob = new Blob([data.data.csv], {type: $(this).attr( 'data-visualizer-mime' ) }),
272 - url = window.URL.createObjectURL(blob);
273 - a.href = url;
274 - a.download = data.data.name;
275 - a.click();
276 - setTimeout(function () {
277 - window.URL.revokeObjectURL(url);
278 - }, 100);
279 - break;
280 - case 'xls':
281 - var $a = $("<a>");
282 - $a.attr("href",data.data.csv);
283 - $("body").append($a);
284 - $a.attr("download",data.data.name);
285 - $a[0].click();
286 - $a.remove();
287 - break;
288 - case 'print':
289 - var iframe = $('<iframe>').attr("name", "print-visualization").attr("id", "print-visualization").css("position", "absolute");
290 - iframe.appendTo($('body'));
291 - var iframe_doc = iframe.get(0).contentWindow || iframe.get(0).contentDocument.document || iframe.get(0).contentDocument;
292 - iframe_doc.document.open();
293 - iframe_doc.document.write(data.data.csv);
294 - iframe_doc.document.close();
295 - setTimeout(function(){
296 - window.frames['print-visualization'].focus();
297 - window.frames['print-visualization'].print();
298 - iframe.remove();
299 - }, 500);
300 - break;
301 - default:
302 - if(window.visualizer_perform_action) {
303 - window.visualizer_perform_action(type, chart, data.data);
304 - }
305 - break;
306 - }
307 - }
308 - lock.unlock();
309 - }
310 - });
311 - });
312 - }
313 -
314 - function resizeHiddenContainers(everytime){
315 - $(".visualizer-front").parents().each(function(){
316 - if(!$(this).is(":visible") && !$(this).hasClass("visualizer-hidden-container")){
317 - $(this).addClass("visualizer-hidden-container");
318 - }
319 - });
320 -
321 - var mutateObserver = new MutationObserver(function(records) {
322 - records.forEach(function(record) {
323 - if(record.attributeName === "style" || record.attributeName === "class"){
324 - var element = $(record.target);
325 - var displayStyle = window.getComputedStyle(element[0]).getPropertyValue("display");
326 - if(element.hasClass("visualizer-hidden-container-resized") || displayStyle === "none") { return ; }
327 - element.find(".visualizer-front").resize();
328 - if(!everytime) {
329 - element.addClass("visualizer-hidden-container-resized");
330 - }
331 - }
332 - });
333 - });
334 -
335 - $('.visualizer-hidden-container').each(function(){
336 - mutateObserver.observe($(this)[0], {attributes: true});
337 - });
338 - }
339 -
340 -})(jQuery, visualizer);
341 -
342 -(function ($) {
343 - $.fn.lock = function () {
344 - $(this).each(function () {
345 - var $this = $(this);
346 - var position = $this.css('position');
347 -
348 - if (!position) {
349 - position = 'static';
350 - }
351 -
352 - switch (position) {
353 - case 'absolute':
354 - case 'relative':
355 - break;
356 - default:
357 - $this.css('position', 'relative');
358 - break;
359 - }
360 - $this.data('position', position);
361 -
362 - var width = $this.width(),
363 - height = $this.height();
364 -
365 - var locker = $('<div class="locker"></div>');
366 - locker.width(width).height(height);
367 -
368 - var loader = $('<div class="locker-loader"></div>');
369 - loader.width(width).height(height);
370 -
371 - locker.append(loader);
372 - $this.append(locker);
373 - $(window).resize(function () {
374 - $this.find('.locker,.locker-loader').width($this.width()).height($this.height());
375 - });
376 - });
377 -
378 - return $(this);
379 - };
380 -
381 - $.fn.unlock = function () {
382 - $(this).each(function () {
383 - $(this).find('.locker').remove();
384 - $(this).css('position', $(this).data('position'));
385 - });
386 -
387 - return $(this);
388 - };
389 -})(jQuery);
157 + });
158 +})(jQuery, visualizer);