Merge main: rebuild what the incoming source requires
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-88655c70 2026-09-25 19:08:24 +00:00
commit 6cb61caa62
72 changed files with 1025 additions and 436 deletions

View file

@ -35,6 +35,10 @@ const PORT = Number(process.env.PORT || 5399)
const BASE = process.env.BASE_URL || ('http://127.0.0.1:' + PORT)
const LOCALES = (process.env.LOCALES || 'ar,zh,ru,hi').split(',')
const LEAVES = ['resources-map', 'resources-list', 'data-tables', 'charts']
/* The eight values the links table's Type column actually carries. Listed so the positive arm
asks about the enumerated column and nothing else; it is checked against the data below. */
const TYPE_VALUES = new Set(['Scripture', 'Film', 'Audio Scripture', 'Bible video',
'Discipleship training', 'Bible Stories', 'Gospel presentation', 'Gospel audio'])
let srv = null
if (!process.env.BASE_URL) srv = serveReaped(resolve(REPO, 'public'), PORT)
@ -48,6 +52,7 @@ try {
browser = await chromium.launch()
const en = Object.fromEntries(flat(cat('en')))
const leaks = []
const unmeasured = []
let compared = 0
for (const leaf of LEAVES) {
@ -77,26 +82,95 @@ try {
* leak is a label that EQUALS the English value when a different translated value
* exists. That is the same population a translated key is supposed to reach, and a
* language name can no longer impersonate one. */
/* ═══ THE ROOT'S dir IS THE LOCALE, NOT A PROSE DECLARATION — fourth correction ═════
* The rule above ("English prose declares itself with dir=ltr") is right about the
* PROSE and wrong about the ROOT, and that made this gate blind in every left-to-right
* locale it was pointed at.
*
* The embedded-RTL fix sets direction on the plugin's OWN root element, as it should —
* dir="rtl" under ar, dir="ltr" under zh, ru, hi and en. So under ar the root was not
* prose and the walk ran normally; under every other locale the root itself matched the
* prose test and the ENTIRE leaf was skipped as declared-English.
* MEASURED on data-tables: identical DOM in both locales — 1,359 elements walked, 589
* carrying their own text. Under ar, 1 element sat in a prose subtree. Under zh, all
* 1,359 did, and the gate collected nothing.
*
* It then reported that silence as "rendered no labels at all", which reads as a product
* failure. It is not: the zh leaf renders correctly, Chinese title and all — confirmed by
* screenshot. This gate could only ever see Arabic, and said nothing about it.
*
* Prose is always marked INSIDE the leaf (a <p class="gm-note">, a caveat <div>, an
* explanatory <span>); the root carries the locale's base direction and nothing else. So
* dir is honoured below the root and ignored on it. */
const labels = await page.evaluate(() => {
const sr = document.querySelector('gospel-resources-map')?.shadowRoot
if (!sr) return []
const out = new Set()
const walk = (node, inProse) => {
/* ═══ A TABLE CELL IS DATA, NOT CHROME — fifth correction ════════════════════════
* This gate's own heading says it reads the CHROME. Table cells are the data, and
* judging them produced two false findings that were each a real English string
* sitting exactly where it belongs:
* · Source cells hold ORGANISATION names — "JESUS Film", "Faith Comes By Hearing",
* "Door43". Proper nouns; translating them would be the defect.
* · Scope cells describe what a resource CONTAINS, and one of the 114 distinct
* values is the words "Full Bible". Most of the rest are already in the target
* language ("27 parts, Matta to Lwaḥi"), which is what a scope column should be.
* Whole-label equality was supposed to stop data impersonating a label, and it stops
* a label impersonating a WORD, which is a different thing. A cell whose entire text
* equals an English term is indistinguishable from chrome by text alone — so the
* boundary has to be structural, and the DOM already draws it.
* The enumerated Type column is still covered, by the positive arm below: it is the
* one cell column that carries catalogue labels rather than data. */
const walk = (node, inProse, depth) => {
for (const child of node.childNodes) {
if (child.nodeType !== 1) continue
if (child.tagName === 'STYLE' || child.tagName === 'SCRIPT') continue
const prose = inProse || (child.getAttribute && child.getAttribute('dir') === 'ltr')
if (child.classList && child.classList.contains('tabulator-cell')) continue
const declares = depth > 0 && child.getAttribute && child.getAttribute('dir') === 'ltr'
const prose = inProse || declares
const own = [...child.childNodes].filter((n) => n.nodeType === 3)
.map((n) => n.textContent.trim()).filter(Boolean).join(' ').trim()
if (own && !prose) out.add(own)
walk(child, prose)
walk(child, prose, depth + 1)
}
}
walk(sr, false)
walk(sr, false, 0)
return [...out]
})
/* ═══ THE TYPE COLUMN, THE ONE CELL COLUMN THAT CARRIES CATALOGUE LABELS ═════════
* Cells are excluded from the chrome walk above, so Type needs its own arm — it is the
* only column whose values are labels the catalogue translates rather than data.
*
* ⚠ ASKED THE OTHER WAY ROUND FIRST, AND THAT WAS WRONG. Requiring every translated
* type to be PRESENT failed on res.gospelAudio in all four locales: 1,027 rows carry
* "Gospel audio" and none of them was on the first page of fifty. The gate was reporting
* pagination as a translation defect.
* So it asks the answerable question instead — no cell may equal one of the eight
* ENUMERATED type strings when a translation exists. A type that is off-screen is
* silent, which is correct; a type that is on-screen and English fails.
* Restricted to those eight, which is what makes it safe next to the columns that
* legitimately hold English: "JESUS Film" and "Full Bible" are a Source name and a Scope
* description, and neither is one of the eight. */
const typeCells = await page.evaluate(() => {
const sr = document.querySelector('gospel-resources-map')?.shadowRoot
if (!sr) return []
return [...new Set([...sr.querySelectorAll('.tabulator-cell')].map((c) => c.textContent.trim()))]
})
if (leaf === 'data-tables') {
if (!typeCells.length) unmeasured.push(leaf + ' ' + lc + ': no table cells rendered')
const seen = new Set(typeCells)
for (const [k, e] of Object.entries(en)) {
if (!k.startsWith('res.') || !TYPE_VALUES.has(e)) continue
const t = loc[k]
if (!t || t === e) continue
if (seen.has(e)) leaks.push(leaf + ' ' + lc + ' ' + k + ': the Type column still reads English "' + e + '"')
}
}
await page.close()
if (!labels.length) { leaks.push(leaf + ' ' + lc + ': rendered no labels at all'); continue }
/* Silence is NOT MEASURED, never a leak: it means this gate could not see the leaf, which
is a different thing from the leaf being wrong. Reporting it as a leak is what sent me
looking for a rendering bug that did not exist. */
if (!labels.length) { unmeasured.push(leaf + ' ' + lc + ': the walk collected no labels'); continue }
const labelSet = new Set(labels)
for (const [key, e] of Object.entries(en)) {
const t = loc[key]
@ -108,6 +182,12 @@ try {
}
console.log(' compared ' + compared + ' key/locale pair(s) across ' + LEAVES.length + ' leaves and ' + LOCALES.length + ' locales')
/* Reported before the verdict and separately from it: a leaf this gate could not read is not
a leaf that passed, and the two must never be added together. */
if (unmeasured.length) {
console.error('GOSPEL-ENGLISH-LEAKS: NOT MEASURED — ' + unmeasured.length + ' leaf/locale pair(s):')
for (const u of unmeasured) console.error(' ' + u)
}
if (leaks.length) {
/* exitCode, NOT process.exit(). process.exit() terminates before pending stdout/stderr
writes flush, and this gate proved it on itself: its first real run returned 1 with
@ -116,8 +196,13 @@ try {
console.error('GOSPEL-ENGLISH-LEAKS: FAIL — ' + leaks.length + ' translated key(s) rendering in English:')
for (const l of leaks.slice(0, 12)) console.error(' ' + l)
process.exitCode = 1
} else if (unmeasured.length) {
console.error('GOSPEL-ENGLISH-LEAKS: NOT MEASURED — no leak found, but ' + unmeasured.length +
' pair(s) were never read, so this is not a pass.')
process.exitCode = 2
} else {
console.log('GOSPEL-ENGLISH-LEAKS: PASS — every key with a translation renders in it.')
console.log('GOSPEL-ENGLISH-LEAKS: PASS — every key with a translation renders in it, ' +
'across ' + LEAVES.length + ' leaves and ' + LOCALES.length + ' locales.')
}
} finally {
await browser?.close()

View file

@ -38,7 +38,15 @@ import { fileURLToPath } from 'node:url'
const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..')
const PORT = Number(process.env.RTL_SHAPE_PORT || 5393)
const POISON = process.argv.includes('--poison')
const LEAF = 'doxa-maps/gospel-resources/resources-map/index.html'
// ⚠ PARAMETERISED, not forked. dx-shepherd routed this gate to the other RAW-map owners
// (cities-internet, key-cities, upg-100-list, RegionCountryMap) — copying it would give each of
// them their own drifting copy of the pan-first logic and the poison arm, which are the two parts
// that took corrections to get right. The leaf is the only thing that differs.
// node internal/check-gospel-rtl-shaping.mjs [--poison] [--leaf doxa-maps/<bundle>/<profile>/index.html]
const leafArg = process.argv.indexOf('--leaf')
const LEAF = (leafArg > -1 && process.argv[leafArg + 1])
|| process.env.RTL_SHAPE_LEAF
|| 'doxa-maps/gospel-resources/resources-map/index.html'
/* Arabia: the densest concentration of rendered Arabic on the basemap. */
const RTL_VIEW = { center: [39.2, 24.5], zoom: 5 }

View file

@ -126,9 +126,27 @@ for (const t of TARGETS) {
// EXCLUDED BY THE COUNT, NOT BY THE CLASS: a rail row that reports a tally is
// enumerating data. Excluding .fr-lbl wholesale would also blind this to the rail's
// own section headings, which ARE chrome and SHOULD be caught.
const isFacetValue = /\bfr-(lbl|cnt|bar|sw)\b/.test(cls)
&& !!child.parentElement?.querySelector?.('.fr-cnt')
const skip = excluded || isData || isFacetValue
// ⚠ AND THE SAME SHAPE APPEARS IN THE CHART LEGEND AND THE BAR LABELS — the third
// false finding, which is why this is now a RULE rather than a third special case.
// Tracing the gate's own walk (rather than re-scanning the page, which kept showing
// me the facet hits I had already excluded) found the survivors in .rd-lt inside
// .rd-li and .rd-bl inside .rd-bar. DashboardChartsRail.vue renders
// `<span class="rd-lt">{{ s.key }}</span><b>{{ s.value }}</b>` over chart.geometry:
// a DATA KEY beside its VALUE, exactly like the facet rail's label beside its count.
//
// THE GENERAL RULE: an element whose own text sits beside a sibling rendering a
// NUMBER is enumerating data, not naming the UI. A legend entry, a facet row and a
// bar label are all the same thing wearing different class names, and chasing them
// one class at a time is how I got this wrong three times.
// Section headings and column titles have no numeric sibling, so they stay in scope.
const numericSibling = (() => {
const sibs = child.parentElement ? [...child.parentElement.children] : []
return sibs.some((s) => s !== child
&& /^[\d,.\s%]+$/.test((s.textContent || '').trim())
&& (s.textContent || '').trim().length > 0)
})()
const isEnumeratedValue = numericSibling
const skip = excluded || isData || isEnumeratedValue
|| (child.getAttribute && child.getAttribute('dir') === 'ltr')
const own = [...child.childNodes].filter((n) => n.nodeType === 3)
.map((n) => n.textContent.trim()).filter(Boolean).join(' ').trim()

View file

@ -0,0 +1,155 @@
#!/usr/bin/env node
/**
* check-raw-map-rtl-shaping — the RAW maps (built with `new gl.Map`, not useMapInstance) must
* shape Arabic, Hebrew and Persian place names.
*
* gospel's check-gospel-rtl-shaping.mjs (b9dd5545) established the method on resources-map; this
* is the same gate for the other raw maps: cities-internet/connectivity-map (both engines) and
* key-cities/cities-map (Mapbox-only; gated, so it has no leaf page and is mounted on a
* same-origin host page). Read that file's header for the full reasoning; the load-bearing parts:
*
* - WHY IT MATTERS TO EVERYONE: these maps do not localise basemap labels, so each place is drawn
* in its OWN script. Over the Middle East most labels are Arabic/Persian/Hebrew for EVERY
* viewer in every UI language. Unshaped = disconnected glyphs in the wrong order.
* - IT PANS FIRST: the shaper registers lazily and reads 'deferred' at a world view. Only after
* RTL labels are really on screen does 'loaded' mean they went through the shaper. No RTL label
* on screen is NOT MEASURED, never PASS.
* - ONE property definition per engine global does both the map hook and the poison: two
* addInitScript defineProperty calls on one global silently replace each other.
*
* WHY THE FIX HAS TO BE IN THE MAP, NOT THE ENTRY: bundle entries used to call setRTLTextPlugin at
* load time, which only worked because every leaf <head> preloaded mapbox-gl.js. The engine is now
* injected lazily (ensureEngineScript), after the entry has run, so the call has to follow the
* engine global and precede `new gl.Map`: installRtlTextPlugin(gl) from library/maps/rtl-text.js.
*
* --poison neuters setRTLTextPlugin in the page (the real pre-fix state) and must be caught on
* every measured row. Exit: 0 pass · 1 fail · 2 not measured.
*/
import { chromium } from 'playwright'
import { serveReaped } from './_serve-reaped.mjs'
import { TREE_NAME } from './_tree-name.mjs'
import { readFileSync } from 'node:fs'
import { resolve, dirname } from 'node:path'
import { fileURLToPath } from 'node:url'
const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..')
const PORT = Number(process.env.RTL_RAW_PORT || 5394)
const POISON = process.argv.includes('--poison')
const TK = process.env.MAPBOX_TOKEN || JSON.parse(readFileSync(resolve(ROOT, 'vite.doxa-maps-build-config.json'), 'utf8')).token || ''
const BASE = `http://127.0.0.1:${PORT}/${TREE_NAME}`
/* Arabia: the densest concentration of rendered Arabic on the basemap. */
const RTL_VIEW = { center: [39.2, 24.5], zoom: 5 }
const HOST_PATH = `${TREE_NAME}/key-cities/__rtl-host.html`
const TARGETS = [
...['mapbox', 'maplibre'].map((provider) => ({
name: 'cities-internet', provider,
url: `${BASE}/cities-internet/connectivity-map/index.html?provider=${provider}&lang=ar` + (provider === 'mapbox' ? `&tk=${TK}` : ''),
})),
{ name: 'key-cities', provider: 'mapbox', url: `http://127.0.0.1:${PORT}/${HOST_PATH}`, host: true },
]
const HOST_HTML = `<!DOCTYPE html><html lang="ar"><head><meta charset="utf-8"></head><body style="margin:0">
<script src="/${TREE_NAME}/key-cities/key-cities.js"></script>
<key-cities-map profile-config='{"profile":"cities-map","tk":"${TK}","lang":"ar"}' style="display:block;height:800px"></key-cities-map>
</body></html>`
const srv = serveReaped(resolve(ROOT, 'public'), PORT)
await new Promise((r) => setTimeout(r, 2500))
const browser = await chromium.launch({
args: ['--use-gl=angle', '--use-angle=swiftshader', '--enable-unsafe-swiftshader'],
})
const INSTALL = (poison) => {
const define = (name) => {
let v
Object.defineProperty(window, name, {
configurable: true,
get: () => v,
set: (g) => {
v = g
if (!g) return
if (poison && g.setRTLTextPlugin) g.setRTLTextPlugin = () => {}
if (g.Map && !g.__hooked) {
g.__hooked = true
const Orig = g.Map
g.Map = function (...a) { const m = new Orig(...a); window.__MAP = m; return m }
g.Map.prototype = Orig.prototype
Object.setPrototypeOf(g.Map, Orig)
}
},
})
}
define('mapboxgl'); define('maplibregl')
}
const results = []
for (const t of TARGETS) {
const page = await browser.newPage({ viewport: { width: 1280, height: 800 } })
await page.addInitScript(INSTALL, POISON)
if (t.host) await page.route(/__rtl-host\.html/, (r) => r.fulfill({ contentType: 'text/html', body: HOST_HTML }))
let r
try {
await page.goto(t.url, { waitUntil: 'networkidle', timeout: 90000 })
await page.waitForTimeout(8000)
r = await page.evaluate(async (view) => {
const m = window.__MAP
if (!m) return { err: 'the page never constructed a map' }
const sleep = (ms) => new Promise((res) => setTimeout(res, ms))
// Wait for the style before moving: an unloaded style answers ZERO features.
for (let i = 0; i < 60 && !m.isStyleLoaded(); i++) await sleep(500)
m.jumpTo(view)
await new Promise((res) => { m.once('idle', res); setTimeout(res, 15000) })
let names = []
for (let i = 0; i < 30; i++) {
names = m.queryRenderedFeatures()
.filter((f) => f.layer && f.layer.type === 'symbol')
.map((f) => String((f.properties && (f.properties.name || f.properties.name_en)) || ''))
.filter(Boolean)
if (names.some((n) => /[؀-ۿݐ-ݿ֐-׿]/.test(n))) break
await sleep(1000)
}
// the engine that built THIS map, not whichever global happens to exist
const g = (window.maplibregl && m instanceof window.maplibregl.Map) ? window.maplibregl : window.mapboxgl
return {
rtl: names.filter((n) => /[؀-ۿݐ-ݿ֐-׿]/.test(n)),
symbols: names.length,
status: g && g.getRTLTextPluginStatus ? g.getRTLTextPluginStatus() : 'NO STATUS API',
}
}, RTL_VIEW)
} catch (e) {
r = { err: String(e.message).slice(0, 90) }
}
await page.close()
results.push({ ...t, ...r })
}
await browser.close()
srv.stop()
let bad = 0, unmeasured = 0
for (const r of results) {
const tag = `${r.name} ${r.provider}`
if (r.err) { console.error(` ${tag}: NOT MEASURED — ${r.err}`); unmeasured++; continue }
if (!r.rtl.length) {
console.error(` ${tag}: NOT MEASURED — no RTL label rendered at the test view (${r.symbols} symbols); the gate cannot see the defect here.`)
unmeasured++; continue
}
const sample = r.rtl.slice(0, 3).join(', ')
if (r.status !== 'loaded') {
console.error(` ${tag}: FAIL — ${r.rtl.length} RTL labels on screen (${sample}) but the shaper is '${r.status}'. These labels are drawn unshaped.`)
bad++; continue
}
console.log(` ok ${tag} — ${r.rtl.length}/${r.symbols} rendered labels are RTL (${sample}), shaper loaded`)
}
const measured = results.length - unmeasured
if (POISON) {
if (unmeasured) { console.error(`RAW-RTL --poison: NOT MEASURED — ${unmeasured} row(s) had nothing to judge, so the self-test proves nothing for them.`); process.exitCode = 2 }
else if (bad === measured) { console.log(`RAW-RTL --poison: ${bad}/${measured} rows caught with the plugin neutered.`); console.log('RAW-RTL: SELF-TEST PASS — the check fails as designed.') }
else { console.error('RAW-RTL: SELF-TEST FAIL — a neutered shaper still passed.'); process.exitCode = 1 }
} else if (bad) {
console.error(`RAW-RTL: FAIL — ${bad} of ${results.length} row(s) draw RTL place names unshaped.`)
console.error(' Fix: installRtlTextPlugin(gl) from library/maps/rtl-text.js, right after the engine global')
console.error(' resolves and BEFORE new gl.Map.')
process.exitCode = 1
} else if (unmeasured) {
console.error(`RAW-RTL: NOT MEASURED — ${unmeasured} of ${results.length} row(s) could not be judged.`); process.exitCode = 2
} else console.log(`RAW-RTL: PASS — cities-internet (both engines) and key-cities shape RTL place names.`)

View file

@ -33,6 +33,7 @@
import { ref, readonly } from 'vue';
import { computeLayout } from './usePosterLayout.js';
import { engineFor } from '../useMapProvider.js';
const MAX_SINGLE_CANVAS = 4096; // WebGL safe ceiling for most hardware
const TILE_PX = 2048; // tile size for stitch path
@ -370,7 +371,7 @@ async function _spawnHiddenMap(sourceMap, w, h, opts = {}) {
// eslint-disable-next-line no-undef
const W = (typeof window !== 'undefined' ? window : {});
const isMaplibre = !!W.maplibregl && sourceMap instanceof W.maplibregl.Map;
const gl = isMaplibre ? W.maplibregl : W.mapboxgl;
const gl = engineFor(sourceMap); // the one per-instance helper (useMapProvider.js)
if (!gl) throw new Error('useMapPoster: ' + (isMaplibre ? 'maplibregl' : 'mapboxgl') + ' global not found');
const styleObj = sourceMap.getStyle();

View file

@ -5,6 +5,7 @@
// Import Vue functions from NPM package
import { ref, inject } from 'vue';
import { useI18n } from 'vue-i18n';
import { engineFor } from './useMapProvider.js';
/**
* useMapEvents composable - manages Mapbox layer event handlers
@ -245,7 +246,7 @@ export function useMapEvents(options = {}) {
}
// Fallback: show popup (for non-prayer legend types)
new mapboxgl.Popup({
new (engineFor(map).Popup)({
maxWidth: '320px',
className: 'people-group-popup'
})
@ -290,7 +291,7 @@ export function useMapEvents(options = {}) {
if (e.features && e.features.length > 0) {
const properties = e.features[0].properties;
new mapboxgl.Popup()
new (engineFor(map).Popup)()
.setLngLat(e.lngLat)
.setHTML(generateRegionPopupContent(properties))
.addTo(map);

View file

@ -61,6 +61,28 @@ export function isMapboxMap(map) {
return typeof window !== 'undefined' && !!window.mapboxgl && map instanceof window.mapboxgl.Map
}
/**
* The engine namespace that built THIS map: window.maplibregl or window.mapboxgl. Use it for
* everything constructed alongside a map (Marker, Popup, a second Map, controls) instead of
* the bare `mapboxgl` global.
*
* ★ WHY. Every generated leaf <head> used to load mapbox-gl.js statically, whatever the provider,
* so a bare `new mapboxgl.Popup()` always found a global, even on a MapLibre map (where it
* built a MAPBOX popup and attached it to a MapLibre map). Removing that static peer (a visitor-IP
* leak to api.mapbox.com under MapLibre) turns each of those into a ReferenceError on the first
* pin select or click, and the poster's hidden map into 'mapboxgl global not found'.
* Asking the MAP which engine it is removes the dependency on what else the page loaded.
* @param {object} map the live map instance
* @returns {object|undefined} the engine namespace, or undefined when neither is loaded
*/
export function engineFor(map) {
if (typeof window === 'undefined') return undefined
const ml = window.maplibregl, mb = window.mapboxgl
if (ml && ml.Map && map instanceof ml.Map) return ml
if (mb && mb.Map && map instanceof mb.Map) return mb
return mb || ml
}
/** Mapbox-Standard-only lighting paint props, per engine. MapLibre rejects layers whose
* paint carries unknown properties (the whole layer is dropped → invisible pins), so
* spread this instead of writing '<kind>-emissive-strength' literally.

View file

@ -3,7 +3,7 @@
// floats an animated "GO" location pin above it with a pulsing light glow.
import { watch, inject } from 'vue';
import { emissivePaint, isMapboxMap } from './useMapProvider.js';
import { emissivePaint, isMapboxMap, engineFor } from './useMapProvider.js';
// ─────────────────────────────────────────────
// Constants
@ -151,7 +151,8 @@ export function useSelectedPin(options = {}) {
// anchor:'bottom' pins the marker's bottom edge to the lat/lng.
// After the wrapper resize to match the SVG (43px), the bottom edge
// IS the pin's tip — no offset compensation needed.
_marker = new mapboxgl.Marker({
// engineFor, not the bare `mapboxgl` global: under MapLibre there may be no Mapbox global
_marker = new (engineFor(map).Marker)({
element : _markerEl,
anchor : 'bottom',
offset : [0, 0]

View file

@ -85,7 +85,9 @@
"gospelPresentation": "عرض للإنجيل",
"scriptureEarth": "Scripture Earth",
"training": "تدريب على التلمذة",
"jesusFilm": "فيلم يسوع"
"jesusFilm": "فيلم يسوع",
"audioScripture": "الكتاب المقدس الصوتي",
"bibleStoriesPlain": "قصص الكتاب المقدس"
},
"state": {
"noneFound": "لا شيء",
@ -151,5 +153,21 @@
"Gospel presentation": "عرض للإنجيل",
"Countries": "البلدان",
"People groups": "الشعوب"
},
"charts": {
"scriptureAny": "الكتاب المقدس (أي نوع)",
"fullBible": "الكتاب المقدس كاملاً",
"newTestament": "العهد الجديد",
"filmAny": "الفيلم (أي نوع)",
"nothingInPools": "لا شيء في المصادر التي جرى البحث فيها",
"nothingInPoolsLower": "لا شيء في المصادر التي جرى البحث فيها",
"noResourceInPools": "لم يُعثر على أي مورد في المصادر التي جرى البحث فيها",
"aResourceFound": "وُجد مورد",
"tabCoverage": "تغطية الموارد",
"tabGap": "أكبر الفجوات",
"keyScripture": "الكتاب المقدس",
"keyFilmStories": "الفيلم / القصص",
"keyAudioEtc": "صوتيات / عرض / تدريب",
"unresolvedCode": "رمز خارج ISO 639-3 — غير محسوم، لم يُقَس"
}
}

View file

@ -21,5 +21,6 @@
"sections": {
"within": "ضمن {selection}",
"allData": "كل بيانات DOXA"
}
},
"upg100Placeholder": "ابحث عن شعب أو قائمة UPG-100 أو منطقة…"
}

View file

@ -85,7 +85,9 @@
"gospelPresentation": "Evangeliums-Darstellung",
"scriptureEarth": "Scripture Earth",
"training": "Jüngerschaftstraining",
"jesusFilm": "JESUS Film"
"jesusFilm": "JESUS Film",
"audioScripture": "Audio-Bibeltext",
"bibleStoriesPlain": "Bibelgeschichten"
},
"state": {
"noneFound": "nichts gefunden",
@ -151,5 +153,21 @@
"Gospel presentation": "Evangeliums-Darstellung",
"Countries": "Länder",
"People groups": "Volksgruppen"
},
"charts": {
"scriptureAny": "Bibeltext (beliebig)",
"fullBible": "Vollbibel",
"newTestament": "Neues Testament",
"filmAny": "Film (beliebig)",
"nothingInPools": "Nichts in den geprüften Quellen gefunden",
"nothingInPoolsLower": "nichts in den geprüften Quellen gefunden",
"noResourceInPools": "keine Ressource in den geprüften Quellen gefunden",
"aResourceFound": "eine Ressource gefunden",
"tabCoverage": "Ressourcenabdeckung",
"tabGap": "Größte Lücken",
"keyScripture": "Bibeltext",
"keyFilmStories": "Film / Geschichten",
"keyAudioEtc": "Audio / Präsentation / Schulung",
"unresolvedCode": "Code außerhalb ISO 639-3 — ungeklärt, nicht gemessen"
}
}

View file

@ -21,5 +21,6 @@
"languageKind": "Sprache",
"dialect": "Dialekt",
"religionKind": "Religion"
}
},
"upg100Placeholder": "Volksgruppe, UPG-100-Liste oder Region suchen…"
}

View file

@ -85,7 +85,9 @@
"gospelPresentation": "Gospel presentation",
"scriptureEarth": "Scripture Earth",
"training": "Discipleship training",
"jesusFilm": "JESUS Film"
"jesusFilm": "JESUS Film",
"audioScripture": "Audio Scripture",
"bibleStoriesPlain": "Bible Stories"
},
"state": {
"noneFound": "none found",
@ -151,5 +153,21 @@
"Gospel presentation": "Gospel presentation",
"Countries": "Countries",
"People groups": "People groups"
},
"charts": {
"scriptureAny": "Scripture (any)",
"fullBible": "Full Bible",
"newTestament": "New Testament",
"filmAny": "Film (any)",
"nothingInPools": "Nothing found in pools checked",
"nothingInPoolsLower": "nothing found in pools checked",
"noResourceInPools": "no resource found in pools checked",
"aResourceFound": "a resource found",
"tabCoverage": "Resource coverage",
"tabGap": "Largest gaps",
"keyScripture": "scripture",
"keyFilmStories": "film / stories",
"keyAudioEtc": "audio / presentation / training",
"unresolvedCode": "code outside ISO 639-3 — unresolved, not measured"
}
}

View file

@ -21,5 +21,6 @@
"sections": {
"within": "Within {selection}",
"allData": "All DOXA Data"
}
},
"upg100Placeholder": "Search people group, UPG-100 list, or region…"
}

View file

@ -85,7 +85,9 @@
"gospelPresentation": "Presentación del evangelio",
"scriptureEarth": "Scripture Earth",
"training": "Formación de discipulado",
"jesusFilm": "Película JESÚS"
"jesusFilm": "Película JESÚS",
"audioScripture": "Escrituras en audio",
"bibleStoriesPlain": "Historias bíblicas"
},
"state": {
"noneFound": "nada encontrado",
@ -151,5 +153,21 @@
"Gospel presentation": "Presentación del evangelio",
"Countries": "Países",
"People groups": "Pueblos"
},
"charts": {
"scriptureAny": "Escrituras (cualquiera)",
"fullBible": "Biblia completa",
"newTestament": "Nuevo Testamento",
"filmAny": "Película (cualquiera)",
"nothingInPools": "No se encontró nada en las fuentes consultadas",
"nothingInPoolsLower": "no se encontró nada en las fuentes consultadas",
"noResourceInPools": "no se encontró ningún recurso en las fuentes consultadas",
"aResourceFound": "se encontró un recurso",
"tabCoverage": "Cobertura de recursos",
"tabGap": "Mayores brechas",
"keyScripture": "escrituras",
"keyFilmStories": "película / historias",
"keyAudioEtc": "audio / presentación / formación",
"unresolvedCode": "código fuera de ISO 639-3 — sin resolver, no medido"
}
}

View file

@ -21,5 +21,6 @@
"sections": {
"within": "Dentro de {selection}",
"allData": "Todos los datos DOXA"
}
},
"upg100Placeholder": "Buscar pueblo, lista UPG-100 o región…"
}

View file

@ -85,7 +85,9 @@
"gospelPresentation": "Présentation de l'Évangile",
"scriptureEarth": "Scripture Earth",
"training": "Formation au discipulat",
"jesusFilm": "Film JÉSUS"
"jesusFilm": "Film JÉSUS",
"audioScripture": "Écritures en audio",
"bibleStoriesPlain": "Histoires bibliques"
},
"state": {
"noneFound": "rien trouvé",
@ -151,5 +153,21 @@
"Gospel presentation": "Présentation de l'Évangile",
"Countries": "Pays",
"People groups": "Peuples"
},
"charts": {
"scriptureAny": "Écritures (toutes)",
"fullBible": "Bible complète",
"newTestament": "Nouveau Testament",
"filmAny": "Film (tous)",
"nothingInPools": "Rien trouvé dans les sources consultées",
"nothingInPoolsLower": "rien trouvé dans les sources consultées",
"noResourceInPools": "aucune ressource trouvée dans les sources consultées",
"aResourceFound": "une ressource trouvée",
"tabCoverage": "Couverture des ressources",
"tabGap": "Plus grands écarts",
"keyScripture": "écritures",
"keyFilmStories": "film / histoires",
"keyAudioEtc": "audio / présentation / formation",
"unresolvedCode": "code hors ISO 639-3 — non résolu, non mesuré"
}
}

View file

@ -21,5 +21,6 @@
"sections": {
"within": "Dans {selection}",
"allData": "Toutes les données DOXA"
}
},
"upg100Placeholder": "Rechercher un peuple, une liste UPG-100 ou une région…"
}

View file

@ -85,7 +85,9 @@
"gospelPresentation": "सुसमाचार प्रस्तुति",
"scriptureEarth": "Scripture Earth",
"training": "शिष्यत्व प्रशिक्षण",
"jesusFilm": "यीशु फ़िल्म"
"jesusFilm": "यीशु फ़िल्म",
"audioScripture": "ऑडियो पवित्र शास्त्र",
"bibleStoriesPlain": "बाइबल की कहानियाँ"
},
"state": {
"noneFound": "कुछ नहीं मिला",
@ -151,5 +153,21 @@
"Gospel presentation": "सुसमाचार प्रस्तुति",
"Countries": "देश",
"People groups": "जनसमूह"
},
"charts": {
"scriptureAny": "पवित्र शास्त्र (कोई भी)",
"fullBible": "पूरी बाइबल",
"newTestament": "नया नियम",
"filmAny": "फ़िल्म (कोई भी)",
"nothingInPools": "जाँचे गए स्रोतों में कुछ नहीं मिला",
"nothingInPoolsLower": "जाँचे गए स्रोतों में कुछ नहीं मिला",
"noResourceInPools": "जाँचे गए स्रोतों में कोई संसाधन नहीं मिला",
"aResourceFound": "एक संसाधन मिला",
"tabCoverage": "संसाधन कवरेज",
"tabGap": "सबसे बड़े अंतराल",
"keyScripture": "पवित्र शास्त्र",
"keyFilmStories": "फ़िल्म / कहानियाँ",
"keyAudioEtc": "ऑडियो / प्रस्तुति / प्रशिक्षण",
"unresolvedCode": "ISO 639-3 से बाहर कोड — अनसुलझा, मापा नहीं गया"
}
}

View file

@ -21,5 +21,6 @@
"languageKind": "भाषा",
"dialect": "बोली",
"religionKind": "धर्म"
}
},
"upg100Placeholder": "जनसमूह, UPG-100 सूची या क्षेत्र खोजें…"
}

View file

@ -85,7 +85,9 @@
"gospelPresentation": "Presentazione del Vangelo",
"scriptureEarth": "Scripture Earth",
"training": "Formazione al discepolato",
"jesusFilm": "Film GESÙ"
"jesusFilm": "Film GESÙ",
"audioScripture": "Scritture in audio",
"bibleStoriesPlain": "Storie bibliche"
},
"state": {
"noneFound": "nulla trovato",
@ -151,5 +153,21 @@
"Gospel presentation": "Presentazione del Vangelo",
"Countries": "Paesi",
"People groups": "Popoli"
},
"charts": {
"scriptureAny": "Scritture (qualsiasi)",
"fullBible": "Bibbia completa",
"newTestament": "Nuovo Testamento",
"filmAny": "Film (qualsiasi)",
"nothingInPools": "Nulla trovato nelle fonti controllate",
"nothingInPoolsLower": "nulla trovato nelle fonti controllate",
"noResourceInPools": "nessuna risorsa trovata nelle fonti controllate",
"aResourceFound": "una risorsa trovata",
"tabCoverage": "Copertura delle risorse",
"tabGap": "Lacune maggiori",
"keyScripture": "scritture",
"keyFilmStories": "film / storie",
"keyAudioEtc": "audio / presentazione / formazione",
"unresolvedCode": "codice fuori ISO 639-3 — non risolto, non misurato"
}
}

View file

@ -21,5 +21,6 @@
"languageKind": "Lingua",
"dialect": "Dialetto",
"religionKind": "Religione"
}
},
"upg100Placeholder": "Cerca popolo, elenco UPG-100 o regione…"
}

View file

@ -85,7 +85,9 @@
"gospelPresentation": "Apresentação do evangelho",
"scriptureEarth": "Scripture Earth",
"training": "Treinamento de discipulado",
"jesusFilm": "Filme JESUS"
"jesusFilm": "Filme JESUS",
"audioScripture": "Escrituras em áudio",
"bibleStoriesPlain": "Histórias bíblicas"
},
"state": {
"noneFound": "nada encontrado",
@ -151,5 +153,21 @@
"Gospel presentation": "Apresentação do evangelho",
"Countries": "Países",
"People groups": "Povos"
},
"charts": {
"scriptureAny": "Escrituras (qualquer)",
"fullBible": "Bíblia completa",
"newTestament": "Novo Testamento",
"filmAny": "Filme (qualquer)",
"nothingInPools": "Nada encontrado nas fontes consultadas",
"nothingInPoolsLower": "nada encontrado nas fontes consultadas",
"noResourceInPools": "nenhum recurso encontrado nas fontes consultadas",
"aResourceFound": "um recurso encontrado",
"tabCoverage": "Cobertura de recursos",
"tabGap": "Maiores lacunas",
"keyScripture": "escrituras",
"keyFilmStories": "filme / histórias",
"keyAudioEtc": "áudio / apresentação / treinamento",
"unresolvedCode": "código fora da ISO 639-3 — não resolvido, não medido"
}
}

View file

@ -21,5 +21,6 @@
"sections": {
"within": "Dentro de {selection}",
"allData": "Todos os dados DOXA"
}
},
"upg100Placeholder": "Procurar povo, lista UPG-100 ou região…"
}

View file

@ -85,7 +85,9 @@
"gospelPresentation": "Prezentarea Evangheliei",
"scriptureEarth": "Scripture Earth",
"training": "Instruire în ucenicie",
"jesusFilm": "Filmul ISUS"
"jesusFilm": "Filmul ISUS",
"audioScripture": "Scripturi audio",
"bibleStoriesPlain": "Povestiri biblice"
},
"state": {
"noneFound": "nimic găsit",
@ -151,5 +153,21 @@
"Gospel presentation": "Prezentarea Evangheliei",
"Countries": "Țări",
"People groups": "Popoare"
},
"charts": {
"scriptureAny": "Scripturi (oricare)",
"fullBible": "Biblia completă",
"newTestament": "Noul Testament",
"filmAny": "Film (oricare)",
"nothingInPools": "Nimic găsit în sursele verificate",
"nothingInPoolsLower": "nimic găsit în sursele verificate",
"noResourceInPools": "nicio resursă găsită în sursele verificate",
"aResourceFound": "o resursă găsită",
"tabCoverage": "Acoperirea resurselor",
"tabGap": "Cele mai mari lacune",
"keyScripture": "scripturi",
"keyFilmStories": "film / povestiri",
"keyAudioEtc": "audio / prezentare / instruire",
"unresolvedCode": "cod în afara ISO 639-3 — nerezolvat, nemăsurat"
}
}

View file

@ -21,5 +21,6 @@
"languageKind": "Limbă",
"dialect": "Dialect",
"religionKind": "Religie"
}
},
"upg100Placeholder": "Caută popor, listă UPG-100 sau regiune…"
}

View file

@ -85,7 +85,9 @@
"gospelPresentation": "Изложение Евангелия",
"scriptureEarth": "Scripture Earth",
"training": "Обучение ученичеству",
"jesusFilm": "Фильм «Иисус»"
"jesusFilm": "Фильм «Иисус»",
"audioScripture": "Аудио с Писанием",
"bibleStoriesPlain": "Библейские истории"
},
"state": {
"noneFound": "ничего не найдено",
@ -151,5 +153,21 @@
"Gospel presentation": "Изложение Евангелия",
"Countries": "Страны",
"People groups": "Народы"
},
"charts": {
"scriptureAny": "Писание (любое)",
"fullBible": "Полная Библия",
"newTestament": "Новый Завет",
"filmAny": "Фильм (любой)",
"nothingInPools": "Ничего не найдено в проверенных источниках",
"nothingInPoolsLower": "ничего не найдено в проверенных источниках",
"noResourceInPools": "ни одного ресурса не найдено в проверенных источниках",
"aResourceFound": "ресурс найден",
"tabCoverage": "Охват ресурсами",
"tabGap": "Наибольшие пробелы",
"keyScripture": "писание",
"keyFilmStories": "фильм / истории",
"keyAudioEtc": "аудио / презентация / обучение",
"unresolvedCode": "код вне ISO 639-3 — не определён, не измерен"
}
}

View file

@ -21,5 +21,6 @@
"sections": {
"within": "В пределах {selection}",
"allData": "Все данные DOXA"
}
},
"upg100Placeholder": "Поиск народа, списка UPG-100 или региона…"
}

View file

@ -85,7 +85,9 @@
"gospelPresentation": "福音简介",
"scriptureEarth": "Scripture Earth",
"training": "门徒训练",
"jesusFilm": "《耶稣传》"
"jesusFilm": "《耶稣传》",
"audioScripture": "音频圣经",
"bibleStoriesPlain": "圣经故事"
},
"state": {
"noneFound": "一无所获",
@ -151,5 +153,21 @@
"Gospel presentation": "福音简介",
"Countries": "国家",
"People groups": "族群"
},
"charts": {
"scriptureAny": "圣经(任意)",
"fullBible": "全本圣经",
"newTestament": "新约",
"filmAny": "影片(任意)",
"nothingInPools": "在已检索的资源库中一无所获",
"nothingInPoolsLower": "在已检索的资源库中一无所获",
"noResourceInPools": "在已检索的资源库中未找到资源",
"aResourceFound": "找到资源",
"tabCoverage": "资源覆盖",
"tabGap": "最大缺口",
"keyScripture": "圣经",
"keyFilmStories": "影片 / 故事",
"keyAudioEtc": "音频 / 简介 / 训练",
"unresolvedCode": "ISO 639-3 之外的代码 — 未确定,未测量"
}
}

View file

@ -21,5 +21,6 @@
"languageKind": "语言",
"dialect": "方言",
"religionKind": "宗教"
}
},
"upg100Placeholder": "搜索民族、UPG-100 名单或区域…"
}

View file

@ -134,6 +134,8 @@
"check:quoted-scripts": "node internal/check-quoted-scripts.mjs",
"check:rtl-shaping": "node internal/check-gospel-rtl-shaping.mjs",
"check:rtl-shaping:poison": "node internal/check-gospel-rtl-shaping.mjs --poison",
"check:rtl-raw": "node internal/check-raw-map-rtl-shaping.mjs",
"check:rtl-raw:poison": "node internal/check-raw-map-rtl-shaping.mjs --poison",
"check:scrim-viewport": "node internal/check-scrim-covers-viewport.mjs",
"check:scrim-viewport:self-test": "node internal/check-scrim-covers-viewport.mjs --self-test",
"check:script-flags": "node internal/check-script-flags-reachable.mjs",

View file

@ -51,6 +51,7 @@ import { resolveAssetsBase } from '@map/utils/embedBase.js'
import { resolveMapProvider } from '@map/composables/useMapProvider.js'
import { ensureEngineScript, engineGlobal, ensureEngineCSS, engineStylesheetUrl } from '@map/composables/useMapInstance.js'
import { resolveNamedStyle } from '@map/styles/registry.js'
import { installRtlTextPlugin } from '@map/maps/rtl-text.js'
// People-group dots open the SAME detail panel as Prayer Progress (doxa-simple-map): the
// shared store selection, the shared GO-pin highlight, and the shared legend wrappers
// that host PeopleGroupDetail on desktop and in the phone sheet.
@ -278,6 +279,11 @@ onMounted(async () => {
const gl = engineGlobal(ciProvider) || window.mapboxgl
if (unmounted) return
if (!gl || !mapEl.value) { err.value = 'map engine not loaded'; return }
// RTL SHAPING, before the first map exists. This raw map does not go through useMapInstance
// (which installs it), and the basemap draws each place in its OWN script: over the Middle East
// most labels are Arabic, Persian or Hebrew for EVERY viewer. An entry-time call cannot do this,
// because the engine is injected lazily, after the bundle has run.
installRtlTextPlugin(gl)
try {
// The dots are a second layer, not a precondition: if the list fails, the map still shades.
const groupsLoaded = loadGroups().catch((e) => { console.warn('[connectivity-map] people groups:', e?.message || e) })

View file

@ -279,30 +279,30 @@ const C = {
const coverage = computed(() => {
if (!nLang.value) return []
return [
{ label: 'Scripture (any)', value: count((l) => l.scripture), color: C.scripture,
{ label: tr('gospel.charts.scriptureAny'), value: count((l) => l.scripture), color: C.scripture,
note: 'a published text translation — eBible.org, PNG.Bible or Faith Comes By Hearing' },
{ label: '· Full Bible', value: count((l) => l.fullBible), color: C.scripture },
{ label: '· New Testament', value: count((l) => l.nt), color: C.scripture },
{ label: 'Film (any)', value: count((l) => l.film), color: C.film,
{ label: '· ' + tr('gospel.charts.fullBible'), value: count((l) => l.fullBible), color: C.scripture },
{ label: '· ' + tr('gospel.charts.newTestament'), value: count((l) => l.nt), color: C.scripture },
{ label: tr('gospel.charts.filmAny'), value: count((l) => l.film), color: C.film,
note: 'Arclight / JESUS Film Project' },
{ label: '· JESUS Film', value: count((l) => l.jesusFilm), color: C.film },
{ label: 'Open Bible Stories', value: count((l) => l.obs), color: C.film,
{ label: '· ' + tr('gospel.res.jesusFilm'), value: count((l) => l.jesusFilm), color: C.film },
{ label: tr('gospel.res.bibleStories'), value: count((l) => l.obs), color: C.film,
unknown: !hasField('has_open_bible_stories'),
unknownText: 'not measured — this build of the table has no Open Bible Stories field' },
// NOT a zero bar. Zero known values across every language means the pool was never
// queried, and the chart has to say that rather than draw an empty bar.
{ label: 'Audio', unknown: !hasField('has_audio') || count((l) => l.audioKnown) === 0,
{ label: tr('gospel.res.audio'), unknown: !hasField('has_audio') || count((l) => l.audioKnown) === 0,
value: count((l) => l.audioKnown), color: C.found,
unknownText: `unknown for all ${fmt(nLang.value)} — no audio pool has been searched` },
// The GRN caveat moved to a note: audio IS measured now, and saying it is unknown
// would be the stale-caveat mistake this bundle keeps finding.
{ label: 'Bible video', value: count((l) => l.bibleVideo), color: C.film,
{ label: tr('gospel.res.bibleVideo'), value: count((l) => l.bibleVideo), color: C.film,
note: 'Faith Comes By Hearing — Bible narrative video, NOT the JESUS Film' },
{ label: 'Gospel presentation', value: count((l) => l.tract), color: C.found,
{ label: tr('gospel.res.gospelPresentation'), value: count((l) => l.tract), color: C.found,
note: 'Cru / GodTools tracts on knowgod.com' },
{ label: 'Discipleship training', value: count((l) => l.training), color: C.found,
{ label: tr('gospel.res.training'), value: count((l) => l.training), color: C.found,
note: 'Zume Training' },
{ label: 'Nothing found in pools checked', value: count((l) => l.none), color: C.none,
{ label: tr('gospel.charts.nothingInPools'), value: count((l) => l.none), color: C.none,
note: 'not proven absent' },
]
})
@ -361,19 +361,23 @@ const byCountry = computed(() => {
.map((e) => ({
label: e.country,
segments: [
{ label: 'nothing found', value: e.none, color: C.none },
{ label: 'a resource found', value: e.total - e.none, color: C.found },
{ label: tr('gospel.legend.tier0'), value: e.none, color: C.none },
{ label: tr('gospel.charts.aResourceFound'), value: e.total - e.none, color: C.found },
],
note: `${e.none} of ${e.total} languages with nothing found in the pools checked`,
meta: e,
}))
})
const TABS = [
{ id: 'coverage', label: 'Resource coverage' },
{ id: 'gap', label: 'Largest gaps' },
{ id: 'countries', label: 'By country' },
]
/* COMPUTED, NOT A CONST. These labels come from the catalogue now, and a plain array is
evaluated once at setup — the tab strip would keep whichever language the leaf first
rendered in and never follow a locale change. The legend arrays in the template are
re-evaluated on render, so only this one had to move. */
const TABS = computed(() => [
{ id: 'coverage', label: tr('gospel.charts.tabCoverage') },
{ id: 'gap', label: tr('gospel.charts.tabGap') },
{ id: 'countries', label: tr('gospel.tabs.countries') },
])
const active = ref('coverage')
// Clicking a bar is the drill-down seam: today it surfaces the row's own record, so a
@ -458,12 +462,12 @@ useShadowStyles(
unit="languages where the resource was found in the pools checked"
:max="nLang"
:legend="[
{ label: 'scripture', color: C.scripture },
{ label: 'film / stories', color: C.film },
{ label: tr('gospel.charts.keyScripture'), color: C.scripture },
{ label: tr('gospel.charts.keyFilmStories'), color: C.film },
// Audio, gospel presentations and training are drawn in this green and the legend
// never named it, so three of the eleven bars had no key at all.
{ label: 'audio / presentation / training', color: C.found },
{ label: 'nothing found', color: C.none },
{ label: tr('gospel.charts.keyAudioEtc'), color: C.found },
{ label: tr('gospel.legend.tier0'), color: C.none },
]"
:caveats="poolCaveats"
@bar-click="onPick"
@ -477,8 +481,8 @@ useShadowStyles(
:subtitle="`The ${TOP_N} languages with no scripture and no film in the pools checked, ranked by the population of the people groups who speak them.`"
unit="people in the people groups whose PRIMARY language this is — not speakers of the language"
:legend="[
{ label: 'no resource found in pools checked', color: C.none },
{ label: 'code outside ISO 639-3 — unresolved, not measured', color: C.unresolved },
{ label: tr('gospel.charts.noResourceInPools'), color: C.none },
{ label: tr('gospel.charts.unresolvedCode'), color: C.unresolved },
]"
:caveats="[
...poolCaveats,
@ -495,8 +499,8 @@ useShadowStyles(
:subtitle="`The ${TOP_N} countries with the most languages that have nothing found. Bar length is every language present in that country.`"
unit="languages present in the country (a cross-border language counts in each)"
:legend="[
{ label: 'nothing found in pools checked', color: C.none },
{ label: 'a resource found', color: C.found },
{ label: tr('gospel.charts.nothingInPoolsLower'), color: C.none },
{ label: tr('gospel.charts.aResourceFound'), color: C.found },
]"
:caveats="[
...poolCaveats,

View file

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

View file

@ -36,6 +36,8 @@ import { labelFont } from '@map/maps/label-font.js'
import { computed, inject, ref, shallowRef, markRaw, onMounted, onBeforeUnmount } from 'vue'
import { useShadowStyles } from '@map/composables/useShadowStyles.js'
import { addMapAttribution } from '@map/composables/useMapAttribution'
import { ensureEngineScript, engineGlobal } from '@map/composables/useMapInstance.js'
import { installRtlTextPlugin } from '@map/maps/rtl-text.js'
import { resolveAssetsBase } from '@map/utils/embedBase.js'
const profileConfig = inject('profileConfig', ref(null))
@ -131,8 +133,14 @@ function paint(map) {
}
onMounted(async () => {
const gl = window.mapboxgl
// Load the engine rather than assume the page did: leaf <head>s no longer preload mapbox-gl.js
// (it leaked every visitor's IP to Mapbox under provider=maplibre). This map is Mapbox-only.
try { await ensureEngineScript('mapbox') } catch (_) {}
const gl = engineGlobal('mapbox')
if (!gl || !mapEl.value) { err.value = 'mapbox-gl not loaded'; return }
// RTL SHAPING before the map exists: a raw map is not covered by useMapInstance's install, and
// the Mapbox basemap draws Middle-East places in Arabic/Persian/Hebrew script for every viewer.
installRtlTextPlugin(gl)
try {
await load()
const map = new gl.Map({

View file

@ -72,6 +72,10 @@ import ThemeToggleButton from '@map/components/map-controls/ThemeToggleButton.vu
import GeocoderComponent from '@map/components/map-controls/GeocoderComponent.vue'
import { resolveMapProvider } from '@map/composables/useMapProvider.js'
import { ensureEngineScript, engineGlobal, engineStylesheetUrl } from '@map/composables/useMapInstance.js'
// Shapes Arabic / Persian / Hebrew BASEMAP labels. A raw map inherits nothing from the bundle
// entry, so this profile has to install it itself — see the call site below for why the entry's
// registration only ever worked by accident.
import { installRtlTextPlugin } from '@map/maps/rtl-text.js'
import { resolveNamedStyle } from '@map/styles/registry.js'
// Named imports: only the list arrays ship in the bundle; the file's bookkeeping fields stay out.
import { lists as clusterLists, asia_lists as clusterAsiaLists, uncovered_lists as clusterUncoveredLists } from './data/clusters.json'
@ -335,8 +339,7 @@ const LEGEND_TABS = [
// should meet the lists first and reach for Region only to sort them.
const LEGEND_DEFAULT_TAB = 1
const geocoderContext = 'people-groups'
const geocoderPlaceholder = 'Search people group, zone, or territory…'
const geocoderContext = 'people-groups'
let searchIndex = [] // [{ label, kind, target, _hay }] (gate handle)
const SEARCH_LIMIT = 8
@ -370,6 +373,17 @@ const { locale: packetLocale, t } = useI18n()
// COMPUTED, not a constant: a locale change must move it. A `const` captured at setup would keep
// the mounting language forever, which is the subtler half of the same bug.
const LEGEND_TITLE = computed(() => t('legend.title.upg100List'))
// ★ THE SEARCH PLACEHOLDER WAS THE LAST ENGLISH STRING ON THE ARABIC SCREEN. repo's ?lang=ar
// screenshot was clean except for this one hardcoded literal.
// ⚠ A computed, and declared HERE rather than beside geocoderContext, because t() is not
// initialised until line 359 — a const at 339 would capture the fallback and never re-evaluate
// when the locale changes.
// NO NEW TERMINOLOGY: composed from wording this product already ships and has already approved —
// search.kinds.peopleGroup for the group, tabs.upg100Zone for what this plugin calls a "zone"
// (its legend names them "UPG-100 Lists" / "قوائم UPG-100" / "UPG-100 名单"), and
// search.kinds.region for the territory. That is why this could be translated and the UUPGs
// column header could not: there, no source existed for the acronym.
const geocoderPlaceholder = computed(() => t('search.upg100Placeholder'))
const DEAF_COUNT = 123
// Shadow-root CSS. (No backticks inside this string — a stray backtick closes the
@ -1576,6 +1590,23 @@ onMounted(async () => {
// Load the engine the PROVIDER selects, not the one this file used to assume.
try { await ensureEngineScript(upgProvider) } catch (_) { /* fall through to the !gl notice below */ }
const gl = engineGlobal(upgProvider) || window.mapboxgl
// ★ SHAPE RTL BASEMAP LABELS — HERE, not in index.js, and not after the map exists.
// This profile builds its map RAW (`new gl.Map` below) instead of going through
// useMapInstance, so it inherits none of the entry's side effects. It appeared to work only
// because the leaf head PRELOADED the Mapbox peer, which made an entry-time registration land
// in time; studio is removing that preload, and with the engine injected lazily an index.js
// call runs before `gl` exists and does nothing at all.
//
// ⚠ IT IS NOT A UI-LANGUAGE FEATURE, which is why it matters more than it looks. A basemap
// draws each place in its OWN script, so over the Middle East, Iran and Israel MOST labels are
// Arabic, Persian or Hebrew for EVERY viewer in EVERY UI language. Unshaped, they render
// reversed — a WRONG NAME for exactly the groups this map is about — and it fails silently:
// no error, no warning, just mirrored text that reads as a font problem to anyone who does not
// know the script. Arab World and Persian-Median are both in scope here.
//
// Idempotent: Mapbox throws if the plugin is set twice in a session and the helper swallows it,
// so this is safe alongside any other caller on the same page.
if (gl) installRtlTextPlugin(gl)
const token = mapboxToken?.value || profileConfig?.value?.tk || ''
// Degraded exits: keep the terse telemetry in `status`, put the human-readable
// notice in the MAP CELL, and still enrich the legend with live population data

View file

@ -21,6 +21,7 @@
import { ref, watch, onMounted, onBeforeUnmount, computed, inject } from 'vue'
import { ensureGeocoder, GEOCODER } from '../utils/pplrData.js'
import { resolveMapProvider } from '@map/composables/useMapProvider.js'
import { ensureEngineScript, engineGlobal } from '@map/composables/useMapInstance.js'
import { useInstance } from '../composables/usePplrInstance.js'
const props = defineProps({
@ -155,7 +156,7 @@ function setup() {
render: renderSuggestion,
})
} else {
if (!window.MapboxGeocoder || !window.mapboxgl) {
if (!window.MapboxGeocoder || !engineGlobal('mapbox')) {
console.warn('[MapboxGeocoder] mapbox-gl-geocoder or mapbox-gl not on window — check CDN <script> tags')
return
}
@ -164,7 +165,7 @@ function setup() {
}
geocoder = new window.MapboxGeocoder({
accessToken: props.mapboxToken,
mapboxgl: window.mapboxgl,
mapboxgl: engineGlobal('mapbox'),
placeholder: props.placeholder,
localGeocoder: buildLocalGeocoder(),
localGeocoderOnly: false,
@ -252,7 +253,10 @@ function onGlobalKey(e) {
onMounted(() => {
// setup() swallows its own errors; a failed script load leaves the map working without search.
ensureGeocoder(provider).then(setup, (e) => console.warn('[MapboxGeocoder]', e.message))
// The ENGINE first, then its geocoder: the Mapbox path hands mapboxgl to the geocoder, and it
// used to find it only because every leaf <head> preloaded mapbox-gl.js. ensureEngineScript is
// a no-op when the map already loaded it.
ensureEngineScript(provider).then(() => ensureGeocoder(provider)).then(setup, (e) => console.warn('[MapboxGeocoder]', e.message))
document.addEventListener('keydown', onGlobalKey)
})
onBeforeUnmount(() => {

View file

@ -60,13 +60,8 @@ export function ensureGeocoder(provider = 'mapbox') {
// The engine namespace that built THIS map (Popup, Marker, NavigationControl…). The views were
// written against the Mapbox global; under provider=maplibre that global does not exist and a
// `new mapboxgl.Popup` throws on the first pin click.
export function glFor(map) {
if (typeof window === 'undefined') return undefined
const ml = window.maplibregl
if (ml && map && ml.Map && map instanceof ml.Map) return ml
return window.mapboxgl || ml
}
// `new mapboxgl.Popup` throws on the first pin click. Now the library's engineFor (one copy).
export { engineFor as glFor } from '@map/composables/useMapProvider.js'
// Verification handle (the gospel-resources __grState contract): what the ACTIVE view's map
// actually did, so a check can assert "loaded" rather than inferring it from missing requests.

File diff suppressed because one or more lines are too long

View file

@ -26,7 +26,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <cities-internet-map> custom element. -->
<script src="../cities-internet.js" integrity="sha384-pGwAlE/HlDchxMolwOKt/SaASlcd53/lqXzCGWEf30HHiH8evPJC+cMBoLI9fmQr" crossorigin="anonymous"></script>
<script src="../cities-internet.js" integrity="sha384-AbREfdDrihkPw7LojNDUYzWDm1KluyleaTv3FsGi31ZCcE5jdYc6yqML6eykz6zb" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -29,7 +29,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <cities-internet-map> custom element. -->
<script src="../cities-internet.js" integrity="sha384-pGwAlE/HlDchxMolwOKt/SaASlcd53/lqXzCGWEf30HHiH8evPJC+cMBoLI9fmQr" crossorigin="anonymous"></script>
<script src="../cities-internet.js" integrity="sha384-AbREfdDrihkPw7LojNDUYzWDm1KluyleaTv3FsGi31ZCcE5jdYc6yqML6eykz6zb" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -26,7 +26,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <cities-internet-map> custom element. -->
<script src="../cities-internet.js" integrity="sha384-pGwAlE/HlDchxMolwOKt/SaASlcd53/lqXzCGWEf30HHiH8evPJC+cMBoLI9fmQr" crossorigin="anonymous"></script>
<script src="../cities-internet.js" integrity="sha384-AbREfdDrihkPw7LojNDUYzWDm1KluyleaTv3FsGi31ZCcE5jdYc6yqML6eykz6zb" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -29,7 +29,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <country-posters-map> custom element. -->
<script src="../country-posters.js" integrity="sha384-G6u1nOz/I1DWzNU5Rgh32LEQEcp7lhRs+3JBmbVwPG17+FtZUcEjTz8ZKPnUaou9" crossorigin="anonymous"></script>
<script src="../country-posters.js" integrity="sha384-BsZewNf7114rVNUG5E8SutbHIMNkrsXOyQmjWJvyDanYoEPOWnuWq0snZg0JJEz6" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -26,7 +26,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <country-posters-map> custom element. -->
<script src="../country-posters.js" integrity="sha384-G6u1nOz/I1DWzNU5Rgh32LEQEcp7lhRs+3JBmbVwPG17+FtZUcEjTz8ZKPnUaou9" crossorigin="anonymous"></script>
<script src="../country-posters.js" integrity="sha384-BsZewNf7114rVNUG5E8SutbHIMNkrsXOyQmjWJvyDanYoEPOWnuWq0snZg0JJEz6" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -40,7 +40,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <country-posters-map> custom element. -->
<script src="../country-posters.js" integrity="sha384-G6u1nOz/I1DWzNU5Rgh32LEQEcp7lhRs+3JBmbVwPG17+FtZUcEjTz8ZKPnUaou9" crossorigin="anonymous"></script>
<script src="../country-posters.js" integrity="sha384-BsZewNf7114rVNUG5E8SutbHIMNkrsXOyQmjWJvyDanYoEPOWnuWq0snZg0JJEz6" 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

@ -29,7 +29,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-h1553zNZpllxRlMAzN3V4rNxui8rNkCgUkb3x/cnl9/eDr3NI8KidPJ7CKXgPoFL" crossorigin="anonymous"></script>
<script src="../demo-map.js" integrity="sha384-4S2EX1ghqh1rC/tTUhRSP12TwwNuMdyHplZuDrKTmpjpdtqWx0D8SMoytz290CfA" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -27,7 +27,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-h1553zNZpllxRlMAzN3V4rNxui8rNkCgUkb3x/cnl9/eDr3NI8KidPJ7CKXgPoFL" crossorigin="anonymous"></script>
<script src="../../demo-map.js" integrity="sha384-4S2EX1ghqh1rC/tTUhRSP12TwwNuMdyHplZuDrKTmpjpdtqWx0D8SMoytz290CfA" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -105,7 +105,7 @@
"bundle": "cities-internet",
"scriptUrl": "./cities-internet/cities-internet.js",
"output": "doxa-maps/cities-internet/cities-internet.js",
"integrity": "sha384-pGwAlE/HlDchxMolwOKt/SaASlcd53/lqXzCGWEf30HHiH8evPJC+cMBoLI9fmQr",
"integrity": "sha384-AbREfdDrihkPw7LojNDUYzWDm1KluyleaTv3FsGi31ZCcE5jdYc6yqML6eykz6zb",
"elements": [
"cities-internet-map"
],
@ -121,7 +121,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-pGwAlE/HlDchxMolwOKt/SaASlcd53/lqXzCGWEf30HHiH8evPJC+cMBoLI9fmQr\" 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-AbREfdDrihkPw7LojNDUYzWDm1KluyleaTv3FsGi31ZCcE5jdYc6yqML6eykz6zb\" 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>"
}
},
{
@ -135,7 +135,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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-pGwAlE/HlDchxMolwOKt/SaASlcd53/lqXzCGWEf30HHiH8evPJC+cMBoLI9fmQr\" 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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-AbREfdDrihkPw7LojNDUYzWDm1KluyleaTv3FsGi31ZCcE5jdYc6yqML6eykz6zb\" 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>"
}
},
{
@ -149,7 +149,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-pGwAlE/HlDchxMolwOKt/SaASlcd53/lqXzCGWEf30HHiH8evPJC+cMBoLI9fmQr\" 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-AbREfdDrihkPw7LojNDUYzWDm1KluyleaTv3FsGi31ZCcE5jdYc6yqML6eykz6zb\" 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>"
}
}
]
@ -158,7 +158,7 @@
"bundle": "country-posters",
"scriptUrl": "./country-posters/country-posters.js",
"output": "doxa-maps/country-posters/country-posters.js",
"integrity": "sha384-G6u1nOz/I1DWzNU5Rgh32LEQEcp7lhRs+3JBmbVwPG17+FtZUcEjTz8ZKPnUaou9",
"integrity": "sha384-BsZewNf7114rVNUG5E8SutbHIMNkrsXOyQmjWJvyDanYoEPOWnuWq0snZg0JJEz6",
"elements": [
"country-posters-map"
],
@ -178,7 +178,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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-G6u1nOz/I1DWzNU5Rgh32LEQEcp7lhRs+3JBmbVwPG17+FtZUcEjTz8ZKPnUaou9\" 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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-BsZewNf7114rVNUG5E8SutbHIMNkrsXOyQmjWJvyDanYoEPOWnuWq0snZg0JJEz6\" 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>"
}
},
{
@ -192,7 +192,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-G6u1nOz/I1DWzNU5Rgh32LEQEcp7lhRs+3JBmbVwPG17+FtZUcEjTz8ZKPnUaou9\" 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-BsZewNf7114rVNUG5E8SutbHIMNkrsXOyQmjWJvyDanYoEPOWnuWq0snZg0JJEz6\" 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>"
}
},
{
@ -206,7 +206,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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-G6u1nOz/I1DWzNU5Rgh32LEQEcp7lhRs+3JBmbVwPG17+FtZUcEjTz8ZKPnUaou9\" 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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-BsZewNf7114rVNUG5E8SutbHIMNkrsXOyQmjWJvyDanYoEPOWnuWq0snZg0JJEz6\" 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>"
}
}
]
@ -259,7 +259,7 @@
"bundle": "demo-map",
"scriptUrl": "./demo-map/demo-map.js",
"output": "doxa-maps/demo-map/demo-map.js",
"integrity": "sha384-h1553zNZpllxRlMAzN3V4rNxui8rNkCgUkb3x/cnl9/eDr3NI8KidPJ7CKXgPoFL",
"integrity": "sha384-4S2EX1ghqh1rC/tTUhRSP12TwwNuMdyHplZuDrKTmpjpdtqWx0D8SMoytz290CfA",
"elements": [
"demo-map"
],
@ -275,7 +275,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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./demo-map/demo-map.js\" integrity=\"sha384-h1553zNZpllxRlMAzN3V4rNxui8rNkCgUkb3x/cnl9/eDr3NI8KidPJ7CKXgPoFL\" 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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./demo-map/demo-map.js\" integrity=\"sha384-4S2EX1ghqh1rC/tTUhRSP12TwwNuMdyHplZuDrKTmpjpdtqWx0D8SMoytz290CfA\" 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": [
{
@ -354,7 +354,7 @@
"bundle": "doxa-research-map",
"scriptUrl": "./doxa-research-map/doxa-research-map.js",
"output": "doxa-maps/doxa-research-map/doxa-research-map.js",
"integrity": "sha384-Pk6CG0TX1kipT6m8MoyGjMA2ZUPUYqWCXPKNyPSaF/VN5cXD9WCV6pXKiqCeCtkg",
"integrity": "sha384-RqfRc7EsvtX56t1761uTjpm4voNYtK66bftORRGRJZ1KcdIHAgjmeN5jChaNRgoY",
"elements": [
"doxa-research-map"
],
@ -370,7 +370,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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-Pk6CG0TX1kipT6m8MoyGjMA2ZUPUYqWCXPKNyPSaF/VN5cXD9WCV6pXKiqCeCtkg\" 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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-RqfRc7EsvtX56t1761uTjpm4voNYtK66bftORRGRJZ1KcdIHAgjmeN5jChaNRgoY\" 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": [
{
@ -396,7 +396,7 @@
"bundle": "doxa-simple-map",
"scriptUrl": "./doxa-simple-map/doxa-simple-map.js",
"output": "doxa-maps/doxa-simple-map/doxa-simple-map.js",
"integrity": "sha384-5TALsTo7YgHoTIlkgpGKed/yPECovNWVXfnxhldO/VyJjSxWt5aXM/5Kh8l5OZI9",
"integrity": "sha384-fx5Lsx2/f/30onBfP6UZ8fZw9rVUrvtJ5XFiFD+nm7ZbIiN5sngh9TuQNWDnbpIC",
"elements": [
"doxa-map",
"doxa-simple-map"
@ -413,7 +413,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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-5TALsTo7YgHoTIlkgpGKed/yPECovNWVXfnxhldO/VyJjSxWt5aXM/5Kh8l5OZI9\" 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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-fx5Lsx2/f/30onBfP6UZ8fZw9rVUrvtJ5XFiFD+nm7ZbIiN5sngh9TuQNWDnbpIC\" 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": [
{
@ -579,7 +579,7 @@
"bundle": "gospel-resources",
"scriptUrl": "./gospel-resources/gospel-resources.js",
"output": "doxa-maps/gospel-resources/gospel-resources.js",
"integrity": "sha384-fs5dEnZOFnYc+hS69jQzYKGMMuBU/I+wf4HUvyHgBG+DltXdzhBIOfYv2pKDysfa",
"integrity": "sha384-WpBCKqbGmwroMs8Uk7FPoeHsp2ujbg5Bhm0eBttNAo36Q4p8CErApNPwPRmAEtjM",
"elements": [
"gospel-resources-map"
],
@ -599,7 +599,7 @@
"scriptUrl": "./gospel-resources/gospel-resources.js",
"embed": {
"iframe": "<iframe src=\"./gospel-resources/charts/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-fs5dEnZOFnYc+hS69jQzYKGMMuBU/I+wf4HUvyHgBG+DltXdzhBIOfYv2pKDysfa\" 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-WpBCKqbGmwroMs8Uk7FPoeHsp2ujbg5Bhm0eBttNAo36Q4p8CErApNPwPRmAEtjM\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -613,7 +613,7 @@
"scriptUrl": "./gospel-resources/gospel-resources.js",
"embed": {
"iframe": "<iframe src=\"./gospel-resources/data-tables/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-fs5dEnZOFnYc+hS69jQzYKGMMuBU/I+wf4HUvyHgBG+DltXdzhBIOfYv2pKDysfa\" 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-WpBCKqbGmwroMs8Uk7FPoeHsp2ujbg5Bhm0eBttNAo36Q4p8CErApNPwPRmAEtjM\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -627,7 +627,7 @@
"scriptUrl": "./gospel-resources/gospel-resources.js",
"embed": {
"iframe": "<iframe src=\"./gospel-resources/gospel-dashboard/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-fs5dEnZOFnYc+hS69jQzYKGMMuBU/I+wf4HUvyHgBG+DltXdzhBIOfYv2pKDysfa\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
"script": "<!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-WpBCKqbGmwroMs8Uk7FPoeHsp2ujbg5Bhm0eBttNAo36Q4p8CErApNPwPRmAEtjM\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -641,7 +641,7 @@
"scriptUrl": "./gospel-resources/gospel-resources.js",
"embed": {
"iframe": "<iframe src=\"./gospel-resources/resources-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-fs5dEnZOFnYc+hS69jQzYKGMMuBU/I+wf4HUvyHgBG+DltXdzhBIOfYv2pKDysfa\" 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-WpBCKqbGmwroMs8Uk7FPoeHsp2ujbg5Bhm0eBttNAo36Q4p8CErApNPwPRmAEtjM\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -655,7 +655,7 @@
"scriptUrl": "./gospel-resources/gospel-resources.js",
"embed": {
"iframe": "<iframe src=\"./gospel-resources/resources-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-fs5dEnZOFnYc+hS69jQzYKGMMuBU/I+wf4HUvyHgBG+DltXdzhBIOfYv2pKDysfa\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
"script": "<!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-WpBCKqbGmwroMs8Uk7FPoeHsp2ujbg5Bhm0eBttNAo36Q4p8CErApNPwPRmAEtjM\" 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>"
}
}
]
@ -664,7 +664,7 @@
"bundle": "my-upg-100-list",
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
"output": "doxa-maps/my-upg-100-list/my-upg-100-list.js",
"integrity": "sha384-njYpkCJRfvidFnin64I+sM1u4YUM0DKNkAxnVPKLPMyLFe4wTYIhqBok12xpf2ow",
"integrity": "sha384-tUePk2lUpTiV+HuPI7TICGGmyAajswoZmM7JB4YuksHa0U7jy7NmBRPiDoHMS8LU",
"elements": [
"my-upg-100-list-map"
],
@ -684,7 +684,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-njYpkCJRfvidFnin64I+sM1u4YUM0DKNkAxnVPKLPMyLFe4wTYIhqBok12xpf2ow\" 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-tUePk2lUpTiV+HuPI7TICGGmyAajswoZmM7JB4YuksHa0U7jy7NmBRPiDoHMS8LU\" 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>"
}
},
{
@ -698,7 +698,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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-njYpkCJRfvidFnin64I+sM1u4YUM0DKNkAxnVPKLPMyLFe4wTYIhqBok12xpf2ow\" 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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-tUePk2lUpTiV+HuPI7TICGGmyAajswoZmM7JB4YuksHa0U7jy7NmBRPiDoHMS8LU\" 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>"
}
},
{
@ -712,7 +712,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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-njYpkCJRfvidFnin64I+sM1u4YUM0DKNkAxnVPKLPMyLFe4wTYIhqBok12xpf2ow\" 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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-tUePk2lUpTiV+HuPI7TICGGmyAajswoZmM7JB4YuksHa0U7jy7NmBRPiDoHMS8LU\" 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>"
}
}
]
@ -837,7 +837,7 @@
"bundle": "pplr-data-maps",
"scriptUrl": "./pplr-data-maps/pplr-data-maps.js",
"output": "doxa-maps/pplr-data-maps/pplr-data-maps.js",
"integrity": "sha384-VAZGe3QrZoQE8sStTtEvDZNMRg571QVNygpRJCnRH+Mkp4nE6QDrF32FP8o2FHl5",
"integrity": "sha384-3YkjUuo/p0/JW/3xuAqnCtakJlpPhhDN+NLkZT7YCrt7aftEAGSU7g/ta8KbCrSb",
"elements": [
"pplr-data-maps"
],
@ -853,7 +853,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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./pplr-data-maps/pplr-data-maps.js\" integrity=\"sha384-VAZGe3QrZoQE8sStTtEvDZNMRg571QVNygpRJCnRH+Mkp4nE6QDrF32FP8o2FHl5\" 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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./pplr-data-maps/pplr-data-maps.js\" integrity=\"sha384-3YkjUuo/p0/JW/3xuAqnCtakJlpPhhDN+NLkZT7YCrt7aftEAGSU7g/ta8KbCrSb\" 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"
}

File diff suppressed because one or more lines are too long

View file

@ -29,7 +29,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-Pk6CG0TX1kipT6m8MoyGjMA2ZUPUYqWCXPKNyPSaF/VN5cXD9WCV6pXKiqCeCtkg" crossorigin="anonymous"></script>
<script src="../doxa-research-map.js" integrity="sha384-RqfRc7EsvtX56t1761uTjpm4voNYtK66bftORRGRJZ1KcdIHAgjmeN5jChaNRgoY" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -27,7 +27,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-Pk6CG0TX1kipT6m8MoyGjMA2ZUPUYqWCXPKNyPSaF/VN5cXD9WCV6pXKiqCeCtkg" crossorigin="anonymous"></script>
<script src="../../doxa-research-map.js" integrity="sha384-RqfRc7EsvtX56t1761uTjpm4voNYtK66bftORRGRJZ1KcdIHAgjmeN5jChaNRgoY" 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

@ -29,7 +29,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-5TALsTo7YgHoTIlkgpGKed/yPECovNWVXfnxhldO/VyJjSxWt5aXM/5Kh8l5OZI9" crossorigin="anonymous"></script>
<script src="../../doxa-simple-map.js" integrity="sha384-fx5Lsx2/f/30onBfP6UZ8fZw9rVUrvtJ5XFiFD+nm7ZbIiN5sngh9TuQNWDnbpIC" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -29,7 +29,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
<script src="../../doxa-simple-map.js" integrity="sha384-5TALsTo7YgHoTIlkgpGKed/yPECovNWVXfnxhldO/VyJjSxWt5aXM/5Kh8l5OZI9" crossorigin="anonymous"></script>
<script src="../../doxa-simple-map.js" integrity="sha384-fx5Lsx2/f/30onBfP6UZ8fZw9rVUrvtJ5XFiFD+nm7ZbIiN5sngh9TuQNWDnbpIC" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -29,7 +29,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
<script src="../doxa-simple-map.js" integrity="sha384-5TALsTo7YgHoTIlkgpGKed/yPECovNWVXfnxhldO/VyJjSxWt5aXM/5Kh8l5OZI9" crossorigin="anonymous"></script>
<script src="../doxa-simple-map.js" integrity="sha384-fx5Lsx2/f/30onBfP6UZ8fZw9rVUrvtJ5XFiFD+nm7ZbIiN5sngh9TuQNWDnbpIC" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -29,7 +29,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
<script src="../../doxa-simple-map.js" integrity="sha384-5TALsTo7YgHoTIlkgpGKed/yPECovNWVXfnxhldO/VyJjSxWt5aXM/5Kh8l5OZI9" crossorigin="anonymous"></script>
<script src="../../doxa-simple-map.js" integrity="sha384-fx5Lsx2/f/30onBfP6UZ8fZw9rVUrvtJ5XFiFD+nm7ZbIiN5sngh9TuQNWDnbpIC" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -26,7 +26,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-fs5dEnZOFnYc+hS69jQzYKGMMuBU/I+wf4HUvyHgBG+DltXdzhBIOfYv2pKDysfa" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-WpBCKqbGmwroMs8Uk7FPoeHsp2ujbg5Bhm0eBttNAo36Q4p8CErApNPwPRmAEtjM" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -26,7 +26,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-fs5dEnZOFnYc+hS69jQzYKGMMuBU/I+wf4HUvyHgBG+DltXdzhBIOfYv2pKDysfa" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-WpBCKqbGmwroMs8Uk7FPoeHsp2ujbg5Bhm0eBttNAo36Q4p8CErApNPwPRmAEtjM" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -40,7 +40,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-fs5dEnZOFnYc+hS69jQzYKGMMuBU/I+wf4HUvyHgBG+DltXdzhBIOfYv2pKDysfa" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-WpBCKqbGmwroMs8Uk7FPoeHsp2ujbg5Bhm0eBttNAo36Q4p8CErApNPwPRmAEtjM" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

File diff suppressed because one or more lines are too long

View file

@ -26,7 +26,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-fs5dEnZOFnYc+hS69jQzYKGMMuBU/I+wf4HUvyHgBG+DltXdzhBIOfYv2pKDysfa" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-WpBCKqbGmwroMs8Uk7FPoeHsp2ujbg5Bhm0eBttNAo36Q4p8CErApNPwPRmAEtjM" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -29,7 +29,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-fs5dEnZOFnYc+hS69jQzYKGMMuBU/I+wf4HUvyHgBG+DltXdzhBIOfYv2pKDysfa" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-WpBCKqbGmwroMs8Uk7FPoeHsp2ujbg5Bhm0eBttNAo36Q4p8CErApNPwPRmAEtjM" 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

@ -105,7 +105,7 @@
"bundle": "cities-internet",
"scriptUrl": "./cities-internet/cities-internet.js",
"output": "doxa-maps/cities-internet/cities-internet.js",
"integrity": "sha384-pGwAlE/HlDchxMolwOKt/SaASlcd53/lqXzCGWEf30HHiH8evPJC+cMBoLI9fmQr",
"integrity": "sha384-AbREfdDrihkPw7LojNDUYzWDm1KluyleaTv3FsGi31ZCcE5jdYc6yqML6eykz6zb",
"elements": [
"cities-internet-map"
],
@ -121,7 +121,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-pGwAlE/HlDchxMolwOKt/SaASlcd53/lqXzCGWEf30HHiH8evPJC+cMBoLI9fmQr\" 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-AbREfdDrihkPw7LojNDUYzWDm1KluyleaTv3FsGi31ZCcE5jdYc6yqML6eykz6zb\" 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>"
}
},
{
@ -135,7 +135,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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-pGwAlE/HlDchxMolwOKt/SaASlcd53/lqXzCGWEf30HHiH8evPJC+cMBoLI9fmQr\" 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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-AbREfdDrihkPw7LojNDUYzWDm1KluyleaTv3FsGi31ZCcE5jdYc6yqML6eykz6zb\" 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>"
}
},
{
@ -149,7 +149,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-pGwAlE/HlDchxMolwOKt/SaASlcd53/lqXzCGWEf30HHiH8evPJC+cMBoLI9fmQr\" 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-AbREfdDrihkPw7LojNDUYzWDm1KluyleaTv3FsGi31ZCcE5jdYc6yqML6eykz6zb\" 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>"
}
}
]
@ -158,7 +158,7 @@
"bundle": "country-posters",
"scriptUrl": "./country-posters/country-posters.js",
"output": "doxa-maps/country-posters/country-posters.js",
"integrity": "sha384-G6u1nOz/I1DWzNU5Rgh32LEQEcp7lhRs+3JBmbVwPG17+FtZUcEjTz8ZKPnUaou9",
"integrity": "sha384-BsZewNf7114rVNUG5E8SutbHIMNkrsXOyQmjWJvyDanYoEPOWnuWq0snZg0JJEz6",
"elements": [
"country-posters-map"
],
@ -178,7 +178,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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-G6u1nOz/I1DWzNU5Rgh32LEQEcp7lhRs+3JBmbVwPG17+FtZUcEjTz8ZKPnUaou9\" 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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-BsZewNf7114rVNUG5E8SutbHIMNkrsXOyQmjWJvyDanYoEPOWnuWq0snZg0JJEz6\" 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>"
}
},
{
@ -192,7 +192,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-G6u1nOz/I1DWzNU5Rgh32LEQEcp7lhRs+3JBmbVwPG17+FtZUcEjTz8ZKPnUaou9\" 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-BsZewNf7114rVNUG5E8SutbHIMNkrsXOyQmjWJvyDanYoEPOWnuWq0snZg0JJEz6\" 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>"
}
},
{
@ -206,7 +206,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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-G6u1nOz/I1DWzNU5Rgh32LEQEcp7lhRs+3JBmbVwPG17+FtZUcEjTz8ZKPnUaou9\" 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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-BsZewNf7114rVNUG5E8SutbHIMNkrsXOyQmjWJvyDanYoEPOWnuWq0snZg0JJEz6\" 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>"
}
}
]
@ -259,7 +259,7 @@
"bundle": "demo-map",
"scriptUrl": "./demo-map/demo-map.js",
"output": "doxa-maps/demo-map/demo-map.js",
"integrity": "sha384-h1553zNZpllxRlMAzN3V4rNxui8rNkCgUkb3x/cnl9/eDr3NI8KidPJ7CKXgPoFL",
"integrity": "sha384-4S2EX1ghqh1rC/tTUhRSP12TwwNuMdyHplZuDrKTmpjpdtqWx0D8SMoytz290CfA",
"elements": [
"demo-map"
],
@ -275,7 +275,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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./demo-map/demo-map.js\" integrity=\"sha384-h1553zNZpllxRlMAzN3V4rNxui8rNkCgUkb3x/cnl9/eDr3NI8KidPJ7CKXgPoFL\" 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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./demo-map/demo-map.js\" integrity=\"sha384-4S2EX1ghqh1rC/tTUhRSP12TwwNuMdyHplZuDrKTmpjpdtqWx0D8SMoytz290CfA\" 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": [
{
@ -354,7 +354,7 @@
"bundle": "doxa-research-map",
"scriptUrl": "./doxa-research-map/doxa-research-map.js",
"output": "doxa-maps/doxa-research-map/doxa-research-map.js",
"integrity": "sha384-Pk6CG0TX1kipT6m8MoyGjMA2ZUPUYqWCXPKNyPSaF/VN5cXD9WCV6pXKiqCeCtkg",
"integrity": "sha384-RqfRc7EsvtX56t1761uTjpm4voNYtK66bftORRGRJZ1KcdIHAgjmeN5jChaNRgoY",
"elements": [
"doxa-research-map"
],
@ -370,7 +370,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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-Pk6CG0TX1kipT6m8MoyGjMA2ZUPUYqWCXPKNyPSaF/VN5cXD9WCV6pXKiqCeCtkg\" 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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-RqfRc7EsvtX56t1761uTjpm4voNYtK66bftORRGRJZ1KcdIHAgjmeN5jChaNRgoY\" 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": [
{
@ -396,7 +396,7 @@
"bundle": "doxa-simple-map",
"scriptUrl": "./doxa-simple-map/doxa-simple-map.js",
"output": "doxa-maps/doxa-simple-map/doxa-simple-map.js",
"integrity": "sha384-5TALsTo7YgHoTIlkgpGKed/yPECovNWVXfnxhldO/VyJjSxWt5aXM/5Kh8l5OZI9",
"integrity": "sha384-fx5Lsx2/f/30onBfP6UZ8fZw9rVUrvtJ5XFiFD+nm7ZbIiN5sngh9TuQNWDnbpIC",
"elements": [
"doxa-map",
"doxa-simple-map"
@ -413,7 +413,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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-5TALsTo7YgHoTIlkgpGKed/yPECovNWVXfnxhldO/VyJjSxWt5aXM/5Kh8l5OZI9\" 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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-fx5Lsx2/f/30onBfP6UZ8fZw9rVUrvtJ5XFiFD+nm7ZbIiN5sngh9TuQNWDnbpIC\" 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": [
{
@ -579,7 +579,7 @@
"bundle": "gospel-resources",
"scriptUrl": "./gospel-resources/gospel-resources.js",
"output": "doxa-maps/gospel-resources/gospel-resources.js",
"integrity": "sha384-fs5dEnZOFnYc+hS69jQzYKGMMuBU/I+wf4HUvyHgBG+DltXdzhBIOfYv2pKDysfa",
"integrity": "sha384-WpBCKqbGmwroMs8Uk7FPoeHsp2ujbg5Bhm0eBttNAo36Q4p8CErApNPwPRmAEtjM",
"elements": [
"gospel-resources-map"
],
@ -599,7 +599,7 @@
"scriptUrl": "./gospel-resources/gospel-resources.js",
"embed": {
"iframe": "<iframe src=\"./gospel-resources/charts/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-fs5dEnZOFnYc+hS69jQzYKGMMuBU/I+wf4HUvyHgBG+DltXdzhBIOfYv2pKDysfa\" 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-WpBCKqbGmwroMs8Uk7FPoeHsp2ujbg5Bhm0eBttNAo36Q4p8CErApNPwPRmAEtjM\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -613,7 +613,7 @@
"scriptUrl": "./gospel-resources/gospel-resources.js",
"embed": {
"iframe": "<iframe src=\"./gospel-resources/data-tables/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-fs5dEnZOFnYc+hS69jQzYKGMMuBU/I+wf4HUvyHgBG+DltXdzhBIOfYv2pKDysfa\" 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-WpBCKqbGmwroMs8Uk7FPoeHsp2ujbg5Bhm0eBttNAo36Q4p8CErApNPwPRmAEtjM\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -627,7 +627,7 @@
"scriptUrl": "./gospel-resources/gospel-resources.js",
"embed": {
"iframe": "<iframe src=\"./gospel-resources/gospel-dashboard/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-fs5dEnZOFnYc+hS69jQzYKGMMuBU/I+wf4HUvyHgBG+DltXdzhBIOfYv2pKDysfa\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
"script": "<!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-WpBCKqbGmwroMs8Uk7FPoeHsp2ujbg5Bhm0eBttNAo36Q4p8CErApNPwPRmAEtjM\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -641,7 +641,7 @@
"scriptUrl": "./gospel-resources/gospel-resources.js",
"embed": {
"iframe": "<iframe src=\"./gospel-resources/resources-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-fs5dEnZOFnYc+hS69jQzYKGMMuBU/I+wf4HUvyHgBG+DltXdzhBIOfYv2pKDysfa\" 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-WpBCKqbGmwroMs8Uk7FPoeHsp2ujbg5Bhm0eBttNAo36Q4p8CErApNPwPRmAEtjM\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -655,7 +655,7 @@
"scriptUrl": "./gospel-resources/gospel-resources.js",
"embed": {
"iframe": "<iframe src=\"./gospel-resources/resources-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-fs5dEnZOFnYc+hS69jQzYKGMMuBU/I+wf4HUvyHgBG+DltXdzhBIOfYv2pKDysfa\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
"script": "<!-- Mapbox engine, fetched early; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-WpBCKqbGmwroMs8Uk7FPoeHsp2ujbg5Bhm0eBttNAo36Q4p8CErApNPwPRmAEtjM\" 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>"
}
}
]
@ -664,7 +664,7 @@
"bundle": "my-upg-100-list",
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
"output": "doxa-maps/my-upg-100-list/my-upg-100-list.js",
"integrity": "sha384-njYpkCJRfvidFnin64I+sM1u4YUM0DKNkAxnVPKLPMyLFe4wTYIhqBok12xpf2ow",
"integrity": "sha384-tUePk2lUpTiV+HuPI7TICGGmyAajswoZmM7JB4YuksHa0U7jy7NmBRPiDoHMS8LU",
"elements": [
"my-upg-100-list-map"
],
@ -684,7 +684,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-njYpkCJRfvidFnin64I+sM1u4YUM0DKNkAxnVPKLPMyLFe4wTYIhqBok12xpf2ow\" 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-tUePk2lUpTiV+HuPI7TICGGmyAajswoZmM7JB4YuksHa0U7jy7NmBRPiDoHMS8LU\" 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>"
}
},
{
@ -698,7 +698,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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-njYpkCJRfvidFnin64I+sM1u4YUM0DKNkAxnVPKLPMyLFe4wTYIhqBok12xpf2ow\" 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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-tUePk2lUpTiV+HuPI7TICGGmyAajswoZmM7JB4YuksHa0U7jy7NmBRPiDoHMS8LU\" 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>"
}
},
{
@ -712,7 +712,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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-njYpkCJRfvidFnin64I+sM1u4YUM0DKNkAxnVPKLPMyLFe4wTYIhqBok12xpf2ow\" 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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-tUePk2lUpTiV+HuPI7TICGGmyAajswoZmM7JB4YuksHa0U7jy7NmBRPiDoHMS8LU\" 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>"
}
}
]
@ -837,7 +837,7 @@
"bundle": "pplr-data-maps",
"scriptUrl": "./pplr-data-maps/pplr-data-maps.js",
"output": "doxa-maps/pplr-data-maps/pplr-data-maps.js",
"integrity": "sha384-VAZGe3QrZoQE8sStTtEvDZNMRg571QVNygpRJCnRH+Mkp4nE6QDrF32FP8o2FHl5",
"integrity": "sha384-3YkjUuo/p0/JW/3xuAqnCtakJlpPhhDN+NLkZT7YCrt7aftEAGSU7g/ta8KbCrSb",
"elements": [
"pplr-data-maps"
],
@ -853,7 +853,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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./pplr-data-maps/pplr-data-maps.js\" integrity=\"sha384-VAZGe3QrZoQE8sStTtEvDZNMRg571QVNygpRJCnRH+Mkp4nE6QDrF32FP8o2FHl5\" 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; remove this line if you set \"provider\":\"maplibre\" -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./pplr-data-maps/pplr-data-maps.js\" integrity=\"sha384-3YkjUuo/p0/JW/3xuAqnCtakJlpPhhDN+NLkZT7YCrt7aftEAGSU7g/ta8KbCrSb\" 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"
}

File diff suppressed because one or more lines are too long

View file

@ -26,7 +26,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <my-upg-100-list-map> custom element. -->
<script src="../my-upg-100-list.js" integrity="sha384-njYpkCJRfvidFnin64I+sM1u4YUM0DKNkAxnVPKLPMyLFe4wTYIhqBok12xpf2ow" crossorigin="anonymous"></script>
<script src="../my-upg-100-list.js" integrity="sha384-tUePk2lUpTiV+HuPI7TICGGmyAajswoZmM7JB4YuksHa0U7jy7NmBRPiDoHMS8LU" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -29,7 +29,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <my-upg-100-list-map> custom element. -->
<script src="../my-upg-100-list.js" integrity="sha384-njYpkCJRfvidFnin64I+sM1u4YUM0DKNkAxnVPKLPMyLFe4wTYIhqBok12xpf2ow" crossorigin="anonymous"></script>
<script src="../my-upg-100-list.js" integrity="sha384-tUePk2lUpTiV+HuPI7TICGGmyAajswoZmM7JB4YuksHa0U7jy7NmBRPiDoHMS8LU" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -40,7 +40,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <my-upg-100-list-map> custom element. -->
<script src="../my-upg-100-list.js" integrity="sha384-njYpkCJRfvidFnin64I+sM1u4YUM0DKNkAxnVPKLPMyLFe4wTYIhqBok12xpf2ow" crossorigin="anonymous"></script>
<script src="../my-upg-100-list.js" integrity="sha384-tUePk2lUpTiV+HuPI7TICGGmyAajswoZmM7JB4YuksHa0U7jy7NmBRPiDoHMS8LU" 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

@ -29,7 +29,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-VAZGe3QrZoQE8sStTtEvDZNMRg571QVNygpRJCnRH+Mkp4nE6QDrF32FP8o2FHl5" crossorigin="anonymous"></script>
<script src="../pplr-data-maps.js" integrity="sha384-3YkjUuo/p0/JW/3xuAqnCtakJlpPhhDN+NLkZT7YCrt7aftEAGSU7g/ta8KbCrSb" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order: