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