Merge main into bundler-2/work
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions

This commit is contained in:
Doxa Maps 2026-09-26 01:48:50 +00:00
commit d535a7d97d
10 changed files with 151 additions and 103 deletions

File diff suppressed because one or more lines are too long

View file

@ -380,6 +380,28 @@ const NOT_SCANNED = 'api_bible, dbl, progress_bible, youversion'
// even a perfect ISO join would add no coverage.
// - Davar Partners a ministry site, not a catalogue. No per-language page and therefore
// no URL a worker could be sent to.
// - Bible for Children (bibleforchildren.org) — checked 2026-09-26. Reachable, and the
// status code is meaningful: a wrong path 404s rather than returning the
// homepage, so it is not one of the app shells that defeated the others.
// Its index lists 118 languages as /languages/<name>/stories.php, with no
// pagination and no stated total, so 118 is what is published, not a page
// of something larger.
// OUT FOR THREE REASONS, IN THIS ORDER OF WEIGHT:
// (1) COVERAGE. Of the 294 languages in the Doxa gap, exactly ONE name
// matches a folder here. 82 of the 118 match a language this index
// carries somewhere, so the catalogue is real and overlaps us — it
// just does not overlap the part that has nothing, which is the only
// part a new pool is worth adding for.
// (2) THE JOIN KEY. No ISO code is published anywhere: not in the index,
// not on a story page. The folder IS the language name, so a join
// would be by name — the guess this build removed, and the guess that
// would have handed Akha in Laos one of three sub-varieties. The one
// gap match above is a name match and is worth nothing on its own.
// (3) DOCTRINE UNVERIFIED, not suspected. No statement of faith is served
// at /about.php, /aboutus.php, /faith.php or /beliefs.php — all 404.
// The brief's rule is to leave a source out when its doctrine is
// unclear and say why, so that is what this is. It is NOT a finding
// against them; it is the absence of a finding either way.
// - IBT (Institute for Bible Translation, ibtrussia.org) — NOT a pool, but the best LEAD
// on this map, and the distinction is the point. Found by asking why 36
// Doxa groups carry an IMB "audio Scripture exists" flag while every pool

View file

@ -365,12 +365,38 @@ function esc(s) {
// which is the entire point of the site, and Full Profile.
// It could not have been ported before this pass because the DATA was not being fetched: rop1,
// religion, location_description and the photo were missing from our field list.
// Population, formatted the way the other two formatters in this element do it -- see the note at
// its call site for why the -u-nu-latn subtag is there and when it comes off.
function fmtPop(v) {
try { return v.toLocaleString(`${locale.value || 'en'}-u-nu-latn`) } catch (_) { return v.toLocaleString('en-US') }
}
function popupHtml(p) {
const name = esc(p.name || '')
const subtitle = [p.country, p.rop1].filter(Boolean).map(esc).join(' · ')
// Their formatPopulation: toLocaleString(languageCode), NOT a hardcoded 'en'. Ours printed
// 'en-US' grouping in every one of the eleven locales.
const pop = Number(p.population) > 0 ? Number(p.population).toLocaleString(locale.value || 'en') : ''
// ★ -u-nu-latn: NUMERALS ARE HELD (Driver via shepherd, 2026-09-26). The subtag is NOT belt and
// braces -- but the reason is narrower than it first looks, and MEASURED against full-ICU Node:
// ar -> numberingSystem=latn -> 1,234,567
// ar-EG -> numberingSystem=arab -> ١٬٢٣٤٬٥٦٧
// So the BARE codes this element ships (SUPPORTED_LOCALES, and localeFromUrl() which strips the
// region at .split('-')[0]) were already Latin, and plain toLocaleString('ar') never violated the
// hold. What does violate it is a REGIONED tag arriving from outside -- a host setting
// profile-config.locale to 'ar-EG' reaches this line unstripped. The subtag makes the hold hold
// whatever arrives, instead of depending on every caller to strip a region first.
// (I first wrote "'ar' renders Arabic-Indic" here. It does not; that was asserted, then measured.)
// The subtag splits the two halves of this apart: grouping SEPARATORS still follow the locale,
// which is the part of theirs we can match ('1.234.567' in de, '1 234 567' in ru), while the
// digits stay Latin. So this is closer to their output than the hardcoded 'en-US' it replaced
// AND compliant with the hold. The other two number formatters in this element already do it
// this way (region-dashboards.vue:191, regions-list.vue:178); this one was the odd one out, and
// it is the only one a reader of an 'ar' map popup would have seen.
// When the hold lifts, dropping the subtag in all three restores exact parity.
// The try/catch is not decoration: a malformed tag throws RangeError here, and this runs while
// building popup HTML, so an uncaught throw takes out the popup rather than one number. The two
// sibling formatters guard it for that reason; this one must too.
const pop = Number(p.population) > 0 ? fmtPop(Number(p.population)) : ''
const profileUrl = `${props.researchUrl}${p.slug || ''}`
const prayUrl = `${String(props.prayBaseUrl).replace(/\/+$/, '')}/${p.slug || ''}?source=doxalife`

File diff suppressed because one or more lines are too long

View file

@ -888,7 +888,7 @@
"bundle": "regions-dashboard",
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"output": "dx-maps/regions-dashboard/regions-dashboard.js",
"integrity": "sha384-7KtEO1Ri7x+mY3JmOY+ZFWt1nH424T6sjIO2slg93jtxmoGmkzFY+0MjgQB46xyY",
"integrity": "sha384-c7LJZWxXoNP1I7ULRtIRftxRS4Tph3x9YC0rdd04MTLP3GITJVeQvYrhbhZrNP2j",
"elements": [
"regions-dashboard"
],
@ -908,7 +908,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": "<!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-7KtEO1Ri7x+mY3JmOY+ZFWt1nH424T6sjIO2slg93jtxmoGmkzFY+0MjgQB46xyY\" 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": "<!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-c7LJZWxXoNP1I7ULRtIRftxRS4Tph3x9YC0rdd04MTLP3GITJVeQvYrhbhZrNP2j\" 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>"
}
},
{
@ -922,7 +922,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-7KtEO1Ri7x+mY3JmOY+ZFWt1nH424T6sjIO2slg93jtxmoGmkzFY+0MjgQB46xyY\" 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-c7LJZWxXoNP1I7ULRtIRftxRS4Tph3x9YC0rdd04MTLP3GITJVeQvYrhbhZrNP2j\" 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>"
}
},
{
@ -936,7 +936,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": "<!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-7KtEO1Ri7x+mY3JmOY+ZFWt1nH424T6sjIO2slg93jtxmoGmkzFY+0MjgQB46xyY\" 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": "<!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-c7LJZWxXoNP1I7ULRtIRftxRS4Tph3x9YC0rdd04MTLP3GITJVeQvYrhbhZrNP2j\" 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

@ -888,7 +888,7 @@
"bundle": "regions-dashboard",
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"output": "dx-maps/regions-dashboard/regions-dashboard.js",
"integrity": "sha384-7KtEO1Ri7x+mY3JmOY+ZFWt1nH424T6sjIO2slg93jtxmoGmkzFY+0MjgQB46xyY",
"integrity": "sha384-c7LJZWxXoNP1I7ULRtIRftxRS4Tph3x9YC0rdd04MTLP3GITJVeQvYrhbhZrNP2j",
"elements": [
"regions-dashboard"
],
@ -908,7 +908,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": "<!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-7KtEO1Ri7x+mY3JmOY+ZFWt1nH424T6sjIO2slg93jtxmoGmkzFY+0MjgQB46xyY\" 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": "<!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-c7LJZWxXoNP1I7ULRtIRftxRS4Tph3x9YC0rdd04MTLP3GITJVeQvYrhbhZrNP2j\" 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>"
}
},
{
@ -922,7 +922,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-7KtEO1Ri7x+mY3JmOY+ZFWt1nH424T6sjIO2slg93jtxmoGmkzFY+0MjgQB46xyY\" 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-c7LJZWxXoNP1I7ULRtIRftxRS4Tph3x9YC0rdd04MTLP3GITJVeQvYrhbhZrNP2j\" 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>"
}
},
{
@ -936,7 +936,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": "<!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-7KtEO1Ri7x+mY3JmOY+ZFWt1nH424T6sjIO2slg93jtxmoGmkzFY+0MjgQB46xyY\" 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": "<!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-c7LJZWxXoNP1I7ULRtIRftxRS4Tph3x9YC0rdd04MTLP3GITJVeQvYrhbhZrNP2j\" 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

@ -30,7 +30,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-7KtEO1Ri7x+mY3JmOY+ZFWt1nH424T6sjIO2slg93jtxmoGmkzFY+0MjgQB46xyY" crossorigin="anonymous"></script>
<script src="../regions-dashboard.js" integrity="sha384-c7LJZWxXoNP1I7ULRtIRftxRS4Tph3x9YC0rdd04MTLP3GITJVeQvYrhbhZrNP2j" 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

@ -26,7 +26,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-7KtEO1Ri7x+mY3JmOY+ZFWt1nH424T6sjIO2slg93jtxmoGmkzFY+0MjgQB46xyY" crossorigin="anonymous"></script>
<script src="../regions-dashboard.js" integrity="sha384-c7LJZWxXoNP1I7ULRtIRftxRS4Tph3x9YC0rdd04MTLP3GITJVeQvYrhbhZrNP2j" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -41,7 +41,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-7KtEO1Ri7x+mY3JmOY+ZFWt1nH424T6sjIO2slg93jtxmoGmkzFY+0MjgQB46xyY" crossorigin="anonymous"></script>
<script src="../regions-dashboard.js" integrity="sha384-c7LJZWxXoNP1I7ULRtIRftxRS4Tph3x9YC0rdd04MTLP3GITJVeQvYrhbhZrNP2j" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order: