Let the gap breakdown survive the sweep finishing

The breakdown hardcoded "Four different situations share it" and gave
every line an unconditional row. The GRN sweep has 302 codes left, so
within an hour or two that bucket empties — and the sheet would have
rendered "· 0 (0) — Global Recordings Network has not been swept for
them yet" beside a sentence insisting there were four. Two falsehoods
at once: the count, and the implication that some remain unswept.

Each line is now conditional and the opening counts the situations
that actually have rows.

Tested by simulating completion in the data the page really loads:
with every code marked swept it renders "Three different situations",
the GRN line is gone, and the real translation gap absorbs them,
1,220 → 1,531. Restored afterwards and both asset copies verified
identical and back to 311.

Worth recording from that test: the page reads public/assets/tables/,
NOT public/doxa-maps/assets/tables/. Editing the second one changes
nothing, which cost two browser runs to discover — the first
"simulation" verified the file it edited and still watched the old
number render, which looked like a broken guard rather than a wrong
path.
This commit is contained in:
doxa-maps-88655c70 2026-09-25 01:37:30 +00:00
parent 953fe79002
commit 2fa09852ab
9 changed files with 56 additions and 39 deletions

View file

@ -366,6 +366,17 @@ const gapBy = ref('groups')
// last line is the real translation gap, and it is the only one of the four that a
// translator rather than an administrator can close.
// Computed from the pins and the per-code `checked` line, never from a typed number.
// How many of the four situations actually have rows today. The sweep empties one of them
// on completion, and a sentence reading "Four different situations" beside a line saying
// "0 groups — GRN has not been swept for them yet" would be two lies at once: the count and
// the implication that some remain.
const gapKindsPresent = computed(() => {
const m = gapMakeup.value
return [m.searched, m.pending, m.sign, m.priv + m.noCode].filter((n) => n > 0).length
})
const WORDS = ['no', 'One', 'Two', 'Three', 'Four']
const gapKindsWord = computed(() => WORDS[gapKindsPresent.value] || String(gapKindsPresent.value))
const gapMakeup = computed(() => {
const m = { noCode: 0, priv: 0, signPriv: 0, sign: 0, pending: 0, searched: 0,
noCodeP: 0, privP: 0, signPrivP: 0, signP: 0, pendingP: 0, searchedP: 0 }
@ -1287,16 +1298,22 @@ useShadowStyles(
</template>
<template v-else-if="gapBy !== 'hnr'">These are the 40 largest; tap one to fly there.</template>
<template v-if="gapBy === 'groups'">
<br><b>What that number is made of.</b> Four different situations share it, and
only the last is a translation problem:
<br>· <b>{{ fmt(gapMakeup.searched) }}</b> groups ({{ fmt(gapMakeup.searchedP) }} people)
— every pool this build can reach was checked and found nothing. This is the real gap.
<br>· <b>{{ fmt(gapMakeup.pending) }}</b> ({{ fmt(gapMakeup.pendingP) }}) — Global
Recordings Network has not been swept for them yet; the crawl runs a batch at a time.
<br><b>What that number is made of.</b> {{ gapKindsWord }} different situations share
it, and only the first is a translation problem:
<template v-if="gapMakeup.searched">
<br>· <b>{{ fmt(gapMakeup.searched) }}</b> groups ({{ fmt(gapMakeup.searchedP) }} people)
— every pool this build can reach was checked and found nothing. This is the real gap.
</template>
<template v-if="gapMakeup.pending">
<br>· <b>{{ fmt(gapMakeup.pending) }}</b> ({{ fmt(gapMakeup.pendingP) }}) — Global
Recordings Network has not been swept for them yet; the crawl runs a batch at a time.
</template>
<template v-if="gapMakeup.sign">
<br>· <b>{{ fmt(gapMakeup.sign) }}</b> ({{ fmt(gapMakeup.signP) }}) — sign languages,
whose pools are key-gated. The largest blocked population here, and an access
problem rather than a translation one. <template v-if="gapMakeup.signPriv">{{ fmt(gapMakeup.signPriv) }}
of them also carry a code no pool can index, so they are doubly stuck. </template>
</template>
<template v-if="gapMakeup.priv + gapMakeup.noCode">
<br>· <b>{{ fmt(gapMakeup.priv + gapMakeup.noCode) }}</b>
({{ fmt(gapMakeup.privP + gapMakeup.noCodeP) }}) — a private-use code or none at

View file

@ -26,7 +26,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-oAe1e8Solrg2uwraG4tVveco0hqzOJe0nCJSPleNtBKnRuoX0gVTa8kI9ksb/c2j" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-jGjz5ReXEkDft6wd72fztdp6/xnrdmJBWKEJOSitAifzg3bkgMIEi2AlPnklGo5S" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -26,7 +26,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-oAe1e8Solrg2uwraG4tVveco0hqzOJe0nCJSPleNtBKnRuoX0gVTa8kI9ksb/c2j" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-jGjz5ReXEkDft6wd72fztdp6/xnrdmJBWKEJOSitAifzg3bkgMIEi2AlPnklGo5S" 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 <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-oAe1e8Solrg2uwraG4tVveco0hqzOJe0nCJSPleNtBKnRuoX0gVTa8kI9ksb/c2j" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-jGjz5ReXEkDft6wd72fztdp6/xnrdmJBWKEJOSitAifzg3bkgMIEi2AlPnklGo5S" 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 <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-oAe1e8Solrg2uwraG4tVveco0hqzOJe0nCJSPleNtBKnRuoX0gVTa8kI9ksb/c2j" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-jGjz5ReXEkDft6wd72fztdp6/xnrdmJBWKEJOSitAifzg3bkgMIEi2AlPnklGo5S" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -29,7 +29,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-oAe1e8Solrg2uwraG4tVveco0hqzOJe0nCJSPleNtBKnRuoX0gVTa8kI9ksb/c2j" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-jGjz5ReXEkDft6wd72fztdp6/xnrdmJBWKEJOSitAifzg3bkgMIEi2AlPnklGo5S" 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

@ -596,7 +596,7 @@
"bundle": "gospel-resources",
"scriptUrl": "./gospel-resources/gospel-resources.js",
"output": "doxa-maps/gospel-resources/gospel-resources.js",
"integrity": "sha384-oAe1e8Solrg2uwraG4tVveco0hqzOJe0nCJSPleNtBKnRuoX0gVTa8kI9ksb/c2j",
"integrity": "sha384-jGjz5ReXEkDft6wd72fztdp6/xnrdmJBWKEJOSitAifzg3bkgMIEi2AlPnklGo5S",
"elements": [
"gospel-resources-map"
],
@ -616,7 +616,7 @@
"scriptUrl": "./gospel-resources/gospel-resources.js",
"embed": {
"iframe": "<iframe src=\"./gospel-resources/charts/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=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-oAe1e8Solrg2uwraG4tVveco0hqzOJe0nCJSPleNtBKnRuoX0gVTa8kI9ksb/c2j\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-jGjz5ReXEkDft6wd72fztdp6/xnrdmJBWKEJOSitAifzg3bkgMIEi2AlPnklGo5S\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -630,7 +630,7 @@
"scriptUrl": "./gospel-resources/gospel-resources.js",
"embed": {
"iframe": "<iframe src=\"./gospel-resources/data-tables/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=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-oAe1e8Solrg2uwraG4tVveco0hqzOJe0nCJSPleNtBKnRuoX0gVTa8kI9ksb/c2j\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-jGjz5ReXEkDft6wd72fztdp6/xnrdmJBWKEJOSitAifzg3bkgMIEi2AlPnklGo5S\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -644,7 +644,7 @@
"scriptUrl": "./gospel-resources/gospel-resources.js",
"embed": {
"iframe": "<iframe src=\"./gospel-resources/gospel-dashboard/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=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-oAe1e8Solrg2uwraG4tVveco0hqzOJe0nCJSPleNtBKnRuoX0gVTa8kI9ksb/c2j\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-jGjz5ReXEkDft6wd72fztdp6/xnrdmJBWKEJOSitAifzg3bkgMIEi2AlPnklGo5S\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -658,7 +658,7 @@
"scriptUrl": "./gospel-resources/gospel-resources.js",
"embed": {
"iframe": "<iframe src=\"./gospel-resources/resources-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=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-oAe1e8Solrg2uwraG4tVveco0hqzOJe0nCJSPleNtBKnRuoX0gVTa8kI9ksb/c2j\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-jGjz5ReXEkDft6wd72fztdp6/xnrdmJBWKEJOSitAifzg3bkgMIEi2AlPnklGo5S\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -672,7 +672,7 @@
"scriptUrl": "./gospel-resources/gospel-resources.js",
"embed": {
"iframe": "<iframe src=\"./gospel-resources/resources-map/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=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-oAe1e8Solrg2uwraG4tVveco0hqzOJe0nCJSPleNtBKnRuoX0gVTa8kI9ksb/c2j\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-jGjz5ReXEkDft6wd72fztdp6/xnrdmJBWKEJOSitAifzg3bkgMIEi2AlPnklGo5S\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
}
]