PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 4.0.8
Visualizer – Tables & Charts Manager with Built-in AI Generator v4.0.8
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 | classes/Visualizer/Module/Frontend.php +12 -6 4.0.44.0.8 View file →
@@ -749,9 +749,9 @@
749 749 $settings = get_post_meta( $chart->ID, Visualizer_Plugin::CF_SETTINGS, true );
750 750 $series = get_post_meta( $chart->ID, Visualizer_Plugin::CF_SERIES, true );
751 751 $is_woocommerce_report = get_post_meta( $chart->ID, Visualizer_Plugin::CF_IS_WOOCOMMERCE_SOURCE, true );
752 752
753 - if ( isset( $settings['series'] ) && ! ( count( $settings['series'] ) - count( $series ) > 1 ) ) {
753 + if ( isset( $settings['series'] ) && is_array( $settings['series'] ) && is_array( $series ) && ! ( count( $settings['series'] ) - count( $series ) > 1 ) ) {
754 754 $diff_total_series = abs( count( $settings['series'] ) - count( $series ) );
755 755 if ( $diff_total_series ) {
756 756 foreach ( range( 1, $diff_total_series ) as $k => $diff_series ) {
757 757 $settings['series'][] = end( $settings['series'] );
@@ -802,16 +802,22 @@
802 802 }
803 803
804 804 function visualizerLoadScripts() {
805 805 document.querySelectorAll("script[data-visualizer-script]").forEach(function(elem) {
806 - jQuery.getScript( elem.getAttribute("data-visualizer-script") )
807 - .done( function( script, textStatus ) {
808 - elem.setAttribute("src", elem.getAttribute("data-visualizer-script"));
809 - elem.removeAttribute("data-visualizer-script");
806 + // Replace the placeholder with a real script tag using async=false:
807 + // scripts download in parallel but execute in insertion order, which
808 + // preserves the WordPress dependency order. Parallel jQuery.getScript
809 + // calls could execute render-facade.js before the chart renderer had
810 + // registered its render event listener, leaving charts blank.
811 + var script = document.createElement("script");
812 + script.src = elem.getAttribute("data-visualizer-script");
813 + script.async = false;
814 + script.onload = function() {
810 815 setTimeout( function() {
811 816 visualizerRefreshChart();
812 817 } );
813 - } );
818 + };
819 + elem.parentNode.replaceChild(script, elem);
814 820 });
815 821 }
816 822
817 823 function visualizerRefreshChart() {