PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.11.14
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.11.14
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-google.js +29 -17 3.10.13.11.14 View file →
@@ -4,8 +4,9 @@
4 4
5 5 // this will store the images for each chart rendered.
6 6 var __visualizer_chart_images = [];
7 7 var chartWrapperError = [];
8 +var isResizeRequest = false;
8 9
9 10 (function($) {
10 11 var gv;
11 12 var all_charts, objects;
@@ -12,11 +13,20 @@
12 13 // so that we know which charts belong to our library.
13 14 var rendered_charts = [];
14 15
15 16 function renderChart(id) {
17 +
18 + if ( ! all_charts || 0 === Object.keys( all_charts ).length ) {
19 + return;
20 + }
21 +
16 22 var chart = all_charts[id];
17 23 var hasAnnotation = false;
18 24
25 + if ( ! chart ) {
26 + return;
27 + }
28 +
19 29 // re-render the chart only if it doesn't have annotations and it is on the front-end
20 30 // this is to prevent the chart from showing "All series on a given axis must be of the same data type" during resize.
21 31 // remember, some charts do not support annotations so they should not be included in this.
22 32 var no_annotation_charts = ['tabular', 'timeline', 'gauge', 'geo', 'bubble', 'candlestick'];
@@ -39,13 +49,14 @@
39 49
40 50 function renderSpecificChart(id, chart) {
41 51 var render, container, series, data, table, settings, i, j, row, date, axis, property, format, formatter;
42 52
43 - if ( $('#' + id).hasClass('visualizer-chart-loaded') || ( 'canvas' !== id && $('#' + id).children( ':not(.loader)' ).length > 0 ) ) {
53 + if( chart.library !== 'google' ) {
44 54 return;
45 55 }
46 -
47 - if(chart.library !== 'google'){
56 +
57 + // Bail if the chart is already rendered or is being rendered.
58 + if ( ! window.isResizeRequest && ( $('#' + id).hasClass('visualizer-chart-loaded') || ( 'canvas' !== id && $('#' + id).children( ':not(.loader, style)' ).length > 0 ) ) ) {
48 59 return;
49 60 }
50 61 rendered_charts[id] = 'yes';
51 62
@@ -116,8 +127,13 @@
116 127 {
117 128 settings['animation']['startup'] = true;
118 129 settings['animation']['duration'] = parseInt(settings['animation']['duration']);
119 130 }
131 + if ( settings['controls'] ) {
132 + settings['controls']['ui']['allowMultiple'] = 'true' === settings['controls']['allowMultiple'] ? true : false;
133 + settings['controls']['ui']['allowTyping'] = 'true' === settings['controls']['allowTyping'] ? true : false;
134 + settings['controls']['ui']['showRangeValues'] = 'true' === settings['controls']['showRangeValues'] ? true : false;
135 + }
120 136
121 137 // mark roles for series that have specified a role
122 138 // and then remove them from future processing
123 139 // and also adjust the indices of the series array so that
@@ -335,21 +351,16 @@
335 351 format_data(id, table, series[i + 1].type, settings.series[i].format, i + 1);
336 352 }
337 353 break;
338 354 default:
339 - for (i = 0; i < settings.series.length; i++) {
340 - if (!series[i + 1] || typeof settings.series[i] === 'undefined') {
341 - continue;
342 - }
343 - var seriesIndexToUse = i + 1;
344 -
345 - // if an annotation "swallowed" a series, use the following one.
346 - if(series_annotations.includes(i)){
347 - seriesIndexToUse++;
348 - }
349 - if ( series[seriesIndexToUse] ) {
350 - format_data(id, table, series[seriesIndexToUse].type, settings.series[i].format, seriesIndexToUse);
351 - }
355 + // Single-pass: walk columns, skip annotation/helper roles, apply formats in order.
356 + var k = 0; // index into settings.series (visible series)
357 + for (var c = 1; c < series.length && k < settings.series.length; c++) { // skip label at 0
358 + if (table.getColumnProperty(c, 'role')) continue; // helper/annotation column
359 + var s = settings.series[k++];
360 + if (!s || !s.format) continue;
361 + if (!series[c]) continue;
362 + format_data(id, table, series[c].type, s.format, c);
352 363 }
353 364 break;
354 365 }
355 366 } else if (chart.type === 'pie' && settings.format && settings.format !== '') {
@@ -476,10 +487,11 @@
476 487
477 488 var resizeTimeout;
478 489
479 490 $(document).ready(function() {
480 - $(window).resize(function() {
491 + $(window).resize(function(e) {
481 492 clearTimeout(resizeTimeout);
493 + window.isResizeRequest = 'undefined' !== typeof e.originalEvent ? true : false;
482 494 resizeTimeout = setTimeout(render, 100);
483 495 });
484 496
485 497 resizeHiddenContainers(true);