Gospel tables: translate the resource types, and let the leak gate see every locale

The gate could only ever read Arabic. Its rule — English prose declares itself
with dir="ltr" — is right about the prose and wrong about the root: the embedded
RTL fix sets direction on the plugin's own root element, so under ar the root was
rtl and the walk ran, while under zh, ru and hi the root matched the prose test
and the entire leaf was skipped. Measured on identical DOM in both locales: 1,359
elements walked and 589 carrying text either way, of which 1 sat in a prose
subtree under ar and all 1,359 did under zh.

It then reported that silence as "rendered no labels at all", which reads as a
product failure and is not one. The Chinese leaf renders correctly, title and
all. Silence is now NOT MEASURED, reported separately, and never counted as a
pass. dir is honoured below the root and ignored on it; the comparison went from
488 key/locale pairs to 1,876.

What that exposed was a translation that gave up halfway. Type is an enumerated
label whose eight values the catalogue already translates, and the heading above
it was translated while the column beneath stayed English. The map is derived
from the catalogue rather than listed in the component, so a ninth resource type
is covered the moment it is added; a hand-written list would have been one entry
short and nothing would have failed. Both code paths localise, including the
filtered view a pin or country click produces.

Two values had no key because the catalogue spelled them differently from the
data — Audio Scripture and Bible Stories, now translated in all eleven locales.
Open Bible Stories stays English: it is a product name, as are the organisations
in the Source column beside it.
This commit is contained in:
doxa-maps-88655c70 2026-09-25 18:24:26 +00:00
parent 42f48b7cf5
commit 32b4e5ec6c
21 changed files with 149 additions and 52 deletions

View file

@ -48,6 +48,7 @@ try {
browser = await chromium.launch()
const en = Object.fromEntries(flat(cat('en')))
const leaks = []
const unmeasured = []
let compared = 0
for (const leaf of LEAVES) {
@ -77,26 +78,50 @@ try {
* leak is a label that EQUALS the English value when a different translated value
* exists. That is the same population a translated key is supposed to reach, and a
* language name can no longer impersonate one. */
/* ═══ THE ROOT'S dir IS THE LOCALE, NOT A PROSE DECLARATION — fourth correction ═════
* The rule above ("English prose declares itself with dir=ltr") is right about the
* PROSE and wrong about the ROOT, and that made this gate blind in every left-to-right
* locale it was pointed at.
*
* The embedded-RTL fix sets direction on the plugin's OWN root element, as it should —
* dir="rtl" under ar, dir="ltr" under zh, ru, hi and en. So under ar the root was not
* prose and the walk ran normally; under every other locale the root itself matched the
* prose test and the ENTIRE leaf was skipped as declared-English.
* MEASURED on data-tables: identical DOM in both locales — 1,359 elements walked, 589
* carrying their own text. Under ar, 1 element sat in a prose subtree. Under zh, all
* 1,359 did, and the gate collected nothing.
*
* It then reported that silence as "rendered no labels at all", which reads as a product
* failure. It is not: the zh leaf renders correctly, Chinese title and all — confirmed by
* screenshot. This gate could only ever see Arabic, and said nothing about it.
*
* Prose is always marked INSIDE the leaf (a <p class="gm-note">, a caveat <div>, an
* explanatory <span>); the root carries the locale's base direction and nothing else. So
* dir is honoured below the root and ignored on it. */
const labels = await page.evaluate(() => {
const sr = document.querySelector('gospel-resources-map')?.shadowRoot
if (!sr) return []
const out = new Set()
const walk = (node, inProse) => {
const walk = (node, inProse, depth) => {
for (const child of node.childNodes) {
if (child.nodeType !== 1) continue
if (child.tagName === 'STYLE' || child.tagName === 'SCRIPT') continue
const prose = inProse || (child.getAttribute && child.getAttribute('dir') === 'ltr')
const declares = depth > 0 && child.getAttribute && child.getAttribute('dir') === 'ltr'
const prose = inProse || declares
const own = [...child.childNodes].filter((n) => n.nodeType === 3)
.map((n) => n.textContent.trim()).filter(Boolean).join(' ').trim()
if (own && !prose) out.add(own)
walk(child, prose)
walk(child, prose, depth + 1)
}
}
walk(sr, false)
walk(sr, false, 0)
return [...out]
})
await page.close()
if (!labels.length) { leaks.push(leaf + ' ' + lc + ': rendered no labels at all'); continue }
/* Silence is NOT MEASURED, never a leak: it means this gate could not see the leaf, which
is a different thing from the leaf being wrong. Reporting it as a leak is what sent me
looking for a rendering bug that did not exist. */
if (!labels.length) { unmeasured.push(leaf + ' ' + lc + ': the walk collected no labels'); continue }
const labelSet = new Set(labels)
for (const [key, e] of Object.entries(en)) {
const t = loc[key]
@ -108,6 +133,12 @@ try {
}
console.log(' compared ' + compared + ' key/locale pair(s) across ' + LEAVES.length + ' leaves and ' + LOCALES.length + ' locales')
/* Reported before the verdict and separately from it: a leaf this gate could not read is not
a leaf that passed, and the two must never be added together. */
if (unmeasured.length) {
console.error('GOSPEL-ENGLISH-LEAKS: NOT MEASURED — ' + unmeasured.length + ' leaf/locale pair(s):')
for (const u of unmeasured) console.error(' ' + u)
}
if (leaks.length) {
/* exitCode, NOT process.exit(). process.exit() terminates before pending stdout/stderr
writes flush, and this gate proved it on itself: its first real run returned 1 with
@ -116,8 +147,13 @@ try {
console.error('GOSPEL-ENGLISH-LEAKS: FAIL — ' + leaks.length + ' translated key(s) rendering in English:')
for (const l of leaks.slice(0, 12)) console.error(' ' + l)
process.exitCode = 1
} else if (unmeasured.length) {
console.error('GOSPEL-ENGLISH-LEAKS: NOT MEASURED — no leak found, but ' + unmeasured.length +
' pair(s) were never read, so this is not a pass.')
process.exitCode = 2
} else {
console.log('GOSPEL-ENGLISH-LEAKS: PASS — every key with a translation renders in it.')
console.log('GOSPEL-ENGLISH-LEAKS: PASS — every key with a translation renders in it, ' +
'across ' + LEAVES.length + ' leaves and ' + LOCALES.length + ' locales.')
}
} finally {
await browser?.close()

View file

@ -85,7 +85,9 @@
"gospelPresentation": "عرض للإنجيل",
"scriptureEarth": "Scripture Earth",
"training": "تدريب على التلمذة",
"jesusFilm": "فيلم يسوع"
"jesusFilm": "فيلم يسوع",
"audioScripture": "الكتاب المقدس الصوتي",
"bibleStoriesPlain": "قصص الكتاب المقدس"
},
"state": {
"noneFound": "لا شيء",

View file

@ -85,7 +85,9 @@
"gospelPresentation": "Evangeliums-Darstellung",
"scriptureEarth": "Scripture Earth",
"training": "Jüngerschaftstraining",
"jesusFilm": "JESUS Film"
"jesusFilm": "JESUS Film",
"audioScripture": "Audio-Bibeltext",
"bibleStoriesPlain": "Bibelgeschichten"
},
"state": {
"noneFound": "nichts gefunden",

View file

@ -85,7 +85,9 @@
"gospelPresentation": "Gospel presentation",
"scriptureEarth": "Scripture Earth",
"training": "Discipleship training",
"jesusFilm": "JESUS Film"
"jesusFilm": "JESUS Film",
"audioScripture": "Audio Scripture",
"bibleStoriesPlain": "Bible Stories"
},
"state": {
"noneFound": "none found",

View file

@ -85,7 +85,9 @@
"gospelPresentation": "Presentación del evangelio",
"scriptureEarth": "Scripture Earth",
"training": "Formación de discipulado",
"jesusFilm": "Película JESÚS"
"jesusFilm": "Película JESÚS",
"audioScripture": "Escrituras en audio",
"bibleStoriesPlain": "Historias bíblicas"
},
"state": {
"noneFound": "nada encontrado",

View file

@ -85,7 +85,9 @@
"gospelPresentation": "Présentation de l'Évangile",
"scriptureEarth": "Scripture Earth",
"training": "Formation au discipulat",
"jesusFilm": "Film JÉSUS"
"jesusFilm": "Film JÉSUS",
"audioScripture": "Écritures en audio",
"bibleStoriesPlain": "Histoires bibliques"
},
"state": {
"noneFound": "rien trouvé",

View file

@ -85,7 +85,9 @@
"gospelPresentation": "सुसमाचार प्रस्तुति",
"scriptureEarth": "Scripture Earth",
"training": "शिष्यत्व प्रशिक्षण",
"jesusFilm": "यीशु फ़िल्म"
"jesusFilm": "यीशु फ़िल्म",
"audioScripture": "ऑडियो पवित्र शास्त्र",
"bibleStoriesPlain": "बाइबल की कहानियाँ"
},
"state": {
"noneFound": "कुछ नहीं मिला",

View file

@ -85,7 +85,9 @@
"gospelPresentation": "Presentazione del Vangelo",
"scriptureEarth": "Scripture Earth",
"training": "Formazione al discepolato",
"jesusFilm": "Film GESÙ"
"jesusFilm": "Film GESÙ",
"audioScripture": "Scritture in audio",
"bibleStoriesPlain": "Storie bibliche"
},
"state": {
"noneFound": "nulla trovato",

View file

@ -85,7 +85,9 @@
"gospelPresentation": "Apresentação do evangelho",
"scriptureEarth": "Scripture Earth",
"training": "Treinamento de discipulado",
"jesusFilm": "Filme JESUS"
"jesusFilm": "Filme JESUS",
"audioScripture": "Escrituras em áudio",
"bibleStoriesPlain": "Histórias bíblicas"
},
"state": {
"noneFound": "nada encontrado",

View file

@ -85,7 +85,9 @@
"gospelPresentation": "Prezentarea Evangheliei",
"scriptureEarth": "Scripture Earth",
"training": "Instruire în ucenicie",
"jesusFilm": "Filmul ISUS"
"jesusFilm": "Filmul ISUS",
"audioScripture": "Scripturi audio",
"bibleStoriesPlain": "Povestiri biblice"
},
"state": {
"noneFound": "nimic găsit",

View file

@ -85,7 +85,9 @@
"gospelPresentation": "Изложение Евангелия",
"scriptureEarth": "Scripture Earth",
"training": "Обучение ученичеству",
"jesusFilm": "Фильм «Иисус»"
"jesusFilm": "Фильм «Иисус»",
"audioScripture": "Аудио с Писанием",
"bibleStoriesPlain": "Библейские истории"
},
"state": {
"noneFound": "ничего не найдено",

View file

@ -85,7 +85,9 @@
"gospelPresentation": "福音简介",
"scriptureEarth": "Scripture Earth",
"training": "门徒训练",
"jesusFilm": "《耶稣传》"
"jesusFilm": "《耶稣传》",
"audioScripture": "音频圣经",
"bibleStoriesPlain": "圣经故事"
},
"state": {
"noneFound": "一无所获",

View file

@ -153,6 +153,41 @@ const rawTable = computed(() => cache.value[current.value?.file] || null)
const FILTERABLE = new Set(['doxa', 'links', 'nothing'])
const table = computed(() => {
const t = rawTable.value
/**
* ═══ THE COLUMN HEADINGS WERE TRANSLATED AND THE CELLS UNDER THEM WERE NOT ═══════════════
*
* "Type" is an ENUMERATED LABEL, not free data: every cell in it is one of eight fixed
* values that the catalogue already translates into all eleven locales. Translating the
* heading and leaving the column beneath it in English is the worst of both — it reads as
* a translation that gave up halfway.
*
* DERIVED FROM THE CATALOGUE, NOT LISTED HERE. The map is built from EN_MESSAGES.gospel.res,
* so a resource type added there is translated the moment it lands. A hand-written list of
* the eight values is the same shape as the bug the surfaces gate exists for: it would be
* one entry short the first time a ninth type appeared, and nothing would fail.
*
* ONLY the Type column, and only on an EXACT match. The Source column next to it holds
* organisation names — Faith Comes By Hearing, eBible.org, Door43 — which are proper nouns
* and stay as they are, the same decision already taken for "Open Bible Stories".
*/
const resValues = new Map()
for (const [key, english] of Object.entries(EN_MESSAGES.gospel?.res || {})) {
if (typeof english !== 'string') continue
const v = tr('gospel.res.' + key)
if (v && v !== 'gospel.res.' + key && v !== english) resValues.set(english, v)
}
const localiseValues = (tbl, rows) => {
const typed = (tbl.columns || []).filter((c) => c.field === 'type').map((c) => c.field)
if (!typed.length || !resValues.size) return rows
return rows.map((r) => {
let out = r
for (const f of typed) {
const hit = resValues.get(r[f])
if (hit) out = { ...out, [f]: hit }
}
return out
})
}
const localise = (tbl) => ({
...tbl,
columns: (tbl.columns || []).map((c) => {
@ -160,6 +195,7 @@ const table = computed(() => {
const v = tr(k)
return v && v !== k ? { ...c, title: v } : c
}),
rows: localiseValues(tbl, tbl.rows || []),
})
if (!t || !hasFilter.value || !FILTERABLE.has(current.value?.id)) return t ? localise(t) : t
const rows = (t.rows || []).filter((r) => {
@ -207,7 +243,10 @@ const table = computed(() => {
const v = tr(k)
return v && v !== k ? { ...c, title: v } : c
})
return { ...t, meta: { ...t.meta, title }, columns, rows }
/* THE FILTERED VIEW IS A SECOND PATH and it has to localise too. It builds its own columns
and rows instead of calling localise(), so a fix applied only there leaks the moment a
pin or a country is clicked — the state a mobiliser is actually in. */
return { ...t, meta: { ...t.meta, title }, columns, rows: localiseValues(t, rows) }
})
const filterCount = computed(() => (table.value?.rows || []).length)
const totalCount = computed(() => (rawTable.value?.rows || []).length)

View file

@ -579,7 +579,7 @@
"bundle": "gospel-resources",
"scriptUrl": "./gospel-resources/gospel-resources.js",
"output": "doxa-maps/gospel-resources/gospel-resources.js",
"integrity": "sha384-83HLzn3UnHaNcFHHaWBEAKw9t2GOZ87+bGMZG0HoShOnvucyE+Ir5KUtKbFXI6hI",
"integrity": "sha384-d+PYFi3VOBW6qCuJ+anfU9B1skxLyJVzWUqbALwwVB7QbInRXWAZ3SrhyXq3xFxH",
"elements": [
"gospel-resources-map"
],
@ -599,7 +599,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-83HLzn3UnHaNcFHHaWBEAKw9t2GOZ87+bGMZG0HoShOnvucyE+Ir5KUtKbFXI6hI\" 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-d+PYFi3VOBW6qCuJ+anfU9B1skxLyJVzWUqbALwwVB7QbInRXWAZ3SrhyXq3xFxH\" 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>"
}
},
{
@ -613,7 +613,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-83HLzn3UnHaNcFHHaWBEAKw9t2GOZ87+bGMZG0HoShOnvucyE+Ir5KUtKbFXI6hI\" 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-d+PYFi3VOBW6qCuJ+anfU9B1skxLyJVzWUqbALwwVB7QbInRXWAZ3SrhyXq3xFxH\" 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>"
}
},
{
@ -627,7 +627,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": "<!-- 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=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-83HLzn3UnHaNcFHHaWBEAKw9t2GOZ87+bGMZG0HoShOnvucyE+Ir5KUtKbFXI6hI\" 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": "<!-- 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=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-d+PYFi3VOBW6qCuJ+anfU9B1skxLyJVzWUqbALwwVB7QbInRXWAZ3SrhyXq3xFxH\" 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>"
}
},
{
@ -641,7 +641,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-83HLzn3UnHaNcFHHaWBEAKw9t2GOZ87+bGMZG0HoShOnvucyE+Ir5KUtKbFXI6hI\" 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-d+PYFi3VOBW6qCuJ+anfU9B1skxLyJVzWUqbALwwVB7QbInRXWAZ3SrhyXq3xFxH\" 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>"
}
},
{
@ -655,7 +655,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": "<!-- 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=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-83HLzn3UnHaNcFHHaWBEAKw9t2GOZ87+bGMZG0HoShOnvucyE+Ir5KUtKbFXI6hI\" 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": "<!-- 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=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-d+PYFi3VOBW6qCuJ+anfU9B1skxLyJVzWUqbALwwVB7QbInRXWAZ3SrhyXq3xFxH\" 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>"
}
}
]

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-83HLzn3UnHaNcFHHaWBEAKw9t2GOZ87+bGMZG0HoShOnvucyE+Ir5KUtKbFXI6hI" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-d+PYFi3VOBW6qCuJ+anfU9B1skxLyJVzWUqbALwwVB7QbInRXWAZ3SrhyXq3xFxH" 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-83HLzn3UnHaNcFHHaWBEAKw9t2GOZ87+bGMZG0HoShOnvucyE+Ir5KUtKbFXI6hI" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-d+PYFi3VOBW6qCuJ+anfU9B1skxLyJVzWUqbALwwVB7QbInRXWAZ3SrhyXq3xFxH" 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-83HLzn3UnHaNcFHHaWBEAKw9t2GOZ87+bGMZG0HoShOnvucyE+Ir5KUtKbFXI6hI" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-d+PYFi3VOBW6qCuJ+anfU9B1skxLyJVzWUqbALwwVB7QbInRXWAZ3SrhyXq3xFxH" 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-83HLzn3UnHaNcFHHaWBEAKw9t2GOZ87+bGMZG0HoShOnvucyE+Ir5KUtKbFXI6hI" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-d+PYFi3VOBW6qCuJ+anfU9B1skxLyJVzWUqbALwwVB7QbInRXWAZ3SrhyXq3xFxH" 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-83HLzn3UnHaNcFHHaWBEAKw9t2GOZ87+bGMZG0HoShOnvucyE+Ir5KUtKbFXI6hI" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-d+PYFi3VOBW6qCuJ+anfU9B1skxLyJVzWUqbALwwVB7QbInRXWAZ3SrhyXq3xFxH" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -579,7 +579,7 @@
"bundle": "gospel-resources",
"scriptUrl": "./gospel-resources/gospel-resources.js",
"output": "doxa-maps/gospel-resources/gospel-resources.js",
"integrity": "sha384-83HLzn3UnHaNcFHHaWBEAKw9t2GOZ87+bGMZG0HoShOnvucyE+Ir5KUtKbFXI6hI",
"integrity": "sha384-d+PYFi3VOBW6qCuJ+anfU9B1skxLyJVzWUqbALwwVB7QbInRXWAZ3SrhyXq3xFxH",
"elements": [
"gospel-resources-map"
],
@ -599,7 +599,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-83HLzn3UnHaNcFHHaWBEAKw9t2GOZ87+bGMZG0HoShOnvucyE+Ir5KUtKbFXI6hI\" 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-d+PYFi3VOBW6qCuJ+anfU9B1skxLyJVzWUqbALwwVB7QbInRXWAZ3SrhyXq3xFxH\" 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>"
}
},
{
@ -613,7 +613,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-83HLzn3UnHaNcFHHaWBEAKw9t2GOZ87+bGMZG0HoShOnvucyE+Ir5KUtKbFXI6hI\" 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-d+PYFi3VOBW6qCuJ+anfU9B1skxLyJVzWUqbALwwVB7QbInRXWAZ3SrhyXq3xFxH\" 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>"
}
},
{
@ -627,7 +627,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": "<!-- 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=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-83HLzn3UnHaNcFHHaWBEAKw9t2GOZ87+bGMZG0HoShOnvucyE+Ir5KUtKbFXI6hI\" 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": "<!-- 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=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-d+PYFi3VOBW6qCuJ+anfU9B1skxLyJVzWUqbALwwVB7QbInRXWAZ3SrhyXq3xFxH\" 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>"
}
},
{
@ -641,7 +641,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-83HLzn3UnHaNcFHHaWBEAKw9t2GOZ87+bGMZG0HoShOnvucyE+Ir5KUtKbFXI6hI\" 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-d+PYFi3VOBW6qCuJ+anfU9B1skxLyJVzWUqbALwwVB7QbInRXWAZ3SrhyXq3xFxH\" 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>"
}
},
{
@ -655,7 +655,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": "<!-- 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=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-83HLzn3UnHaNcFHHaWBEAKw9t2GOZ87+bGMZG0HoShOnvucyE+Ir5KUtKbFXI6hI\" 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": "<!-- 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=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-d+PYFi3VOBW6qCuJ+anfU9B1skxLyJVzWUqbALwwVB7QbInRXWAZ3SrhyXq3xFxH\" 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>"
}
}
]