| @@ -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() { |