Gospel map: name the people who translated it

The brief asks for real leads — real translators, the real organisations that do
the work — and the map had only URLs. A mobiliser who finds a neighbouring
language already has Scripture wants to know who produced it, because that
organisation has the linguists, the relationships and very often a team already
in that country. The link answers where; this answers who to ask.

eBible publishes its catalogue with a copyright line on every row and the join is
exact: 964 of the 964 eBible links in this index match a catalogue row by
translation id, none unmatched. 929 resolve to a named body across 137
organisations — Wycliffe Bible Translators, The Word for the World, Biblica,
Pioneer Bible Translators, the Seed Company, World Bible Translation Center. It
shows on the group sheet and on both bridges, where "who do I ask about this
language" is the sharpest question on the page.

NAMES ONLY, NO NEW LINKS. The catalogue also carries each publisher's domain, and
shipping it would put hosts into this map that the doctrine screen has never
seen — the screen is an allowlist precisely so a new publisher cannot arrive as a
side effect of a data refresh. Measured after the change: 16,963 links scanned,
the same count as before, and not one credit contains a URL.

A licence is not a translator. 35 rows reduce to "public domain", which says how
the text may be used and nothing about who made it; answering "who to ask" with a
legal status would be worse than saying nothing, so those are dropped and counted
separately from the rows that have no catalogue entry at all.
This commit is contained in:
Doxa Maps 2026-09-25 23:38:12 +00:00
parent 1008001ea5
commit 9272f1f9b7
15 changed files with 9534 additions and 39 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View file

@ -736,6 +736,7 @@ function groupAt(i) {
zume_url: c.z || '',
zume_approx: c.za || null,
scripture_title: c.sv || '',
credit: c.cr || null,
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.',
}
@ -1226,6 +1227,7 @@ const bridgeResources = (b) => {
return {
iso: b.c,
language: c.l || b.l || '',
credit: c.cr || null,
scripture_url: c.s || (fcbhText ? fcbhText.u : ''),
scripture_title: c.sv || (fcbhText ? fcbhText.n : ''),
film_url: c.f || '',
@ -1339,6 +1341,8 @@ useShadowStyles(
/* Quiet enough that the gap itself still reads first: the row is about what is MISSING, and
the way in is the footnote to it, not the headline. */
'.gm-pg-way{display:block;font-size:12.5px;color:#3b463d;opacity:.8;margin-top:2px}' +
'.gm-credit{font-size:12.5px;color:#6d766e;line-height:1.35}' +
'.is-dark .gm-credit{color:#d1d4cd}' +
'.is-dark .gm-pg-way{color:#d1d4cd}' +
'.gm-prose-note{opacity:.9;font-weight:600}' +
// DETAIL: a bottom sheet on a phone, a corner card on desktop.
@ -1994,6 +1998,11 @@ useShadowStyles(
:href="tableLink({ iso: curatedBridgeRes.iso, label: curatedBridgeRes.language })">
{{ t('gospel.sheet.everyResource') }} {{ curatedBridgeRes.language }} →</a>
</div>
<p v-if="curatedBridgeRes && curatedBridgeRes.credit" class="gm-credit" dir="ltr" style="margin:4px 0 0">
The {{ curatedBridgeRes.language }} Scripture was translated by <b>{{ curatedBridgeRes.credit.o }}</b><template
v-if="curatedBridgeRes.credit.y">, {{ curatedBridgeRes.credit.y }}</template> — the likeliest people to ask
about this language next.
</p>
</div>
<!-- THE WEAKER CASE, and it says so on its face. No curated bridge exists for this
group, but their country does have a language carrying Scripture and the film.
@ -2075,11 +2084,26 @@ useShadowStyles(
:href="tableLink({ iso: candidateBridgeRes.iso, label: candidateBridgeRes.language })">
{{ t('gospel.sheet.everyResource') }} {{ candidateBridgeRes.language }} →</a>
</div>
<p v-if="candidateBridgeRes && candidateBridgeRes.credit" class="gm-credit" dir="ltr" style="margin:4px 0 0">
The {{ candidateBridgeRes.language }} Scripture was translated by <b>{{ candidateBridgeRes.credit.o }}</b><template
v-if="candidateBridgeRes.credit.y">, {{ candidateBridgeRes.credit.y }}</template> — the likeliest people to ask
about this language next.
</p>
</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>
<!-- ═══ WHO TO ASK, NOT JUST WHERE TO LOOK ══════════════════════════════════════
A link answers where the Scripture is. The organisation that produced it is
the one with the linguists, the relationships and very often a team already in
that country — which is what a mobiliser actually needs next. A NAME and not a
link: the catalogue carries the publisher's domain too, and shipping it would
put a host into this map that the doctrine screen has never seen. -->
<template v-if="selectedGroup.credit">
<br><span class="gm-credit" dir="ltr">Translated by {{ selectedGroup.credit.o
}}<template v-if="selectedGroup.credit.y">, {{ selectedGroup.credit.y }}</template></span>
</template>
</p>
<!-- A related variety that DOES have something. This is the note that stops the

View file

@ -947,6 +947,22 @@ try {
}
} catch { /* no SUN index in this tree: the Deaf panel stays as it was */ }
/**
* WHO TRANSLATED IT. Attribution for Scripture already in the index — a name, never a new link,
* so no publisher can enter this map through a data refresh without passing the doctrine screen.
* It adds no resource and moves no tier; note it is attached AFTER tierOfCode is defined and
* BEFORE nothing, precisely because it must not participate in tiering.
*/
let credited = 0
try {
const cr = JSON.parse(readFileSync(resolve(REPO, 'data/tables/translation-credits.json'), 'utf8')).byCode || {}
for (const [code, v] of Object.entries(cr)) {
if (!codes[code] || !v.org) continue
codes[code].cr = v.year ? { o: v.org, y: v.year } : { o: v.org }
credited++
}
} catch { /* no credits table: the sheet simply does not name a translator */ }
const tiers = {}
for (const [code, c] of Object.entries(codes)) tiers[code] = tierOfCode(c)
@ -983,6 +999,7 @@ console.log(`arclight codes ${Object.keys(arc).length} (${arcOnly} new, ${upgr
console.log(`share urls ${Object.keys(share).length}`)
console.log(`fcbh codes ${audioCodes} (${audioNew} new codes)`)
console.log(`gospel tracts ${gospelCodes} (Cru/GodTools presentations; depth only, tier UNCHANGED)`)
console.log(`translators named ${credited}\t(attribution only; no new link, no tier change)`)
console.log(`tiers published ${Object.keys(tiers).length}\t(one per code, so a language with no pin still has a tier)`)
console.log(`bridge candidates ${Object.keys(bridgeCandidates).length} (computed here so the map sheet and the access table cannot disagree)`)
console.log(`in-country bridge ${bridgeRows} (groups with NOTHING of their own; a widely-spoken language around them has something — never counted as theirs)`)

View file

@ -0,0 +1,134 @@
/**
* fetch-ebible-credits.mjs — WHO translated the Scripture this map links to.
*
* WHY. The brief asks for real leads: real translators and the real organisations that do the
* work, not just a URL. A mobiliser who finds a neighbouring language already has Scripture
* wants to know who produced it, because that organisation is the one with the linguists, the
* relationships and very often a field team already in that country. The link answers "where";
* this answers "who to ask".
*
* eBible publishes its whole catalogue as CSV with a Copyright line on every row, and the join
* is exact: 964 of the 964 eBible links in this index match a catalogue row by translation id,
* with nothing unmatched. The organisations are real and countable — Wycliffe Bible Translators
* on 899 rows, Bible Societies 89, Biblica 58, Pioneer Bible Translators 45, Seed Company 28.
*
* ⚠ NAMES ONLY. NO NEW LINKS. The catalogue also carries homeDomain and publicationURL, and
* shipping those would put publishers into this map that the doctrine screen has never seen —
* the screen is an allowlist precisely so a new host cannot arrive as a side effect of a data
* refresh. A name is a lead a person can act on; a link is a claim this build has to stand
* behind. So the name ships and the domain does not.
*
* It adds no resource and moves no tier. It is attribution for Scripture already in the index.
*/
import { writeFileSync, readFileSync } from 'node:fs'
import { resolve, dirname } from 'node:path'
import { fileURLToPath } from 'node:url'
const HERE = dirname(fileURLToPath(import.meta.url))
const REPO = resolve(HERE, '../../..')
const OUT = resolve(REPO, 'data/tables/translation-credits.json')
const SRC = 'https://ebible.org/Scriptures/translations.csv'
const UA = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36'
const res = await fetch(SRC, { headers: { 'user-agent': UA }, signal: AbortSignal.timeout(90000) })
if (!res.ok) { console.error(`CREDITS: ${SRC} -> ${res.status}`); process.exit(1) }
const text = await res.text()
/* A CSV parser rather than a split on commas: Copyright lines contain commas inside quotes
("Wycliffe Bible Translators, Inc."), and splitting would cut every one of them in half. */
const parseCsv = (s) => {
const rows = []
let row = [], field = '', quoted = false
for (let i = 0; i < s.length; i++) {
const ch = s[i]
if (quoted) {
if (ch === '"' && s[i + 1] === '"') { field += '"'; i++ }
else if (ch === '"') quoted = false
else field += ch
} else if (ch === '"') quoted = true
else if (ch === ',') { row.push(field); field = '' }
else if (ch === '\n') { row.push(field); rows.push(row); row = []; field = '' }
else if (ch !== '\r') field += ch
}
if (field || row.length) { row.push(field); rows.push(row) }
return rows
}
const raw = parseCsv(text.replace(/^/, ''))
const header = raw[0]
const col = (n) => header.indexOf(n)
const iLang = col('languageCode'), iId = col('translationId'), iTitle = col('title'), iCr = col('Copyright')
if (iLang < 0 || iId < 0 || iCr < 0) {
console.error('CREDITS: the catalogue no longer has the columns this reads — refusing to write.')
process.exit(1)
}
/** "Copyright © 2009 Wycliffe Bible Translators, Inc." -> { org, year } */
const split = (cr) => {
const year = (cr.match(/\b(1[89]\d{2}|20\d{2})\b/) || [])[1] || ''
const org = cr
.replace(/^\s*copyright\s*/i, '')
.replace(/©|\(c\)/gi, '')
.replace(/\b(1[89]\d{2}|20\d{2})\b/g, '')
.replace(/^[\s,.-]+|[\s,.]+$/g, '')
.replace(/\s{2,}/g, ' ')
.trim()
return { org, year }
}
const byId = {}
const byIdAll = {}
let withOrg = 0
for (const r of raw.slice(1)) {
if (!r[iId]) continue
byIdAll[r[iId]] = true
const { org, year } = split(r[iCr] || '')
/* ⚠ A LICENCE IS NOT A TRANSLATOR. 35 rows reduce to "public domain", which says how the text
may be used and nothing about who produced it. Shipping that as a credit would answer "who
to ask" with a legal status, so those rows are dropped and the group simply has no credit —
which is the true state of what this catalogue tells us. */
if (!org || /^(public domain|no copyright|copyrighted|licen[cs]e)\b/i.test(org)) continue
withOrg++
byId[r[iId]] = { lang: r[iLang] || '', title: r[iTitle] || '', org, year }
}
/* Only the translations this map actually links to are kept — the rest is somebody else's
catalogue, and carrying it would grow the shipped payload for no reader. */
const idx = JSON.parse(readFileSync(resolve(REPO, 'data/tables/people-group-pins.json'), 'utf8'))
const used = {}
let joined = 0, noRow = 0, licenceOnly = 0
for (const [code, c] of Object.entries(idx.codes || {})) {
const m = /^https?:\/\/ebible\.org\/([^/]+)\/?$/.exec(c.s || '')
if (!m) continue
const hit = byId[m[1]]
/* Two different silences, counted apart: the catalogue has no row for this translation, or it
has one whose copyright is a licence rather than a body. Adding them together would hide
which of the two is growing. */
if (!hit) { if (byIdAll[m[1]]) licenceOnly++; else noRow++; continue }
joined++
used[code] = { org: hit.org, year: hit.year, title: hit.title }
}
if (!joined) {
console.error('CREDITS: REFUSING TO WRITE — nothing joined; the URL shape or the catalogue changed.')
process.exitCode = 1
} else {
writeFileSync(OUT, `${JSON.stringify({
meta: {
title: 'Who translated it — attribution for the Scripture this map links to',
source: SRC,
generated: new Date().toISOString().slice(0, 10),
catalogue_rows: raw.length - 1,
rows_with_an_organisation: withOrg,
codes_joined: joined,
codes_with_no_catalogue_row: noRow,
codes_whose_copyright_is_a_licence_not_a_translator: licenceOnly,
note: 'Names only. The catalogue also carries homeDomain and publicationURL; those are ' +
'deliberately not shipped, because a link would put a publisher into this map that the ' +
'doctrine screen has never seen. Adds no resource and moves no tier.',
},
byCode: used,
}, null, 1)}\n`)
console.log(`translation-credits: ${joined} code(s) with a named translator, ${licenceOnly} whose copyright is a licence, ${noRow} with no catalogue row, from ${raw.length - 1} rows`)
console.log(`wrote ${OUT}`)
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View file

@ -579,7 +579,7 @@
"bundle": "gospel-resources",
"scriptUrl": "./gospel-resources/gospel-resources.js",
"output": "dx-maps/gospel-resources/gospel-resources.js",
"integrity": "sha384-BLxov30KvOIfmWqBZXBiuwt8pMgXoGd2PujpsIZo42NChDMbkaSqnUNm6FDSXRlA",
"integrity": "sha384-98plszsnIB6YPPbI1OeOUYQbKmiHv3uXgXXXrK2y4mWb9oxtNMcUII7WAfJctZzj",
"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-BLxov30KvOIfmWqBZXBiuwt8pMgXoGd2PujpsIZo42NChDMbkaSqnUNm6FDSXRlA\" 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-98plszsnIB6YPPbI1OeOUYQbKmiHv3uXgXXXrK2y4mWb9oxtNMcUII7WAfJctZzj\" 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-BLxov30KvOIfmWqBZXBiuwt8pMgXoGd2PujpsIZo42NChDMbkaSqnUNm6FDSXRlA\" 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-98plszsnIB6YPPbI1OeOUYQbKmiHv3uXgXXXrK2y4mWb9oxtNMcUII7WAfJctZzj\" 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-BLxov30KvOIfmWqBZXBiuwt8pMgXoGd2PujpsIZo42NChDMbkaSqnUNm6FDSXRlA\" 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-98plszsnIB6YPPbI1OeOUYQbKmiHv3uXgXXXrK2y4mWb9oxtNMcUII7WAfJctZzj\" 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-BLxov30KvOIfmWqBZXBiuwt8pMgXoGd2PujpsIZo42NChDMbkaSqnUNm6FDSXRlA\" 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-98plszsnIB6YPPbI1OeOUYQbKmiHv3uXgXXXrK2y4mWb9oxtNMcUII7WAfJctZzj\" 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-BLxov30KvOIfmWqBZXBiuwt8pMgXoGd2PujpsIZo42NChDMbkaSqnUNm6FDSXRlA\" 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-98plszsnIB6YPPbI1OeOUYQbKmiHv3uXgXXXrK2y4mWb9oxtNMcUII7WAfJctZzj\" 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-BLxov30KvOIfmWqBZXBiuwt8pMgXoGd2PujpsIZo42NChDMbkaSqnUNm6FDSXRlA" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-98plszsnIB6YPPbI1OeOUYQbKmiHv3uXgXXXrK2y4mWb9oxtNMcUII7WAfJctZzj" 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-BLxov30KvOIfmWqBZXBiuwt8pMgXoGd2PujpsIZo42NChDMbkaSqnUNm6FDSXRlA" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-98plszsnIB6YPPbI1OeOUYQbKmiHv3uXgXXXrK2y4mWb9oxtNMcUII7WAfJctZzj" 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-BLxov30KvOIfmWqBZXBiuwt8pMgXoGd2PujpsIZo42NChDMbkaSqnUNm6FDSXRlA" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-98plszsnIB6YPPbI1OeOUYQbKmiHv3uXgXXXrK2y4mWb9oxtNMcUII7WAfJctZzj" 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-BLxov30KvOIfmWqBZXBiuwt8pMgXoGd2PujpsIZo42NChDMbkaSqnUNm6FDSXRlA" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-98plszsnIB6YPPbI1OeOUYQbKmiHv3uXgXXXrK2y4mWb9oxtNMcUII7WAfJctZzj" 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-BLxov30KvOIfmWqBZXBiuwt8pMgXoGd2PujpsIZo42NChDMbkaSqnUNm6FDSXRlA" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-98plszsnIB6YPPbI1OeOUYQbKmiHv3uXgXXXrK2y4mWb9oxtNMcUII7WAfJctZzj" 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": "dx-maps/gospel-resources/gospel-resources.js",
"integrity": "sha384-BLxov30KvOIfmWqBZXBiuwt8pMgXoGd2PujpsIZo42NChDMbkaSqnUNm6FDSXRlA",
"integrity": "sha384-98plszsnIB6YPPbI1OeOUYQbKmiHv3uXgXXXrK2y4mWb9oxtNMcUII7WAfJctZzj",
"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-BLxov30KvOIfmWqBZXBiuwt8pMgXoGd2PujpsIZo42NChDMbkaSqnUNm6FDSXRlA\" 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-98plszsnIB6YPPbI1OeOUYQbKmiHv3uXgXXXrK2y4mWb9oxtNMcUII7WAfJctZzj\" 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-BLxov30KvOIfmWqBZXBiuwt8pMgXoGd2PujpsIZo42NChDMbkaSqnUNm6FDSXRlA\" 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-98plszsnIB6YPPbI1OeOUYQbKmiHv3uXgXXXrK2y4mWb9oxtNMcUII7WAfJctZzj\" 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-BLxov30KvOIfmWqBZXBiuwt8pMgXoGd2PujpsIZo42NChDMbkaSqnUNm6FDSXRlA\" 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-98plszsnIB6YPPbI1OeOUYQbKmiHv3uXgXXXrK2y4mWb9oxtNMcUII7WAfJctZzj\" 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-BLxov30KvOIfmWqBZXBiuwt8pMgXoGd2PujpsIZo42NChDMbkaSqnUNm6FDSXRlA\" 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-98plszsnIB6YPPbI1OeOUYQbKmiHv3uXgXXXrK2y4mWb9oxtNMcUII7WAfJctZzj\" 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-BLxov30KvOIfmWqBZXBiuwt8pMgXoGd2PujpsIZo42NChDMbkaSqnUNm6FDSXRlA\" 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-98plszsnIB6YPPbI1OeOUYQbKmiHv3uXgXXXrK2y4mWb9oxtNMcUII7WAfJctZzj\" 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>"
}
}
]