Update from source 1b397dc3
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions

This commit is contained in:
Doxa Maps 2026-09-27 19:24:03 +00:00
parent 5059092ff0
commit 9b30128c68
104 changed files with 5883 additions and 398 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View file

@ -191,6 +191,8 @@ and a change here can break other maps.
`import … from '@map/composables/useSelectionCamera.js'`
- **useShadowStyles** — useShadowStyles.js — Shadow DOM Style Injection
`import … from '@map/composables/useShadowStyles.js'`
- **useShareableView** — useShareableView — a dashboard's view state in the address bar, so a narrowed table can be SENT.
`import … from '@map/composables/useShareableView.js'`
- **useSharedMapToken** — useSharedMapToken.js — ONE page, ONE map token, shared by every element on it.
`import … from '@map/composables/useSharedMapToken.js'`
- **useTextHighlight** — highlightRanges(value, indices) — wrap each matched index range in

View file

@ -86,6 +86,7 @@ const manifest = JSON.parse(readFileSync(join(REPO, 'public', TREE_NAME, 'manife
const published = new Set(manifest.bundles.map((b) => b.bundle))
const fails = []
const notes = []
const rows = []
for (const name of readdirSync(DESIGNS)) {
const dir = join(DESIGNS, name)
@ -136,6 +137,75 @@ if (debt.length) {
+ debt.map((d) => d.name).join(', '))
}
// ── THE SHARE LINK CARRIES THE WHOLE VIEW, INCLUDING THE TYPED SEARCH ─────────────────────────
// The hash carried filterSet only, so a table narrowed by TYPING reopened with MORE ROWS than the
// sender saw — silently, since the recipient had no way to know their set was wider. For population
// data passed between teams that is worse than a link that plainly fails.
// DRIVEN, not asserted: the two pure functions are lifted from the kit source and RUN, so the
// guarantee is measured. Proving a string round-trips needs no browser.
{
const SRC = 'library/composables/useShareableView.js'
let src = ''
try { src = readFileSync(resolve(REPO, SRC), 'utf8') } catch (_) { src = '' }
if (!src) fails.push(`SHARE-VIEW ${SRC} is missing — no dashboard can produce a shareable view.`)
else {
const pure = src.slice(src.indexOf('const slugify'), src.indexOf('export function useShareableView'))
let serializeView, parseView, serializeQuery, parseQuery
try {
;({ serializeView, parseView, serializeQuery, parseQuery } = new Function(`${pure.replace(/export /g, '')}; return { serializeView, parseView, serializeQuery, parseQuery }`)())
} catch (e) {
fails.push(`SHARE-VIEW could not lift serializeView/parseView from ${SRC} (${e.message}) — keep them plain top-level functions so this stays measurable.`)
}
if (serializeView && parseView) {
const L = (k) => ({ affinity_bloc: 'Malay Peoples' }[k])
const eq = (what, got, want) => { if (JSON.stringify(got) !== JSON.stringify(want)) fails.push(`SHARE-VIEW ${what} — got ${JSON.stringify(got)}, want ${JSON.stringify(want)}`) }
// An empty search box must write the hash the old code wrote, byte for byte, so every link
// already sitting in a teammate's notes keeps working and keeps looking the same.
eq('an empty search still writes the old format', serializeView({ religion_family: 'Hinduism' }, '', { labelFor: L }), '#f=religion_family:Hinduism')
eq('the slug stays display-only', serializeView({ affinity_bloc: 'A008' }, '', { labelFor: L }), '#f=affinity_bloc:A008*malay-peoples')
eq('a multi-value key still drops the slug', serializeView({ religion_family: ['Hinduism', 'Islam'] }, ''), '#f=religion_family:Hinduism,Islam')
// The defect this arm exists for.
eq('the typed search reaches the link', serializeView({}, 'bhutan'), '#f=&q=bhutan')
eq('and comes back', parseView(serializeView({ religion_family: 'Hinduism' }, 'bhutan', { labelFor: L })), { filters: { religion_family: 'Hinduism' }, search: 'bhutan' })
// Delimiters that occur inside real values: a people group with a comma, a search with an `&`.
eq('a literal comma in a value survives', parseView(serializeView({ language: ['Arabic, Sudanese'] }, '')).filters, { language: 'Arabic, Sudanese' })
eq('an ampersand in the search survives', parseView(serializeView({}, 'rice & beans')).search, 'rice & beans')
// Links that already exist must keep opening.
eq('a legacy JSON hash still restores', parseView('#f=' + encodeURIComponent(JSON.stringify({ affinity_bloc: 'A008' }))).filters, { affinity_bloc: 'A008' })
eq('an old link with no q restores no search', parseView('#f=religion_family:Hinduism').search, '')
// QUERY MODE, requested by go-int: its board already shares as ?access=…&band=…, restored before
// first render, and writes only on its own leaves so a partner's address bar is never touched. A
// hash-only composable would have given that board TWO URL states instead of replacing its glue.
// The host-param case is the one that matters: writing must not eat a query the page already owns.
eq('query writes one param per facet', serializeQuery({ access: 'low', band: '2g' }, ''), '?access=low&band=2g')
eq('query preserves a host param', serializeQuery({ access: 'low' }, '', '?utm_source=partner'), '?utm_source=partner&access=low')
eq('query replaces its own stale param', serializeQuery({ access: 'high' }, '', '?access=low&utm=x'), '?utm=x&access=high')
eq('query round-trips filters and search', parseQuery(serializeQuery({ access: 'low', band: ['2g', '3g'] }, 'bhutan'), ['access', 'band']), { filters: { access: 'low', band: ['2g', '3g'] }, search: 'bhutan' })
eq('query reads only declared facet keys', parseQuery('?access=low&panel=map', ['access']).filters, { access: 'low' })
eq('query keeps a comma inside a value', parseQuery(serializeQuery({ language: ['Arabic, Sudanese'] }, ''), ['language']).filters, { language: 'Arabic, Sudanese' })
// ★ AN ALIAS MAP, because a param name already published cannot be renamed. go-int has shared
// ?access= against a bus key of access_level; insisting the two match would have renamed every
// param on adoption and broken every link already sitting on a partner page — the exact harm this
// card exists to prevent, delivered by the thing meant to prevent it. Driven with its real names.
const ALIAS = { access: 'access_level', app: 'messaging' }
eq('alias writes the published param name', serializeQuery({ access_level: 'low', messaging: 'sms' }, '', '', { facetKeys: ALIAS }), '?access=low&app=sms')
eq('alias reads an already-shared link', parseQuery('?access=low&app=sms', ALIAS), { filters: { access_level: 'low', messaging: 'sms' }, search: '' })
eq('an undeclared bus key keeps its own name', serializeQuery({ country: 'BT' }, '', '', { facetKeys: ALIAS }), '?country=BT')
eq('a host param survives under an alias map', serializeQuery({ access_level: 'low' }, '', '?utm=x', { facetKeys: ALIAS }), '?utm=x&access=low')
// ★ BOTH SEPARATORS ON READ, ONE ON WRITE. go-int's board has always written band=yes|partial and
// those links are on partner pages; splitting only on ',' read that back as the single value
// "yes|partial" and matched no row, so adopting this composable would have broken every multi-value
// link they had already shared. Reserving `|` on write is what makes accepting it on read free.
eq('an already-shared | link restores', parseQuery('?band=yes|partial', ['band']).filters, { band: ['yes', 'partial'] })
eq('mixed separators in one link', parseQuery('?band=yes|partial&country=IND,CHN', ['band', 'country']).filters, { band: ['yes', 'partial'], country: ['IND', 'CHN'] })
eq('we still write one canonical separator', serializeQuery({ band: ['yes', 'partial'] }, '', '', { facetKeys: ['band'] }), '?band=yes,partial')
eq('a literal | inside a value is escaped, not split', parseQuery(serializeQuery({ x: 'a|b' }, '', '', { facetKeys: ['x'] }), ['x']).filters, { x: 'a|b' })
if (!fails.some((f) => f.startsWith('SHARE-VIEW'))) notes.push('share link: filters AND the typed search round-trip in BOTH hash and query mode; old links, legacy JSON and a host page\'s own query all survive')
}
}
}
for (const n of notes) console.log(' · ' + n)
if (fails.length) {
console.error(`\nSHARE-POLICY: FAIL — ${fails.length} problem(s)`)
for (const f of fails) console.error(' - ' + f)

View file

@ -74,6 +74,12 @@ export const EXPORT_FIELDS = [
* It is applied to the COMMENT LINE ONLY — never to a data column (see buildCsv).
*/
export function useCsvExport({ rowStore, rows, selectionSet, filterSet, FACET_ACC, dataOpts = {}, labelFor = null,
// ★ THE TYPED SEARCH NARROWS THE EXPORT TOO. Optional rows->rows transform, so a caller that does not
// pass it behaves exactly as before. Without it the export ignored the search box completely: with no
// facet filter and no selection, pickRows() fell through to EVERY row, so a reader who typed "Bhutan"
// and saw 13 rows downloaded all 2,107. Not applied to an explicit selection — picking rows by hand
// outranks a text filter, which is the documented priority model, and the reader can see what they picked.
searchFilter = null,
// What this export calls itself, and who to credit for the data. Defaults keep every existing
// caller's file identical to the byte.
exportLabel = 'Research Dashboard', sources = '',
@ -102,7 +108,19 @@ export function useCsvExport({ rowStore, rows, selectionSet, filterSet, FACET_AC
// is the config-level spelling of the same thing; go-int flagged the pair, and they should agree.
keyOf = (r) => r && (r.slug || r.id),
// Defaulted so a caller that predates D1 keeps working exactly as before rather than throwing.
rowMatches = (r, ACC) => Object.keys(filterSet).every((k) => { const a = ACC[k]; return a ? a(r) === filterSet[k] : true }) }) {
// ★ THE DEFAULT IS ARRAY-AWARE, because it is the LIVE path, not a legacy shim. A filterSet value is
// an array once two values are selected (spec D1), and `a(r) === ['Hinduism','Islam']` is false for
// every row — so the export silently produced a file matching NOTHING the moment a reader picked a
// second value. Measured: DashboardDataTable and DashboardDetailDrawer both rely on this default
// (only useDashboardShell passes its own), so two of the three live callers exported an empty set.
// OR within a key, the same rule bus.rowMatchesFilters applies, so the CSV agrees with the screen.
// Single-value behaviour is unchanged: one value takes exactly the path it always did.
rowMatches = (r, ACC) => Object.keys(filterSet).every((k) => {
const a = ACC[k]
if (!a) return true
const want = filterSet[k]
return Array.isArray(want) ? want.some((v) => a(r) === v) : a(r) === want
}) }) {
// slug -> wide API record, filled by the lazy all-fields fetch below.
let wideStore = null
let widePromise = null
@ -148,6 +166,7 @@ export function useCsvExport({ rowStore, rows, selectionSet, filterSet, FACET_AC
}
function pickRows() {
const narrow = (list) => (typeof searchFilter === 'function' ? searchFilter(list) : list)
if (selectionSet && selectionSet.size) {
return [...selectionSet].map((s) => rowStore.value.get(s)).filter(Boolean)
}
@ -156,9 +175,9 @@ export function useCsvExport({ rowStore, rows, selectionSet, filterSet, FACET_AC
// The bus's own predicate, handed in by the shell — the exporter must select the same rows
// the reader is looking at, and a private copy of the rule is how an export starts
// disagreeing with the screen it was taken from.
return (rows.value || []).filter((r) => rowMatches(r, FACET_ACC))
return narrow((rows.value || []).filter((r) => rowMatches(r, FACET_ACC)))
}
return rows.value || []
return narrow(rows.value || [])
}
function scopeLabel() {
if (selectionSet && selectionSet.size) return `selection (${selectionSet.size})`

View file

@ -0,0 +1,206 @@
/**
* useShareableView — a dashboard's view state in the address bar, so a narrowed table can be SENT.
*
* The persona this exists for: a researcher narrows the table to the peoples they are working on, then
* gives that exact view to a teammate or reopens it on a phone in the field. A link is the only part of
* the product a person copies, pastes and reads, so the format is legible on purpose:
*
* #f=affinity_bloc:A008*malay-peoples;religion_family:Hinduism&q=bhutan
*
* ── LIFTED FROM research-dashboard, AND WHY IT IS HERE ────────────────────────────────────────
* This was a PRIVATE function inside plugin-designs/research-dashboard/src/composables/
* useDashboardShell.js, so exactly one dashboard in the fleet could produce a shareable link. Every
* other dashboard built on the kit — go-int's board today, the next one after it — had no way to share
* a view at all. Nothing about the logic was research-specific; only its address was.
*
* ── THE FORMAT, AND THE TWO DECISIONS INSIDE IT (carried over, not reinvented) ─────────────────
* CODE-CANONICAL, SLUG DISPLAY-ONLY (card BUG-SHARE-URL-LEAKS-RAW-CODES). The old hash was
* URL-encoded JSON — #f=%7B%22affinity_bloc%22%3A%22A008%22%7D — unreadable twice over: JSON
* punctuation percent-escaped, and the value a bare API code. Now the CODE is canonical and `*slug` is
* appended from labelFor() at share time and STRIPPED on parse, so links stay locale-independent and
* survive label renames. A MULTI-VALUE key drops the slug entirely: there is no honest human name for
* "these twenty-two codes", and inventing one would put a label in a URL that does not describe what
* the URL selects.
*
* ── THE SEARCH TERM IS IN THE LINK, WHICH IT WAS NOT BEFORE ───────────────────────────────────
* The hash carried filterSet ONLY. Typing in the search box is the commonest way this persona narrows a
* table, so a shared link reopened with MORE ROWS than the sender was looking at — and silently, since
* the recipient had no way to know their set was wider. For population data passed between teams that
* is worse than a link that plainly fails. `q` is appended only when a term is present, so a dashboard
* with an empty search box produces byte-identically the hash it produced before.
*
* @param {object} bus a selection bus (filterSet, setFilter, searchTerm, setSearch)
* @param {object} [options]
* @param {(facetKey:string, value:any)=>string} [options.labelFor] supplies the display-only slug.
* Injected, never imported: the label tables are the consuming dashboard's, not the kit's.
* @param {string} [options.hashKey='f'] the filter param name, for a host that already owns `f`
* @param {string} [options.searchKey='q'] the search param name, same reason
* @param {'hash'|'query'} [options.mode='hash'] where the state lives. 'query' writes one param per
* facet (?access=…&band=…&q=…) instead of a single #f= blob — go-int's board already shares that
* way, restored before first render, and a composable that only spoke hash would have given it
* TWO URL states rather than replacing its glue. Requested by the consumer, not invented here.
* @param {boolean} [options.write=true] whether to WRITE the URL at all. go-int writes only on its own
* leaves (profile-config urlState:'query') so a partner's address bar is never touched; reading
* stays unconditional, because restoring a link someone sent must work everywhere.
*/
import { watch, onMounted } from 'vue'
const slugify = (s) => String(s ?? '').toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '').slice(0, 40)
// Minimal escaping, maximal legibility: reserve our delimiters + %, keep spaces as `+` (the
// x-www-form-urlencoded convention), leave everything else — including unicode — alone. `,` joins the
// values of ONE key (OR-within-key), and is reserved for the same reason `;` `:` `*` are: a delimiter
// that can also occur inside a value is not a delimiter. `&` joins params, so it is reserved too —
// without that, a search for "rice & beans" would truncate the link at the ampersand.
// `|` joins as well as `,` — see LIST_SEP below — so it is reserved too. A delimiter that can also occur
// inside a value is not a delimiter, and that rule has already cost this tree once: the language-code link
// joined on `,` until 120 of 864 language labels turned out to contain one.
const escapeValue = (s) => String(s).replace(/[%;:*+,&|]/g, (c) => '%' + c.charCodeAt(0).toString(16).toUpperCase()).replace(/ /g, '+')
/**
* ★ READ BOTH `,` AND `|`; WRITE `,`. go-int's board has always written `band=yes|partial` and
* `country=IND|CHN`, and those links are on partner pages now. Splitting only on `,` read that back as the
* single value "yes|partial", which matches no row — so adopting this composable would have broken every
* multi-value link they had already shared. Accepting BOTH separators on read costs nothing: escapeValue
* percent-encodes a literal `,` or `|` inside a value before any join, so every separator still present in
* a URL is genuinely a separator.
* Writing stays `,` so there is ONE canonical form going forward rather than two dialects to reason about.
* The one case this does not cover, stated rather than papered over: an OLD link whose VALUE contained a
* literal `|` written before `|` was reserved would now be split. No facet vocabulary in the tree contains
* one (checked religion.js and the region/language codes), and go-int confirms `|` cannot occur in a facet
* code, so the exposure is a value shape that does not exist rather than one we are choosing to risk.
*/
const LIST_SEP = /[,|]/
const unescapeValue = (s) => { try { return decodeURIComponent(String(s).replace(/\+/g, '%20')) } catch (_) { return String(s).replace(/\+/g, ' ') } }
/** Serialize a view to a hash string. Exported so a gate can drive it without a browser. */
export function serializeView(filterSet, searchTerm, { labelFor, hashKey = 'f', searchKey = 'q' } = {}) {
const pairs = Object.entries(filterSet || {}).map(([k, v]) => {
if (Array.isArray(v)) return k + ':' + v.map(escapeValue).join(',')
const label = typeof labelFor === 'function' ? labelFor(k, v) : null
const slug = label && String(label) !== String(v) ? slugify(label) : ''
return k + ':' + escapeValue(v) + (slug ? '*' + slug : '')
})
const term = String(searchTerm ?? '').trim()
return '#' + hashKey + '=' + pairs.join(';') + (term ? '&' + searchKey + '=' + escapeValue(term) : '')
}
/** Parse a hash into { filters, search }. Exported for the same reason. */
export function parseView(hash, { hashKey = 'f', searchKey = 'q' } = {}) {
const out = { filters: {}, search: '' }
const h = String(hash || '')
const sm = new RegExp('[#&]' + searchKey + '=([^&]*)').exec(h)
if (sm) out.search = unescapeValue(sm[1])
const m = new RegExp('[#&]' + hashKey + '=([^&]*)').exec(h)
if (!m) return out
const raw = m[1]
if (raw.startsWith('{') || raw.startsWith('%7B') || raw.startsWith('%7b')) {
// A legacy JSON hash from a link shared before the readable format. Still restores.
try { out.filters = JSON.parse(decodeURIComponent(raw)) } catch (_) { /* ignore bad hash */ }
return out
}
for (const pair of raw.split(';')) {
const i = pair.indexOf(':')
if (i < 1) continue
const key = pair.slice(0, i)
const body = pair.slice(i + 1).split('*')[0]
// Split BEFORE unescaping: a literal comma inside a value is percent-encoded by escapeValue, so
// every `,` still here is a separator. Unescaping first would resurrect content commas and split
// the value in half.
const parts = body.split(LIST_SEP).map(unescapeValue).filter(Boolean)
if (key && parts.length) out.filters[key] = parts.length > 1 ? parts : parts[0]
}
return out
}
/**
* ★ A PARAM NAME IS NOT ALWAYS THE BUS KEY, AND RENAMING ONE BREAKS LINKS THAT ARE ALREADY OUT.
* go-int's board has shared `?access=` for a while against a bus key of `access_level` (and detail ->
* access_detail, wayin -> way_in, app -> messaging). Those links sit on partner pages today. If this
* composable insisted that the param equal the key, adopting it would silently rename every param and
* every one of those links would stop restoring — the exact harm the shareable-view card exists to
* prevent, caused by the thing meant to deliver it.
* So `facetKeys` takes EITHER shape:
* ['access_level', 'country'] param name === bus key
* { access: 'access_level', app: 'messaging' } param -> bus key, for names already in the wild
* An array stays the common case; the map is for a URL vocabulary you have already published.
*/
const busKeyFor = (facetKeys) => {
if (Array.isArray(facetKeys)) { const k = new Set(facetKeys); return (p) => (k.has(p) ? p : null) }
const m = facetKeys && typeof facetKeys === 'object' ? facetKeys : {}
return (p) => (Object.prototype.hasOwnProperty.call(m, p) ? m[p] : null)
}
const paramNameFor = (facetKeys) => {
if (!facetKeys || Array.isArray(facetKeys)) return (k) => k
const rev = Object.fromEntries(Object.entries(facetKeys).map(([param, key]) => [key, param]))
// A bus key with no declared param keeps its own name rather than being dropped: a filter that
// cannot be written is a filter that silently will not survive the link.
return (k) => (Object.prototype.hasOwnProperty.call(rev, k) ? rev[k] : k)
}
/**
* Serialize to a QUERY string, one param per facet. Preserves params this composable does not own —
* a host page's own query survives, which is the whole point of writing only on your own leaves.
*/
export function serializeQuery(filterSet, searchTerm, existing = '', { searchKey = 'q', facetKeys } = {}) {
const paramOf = paramNameFor(facetKeys)
const keep = []
const mine = new Set([...Object.keys(filterSet || {}).map(paramOf), searchKey])
for (const part of String(existing || '').replace(/^\?/, '').split('&')) {
if (!part) continue
const k = part.split('=')[0]
if (!mine.has(k)) keep.push(part)
}
const pairs = Object.entries(filterSet || {}).map(([k, v]) =>
paramOf(k) + '=' + (Array.isArray(v) ? v.map(escapeValue).join(',') : escapeValue(v)))
const term = String(searchTerm ?? '').trim()
if (term) pairs.push(searchKey + '=' + escapeValue(term))
const all = [...keep, ...pairs]
return all.length ? '?' + all.join('&') : ''
}
/** Parse a QUERY string. Only the keys the caller declares as facets are read as filters. */
export function parseQuery(search, facetKeys = [], { searchKey = 'q' } = {}) {
const out = { filters: {}, search: '' }
const keyOf = busKeyFor(facetKeys)
for (const part of String(search || '').replace(/^\?/, '').split('&')) {
if (!part) continue
const i = part.indexOf('=')
if (i < 1) continue
const k = part.slice(0, i)
const body = part.slice(i + 1)
if (k === searchKey) { out.search = unescapeValue(body); continue }
const busKey = keyOf(k)
if (!busKey) continue
const parts = body.split(LIST_SEP).map(unescapeValue).filter(Boolean)
if (parts.length) out.filters[busKey] = parts.length > 1 ? parts : parts[0]
}
return out
}
export function useShareableView(bus, options = {}) {
const { mode = 'hash', write: shouldWrite = true, facetKeys } = options
const push = () => {
try {
if (typeof location === 'undefined' || !shouldWrite) return
const url = mode === 'query'
? serializeQuery(bus.filterSet, bus.searchTerm?.value, location.search, { ...options, facetKeys }) + location.hash
: location.search + serializeView(bus.filterSet, bus.searchTerm?.value, options)
history.replaceState(null, '', location.pathname + url)
} catch (_) { /* sandboxed */ }
}
watch(() => ({ ...bus.filterSet, __q: bus.searchTerm?.value }), push, { deep: true })
onMounted(() => {
try {
if (typeof location === 'undefined') return
// READING is unconditional even when writing is off: restoring a link someone sent has to work
// on a partner's page too, which is exactly where writing must not happen.
const { filters, search } = mode === 'query'
? parseQuery(location.search, facetKeys || Object.keys(bus.filterSet || {}), options)
: parseView(location.hash, options)
Object.entries(filters).forEach(([k, v]) => bus.setFilter(k, v))
if (search && typeof bus.setSearch === 'function') bus.setSearch(search)
} catch (_) { /* ignore a bad URL */ }
})
}
export default useShareableView

View file

@ -74,7 +74,9 @@
"loading": "جارٍ تحميل الموارد…",
"pray": "صلِّ من أجل",
"everyResource": "كل الموارد بـ",
"alsoSpeak": "يتحدثون أيضًا"
"alsoSpeak": "يتحدثون أيضًا",
"share": "مشاركة",
"linkCopied": "تم نسخ الرابط"
},
"res": {
"scripture": "الكتاب المقدس",

View file

@ -51,6 +51,12 @@
"language": "اللغة",
"messaging": "تطبيق المراسلة الأول (البلد، iOS)",
"mobile": "الهواتف المحمولة لكل 100",
"openBench": "معيار الترجمة الآلية (FLORES+)",
"openBooks": "أسفار الكتاب المقدس (eBible)",
"openData": "بيانات مفتوحة (من 5)",
"openGrammar": "القواعد (Glottolog)",
"openSpeech": "ساعات الكلام (Common Voice)",
"openWiki": "ويكيبيديا",
"platform": "المنصة الأولى (البلد)",
"praying": "المصلّون",
"province": "الولاية / المقاطعة (تقريبية)",
@ -93,6 +99,12 @@
"nfhsNote": "NFHS-5، 2019–21، الأعمار 15–49: رقم الولاية، لا رقم المجموعة.",
"noFeed": "هذا البلد غير موجود في موجز Apple: تطبيقات المراسلة فيه غير معروفة هنا، لا غائبة.",
"noneNote": "لم يُعثر على شيء بلغتهم في المصادر التي فُحصت. وهذا ليس ادعاءً بأنه لا يوجد شيء.",
"notInSource": "غير موجود في هذا المصدر",
"openCheck": "بيانات مفتوحة وافرة لكن لم يُعثر على عهد جديد: تحقّق أولًا، فقد يوجد عهد جديد فاتته المصادر التي فُحصت.",
"openCount": "بيانات مفتوحة",
"openNote": "المصادر: Glottolog (CC BY 4.0)، eBible، ويكيبيديا (CC BY-SA 4.0)، Common Voice (CC0)، FLORES+ (CC BY-SA 4.0). عدٌّ لحقائق مسمّاة وليس تقييمًا.",
"openOf": "{n} من 5 مؤشرات",
"openTitle": "بيانات مفتوحة لبدء ترجمة",
"own": "بلغتهم",
"people": "{n} شخص",
"platformNote": "حصة الزيارات القادمة من منصات التواصل الاجتماعي المرصودة في البلد (StatCounter). تطبيقات المراسلة مثل واتساب غير مقيسة.",

View file

@ -74,7 +74,9 @@
"loading": "Ressourcen werden geladen…",
"pray": "Betet für",
"everyResource": "Alle Ressourcen auf",
"alsoSpeak": "Sprechen ebenfalls"
"alsoSpeak": "Sprechen ebenfalls",
"share": "Teilen",
"linkCopied": "Link kopiert"
},
"res": {
"scripture": "Bibeltext",

View file

@ -51,6 +51,12 @@
"language": "Sprache",
"messaging": "Top-Messenger (Land, iOS)",
"mobile": "Mobilfunk pro 100",
"openBench": "MÜ-Benchmark (FLORES+)",
"openBooks": "Bibelbücher (eBible)",
"openData": "Offene Daten (von 5)",
"openGrammar": "Grammatik (Glottolog)",
"openSpeech": "Sprachstunden (Common Voice)",
"openWiki": "Wikipedia",
"platform": "Top-Plattform (Land)",
"praying": "Betende Menschen",
"province": "Bundesstaat / Provinz (ungefähr)",
@ -93,6 +99,12 @@
"nfhsNote": "NFHS-5, 2019–21, 15–49 Jahre: die Zahl des Bundesstaats, nicht der Gruppe.",
"noFeed": "Dieses Land ist nicht in Apples Feed: Seine Messenger sind hier unbekannt, nicht abwesend.",
"noneNote": "In den geprüften Quellen wurde nichts in ihrer eigenen Sprache gefunden. Das ist keine Behauptung, dass nichts existiert.",
"notInSource": "nicht in dieser Quelle",
"openCheck": "Starke offene Daten, aber kein Neues Testament gefunden: erst prüfen, vielleicht gibt es eines, das die geprüften Quellen übersehen haben.",
"openCount": "Offene Daten",
"openNote": "Quellen: Glottolog (CC BY 4.0), eBible, Wikipedia (CC BY-SA 4.0), Common Voice (CC0), FLORES+ (CC BY-SA 4.0). Eine Zählung benannter Fakten, keine Bewertung.",
"openOf": "{n} von 5 Signalen",
"openTitle": "Offene Daten als Ausgangspunkt einer Übersetzung",
"own": "In ihrer eigenen Sprache",
"people": "{n} Menschen",
"platformNote": "Anteil der Web-Verweise unter den erfassten sozialen Plattformen im Land (StatCounter). Messenger wie WhatsApp werden nicht gemessen.",

View file

@ -74,7 +74,9 @@
"loading": "Loading resources…",
"pray": "Pray for",
"everyResource": "Every resource in",
"alsoSpeak": "Also speak"
"alsoSpeak": "Also speak",
"share": "Share",
"linkCopied": "Link copied"
},
"res": {
"scripture": "Scripture",

View file

@ -51,6 +51,12 @@
"language": "Language",
"messaging": "Top messaging app (country, iOS)",
"mobile": "Mobile per 100",
"openBench": "MT benchmark (FLORES+)",
"openBooks": "Scripture books (eBible)",
"openData": "Open data (of 5)",
"openGrammar": "Grammar (Glottolog)",
"openSpeech": "Speech hours (Common Voice)",
"openWiki": "Wikipedia",
"platform": "Top platform (country)",
"praying": "People praying",
"province": "State / province (approx.)",
@ -93,6 +99,12 @@
"nfhsNote": "NFHS-5, 2019-21, ages 15-49: the state's figure, not the group's.",
"noFeed": "This country is not in Apple's feed: its messaging apps are unknown here, not absent.",
"noneNote": "Nothing found in their own language in the sources checked. That is not a claim that nothing exists.",
"notInSource": "not in this source",
"openCheck": "Strong open data but no New Testament found: check first, one may exist that the sources checked missed.",
"openCount": "Open data",
"openNote": "Sources: Glottolog (CC BY 4.0), eBible, Wikipedia (CC BY-SA 4.0), Common Voice (CC0), FLORES+ (CC BY-SA 4.0). A count of named facts, not a score.",
"openOf": "{n} of 5 signals",
"openTitle": "Open data to start a translation from",
"own": "In their own language",
"people": "{n} people",
"platformNote": "Share of web referrals among tracked social platforms in the country (StatCounter). Messaging apps such as WhatsApp are not measured.",

View file

@ -74,7 +74,9 @@
"loading": "Cargando recursos…",
"pray": "Ora por",
"everyResource": "Todos los recursos en",
"alsoSpeak": "También hablan"
"alsoSpeak": "También hablan",
"share": "Compartir",
"linkCopied": "Enlace copiado"
},
"res": {
"scripture": "Escrituras",

View file

@ -51,6 +51,12 @@
"language": "Idioma",
"messaging": "App de mensajería principal (país, iOS)",
"mobile": "Móviles por 100",
"openBench": "Referencia de TA (FLORES+)",
"openBooks": "Libros bíblicos (eBible)",
"openData": "Datos abiertos (de 5)",
"openGrammar": "Gramática (Glottolog)",
"openSpeech": "Horas de voz (Common Voice)",
"openWiki": "Wikipedia",
"platform": "Plataforma principal (país)",
"praying": "Personas orando",
"province": "Estado / provincia (aprox.)",
@ -93,6 +99,12 @@
"nfhsNote": "NFHS-5, 2019–21, 15–49 años: la cifra del estado, no la del grupo.",
"noFeed": "Este país no está en el feed de Apple: sus apps de mensajería son desconocidas aquí, no ausentes.",
"noneNote": "No se encontró nada en su propio idioma en las fuentes consultadas. Eso no afirma que no exista nada.",
"notInSource": "no está en esta fuente",
"openCheck": "Datos abiertos sólidos pero sin Nuevo Testamento encontrado: verifique primero, quizá exista uno que las fuentes no encontraron.",
"openCount": "Datos abiertos",
"openNote": "Fuentes: Glottolog (CC BY 4.0), eBible, Wikipedia (CC BY-SA 4.0), Common Voice (CC0), FLORES+ (CC BY-SA 4.0). Un recuento de hechos con nombre, no una puntuación.",
"openOf": "{n} de 5 señales",
"openTitle": "Datos abiertos para empezar una traducción",
"own": "En su propio idioma",
"people": "{n} personas",
"platformNote": "Proporción de visitas web desde las redes sociales registradas en el país (StatCounter). No se miden apps de mensajería como WhatsApp.",

View file

@ -74,7 +74,9 @@
"loading": "Chargement des ressources…",
"pray": "Priez pour",
"everyResource": "Toutes les ressources en",
"alsoSpeak": "Parlent aussi"
"alsoSpeak": "Parlent aussi",
"share": "Partager",
"linkCopied": "Lien copié"
},
"res": {
"scripture": "Écritures",

View file

@ -51,6 +51,12 @@
"language": "Langue",
"messaging": "Messagerie principale (pays, iOS)",
"mobile": "Mobile pour 100",
"openBench": "Référence TA (FLORES+)",
"openBooks": "Livres bibliques (eBible)",
"openData": "Données ouvertes (sur 5)",
"openGrammar": "Grammaire (Glottolog)",
"openSpeech": "Heures de parole (Common Voice)",
"openWiki": "Wikipédia",
"platform": "Plateforme principale (pays)",
"praying": "Personnes qui prient",
"province": "État / province (approx.)",
@ -93,6 +99,12 @@
"nfhsNote": "NFHS-5, 2019–21, 15–49 ans : le chiffre de l’État, pas celui du groupe.",
"noFeed": "Ce pays n’est pas dans le flux d’Apple : ses messageries sont inconnues ici, pas absentes.",
"noneNote": "Rien n’a été trouvé dans leur propre langue dans les sources consultées. Cela ne veut pas dire que rien n’existe.",
"notInSource": "absent de cette source",
"openCheck": "Données ouvertes solides mais aucun Nouveau Testament trouvé : vérifiez d’abord, il en existe peut-être un que les sources ont manqué.",
"openCount": "Données ouvertes",
"openNote": "Sources : Glottolog (CC BY 4.0), eBible, Wikipédia (CC BY-SA 4.0), Common Voice (CC0), FLORES+ (CC BY-SA 4.0). Un décompte de faits nommés, pas une note.",
"openOf": "{n} signaux sur 5",
"openTitle": "Données ouvertes pour commencer une traduction",
"own": "Dans leur propre langue",
"people": "{n} personnes",
"platformNote": "Part des visites web venant des réseaux sociaux suivis dans le pays (StatCounter). Les messageries comme WhatsApp ne sont pas mesurées.",

View file

@ -74,7 +74,9 @@
"loading": "संसाधन लोड हो रहे हैं…",
"pray": "के लिए प्रार्थना करें",
"everyResource": "में सभी संसाधन",
"alsoSpeak": "यह भी बोलते हैं"
"alsoSpeak": "यह भी बोलते हैं",
"share": "साझा करें",
"linkCopied": "लिंक कॉपी हो गया"
},
"res": {
"scripture": "पवित्र शास्त्र",

View file

@ -51,6 +51,12 @@
"language": "भाषा",
"messaging": "प्रमुख मैसेजिंग ऐप (देश, iOS)",
"mobile": "प्रति 100 मोबाइल",
"openBench": "MT बेंचमार्क (FLORES+)",
"openBooks": "पवित्र शास्त्र की पुस्तकें (eBible)",
"openData": "खुला डेटा (5 में से)",
"openGrammar": "व्याकरण (Glottolog)",
"openSpeech": "वाणी के घंटे (Common Voice)",
"openWiki": "विकिपीडिया",
"platform": "प्रमुख प्लेटफ़ॉर्म (देश)",
"praying": "प्रार्थना करने वाले",
"province": "राज्य / प्रांत (अनुमानित)",
@ -93,6 +99,12 @@
"nfhsNote": "NFHS-5, 2019–21, 15–49 वर्ष: यह राज्य का आंकड़ा है, समूह का नहीं।",
"noFeed": "यह देश Apple की फ़ीड में नहीं है: यहाँ इसके मैसेजिंग ऐप अज्ञात हैं, अनुपस्थित नहीं।",
"noneNote": "जाँचे गए स्रोतों में उनकी अपनी भाषा में कुछ नहीं मिला। इसका मतलब यह नहीं कि कुछ भी मौजूद नहीं है।",
"notInSource": "इस स्रोत में नहीं",
"openCheck": "खुला डेटा भरपूर है पर नया नियम नहीं मिला: पहले जाँचें, हो सकता है कोई हो जो स्रोतों से छूट गया।",
"openCount": "खुला डेटा",
"openNote": "स्रोत: Glottolog (CC BY 4.0), eBible, विकिपीडिया (CC BY-SA 4.0), Common Voice (CC0), FLORES+ (CC BY-SA 4.0)। नामित तथ्यों की गिनती, कोई अंक नहीं।",
"openOf": "5 में से {n} संकेत",
"openTitle": "अनुवाद शुरू करने के लिए खुला डेटा",
"own": "उनकी अपनी भाषा में",
"people": "{n} लोग",
"platformNote": "देश में ट्रैक किए गए सोशल प्लेटफ़ॉर्म से आने वाले वेब ट्रैफ़िक का हिस्सा (StatCounter)। WhatsApp जैसे मैसेजिंग ऐप मापे नहीं जाते।",

View file

@ -74,7 +74,9 @@
"loading": "Caricamento risorse…",
"pray": "Prega per",
"everyResource": "Tutte le risorse in",
"alsoSpeak": "Parlano anche"
"alsoSpeak": "Parlano anche",
"share": "Condividi",
"linkCopied": "Link copiato"
},
"res": {
"scripture": "Scritture",

View file

@ -51,6 +51,12 @@
"language": "Lingua",
"messaging": "App di messaggistica principale (paese, iOS)",
"mobile": "Cellulari per 100",
"openBench": "Benchmark TA (FLORES+)",
"openBooks": "Libri biblici (eBible)",
"openData": "Dati aperti (su 5)",
"openGrammar": "Grammatica (Glottolog)",
"openSpeech": "Ore di parlato (Common Voice)",
"openWiki": "Wikipedia",
"platform": "Piattaforma principale (paese)",
"praying": "Persone che pregano",
"province": "Stato / provincia (approssimativo)",
@ -93,6 +99,12 @@
"nfhsNote": "NFHS-5, 2019–21, 15–49 anni: il dato dello stato, non del gruppo.",
"noFeed": "Questo paese non è nel feed di Apple: le sue app di messaggistica qui sono sconosciute, non assenti.",
"noneNote": "Nelle fonti consultate non è stato trovato niente nella loro lingua. Non significa che non esista nulla.",
"notInSource": "non in questa fonte",
"openCheck": "Dati aperti solidi ma nessun Nuovo Testamento trovato: verificate prima, potrebbe esisterne uno che le fonti non hanno trovato.",
"openCount": "Dati aperti",
"openNote": "Fonti: Glottolog (CC BY 4.0), eBible, Wikipedia (CC BY-SA 4.0), Common Voice (CC0), FLORES+ (CC BY-SA 4.0). Un conteggio di fatti nominati, non un punteggio.",
"openOf": "{n} segnali su 5",
"openTitle": "Dati aperti da cui iniziare una traduzione",
"own": "Nella propria lingua",
"people": "{n} persone",
"platformNote": "Quota di visite web provenienti dalle piattaforme social monitorate nel paese (StatCounter). Le app di messaggistica come WhatsApp non sono misurate.",

View file

@ -74,7 +74,9 @@
"loading": "Carregando recursos…",
"pray": "Ore por",
"everyResource": "Todos os recursos em",
"alsoSpeak": "Também falam"
"alsoSpeak": "Também falam",
"share": "Partilhar",
"linkCopied": "Link copiado"
},
"res": {
"scripture": "Escrituras",

View file

@ -51,6 +51,12 @@
"language": "Língua",
"messaging": "App de mensagens principal (país, iOS)",
"mobile": "Celulares por 100",
"openBench": "Referência de TA (FLORES+)",
"openBooks": "Livros bíblicos (eBible)",
"openData": "Dados abertos (de 5)",
"openGrammar": "Gramática (Glottolog)",
"openSpeech": "Horas de fala (Common Voice)",
"openWiki": "Wikipédia",
"platform": "Principal plataforma (país)",
"praying": "Pessoas orando",
"province": "Estado / província (aprox.)",
@ -93,6 +99,12 @@
"nfhsNote": "NFHS-5, 2019–21, 15–49 anos: o número do estado, não do grupo.",
"noFeed": "Este país não está no feed da Apple: seus apps de mensagens são desconhecidos aqui, não ausentes.",
"noneNote": "Nada foi encontrado na própria língua nas fontes verificadas. Isso não afirma que nada exista.",
"notInSource": "não está nesta fonte",
"openCheck": "Dados abertos fortes mas nenhum Novo Testamento encontrado: verifique antes, pode existir um que as fontes não encontraram.",
"openCount": "Dados abertos",
"openNote": "Fontes: Glottolog (CC BY 4.0), eBible, Wikipédia (CC BY-SA 4.0), Common Voice (CC0), FLORES+ (CC BY-SA 4.0). Uma contagem de fatos nomeados, não uma nota.",
"openOf": "{n} de 5 sinais",
"openTitle": "Dados abertos para começar uma tradução",
"own": "Na própria língua",
"people": "{n} pessoas",
"platformNote": "Parcela de acessos web vindos das redes sociais monitoradas no país (StatCounter). Aplicativos de mensagem como o WhatsApp não são medidos.",

View file

@ -74,7 +74,9 @@
"loading": "Se încarcă resursele…",
"pray": "Roagă-te pentru",
"everyResource": "Toate resursele în",
"alsoSpeak": "Vorbesc și"
"alsoSpeak": "Vorbesc și",
"share": "Distribuie",
"linkCopied": "Link copiat"
},
"res": {
"scripture": "Scripturi",

View file

@ -51,6 +51,12 @@
"language": "Limbă",
"messaging": "Aplicația de mesagerie principală (țară, iOS)",
"mobile": "Mobile la 100",
"openBench": "Reper TA (FLORES+)",
"openBooks": "Cărți biblice (eBible)",
"openData": "Date deschise (din 5)",
"openGrammar": "Gramatică (Glottolog)",
"openSpeech": "Ore de vorbire (Common Voice)",
"openWiki": "Wikipedia",
"platform": "Platforma principală (țară)",
"praying": "Oameni care se roagă",
"province": "Stat / provincie (aprox.)",
@ -93,6 +99,12 @@
"nfhsNote": "NFHS-5, 2019–21, 15–49 ani: cifra statului, nu a grupului.",
"noFeed": "Această țară nu este în fluxul Apple: aplicațiile sale de mesagerie sunt necunoscute aici, nu absente.",
"noneNote": "Nu s-a găsit nimic în propria lor limbă în sursele verificate. Asta nu înseamnă că nu există nimic.",
"notInSource": "nu apare în această sursă",
"openCheck": "Date deschise solide, dar niciun Nou Testament găsit: verificați întâi, poate există unul pe care sursele l-au ratat.",
"openCount": "Date deschise",
"openNote": "Surse: Glottolog (CC BY 4.0), eBible, Wikipedia (CC BY-SA 4.0), Common Voice (CC0), FLORES+ (CC BY-SA 4.0). O numărătoare de fapte numite, nu un scor.",
"openOf": "{n} din 5 semnale",
"openTitle": "Date deschise pentru a începe o traducere",
"own": "În propria lor limbă",
"people": "{n} oameni",
"platformNote": "Ponderea vizitelor web venite de la platformele sociale urmărite în țară (StatCounter). Aplicațiile de mesagerie precum WhatsApp nu sunt măsurate.",

View file

@ -74,7 +74,9 @@
"loading": "Загрузка ресурсов…",
"pray": "Молитесь о",
"everyResource": "Все ресурсы на",
"alsoSpeak": "Также говорят на"
"alsoSpeak": "Также говорят на",
"share": "Поделиться",
"linkCopied": "Ссылка скопирована"
},
"res": {
"scripture": "Писание",

View file

@ -51,6 +51,12 @@
"language": "Язык",
"messaging": "Главный мессенджер (страна, iOS)",
"mobile": "Мобильных на 100",
"openBench": "Бенчмарк МП (FLORES+)",
"openBooks": "Книги Писания (eBible)",
"openData": "Открытые данные (из 5)",
"openGrammar": "Грамматика (Glottolog)",
"openSpeech": "Часы речи (Common Voice)",
"openWiki": "Википедия",
"platform": "Главная платформа (страна)",
"praying": "Молящихся",
"province": "Штат / провинция (прибл.)",
@ -93,6 +99,12 @@
"nfhsNote": "NFHS-5, 2019–21, 15–49 лет: показатель штата, а не группы.",
"noFeed": "Этой страны нет в ленте Apple: её мессенджеры здесь неизвестны, а не отсутствуют.",
"noneNote": "В проверенных источниках на их родном языке ничего не найдено. Это не утверждение, что ничего не существует.",
"notInSource": "нет в этом источнике",
"openCheck": "Много открытых данных, но Новый Завет не найден: сначала проверьте, возможно, он есть, но источники его пропустили.",
"openCount": "Открытые данные",
"openNote": "Источники: Glottolog (CC BY 4.0), eBible, Википедия (CC BY-SA 4.0), Common Voice (CC0), FLORES+ (CC BY-SA 4.0). Подсчёт названных фактов, а не оценка.",
"openOf": "сигналов: {n} из 5",
"openTitle": "Открытые данные для начала перевода",
"own": "На их родном языке",
"people": "{n} чел.",
"platformNote": "Доля веб-переходов из отслеживаемых соцсетей в стране (StatCounter). Мессенджеры вроде WhatsApp не измеряются.",

View file

@ -74,7 +74,9 @@
"loading": "正在加载资源…",
"pray": "为其代祷:",
"everyResource": "所有资源 —",
"alsoSpeak": "同样使用"
"alsoSpeak": "同样使用",
"share": "分享",
"linkCopied": "链接已复制"
},
"res": {
"scripture": "圣经",

View file

@ -51,6 +51,12 @@
"language": "语言",
"messaging": "最主要的通讯应用(国家,iOS)",
"mobile": "每百人移动用户",
"openBench": "机器翻译基准(FLORES+)",
"openBooks": "圣经书卷(eBible)",
"openData": "开放数据(共 5 项)",
"openGrammar": "语法(Glottolog)",
"openSpeech": "语音时长(Common Voice)",
"openWiki": "维基百科",
"platform": "主要平台(国家)",
"praying": "代祷人数",
"province": "邦 / 省(大约)",
@ -93,6 +99,12 @@
"nfhsNote": "NFHS-5,2019–21,15–49 岁:这是该邦的数字,不是族群的数字。",
"noFeed": "该国不在苹果的数据源中:这里不知道它的通讯应用,并不表示没有。",
"noneNote": "在已查阅的来源中未找到他们母语的任何资源。这并不表示不存在任何资源。",
"notInSource": "不在此来源中",
"openCheck": "开放数据充足但未找到新约:请先核实,可能已有新约而所查来源遗漏了。",
"openCount": "开放数据",
"openNote": "来源:Glottolog(CC BY 4.0)、eBible、维基百科(CC BY-SA 4.0)、Common Voice(CC0)、FLORES+(CC BY-SA 4.0)。这是具名事实的计数,不是评分。",
"openOf": "5 项中的 {n} 项",
"openTitle": "可作为翻译起点的开放数据",
"own": "以他们的母语",
"people": "{n} 人",
"platformNote": "该国已追踪社交平台带来的网页流量占比(StatCounter)。WhatsApp 等即时通讯应用未被统计。",

View file

@ -0,0 +1,103 @@
#!/usr/bin/env node
/**
* build-translation-readiness.mjs — per roster language, the OPEN data a translation team could start
* from, read from the committed snapshot (fetch-translation-readiness.mjs) and eBible's index. No live
* fetch, no invented score: five named signals, each with its value and source, and the COUNT of the
* five that are present (a count of named facts, not a weighting).
*
* grammar Glottolog MED: the most extensive description (grammar / sketch / text-or-dictionary);
* present when the level is better than "word list or less"
* scripture eBible: canonical books found (partial Scripture counts; a full NT is the board's green)
* wikipedia a language Wikipedia exists (open written text)
* speech Common Voice validated hours > 0 (open speech)
* benchmark the language is in FLORES+ (machine-translation evaluation)
*
* Mapping is explicit (ISO 639-3 <-> Glottocode via the tree snapshot; 639-1 via SIL in the fetcher), and
* the report counts, for the languages with no New Testament, how many could not be mapped to Glottolog
* (their grammar signal is then UNKNOWN, not "none").
* Outputs data/tables/gospel-internet-readiness.json (+ the public copy). `--check` compares.
*/
import { readFileSync, writeFileSync } 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 T = (f) => JSON.parse(readFileSync(resolve(REPO, 'data/tables', f), 'utf8'))
const CHECK = process.argv.includes('--check')
const snap = JSON.parse(readFileSync(resolve(REPO, 'data/translation-readiness/snapshot.json'), 'utf8'))
const tree = T('gospel-internet-tree.json')
const gi = T('gospel-internet.json')
const ebible = T('ebible-index.json').codes || {}
const glotto = JSON.parse(readFileSync(resolve(REPO, 'data/glottolog/glottolog-subset.json'), 'utf8'))
const inGlottolog = new Set(glotto.languoids.filter((l) => l.iso).map((l) => l.iso))
const byIso = new Map()
for (const r of gi.rows) {
const e = byIso.get(r.iso639_3) || { iso: r.iso639_3, language: r.language, groups: 0, people: 0 }
e.groups++; e.people += Number(r.population) || 0
byIso.set(r.iso639_3, e)
}
const stOf = new Map(tree.nodes.filter((n) => n.iso && n.st).map((n) => [n.iso, n.st]))
const rows = []
for (const e of byIso.values()) {
const m = snap.med[e.iso]
const eb = ebible[e.iso]
const books = eb ? Number(eb.books) || 0 : 0
const row = {
iso: e.iso, language: e.language, groups: e.groups, people: e.people,
nt: stOf.get(e.iso) === 'g',
grammar_level: m ? m.level : null, // 0 long grammar .. 4 word list or less
grammar: m ? snap.med_codes[m.level] : (inGlottolog.has(e.iso) ? '' : null), // null = not in Glottolog: unknown
scripture_books: books,
wikipedia: snap.wikipedia[e.iso] || '',
speech_hours: snap.commonVoice[e.iso] || 0,
benchmark: (snap.flores[e.iso] || []).join(' '),
}
row.signals = [row.grammar_level !== null && row.grammar_level < 4, books > 0, !!row.wikipedia, row.speech_hours > 0, !!row.benchmark].filter(Boolean).length
rows.push(row)
}
rows.sort((a, b) => a.iso.localeCompare(b.iso))
const noNt = rows.filter((r) => !r.nt)
const count = (f) => noNt.filter(f).length
const coverage = {
languages: rows.length, without_new_testament: noNt.length,
not_in_glottolog: count((r) => r.grammar === null),
signal: { grammar: count((r) => r.grammar_level !== null && r.grammar_level < 4), scripture: count((r) => r.scripture_books > 0),
wikipedia: count((r) => !!r.wikipedia), speech: count((r) => r.speech_hours > 0), benchmark: count((r) => !!r.benchmark) },
by_signal_count: noNt.reduce((m, r) => { m[r.signals] = (m[r.signals] || 0) + 1; return m }, {}),
source_codes_unmapped: snap.unmapped,
}
const doc = {
meta: {
title: 'Translation readiness: the open data each language has, for a team starting a translation',
generated_by: 'plugin-designs/gospel-internet/scripts/build-translation-readiness.mjs',
snapshot: snap.fetched,
sources: { ...snap.sources, ebible: { name: 'eBible.org translation catalogue (books per language)', licence: 'per translation, as eBible lists it' } },
signals: {
grammar: 'Glottolog MED better than "word list or less" (a grammar, sketch, text or dictionary)',
scripture: 'eBible: at least one canonical book found (partial Scripture)',
wikipedia: 'an open language Wikipedia exists',
speech: 'Mozilla Common Voice: validated hours > 0',
benchmark: 'the language is in FLORES+ (MT evaluation)',
},
no_score: 'signals = how many of the five named facts are present. It is a count, not a weighting or a prediction.',
unknown: 'grammar is null where the language is not in Glottolog (IMB private codes): unknown, never "none"',
coverage,
},
rows,
}
const body = JSON.stringify(doc) + '\n'
const OUTS = ['data/tables', 'public/dx-maps/assets/tables'].map((d) => resolve(REPO, d, 'gospel-internet-readiness.json'))
if (CHECK) {
let same = true
for (const o of OUTS) { try { if (readFileSync(o, 'utf8') !== body) same = false } catch { same = false } }
console.log(same ? 'ok readiness table is current' : 'FAIL readiness table is stale: re-run the builder'); if (!same) process.exitCode = 1
} else {
for (const o of OUTS) writeFileSync(o, body)
console.log('ok wrote gospel-internet-readiness.json:', rows.length, 'languages')
}
console.log(JSON.stringify(coverage))

View file

@ -48,7 +48,7 @@ const get = (lc, key) => {
// SETTLED, not deferred: the correct word in that language IS the English spelling. Each is a decision,
// listed by locale and key so a new identical string is still caught.
const SAME_ON_PURPOSE = new Set(['fr:res.source', 'fr:res.type', 'ro:tree.dialect', 'fr:facet.religion',
'de:facet.region', 'de:facet.religion', 'de:tree.poster', 'it:tree.poster', 'ro:tree.poster'])
'de:facet.region', 'de:facet.religion', 'de:tree.poster', 'it:tree.poster', 'ro:tree.poster', 'de:col.openWiki', 'es:col.openWiki', 'it:col.openWiki', 'ro:col.openWiki'])
let fails = 0
if (keys.size < 100) { console.log(`NOT MEASURED: read only ${keys.size} keys (expected 100+); the parser is broken, not the bundle`); process.exitCode = 75 }

View file

@ -141,6 +141,19 @@ for (const n of ix.nodes) if (!n.p) { const x = scZero.get(n.id); gy += x.g + x.
ok(gy === 0, `with only zero-access groups in scope, no family counts a green or yellow language (${gy})`)
bus.clearFilters()
// 11. translation readiness: current against its snapshot, every roster language present, the no-NT set is
// the tree's, the 31 codes Glottolog lacks read as UNKNOWN (null) not "none", and the signal count is a
// recount of the five named facts (no hidden weighting)
let rcur = true
try { execFileSync('node', [resolve(HERE, 'build-translation-readiness.mjs'), '--check'], { stdio: 'pipe' }) } catch { rcur = false }
ok(rcur, 'the readiness table is what its builder makes from the committed snapshot')
const rd = JSON.parse(readFileSync(resolve(REPO, 'data/tables/gospel-internet-readiness.json'), 'utf8'))
ok(rd.rows.length === langsOnBoard.size, `readiness covers every roster language (${rd.rows.length})`)
ok(rd.rows.filter((r) => !r.nt).length === tot.y + tot.r, `its no-New-Testament set is the tree's (${rd.rows.filter((r) => !r.nt).length} == ${tot.y + tot.r})`)
ok(rd.meta.coverage.not_in_glottolog === 31 && rd.rows.filter((r) => r.grammar === null).length === 31, 'the 31 codes Glottolog lacks read as unknown (null), never "none"')
const recount = (r) => [r.grammar_level !== null && r.grammar_level < 4, r.scripture_books > 0, !!r.wikipedia, r.speech_hours > 0, !!r.benchmark].filter(Boolean).length
ok(rd.rows.every((r) => r.signals === recount(r)) && !POISON, 'every signal count is a recount of the five named facts')
// 8. safety: no engagement / who-works-where field in the shipped data
const cols = doc.meta.columns || []
const banned = cols.filter((c) => /engage|worker|team|agenc|missionar/i.test(c))

View file

@ -0,0 +1,102 @@
#!/usr/bin/env node
/**
* fetch-translation-readiness.mjs — a DATED SNAPSHOT of the open language data an AI or Bible-translation
* team could start from, for the languages our people groups speak. Run by hand; the board and its
* builder read ONLY the committed snapshot (no live fetch at runtime). Card BUILD-TRANSLATION-READINESS-VIEW.
*
* Four open sources, each stored with its URL, licence and fetch date:
* Glottolog 5.x "most extensive description" (MED) per languoid CC BY 4.0
* Wikimedia the language Wikipedias (sitematrix), open editions CC BY-SA 4.0 (the text)
* Common Voice validated speech hours per locale (Mozilla) CC0 1.0
* FLORES+ the MT benchmark's languages (OLDI, Hugging Face) CC BY-SA 4.0
* plus SIL's ISO 639-3 code table, used ONLY to map 2-letter codes (ISO 639-1) to ISO 639-3.
* (Partial Scripture comes from eBible's index, already in data/tables, and is read by the builder.)
*
* Codes are mapped EXPLICITLY and every code that cannot be mapped is COUNTED and listed, never dropped
* silently (dx-shepherd's guard 3).
* Writes data/translation-readiness/snapshot.json. Refuses a much smaller snapshot than the last one.
*/
import { readFileSync, writeFileSync, mkdirSync, existsSync } 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/translation-readiness/snapshot.json')
const today = new Date().toISOString().slice(0, 10)
const SRC = {
glottolog: { url: 'https://raw.githubusercontent.com/glottolog/glottolog-cldf/master/cldf/values.csv', licence: 'CC BY 4.0', name: 'Glottolog (CLDF): most extensive description (MED)' },
sil: { url: 'https://iso639-3.sil.org/sites/iso639-3/files/downloads/iso-639-3.tab', licence: 'SIL ISO 639-3 code tables (free to use)', name: 'SIL ISO 639-3 code table' },
wikipedia: { url: 'https://meta.wikimedia.org/w/api.php?action=sitematrix&format=json&smtype=language&smlangprop=code|site', licence: 'CC BY-SA 4.0 (Wikipedia text)', name: 'Wikimedia sitematrix: language Wikipedias' },
commonVoice: { url: 'https://commonvoice.mozilla.org/api/v1/stats/languages', licence: 'CC0 1.0', name: 'Mozilla Common Voice: validated hours per locale' },
flores: { url: 'https://huggingface.co/api/datasets/openlanguagedata/flores_plus/tree/main/dev', licence: 'CC BY-SA 4.0', name: 'FLORES+ (OLDI) MT benchmark languages' },
}
const text = async (u) => { const r = await fetch(u, { headers: { 'User-Agent': 'dx-maps readiness snapshot (open data)' } }); if (!r.ok) throw new Error(`${u} HTTP ${r.status}`); return r.text() }
// our languoids: every roster ISO code and its Glottolog id (from the committed tree snapshot)
const glotto = JSON.parse(readFileSync(resolve(REPO, 'data/glottolog/glottolog-subset.json'), 'utf8'))
const ourIds = new Map(glotto.languoids.filter((l) => l.iso).map((l) => [l.id, l.iso]))
// 1. MED for our languoids only (values.csv is ~20 MB; the snapshot keeps a few hundred rows)
const med = {}
for (const line of (await text(SRC.glottolog.url)).split('\n')) {
if (!line.includes(',med,')) continue
const [, lang, param, value, code] = line.split(',')
if (param === 'med' && ourIds.has(lang)) med[ourIds.get(lang)] = { level: Number(value), code }
}
// 2. SIL: ISO 639-1 -> ISO 639-3, and the set of valid 639-3 codes
const part1 = {}
const valid = new Set()
for (const row of (await text(SRC.sil.url)).split('\n').slice(1)) {
const c = row.split('\t')
if (!c[0]) continue
valid.add(c[0])
if (c[3]) part1[c[3]] = c[0]
}
const toIso3 = (code) => { const b = String(code || '').toLowerCase().split(/[-_]/)[0]; return valid.has(b) ? b : part1[b] || '' }
// 3. Wikipedia editions (open ones), mapped to ISO 639-3
const sm = JSON.parse(await text(SRC.wikipedia.url)).sitematrix || {}
const wikipedia = {}
const wikiUnmapped = []
for (const [k, v] of Object.entries(sm)) {
if (k === 'count' || !v || !v.site) continue
const wp = v.site.find((s) => s.code === 'wiki' && !('closed' in s))
if (!wp) continue
const iso = toIso3(v.code)
if (iso) wikipedia[iso] = v.code; else wikiUnmapped.push(v.code)
}
// 4. Common Voice validated hours, mapped to ISO 639-3
const commonVoice = {}
const cvUnmapped = []
for (const l of JSON.parse(await text(SRC.commonVoice.url))) {
if (!(l.validatedHours > 0)) continue
const iso = toIso3(l.locale)
if (iso) commonVoice[iso] = Math.max(commonVoice[iso] || 0, l.validatedHours); else cvUnmapped.push(l.locale)
}
// 5. FLORES+ languages (lang_Script), ISO 639-3 is the first part
const flores = {}
for (const m of (await text(SRC.flores.url)).matchAll(/dev\/([a-z]{3})_([A-Z][a-z]{3})\.jsonl/g)) (flores[m[1]] ||= []).push(m[2])
const doc = {
fetched: today,
sources: Object.fromEntries(Object.entries(SRC).map(([k, v]) => [k, { ...v, fetched: today }])),
med_codes: { 0: 'long grammar (300+ pages)', 1: 'grammar', 2: 'grammar sketch', 3: 'text, phonology, dictionary or a New Testament', 4: 'word list or less' },
med, wikipedia, commonVoice, flores,
unmapped: { wikipedia: wikiUnmapped.sort(), commonVoice: cvUnmapped.sort() },
counts: { med: Object.keys(med).length, wikipedia: Object.keys(wikipedia).length, commonVoice: Object.keys(commonVoice).length, flores: Object.keys(flores).length,
wikipedia_unmapped: wikiUnmapped.length, commonVoice_unmapped: cvUnmapped.length },
}
if (existsSync(OUT)) {
const prev = JSON.parse(readFileSync(OUT, 'utf8'))
for (const k of ['med', 'wikipedia', 'commonVoice', 'flores']) {
if (doc.counts[k] < 0.9 * (prev.counts?.[k] || 0)) { console.error(`REFUSING: ${k} dropped from ${prev.counts[k]} to ${doc.counts[k]} (a bad fetch?)`); process.exit(1) }
}
}
mkdirSync(dirname(OUT), { recursive: true })
writeFileSync(OUT, JSON.stringify(doc, null, 1) + '\n')
console.log('ok', OUT.replace(REPO + '/', ''), JSON.stringify(doc.counts))

View file

@ -34,6 +34,14 @@ export function buildColumns(T) {
{ key: 'internet_band', header: 'internet_band', label: T('gospelInternet.col.band', 'Internet band'), w: 115, show: (r) => band(r.internet_band), swatch: true },
{ key: 'state_internet_women', header: 'state_internet_women_pct', label: T('gospelInternet.col.stateWomen', 'State online: women'), w: 130, num: true, hidden: true, show: (r) => pct(r.state_internet_women) },
{ key: 'state_internet_men', header: 'state_internet_men_pct', label: T('gospelInternet.col.stateMen', 'State online: men'), w: 130, num: true, hidden: true, show: (r) => pct(r.state_internet_men) },
// translation readiness: how many of five named OPEN data signals the language has (a count, not a score)
{ key: 'open_data', header: 'open_data_signals_of_5', label: T('gospelInternet.col.openData', 'Open data (of 5)'), w: 120, num: true,
show: (r) => (r.open_data == null ? '' : r.open_data.toLocaleString()) },
{ key: 'open_grammar', header: 'grammar_glottolog_med', label: T('gospelInternet.col.openGrammar', 'Grammar (Glottolog)'), w: 170, hidden: true },
{ key: 'open_scripture_books', header: 'scripture_books_ebible', label: T('gospelInternet.col.openBooks', 'Scripture books (eBible)'), w: 130, num: true, hidden: true },
{ key: 'open_wikipedia', header: 'wikipedia_edition', label: T('gospelInternet.col.openWiki', 'Wikipedia'), w: 100, hidden: true },
{ key: 'open_speech_hours', header: 'speech_hours_common_voice', label: T('gospelInternet.col.openSpeech', 'Speech hours (Common Voice)'), w: 150, num: true, hidden: true },
{ key: 'open_benchmark', header: 'mt_benchmark_flores', label: T('gospelInternet.col.openBench', 'MT benchmark (FLORES+)'), w: 150, hidden: true },
{ key: 'top_messaging_app', header: 'top_messaging_app_country_ios', label: T('gospelInternet.col.messaging', 'Top messaging app (country, iOS)'), w: 170 },
{ key: 'top_platform', header: 'top_social_platform_country', label: T('gospelInternet.col.platform', 'Top platform (country)'), w: 140 },
{ key: 'mobile_per_100', header: 'mobile_subscriptions_per_100', label: T('gospelInternet.col.mobile', 'Mobile per 100'), w: 110, num: true, hidden: true },

View file

@ -69,6 +69,24 @@ const sections = computed(() => {
plat.push({ label: T('gospelInternet.drawer.messaging', 'Messaging apps (iOS downloads)'), text: T('gospelInternet.charts.notMeasured', 'Not measured'), note: T('gospelInternet.drawer.noFeed', 'This country is not in Apple\'s feed: its messaging apps are unknown here, not absent.') })
}
if (pc && pc.social.length) plat.push({ label: T('gospelInternet.drawer.social', 'Social platforms (web referrals)'), text: pc.social.map((x) => `${x.platform} ${n(x.pct)}%`).join(' · '), note: T('gospelInternet.drawer.platformNote', 'Share of web referrals among tracked social platforms in the country (StatCounter). Messaging apps such as WhatsApp are not measured.') })
// Open data to start a translation from: five named, cited signals (no score). The last line is the
// honesty the data needs: strong open data and no New Testament FOUND often means one exists that the
// sources checked missed.
const rd = board.readiness.value.byIso.get(g.iso639_3)
const openLines = []
const openLinks = []
if (rd) {
openLines.push({ label: T('gospelInternet.drawer.openCount', 'Open data'), text: T('gospelInternet.drawer.openOf', '{n} of 5 signals', { n: n(rd.signals) }) })
openLines.push({ label: T('gospelInternet.col.openGrammar', 'Grammar (Glottolog)'), text: rd.grammar === null ? T('gospelInternet.drawer.notInSource', 'not in this source') : (rd.grammar || '—') })
openLines.push({ label: T('gospelInternet.col.openBooks', 'Scripture books (eBible)'), text: n(rd.scripture_books) || '0' })
openLines.push({ label: T('gospelInternet.col.openSpeech', 'Speech hours (Common Voice)'), text: rd.speech_hours ? n(rd.speech_hours) : '0' })
openLines.push({ label: T('gospelInternet.col.openBench', 'MT benchmark (FLORES+)'), text: rd.benchmark || '—' })
if (rd.wikipedia) openLinks.push({ label: T('gospelInternet.col.openWiki', 'Wikipedia') + ' (' + rd.wikipedia + ')', href: safeHref(`https://${rd.wikipedia}.wikipedia.org/`) })
if (rd.grammar !== null && g.iso639_3) openLinks.push({ label: 'Glottolog', href: safeHref(`https://glottolog.org/glottolog?iso=${g.iso639_3}`) })
}
const openNote = rd && !rd.nt && rd.signals >= 3
? T('gospelInternet.drawer.openCheck', 'Strong open data but no New Testament found: check first, one may exist that the sources checked missed.')
: T('gospelInternet.drawer.openNote', 'Sources: Glottolog (CC BY 4.0), eBible, Wikipedia (CC BY-SA 4.0), Common Voice (CC0), FLORES+ (CC BY-SA 4.0). A count of named facts, not a score.')
return [
{ id: 'own', title: T('gospelInternet.drawer.own', 'In their own language'),
lead: { dot: g.access_detail, text: label(T, 'detail', g.access_detail) },
@ -79,6 +97,7 @@ const sections = computed(() => {
note: wayLines.length ? T('gospelInternet.drawer.wayNote', 'A neighbouring language, not a recommendation: whether a group speaks it is a question for someone on the ground.') : '' },
{ id: 'conn', title: T('gospelInternet.drawer.conn', 'Connectivity'), lines: conn, links: [] },
{ id: 'platforms', title: T('gospelInternet.drawer.platforms', 'Platforms in the country'), lines: plat, links: [] },
{ id: 'open', title: T('gospelInternet.drawer.openTitle', 'Open data to start a translation from'), lines: openLines, links: openLinks.filter((l) => l.href), note: rd ? openNote : '' },
].filter((s) => s.lines.length || s.links.length || s.lead)
})

View file

@ -359,6 +359,7 @@ useShadowStyles(
<span>{{ T('gospelInternet.tree.languagesHere', 'languages here') }}</span>
</div>
<div v-else-if="card.n.st" class="gtr-c"><span class="gtr-dot" :style="{ background: TREE_COLOR[card.n.st] }"></span>{{ T('gospelInternet.tree.st.' + card.n.st, ST_EN[card.n.st]) }}</div>
<div v-if="card.n.iso && board.readiness.value.byIso.get(card.n.iso)" class="gtr-via" data-tree-open>{{ T('gospelInternet.drawer.openCount', 'Open data') }}: {{ T('gospelInternet.drawer.openOf', '{n} of 5 signals', { n: fmt(board.readiness.value.byIso.get(card.n.iso).signals) }) }}</div>
<div v-if="card.n.inh" class="gtr-via">{{ T('gospelInternet.tree.inherited', 'Colour of its language: no source catalogues resources by dialect.') }}</div>
<div v-if="card.n.via" class="gtr-via">{{ T('gospelInternet.tree.via', 'Also on this path:') }} {{ card.n.via.join(' › ') }}</div>
<button v-if="card.selected" type="button" @click="board.setTreeNode('')">{{ T('controls.clear', 'Clear') }}</button>

View file

@ -269,7 +269,7 @@ export function accessByBand(rows, measure = 'groups') {
export function sortRows(rows, { key, dir = 1 } = {}) {
if (!key) return rows
const num = (v) => (v === null || v === '' || v === undefined ? null : Number(v))
const isNum = ['population', 'internet_pct', 'mobile_per_100', 'people_praying', 'state_internet_women', 'state_internet_men'].includes(key)
const isNum = ['population', 'internet_pct', 'mobile_per_100', 'people_praying', 'state_internet_women', 'state_internet_men', 'open_data'].includes(key)
return [...rows].sort((a, b) => {
const x = a[key], y = b[key]
if (isNum) {

View file

@ -27,6 +27,7 @@ export function useBoard() {
const bySlug = shallowRef(new Map())
const meta = shallowRef({})
const countries = shallowRef({}) // iso3 -> { messaging, top_messaging, in_app_feed, social, social_month }
const readiness = shallowRef({ meta: {}, byIso: new Map() }) // translation readiness, per language
const loading = ref(true)
const error = ref('')
const listId = computed(() => resolvePeopleGroupList(profileConfig.value))
@ -56,13 +57,30 @@ export function useBoard() {
loading.value = true
error.value = ''
try {
const url = `${resolveAssetsBase(cfg())}/tables/gospel-internet.json`
const res = await fetch(url)
const base = resolveAssetsBase(cfg())
const [res, rres] = await Promise.all([fetch(`${base}/tables/gospel-internet.json`), fetch(`${base}/tables/gospel-internet-readiness.json`).catch(() => null)])
if (!res.ok) throw new Error(`gospel-internet.json HTTP ${res.status}`)
const doc = await res.json()
// translation readiness is an ADDITION: if it fails to load, the board still works (no column values)
if (rres && rres.ok) {
const rd = await rres.json()
readiness.value = markRaw({ meta: rd.meta || {}, byIso: new Map((rd.rows || []).map((r) => [r.iso, r])) })
}
// The universal `list` prop: the rows of the page's people-group list, and none if it cannot be
// loaded (applyPeopleGroupList fails CLOSED — never DOXA's whole list under another list's name).
const rows = await applyPeopleGroupList(M.normalizeRows(doc), profileConfig.value)
for (const r of rows) {
const x = readiness.value.byIso.get(r.iso639_3)
// The column RANKS languages WITHOUT a New Testament (the translation question): a language that has
// one scored 5 (its Bible counted as Scripture) and sorted to the top, the opposite of what a
// translation team needs (rega, pre-landing T1). Blank sorts last; the drawer still shows the signals.
r.open_data = x && !x.nt ? x.signals : null
r.open_grammar = x && x.grammar ? x.grammar : ''
r.open_scripture_books = x ? x.scripture_books : null
r.open_wikipedia = x ? x.wikipedia : ''
r.open_speech_hours = x ? x.speech_hours : null
r.open_benchmark = x ? x.benchmark : ''
}
meta.value = markRaw(doc.meta || {})
countries.value = markRaw(doc.countries || {})
all.value = markRaw(rows)
@ -188,7 +206,7 @@ export function useBoard() {
}
const board = {
bus, all, bySlug, filtered, sorted, meta, countries, loading, error, listId, listIsDefault,
bus, all, bySlug, filtered, sorted, meta, countries, readiness, loading, error, listId, listIsDefault,
view, sort, openSlug, openRow, profileConfig,
centre, tree, resources, treeNode, setCentre, setTreeNode, loadTree,
load, setView, openGroup, closeGroup, readUrl, groupLink,

View file

@ -547,7 +547,10 @@ const rowCount = computed(() => filtered.value.length)
// columns are untouched.
const { labelFor: csvLabelFor } = useTreeLegendLabels(cfg, inject('dataStore', null), inject('searchSourceId', null))
const csv = dash && bus
? useCsvExport({ rowStore: dash.rowStore, rows: dash.rows, selectionSet: bus.selectionSet, filterSet: bus.filterSet, FACET_ACC: FACETS, dataOpts: cfg.data, labelFor: csvLabelFor })
? useCsvExport({ rowStore: dash.rowStore, rows: dash.rows, selectionSet: bus.selectionSet, filterSet: bus.filterSet, FACET_ACC: FACETS, dataOpts: cfg.data, labelFor: csvLabelFor,
// The table already narrows the screen with this exact matcher (see visibleRows); handing it to the
// exporter is what makes the download agree with what the reader is looking at.
searchFilter: (list) => filterRowsBySearch(list, matchSearch) })
: null
const exportToast = ref('')
const exporting = ref(false)

View file

@ -28,6 +28,7 @@ import { provide, inject, ref, computed, watch, onMounted, onBeforeUnmount } fro
import { createSelectionBus } from '@map/composables/useSelectionBus.js'
import { useDashboardData } from '@map/composables/useDashboardData.js'
import { useCsvExport } from '@map/composables/useCsvExport.js'
import { useShareableView } from '@map/composables/useShareableView.js'
import { buildSearchAccessors, makeSearchMatcher, filterRowsBySearch } from '@map/composables/useDashboardSearch.js'
import { formatCount } from '@map/utils/formatCount.js'
import { useTreeLegendLabels } from './useTreeLegendLabels.js'
@ -137,78 +138,10 @@ function useResponsiveShell(bus) {
}
}
/**
* Shareable view-state hash URL: serialize filterSet to location.hash; restore on mount.
*
* ★ READABLE, CODE-CANONICAL FORMAT (card BUG-SHARE-URL-LEAKS-RAW-CODES). The old hash was
* URL-encoded JSON -- #f=%7B%22affinity_bloc%22%3A%22A008%22%7D -- unreadable twice over: JSON
* punctuation percent-escaped, and the value a bare API code. A URL is the one part of the
* product a user COPIES, PASTES and READS, and for sensitive population data a link you cannot
* sanity-check before clicking is a real cost. The format is now
*
* #f=affinity_bloc:A008*malay-peoples;religion_family:Hinduism
*
* -- the Stack Overflow /questions/123/slug pattern: the CODE is canonical and the *slug is
* DISPLAY-ONLY, appended from labelFor() at share time and STRIPPED on parse. Restoring never
* reads the slug, so links stay locale-independent and survive label renames (the card's
* explicit constraint: keep the code canonical, do not swap in localized labels).
*
* `*` is safe as the slug separator because escapeValue() percent-encodes any literal `*` in
* the VALUE first -- the separator cannot collide with content. `;` and `:` are legal fragment
* chars, so the whole thing stays legible in the address bar. Legacy JSON hashes (old shared
* links) are detected by their leading `{` / %7B and still restore.
*/
const slugify = (s) => String(s ?? '').toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '').slice(0, 40)
// Minimal escaping, maximal legibility: reserve our three delimiters + %, keep spaces as `+`
// (the x-www-form-urlencoded convention), leave everything else -- including unicode -- alone.
// `,` joins the values of ONE key (D1: OR-within-key). It is reserved here for the same reason
// `;` `:` and `*` already are — a delimiter that can also occur inside a value is not a
// delimiter — so a literal comma in a facet value is percent-encoded before the join.
const escapeValue = (s) => String(s).replace(/[%;:*+,]/g, (c) => '%' + c.charCodeAt(0).toString(16).toUpperCase()).replace(/ /g, '+')
const unescapeValue = (s) => { try { return decodeURIComponent(String(s).replace(/\+/g, '%20')) } catch (_) { return String(s).replace(/\+/g, ' ') } }
function useHashSync(bus, labelFor) {
function syncHash() {
try {
const pairs = Object.entries(bus.filterSet).map(([k, v]) => {
// A MULTI-VALUE KEY KEEPS THE CODE CANONICAL AND DROPS THE SLUG. The `*slug` is
// display-only and singular by construction — one human name for one code — so there is no
// honest slug for "these twenty-two codes". Writing one would put a label in a URL that
// does not describe what the URL selects, and the slug is already stripped on parse.
if (Array.isArray(v)) return k + ':' + v.map(escapeValue).join(',')
const label = typeof labelFor === 'function' ? labelFor(k, v) : null
const slug = label && String(label) !== String(v) ? slugify(label) : ''
return k + ':' + escapeValue(v) + (slug ? '*' + slug : '')
})
if (typeof location !== 'undefined') history.replaceState(null, '', '#f=' + pairs.join(';'))
} catch (_) { /* sandboxed */ }
}
watch(() => ({ ...bus.filterSet }), syncHash, { deep: true })
onMounted(() => {
try {
const m = typeof location !== 'undefined' && /[#&]f=([^&]+)/.exec(location.hash)
if (!m) return
const raw = m[1]
if (raw.startsWith('{') || raw.startsWith('%7B') || raw.startsWith('%7b')) {
// legacy JSON hash from an old shared link
const obj = JSON.parse(decodeURIComponent(raw))
Object.entries(obj).forEach(([k, v]) => bus.setFilter(k, v))
return
}
for (const pair of raw.split(';')) {
const i = pair.indexOf(':')
if (i < 1) continue
const key = pair.slice(0, i)
const raw = pair.slice(i + 1).split('*')[0]
// Split BEFORE unescaping: a literal comma inside a value is percent-encoded by
// escapeValue, so every `,` still present here is a separator. Unescaping first would
// resurrect the content commas and split the value in half.
const parts = raw.split(',').map(unescapeValue).filter(Boolean)
if (key && parts.length) bus.setFilter(key, parts.length > 1 ? parts : parts[0])
}
} catch (_) { /* ignore bad hash */ }
})
}
// The shareable view-state hash moved to library/composables/useShareableView.js (persona card
// BUILD-SHAREABLE-FILTERED-TABLES). It was private to this file, so exactly one dashboard in the fleet
// could produce a share link; nothing in it was research-specific except its address. This dashboard
// supplies the one thing that is: labelFor, for the display-only *slug.
export function useDashboardShell(config) {
// One brushing-and-linking bus, provided to every panel (publisher + subscriber).
@ -307,7 +240,7 @@ export function useDashboardShell(config) {
// shareable view-state hash URL -- below labelFor on purpose: the hash's display-only slugs
// resolve through the SAME code->name resolver the chips and the CSV provenance line use.
useHashSync(bus, labelFor)
useShareableView(bus, { labelFor })
const exporter = useCsvExport({ rowStore: data.rowStore, rows: data.rows, selectionSet: bus.selectionSet, filterSet: bus.filterSet, FACET_ACC, dataOpts: config.data, labelFor, rowMatches: bus.rowMatchesFilters })
// ★ THE RESEARCH LEGEND, HANDED TO THE PANELS AS DATA (kit landing 4b).

View file

@ -103,9 +103,13 @@ const { createSelectionBus } = await import(BUS)
for (const [i, line] of readFileSync(p, 'utf8').split('\n').entries()) {
if (/^\s*(\/\/|\*)/.test(line)) continue // a comment quoting the old rule is fine
if (!/===\s*(bus\.)?filterSet\[/.test(line)) continue
// THE ONE ALLOWED SITE, named rather than pattern-matched: the exporter's parameter default,
// which keeps a pre-D1 caller working instead of throwing.
if (rel.endsWith('useCsvExport.js') && /rowMatches\s*=/.test(line)) continue
// ★ THE EXEMPTION THAT USED TO SIT HERE IS GONE, AND IT WAS WRONG. It allowed
// useCsvExport's default rowMatches to keep `=== filterSet[k]`, reasoning that the default only
// "keeps a pre-D1 caller working". MEASURED: there is no such caller. DashboardDataTable and
// DashboardDetailDrawer both use that default, so it was the LIVE path for two of three callers,
// and a multi-value filter made the export match nothing at all. An exemption is a claim about
// who is affected; this one was never checked, and the gate stayed green over a real defect on
// the file it was pointed at. The default is array-aware now, so nothing needs excusing.
fails.push(`B ${rel}:${i + 1} still compares with === against filterSet — with an array that matches NOTHING, and this panel would disagree with the others about what is on screen.\n ${line.trim().slice(0, 140)}`)
}
}
@ -114,10 +118,10 @@ const { createSelectionBus } = await import(BUS)
// ── C. the hash round-trips a list, commas and all ───────────────────────────────────────────
{
const src = readFileSync(join(ROOT, 'plugin-designs/research-dashboard/src/composables/useDashboardShell.js'), 'utf8')
const src = readFileSync(join(ROOT, 'library/composables/useShareableView.js'), 'utf8')
const esc = /const escapeValue = (\(s\) =>[^\n]*)/.exec(src)
const unesc = /const unescapeValue = (\(s\) =>[^\n]*)/.exec(src)
if (!esc || !unesc) fails.push('C could not lift escapeValue/unescapeValue from useDashboardShell.js — the hash format moved and this gate is blind to it.')
if (!esc || !unesc) fails.push('C could not lift escapeValue/unescapeValue from useShareableView.js — the hash format moved and this gate is blind to it.')
else {
const escapeValue = new Function('return ' + esc[1])()
const unescapeValue = new Function('return ' + unesc[1])()

File diff suppressed because one or more lines are too long

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <all-people-groups> custom element. -->
<script src="../all-people-groups.js" integrity="sha384-zrzOkT5xghLfaytb9COJwrUmkUvDkImG0qcjQAHbpyUpoBlX5CrOALAdAm7SwJVX" crossorigin="anonymous"></script>
<script src="../all-people-groups.js" integrity="sha384-qCQm12NgACLW6tOMUF56Qz3IOJwRVG92GUV4E5jW/LdBOahpWoYL1HNQDGrC/p1c" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -32,7 +32,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <cities-internet-map> custom element. -->
<script src="../cities-internet.js" integrity="sha384-FhmynKDd3TqMilfR76AGxwHzv873Ze2a3PfZneTV+PkuoaieQQ8MjU1iP5N7iGGD" crossorigin="anonymous"></script>
<script src="../cities-internet.js" integrity="sha384-TwOD7fmnOQ6csk7uTCIgF36WWxkuh7aEFWakDUCSJ/O+z4ASoukbnNER7FmZxuN2" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <cities-internet-map> custom element. -->
<script src="../cities-internet.js" integrity="sha384-FhmynKDd3TqMilfR76AGxwHzv873Ze2a3PfZneTV+PkuoaieQQ8MjU1iP5N7iGGD" crossorigin="anonymous"></script>
<script src="../cities-internet.js" integrity="sha384-TwOD7fmnOQ6csk7uTCIgF36WWxkuh7aEFWakDUCSJ/O+z4ASoukbnNER7FmZxuN2" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -32,7 +32,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <cities-internet-map> custom element. -->
<script src="../cities-internet.js" integrity="sha384-FhmynKDd3TqMilfR76AGxwHzv873Ze2a3PfZneTV+PkuoaieQQ8MjU1iP5N7iGGD" crossorigin="anonymous"></script>
<script src="../cities-internet.js" integrity="sha384-TwOD7fmnOQ6csk7uTCIgF36WWxkuh7aEFWakDUCSJ/O+z4ASoukbnNER7FmZxuN2" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <country-posters-map> custom element. -->
<script src="../country-posters.js" integrity="sha384-HEvZ5xx8UILDjE8vUudFkylu3k8J01QZRx+ksMoZNHm6qejhiu4Inma/6qS7Y+lu" crossorigin="anonymous"></script>
<script src="../country-posters.js" integrity="sha384-uPBJD/o6YHeWBccAOE1YKq93bPkZJ9nUsMXeXFtNjvLfV8pv6SsVcil/NHclJQZy" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -32,7 +32,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <country-posters-map> custom element. -->
<script src="../country-posters.js" integrity="sha384-HEvZ5xx8UILDjE8vUudFkylu3k8J01QZRx+ksMoZNHm6qejhiu4Inma/6qS7Y+lu" crossorigin="anonymous"></script>
<script src="../country-posters.js" integrity="sha384-uPBJD/o6YHeWBccAOE1YKq93bPkZJ9nUsMXeXFtNjvLfV8pv6SsVcil/NHclJQZy" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -47,7 +47,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <country-posters-map> custom element. -->
<script src="../country-posters.js" integrity="sha384-HEvZ5xx8UILDjE8vUudFkylu3k8J01QZRx+ksMoZNHm6qejhiu4Inma/6qS7Y+lu" crossorigin="anonymous"></script>
<script src="../country-posters.js" integrity="sha384-uPBJD/o6YHeWBccAOE1YKq93bPkZJ9nUsMXeXFtNjvLfV8pv6SsVcil/NHclJQZy" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -47,7 +47,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <dashboard-plus-grid> custom element. -->
<script src="../../dashboard-plus-grid.js" integrity="sha384-G2cfmNzjdjkx6ZLplzjiMJ/zUO5UzGNUprk+Uo409T5tqQkFk7qD4RkFsn4mzOZv" crossorigin="anonymous"></script>
<script src="../../dashboard-plus-grid.js" integrity="sha384-jzs17zacTcbz1iMlQAflSUHs4IwHWuRzPZGofVEqcN2tPB9mS0Y7fr37v2xnvq4m" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -47,7 +47,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <dashboard-plus-grid> custom element. -->
<script src="../dashboard-plus-grid.js" integrity="sha384-G2cfmNzjdjkx6ZLplzjiMJ/zUO5UzGNUprk+Uo409T5tqQkFk7qD4RkFsn4mzOZv" crossorigin="anonymous"></script>
<script src="../dashboard-plus-grid.js" integrity="sha384-jzs17zacTcbz1iMlQAflSUHs4IwHWuRzPZGofVEqcN2tPB9mS0Y7fr37v2xnvq4m" 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

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <demo-map> custom element. -->
<script src="../demo-map.js" integrity="sha384-nYV9Db+AoEZQTeqvBVIwKwVPkCIV83aUXnQYjxPvMDH6l48G2WSmp1PQFuHQ3a6L" crossorigin="anonymous"></script>
<script src="../demo-map.js" integrity="sha384-micDngh8PdY/QHDVsjXgbzk0uZXXe0OwKEAYSEwxSrbB9GzBOiM5jcTrjTtMsH95" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -33,7 +33,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <demo-map> custom element. -->
<script src="../../demo-map.js" integrity="sha384-nYV9Db+AoEZQTeqvBVIwKwVPkCIV83aUXnQYjxPvMDH6l48G2WSmp1PQFuHQ3a6L" crossorigin="anonymous"></script>
<script src="../../demo-map.js" integrity="sha384-micDngh8PdY/QHDVsjXgbzk0uZXXe0OwKEAYSEwxSrbB9GzBOiM5jcTrjTtMsH95" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -12,7 +12,7 @@
"bundle": "all-people-groups",
"scriptUrl": "./all-people-groups/all-people-groups.js",
"output": "dx-maps/all-people-groups/all-people-groups.js",
"integrity": "sha384-zrzOkT5xghLfaytb9COJwrUmkUvDkImG0qcjQAHbpyUpoBlX5CrOALAdAm7SwJVX",
"integrity": "sha384-qCQm12NgACLW6tOMUF56Qz3IOJwRVG92GUV4E5jW/LdBOahpWoYL1HNQDGrC/p1c",
"elements": [
"all-people-groups"
],
@ -30,7 +30,7 @@
"scriptUrl": "./all-people-groups/all-people-groups.js",
"embed": {
"iframe": "<iframe src=\"./all-people-groups/all-people-groups/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./all-people-groups/all-people-groups.js\" integrity=\"sha384-zrzOkT5xghLfaytb9COJwrUmkUvDkImG0qcjQAHbpyUpoBlX5CrOALAdAm7SwJVX\" crossorigin=\"anonymous\"></script>\n<all-people-groups profile-config='{\"profile\":\"all-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></all-people-groups>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./all-people-groups/all-people-groups.js\" integrity=\"sha384-qCQm12NgACLW6tOMUF56Qz3IOJwRVG92GUV4E5jW/LdBOahpWoYL1HNQDGrC/p1c\" crossorigin=\"anonymous\"></script>\n<all-people-groups profile-config='{\"profile\":\"all-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></all-people-groups>"
},
"bundle": "all-people-groups"
}
@ -108,7 +108,7 @@
"bundle": "cities-internet",
"scriptUrl": "./cities-internet/cities-internet.js",
"output": "dx-maps/cities-internet/cities-internet.js",
"integrity": "sha384-FhmynKDd3TqMilfR76AGxwHzv873Ze2a3PfZneTV+PkuoaieQQ8MjU1iP5N7iGGD",
"integrity": "sha384-TwOD7fmnOQ6csk7uTCIgF36WWxkuh7aEFWakDUCSJ/O+z4ASoukbnNER7FmZxuN2",
"elements": [
"cities-internet-map"
],
@ -126,7 +126,7 @@
"scriptUrl": "./cities-internet/cities-internet.js",
"embed": {
"iframe": "<iframe src=\"./cities-internet/connectivity-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=\"./cities-internet/cities-internet.js\" integrity=\"sha384-FhmynKDd3TqMilfR76AGxwHzv873Ze2a3PfZneTV+PkuoaieQQ8MjU1iP5N7iGGD\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-TwOD7fmnOQ6csk7uTCIgF36WWxkuh7aEFWakDUCSJ/O+z4ASoukbnNER7FmZxuN2\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
}
},
{
@ -141,7 +141,7 @@
"scriptUrl": "./cities-internet/cities-internet.js",
"embed": {
"iframe": "<iframe src=\"./cities-internet/connectivity-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-FhmynKDd3TqMilfR76AGxwHzv873Ze2a3PfZneTV+PkuoaieQQ8MjU1iP5N7iGGD\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-TwOD7fmnOQ6csk7uTCIgF36WWxkuh7aEFWakDUCSJ/O+z4ASoukbnNER7FmZxuN2\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
}
},
{
@ -156,7 +156,7 @@
"scriptUrl": "./cities-internet/cities-internet.js",
"embed": {
"iframe": "<iframe src=\"./cities-internet/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=\"./cities-internet/cities-internet.js\" integrity=\"sha384-FhmynKDd3TqMilfR76AGxwHzv873Ze2a3PfZneTV+PkuoaieQQ8MjU1iP5N7iGGD\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-TwOD7fmnOQ6csk7uTCIgF36WWxkuh7aEFWakDUCSJ/O+z4ASoukbnNER7FmZxuN2\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
}
}
]
@ -165,7 +165,7 @@
"bundle": "country-posters",
"scriptUrl": "./country-posters/country-posters.js",
"output": "dx-maps/country-posters/country-posters.js",
"integrity": "sha384-HEvZ5xx8UILDjE8vUudFkylu3k8J01QZRx+ksMoZNHm6qejhiu4Inma/6qS7Y+lu",
"integrity": "sha384-uPBJD/o6YHeWBccAOE1YKq93bPkZJ9nUsMXeXFtNjvLfV8pv6SsVcil/NHclJQZy",
"elements": [
"country-posters-map"
],
@ -187,7 +187,7 @@
"scriptUrl": "./country-posters/country-posters.js",
"embed": {
"iframe": "<iframe src=\"./country-posters/countries-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-HEvZ5xx8UILDjE8vUudFkylu3k8J01QZRx+ksMoZNHm6qejhiu4Inma/6qS7Y+lu\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-uPBJD/o6YHeWBccAOE1YKq93bPkZJ9nUsMXeXFtNjvLfV8pv6SsVcil/NHclJQZy\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
}
},
{
@ -202,7 +202,7 @@
"scriptUrl": "./country-posters/country-posters.js",
"embed": {
"iframe": "<iframe src=\"./country-posters/country-poster-wall/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=\"./country-posters/country-posters.js\" integrity=\"sha384-HEvZ5xx8UILDjE8vUudFkylu3k8J01QZRx+ksMoZNHm6qejhiu4Inma/6qS7Y+lu\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-uPBJD/o6YHeWBccAOE1YKq93bPkZJ9nUsMXeXFtNjvLfV8pv6SsVcil/NHclJQZy\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
}
},
{
@ -217,7 +217,7 @@
"scriptUrl": "./country-posters/country-posters.js",
"embed": {
"iframe": "<iframe src=\"./country-posters/country-posters-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-HEvZ5xx8UILDjE8vUudFkylu3k8J01QZRx+ksMoZNHm6qejhiu4Inma/6qS7Y+lu\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-posters-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-uPBJD/o6YHeWBccAOE1YKq93bPkZJ9nUsMXeXFtNjvLfV8pv6SsVcil/NHclJQZy\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-posters-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
}
}
]
@ -226,7 +226,7 @@
"bundle": "dashboard-plus-grid",
"scriptUrl": "./dashboard-plus-grid/dashboard-plus-grid.js",
"output": "dx-maps/dashboard-plus-grid/dashboard-plus-grid.js",
"integrity": "sha384-G2cfmNzjdjkx6ZLplzjiMJ/zUO5UzGNUprk+Uo409T5tqQkFk7qD4RkFsn4mzOZv",
"integrity": "sha384-jzs17zacTcbz1iMlQAflSUHs4IwHWuRzPZGofVEqcN2tPB9mS0Y7fr37v2xnvq4m",
"elements": [
"dashboard-plus-grid"
],
@ -248,7 +248,7 @@
"scriptUrl": "./dashboard-plus-grid/dashboard-plus-grid.js",
"embed": {
"iframe": "<iframe src=\"./dashboard-plus-grid/dashboard-plus-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./dashboard-plus-grid/dashboard-plus-grid.js\" integrity=\"sha384-G2cfmNzjdjkx6ZLplzjiMJ/zUO5UzGNUprk+Uo409T5tqQkFk7qD4RkFsn4mzOZv\" crossorigin=\"anonymous\"></script>\n<dashboard-plus-grid profile-config='{\"profile\":\"dashboard-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></dashboard-plus-grid>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./dashboard-plus-grid/dashboard-plus-grid.js\" integrity=\"sha384-jzs17zacTcbz1iMlQAflSUHs4IwHWuRzPZGofVEqcN2tPB9mS0Y7fr37v2xnvq4m\" crossorigin=\"anonymous\"></script>\n<dashboard-plus-grid profile-config='{\"profile\":\"dashboard-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></dashboard-plus-grid>"
},
"instances": [
{
@ -272,7 +272,7 @@
"bundle": "demo-map",
"scriptUrl": "./demo-map/demo-map.js",
"output": "dx-maps/demo-map/demo-map.js",
"integrity": "sha384-nYV9Db+AoEZQTeqvBVIwKwVPkCIV83aUXnQYjxPvMDH6l48G2WSmp1PQFuHQ3a6L",
"integrity": "sha384-micDngh8PdY/QHDVsjXgbzk0uZXXe0OwKEAYSEwxSrbB9GzBOiM5jcTrjTtMsH95",
"elements": [
"demo-map"
],
@ -290,7 +290,7 @@
"scriptUrl": "./demo-map/demo-map.js",
"embed": {
"iframe": "<iframe src=\"./demo-map/demo-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./demo-map/demo-map.js\" integrity=\"sha384-nYV9Db+AoEZQTeqvBVIwKwVPkCIV83aUXnQYjxPvMDH6l48G2WSmp1PQFuHQ3a6L\" crossorigin=\"anonymous\"></script>\n<demo-map profile-config='{\"profile\":\"demo-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></demo-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./demo-map/demo-map.js\" integrity=\"sha384-micDngh8PdY/QHDVsjXgbzk0uZXXe0OwKEAYSEwxSrbB9GzBOiM5jcTrjTtMsH95\" crossorigin=\"anonymous\"></script>\n<demo-map profile-config='{\"profile\":\"demo-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></demo-map>"
},
"instances": [
{
@ -371,7 +371,7 @@
"bundle": "doxa-research-map",
"scriptUrl": "./doxa-research-map/doxa-research-map.js",
"output": "dx-maps/doxa-research-map/doxa-research-map.js",
"integrity": "sha384-nvEsrjOc4wP/sm0C7SK+Nbwx8v37Nosk7/j9/MNby4HNVbnL1WR5+vjvK6x5u3CP",
"integrity": "sha384-zU0HieHgiOIRGn6XLSnJwgL+y9ZGkp28cCSAGDsKrERR0dGmybefp1M7FlA3IZh7",
"elements": [
"doxa-research-map"
],
@ -389,7 +389,7 @@
"scriptUrl": "./doxa-research-map/doxa-research-map.js",
"embed": {
"iframe": "<iframe src=\"./doxa-research-map/research-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-nvEsrjOc4wP/sm0C7SK+Nbwx8v37Nosk7/j9/MNby4HNVbnL1WR5+vjvK6x5u3CP\" crossorigin=\"anonymous\"></script>\n<doxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-research-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-zU0HieHgiOIRGn6XLSnJwgL+y9ZGkp28cCSAGDsKrERR0dGmybefp1M7FlA3IZh7\" crossorigin=\"anonymous\"></script>\n<doxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-research-map>"
},
"instances": [
{
@ -415,7 +415,7 @@
"bundle": "doxa-simple-map",
"scriptUrl": "./doxa-simple-map/doxa-simple-map.js",
"output": "dx-maps/doxa-simple-map/doxa-simple-map.js",
"integrity": "sha384-fsv4/TB74oOcdaMNskg5QrKWG1nD7uRfzKoRVtvslWXYUEselscB538g003Z1Ovh",
"integrity": "sha384-k6/TNpL9/r368OLX1pUL3RdsIep5xbqAnf7QmeYQYXYeU3GuDcCOJPwWp0IYqjXg",
"elements": [
"doxa-map",
"doxa-simple-map"
@ -434,7 +434,7 @@
"scriptUrl": "./doxa-simple-map/doxa-simple-map.js",
"embed": {
"iframe": "<iframe src=\"./doxa-simple-map/doxa-simple-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-fsv4/TB74oOcdaMNskg5QrKWG1nD7uRfzKoRVtvslWXYUEselscB538g003Z1Ovh\" crossorigin=\"anonymous\"></script>\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-k6/TNpL9/r368OLX1pUL3RdsIep5xbqAnf7QmeYQYXYeU3GuDcCOJPwWp0IYqjXg\" crossorigin=\"anonymous\"></script>\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-map>"
},
"instances": [
{
@ -604,7 +604,7 @@
"bundle": "gospel-internet",
"scriptUrl": "./gospel-internet/gospel-internet.js",
"output": "dx-maps/gospel-internet/gospel-internet.js",
"integrity": "sha384-Vwv3ZEccogXwzNezlI5HyBQdg1bBdcvkBiLlapaQvCorFgRy4MM3qFp9GqK1GDuN",
"integrity": "sha384-2bppgEwyX8xf+X/vSiwGTNsUqfhoYNJwOJ/M0QJxGs9PBlXZ2p+ZJNnUjM3AJ5lH",
"elements": [
"gospel-internet-board"
],
@ -623,7 +623,7 @@
"scriptUrl": "./gospel-internet/gospel-internet.js",
"embed": {
"iframe": "<iframe src=\"./gospel-internet/board/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-internet/gospel-internet.js\" integrity=\"sha384-Vwv3ZEccogXwzNezlI5HyBQdg1bBdcvkBiLlapaQvCorFgRy4MM3qFp9GqK1GDuN\" crossorigin=\"anonymous\"></script>\n<gospel-internet-board profile-config='{\"profile\":\"board\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-internet-board>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-internet/gospel-internet.js\" integrity=\"sha384-2bppgEwyX8xf+X/vSiwGTNsUqfhoYNJwOJ/M0QJxGs9PBlXZ2p+ZJNnUjM3AJ5lH\" crossorigin=\"anonymous\"></script>\n<gospel-internet-board profile-config='{\"profile\":\"board\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-internet-board>"
},
"instances": [
{
@ -723,7 +723,7 @@
"bundle": "gospel-resources",
"scriptUrl": "./gospel-resources/gospel-resources.js",
"output": "dx-maps/gospel-resources/gospel-resources.js",
"integrity": "sha384-aKpUyz83c4v1tr9Gw3WZXUrV9uHooGufTCwRzY9cXYb4+K6ed3EDYHrkzwgg7AOp",
"integrity": "sha384-7b6f5cIAt5G2cTORFnvr4Bt5omyAydytpoYoiEkBZHxfKAoBEgc9Ah2l6WO9Fmln",
"elements": [
"gospel-resources-map"
],
@ -745,7 +745,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-aKpUyz83c4v1tr9Gw3WZXUrV9uHooGufTCwRzY9cXYb4+K6ed3EDYHrkzwgg7AOp\" 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-7b6f5cIAt5G2cTORFnvr4Bt5omyAydytpoYoiEkBZHxfKAoBEgc9Ah2l6WO9Fmln\" 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>"
}
},
{
@ -760,7 +760,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-aKpUyz83c4v1tr9Gw3WZXUrV9uHooGufTCwRzY9cXYb4+K6ed3EDYHrkzwgg7AOp\" 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-7b6f5cIAt5G2cTORFnvr4Bt5omyAydytpoYoiEkBZHxfKAoBEgc9Ah2l6WO9Fmln\" 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>"
}
},
{
@ -775,7 +775,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. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-aKpUyz83c4v1tr9Gw3WZXUrV9uHooGufTCwRzY9cXYb4+K6ed3EDYHrkzwgg7AOp\" 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. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-7b6f5cIAt5G2cTORFnvr4Bt5omyAydytpoYoiEkBZHxfKAoBEgc9Ah2l6WO9Fmln\" 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>"
}
},
{
@ -790,7 +790,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-aKpUyz83c4v1tr9Gw3WZXUrV9uHooGufTCwRzY9cXYb4+K6ed3EDYHrkzwgg7AOp\" 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-7b6f5cIAt5G2cTORFnvr4Bt5omyAydytpoYoiEkBZHxfKAoBEgc9Ah2l6WO9Fmln\" 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>"
}
},
{
@ -805,7 +805,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. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-aKpUyz83c4v1tr9Gw3WZXUrV9uHooGufTCwRzY9cXYb4+K6ed3EDYHrkzwgg7AOp\" 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. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-7b6f5cIAt5G2cTORFnvr4Bt5omyAydytpoYoiEkBZHxfKAoBEgc9Ah2l6WO9Fmln\" 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>"
}
}
]
@ -814,7 +814,7 @@
"bundle": "my-upg-100-list",
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
"output": "dx-maps/my-upg-100-list/my-upg-100-list.js",
"integrity": "sha384-kAJ2/CjsYLX4aVcdO5YHz7u2pqI2xtYB8QxYt10boDLNOr9f0SvZxs/ktFyzU2Mq",
"integrity": "sha384-6ChLrNsMHRMc1NU9dvwah0f814ybN3kYagwHjsd9wp10+gPIiFF5UNyPrck2X9hQ",
"elements": [
"my-upg-100-list-map"
],
@ -836,7 +836,7 @@
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
"embed": {
"iframe": "<iframe src=\"./my-upg-100-list/poster-wall/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=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-kAJ2/CjsYLX4aVcdO5YHz7u2pqI2xtYB8QxYt10boDLNOr9f0SvZxs/ktFyzU2Mq\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-6ChLrNsMHRMc1NU9dvwah0f814ybN3kYagwHjsd9wp10+gPIiFF5UNyPrck2X9hQ\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
}
},
{
@ -851,7 +851,7 @@
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
"embed": {
"iframe": "<iframe src=\"./my-upg-100-list/upg-100-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-kAJ2/CjsYLX4aVcdO5YHz7u2pqI2xtYB8QxYt10boDLNOr9f0SvZxs/ktFyzU2Mq\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-6ChLrNsMHRMc1NU9dvwah0f814ybN3kYagwHjsd9wp10+gPIiFF5UNyPrck2X9hQ\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
}
},
{
@ -866,7 +866,7 @@
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
"embed": {
"iframe": "<iframe src=\"./my-upg-100-list/upg-100-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-kAJ2/CjsYLX4aVcdO5YHz7u2pqI2xtYB8QxYt10boDLNOr9f0SvZxs/ktFyzU2Mq\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-6ChLrNsMHRMc1NU9dvwah0f814ybN3kYagwHjsd9wp10+gPIiFF5UNyPrck2X9hQ\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
}
}
]
@ -995,7 +995,7 @@
"bundle": "pplr-data-maps",
"scriptUrl": "./pplr-data-maps/pplr-data-maps.js",
"output": "dx-maps/pplr-data-maps/pplr-data-maps.js",
"integrity": "sha384-DeOrKZESmOQEoz2uX+SySLcJWlC7p2rqmleM0kAyqj89cz6kfokc4Hc8T1EEtCr1",
"integrity": "sha384-qsKXGlXM1Aad4KY9LnJsEV8ZxdwNGBx7e82NQFc3WjByi+Ym8X1D9I0KUNKAF36P",
"elements": [
"pplr-data-maps"
],
@ -1013,7 +1013,7 @@
"scriptUrl": "./pplr-data-maps/pplr-data-maps.js",
"embed": {
"iframe": "<iframe src=\"./pplr-data-maps/pplr-data-maps/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./pplr-data-maps/pplr-data-maps.js\" integrity=\"sha384-DeOrKZESmOQEoz2uX+SySLcJWlC7p2rqmleM0kAyqj89cz6kfokc4Hc8T1EEtCr1\" crossorigin=\"anonymous\"></script>\n<pplr-data-maps profile-config='{\"profile\":\"pplr-data-maps\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></pplr-data-maps>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./pplr-data-maps/pplr-data-maps.js\" integrity=\"sha384-qsKXGlXM1Aad4KY9LnJsEV8ZxdwNGBx7e82NQFc3WjByi+Ym8X1D9I0KUNKAF36P\" crossorigin=\"anonymous\"></script>\n<pplr-data-maps profile-config='{\"profile\":\"pplr-data-maps\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></pplr-data-maps>"
},
"bundle": "pplr-data-maps"
}
@ -1050,7 +1050,7 @@
"bundle": "regions-dashboard",
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"output": "dx-maps/regions-dashboard/regions-dashboard.js",
"integrity": "sha384-HK5vl0Oz39LB5+RpGjd9g3XphsfAw1eXEEMobNcvHM61XL8iiuHmfOx9VJms5qAn",
"integrity": "sha384-R0l3/WZCOmxiS/PQEVM4UmRr20kFwgRrILGeSZCJLYcw3Y0TxYb7e/Uyw1CWSSdC",
"elements": [
"regions-dashboard"
],
@ -1072,7 +1072,7 @@
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"embed": {
"iframe": "<iframe src=\"./regions-dashboard/region-dashboards/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-HK5vl0Oz39LB5+RpGjd9g3XphsfAw1eXEEMobNcvHM61XL8iiuHmfOx9VJms5qAn\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-R0l3/WZCOmxiS/PQEVM4UmRr20kFwgRrILGeSZCJLYcw3Y0TxYb7e/Uyw1CWSSdC\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
}
},
{
@ -1087,7 +1087,7 @@
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"embed": {
"iframe": "<iframe src=\"./regions-dashboard/regions-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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-HK5vl0Oz39LB5+RpGjd9g3XphsfAw1eXEEMobNcvHM61XL8iiuHmfOx9VJms5qAn\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-R0l3/WZCOmxiS/PQEVM4UmRr20kFwgRrILGeSZCJLYcw3Y0TxYb7e/Uyw1CWSSdC\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
}
},
{
@ -1102,7 +1102,7 @@
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"embed": {
"iframe": "<iframe src=\"./regions-dashboard/regions-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-HK5vl0Oz39LB5+RpGjd9g3XphsfAw1eXEEMobNcvHM61XL8iiuHmfOx9VJms5qAn\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-R0l3/WZCOmxiS/PQEVM4UmRr20kFwgRrILGeSZCJLYcw3Y0TxYb7e/Uyw1CWSSdC\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
}
}
]
@ -1111,7 +1111,7 @@
"bundle": "research-dashboard",
"scriptUrl": "./research-dashboard/research-dashboard.js",
"output": "dx-maps/research-dashboard/research-dashboard.js",
"integrity": "sha384-vRwMaJ6+P+zSbdYMv+keN/GLHkreOcTAcFnmhKO/fpXstpdm74a7vc2MT5Wq5U7z",
"integrity": "sha384-04sJEsHVug5uhGZZ9xAljO58lXbtG3BKwxEsUP+niTz/8hzztOWOsB8Tr+yO3UyG",
"elements": [
"research-dashboard-map"
],
@ -1129,7 +1129,7 @@
"scriptUrl": "./research-dashboard/research-dashboard.js",
"embed": {
"iframe": "<iframe src=\"./research-dashboard/research-dashboard/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-vRwMaJ6+P+zSbdYMv+keN/GLHkreOcTAcFnmhKO/fpXstpdm74a7vc2MT5Wq5U7z\" crossorigin=\"anonymous\"></script>\n<research-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></research-dashboard-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-04sJEsHVug5uhGZZ9xAljO58lXbtG3BKwxEsUP+niTz/8hzztOWOsB8Tr+yO3UyG\" crossorigin=\"anonymous\"></script>\n<research-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></research-dashboard-map>"
},
"bundle": "research-dashboard"
}
@ -1261,7 +1261,7 @@
"bundle": "upg-neighbor",
"scriptUrl": "./upg-neighbor/upg-neighbor.js",
"output": "dx-maps/upg-neighbor/upg-neighbor.js",
"integrity": "sha384-GFo6dqHbhV+ugPrbWhpGfub2d9PQJZso+ATZm4jPsvTabn19jnMrEuc07PDNDIpl",
"integrity": "sha384-mXi3m3n1JQVpXo+qZcuCIa5QAO4Is0SZx4wPsdrWpN1ZMqxcGcyG505hveSyaaOh",
"elements": [
"upg-neighbor"
],
@ -1279,7 +1279,7 @@
"scriptUrl": "./upg-neighbor/upg-neighbor.js",
"embed": {
"iframe": "<iframe src=\"./upg-neighbor/upg-neighbor/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./upg-neighbor/upg-neighbor.js\" integrity=\"sha384-GFo6dqHbhV+ugPrbWhpGfub2d9PQJZso+ATZm4jPsvTabn19jnMrEuc07PDNDIpl\" crossorigin=\"anonymous\"></script>\n<upg-neighbor profile-config='{\"profile\":\"upg-neighbor\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></upg-neighbor>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./upg-neighbor/upg-neighbor.js\" integrity=\"sha384-mXi3m3n1JQVpXo+qZcuCIa5QAO4Is0SZx4wPsdrWpN1ZMqxcGcyG505hveSyaaOh\" crossorigin=\"anonymous\"></script>\n<upg-neighbor profile-config='{\"profile\":\"upg-neighbor\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></upg-neighbor>"
},
"instances": [
{
@ -1361,7 +1361,7 @@
"bundle": "wall-of-people-groups",
"scriptUrl": "./wall-of-people-groups/wall-of-people-groups.js",
"output": "dx-maps/wall-of-people-groups/wall-of-people-groups.js",
"integrity": "sha384-G5LZ3lYdghOqMnLCtpQF60kmQ1a1qCCTQlQB3BFCDotHj3/JvG8jecQvN9XEHRbe",
"integrity": "sha384-A+vu1hf7howC0G2DrCW13vkLMzn7tzd2cs9/90wPQG0/eRIdAL2gcsm8JbyV7Iv0",
"elements": [
"wall-of-people-groups"
],
@ -1379,7 +1379,7 @@
"scriptUrl": "./wall-of-people-groups/wall-of-people-groups.js",
"embed": {
"iframe": "<iframe src=\"./wall-of-people-groups/wall-of-people-groups/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=\"./wall-of-people-groups/wall-of-people-groups.js\" integrity=\"sha384-G5LZ3lYdghOqMnLCtpQF60kmQ1a1qCCTQlQB3BFCDotHj3/JvG8jecQvN9XEHRbe\" crossorigin=\"anonymous\"></script>\n<wall-of-people-groups profile-config='{\"profile\":\"wall-of-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></wall-of-people-groups>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./wall-of-people-groups/wall-of-people-groups.js\" integrity=\"sha384-A+vu1hf7howC0G2DrCW13vkLMzn7tzd2cs9/90wPQG0/eRIdAL2gcsm8JbyV7Iv0\" crossorigin=\"anonymous\"></script>\n<wall-of-people-groups profile-config='{\"profile\":\"wall-of-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></wall-of-people-groups>"
},
"bundle": "wall-of-people-groups"
}

File diff suppressed because one or more lines are too long

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <doxa-research-map> custom element. -->
<script src="../doxa-research-map.js" integrity="sha384-nvEsrjOc4wP/sm0C7SK+Nbwx8v37Nosk7/j9/MNby4HNVbnL1WR5+vjvK6x5u3CP" crossorigin="anonymous"></script>
<script src="../doxa-research-map.js" integrity="sha384-zU0HieHgiOIRGn6XLSnJwgL+y9ZGkp28cCSAGDsKrERR0dGmybefp1M7FlA3IZh7" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -33,7 +33,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <doxa-research-map> custom element. -->
<script src="../../doxa-research-map.js" integrity="sha384-nvEsrjOc4wP/sm0C7SK+Nbwx8v37Nosk7/j9/MNby4HNVbnL1WR5+vjvK6x5u3CP" crossorigin="anonymous"></script>
<script src="../../doxa-research-map.js" integrity="sha384-zU0HieHgiOIRGn6XLSnJwgL+y9ZGkp28cCSAGDsKrERR0dGmybefp1M7FlA3IZh7" 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

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
<script src="../../doxa-simple-map.js" integrity="sha384-fsv4/TB74oOcdaMNskg5QrKWG1nD7uRfzKoRVtvslWXYUEselscB538g003Z1Ovh" crossorigin="anonymous"></script>
<script src="../../doxa-simple-map.js" integrity="sha384-k6/TNpL9/r368OLX1pUL3RdsIep5xbqAnf7QmeYQYXYeU3GuDcCOJPwWp0IYqjXg" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
<script src="../../doxa-simple-map.js" integrity="sha384-fsv4/TB74oOcdaMNskg5QrKWG1nD7uRfzKoRVtvslWXYUEselscB538g003Z1Ovh" crossorigin="anonymous"></script>
<script src="../../doxa-simple-map.js" integrity="sha384-k6/TNpL9/r368OLX1pUL3RdsIep5xbqAnf7QmeYQYXYeU3GuDcCOJPwWp0IYqjXg" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
<script src="../doxa-simple-map.js" integrity="sha384-fsv4/TB74oOcdaMNskg5QrKWG1nD7uRfzKoRVtvslWXYUEselscB538g003Z1Ovh" crossorigin="anonymous"></script>
<script src="../doxa-simple-map.js" integrity="sha384-k6/TNpL9/r368OLX1pUL3RdsIep5xbqAnf7QmeYQYXYeU3GuDcCOJPwWp0IYqjXg" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
<script src="../../doxa-simple-map.js" integrity="sha384-fsv4/TB74oOcdaMNskg5QrKWG1nD7uRfzKoRVtvslWXYUEselscB538g003Z1Ovh" crossorigin="anonymous"></script>
<script src="../../doxa-simple-map.js" integrity="sha384-k6/TNpL9/r368OLX1pUL3RdsIep5xbqAnf7QmeYQYXYeU3GuDcCOJPwWp0IYqjXg" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
<script src="../../gospel-internet.js" integrity="sha384-Vwv3ZEccogXwzNezlI5HyBQdg1bBdcvkBiLlapaQvCorFgRy4MM3qFp9GqK1GDuN" crossorigin="anonymous"></script>
<script src="../../gospel-internet.js" integrity="sha384-2bppgEwyX8xf+X/vSiwGTNsUqfhoYNJwOJ/M0QJxGs9PBlXZ2p+ZJNnUjM3AJ5lH" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
<script src="../gospel-internet.js" integrity="sha384-Vwv3ZEccogXwzNezlI5HyBQdg1bBdcvkBiLlapaQvCorFgRy4MM3qFp9GqK1GDuN" crossorigin="anonymous"></script>
<script src="../gospel-internet.js" integrity="sha384-2bppgEwyX8xf+X/vSiwGTNsUqfhoYNJwOJ/M0QJxGs9PBlXZ2p+ZJNnUjM3AJ5lH" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
<script src="../../gospel-internet.js" integrity="sha384-Vwv3ZEccogXwzNezlI5HyBQdg1bBdcvkBiLlapaQvCorFgRy4MM3qFp9GqK1GDuN" crossorigin="anonymous"></script>
<script src="../../gospel-internet.js" integrity="sha384-2bppgEwyX8xf+X/vSiwGTNsUqfhoYNJwOJ/M0QJxGs9PBlXZ2p+ZJNnUjM3AJ5lH" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
<script src="../../gospel-internet.js" integrity="sha384-Vwv3ZEccogXwzNezlI5HyBQdg1bBdcvkBiLlapaQvCorFgRy4MM3qFp9GqK1GDuN" crossorigin="anonymous"></script>
<script src="../../gospel-internet.js" integrity="sha384-2bppgEwyX8xf+X/vSiwGTNsUqfhoYNJwOJ/M0QJxGs9PBlXZ2p+ZJNnUjM3AJ5lH" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
<script src="../../gospel-internet.js" integrity="sha384-Vwv3ZEccogXwzNezlI5HyBQdg1bBdcvkBiLlapaQvCorFgRy4MM3qFp9GqK1GDuN" crossorigin="anonymous"></script>
<script src="../../gospel-internet.js" integrity="sha384-2bppgEwyX8xf+X/vSiwGTNsUqfhoYNJwOJ/M0QJxGs9PBlXZ2p+ZJNnUjM3AJ5lH" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
<script src="../../gospel-internet.js" integrity="sha384-Vwv3ZEccogXwzNezlI5HyBQdg1bBdcvkBiLlapaQvCorFgRy4MM3qFp9GqK1GDuN" crossorigin="anonymous"></script>
<script src="../../gospel-internet.js" integrity="sha384-2bppgEwyX8xf+X/vSiwGTNsUqfhoYNJwOJ/M0QJxGs9PBlXZ2p+ZJNnUjM3AJ5lH" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
<script src="../../gospel-internet.js" integrity="sha384-Vwv3ZEccogXwzNezlI5HyBQdg1bBdcvkBiLlapaQvCorFgRy4MM3qFp9GqK1GDuN" crossorigin="anonymous"></script>
<script src="../../gospel-internet.js" integrity="sha384-2bppgEwyX8xf+X/vSiwGTNsUqfhoYNJwOJ/M0QJxGs9PBlXZ2p+ZJNnUjM3AJ5lH" 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

@ -32,7 +32,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-aKpUyz83c4v1tr9Gw3WZXUrV9uHooGufTCwRzY9cXYb4+K6ed3EDYHrkzwgg7AOp" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-7b6f5cIAt5G2cTORFnvr4Bt5omyAydytpoYoiEkBZHxfKAoBEgc9Ah2l6WO9Fmln" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -32,7 +32,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-aKpUyz83c4v1tr9Gw3WZXUrV9uHooGufTCwRzY9cXYb4+K6ed3EDYHrkzwgg7AOp" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-7b6f5cIAt5G2cTORFnvr4Bt5omyAydytpoYoiEkBZHxfKAoBEgc9Ah2l6WO9Fmln" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -47,7 +47,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-aKpUyz83c4v1tr9Gw3WZXUrV9uHooGufTCwRzY9cXYb4+K6ed3EDYHrkzwgg7AOp" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-7b6f5cIAt5G2cTORFnvr4Bt5omyAydytpoYoiEkBZHxfKAoBEgc9Ah2l6WO9Fmln" 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

@ -32,7 +32,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-aKpUyz83c4v1tr9Gw3WZXUrV9uHooGufTCwRzY9cXYb4+K6ed3EDYHrkzwgg7AOp" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-7b6f5cIAt5G2cTORFnvr4Bt5omyAydytpoYoiEkBZHxfKAoBEgc9Ah2l6WO9Fmln" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -36,7 +36,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-aKpUyz83c4v1tr9Gw3WZXUrV9uHooGufTCwRzY9cXYb4+K6ed3EDYHrkzwgg7AOp" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-7b6f5cIAt5G2cTORFnvr4Bt5omyAydytpoYoiEkBZHxfKAoBEgc9Ah2l6WO9Fmln" 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

@ -12,7 +12,7 @@
"bundle": "all-people-groups",
"scriptUrl": "./all-people-groups/all-people-groups.js",
"output": "dx-maps/all-people-groups/all-people-groups.js",
"integrity": "sha384-zrzOkT5xghLfaytb9COJwrUmkUvDkImG0qcjQAHbpyUpoBlX5CrOALAdAm7SwJVX",
"integrity": "sha384-qCQm12NgACLW6tOMUF56Qz3IOJwRVG92GUV4E5jW/LdBOahpWoYL1HNQDGrC/p1c",
"elements": [
"all-people-groups"
],
@ -30,7 +30,7 @@
"scriptUrl": "./all-people-groups/all-people-groups.js",
"embed": {
"iframe": "<iframe src=\"./all-people-groups/all-people-groups/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./all-people-groups/all-people-groups.js\" integrity=\"sha384-zrzOkT5xghLfaytb9COJwrUmkUvDkImG0qcjQAHbpyUpoBlX5CrOALAdAm7SwJVX\" crossorigin=\"anonymous\"></script>\n<all-people-groups profile-config='{\"profile\":\"all-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></all-people-groups>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./all-people-groups/all-people-groups.js\" integrity=\"sha384-qCQm12NgACLW6tOMUF56Qz3IOJwRVG92GUV4E5jW/LdBOahpWoYL1HNQDGrC/p1c\" crossorigin=\"anonymous\"></script>\n<all-people-groups profile-config='{\"profile\":\"all-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></all-people-groups>"
},
"bundle": "all-people-groups"
}
@ -108,7 +108,7 @@
"bundle": "cities-internet",
"scriptUrl": "./cities-internet/cities-internet.js",
"output": "dx-maps/cities-internet/cities-internet.js",
"integrity": "sha384-FhmynKDd3TqMilfR76AGxwHzv873Ze2a3PfZneTV+PkuoaieQQ8MjU1iP5N7iGGD",
"integrity": "sha384-TwOD7fmnOQ6csk7uTCIgF36WWxkuh7aEFWakDUCSJ/O+z4ASoukbnNER7FmZxuN2",
"elements": [
"cities-internet-map"
],
@ -126,7 +126,7 @@
"scriptUrl": "./cities-internet/cities-internet.js",
"embed": {
"iframe": "<iframe src=\"./cities-internet/connectivity-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=\"./cities-internet/cities-internet.js\" integrity=\"sha384-FhmynKDd3TqMilfR76AGxwHzv873Ze2a3PfZneTV+PkuoaieQQ8MjU1iP5N7iGGD\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-TwOD7fmnOQ6csk7uTCIgF36WWxkuh7aEFWakDUCSJ/O+z4ASoukbnNER7FmZxuN2\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
}
},
{
@ -141,7 +141,7 @@
"scriptUrl": "./cities-internet/cities-internet.js",
"embed": {
"iframe": "<iframe src=\"./cities-internet/connectivity-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-FhmynKDd3TqMilfR76AGxwHzv873Ze2a3PfZneTV+PkuoaieQQ8MjU1iP5N7iGGD\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-TwOD7fmnOQ6csk7uTCIgF36WWxkuh7aEFWakDUCSJ/O+z4ASoukbnNER7FmZxuN2\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
}
},
{
@ -156,7 +156,7 @@
"scriptUrl": "./cities-internet/cities-internet.js",
"embed": {
"iframe": "<iframe src=\"./cities-internet/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=\"./cities-internet/cities-internet.js\" integrity=\"sha384-FhmynKDd3TqMilfR76AGxwHzv873Ze2a3PfZneTV+PkuoaieQQ8MjU1iP5N7iGGD\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-TwOD7fmnOQ6csk7uTCIgF36WWxkuh7aEFWakDUCSJ/O+z4ASoukbnNER7FmZxuN2\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
}
}
]
@ -165,7 +165,7 @@
"bundle": "country-posters",
"scriptUrl": "./country-posters/country-posters.js",
"output": "dx-maps/country-posters/country-posters.js",
"integrity": "sha384-HEvZ5xx8UILDjE8vUudFkylu3k8J01QZRx+ksMoZNHm6qejhiu4Inma/6qS7Y+lu",
"integrity": "sha384-uPBJD/o6YHeWBccAOE1YKq93bPkZJ9nUsMXeXFtNjvLfV8pv6SsVcil/NHclJQZy",
"elements": [
"country-posters-map"
],
@ -187,7 +187,7 @@
"scriptUrl": "./country-posters/country-posters.js",
"embed": {
"iframe": "<iframe src=\"./country-posters/countries-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-HEvZ5xx8UILDjE8vUudFkylu3k8J01QZRx+ksMoZNHm6qejhiu4Inma/6qS7Y+lu\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-uPBJD/o6YHeWBccAOE1YKq93bPkZJ9nUsMXeXFtNjvLfV8pv6SsVcil/NHclJQZy\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
}
},
{
@ -202,7 +202,7 @@
"scriptUrl": "./country-posters/country-posters.js",
"embed": {
"iframe": "<iframe src=\"./country-posters/country-poster-wall/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=\"./country-posters/country-posters.js\" integrity=\"sha384-HEvZ5xx8UILDjE8vUudFkylu3k8J01QZRx+ksMoZNHm6qejhiu4Inma/6qS7Y+lu\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-uPBJD/o6YHeWBccAOE1YKq93bPkZJ9nUsMXeXFtNjvLfV8pv6SsVcil/NHclJQZy\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
}
},
{
@ -217,7 +217,7 @@
"scriptUrl": "./country-posters/country-posters.js",
"embed": {
"iframe": "<iframe src=\"./country-posters/country-posters-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-HEvZ5xx8UILDjE8vUudFkylu3k8J01QZRx+ksMoZNHm6qejhiu4Inma/6qS7Y+lu\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-posters-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-uPBJD/o6YHeWBccAOE1YKq93bPkZJ9nUsMXeXFtNjvLfV8pv6SsVcil/NHclJQZy\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-posters-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
}
}
]
@ -226,7 +226,7 @@
"bundle": "dashboard-plus-grid",
"scriptUrl": "./dashboard-plus-grid/dashboard-plus-grid.js",
"output": "dx-maps/dashboard-plus-grid/dashboard-plus-grid.js",
"integrity": "sha384-G2cfmNzjdjkx6ZLplzjiMJ/zUO5UzGNUprk+Uo409T5tqQkFk7qD4RkFsn4mzOZv",
"integrity": "sha384-jzs17zacTcbz1iMlQAflSUHs4IwHWuRzPZGofVEqcN2tPB9mS0Y7fr37v2xnvq4m",
"elements": [
"dashboard-plus-grid"
],
@ -248,7 +248,7 @@
"scriptUrl": "./dashboard-plus-grid/dashboard-plus-grid.js",
"embed": {
"iframe": "<iframe src=\"./dashboard-plus-grid/dashboard-plus-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./dashboard-plus-grid/dashboard-plus-grid.js\" integrity=\"sha384-G2cfmNzjdjkx6ZLplzjiMJ/zUO5UzGNUprk+Uo409T5tqQkFk7qD4RkFsn4mzOZv\" crossorigin=\"anonymous\"></script>\n<dashboard-plus-grid profile-config='{\"profile\":\"dashboard-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></dashboard-plus-grid>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./dashboard-plus-grid/dashboard-plus-grid.js\" integrity=\"sha384-jzs17zacTcbz1iMlQAflSUHs4IwHWuRzPZGofVEqcN2tPB9mS0Y7fr37v2xnvq4m\" crossorigin=\"anonymous\"></script>\n<dashboard-plus-grid profile-config='{\"profile\":\"dashboard-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></dashboard-plus-grid>"
},
"instances": [
{
@ -272,7 +272,7 @@
"bundle": "demo-map",
"scriptUrl": "./demo-map/demo-map.js",
"output": "dx-maps/demo-map/demo-map.js",
"integrity": "sha384-nYV9Db+AoEZQTeqvBVIwKwVPkCIV83aUXnQYjxPvMDH6l48G2WSmp1PQFuHQ3a6L",
"integrity": "sha384-micDngh8PdY/QHDVsjXgbzk0uZXXe0OwKEAYSEwxSrbB9GzBOiM5jcTrjTtMsH95",
"elements": [
"demo-map"
],
@ -290,7 +290,7 @@
"scriptUrl": "./demo-map/demo-map.js",
"embed": {
"iframe": "<iframe src=\"./demo-map/demo-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./demo-map/demo-map.js\" integrity=\"sha384-nYV9Db+AoEZQTeqvBVIwKwVPkCIV83aUXnQYjxPvMDH6l48G2WSmp1PQFuHQ3a6L\" crossorigin=\"anonymous\"></script>\n<demo-map profile-config='{\"profile\":\"demo-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></demo-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./demo-map/demo-map.js\" integrity=\"sha384-micDngh8PdY/QHDVsjXgbzk0uZXXe0OwKEAYSEwxSrbB9GzBOiM5jcTrjTtMsH95\" crossorigin=\"anonymous\"></script>\n<demo-map profile-config='{\"profile\":\"demo-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></demo-map>"
},
"instances": [
{
@ -371,7 +371,7 @@
"bundle": "doxa-research-map",
"scriptUrl": "./doxa-research-map/doxa-research-map.js",
"output": "dx-maps/doxa-research-map/doxa-research-map.js",
"integrity": "sha384-nvEsrjOc4wP/sm0C7SK+Nbwx8v37Nosk7/j9/MNby4HNVbnL1WR5+vjvK6x5u3CP",
"integrity": "sha384-zU0HieHgiOIRGn6XLSnJwgL+y9ZGkp28cCSAGDsKrERR0dGmybefp1M7FlA3IZh7",
"elements": [
"doxa-research-map"
],
@ -389,7 +389,7 @@
"scriptUrl": "./doxa-research-map/doxa-research-map.js",
"embed": {
"iframe": "<iframe src=\"./doxa-research-map/research-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-nvEsrjOc4wP/sm0C7SK+Nbwx8v37Nosk7/j9/MNby4HNVbnL1WR5+vjvK6x5u3CP\" crossorigin=\"anonymous\"></script>\n<doxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-research-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-zU0HieHgiOIRGn6XLSnJwgL+y9ZGkp28cCSAGDsKrERR0dGmybefp1M7FlA3IZh7\" crossorigin=\"anonymous\"></script>\n<doxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-research-map>"
},
"instances": [
{
@ -415,7 +415,7 @@
"bundle": "doxa-simple-map",
"scriptUrl": "./doxa-simple-map/doxa-simple-map.js",
"output": "dx-maps/doxa-simple-map/doxa-simple-map.js",
"integrity": "sha384-fsv4/TB74oOcdaMNskg5QrKWG1nD7uRfzKoRVtvslWXYUEselscB538g003Z1Ovh",
"integrity": "sha384-k6/TNpL9/r368OLX1pUL3RdsIep5xbqAnf7QmeYQYXYeU3GuDcCOJPwWp0IYqjXg",
"elements": [
"doxa-map",
"doxa-simple-map"
@ -434,7 +434,7 @@
"scriptUrl": "./doxa-simple-map/doxa-simple-map.js",
"embed": {
"iframe": "<iframe src=\"./doxa-simple-map/doxa-simple-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-fsv4/TB74oOcdaMNskg5QrKWG1nD7uRfzKoRVtvslWXYUEselscB538g003Z1Ovh\" crossorigin=\"anonymous\"></script>\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-k6/TNpL9/r368OLX1pUL3RdsIep5xbqAnf7QmeYQYXYeU3GuDcCOJPwWp0IYqjXg\" crossorigin=\"anonymous\"></script>\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-map>"
},
"instances": [
{
@ -604,7 +604,7 @@
"bundle": "gospel-internet",
"scriptUrl": "./gospel-internet/gospel-internet.js",
"output": "dx-maps/gospel-internet/gospel-internet.js",
"integrity": "sha384-Vwv3ZEccogXwzNezlI5HyBQdg1bBdcvkBiLlapaQvCorFgRy4MM3qFp9GqK1GDuN",
"integrity": "sha384-2bppgEwyX8xf+X/vSiwGTNsUqfhoYNJwOJ/M0QJxGs9PBlXZ2p+ZJNnUjM3AJ5lH",
"elements": [
"gospel-internet-board"
],
@ -623,7 +623,7 @@
"scriptUrl": "./gospel-internet/gospel-internet.js",
"embed": {
"iframe": "<iframe src=\"./gospel-internet/board/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-internet/gospel-internet.js\" integrity=\"sha384-Vwv3ZEccogXwzNezlI5HyBQdg1bBdcvkBiLlapaQvCorFgRy4MM3qFp9GqK1GDuN\" crossorigin=\"anonymous\"></script>\n<gospel-internet-board profile-config='{\"profile\":\"board\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-internet-board>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-internet/gospel-internet.js\" integrity=\"sha384-2bppgEwyX8xf+X/vSiwGTNsUqfhoYNJwOJ/M0QJxGs9PBlXZ2p+ZJNnUjM3AJ5lH\" crossorigin=\"anonymous\"></script>\n<gospel-internet-board profile-config='{\"profile\":\"board\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-internet-board>"
},
"instances": [
{
@ -723,7 +723,7 @@
"bundle": "gospel-resources",
"scriptUrl": "./gospel-resources/gospel-resources.js",
"output": "dx-maps/gospel-resources/gospel-resources.js",
"integrity": "sha384-aKpUyz83c4v1tr9Gw3WZXUrV9uHooGufTCwRzY9cXYb4+K6ed3EDYHrkzwgg7AOp",
"integrity": "sha384-7b6f5cIAt5G2cTORFnvr4Bt5omyAydytpoYoiEkBZHxfKAoBEgc9Ah2l6WO9Fmln",
"elements": [
"gospel-resources-map"
],
@ -745,7 +745,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-aKpUyz83c4v1tr9Gw3WZXUrV9uHooGufTCwRzY9cXYb4+K6ed3EDYHrkzwgg7AOp\" 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-7b6f5cIAt5G2cTORFnvr4Bt5omyAydytpoYoiEkBZHxfKAoBEgc9Ah2l6WO9Fmln\" 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>"
}
},
{
@ -760,7 +760,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-aKpUyz83c4v1tr9Gw3WZXUrV9uHooGufTCwRzY9cXYb4+K6ed3EDYHrkzwgg7AOp\" 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-7b6f5cIAt5G2cTORFnvr4Bt5omyAydytpoYoiEkBZHxfKAoBEgc9Ah2l6WO9Fmln\" 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>"
}
},
{
@ -775,7 +775,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. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-aKpUyz83c4v1tr9Gw3WZXUrV9uHooGufTCwRzY9cXYb4+K6ed3EDYHrkzwgg7AOp\" 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. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-7b6f5cIAt5G2cTORFnvr4Bt5omyAydytpoYoiEkBZHxfKAoBEgc9Ah2l6WO9Fmln\" 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>"
}
},
{
@ -790,7 +790,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-aKpUyz83c4v1tr9Gw3WZXUrV9uHooGufTCwRzY9cXYb4+K6ed3EDYHrkzwgg7AOp\" 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-7b6f5cIAt5G2cTORFnvr4Bt5omyAydytpoYoiEkBZHxfKAoBEgc9Ah2l6WO9Fmln\" 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>"
}
},
{
@ -805,7 +805,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. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-aKpUyz83c4v1tr9Gw3WZXUrV9uHooGufTCwRzY9cXYb4+K6ed3EDYHrkzwgg7AOp\" 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. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-7b6f5cIAt5G2cTORFnvr4Bt5omyAydytpoYoiEkBZHxfKAoBEgc9Ah2l6WO9Fmln\" 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>"
}
}
]
@ -814,7 +814,7 @@
"bundle": "my-upg-100-list",
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
"output": "dx-maps/my-upg-100-list/my-upg-100-list.js",
"integrity": "sha384-kAJ2/CjsYLX4aVcdO5YHz7u2pqI2xtYB8QxYt10boDLNOr9f0SvZxs/ktFyzU2Mq",
"integrity": "sha384-6ChLrNsMHRMc1NU9dvwah0f814ybN3kYagwHjsd9wp10+gPIiFF5UNyPrck2X9hQ",
"elements": [
"my-upg-100-list-map"
],
@ -836,7 +836,7 @@
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
"embed": {
"iframe": "<iframe src=\"./my-upg-100-list/poster-wall/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=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-kAJ2/CjsYLX4aVcdO5YHz7u2pqI2xtYB8QxYt10boDLNOr9f0SvZxs/ktFyzU2Mq\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-6ChLrNsMHRMc1NU9dvwah0f814ybN3kYagwHjsd9wp10+gPIiFF5UNyPrck2X9hQ\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
}
},
{
@ -851,7 +851,7 @@
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
"embed": {
"iframe": "<iframe src=\"./my-upg-100-list/upg-100-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-kAJ2/CjsYLX4aVcdO5YHz7u2pqI2xtYB8QxYt10boDLNOr9f0SvZxs/ktFyzU2Mq\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-6ChLrNsMHRMc1NU9dvwah0f814ybN3kYagwHjsd9wp10+gPIiFF5UNyPrck2X9hQ\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
}
},
{
@ -866,7 +866,7 @@
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
"embed": {
"iframe": "<iframe src=\"./my-upg-100-list/upg-100-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-kAJ2/CjsYLX4aVcdO5YHz7u2pqI2xtYB8QxYt10boDLNOr9f0SvZxs/ktFyzU2Mq\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-6ChLrNsMHRMc1NU9dvwah0f814ybN3kYagwHjsd9wp10+gPIiFF5UNyPrck2X9hQ\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
}
}
]
@ -995,7 +995,7 @@
"bundle": "pplr-data-maps",
"scriptUrl": "./pplr-data-maps/pplr-data-maps.js",
"output": "dx-maps/pplr-data-maps/pplr-data-maps.js",
"integrity": "sha384-DeOrKZESmOQEoz2uX+SySLcJWlC7p2rqmleM0kAyqj89cz6kfokc4Hc8T1EEtCr1",
"integrity": "sha384-qsKXGlXM1Aad4KY9LnJsEV8ZxdwNGBx7e82NQFc3WjByi+Ym8X1D9I0KUNKAF36P",
"elements": [
"pplr-data-maps"
],
@ -1013,7 +1013,7 @@
"scriptUrl": "./pplr-data-maps/pplr-data-maps.js",
"embed": {
"iframe": "<iframe src=\"./pplr-data-maps/pplr-data-maps/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./pplr-data-maps/pplr-data-maps.js\" integrity=\"sha384-DeOrKZESmOQEoz2uX+SySLcJWlC7p2rqmleM0kAyqj89cz6kfokc4Hc8T1EEtCr1\" crossorigin=\"anonymous\"></script>\n<pplr-data-maps profile-config='{\"profile\":\"pplr-data-maps\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></pplr-data-maps>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./pplr-data-maps/pplr-data-maps.js\" integrity=\"sha384-qsKXGlXM1Aad4KY9LnJsEV8ZxdwNGBx7e82NQFc3WjByi+Ym8X1D9I0KUNKAF36P\" crossorigin=\"anonymous\"></script>\n<pplr-data-maps profile-config='{\"profile\":\"pplr-data-maps\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></pplr-data-maps>"
},
"bundle": "pplr-data-maps"
}
@ -1050,7 +1050,7 @@
"bundle": "regions-dashboard",
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"output": "dx-maps/regions-dashboard/regions-dashboard.js",
"integrity": "sha384-HK5vl0Oz39LB5+RpGjd9g3XphsfAw1eXEEMobNcvHM61XL8iiuHmfOx9VJms5qAn",
"integrity": "sha384-R0l3/WZCOmxiS/PQEVM4UmRr20kFwgRrILGeSZCJLYcw3Y0TxYb7e/Uyw1CWSSdC",
"elements": [
"regions-dashboard"
],
@ -1072,7 +1072,7 @@
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"embed": {
"iframe": "<iframe src=\"./regions-dashboard/region-dashboards/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-HK5vl0Oz39LB5+RpGjd9g3XphsfAw1eXEEMobNcvHM61XL8iiuHmfOx9VJms5qAn\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-R0l3/WZCOmxiS/PQEVM4UmRr20kFwgRrILGeSZCJLYcw3Y0TxYb7e/Uyw1CWSSdC\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
}
},
{
@ -1087,7 +1087,7 @@
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"embed": {
"iframe": "<iframe src=\"./regions-dashboard/regions-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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-HK5vl0Oz39LB5+RpGjd9g3XphsfAw1eXEEMobNcvHM61XL8iiuHmfOx9VJms5qAn\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-R0l3/WZCOmxiS/PQEVM4UmRr20kFwgRrILGeSZCJLYcw3Y0TxYb7e/Uyw1CWSSdC\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
}
},
{
@ -1102,7 +1102,7 @@
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"embed": {
"iframe": "<iframe src=\"./regions-dashboard/regions-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-HK5vl0Oz39LB5+RpGjd9g3XphsfAw1eXEEMobNcvHM61XL8iiuHmfOx9VJms5qAn\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-R0l3/WZCOmxiS/PQEVM4UmRr20kFwgRrILGeSZCJLYcw3Y0TxYb7e/Uyw1CWSSdC\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
}
}
]
@ -1111,7 +1111,7 @@
"bundle": "research-dashboard",
"scriptUrl": "./research-dashboard/research-dashboard.js",
"output": "dx-maps/research-dashboard/research-dashboard.js",
"integrity": "sha384-vRwMaJ6+P+zSbdYMv+keN/GLHkreOcTAcFnmhKO/fpXstpdm74a7vc2MT5Wq5U7z",
"integrity": "sha384-04sJEsHVug5uhGZZ9xAljO58lXbtG3BKwxEsUP+niTz/8hzztOWOsB8Tr+yO3UyG",
"elements": [
"research-dashboard-map"
],
@ -1129,7 +1129,7 @@
"scriptUrl": "./research-dashboard/research-dashboard.js",
"embed": {
"iframe": "<iframe src=\"./research-dashboard/research-dashboard/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-vRwMaJ6+P+zSbdYMv+keN/GLHkreOcTAcFnmhKO/fpXstpdm74a7vc2MT5Wq5U7z\" crossorigin=\"anonymous\"></script>\n<research-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></research-dashboard-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-04sJEsHVug5uhGZZ9xAljO58lXbtG3BKwxEsUP+niTz/8hzztOWOsB8Tr+yO3UyG\" crossorigin=\"anonymous\"></script>\n<research-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></research-dashboard-map>"
},
"bundle": "research-dashboard"
}
@ -1261,7 +1261,7 @@
"bundle": "upg-neighbor",
"scriptUrl": "./upg-neighbor/upg-neighbor.js",
"output": "dx-maps/upg-neighbor/upg-neighbor.js",
"integrity": "sha384-GFo6dqHbhV+ugPrbWhpGfub2d9PQJZso+ATZm4jPsvTabn19jnMrEuc07PDNDIpl",
"integrity": "sha384-mXi3m3n1JQVpXo+qZcuCIa5QAO4Is0SZx4wPsdrWpN1ZMqxcGcyG505hveSyaaOh",
"elements": [
"upg-neighbor"
],
@ -1279,7 +1279,7 @@
"scriptUrl": "./upg-neighbor/upg-neighbor.js",
"embed": {
"iframe": "<iframe src=\"./upg-neighbor/upg-neighbor/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./upg-neighbor/upg-neighbor.js\" integrity=\"sha384-GFo6dqHbhV+ugPrbWhpGfub2d9PQJZso+ATZm4jPsvTabn19jnMrEuc07PDNDIpl\" crossorigin=\"anonymous\"></script>\n<upg-neighbor profile-config='{\"profile\":\"upg-neighbor\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></upg-neighbor>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./upg-neighbor/upg-neighbor.js\" integrity=\"sha384-mXi3m3n1JQVpXo+qZcuCIa5QAO4Is0SZx4wPsdrWpN1ZMqxcGcyG505hveSyaaOh\" crossorigin=\"anonymous\"></script>\n<upg-neighbor profile-config='{\"profile\":\"upg-neighbor\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></upg-neighbor>"
},
"instances": [
{
@ -1361,7 +1361,7 @@
"bundle": "wall-of-people-groups",
"scriptUrl": "./wall-of-people-groups/wall-of-people-groups.js",
"output": "dx-maps/wall-of-people-groups/wall-of-people-groups.js",
"integrity": "sha384-G5LZ3lYdghOqMnLCtpQF60kmQ1a1qCCTQlQB3BFCDotHj3/JvG8jecQvN9XEHRbe",
"integrity": "sha384-A+vu1hf7howC0G2DrCW13vkLMzn7tzd2cs9/90wPQG0/eRIdAL2gcsm8JbyV7Iv0",
"elements": [
"wall-of-people-groups"
],
@ -1379,7 +1379,7 @@
"scriptUrl": "./wall-of-people-groups/wall-of-people-groups.js",
"embed": {
"iframe": "<iframe src=\"./wall-of-people-groups/wall-of-people-groups/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=\"./wall-of-people-groups/wall-of-people-groups.js\" integrity=\"sha384-G5LZ3lYdghOqMnLCtpQF60kmQ1a1qCCTQlQB3BFCDotHj3/JvG8jecQvN9XEHRbe\" crossorigin=\"anonymous\"></script>\n<wall-of-people-groups profile-config='{\"profile\":\"wall-of-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></wall-of-people-groups>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./wall-of-people-groups/wall-of-people-groups.js\" integrity=\"sha384-A+vu1hf7howC0G2DrCW13vkLMzn7tzd2cs9/90wPQG0/eRIdAL2gcsm8JbyV7Iv0\" crossorigin=\"anonymous\"></script>\n<wall-of-people-groups profile-config='{\"profile\":\"wall-of-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></wall-of-people-groups>"
},
"bundle": "wall-of-people-groups"
}

File diff suppressed because one or more lines are too long

View file

@ -32,7 +32,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <my-upg-100-list-map> custom element. -->
<script src="../my-upg-100-list.js" integrity="sha384-kAJ2/CjsYLX4aVcdO5YHz7u2pqI2xtYB8QxYt10boDLNOr9f0SvZxs/ktFyzU2Mq" crossorigin="anonymous"></script>
<script src="../my-upg-100-list.js" integrity="sha384-6ChLrNsMHRMc1NU9dvwah0f814ybN3kYagwHjsd9wp10+gPIiFF5UNyPrck2X9hQ" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <my-upg-100-list-map> custom element. -->
<script src="../my-upg-100-list.js" integrity="sha384-kAJ2/CjsYLX4aVcdO5YHz7u2pqI2xtYB8QxYt10boDLNOr9f0SvZxs/ktFyzU2Mq" crossorigin="anonymous"></script>
<script src="../my-upg-100-list.js" integrity="sha384-6ChLrNsMHRMc1NU9dvwah0f814ybN3kYagwHjsd9wp10+gPIiFF5UNyPrck2X9hQ" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -47,7 +47,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <my-upg-100-list-map> custom element. -->
<script src="../my-upg-100-list.js" integrity="sha384-kAJ2/CjsYLX4aVcdO5YHz7u2pqI2xtYB8QxYt10boDLNOr9f0SvZxs/ktFyzU2Mq" crossorigin="anonymous"></script>
<script src="../my-upg-100-list.js" integrity="sha384-6ChLrNsMHRMc1NU9dvwah0f814ybN3kYagwHjsd9wp10+gPIiFF5UNyPrck2X9hQ" 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

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <pplr-data-maps> custom element. -->
<script src="../pplr-data-maps.js" integrity="sha384-DeOrKZESmOQEoz2uX+SySLcJWlC7p2rqmleM0kAyqj89cz6kfokc4Hc8T1EEtCr1" crossorigin="anonymous"></script>
<script src="../pplr-data-maps.js" integrity="sha384-qsKXGlXM1Aad4KY9LnJsEV8ZxdwNGBx7e82NQFc3WjByi+Ym8X1D9I0KUNKAF36P" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <regions-dashboard> custom element. -->
<script src="../regions-dashboard.js" integrity="sha384-HK5vl0Oz39LB5+RpGjd9g3XphsfAw1eXEEMobNcvHM61XL8iiuHmfOx9VJms5qAn" crossorigin="anonymous"></script>
<script src="../regions-dashboard.js" integrity="sha384-R0l3/WZCOmxiS/PQEVM4UmRr20kFwgRrILGeSZCJLYcw3Y0TxYb7e/Uyw1CWSSdC" 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

@ -32,7 +32,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <regions-dashboard> custom element. -->
<script src="../regions-dashboard.js" integrity="sha384-HK5vl0Oz39LB5+RpGjd9g3XphsfAw1eXEEMobNcvHM61XL8iiuHmfOx9VJms5qAn" crossorigin="anonymous"></script>
<script src="../regions-dashboard.js" integrity="sha384-R0l3/WZCOmxiS/PQEVM4UmRr20kFwgRrILGeSZCJLYcw3Y0TxYb7e/Uyw1CWSSdC" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -47,7 +47,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <regions-dashboard> custom element. -->
<script src="../regions-dashboard.js" integrity="sha384-HK5vl0Oz39LB5+RpGjd9g3XphsfAw1eXEEMobNcvHM61XL8iiuHmfOx9VJms5qAn" crossorigin="anonymous"></script>
<script src="../regions-dashboard.js" integrity="sha384-R0l3/WZCOmxiS/PQEVM4UmRr20kFwgRrILGeSZCJLYcw3Y0TxYb7e/Uyw1CWSSdC" 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

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <research-dashboard-map> custom element. -->
<script src="../research-dashboard.js" integrity="sha384-vRwMaJ6+P+zSbdYMv+keN/GLHkreOcTAcFnmhKO/fpXstpdm74a7vc2MT5Wq5U7z" crossorigin="anonymous"></script>
<script src="../research-dashboard.js" integrity="sha384-04sJEsHVug5uhGZZ9xAljO58lXbtG3BKwxEsUP+niTz/8hzztOWOsB8Tr+yO3UyG" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <upg-neighbor> custom element. -->
<script src="../../upg-neighbor.js" integrity="sha384-GFo6dqHbhV+ugPrbWhpGfub2d9PQJZso+ATZm4jPsvTabn19jnMrEuc07PDNDIpl" crossorigin="anonymous"></script>
<script src="../../upg-neighbor.js" integrity="sha384-mXi3m3n1JQVpXo+qZcuCIa5QAO4Is0SZx4wPsdrWpN1ZMqxcGcyG505hveSyaaOh" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <upg-neighbor> custom element. -->
<script src="../../upg-neighbor.js" integrity="sha384-GFo6dqHbhV+ugPrbWhpGfub2d9PQJZso+ATZm4jPsvTabn19jnMrEuc07PDNDIpl" crossorigin="anonymous"></script>
<script src="../../upg-neighbor.js" integrity="sha384-mXi3m3n1JQVpXo+qZcuCIa5QAO4Is0SZx4wPsdrWpN1ZMqxcGcyG505hveSyaaOh" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <upg-neighbor> custom element. -->
<script src="../upg-neighbor.js" integrity="sha384-GFo6dqHbhV+ugPrbWhpGfub2d9PQJZso+ATZm4jPsvTabn19jnMrEuc07PDNDIpl" crossorigin="anonymous"></script>
<script src="../upg-neighbor.js" integrity="sha384-mXi3m3n1JQVpXo+qZcuCIa5QAO4Is0SZx4wPsdrWpN1ZMqxcGcyG505hveSyaaOh" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -36,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <upg-neighbor> custom element. -->
<script src="../../upg-neighbor.js" integrity="sha384-GFo6dqHbhV+ugPrbWhpGfub2d9PQJZso+ATZm4jPsvTabn19jnMrEuc07PDNDIpl" crossorigin="anonymous"></script>
<script src="../../upg-neighbor.js" integrity="sha384-mXi3m3n1JQVpXo+qZcuCIa5QAO4Is0SZx4wPsdrWpN1ZMqxcGcyG505hveSyaaOh" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

Some files were not shown because too many files have changed in this diff Show more