Door43 spelled 32 major languages with two letters, so 2.87bn people saw none of it
The Door43 fetcher kept only 3-letter codes and dropped 2-letter ones on the grounds that turning one into ISO 639-3 would be a guess. The caution was right and the conclusion was wrong: ISO 639-3 publishes the correspondence itself, in the Part1 column of iso-639-3.tab. The file is now fetched rather than transcribed, so it cannot go stale, and the run aborts if it comes back with fewer than 150 pairs. Measured cost of the old behaviour: 32 languages spoken by 2,576 pins - Bengali, Hindi, Spanish, Amharic, Hausa, English and more - carried Scripture and film but no Door43 resource at all, purely over a spelling. Door43 reach goes from 169 codes and 1,051 pins to 208 codes and 3,627 pins, 3.58bn people. Table rows 226 -> 391. ONE EXCLUSION, AND IT IS LOAD-BEARING: a tag with an '-x-' private-use subtag is skipped on this path. Door43 publishes el-x-koine, Koine Greek, whose base 'el' maps to 'ell' - Modern Greek, which 13 people groups on this map speak. Folding it in would have handed those 13 groups a Koine Greek text as though it were their own language. Region and script subtags (es-419, pt-br, sr-latn, ur-deva, zh-hant) are not private use and are the same language, so they still fold to the base. Verified: ell is absent from the index. Fixed a self-erasing bug in the previous change. Dropping a dead link removed it from the corpus, so the next verification run never saw it, so the next build put it back - measured, both links came straight back and REAL URL returned to 8,922. The verification table is now a RECORD, not a snapshot: it carries forward every URL a previous run proved broken and keeps re-testing them, which is also what lets a link the publisher later repairs come back on its own. Proven by dropping them and re-running: "re-testing 2 URL(s) a previous run recorded broken", still broken, build now stable across two full cycles. Clause K's 95% coverage floor is gone, because that floor is exactly how this hid: two missing URLs out of 3,768 is 99.9%. Every shipped URL must now appear in the record. Poison self-test 11/11. All 3,768 links re-verified: 3,761 live, 5 uncheckable, 2 broken and dropped. Also fixed the chip overflow this change caused - a Door43 entry can be "Aligned Bible (translationCore-Create-BCS) - Door43 - Portions of both Testaments", which ran off the edge of a 330px sheet unreadable. Long chips wrap now. Screenshot read: Hindi shows seven verified Door43 resources, all inside the panel, where it read "none found".
This commit is contained in:
parent
101653e3fd
commit
2bf4001d7e
24 changed files with 19648 additions and 13533 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
|
|
@ -190,10 +190,14 @@ if (verif && verif.links) {
|
|||
if (v.za && v.za.u) shipped.add(v.za.u)
|
||||
for (const d of v.d || []) if (d.u) shipped.add(d.u)
|
||||
}
|
||||
const known = [...shipped].filter((u) => V[u])
|
||||
const cover = shipped.size ? known.length / shipped.size : 0
|
||||
if (cover < 0.95) {
|
||||
add('K', `only ${known.length}/${shipped.size} shipped URL(s) (${(100 * cover).toFixed(1)}%) appear in the verification table — below the 95% floor`)
|
||||
// EVERY shipped URL must be in the record, not 95% of them. The floor was set at 95%
|
||||
// and that is exactly how two known-dead links got back in: dropping them removed them
|
||||
// from the corpus, the next verification run never saw them, and 2 missing out of 3,768
|
||||
// is 99.9% — comfortably above a 95% floor and completely wrong. "Verify before you
|
||||
// ship it" does not have a tolerance.
|
||||
const unknownToRecord = [...shipped].filter((u) => !V[u])
|
||||
if (unknownToRecord.length) {
|
||||
add('K', `${unknownToRecord.length} shipped URL(s) appear in no verification record (e.g. ${unknownToRecord[0]}) — run scripts/verify-gospel-links.mjs`)
|
||||
}
|
||||
const dead = [...shipped].filter((u) => V[u] && V[u].state === 'broken')
|
||||
if (dead.length) add('K', `${dead.length} shipped URL(s) are recorded BROKEN and must not ship (e.g. ${dead[0]})`)
|
||||
|
|
@ -229,4 +233,4 @@ console.log(' C reach recounted off the pins D every resourced code is
|
|||
console.log(' E no table URL the pins do not hold F pin tiers match their code\'s URLs')
|
||||
console.log(' G no plain-http URL H no story set typed as Scripture')
|
||||
console.log(' I row type agrees with its host J approximate never reads as confirmed')
|
||||
console.log(' K links are verified, and none known-broken ships')
|
||||
console.log(' K every shipped link is verified, and none known-broken ships')
|
||||
|
|
|
|||
|
|
@ -775,8 +775,13 @@ useShadowStyles(
|
|||
'padding:1px 5px;border-radius:4px;background:rgba(0,0,0,.09);margin-left:5px;vertical-align:1px}' +
|
||||
'.is-dark .gm-code{background:rgba(255,255,255,.12)}' +
|
||||
'.gm-chips{display:flex;flex-wrap:wrap;gap:5px;margin-top:5px}' +
|
||||
'.gm-chip{font-size:10px;padding:2px 7px;border-radius:999px;white-space:nowrap;' +
|
||||
// nowrap keeps the short status chips ("Film - link checked") on one line, but a Door43
|
||||
// entry can be "Aligned Bible (translationCore-Create-BCS) - Door43 - Portions of both",
|
||||
// which simply ran off the edge of a 330px sheet and could not be read at all. Long chips
|
||||
// wrap instead; max-width keeps them inside the panel either way.
|
||||
'.gm-chip{font-size:10px;padding:2px 7px;border-radius:999px;white-space:nowrap;max-width:100%;' +
|
||||
'background:rgba(0,0,0,.06);text-decoration:none;color:inherit;border:1px solid transparent}' +
|
||||
'.gm-chip.wrap{white-space:normal;overflow-wrap:anywhere;line-height:1.35}' +
|
||||
'.is-dark .gm-chip{background:rgba(255,255,255,.08)}' +
|
||||
'.gm-chip.ok{background:rgba(16,185,129,.16);border-color:rgba(16,185,129,.35)}' +
|
||||
'.gm-chip.bad{background:rgba(180,35,24,.16);border-color:rgba(180,35,24,.38)}' +
|
||||
|
|
@ -976,7 +981,7 @@ useShadowStyles(
|
|||
<!-- Door43 entries are real published repos, so they ship as real links. The
|
||||
SUBJECT is shown verbatim: "Open Bible Stories" is 50 illustrated narratives,
|
||||
not a Bible, and calling it Scripture would be the one lie that matters here. -->
|
||||
<a v-for="d in selectedGroup.door43" :key="d.u" class="gm-chip ok"
|
||||
<a v-for="d in selectedGroup.door43" :key="d.u" class="gm-chip ok wrap"
|
||||
:href="d.u" target="_blank" rel="noopener noreferrer"
|
||||
:title="d.s + ' — published on Door43 (unfoldingWord), open licence'">
|
||||
{{ /^Open Bible Stories/.test(d.s) ? d.s.replace('Open Bible Stories', 'Bible Stories') : d.s }} · Door43<template v-if="d.sc"> · {{ d.sc }}</template>
|
||||
|
|
|
|||
|
|
@ -19,10 +19,27 @@
|
|||
* telling a reader they have Scripture when they have a story set is the dishonesty that
|
||||
* matters most on this map.
|
||||
*
|
||||
* CODES: only 3-letter ISO 639-3 is kept. Door43 also emits 2-letter (639-1) and
|
||||
* region-suffixed tags ('ar-xzn'); the suffix is stripped, and a 2-letter tag is DROPPED
|
||||
* rather than guessed into a 3-letter code. A wrong language match ships a real link to the
|
||||
* wrong people — worse than no link.
|
||||
* CODES: 3-letter ISO 639-3 is kept as-is, and region/script suffixes are stripped
|
||||
* ('ar-xzn' -> 'ara'). Door43 ALSO labels its biggest languages with 2-letter 639-1 tags,
|
||||
* and those used to be dropped here on the grounds that turning one into a 3-letter code
|
||||
* would be a guess. The caution was right and the conclusion was wrong: ISO 639-3 itself
|
||||
* publishes the correspondence, in the Part1 column of iso-639-3.tab, so this is a
|
||||
* standards-defined mapping and not an inference. That file is fetched below rather than
|
||||
* transcribed, so it cannot quietly go stale.
|
||||
*
|
||||
* MEASURED COST OF THE OLD BEHAVIOUR: 32 languages spoken by 2,576 people-group pins —
|
||||
* 2.87bn people, including Bengali, Hindi, Spanish, Amharic, Hausa and English — carried
|
||||
* Scripture and film but NO Door43 resource, purely because Door43 spelled their code with
|
||||
* two letters instead of three.
|
||||
*
|
||||
* ONE EXCLUSION, AND IT IS LOAD-BEARING: a tag carrying an '-x-' PRIVATE-USE subtag is
|
||||
* skipped on this path. Private use is where a publisher marks something the standard does
|
||||
* not cover, and that is exactly where the base code stops being the right language.
|
||||
* Door43 publishes 'el-x-koine' — Koine Greek. Its base 'el' maps to 'ell', Modern Greek,
|
||||
* which 13 people groups on this map speak. Folding it in would have shipped a Koine Greek
|
||||
* text to 13 groups as though it were their own language. Region and script subtags
|
||||
* ('es-419', 'pt-br', 'sr-latn', 'ur-deva', 'zh-hant') are NOT private use and are the same
|
||||
* language, so they still fold to the base.
|
||||
*/
|
||||
import { writeFileSync } from 'node:fs'
|
||||
import { resolve, dirname } from 'node:path'
|
||||
|
|
@ -33,6 +50,39 @@ const OUT = resolve(HERE, '../../..', 'data/tables/door43-index.json')
|
|||
const UA = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36'
|
||||
const SUBJECTS = ['Open Bible Stories', 'Bible', 'Aligned Bible']
|
||||
const API = 'https://git.door43.org/api/v1/catalog/search'
|
||||
const ISO_TAB = 'https://iso639-3.sil.org/sites/iso639-3/files/downloads/iso-639-3.tab'
|
||||
|
||||
// ISO 639-1 -> ISO 639-3, straight from SIL's own table. Macrolanguage rows are kept: the
|
||||
// resource genuinely IS in that macrolanguage, and a macro code no pin speaks simply joins
|
||||
// to nothing rather than to the wrong people.
|
||||
const isoRes = await fetch(ISO_TAB, { headers: { 'User-Agent': UA } })
|
||||
if (!isoRes.ok) throw new Error(`iso-639-3.tab: HTTP ${isoRes.status}`)
|
||||
const P1 = {}
|
||||
for (const line of (await isoRes.text()).trim().split('\n').slice(1)) {
|
||||
const f = line.split('\t')
|
||||
const id = (f[0] || '').trim()
|
||||
const part1 = (f[3] || '').trim()
|
||||
if (id.length === 3 && part1.length === 2) P1[part1] = id
|
||||
}
|
||||
if (Object.keys(P1).length < 150) {
|
||||
throw new Error(`iso-639-3.tab gave only ${Object.keys(P1).length} Part1 pairs — refusing to run on a truncated table`)
|
||||
}
|
||||
console.log(`iso-639-3.tab: ${Object.keys(P1).length} ISO 639-1 -> 639-3 pairs`)
|
||||
|
||||
let viaPart1 = 0
|
||||
let skippedPrivate = 0
|
||||
/** Resolve a Door43 language tag to an ISO 639-3 code, or '' if it must not be used. */
|
||||
const toIso3 = (tag) => {
|
||||
const t = String(tag || '')
|
||||
const base = t.split('-')[0]
|
||||
if (base.length === 3) return base
|
||||
if (base.length !== 2) return ''
|
||||
// '-x-' is private use: the base code is not reliably the same language. See the header.
|
||||
if (/-x-/i.test(t)) { skippedPrivate++; return '' }
|
||||
const m = P1[base]
|
||||
if (m) viaPart1++
|
||||
return m || ''
|
||||
}
|
||||
|
||||
// ISO 639-3 RESERVES these: und = undetermined, mul = multiple, mis = uncoded, zxx =
|
||||
// no linguistic content, and qaa-qtz are private-use. They are not languages, so a
|
||||
|
|
@ -74,8 +124,8 @@ for (const subject of SUBJECTS) {
|
|||
const { data } = await res.json()
|
||||
sources.push({ subject, url, entries: data.length })
|
||||
for (const r of data) {
|
||||
const code = String(r.language || '').split('-')[0]
|
||||
if (code.length !== 3 || isSpecialCode(code)) continue
|
||||
const code = toIso3(r.language)
|
||||
if (!code || isSpecialCode(code)) continue
|
||||
const href = r.repo?.html_url
|
||||
if (!href) continue
|
||||
const cur = index[code] || (index[code] = { title: r.language_title || '', items: [] })
|
||||
|
|
@ -100,3 +150,4 @@ const out = {
|
|||
}
|
||||
writeFileSync(OUT, JSON.stringify(out, null, 1))
|
||||
console.log(`\n${Object.keys(index).length} ISO 639-3 codes -> ${OUT}`)
|
||||
console.log(`${viaPart1} entr(ies) joined through an ISO 639-1 tag; ${skippedPrivate} private-use tag(s) skipped`)
|
||||
|
|
|
|||
|
|
@ -54,6 +54,17 @@
|
|||
* green; a positive control that starts failing is how a network fault gets written down as
|
||||
* "every link is broken".
|
||||
*
|
||||
* ═══ THE TABLE IS A RECORD, NOT A SNAPSHOT ══════════════════════════════════════════════
|
||||
* A dead link is dropped from the index by the builder, which removes it from the corpus —
|
||||
* so a verifier that only ever checks "what is shipped today" forgets it, and the NEXT build
|
||||
* finds nothing recorded against it and puts it straight back. Measured: both links this
|
||||
* pass killed were restored by the very next build. The drop was self-erasing, and the
|
||||
* coverage floor could not see it because two unrecorded URLs out of 3,768 is 99.9%.
|
||||
*
|
||||
* So the corpus checked here is the shipped URLs PLUS every URL a previous run recorded
|
||||
* broken. Those keep being re-tested, which is also what lets a link the publisher later
|
||||
* fixes come back on its own rather than staying condemned forever.
|
||||
*
|
||||
* WHAT `verified` MEANS HERE, EXACTLY: the URL answered 200 to a HEAD that followed
|
||||
* redirects. It does NOT mean anyone read the page, and it does not re-check that the link
|
||||
* points at the right LANGUAGE — that join is established when the index is built, from the
|
||||
|
|
@ -141,6 +152,17 @@ for (const v of Object.values(pins.codes)) {
|
|||
if (v.za && v.za.u) urls.add(v.za.u)
|
||||
for (const d of v.d || []) if (d.u) urls.add(d.u)
|
||||
}
|
||||
// Carry forward everything a previous run proved dead, so dropping a link cannot erase the
|
||||
// evidence that it is dead. See the header.
|
||||
let carried = 0
|
||||
try {
|
||||
const prev = JSON.parse(readFileSync(OUT, 'utf8'))
|
||||
for (const [u, r] of Object.entries(prev.links || {})) {
|
||||
if (r && r.state === 'broken' && !urls.has(u)) { urls.add(u); carried++ }
|
||||
}
|
||||
} catch { /* no previous table: nothing to carry */ }
|
||||
if (carried) console.log(`VERIFY-LINKS: re-testing ${carried} URL(s) a previous run recorded broken, though nothing ships them now.`)
|
||||
|
||||
let list = [...urls]
|
||||
if (LIMIT) list = list.slice(0, LIMIT)
|
||||
if (!list.length) {
|
||||
|
|
@ -187,7 +209,7 @@ writeFileSync(
|
|||
unknown: 'could not be checked — never read as either working or broken',
|
||||
},
|
||||
controls,
|
||||
summary: { checked: list.length, ...byState },
|
||||
summary: { checked: list.length, carriedForward: carried, ...byState },
|
||||
byHost,
|
||||
},
|
||||
links,
|
||||
|
|
|
|||
1354
public/assets/tables/door43-index.json
vendored
1354
public/assets/tables/door43-index.json
vendored
File diff suppressed because it is too large
Load diff
9657
public/assets/tables/gospel-link-verification.json
vendored
9657
public/assets/tables/gospel-link-verification.json
vendored
File diff suppressed because it is too large
Load diff
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
1354
public/doxa-maps/assets/tables/door43-index.json
generated
1354
public/doxa-maps/assets/tables/door43-index.json
generated
File diff suppressed because it is too large
Load diff
9657
public/doxa-maps/assets/tables/gospel-link-verification.json
generated
9657
public/doxa-maps/assets/tables/gospel-link-verification.json
generated
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
|
|
@ -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-O7KDP8HK7zJKDP03y1dsCWmSYuz+f4VI3ucefjjz5pYQGuHP/Q3Et4lwBAVrOmxx" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-PUYDrkuiWM04qmZPfVvPZMFL+G5e7jGKiX6c08iNbf1kLc6vRkyGLhmzw90CRBX8" 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-O7KDP8HK7zJKDP03y1dsCWmSYuz+f4VI3ucefjjz5pYQGuHP/Q3Et4lwBAVrOmxx" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-PUYDrkuiWM04qmZPfVvPZMFL+G5e7jGKiX6c08iNbf1kLc6vRkyGLhmzw90CRBX8" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -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-O7KDP8HK7zJKDP03y1dsCWmSYuz+f4VI3ucefjjz5pYQGuHP/Q3Et4lwBAVrOmxx" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-PUYDrkuiWM04qmZPfVvPZMFL+G5e7jGKiX6c08iNbf1kLc6vRkyGLhmzw90CRBX8" 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-O7KDP8HK7zJKDP03y1dsCWmSYuz+f4VI3ucefjjz5pYQGuHP/Q3Et4lwBAVrOmxx" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-PUYDrkuiWM04qmZPfVvPZMFL+G5e7jGKiX6c08iNbf1kLc6vRkyGLhmzw90CRBX8" 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-O7KDP8HK7zJKDP03y1dsCWmSYuz+f4VI3ucefjjz5pYQGuHP/Q3Et4lwBAVrOmxx" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-PUYDrkuiWM04qmZPfVvPZMFL+G5e7jGKiX6c08iNbf1kLc6vRkyGLhmzw90CRBX8" 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
12
public/doxa-maps/manifest.json
generated
12
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-O7KDP8HK7zJKDP03y1dsCWmSYuz+f4VI3ucefjjz5pYQGuHP/Q3Et4lwBAVrOmxx",
|
||||
"integrity": "sha384-PUYDrkuiWM04qmZPfVvPZMFL+G5e7jGKiX6c08iNbf1kLc6vRkyGLhmzw90CRBX8",
|
||||
"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-O7KDP8HK7zJKDP03y1dsCWmSYuz+f4VI3ucefjjz5pYQGuHP/Q3Et4lwBAVrOmxx\" 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-PUYDrkuiWM04qmZPfVvPZMFL+G5e7jGKiX6c08iNbf1kLc6vRkyGLhmzw90CRBX8\" 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-O7KDP8HK7zJKDP03y1dsCWmSYuz+f4VI3ucefjjz5pYQGuHP/Q3Et4lwBAVrOmxx\" 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-PUYDrkuiWM04qmZPfVvPZMFL+G5e7jGKiX6c08iNbf1kLc6vRkyGLhmzw90CRBX8\" 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-O7KDP8HK7zJKDP03y1dsCWmSYuz+f4VI3ucefjjz5pYQGuHP/Q3Et4lwBAVrOmxx\" 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-PUYDrkuiWM04qmZPfVvPZMFL+G5e7jGKiX6c08iNbf1kLc6vRkyGLhmzw90CRBX8\" 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-O7KDP8HK7zJKDP03y1dsCWmSYuz+f4VI3ucefjjz5pYQGuHP/Q3Et4lwBAVrOmxx\" 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-PUYDrkuiWM04qmZPfVvPZMFL+G5e7jGKiX6c08iNbf1kLc6vRkyGLhmzw90CRBX8\" 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-O7KDP8HK7zJKDP03y1dsCWmSYuz+f4VI3ucefjjz5pYQGuHP/Q3Et4lwBAVrOmxx\" 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-PUYDrkuiWM04qmZPfVvPZMFL+G5e7jGKiX6c08iNbf1kLc6vRkyGLhmzw90CRBX8\" 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