Show the film link the list already had, for 218 languages that showed nothing
Some checks are pending
build-gate / build (push) Waiting to run

resources-list rendered links only from `resources[]`, which holds SCRIPTURE
editions (eBible entries with ot_books/nt_books/redistributable). The JESUS Film
lives in its own fields -- has_film/jesus_film plus film_url -- and was never
read. Measured over all 862 languages in resources.json:

    resources[] non-empty ............ 120
    film_url present ................. 306
    film_url but resources[] EMPTY ... 218   <- a real link the UI never offered

So 218 languages displayed no link at all while carrying a working one. Arabic,
Sudanese (apd, 66 people groups, 18.7M speakers) has
https://www.jesusfilm.org/watch/?languageId=13562 and rendered nothing.

The pill is deliberately left alone. It reads full_bible/has_scripture, so
"none found" is TRUE -- of scripture, which those 218 genuinely lack. Widening
it to mean "no resources at all" would make it say something false about a
language that has a film. The row now says both things: the pill reports the
scripture gap, the links report what exists.

Film links are marked (muted, with a leading marker) rather than styled as
another Bible, because a film is a real resource but not a text and this list is
about text availability first. Guarded on film_url itself, not on the boolean
flags: a truthy flag with no URL would render an anchor to nowhere.

Verified in a browser on the built tree: default "No scripture found" tab now
renders 218 film anchors where it previously rendered zero, all 218 on rows
whose pill reads "none found"; the sample href matches the apd row in the data.
"Has scripture" shows 120 rows with 155 scripture anchors plus 88 film; "All
languages" 862 rows, 306 film -- matching the pre-change data counts exactly.
0 failed requests.
This commit is contained in:
doxa-maps-88655c70 2026-09-23 13:58:18 +00:00
parent 0f7ef172c4
commit c27d16cd4b
9 changed files with 58 additions and 25 deletions

View file

@ -60,6 +60,32 @@ const shown = computed(() => {
const fmt = (n) => (Number(n) || 0).toLocaleString()
// ── EVERY LINK THE ROW ACTUALLY HAS, not just the scripture ones ─────────────────────────────
// THE DEFECT THIS FIXES (measured 2026-09-23 over all 862 languages in resources.json):
// resources[] non-empty ............ 120
// film_url present ................. 306
// film_url but resources[] EMPTY ... 218 <- a real, verified link the UI never offered
//
// The template rendered `v-if="l.resources.length"` only, and `resources[]` holds SCRIPTURE
// editions (eBible entries with ot_books/nt_books/redistributable). The JESUS Film lives in its own
// pair of fields — has_film/jesus_film plus film_url — and was never read. So 218 languages showed
// no link at all while carrying a working one: e.g. Arabic, Sudanese (apd, 66 people groups,
// 18.7M speakers) has film_url https://www.jesusfilm.org/watch/?languageId=13562 and rendered
// nothing.
//
// ★ THE PILL IS NOT THE BUG AND IS DELIBERATELY LEFT ALONE. It reads full_bible / has_scripture,
// so "none found" is TRUE — of scripture. Those 218 rows genuinely have no scripture. Widening the
// pill to mean "no resources at all" would make it say something false about a language that has a
// film, and this list exists to show the gap honestly. The row now says both things at once: the
// pill reports the scripture gap, the links report what does exist.
const linksFor = (l) => {
const out = (l.resources || []).slice(0, 2).map((r) => ({ url: r.url, title: r.title, kind: 'scripture' }))
// Guard on the URL itself, not on has_film/jesus_film: a truthy flag with no URL would render an
// anchor to nowhere, which is worse than showing nothing.
if (l.film_url) out.push({ url: l.film_url, title: 'JESUS Film', kind: 'film' })
return out
}
useShadowStyles(
'.gr{position:absolute;inset:0;overflow-y:auto;padding:20px 18px 44px;background:#f6f7f9;color:#0f1419;' +
"font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}" +
@ -92,6 +118,13 @@ useShadowStyles(
'.res{margin-top:4px;font-size:11px}' +
'.res a{color:#0b7a5b;text-decoration:none;font-weight:600}' +
'.res a:hover{text-decoration:underline}' +
// Two links on one row need separating, or "Holy Bible" and "JESUS Film" read as one string.
'.res a + a{margin-left:10px}' +
// The film link is a DIFFERENT KIND of resource from a scripture edition, so it is marked rather
// than left to look like another Bible. Muted against the scripture green: a film is a real
// resource but not a text, and this list is about text availability first.
'.res a.is-film{color:#6d766e;font-weight:500}' +
'.res a.is-film::before{content:"▸ "}' +
'.caveat{max-width:1080px;margin:18px auto 0;padding:12px 14px;border-radius:8px;' +
'background:rgba(0,0,0,.04);font-size:11.5px;line-height:1.65;opacity:.85}' +
'.is-dark .caveat{background:rgba(255,255,255,.06)}' +
@ -135,8 +168,8 @@ useShadowStyles(
· {{ l.countries.slice(0, 3).join(', ') }}<template v-if="l.countries.length > 3">
+{{ l.countries.length - 3 }}</template>
</div>
<div v-if="l.resources && l.resources.length" class="res">
<a v-for="(r, i) in l.resources.slice(0, 2)" :key="i"
<div v-if="linksFor(l).length" class="res">
<a v-for="(r, i) in linksFor(l)" :key="i" class="res-a" :class="'is-' + r.kind"
:href="r.url" target="_blank" rel="noopener">{{ r.title }}</a>
</div>
</div>

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-vgQHgoTwP3h7cB8wARXuP6KjbZZYySH9K5XyA7Ty8N7Ij1YyRZn2ZGVbkA3CPqUG" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-nFY1cewUGJeRgiA3CHjnnYCKMesb1Vh9dfexz7CbAljdHezciVIaND11t66EN5Se" 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-vgQHgoTwP3h7cB8wARXuP6KjbZZYySH9K5XyA7Ty8N7Ij1YyRZn2ZGVbkA3CPqUG" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-nFY1cewUGJeRgiA3CHjnnYCKMesb1Vh9dfexz7CbAljdHezciVIaND11t66EN5Se" 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-vgQHgoTwP3h7cB8wARXuP6KjbZZYySH9K5XyA7Ty8N7Ij1YyRZn2ZGVbkA3CPqUG" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-nFY1cewUGJeRgiA3CHjnnYCKMesb1Vh9dfexz7CbAljdHezciVIaND11t66EN5Se" 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-vgQHgoTwP3h7cB8wARXuP6KjbZZYySH9K5XyA7Ty8N7Ij1YyRZn2ZGVbkA3CPqUG" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-nFY1cewUGJeRgiA3CHjnnYCKMesb1Vh9dfexz7CbAljdHezciVIaND11t66EN5Se" 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

@ -540,7 +540,7 @@
"bundle": "gospel-resources",
"scriptUrl": "./gospel-resources/gospel-resources.js",
"output": "doxa-maps/gospel-resources/gospel-resources.js",
"integrity": "sha384-vgQHgoTwP3h7cB8wARXuP6KjbZZYySH9K5XyA7Ty8N7Ij1YyRZn2ZGVbkA3CPqUG",
"integrity": "sha384-nFY1cewUGJeRgiA3CHjnnYCKMesb1Vh9dfexz7CbAljdHezciVIaND11t66EN5Se",
"elements": [
"gospel-resources-map"
],
@ -556,7 +556,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-vgQHgoTwP3h7cB8wARXuP6KjbZZYySH9K5XyA7Ty8N7Ij1YyRZn2ZGVbkA3CPqUG\" 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-nFY1cewUGJeRgiA3CHjnnYCKMesb1Vh9dfexz7CbAljdHezciVIaND11t66EN5Se\" 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>"
}
},
{
@ -570,7 +570,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-vgQHgoTwP3h7cB8wARXuP6KjbZZYySH9K5XyA7Ty8N7Ij1YyRZn2ZGVbkA3CPqUG\" 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-nFY1cewUGJeRgiA3CHjnnYCKMesb1Vh9dfexz7CbAljdHezciVIaND11t66EN5Se\" 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>"
}
},
{
@ -584,7 +584,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-vgQHgoTwP3h7cB8wARXuP6KjbZZYySH9K5XyA7Ty8N7Ij1YyRZn2ZGVbkA3CPqUG\" 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-nFY1cewUGJeRgiA3CHjnnYCKMesb1Vh9dfexz7CbAljdHezciVIaND11t66EN5Se\" 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>"
}
},
{
@ -598,7 +598,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-vgQHgoTwP3h7cB8wARXuP6KjbZZYySH9K5XyA7Ty8N7Ij1YyRZn2ZGVbkA3CPqUG\" 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-nFY1cewUGJeRgiA3CHjnnYCKMesb1Vh9dfexz7CbAljdHezciVIaND11t66EN5Se\" 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>"
}
}
]