FCBH text as well as audio, and 207 text-only filesets stop claiming to be audio

The FCBH integration used only audio_date. Their rows also carry text_date, and it is
unambiguous - they publish Bible text on bible.is. 698 codes carry text where this map
had no text Scripture at all, reaching 2,176 pins and 1.38bn people. Codes go 2,192 ->
2,400 and the gap falls 2,927 -> 2,908.

ONE LINK PER LANGUAGE, NOT ONE PER MEDIUM. A bible.is fileset is a single page carrying
whatever media it has, so two chips pointing at the same URL would be noise. The link
now states what it carries: 1,465 codes audio+text, 677 audio only, 207 text only.

That last number was a live falsehood. Because the builder never copied the media field
across, all 2,349 bible.is rows were typed "Audio Scripture" - including 207 filesets
with no recording at all. A group with text-only Scripture was being sent to look for a
recording that does not exist. Both the chip and the table type now follow the media.

Ranking is by media count, then AUDIO PRESENT, then recency. The middle term is not
decoration: without it a newer text-only fileset outranks an audio-only one on date
alone and the language silently loses its recording, which is the medium an
oral-preference group actually needs. Measured while it was missing: 3 codes lost audio.

video_date is deliberately left out. The column does not say what the video IS - a Luke
film, a sign-language edition, something else - and counting it as "film" beside the
JESUS Film would assert something nobody here has checked. 400 codes with no film today
carry one, so it is worth establishing later, but not by guessing.

Clause I now accepts BOTH Audio Scripture and Scripture on bible.is, because a fileset
really can be either, while keeping the set closed and keeping Audio Scripture wrong on
every other host. Proven by poisoning both directions: Film on bible.is and Audio
Scripture on ebible.org are each caught. Poison self-test 11/11.

Also verified, not assumed: the brief's requirement that a pin or country click filters
the table. iso=deu shows 4 of 5,889, country=IND shows 502 of 5,889. It works; an
earlier reading of mine that suggested otherwise was measuring the wrong thing.

All 6,117 links screened and verified. Screenshot read: Ninigo (ssg) shows "Scripture,
text - 2012 Wycliffe Bible Translators, Inc." where it would have claimed audio.
This commit is contained in:
doxa-maps-88655c70 2026-09-24 11:26:10 +00:00
parent a11e19a6b0
commit 659ca6e244
26 changed files with 53756 additions and 37129 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -143,7 +143,11 @@ for (const t of trows) {
// Audio Scripture is published here by exactly one host. Without this the type fell
// through every branch above and was checked by nothing, the same hole training had.
else if (t.type === 'Audio Scripture' && !/(^|\.)bible\.is$/i.test(h)) typeBad.push(`Audio Scripture on ${h}`)
else if (/(^|\.)bible\.is$/i.test(h) && t.type !== 'Audio Scripture') typeBad.push(`${t.type} on bible.is`)
// bible.is serves BOTH: a fileset may carry audio, text or both, so the honest set of
// types on this host is two, not one. It stays a CLOSED set - anything else here is a
// mislabel - and 'Audio Scripture' on any other host is still wrong.
else if (/(^|\.)bible\.is$/i.test(h) && t.type !== 'Audio Scripture' && t.type !== 'Scripture') typeBad.push(`${t.type} on bible.is`)
else if (t.type === 'Audio Scripture' && !/(^|\.)bible\.is$/i.test(h)) typeBad.push(`Audio Scripture on ${h}`)
}
if (typeBad.length) add('I', `${typeBad.length} row(s) whose type disagrees with their host (e.g. ${typeBad[0]})`)

View file

@ -71,8 +71,23 @@ wrong within the same hour. If a bogus id ever returns the same size as a known-
discriminator has stopped discriminating, and both the fetcher and the verifier abort rather
than write thousands of false greens.
Doctrine: straight Scripture audio, which the brief names as acceptable, from Bible
Societies, Biblica and Covenant. The name screen is a guard for future data, not a fix for
**Text is included, video is NOT.** `text_date` is unambiguous — FCBH publishes Bible text
on bible.is — and 698 codes carry text where this map had no text Scripture at all, reaching
2,176 pins and 1.38bn people. Media now break down as 1,465 codes audio+text, 677 audio only,
207 text only, and each link says which it is rather than all of them claiming "audio".
`video_date` is left out on purpose: the column does not say WHAT the video is (a Luke film,
a sign-language edition, something else), and counting it as "film" beside the JESUS Film
would assert something nobody here has checked. It is worth a later tick to establish.
One link per language, not one per medium: a bible.is fileset is a single page carrying
whatever media it has, so two chips pointing at the same URL would be noise. Rows are ranked
by media count, then by whether audio is present, then by recency — the middle term is not
decoration, because without it a newer text-only fileset outranks an audio-only one on date
alone and the language silently loses its recording, which is the medium an oral-preference
group actually needs. Measured when it was missing: 3 codes lost audio.
Doctrine: straight Scripture audio and text, which the brief names as acceptable, from Bible
Societies, Biblica, Wycliffe and Covenant. The name screen is a guard for future data, not a fix for
anything present — 0 of 2,769 distinct translation names match it.
## Not a source at all

View file

@ -974,13 +974,17 @@ useShadowStyles(
answers 403 to everything including robots.txt. That is still true and still
said below — but it is no longer the whole answer, and a group with an audio
Bible should never have been told the audio question was simply unasked. -->
<!-- ONE link, and it says what it carries. A bible.is fileset is a single page
that may hold audio, text or both, so two chips to the same URL would be
noise; the media list is the useful part, because "there is a recording"
and "there is a readable text" are different answers to different needs. -->
<a v-if="selectedGroup.audio" class="gm-chip ok wrap"
:href="selectedGroup.audio.u" target="_blank" rel="noopener noreferrer"
:title="selectedGroup.audio.n + ' — audio Scripture from Faith Comes By Hearing, free to listen to in a browser.'">
Audio · {{ selectedGroup.audio.n }}
:title="selectedGroup.audio.n + ' — Scripture from Faith Comes By Hearing (' + (selectedGroup.audio.m || 'audio') + '), free in a browser.'">
Scripture, {{ selectedGroup.audio.m || 'audio' }} · {{ selectedGroup.audio.n }}
</a>
<span v-else class="gm-chip meh"
title="Faith Comes By Hearing publishes no audio Scripture in this language. GRN (Global Recordings Network) is the other main audio pool and answers 403 to every request, so it has not been searched for any group on this map.">
title="Faith Comes By Hearing publishes no audio or text Scripture in this language. GRN (Global Recordings Network) is the other main audio pool and answers 403 to every request, so it has not been searched for any group on this map.">
Audio · none at FCBH, GRN unsearchable
</span>
<!-- Door43 entries are real published repos, so they ship as real links. The

View file

@ -329,7 +329,7 @@ for (const [c, z] of Object.entries(zume)) {
let audioCodes = 0, audioNew = 0
for (const [c, a] of Object.entries(fcbh)) {
if (!codes[c]) { codes[c] = { l: a.ln || '', ck: SCANNED, un: NOT_SCANNED }; audioNew++ }
codes[c].au = { u: httpsify(a.u), n: a.n, ln: a.ln }
codes[c].au = { u: httpsify(a.u), n: a.n, ln: a.ln, m: a.m || 'audio' }
audioCodes++
}
@ -421,7 +421,7 @@ console.log(`door43 codes ${Object.keys(d43).length} (${d43Only} new)`)
console.log(`ebible codes ${Object.keys(eb).length} (${ebOnly} new)`)
console.log(`arclight codes ${Object.keys(arc).length} (${arcOnly} new, ${upgraded} upgraded to a real deep link)`)
console.log(`share urls ${Object.keys(share).length}`)
console.log(`fcbh audio codes ${audioCodes} (${audioNew} new codes)`)
console.log(`fcbh codes ${audioCodes} (${audioNew} new codes)`)
console.log(`dead links dropped ${droppedDead} (verification proved them 404; ${dead.size} known broken)`)
console.log(`zume languages ${zumeCodes} (${zumeNew} new codes; training only, tier unchanged)`)
console.log(`zume approximate ${zumeApproxCodes} (published in the language, variety not stated; never counted as an exact join)`)
@ -429,6 +429,6 @@ console.log(`named from cat ${catNamed} (no pin speaks them; named from a cata
console.log(`sign languages ${signCodes}`)
console.log(`named-only ${namedOnly} (language named, no resource in any pool checked)`)
console.log(`lifted off 0 ${liftedByD43} (had nothing; now have a published Door43 resource)`)
console.log(`lifted by audio ${liftedByAudio} (had nothing; now have audio Scripture in their own language)`)
console.log(`lifted by fcbh ${liftedByAudio} (had nothing; now have Scripture from FCBH in their own language)`)
console.log(`dropped nocoord ${noCoord}`)
console.log(`wrote ${OUT} (${(readFileSync(OUT).length / 1024).toFixed(0)} KB)`)

View file

@ -101,7 +101,13 @@ for (const [code, c] of Object.entries(codes)) {
// filing it under Scripture would overstate what a reader gets by following the link.
// Audio Scripture gets its own type: it IS Scripture, but a reader choosing a link needs
// to know they are getting a recording to listen to, not a text to read.
if (c.au) add(c.au.n || 'Audio Scripture', 'Audio Scripture', c.au.u, 'Listen in a browser')
// Typed by what the fileset actually carries. A text-only fileset is not audio, and
// calling it that would send someone looking for a recording that is not there.
if (c.au) {
const media = String(c.au.m || 'audio')
add(c.au.n || 'Scripture', /audio/.test(media) ? 'Audio Scripture' : 'Scripture',
c.au.u, media === 'audio' ? 'Listen in a browser' : `In a browser — ${media}`)
}
add('Zume Training', 'Discipleship training', c.z, 'Course in this language')
// The approximate match ships too, with the qualification IN THE SCOPE COLUMN. Leaving
// it out would make the table disagree with the map for these languages, and a reader

View file

@ -38,8 +38,17 @@
* measured on this snapshot, 0 of 2,769 distinct translation names match it. Anything that
* ever does is dropped and reported rather than silently included.
*
* ONE ROW PER LANGUAGE: the most recent audio recording. A language with several recordings
* does not need several links to the same site.
* ONE ROW PER LANGUAGE, AND ONE LINK. A fileset on bible.is is a single page that carries
* whatever media that fileset has, so a language with audio AND text needs one link that
* SAYS it has both, not two chips pointing at the same URL. Rows are therefore ranked by
* how many media they carry, then by recency, and the winner records its media list.
*
* TEXT IS INCLUDED, VIDEO IS NOT. `text_date` is unambiguous — FCBH publishes Bible text on
* bible.is, and 698 codes carry text where this map has no text Scripture at all, reaching
* 2,176 pins and 1.38bn people. `video_date` is left out on purpose: the column does not say
* WHAT the video is (a Luke film, a sign-language edition, something else), and the standing
* rule is that an unclear source is left out rather than guessed into a category. Counting it
* as "film" alongside the JESUS Film would be asserting something nobody here has checked.
*/
import { writeFileSync } from 'node:fs'
import { resolve, dirname } from 'node:path'
@ -88,27 +97,38 @@ if (!Array.isArray(rows) || rows.length < 500) {
const real = (v) => v && v !== 'NULL' ? String(v) : ''
let excluded = 0
let noAudio = 0
let noMedia = 0
let special = 0
const best = {}
for (const r of rows) {
const iso = String(r.iso || '').trim().toLowerCase()
if (iso.length !== 3) continue
if (isSpecialCode(iso)) { special++; continue }
if (!real(r.audio_date)) { noAudio++; continue }
const media = []
if (real(r.audio_date)) media.push('audio')
if (real(r.text_date)) media.push('text')
if (!media.length) { noMedia++; continue }
if (EXCLUDE.test(String(r.bible_name || '')) || EXCLUDE.test(String(r.lang_name || ''))) { excluded++; continue }
const id = String(r.bible_id || '').trim()
if (!/^[A-Z0-9]{4,10}$/.test(id)) continue
const date = real(r.audio_date) || real(r.text_date)
const cur = best[iso]
// most recent recording wins; a language does not need five links to the same site
if (!cur || real(r.audio_date) > cur.date) {
best[iso] = { id, date: real(r.audio_date), name: String(r.bible_name || '').trim(), lang: String(r.lang_name || '').trim() }
// Rank: most media, then AUDIO present, then most recent. The middle term is not
// decoration — without it a newer text-only fileset outranks an audio-only one on date
// alone and the language silently loses its recording, which is the medium an
// oral-preference group actually needs. Measured when it was missing: 3 codes lost audio.
const rank = (m, dt) => [m.length, m.includes('audio') ? 1 : 0, dt]
const a = rank(media, date)
const b = cur ? rank(cur.media, cur.date) : null
const better = !b || a[0] > b[0] || (a[0] === b[0] && (a[1] > b[1] || (a[1] === b[1] && a[2] > b[2])))
if (better) {
best[iso] = { id, date, media, name: String(r.bible_name || '').trim(), lang: String(r.lang_name || '').trim() }
}
}
const codes = {}
for (const [iso, b] of Object.entries(best)) {
codes[iso] = { u: `${SITE}/${b.id}`, n: b.name || 'Audio Scripture', ln: b.lang, id: b.id, date: b.date }
codes[iso] = { u: `${SITE}/${b.id}`, n: b.name || 'Scripture', ln: b.lang, id: b.id, date: b.date, m: b.media.join(', ') }
}
writeFileSync(
@ -119,7 +139,7 @@ writeFileSync(
source: SRC,
generated: new Date().toISOString().slice(0, 10),
shellBytes: shell,
counts: { rows: rows.length, codes: Object.keys(codes).length, noAudio, special, excluded },
counts: { rows: rows.length, codes: Object.keys(codes).length, noMedia, special, excluded, audio: Object.values(codes).filter((c) => /audio/.test(c.m)).length, text: Object.values(codes).filter((c) => /text/.test(c.m)).length },
codes,
},
null,
@ -127,6 +147,6 @@ writeFileSync(
)}\n`,
)
console.log(`FCBH: ${rows.length} rows -> ${Object.keys(codes).length} ISO 639-3 codes with audio Scripture`)
console.log(` skipped: ${noAudio} without an audio date, ${special} on an ISO reserved code, ${excluded} on the doctrine screen`)
console.log(`FCBH: ${rows.length} rows -> ${Object.keys(codes).length} ISO 639-3 codes with Scripture (audio and/or text)`)
console.log(` audio ${Object.values(codes).filter((c) => /audio/.test(c.m)).length}, text ${Object.values(codes).filter((c) => /text/.test(c.m)).length}; skipped ${noMedia} with neither, ${special} on an ISO reserved code, ${excluded} on the doctrine screen`)
console.log(`wrote ${OUT}`)

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

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 it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

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-yhPdoeal+Rf3drVCulcGHidNoj5JeHGYNzoseRg6TxaL5UJN97HPFBsZ2N2COegL" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-WM2ltUkHIshNDE+rZ8oeQqVT/vEg4tNgP680rpNSzusBe0SJKRkp/4U61vbNRoEM" 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-yhPdoeal+Rf3drVCulcGHidNoj5JeHGYNzoseRg6TxaL5UJN97HPFBsZ2N2COegL" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-WM2ltUkHIshNDE+rZ8oeQqVT/vEg4tNgP680rpNSzusBe0SJKRkp/4U61vbNRoEM" 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-yhPdoeal+Rf3drVCulcGHidNoj5JeHGYNzoseRg6TxaL5UJN97HPFBsZ2N2COegL" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-WM2ltUkHIshNDE+rZ8oeQqVT/vEg4tNgP680rpNSzusBe0SJKRkp/4U61vbNRoEM" 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-yhPdoeal+Rf3drVCulcGHidNoj5JeHGYNzoseRg6TxaL5UJN97HPFBsZ2N2COegL" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-WM2ltUkHIshNDE+rZ8oeQqVT/vEg4tNgP680rpNSzusBe0SJKRkp/4U61vbNRoEM" 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-yhPdoeal+Rf3drVCulcGHidNoj5JeHGYNzoseRg6TxaL5UJN97HPFBsZ2N2COegL" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-WM2ltUkHIshNDE+rZ8oeQqVT/vEg4tNgP680rpNSzusBe0SJKRkp/4U61vbNRoEM" 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

@ -556,7 +556,7 @@
"bundle": "gospel-resources",
"scriptUrl": "./gospel-resources/gospel-resources.js",
"output": "doxa-maps/gospel-resources/gospel-resources.js",
"integrity": "sha384-yhPdoeal+Rf3drVCulcGHidNoj5JeHGYNzoseRg6TxaL5UJN97HPFBsZ2N2COegL",
"integrity": "sha384-WM2ltUkHIshNDE+rZ8oeQqVT/vEg4tNgP680rpNSzusBe0SJKRkp/4U61vbNRoEM",
"elements": [
"gospel-resources-map"
],
@ -576,7 +576,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-yhPdoeal+Rf3drVCulcGHidNoj5JeHGYNzoseRg6TxaL5UJN97HPFBsZ2N2COegL\" 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-WM2ltUkHIshNDE+rZ8oeQqVT/vEg4tNgP680rpNSzusBe0SJKRkp/4U61vbNRoEM\" 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>"
}
},
{
@ -590,7 +590,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-yhPdoeal+Rf3drVCulcGHidNoj5JeHGYNzoseRg6TxaL5UJN97HPFBsZ2N2COegL\" 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-WM2ltUkHIshNDE+rZ8oeQqVT/vEg4tNgP680rpNSzusBe0SJKRkp/4U61vbNRoEM\" 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>"
}
},
{
@ -604,7 +604,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-yhPdoeal+Rf3drVCulcGHidNoj5JeHGYNzoseRg6TxaL5UJN97HPFBsZ2N2COegL\" 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-WM2ltUkHIshNDE+rZ8oeQqVT/vEg4tNgP680rpNSzusBe0SJKRkp/4U61vbNRoEM\" 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>"
}
},
{
@ -618,7 +618,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-yhPdoeal+Rf3drVCulcGHidNoj5JeHGYNzoseRg6TxaL5UJN97HPFBsZ2N2COegL\" 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-WM2ltUkHIshNDE+rZ8oeQqVT/vEg4tNgP680rpNSzusBe0SJKRkp/4U61vbNRoEM\" 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>"
}
},
{
@ -632,7 +632,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-yhPdoeal+Rf3drVCulcGHidNoj5JeHGYNzoseRg6TxaL5UJN97HPFBsZ2N2COegL\" 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-WM2ltUkHIshNDE+rZ8oeQqVT/vEg4tNgP680rpNSzusBe0SJKRkp/4U61vbNRoEM\" 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>"
}
}
]