Skip to content

Commit 37d3fb1

Browse files
committed
fix: lazy loading not always working
1 parent 60059c8 commit 37d3fb1

1 file changed

Lines changed: 26 additions & 7 deletions

File tree

classes/Visualizer/Module/Frontend.php

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -759,19 +759,38 @@ function visualizerLoadScripts() {
759759
return;
760760
}
761761
visualizerScriptsLoaded = true;
762+
763+
var promises = [];
762764
document.querySelectorAll("script[data-visualizer-script]").forEach(function(elem) {
763-
jQuery.getScript( elem.getAttribute("data-visualizer-script") )
764-
.done( function( script, textStatus ) {
765-
elem.setAttribute("src", elem.getAttribute("data-visualizer-script"));
766-
elem.removeAttribute("data-visualizer-script");
767-
setTimeout( function() {
768-
visualizerRefreshChart();
765+
var p = jQuery.getScript( elem.getAttribute("data-visualizer-script") )
766+
.done( function() {
767+
elem.setAttribute("src", elem.getAttribute("data-visualizer-script"));
768+
elem.removeAttribute("data-visualizer-script");
769769
} );
770-
} );
770+
promises.push( p );
771771
});
772+
773+
// Wait for ALL scripts before refreshing so render-facade and the render
774+
// libraries (render-google, render-chartjs, etc.) are guaranteed to be ready.
775+
jQuery.when.apply( jQuery, promises ).always( function() {
776+
setTimeout( function() {
777+
visualizerRefreshChart();
778+
} );
779+
} );
772780
}
773781

774782
function visualizerRefreshChart() {
783+
// Re-trigger rendering for charts that render-facade queued but the render
784+
// library missed due to the parallel-load race condition.
785+
jQuery( '.viz-facade-loaded.visualizer-front:not(.visualizer-chart-loaded)' ).each( function() {
786+
var id = jQuery( this ).attr( 'id' );
787+
if ( id && window.visualizer ) {
788+
jQuery( 'body' ).trigger(
789+
'visualizer:render:chart:start',
790+
jQuery.extend( {}, window.visualizer, { id: id } )
791+
);
792+
}
793+
} );
775794
jQuery( '.visualizer-front:not(.visualizer-chart-loaded)' ).resize();
776795
if ( jQuery( 'div.viz-facade-loaded:not(.visualizer-lazy):empty' ).length > 0 ) {
777796
visualizerUserInteractionEvents.forEach( function( event ) {

0 commit comments

Comments
 (0)