Say which Scripture it is, and how much of it
Every Scripture row on this map said "Scripture". The catalogue knows the translation's actual name for 1,213 of the 1,237 languages that have one, and the difference it hides is the one a mobiliser most needs: "Ahirani Matthew and Mark" is two Gospels, "Bhadrawahi Bible" is a Bible. The table said "Scripture in this language" on all 1,237 rows and the sheet showed a bare chip. The sheet now names the translation and its scope — "German ELBBK Bible — Full Bible" — and the table carries the real name in its Resource column plus a new Scope column: 101 Full Bible, 461 New Testament, 122 Portions of both Testaments, 6 Old Testament. Scope is its own column rather than folded into Type, so Type stays a clean three-value filter. SCOPE DESCRIBES THE TRANSLATION WE ACTUALLY LINK TO. A curated scripture_url pointing at the same eBible page inherits it; one pointing elsewhere does NOT, because the catalogue's book counts would then be describing a different publication. That distinction recovered 96 entries and correctly leaves 547 blank rather than guessing. EBIBLE LINKS WERE THE TICK'S ACTUAL QUESTION and they came back clean: ebible.org/cmn2006/ renders the Mandarin Bible with its full book list in-script, png.bible/aai/ renders Minaifia NT from Matthew to Revelation. They land where a person can read, which is what the film links did not do. The scope work came out of reading those pages. ★ THE DEEP-LINK PROBE FAILED ON THIS COMMIT AND THE PRODUCT WAS FINE. It read the ISO code from cell index 4; inserting the Scope column moved it to 5, so it reported a filter failure while the filter was returning exactly the right 2 rows. It now finds the column by its HEADER. A column index is a position, a header is a contract — the same mistake the tooltip probe made two ticks ago by asserting wording instead of the rule. Verified: the scope line renders "German ELBBK Bible — Full Bible" on a real group and is ABSENT on a group with no scope, so it discriminates. Coverage gate passes, its self-test still fails 7/7 on demand, and pins, table, deep-link, tooltip and sign probes all pass.
This commit is contained in:
parent
9dfcf3551b
commit
cc350514f3
16 changed files with 71 additions and 36 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -278,6 +278,8 @@ function groupAt(i) {
|
|||
checked_pools: c.ck || '',
|
||||
unchecked_pools: c.un || '',
|
||||
is_sign: c.sg === 1,
|
||||
scripture_title: c.sv || '',
|
||||
scripture_scope: c.ss || '',
|
||||
code_note: r[4] ? '' : 'This group has no ISO 639-3 code in the source, so no resource lookup is possible for it.',
|
||||
}
|
||||
}
|
||||
|
|
@ -614,6 +616,9 @@ useShadowStyles(
|
|||
'.is-dark .gm-mode{border-color:rgba(255,255,255,.22)}' +
|
||||
'.is-dark .gm-mode.on{background:#10b981;border-color:#10b981;color:#04241a}' +
|
||||
// RESOURCE LIST inside the sheet.
|
||||
'.gm-scope{margin:7px 0 0;font-size:11.5px;line-height:1.45;color:#3b463d}' +
|
||||
'.gm-scope b{font-weight:700}' +
|
||||
'.is-dark .gm-scope{color:#e5e7eb}' +
|
||||
'.gm-sign{margin:8px 0 0;padding:8px 10px;border:1px solid #d1d4cd;border-left:3px solid #6d766e;' +
|
||||
'border-radius:8px;background:#f3f3f1;color:#3b463d;font-size:11.5px;line-height:1.5}' +
|
||||
'.is-dark .gm-sign{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.18);color:#e5e7eb}' +
|
||||
|
|
@ -829,6 +834,11 @@ useShadowStyles(
|
|||
Open Bible Stories · none found
|
||||
</span>
|
||||
</div>
|
||||
<p v-if="selectedGroup.scripture_title || selectedGroup.scripture_scope" class="gm-scope">
|
||||
<b>{{ selectedGroup.scripture_title || 'Scripture' }}</b>
|
||||
<template v-if="selectedGroup.scripture_scope"> — {{ selectedGroup.scripture_scope }}</template>
|
||||
</p>
|
||||
|
||||
<p v-if="selectedGroup.is_sign" class="gm-sign">
|
||||
<b>This is a sign language.</b> A Deaf group cannot be reached by a text
|
||||
translation, so eBible's silence here is not an absence of Scripture — it is a
|
||||
|
|
|
|||
|
|
@ -61,6 +61,20 @@ function labelD43(items) {
|
|||
// scripture_url values, which fill-never-overwrite preserves and which therefore never
|
||||
// passed through the catalogue's own normaliser. Scheme and host only; the path is
|
||||
// case-sensitive and is left exactly as published.
|
||||
// SCOPE, not just a title. "Ahirani Matthew and Mark" and "Bhadrawahi Bible" are both
|
||||
// "Scripture" to the old label, and the difference between two Gospels and a whole Bible
|
||||
// is the most decision-relevant fact a mobiliser reads on this map.
|
||||
// 39 OT books + 27 NT = the 66-book canon; NT-only and portions are named as such rather
|
||||
// than rounded up.
|
||||
function scopeOf(ee) {
|
||||
if (!ee) return ''
|
||||
if (ee.full) return 'Full Bible'
|
||||
if (ee.nt && !ee.ot) return 'New Testament'
|
||||
if (ee.ot && !ee.nt) return 'Old Testament'
|
||||
if (ee.nt && ee.ot) return 'Portions of both Testaments'
|
||||
return 'Portions'
|
||||
}
|
||||
|
||||
const httpsify = (u) => {
|
||||
const m = /^https?:\/\/([^/]+)(\/.*)?$/i.exec(String(u || '').trim())
|
||||
return m ? `https://${m[1].toLowerCase()}${m[2] || ''}` : String(u || '').trim()
|
||||
|
|
@ -114,7 +128,12 @@ for (const r of res) {
|
|||
...(dd && dd.items.length ? { d: labelD43(dd.items) } : {}),
|
||||
l: r.language || '',
|
||||
...((s0 || ebUrl) && { s: httpsify(s0 || ebUrl) }),
|
||||
...(!s0 && ebUrl ? { sv: ee.t || '', sf: ee.full ? 1 : 0 } : {}),
|
||||
// Scope describes the translation we actually LINK TO. A curated scripture_url that
|
||||
// happens to be the same eBible page gets it too; one that points somewhere else does
|
||||
// NOT, because the catalogue's book counts would then be describing a different
|
||||
// publication. 643 entries were missing a scope purely because they were curated.
|
||||
...(ee && httpsify(s0 || ebUrl) === httpsify(ee.u)
|
||||
? { sv: ee.t || '', sf: ee.full ? 1 : 0, ss: scopeOf(ee) } : {}),
|
||||
...((f || arcUrl) && { f: httpsify(f || arcUrl) }),
|
||||
// has_audio carries a meaningful third state: 'unknown' means a pool we could not
|
||||
// query (key-blocked), NOT a no. Collapsing it to a boolean would turn "we did not
|
||||
|
|
@ -160,7 +179,7 @@ for (const [c, aa] of Object.entries(arc)) {
|
|||
for (const [c, ee] of Object.entries(eb)) {
|
||||
if (codes[c]) {
|
||||
// code exists but came from the Door43-only pass above and has no scripture yet
|
||||
if (!codes[c].s) { codes[c].s = httpsify(ee.u); codes[c].sv = ee.t || ''; codes[c].sf = ee.full ? 1 : 0 }
|
||||
if (!codes[c].s) { codes[c].s = httpsify(ee.u); codes[c].sv = ee.t || ''; codes[c].sf = ee.full ? 1 : 0; codes[c].ss = scopeOf(ee) }
|
||||
continue
|
||||
}
|
||||
codes[c] = { l: ee.ln || '', s: ee.u, sv: ee.t || '', sf: ee.full ? 1 : 0, ck: 'ebible', un: 'arclight, grn, api_bible, dbl, progress_bible' }
|
||||
|
|
|
|||
|
|
@ -63,11 +63,12 @@ for (const [code, c] of Object.entries(codes)) {
|
|||
// on THIS map speak it", not a reason to hide the resource from someone searching for
|
||||
// that language.
|
||||
const r = reach[code] || { groups: 0, speakers: 0, countries: new Set(), sample: [] }
|
||||
const add = (name, type, url) => {
|
||||
const add = (name, type, url, scope = '') => {
|
||||
if (!url) return
|
||||
out.push({
|
||||
resource: name,
|
||||
type,
|
||||
scope,
|
||||
source: SOURCE(url),
|
||||
language: c.l || '',
|
||||
iso639_3: code,
|
||||
|
|
@ -82,7 +83,10 @@ for (const [code, c] of Object.entries(codes)) {
|
|||
resource_url: url,
|
||||
})
|
||||
}
|
||||
add('Scripture in this language', 'Scripture', c.s)
|
||||
// The real translation name, where the catalogue knows it. "Scripture in this language"
|
||||
// was the same string on all 1,237 rows and hid the one thing worth reading: "Ahirani
|
||||
// Matthew and Mark" is two Gospels, "Bhadrawahi Bible" is a Bible.
|
||||
add(c.sv || 'Scripture in this language', 'Scripture', c.s, c.ss || '')
|
||||
add('JESUS Film', 'Film', c.f)
|
||||
for (const d of c.d || []) {
|
||||
// "Open Bible Stories" stays labelled as STORIES. It is 50 illustrated narratives
|
||||
|
|
@ -112,6 +116,8 @@ const doc = {
|
|||
columns: [
|
||||
{ title: 'Resource', field: 'resource', type: 'string' },
|
||||
{ title: 'Type', field: 'type', type: 'string' },
|
||||
// How MUCH Scripture, kept in its own column so Type stays a clean three-value filter.
|
||||
{ title: 'Scope', field: 'scope', type: 'string' },
|
||||
{ title: 'Source', field: 'source', type: 'string' },
|
||||
{ title: 'Language', field: 'language', type: 'string' },
|
||||
{ title: 'ISO 639-3', field: 'iso639_3', type: 'string' },
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
2
public/assets/tables/people-group-pins.json
vendored
2
public/assets/tables/people-group-pins.json
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -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-HyKsL5rVGD0wJe7fVDOOHI20KsPpdWTBTyja4zyrA9k63Ax9ssGODuQLPMljI+BG" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-HeeVt3sSmk4dGl91s+aSufyiWW6ostUjC4jrkIQRtWzIHwaxv8ADjbI8IPB5zJAJ" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -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-HyKsL5rVGD0wJe7fVDOOHI20KsPpdWTBTyja4zyrA9k63Ax9ssGODuQLPMljI+BG" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-HeeVt3sSmk4dGl91s+aSufyiWW6ostUjC4jrkIQRtWzIHwaxv8ADjbI8IPB5zJAJ" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -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-HyKsL5rVGD0wJe7fVDOOHI20KsPpdWTBTyja4zyrA9k63Ax9ssGODuQLPMljI+BG" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-HeeVt3sSmk4dGl91s+aSufyiWW6ostUjC4jrkIQRtWzIHwaxv8ADjbI8IPB5zJAJ" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -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-HyKsL5rVGD0wJe7fVDOOHI20KsPpdWTBTyja4zyrA9k63Ax9ssGODuQLPMljI+BG" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-HeeVt3sSmk4dGl91s+aSufyiWW6ostUjC4jrkIQRtWzIHwaxv8ADjbI8IPB5zJAJ" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
2
public/doxa-maps/index.html
generated
2
public/doxa-maps/index.html
generated
File diff suppressed because one or more lines are too long
10
public/doxa-maps/manifest.json
generated
10
public/doxa-maps/manifest.json
generated
|
|
@ -556,7 +556,7 @@
|
|||
"bundle": "gospel-resources",
|
||||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"output": "doxa-maps/gospel-resources/gospel-resources.js",
|
||||
"integrity": "sha384-HyKsL5rVGD0wJe7fVDOOHI20KsPpdWTBTyja4zyrA9k63Ax9ssGODuQLPMljI+BG",
|
||||
"integrity": "sha384-HeeVt3sSmk4dGl91s+aSufyiWW6ostUjC4jrkIQRtWzIHwaxv8ADjbI8IPB5zJAJ",
|
||||
"elements": [
|
||||
"gospel-resources-map"
|
||||
],
|
||||
|
|
@ -572,7 +572,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-HyKsL5rVGD0wJe7fVDOOHI20KsPpdWTBTyja4zyrA9k63Ax9ssGODuQLPMljI+BG\" 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-HeeVt3sSmk4dGl91s+aSufyiWW6ostUjC4jrkIQRtWzIHwaxv8ADjbI8IPB5zJAJ\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -586,7 +586,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-HyKsL5rVGD0wJe7fVDOOHI20KsPpdWTBTyja4zyrA9k63Ax9ssGODuQLPMljI+BG\" 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-HeeVt3sSmk4dGl91s+aSufyiWW6ostUjC4jrkIQRtWzIHwaxv8ADjbI8IPB5zJAJ\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -600,7 +600,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-HyKsL5rVGD0wJe7fVDOOHI20KsPpdWTBTyja4zyrA9k63Ax9ssGODuQLPMljI+BG\" 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-HeeVt3sSmk4dGl91s+aSufyiWW6ostUjC4jrkIQRtWzIHwaxv8ADjbI8IPB5zJAJ\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -614,7 +614,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-HyKsL5rVGD0wJe7fVDOOHI20KsPpdWTBTyja4zyrA9k63Ax9ssGODuQLPMljI+BG\" 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-HeeVt3sSmk4dGl91s+aSufyiWW6ostUjC4jrkIQRtWzIHwaxv8ADjbI8IPB5zJAJ\" 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>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
|||
Loading…
Reference in a new issue