Print the country posters in place, instead of saving them to the device

The regions poster wall was downloading a .webp. UPG-100 opens a print dialog
over the page, and the Driver asked for the same UX with no difference.

This is one prop, not a second implementation: PosterWall's posterAction
defaults to 'download', UPG-100 passes "print", and regions passed nothing.
deliverPoster() branches on it and routes both the shipped-.webp and the
browser-rasterised path through the shared openPrintFrame, so the two walls
now print through exactly the same code.

The probe that covered this had been asserting the wrong thing. Its own
header said the Driver asked for print, but the assertion accepted "delivers
a file or says why" and then checked the file was a .webp — which a download
satisfies. It now asserts nothing is downloaded and that the shared print
frame is created.

Catching that took two attempts, because the frame is transient by design:
print() returns immediately in headless, afterprint fires, and the frame
removes itself within milliseconds. Polling the DOM afterwards found nothing
and looked like a broken print path. Subscribing to frameattached before the
click observes it without racing the cleanup.
This commit is contained in:
doxa-maps-88655c70 2026-09-24 18:11:23 +00:00
parent a53953423b
commit 3e0a8b49a3
7 changed files with 15 additions and 9 deletions

View file

@ -593,6 +593,11 @@ useShadowStyles(
second level of collapsing (we are already inside one region) and no grouping,
hence posterGroupBy returning ''. -->
<div v-if="postersOpen(region)" :id="`posters-${region.slug}`" class="region-card__posters">
<!-- poster-action="print" — PRINT IN PLACE, not download (Driver card 2026-09-24).
PosterWall's posterAction prop defaults to 'download'; UPG-100 passes "print"
and the print UX here must be identical. deliverPoster() branches on that one
prop and routes BOTH the shipped-.webp and the browser-rasterised path through
openPrintFrame, so this is configuration — not a second implementation. -->
<PosterWall
:items="postersFor(region)"
:group-by="posterGroupBy"
@ -609,6 +614,7 @@ useShadowStyles(
:section-heads="false"
:unsupported="posterUnsupported"
download-prefix="doxa-country"
poster-action="print"
prayer-list-soon-message="Coming soon — a prayer list will be generated for each country, naming every unengaged people group within it."
/>
</div>

File diff suppressed because one or more lines are too long

View file

@ -874,7 +874,7 @@
"bundle": "regions-dashboard",
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"output": "doxa-maps/regions-dashboard/regions-dashboard.js",
"integrity": "sha384-jj4JBxH2lbWxtqsuDMdk7yN2IiLQfLFmwLVj8nPk33JRqqSaaz3XOjz3dDxAG+3c",
"integrity": "sha384-O40pHPHtm3m7NB1gcHoLNFy9irG10y4JlEJzt7/KVsJB1KpeDv3mbdzxx4QWZWUA",
"elements": [
"regions-dashboard"
],
@ -894,7 +894,7 @@
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"embed": {
"iframe": "<iframe src=\"./regions-dashboard/region-dashboards/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-jj4JBxH2lbWxtqsuDMdk7yN2IiLQfLFmwLVj8nPk33JRqqSaaz3XOjz3dDxAG+3c\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-O40pHPHtm3m7NB1gcHoLNFy9irG10y4JlEJzt7/KVsJB1KpeDv3mbdzxx4QWZWUA\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
}
},
{
@ -908,7 +908,7 @@
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"embed": {
"iframe": "<iframe src=\"./regions-dashboard/regions-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-jj4JBxH2lbWxtqsuDMdk7yN2IiLQfLFmwLVj8nPk33JRqqSaaz3XOjz3dDxAG+3c\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-O40pHPHtm3m7NB1gcHoLNFy9irG10y4JlEJzt7/KVsJB1KpeDv3mbdzxx4QWZWUA\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
}
},
{
@ -922,7 +922,7 @@
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"embed": {
"iframe": "<iframe src=\"./regions-dashboard/regions-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-jj4JBxH2lbWxtqsuDMdk7yN2IiLQfLFmwLVj8nPk33JRqqSaaz3XOjz3dDxAG+3c\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-O40pHPHtm3m7NB1gcHoLNFy9irG10y4JlEJzt7/KVsJB1KpeDv3mbdzxx4QWZWUA\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
}
}
]

View file

@ -29,7 +29,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <regions-dashboard> custom element. -->
<script src="../regions-dashboard.js" integrity="sha384-jj4JBxH2lbWxtqsuDMdk7yN2IiLQfLFmwLVj8nPk33JRqqSaaz3XOjz3dDxAG+3c" crossorigin="anonymous"></script>
<script src="../regions-dashboard.js" integrity="sha384-O40pHPHtm3m7NB1gcHoLNFy9irG10y4JlEJzt7/KVsJB1KpeDv3mbdzxx4QWZWUA" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

File diff suppressed because one or more lines are too long

View file

@ -29,7 +29,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <regions-dashboard> custom element. -->
<script src="../regions-dashboard.js" integrity="sha384-jj4JBxH2lbWxtqsuDMdk7yN2IiLQfLFmwLVj8nPk33JRqqSaaz3XOjz3dDxAG+3c" crossorigin="anonymous"></script>
<script src="../regions-dashboard.js" integrity="sha384-O40pHPHtm3m7NB1gcHoLNFy9irG10y4JlEJzt7/KVsJB1KpeDv3mbdzxx4QWZWUA" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -40,7 +40,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <regions-dashboard> custom element. -->
<script src="../regions-dashboard.js" integrity="sha384-jj4JBxH2lbWxtqsuDMdk7yN2IiLQfLFmwLVj8nPk33JRqqSaaz3XOjz3dDxAG+3c" crossorigin="anonymous"></script>
<script src="../regions-dashboard.js" integrity="sha384-O40pHPHtm3m7NB1gcHoLNFy9irG10y4JlEJzt7/KVsJB1KpeDv3mbdzxx4QWZWUA" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order: