From e9834eda720a0b964415218ec89069eb14ef6358 Mon Sep 17 00:00:00 2001 From: "arnaud.morvan@camptocamp.com" Date: Mon, 20 Apr 2026 15:51:52 +0200 Subject: [PATCH 1/3] Wait for all vector layer before mapRenderingComplete --- thinkhazard/static/js/report.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/thinkhazard/static/js/report.js b/thinkhazard/static/js/report.js index b39d70ff..5f47dab1 100644 --- a/thinkhazard/static/js/report.js +++ b/thinkhazard/static/js/report.js @@ -4,8 +4,10 @@ // Tells whether all the background layer tiles are loaded var tilesLoaded = false; - // Tells whether the vector layer is displayed - var vectorLoaded = false; + // Tells whether the vector layers is displayed + var levelLayerLoaded = false; + var adminLayerLoaded = false; + var disputedAreaLayerLoaded = false; // // Main @@ -196,7 +198,7 @@ source.on('addfeature', function() { map.on('postcompose', function(event) { if (window.mapRenderingComplete === true) { return; } - vectorLoaded = true; + adminLayerLoaded = true; checkFinished(); }); }); @@ -243,7 +245,8 @@ map.addLayer(layer); source.on('addfeature', function() { map.on('postcompose', function(event) { - vectorLoaded = true; + if (window.mapRenderingComplete === true) { return; } + levelLayerLoaded = true; checkFinished(); }); }); @@ -325,6 +328,13 @@ }); map.addLayer(layer); + source.on('addfeature', function() { + map.on('postcompose', function(event) { + if (window.mapRenderingComplete === true) { return; } + disputedAreaLayerLoaded = true; + checkFinished(); + }); + }); return layer; } @@ -459,7 +469,7 @@ } function checkFinished() { - if (vectorLoaded && tilesLoaded) { + if (tilesLoaded && levelLayerLoaded && adminLayerLoaded && disputedAreaLayerLoaded) { window.mapRenderingComplete = true; $('#map').addClass('finished'); From 7d8f31c229102d324c2a5074c9fd3edd524943f2 Mon Sep 17 00:00:00 2001 From: "arnaud.morvan@camptocamp.com" Date: Mon, 20 Apr 2026 16:12:27 +0200 Subject: [PATCH 2/3] Wait for postcompose after tiles are loaded --- thinkhazard/static/js/report.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/thinkhazard/static/js/report.js b/thinkhazard/static/js/report.js index 5f47dab1..8dfba25e 100644 --- a/thinkhazard/static/js/report.js +++ b/thinkhazard/static/js/report.js @@ -460,12 +460,18 @@ tilesLoaded++; update(); }); + source.on('tileloaderror', function() { + tilesLoaded++; + update(); + }); }); } function onTilesLoaded() { - tilesLoaded = true; - checkFinished(); + map.once('postcompose', function() { + tilesLoaded = true; + checkFinished(); + }); } function checkFinished() { From 00028376c445634d7cbbc523ac5691c1cdd8239f Mon Sep 17 00:00:00 2001 From: "arnaud.morvan@camptocamp.com" Date: Mon, 20 Apr 2026 16:14:53 +0200 Subject: [PATCH 3/3] Set page.emulateMediaType to print before loading page --- docker/puppeteer/src/server.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docker/puppeteer/src/server.js b/docker/puppeteer/src/server.js index ae11ec93..d19c056e 100644 --- a/docker/puppeteer/src/server.js +++ b/docker/puppeteer/src/server.js @@ -44,6 +44,9 @@ await cluster.task(async ({ page, data: url }) => { // console.error('PAGE ERROR:', error.message); // }); + // Emulate print media for @media print CSS + await page.emulateMediaType('print'); + // Navigate to the page const response = await page.goto(url, { waitUntil: 'networkidle0', @@ -67,11 +70,6 @@ await cluster.task(async ({ page, data: url }) => { console.log(`Map rendering timeout for ${url}, continuing with PDF generation`); } - - - // Emulate print media for @media print CSS - await page.emulateMediaType('print'); - // Generate PDF return page.pdf({ format: 'A4',