Integrate main into bundler-2/work

# Conflicts:
#	public/dx-maps/big-picture/big-picture.js
#	public/dx-maps/dashboard-plus-grid/dashboard-plus-grid.js
#	public/dx-maps/research-dashboard/research-dashboard.js
This commit is contained in:
Doxa Maps 2026-09-26 03:25:09 +00:00
commit 018264f6be
112 changed files with 1807 additions and 700 deletions

View file

@ -0,0 +1,154 @@
# Universal props: the contract every plugin honours
The Plugin Studio header sets a few values that apply to **every** plugin on the page. A plugin
honours them when it reads them through the library's resolvers, never through its own literals.
This page lists each one: where it can come from (its **channels**), which channel wins
(**precedence**), and what happens when nothing sets it (**default**).
The set here is the one the header sets today: **engine, locale (with direction), Mapbox token and
token-service URL**. Whether anything else counts as universal is an open decision
(DECIDE-UNIVERSAL-PROPS-SCOPE), not part of this contract.
`profile-config` is the element's JSON attribute (`<doxa-map profile-config='{"tk":"pk.…"}'>`).
File references are to `library/` unless they name another folder.
## How the studio hands them to a plugin
`paneConfig()` in `plugin-designs/plugin-studio/plugin-studio.vue` builds each pane's
`profile-config`, with these keys: `profile`, `instanceId`, `locale` (always), `tk` (when a token is
known), `tokenUrl` (when the host passed one), `provider` (when one is chosen) and `treeBase`. It also
publishes `window.MAP_TOKEN` and `window.MAP_PROVIDER` for maps nested inside composites.
A token or engine change re-mounts the panes. A locale change re-sets `profile-config` on the
**active** pane only.
The header keeps the reader's choices in this browser:
| Prop | localStorage key |
|---|---|
| engine | `plugin-studio:map-provider` |
| locale | `doxa-maps:locale` |
| token | `plugin-studio:mapbox-token` |
| token-service URL | `plugin-studio:mapbox-token-url` |
---
## 1. Engine: `'mapbox'` | `'maplibre'` (the header also offers "each map's own")
**The resolver:** `resolveMapProvider(profileConfig)` in `composables/useMapProvider.js`.
`useMapInstance` calls it when no `provider` argument is passed. Values are lowercased and
trimmed; anything unrecognised becomes the default.
| Rank | Channel | Name |
|---|---|---|
| 1 | profile-config | `provider` |
| 2 | URL | `?provider=` |
| 3 | window | `window.MAP_PROVIDER` |
| 4 | default | `'mapbox'` (`DEFAULT_PROVIDER`) |
- **The studio's own ladder:** the reader's choice (localStorage), then the studio's `provider` prop,
then its `profile-config.provider`. Only the exact strings `mapbox` and `maplibre` survive.
"Each map's own" sends no `provider`, so a pane falls to its own default: Mapbox for every map
except the ones below.
- **Plugins that do not follow the ladder, by design:**
- Prayer Walk Planner is keyless and always MapLibre.
- key-cities is Mapbox-only (gated, and it uses `mapbox://` styles).
- Research Dashboard's map panel (`DashboardMapPanel.vue`) accepts the page switch only when it
resolves to `maplibre`; otherwise its bundle config pins `mapbox`.
- **Rule for plugins:** create maps through `useMapInstance`. A raw `new gl.Map` must take its
engine from `resolveMapProvider`, its style from `styles/registry.js` (`resolveNamedStyle`), and
every Marker, Popup or control from `engineFor(map)`. Never use a `mapbox://` URL or a bare
`mapboxgl` global.
## 2. Locale (UI language) and its direction
**The resolvers:**
- `detectLocale` in `i18n/index.js`, used by `createAppI18n`.
- `ProfileLoader.vue`, which overrides it from profile-config, drives the app's i18n and
`setRuntimeLocale`, and publishes `window.__DOXA_PAGE_LOCALE`.
| Rank | Channel | Name |
|---|---|---|
| 1 | profile-config | `locale`, or `lang` (base code, must be in `SUPPORTED_LOCALES`) |
| 2 | URL | `?lang=`, or `?locale=` |
| 3 | host page | `<html lang>` |
| 4 | default | `'en'` |
- **Supported codes:** `SUPPORTED_LOCALES` in `i18n/index.js` (11 codes).
- **Direction:**
- `rtl` exactly when the locale is in `RTL_LOCALES` (today only `ar`).
- ProfileLoader sets `dir` on the plugin's own root, never on the host page.
- **Composites:** read `lang || locale` and forward `lang` to their children.
- **The studio's ladder** is richer than the library's: profile-config `locale|lang` → `?lang|locale`
→ saved `doxa-maps:locale` → `navigator.language` → `'en'`. It passes the result to each pane as
`profile-config.locale`.
- **Rule for plugins:**
- Take every user-facing string from `t()` or `tStatic()`.
- Format numbers with the active locale, never `toLocaleString('en-US')` or a bare `toLocaleString()`.
- Take direction from the resolved locale.
## 3. Mapbox token (a public `pk.` token)
**The resolver:** `ProfileLoader.vue`, which provides it to children as `mapboxToken`.
| Rank | Channel | Name |
|---|---|---|
| 1 | profile-config | `tk` |
| 2 | page-wide shared token | `window.__doxaMapToken`, fed by `window.MAP_TOKEN` through `useSharedMapToken.js` |
| 3 | default | none (`''`) |
- **Where it's used:**
- `useMapInstance` uses the token it is given, else `window.MAP_TOKEN`.
- Mapbox maps require a `pk.` token; MapLibre needs none.
- **Generated leaf pages** (`internal/generate-tree.mjs`) resolve the token before the element
mounts: `profile-config.tk` → `?tk=` → localStorage `MAPS_STAGING_TK` → the token baked at build
time → the token service (section 4).
- **The studio's ladder:** the reader's pasted token → a token fetched from the reader's URL → the
studio's `tk` prop → its `profile-config.tk` → the page's baked `window.MAP_TOKEN`. Only `pk.`
tokens are accepted. A secret `sk.` token is refused.
- **Rule for plugins:**
- Read the token only from the injected `mapboxToken`, or pass nothing to `useMapInstance`.
- Never use a private global or a literal.
## 4. Token-service URL
A URL that returns a public token as JSON (`{token|tk|accessToken}`) or as a bare string.
- **Generated leaf pages:** `window.MAP_TOKEN_URL` → the build config's `tokenUrl`, or
`sources.json` `mapboxTokenUrl` → `/api/maps/token`. This runs only when no direct token was
found; a token baked at build time wins.
- **The studio:** the reader's URL (localStorage). The studio fetches it itself, and the fetched
token then travels as `tk` / `window.MAP_TOKEN`.
- **Plugins:** none reads `profile-config.tokenUrl` today. The studio and the Research Gallery
forward it, but no element consumes it (see the open points below).
---
## Open points found while writing this down
Each is a defect or a decision, routed through dx-shepherd.
1. **`profile-config.tokenUrl` has no reader.** It is written by the studio and the gallery and
read by nothing. The reader's own URL is also never forwarded as `tokenUrl`, only as the token
it produced.
2. **A token fetched from a URL can arrive after the first pane has mounted.** The studio publishes
it without re-mounting, so the pane keeps no token until something re-mounts it.
3. **Clearing the token in the studio leaves the old one in use.** `delete window.MAP_TOKEN` removes
the accessor that `useSharedMapToken` installed and never reinstalls it. An empty value is also
never published, so `window.__doxaMapToken` keeps the old token.
4. **Three raw maps read `window.DOXA_TOKEN`** instead of the injected `mapboxToken`:
cities-internet `connectivity-map.vue`, gospel-resources `resources-map.vue` and key-cities
`cities-map.vue`. Only some dev pages set `DOXA_TOKEN`, so on a built page or in the studio
these maps ignore the page-wide token.
5. **`createAppI18n` still sets `<html dir="rtl">`** on the host page for an Arabic URL or page. It
is set-only by design, but it contradicts ProfileLoader's own-root rule.
6. **The locale ladders disagree:**
- The studio uses `navigator.language` and a saved locale; the library and the gallery do not.
- The locale lists differ: 11 codes in `SUPPORTED_LOCALES` against 8 in `languages.js`.
- The studio normalises `it`, `ro` and `zh` to `en`.
7. **A locale switch in the studio updates only the active pane.** Panes visited earlier keep the
old language.
8. **Engine edges in the studio:**
- A host `provider="MapLibre"` (mixed case) becomes "each map's own".
- A host `provider` is not published to `window.MAP_PROVIDER` unless the reader chose one.
- Choosing "each map's own" deletes a `window.MAP_PROVIDER` the host page set.

View file

@ -0,0 +1,153 @@
#!/usr/bin/env node
/**
* check-universal-props.mjs — every plugin honours the props the Plugin Studio header sets for all
* of them (documentation/reference-universal-props.md): map ENGINE, LOCALE (+dir), Mapbox TOKEN and
* token-service URL. HEADLESS: no browser, no server. It reads what each bundle's source and SHIPPED
* bundle consume, and fails on a bypass: a literal or a private global where the library resolver
* belongs.
*
* WHY STATIC. A bypass is a line of code, and it is the same line whether or not anyone is looking
* at the map: a `setStyle('mapbox://…')` breaks the MapLibre engine switch, a `window.DOXA_TOKEN`
* read ignores the page's token, a `toLocaleString('en-US')` ignores the locale. Each was found in
* this tree by reading the source (the census behind the contract page). Rendering proves the
* happy path; this proves nobody went around it.
*
* RULES (id · prop · what fails):
* ENG-STYLE engine a `mapbox://` style literal in map.setStyle() or a raw `new gl.Map({style})`
* outside a resolveNamedStyle/registry fallback: MapLibre cannot load it
* (a style handed to useMapInstance is translated there, so it passes)
* ENG-GLOBAL engine `new mapboxgl.X` / `new window.mapboxgl.X` (build it with engineFor(map))
* ENG-PIN engine a literal provider:'mapbox'|'maplibre' handed to useMapInstance (ALLOW-listed
* where it is the plugin's design)
* TOK-GLOBAL token reading window.DOXA_TOKEN (nothing sets it on a built page; use the injected
* mapboxToken, fed by profile-config.tk and window.MAP_TOKEN)
* TOK-LITERAL token a `pk.ey…` token literal in code (comments excluded)
* LOC-ENUS locale toLocaleString('en-US') / Intl.NumberFormat('en-US') (use the active locale).
* WARN only: whether numerals follow the locale is a Driver decision
* Source = plugin-designs/<bundle>/**.{vue,js} minus index.html dev pages and scripts/. Shipped =
* public/<tree>/<bundle>/<bundle>.js, checked for the TOK-GLOBAL and TOK-LITERAL strings the
* minifier cannot rename.
*
* ALLOW: a documented exception per bundle+rule, with its reason. Nothing else passes.
* Self-test: every rule must fire on a synthetic violation, or the gate exits 3.
* Usage: node internal/check-universal-props.mjs [--only a,b] [--report]
* Exit: 0 conforms · 1 a bypass · 3 self-test could not see a planted bypass.
*/
import { readFileSync, readdirSync, statSync, existsSync } from 'node:fs'
import { resolve, dirname, join, relative } from 'node:path'
import { fileURLToPath } from 'node:url'
import { TREE_NAME } from './_tree-name.mjs'
const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..')
const argv = process.argv.slice(2)
const ONLY = argv.includes('--only') ? argv[argv.indexOf('--only') + 1].split(',') : null
const REPORT = argv.includes('--report')
// The 7 production maps' bundles (PRODUCTION-MATRIX.md) and the Experimental shelf.
const BUNDLES = [
'dashboard-plus-grid', 'research-dashboard', 'research-map-plus-grid', 'doxa-research-map', 'people-groups-grid',
'regions-dashboard', 'my-upg-100-list', 'doxa-simple-map', 'cities-internet', 'gospel-resources',
'all-people-groups', 'country-posters', 'doxa-vision-card', 'pplr-data-maps', 'prayer-walk-planner',
'upg-neighbor', 'wall-of-people-groups', 'key-cities',
]
const ALLOW = {
'prayer-walk-planner:ENG-PIN': 'keyless by design: always MapLibre, needs no token (index.js header)',
'key-cities:ENG-STYLE': 'gated, Mapbox-only by design (mapbox:// styles, ensureEngineScript(\'mapbox\'))',
}
const stripComments = (src) => src
.replace(/<!--[\s\S]*?-->/g, (m) => m.replace(/[^\n]/g, ' '))
.replace(/\/\*[\s\S]*?\*\//g, (m) => m.replace(/[^\n]/g, ' '))
.replace(/(^|[^:\\'"`])\/\/[^\n]*/g, (m, p) => p + ' '.repeat(m.length - p.length))
const RULES = [
{ id: 'ENG-STYLE', prop: 'engine', test(src) {
// useMapInstance swaps any non-http style for an OpenFreeMap one under MapLibre
// (maplibreStyle() in useMapInstance.js), so a mapbox:// default handed to IT is fine. What is
// not translated: a direct map.setStyle('mapbox://…') and a raw `new gl.Map({ style: 'mapbox://…' })`.
const out = []
const res = [/setStyle\s*\(([^;]{0,220}?)mapbox:\/\/styles\//g, /new\s+[\w.]+\.Map\s*\(\s*\{[^}]{0,400}?style\s*:([^,}]{0,160}?)mapbox:\/\/styles\//g]
for (const re of res) { let m; while ((m = re.exec(src))) {
const win = src.slice(Math.max(0, m.index - 160), m.index + m[0].length)
if (/resolveNamedStyle|registry|\.style\s*\|\|/.test(win)) continue // a fallback behind the registry
out.push(m.index)
} }
return out } },
{ id: 'ENG-GLOBAL', prop: 'engine', re: /new\s+(?:window\.)?mapboxgl\.(?:Marker|Popup|Map|NavigationControl|FullscreenControl|GeolocateControl|ScaleControl|AttributionControl)\b/g },
{ id: 'ENG-PIN', prop: 'engine', re: /useMapInstance\s*\(\s*\{[^}]{0,400}?provider\s*:\s*['"](?:mapbox|maplibre)['"]/g },
{ id: 'TOK-GLOBAL', prop: 'token', re: /window\.DOXA_TOKEN\b/g, shipped: 'DOXA_TOKEN' },
{ id: 'TOK-LITERAL', prop: 'token', re: /['"`]pk\.ey[A-Za-z0-9_-]{20,}/g, shipped: /pk\.eyJ[A-Za-z0-9_-]{20,}/ },
{ id: 'LOC-ENUS', prop: 'locale', warn: true, re: /(?:toLocaleString|NumberFormat|DateTimeFormat)\s*\(\s*['"]en(?:-US)?['"]/g },
]
const run = (rule, src) => rule.test ? rule.test(src) : [...src.matchAll(rule.re)].map((m) => m.index)
const lineOf = (src, idx) => src.slice(0, idx).split('\n').length
// ── self-test: every rule must see a planted violation ─────────────────────────────────────────
const PLANTED = `
map.setStyle(isDark ? 'mapbox://styles/mapbox/dark-v11' : 'x')
const m2 = new gl.Map({ container: el, style: 'mapbox://styles/mapbox/light-v11' })
const p = new mapboxgl.Popup()
useMapInstance({ container: el, provider: 'mapbox' })
const tk = window.DOXA_TOKEN
const t = 'pk.eyJ1IjoiZXhhbXBsZSIsImEiOiJjbGFudGVkIn0'
n.toLocaleString('en-US')`
const missed = RULES.filter((r) => !run(r, stripComments(PLANTED)).length).map((r) => r.id)
const CLEAN = `map.setStyle(resolveNamedStyle('ink', p).style || 'mapbox://styles/mapbox/dark-v11')
useMapInstance({ container: el, style: cfg.style ?? 'mapbox://styles/mapbox/light-v11' })
// new mapboxgl.Popup() in a comment is not code
n.toLocaleString(locale.value)`
const falsePos = RULES.filter((r) => run(r, stripComments(CLEAN)).length).map((r) => r.id)
if (missed.length || falsePos.length) {
console.error(`UNIVERSAL-PROPS: SELF-TEST FAILED — ${missed.length ? 'rules blind to a planted bypass: ' + missed.join(', ') : ''}${falsePos.length ? ' false positives on clean code: ' + falsePos.join(', ') : ''}`)
process.exit(3)
}
// ── scan ───────────────────────────────────────────────────────────────────────────────────────
function files(dir) {
const out = []
for (const n of readdirSync(dir)) {
const p = join(dir, n)
if (n === 'node_modules' || n === 'scripts' || n === 'data' || n === 'assets') continue
const st = statSync(p)
if (st.isDirectory()) out.push(...files(p))
else if (/\.(vue|js|mjs)$/.test(n)) out.push(p)
}
return out
}
const findings = []
const matrix = {}
for (const b of BUNDLES.filter((x) => !ONLY || ONLY.includes(x))) {
const dir = resolve(ROOT, 'plugin-designs', b)
if (!existsSync(dir)) continue
matrix[b] = { engine: 'ok', token: 'ok', locale: 'ok' }
for (const f of files(dir)) {
const src = stripComments(readFileSync(f, 'utf8'))
for (const r of RULES) for (const idx of run(r, src)) {
const allowed = ALLOW[`${b}:${r.id}`]
if (allowed) { if (matrix[b][r.prop] === 'ok') matrix[b][r.prop] = 'allowed'; continue }
findings.push({ b, rule: r.id, prop: r.prop, warn: !!r.warn, where: `${relative(ROOT, f)}:${lineOf(src, idx)}`, text: src.slice(idx, idx + 70).replace(/\s+/g, ' ').trim() })
matrix[b][r.prop] = r.warn ? (matrix[b][r.prop] === 'BYPASS' ? 'BYPASS' : 'warn') : 'BYPASS'
}
}
const shipped = resolve(ROOT, 'public', TREE_NAME, b, `${b}.js`)
if (existsSync(shipped)) {
const js = readFileSync(shipped, 'utf8')
for (const r of RULES.filter((x) => x.shipped)) {
const hit = typeof r.shipped === 'string' ? js.includes(r.shipped) : r.shipped.test(js)
if (hit && !ALLOW[`${b}:${r.id}`]) { findings.push({ b, rule: r.id, prop: r.prop, where: relative(ROOT, shipped), text: '(in the shipped bundle)' }); matrix[b][r.prop] = 'BYPASS' }
}
}
}
if (REPORT) {
console.log('bundle'.padEnd(24) + 'engine'.padEnd(10) + 'token'.padEnd(10) + 'locale')
for (const [b, m] of Object.entries(matrix)) console.log(b.padEnd(24) + m.engine.padEnd(10) + m.token.padEnd(10) + m.locale)
}
for (const f of findings) console.log(`${f.warn ? 'WARN ' : 'BYPASS '} ${f.b.padEnd(22)} ${f.rule.padEnd(11)} ${f.where} ${f.text}`)
const hard = findings.filter((f) => !f.warn)
if (findings.length - hard.length) console.log(`UNIVERSAL-PROPS: ${findings.length - hard.length} WARN(s): LOC-ENUS fixes numerals to en-US whatever the locale. Warn-only until the Driver decides the numerals policy.`)
if (hard.length) {
console.log(`UNIVERSAL-PROPS: FAIL — ${hard.length} bypass(es) in ${new Set(hard.map((f) => f.b)).size} bundle(s). Read the prop through the library (documentation/reference-universal-props.md), or ALLOW it here with the reason it is by design.`)
process.exit(1)
}
console.log(`UNIVERSAL-PROPS: PASS — ${Object.keys(matrix).length} bundles read engine, token and locale through the library (self-test: ${RULES.length} rules each caught a planted bypass).`)

View file

@ -481,7 +481,7 @@ function readTokenUrlExpr() {
// ── HTML escaping ────────────────────────────────────────────────────────────
const esc = (s) => String(s)
.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/\u0022/g, '&quot;') // \u0022, not a bare quote: template-literal-check reads a bare one as an open string
// ── Shared theme (dark, gem frames) ──────────────────────────────────────────
const BASE_CSS = `
@ -613,6 +613,12 @@ function forgeHtml(o) {
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>${esc(o.title)}</title>
<link rel="icon" href="data:,">
<style>${FORGE_CSS}</style>
@ -704,6 +710,12 @@ function studioRootHtml(bakedToken, integrity = '') {
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>${esc(DISPLAY_TITLE)} plugin studio</title>
<link rel="icon" href="data:,">
${bakedToken ? ` <script>window.MAP_TOKEN=${JSON.stringify(bakedToken)};</script>\n` : ''}${DEST_CONFIG.apiBaseUrl ? ` <script>window.MAP_APP_API_URL = ${JSON.stringify(DEST_CONFIG.apiBaseUrl)};</script>\n` : ''} <style>
@ -810,6 +822,12 @@ function mapPageHtml(opts) {
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>${esc(title)}</title>
<link rel="icon" href="data:,">
${peerBlock}

View file

@ -22,6 +22,7 @@
* DOXA_SKIP_FRESHNESS=1 skips (4) — for a DRY check only; main-capture scan never sets it.
*/
import { spawnSync } from 'node:child_process'
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'
import { resolve, dirname } from 'node:path'
import { fileURLToPath } from 'node:url'
import { TREE_NAME } from './_tree-name.mjs'
@ -73,6 +74,20 @@ if (process.env.DOXA_SKIP_FRESHNESS === '1') {
const own = [...new Set(changed.map((f) => (f.match(/^plugin-designs\/([^/]+)\//) || [])[1]).filter(Boolean))]
const scope = shared ? ['--all'] : (own.length ? ['--bundles', own.join(',')] : [])
console.log(`LANDING-PRECONDITIONS: 4 fresh — scope: ${shared ? 'EVERY bundle (shared code changed' + (base ? '' : '; no merge-base') + ')' : 'composites' + (own.length ? ' + ' + own.join(', ') : '')}`)
// ★ ONE PASS PER TREE, NOT ONE PER SCAN. This check rebuilds every bundle in its scope (~10 min for
// --all), and it used to run INSIDE the merge-queue lock, so a build-owner landing held main for 30+ min
// while every other landing queued (2026-09-25). The verdict is a function of the committed tree and the
// scope, so a PASS is recorded against both; the landing script runs this precondition BEFORE taking the
// lock, and the scan inside the lock finds the record and does not rebuild again. A different tree or a
// wider scope has no record and is checked in full. The record lives in the repo's own git dir.
const treeId = run('git', ['rev-parse', 'HEAD^{tree}']).stdout.trim()
const stampDir = resolve(ROOT, run('git', ['rev-parse', '--git-common-dir']).stdout.trim(), 'doxa-fresh')
const stamp = resolve(stampDir, `${treeId}.${scope.join('_').replace(/[^\w,.-]/g, '') || 'composites'}`)
if (treeId && existsSync(stamp)) {
console.log(`LANDING-PRECONDITIONS: 4 fresh — this exact tree (${treeId.slice(0, 10)}) already passed at this scope, ${readFileSync(stamp, 'utf8').trim()}`)
console.log('LANDING-PRECONDITIONS: PASS — this commit may land.')
process.exit(0)
}
const fresh = run(process.execPath, ['internal/check-composite-freshness.mjs', ...scope])
if (fresh.status !== 0) refuse(
'a committed composite is not what its source builds (stale consumers).\n' +
@ -82,5 +97,6 @@ if (process.env.DOXA_SKIP_FRESHNESS === '1') {
'own plugin is stale, rebuild just it: BUNDLE=<name> bun x vite build && bun run tree && bun run fix:sri.',
(fresh.stdout + fresh.stderr).trim().split('\n').filter((l) => /✗|STALE|FAIL/.test(l)).slice(0, 8).join('\n'))
console.log('LANDING-PRECONDITIONS: 4 fresh — every composite rebuilds to its committed bytes')
if (treeId) { mkdirSync(stampDir, { recursive: true }); writeFileSync(stamp, `${new Date().toISOString()} (commit ${run('git', ['rev-parse', '--short', 'HEAD']).stdout.trim()})\n`) }
}
console.log('LANDING-PRECONDITIONS: PASS — this commit may land.')

View file

@ -135,8 +135,22 @@ export function createAppI18n() {
// Only ever SET it, never clear it: a host page that already declares dir (a
// WordPress RTL theme) owns that decision, and stomping it to "ltr" for an
// English map embedded in an Arabic page would break the page around us.
// ★ ONLY WHERE WE OWN THE PAGE. This used to run whenever the locale resolved to an RTL
// language, which meant an EMBEDDED plugin on a partner's page flipped the PARTNER'S whole
// <html> — their headings, their nav, their footer — because a reader followed a ?lang=ar link.
// The comment below already worried about the host owning that decision, but it only guarded
// against CLEARING dir, never against setting it.
//
// A GENERATED LEAF owns its document and says so with window.MAP_OWNS_PAGE. Nothing else sets
// it, so the DEFAULT IS "not ours" — a partner page that declares nothing is never touched,
// which is the safe direction for a flag whose absence must mean restraint.
//
// The element's OWN direction is not this code's business and never was: ProfileLoader binds
// dir on .profile-loader from effectiveLocale (0f6d5049), so the plugin mirrors correctly
// whether or not it owns the document. This is only about the page around it.
try {
if (RTL_LOCALES.has(locale) && document?.documentElement) {
const ownsPage = typeof window !== 'undefined' && window.MAP_OWNS_PAGE === true
if (ownsPage && RTL_LOCALES.has(locale) && document?.documentElement) {
document.documentElement.dir = 'rtl'
}
} catch { /* no document (SSR/tests) — nothing to reflect */ }

View file

@ -21,5 +21,38 @@
"carriers": "شركات الاتصالات ومزودو الإنترنت ({n})",
"socialPlatforms": "منصات التواصل الاجتماعي",
"note": "أرقام وطنية وليست قياسات للمدن. أسماء شركات الاتصالات هي أسماء أصحاب سجلات ASN — وتشمل البنوك والجامعات إلى جانب مزودي الإنترنت، لذا فإن تصنيفها كشركات اتصالات تقدير مبني على الاسم وليس تصنيفًا مُتحقَّقًا منه."
},
"list": {
"title": "المدن المتصلة بالإنترنت",
"intro": "الاتصال حيث تعيش الشعوب غير المُبشَّرة. كل رقم إحصاء وطني مُقاس مع سنة رصده —",
"introStrong": "«غير معروف» يعني غير مُقاس، ولا يُفترض أبدًا.",
"countries": "الدول: {n}",
"measured": "مُقاسة: {n}",
"unknown": "غير معروفة: {n}",
"low": "اتصال منخفض: {n}",
"sectionMeta": "الدول: {countries} · الشعوب: {groups}",
"unmeasured": "غير مُقاسة: {n}",
"rowMeta": "الشعوب: {groups} · المواقع: {locations}",
"centres": "مراكز سكانية: {n}",
"mobPer100": "جوال/100",
"band": {
"yes": "متصل",
"partial": "جزئي",
"no": "منخفض",
"unknown": "غير معروف"
},
"source": "أرقام الإنترنت والجوال: البيانات المفتوحة للبنك الدولي (CC BY 4.0)، أحدث رصد 2018–2024. الفئات: متصل ≥60% · جزئي 25–59% · منخفض <25% من السكان يستخدمون الإنترنت. الدقة على مستوى الدولة: قياسات كل مدينة غير متاحة للعموم بهذا النطاق. أسماء مزودي الإنترنت وشركات الاتصالات وتاريخ الرقابة تتطلب مصادر موثقة لكل دولة ولا تُعرض هنا."
},
"tables": {
"title": "بيانات المدن",
"intro": "حيث تعيش الشعوب غير المُبشَّرة، وما الذي يصل إليها. رتّب أي جدول وصفّه وصدّره؛ لكل جدول مصادره وحدوده.",
"tabs": {
"cities": "المدن الرئيسية",
"internet": "الاتصال",
"operators": "مزودو الإنترنت والاتصالات",
"social": "المنصات الاجتماعية",
"messaging": "تطبيقات المراسلة"
},
"loading": "جارٍ تحميل {name}…"
}
}

View file

@ -23,5 +23,6 @@
"selectView": "اختر العرض",
"views": "العروض",
"prayerResources": "موارد الصلاة",
"map": "الخريطة"
"map": "الخريطة",
"countryPosters": "ملصقات الدول"
}

View file

@ -21,5 +21,38 @@
"carriers": "Netzbetreiber & ISPs ({n})",
"socialPlatforms": "Soziale Plattformen",
"note": "Landesweite Zahlen, keine Messungen je Stadt. Betreibernamen sind ASN-Registerinhaber — darunter neben ISPs auch Banken und Universitäten; die Einstufung als Netzbetreiber ist daher eine Namensheuristik, keine geprüfte Klassifizierung."
},
"list": {
"title": "Städte mit Internet",
"intro": "Konnektivität dort, wo die unerreichten Volksgruppen leben. Jede Zahl ist eine gemessene nationale Statistik mit ihrem Erhebungsjahr —",
"introStrong": "„unbekannt“ heißt ungemessen, nie angenommen.",
"countries": "Länder: {n}",
"measured": "gemessen: {n}",
"unknown": "unbekannt: {n}",
"low": "geringe Konnektivität: {n}",
"sectionMeta": "Länder: {countries} · Volksgruppen: {groups}",
"unmeasured": "ungemessen: {n}",
"rowMeta": "Volksgruppen: {groups} · Orte: {locations}",
"centres": "Bevölkerungszentren: {n}",
"mobPer100": "Mobil/100",
"band": {
"yes": "verbunden",
"partial": "teilweise",
"no": "gering",
"unknown": "unbekannt"
},
"source": "Internet- und Mobilfunkzahlen: World Bank Open Data (CC BY 4.0), jüngste Erhebung 2018–2024. Einteilung: verbunden ≥60 % · teilweise 25–59 % · gering <25 % der Bevölkerung nutzen das Internet. Auflösung auf Länderebene: Messungen pro Stadt sind in diesem Umfang nicht öffentlich verfügbar. Namen von Internetanbietern und Netzbetreibern sowie Zensurgeschichte erfordern belegte Berichte je Land und werden nicht angezeigt."
},
"tables": {
"title": "Städtedaten",
"intro": "Wo die unerreichten Volksgruppen leben – und was sie erreicht. Jede Tabelle lässt sich sortieren, filtern und exportieren; jede führt ihre eigenen Quellen und Grenzen.",
"tabs": {
"cities": "Schlüsselstädte",
"internet": "Konnektivität",
"operators": "Internetanbieter & Netzbetreiber",
"social": "Soziale Plattformen",
"messaging": "Messenger"
},
"loading": "{name} wird geladen…"
}
}

View file

@ -23,5 +23,6 @@
"selectView": "Ansicht wählen",
"views": "Ansichten",
"prayerResources": "Gebetsressourcen",
"map": "Karte"
"map": "Karte",
"countryPosters": "Länderposter"
}

View file

@ -21,5 +21,38 @@
"carriers": "Carriers & ISPs ({n})",
"socialPlatforms": "Social platforms",
"note": "National figures, not city measurements. Carrier names are ASN registry holders — that set includes banks and universities as well as ISPs, so the carrier flag is a name heuristic, not a verified classification."
},
"list": {
"title": "Cities with Internet",
"intro": "Connectivity where the unengaged people groups live. Every figure is a measured national statistic with its observation year —",
"introStrong": "unknown means unmeasured, never assumed.",
"countries": "{n} countries",
"measured": "{n} measured",
"unknown": "{n} unknown",
"low": "{n} low-connectivity",
"sectionMeta": "{countries} countries · {groups} people groups",
"unmeasured": "{n} unmeasured",
"rowMeta": "{groups} people groups · {locations} locations",
"centres": "{n} population centres",
"mobPer100": "mob/100",
"band": {
"yes": "connected",
"partial": "partial",
"no": "low",
"unknown": "unknown"
},
"source": "Internet and mobile figures: World Bank Open Data (CC BY 4.0), most recent observation 2018–2024. Banding: connected ≥60% · partial 25–59% · low <25% of population using the internet. Country-resolution: per-city measurements are not publicly available at this scale. ISP names, carrier names and censorship history require per-country cited reporting and are not shown."
},
"tables": {
"title": "Cities Data",
"intro": "Where the unengaged people groups live, and what reaches them. Sort, filter and export any table; each carries its own sources and limits.",
"tabs": {
"cities": "Key Cities",
"internet": "Connectivity",
"operators": "ISPs & Carriers",
"social": "Social Platforms",
"messaging": "Messaging Apps"
},
"loading": "Loading {name}…"
}
}

View file

@ -23,5 +23,6 @@
"selectView": "Select View",
"views": "Views",
"prayerResources": "Prayer Resources",
"map": "Map"
"map": "Map",
"countryPosters": "Country Posters"
}

View file

@ -21,5 +21,38 @@
"carriers": "Operadores y proveedores de internet ({n})",
"socialPlatforms": "Redes sociales",
"note": "Cifras nacionales, no mediciones por ciudad. Los nombres de operadores son titulares de registros ASN (incluyen bancos y universidades además de proveedores), así que la marca de operador es una heurística por nombre, no una clasificación verificada."
},
"list": {
"title": "Ciudades con internet",
"intro": "Conectividad donde viven los pueblos no alcanzados. Cada cifra es una estadística nacional medida, con su año de observación —",
"introStrong": "«desconocido» significa no medido, nunca supuesto.",
"countries": "países: {n}",
"measured": "medidos: {n}",
"unknown": "desconocidos: {n}",
"low": "baja conectividad: {n}",
"sectionMeta": "países: {countries} · pueblos: {groups}",
"unmeasured": "sin medir: {n}",
"rowMeta": "pueblos: {groups} · lugares: {locations}",
"centres": "centros de población: {n}",
"mobPer100": "móv./100",
"band": {
"yes": "conectado",
"partial": "parcial",
"no": "baja",
"unknown": "desconocido"
},
"source": "Cifras de internet y móvil: Datos Abiertos del Banco Mundial (CC BY 4.0), observación más reciente 2018–2024. Rangos: conectado ≥60 % · parcial 25–59 % · baja <25 % de la población usa internet. Resolución por país: no hay mediciones públicas por ciudad a esta escala. Los nombres de proveedores y operadores y el historial de censura requieren informes citados por país y no se muestran."
},
"tables": {
"title": "Datos de ciudades",
"intro": "Dónde viven los pueblos no alcanzados, y qué les llega. Ordena, filtra y exporta cualquier tabla; cada una indica sus fuentes y límites.",
"tabs": {
"cities": "Ciudades clave",
"internet": "Conectividad",
"operators": "Proveedores y operadores",
"social": "Redes sociales",
"messaging": "Mensajería"
},
"loading": "Cargando {name}…"
}
}

View file

@ -23,5 +23,6 @@
"selectView": "Seleccionar vista",
"views": "Vistas",
"prayerResources": "Recursos de oración",
"map": "Mapa"
"map": "Mapa",
"countryPosters": "Carteles por país"
}

View file

@ -21,5 +21,38 @@
"carriers": "Opérateurs et FAI ({n})",
"socialPlatforms": "Réseaux sociaux",
"note": "Chiffres nationaux, pas des mesures par ville. Les noms d'opérateurs sont les titulaires de registres ASN (on y trouve aussi des banques et des universités à côté des FAI), donc l'étiquette « opérateur » est une heuristique fondée sur le nom, non une classification vérifiée."
},
"list": {
"title": "Villes connectées à Internet",
"intro": "La connectivité là où vivent les peuples non atteints. Chaque chiffre est une statistique nationale mesurée, avec son année d’observation —",
"introStrong": "« inconnu » signifie non mesuré, jamais supposé.",
"countries": "pays : {n}",
"measured": "mesurés : {n}",
"unknown": "inconnus : {n}",
"low": "faible connectivité : {n}",
"sectionMeta": "pays : {countries} · peuples : {groups}",
"unmeasured": "non mesurés : {n}",
"rowMeta": "peuples : {groups} · lieux : {locations}",
"centres": "centres de population : {n}",
"mobPer100": "mob./100",
"band": {
"yes": "connecté",
"partial": "partiel",
"no": "faible",
"unknown": "inconnu"
},
"source": "Chiffres Internet et mobile : Données ouvertes de la Banque mondiale (CC BY 4.0), observation la plus récente 2018–2024. Tranches : connecté ≥60 % · partiel 25–59 % · faible <25 % de la population utilise Internet. Résolution par pays : aucune mesure publique par ville à cette échelle. Les noms des fournisseurs et opérateurs et l’historique de censure exigent des sources citées par pays et ne sont pas affichés."
},
"tables": {
"title": "Données des villes",
"intro": "Où vivent les peuples non atteints, et ce qui leur parvient. Triez, filtrez et exportez chaque tableau ; chacun indique ses sources et ses limites.",
"tabs": {
"cities": "Villes clés",
"internet": "Connectivité",
"operators": "FAI et opérateurs",
"social": "Réseaux sociaux",
"messaging": "Messageries"
},
"loading": "Chargement de {name}…"
}
}

View file

@ -23,5 +23,6 @@
"selectView": "Choisir la vue",
"views": "Vues",
"prayerResources": "Ressources de prière",
"map": "Carte"
"map": "Carte",
"countryPosters": "Affiches par pays"
}

View file

@ -21,5 +21,38 @@
"carriers": "कैरियर और आईएसपी ({n})",
"socialPlatforms": "सोशल प्लेटफ़ॉर्म",
"note": "ये राष्ट्रीय आँकड़े हैं, शहरों के माप नहीं। कैरियर के नाम ASN रजिस्ट्री धारकों के हैं — उनमें आईएसपी के साथ बैंक और विश्वविद्यालय भी शामिल हैं, इसलिए कैरियर का चिह्न नाम पर आधारित अनुमान है, सत्यापित वर्गीकरण नहीं।"
},
"list": {
"title": "इंटरनेट वाले शहर",
"intro": "जहाँ अप्रचारित जनसमूह रहते हैं, वहाँ की कनेक्टिविटी। हर आँकड़ा अपने अवलोकन वर्ष के साथ मापा गया राष्ट्रीय आँकड़ा है —",
"introStrong": "“अज्ञात” का अर्थ है मापा नहीं गया, कभी अनुमानित नहीं।",
"countries": "देश: {n}",
"measured": "मापे गए: {n}",
"unknown": "अज्ञात: {n}",
"low": "कम कनेक्टिविटी: {n}",
"sectionMeta": "देश: {countries} · जनसमूह: {groups}",
"unmeasured": "नहीं मापे गए: {n}",
"rowMeta": "जनसमूह: {groups} · स्थान: {locations}",
"centres": "जनसंख्या केंद्र: {n}",
"mobPer100": "मोबाइल/100",
"band": {
"yes": "जुड़ा",
"partial": "आंशिक",
"no": "कम",
"unknown": "अज्ञात"
},
"source": "इंटरनेट और मोबाइल आँकड़े: विश्व बैंक ओपन डेटा (CC BY 4.0), सबसे हाल का अवलोकन 2018–2024. श्रेणियाँ: जुड़ा ≥60% · आंशिक 25–59% · कम <25% आबादी इंटरनेट का उपयोग करती है। देश-स्तर का विवरण: इस पैमाने पर शहर-वार माप सार्वजनिक रूप से उपलब्ध नहीं हैं। इंटरनेट प्रदाताओं और ऑपरेटरों के नाम और सेंसरशिप का इतिहास हर देश के लिए उद्धृत रिपोर्टिंग माँगते हैं और यहाँ नहीं दिखाए गए हैं।"
},
"tables": {
"title": "शहरों का डेटा",
"intro": "अप्रचारित जनसमूह कहाँ रहते हैं, और उन तक क्या पहुँचता है। किसी भी तालिका को क्रमबद्ध, फ़िल्टर और निर्यात करें; हर तालिका अपने स्रोत और सीमाएँ साथ रखती है।",
"tabs": {
"cities": "मुख्य शहर",
"internet": "कनेक्टिविटी",
"operators": "इंटरनेट प्रदाता और ऑपरेटर",
"social": "सोशल प्लेटफ़ॉर्म",
"messaging": "मैसेजिंग ऐप"
},
"loading": "{name} लोड हो रहा है…"
}
}

View file

@ -23,5 +23,6 @@
"selectView": "दृश्य चुनें",
"views": "दृश्य",
"prayerResources": "प्रार्थना संसाधन",
"map": "मानचित्र"
"map": "मानचित्र",
"countryPosters": "देश पोस्टर"
}

View file

@ -21,5 +21,38 @@
"carriers": "Operatori e ISP ({n})",
"socialPlatforms": "Piattaforme social",
"note": "Dati nazionali, non misure per città. I nomi degli operatori sono titolari di registri ASN (includono banche e università oltre agli ISP), quindi l'etichetta di operatore è un'euristica basata sul nome, non una classificazione verificata."
},
"list": {
"title": "Città con Internet",
"intro": "La connettività dove vivono i popoli non raggiunti. Ogni cifra è una statistica nazionale misurata, con il suo anno di rilevazione —",
"introStrong": "«sconosciuto» significa non misurato, mai presunto.",
"countries": "paesi: {n}",
"measured": "misurati: {n}",
"unknown": "sconosciuti: {n}",
"low": "bassa connettività: {n}",
"sectionMeta": "paesi: {countries} · popoli: {groups}",
"unmeasured": "non misurati: {n}",
"rowMeta": "popoli: {groups} · luoghi: {locations}",
"centres": "centri abitati: {n}",
"mobPer100": "mob./100",
"band": {
"yes": "connesso",
"partial": "parziale",
"no": "bassa",
"unknown": "sconosciuto"
},
"source": "Dati su Internet e telefonia mobile: Open Data della Banca Mondiale (CC BY 4.0), rilevazione più recente 2018–2024. Fasce: connesso ≥60% · parziale 25–59% · bassa <25% della popolazione usa Internet. Risoluzione per paese: non esistono misurazioni pubbliche per città a questa scala. I nomi di provider e operatori e la storia della censura richiedono fonti citate per paese e non sono mostrati."
},
"tables": {
"title": "Dati delle città",
"intro": "Dove vivono i popoli non raggiunti, e cosa li raggiunge. Ordina, filtra ed esporta ogni tabella; ognuna riporta le proprie fonti e i propri limiti.",
"tabs": {
"cities": "Città chiave",
"internet": "Connettività",
"operators": "Provider e operatori",
"social": "Social",
"messaging": "Messaggistica"
},
"loading": "Caricamento di {name}…"
}
}

View file

@ -23,5 +23,6 @@
"selectView": "Seleziona vista",
"views": "Viste",
"prayerResources": "Risorse di preghiera",
"map": "Mappa"
"map": "Mappa",
"countryPosters": "Poster per paese"
}

View file

@ -21,5 +21,38 @@
"carriers": "Operadoras e provedores ({n})",
"socialPlatforms": "Redes sociais",
"note": "Números nacionais, não medições por cidade. Os nomes das operadoras são titulares de registros ASN (incluem bancos e universidades além de provedores), então a marcação de operadora é uma heurística pelo nome, não uma classificação verificada."
},
"list": {
"title": "Cidades com internet",
"intro": "Conectividade onde vivem os povos não alcançados. Cada número é uma estatística nacional medida, com o seu ano de observação —",
"introStrong": "«desconhecido» significa não medido, nunca presumido.",
"countries": "países: {n}",
"measured": "medidos: {n}",
"unknown": "desconhecidos: {n}",
"low": "baixa conectividade: {n}",
"sectionMeta": "países: {countries} · povos: {groups}",
"unmeasured": "não medidos: {n}",
"rowMeta": "povos: {groups} · locais: {locations}",
"centres": "centros populacionais: {n}",
"mobPer100": "móv./100",
"band": {
"yes": "conectado",
"partial": "parcial",
"no": "baixa",
"unknown": "desconhecido"
},
"source": "Números de internet e telemóvel: Dados Abertos do Banco Mundial (CC BY 4.0), observação mais recente 2018–2024. Faixas: conectado ≥60% · parcial 25–59% · baixa <25% da população usa a internet. Resolução por país: não há medições públicas por cidade nesta escala. Nomes de fornecedores e operadoras e o histórico de censura exigem fontes citadas por país e não são mostrados."
},
"tables": {
"title": "Dados das cidades",
"intro": "Onde vivem os povos não alcançados, e o que chega até eles. Ordene, filtre e exporte qualquer tabela; cada uma indica as suas fontes e limites.",
"tabs": {
"cities": "Cidades-chave",
"internet": "Conectividade",
"operators": "Fornecedores e operadoras",
"social": "Redes sociais",
"messaging": "Mensagens"
},
"loading": "A carregar {name}…"
}
}

View file

@ -23,5 +23,6 @@
"selectView": "Selecionar vista",
"views": "Vistas",
"prayerResources": "Recursos de oração",
"map": "Mapa"
"map": "Mapa",
"countryPosters": "Cartazes por país"
}

View file

@ -21,5 +21,38 @@
"carriers": "Operatori și ISP-uri ({n})",
"socialPlatforms": "Platforme sociale",
"note": "Cifre naționale, nu măsurători pe oraș. Numele operatorilor sunt titulari de înregistrări ASN (printre ei se află și bănci și universități, nu doar ISP-uri), deci eticheta de operator este o euristică după nume, nu o clasificare verificată."
},
"list": {
"title": "Orașe cu internet",
"intro": "Conectivitatea acolo unde trăiesc popoarele neatinse. Fiecare cifră este o statistică națională măsurată, cu anul observației —",
"introStrong": "„necunoscut” înseamnă nemăsurat, niciodată presupus.",
"countries": "țări: {n}",
"measured": "măsurate: {n}",
"unknown": "necunoscute: {n}",
"low": "conectivitate scăzută: {n}",
"sectionMeta": "țări: {countries} · popoare: {groups}",
"unmeasured": "nemăsurate: {n}",
"rowMeta": "popoare: {groups} · locuri: {locations}",
"centres": "centre de populație: {n}",
"mobPer100": "mob./100",
"band": {
"yes": "conectat",
"partial": "parțial",
"no": "scăzut",
"unknown": "necunoscut"
},
"source": "Cifre internet și mobil: Datele deschise ale Băncii Mondiale (CC BY 4.0), cea mai recentă observație 2018–2024. Categorii: conectat ≥60% · parțial 25–59% · scăzut <25% din populație folosește internetul. Rezoluție la nivel de țară: măsurătorile pe oraș nu sunt disponibile public la această scară. Numele furnizorilor și operatorilor și istoricul cenzurii necesită surse citate pentru fiecare țară și nu sunt afișate."
},
"tables": {
"title": "Datele orașelor",
"intro": "Unde trăiesc popoarele neatinse și ce ajunge la ele. Sortați, filtrați și exportați orice tabel; fiecare își poartă sursele și limitele.",
"tabs": {
"cities": "Orașe-cheie",
"internet": "Conectivitate",
"operators": "Furnizori și operatori",
"social": "Platforme sociale",
"messaging": "Aplicații de mesagerie"
},
"loading": "Se încarcă {name}…"
}
}

View file

@ -23,5 +23,6 @@
"selectView": "Alege vizualizarea",
"views": "Vizualizări",
"prayerResources": "Resurse de rugăciune",
"map": "Hartă"
"map": "Hartă",
"countryPosters": "Afișe pe țări"
}

View file

@ -21,5 +21,38 @@
"carriers": "Операторы и провайдеры ({n})",
"socialPlatforms": "Социальные платформы",
"note": "Национальные данные, а не измерения по городам. Названия операторов — это владельцы записей в реестре ASN; среди них есть банки и университеты, а не только провайдеры, поэтому пометка «оператор» — эвристика по названию, а не проверенная классификация."
},
"list": {
"title": "Города с интернетом",
"intro": "Связь там, где живут неохваченные народы. Каждая цифра — измеренная национальная статистика с годом наблюдения —",
"introStrong": "«неизвестно» значит «не измерено», а не предположено.",
"countries": "стран: {n}",
"measured": "измерено: {n}",
"unknown": "неизвестно: {n}",
"low": "слабая связь: {n}",
"sectionMeta": "стран: {countries} · народов: {groups}",
"unmeasured": "не измерено: {n}",
"rowMeta": "народов: {groups} · мест: {locations}",
"centres": "населённых центров: {n}",
"mobPer100": "моб./100",
"band": {
"yes": "подключено",
"partial": "частично",
"no": "слабо",
"unknown": "неизвестно"
},
"source": "Данные об интернете и мобильной связи: открытые данные Всемирного банка (CC BY 4.0), последнее наблюдение 2018–2024. Категории: подключено ≥60% · частично 25–59% · слабо <25% населения пользуется интернетом. Разрешение по странам: данные по отдельным городам публично недоступны в таком масштабе. Названия провайдеров и операторов и история цензуры требуют источников по каждой стране и не показаны."
},
"tables": {
"title": "Данные по городам",
"intro": "Где живут неохваченные народы и что до них доходит. Сортируйте, фильтруйте и экспортируйте любую таблицу; у каждой свои источники и ограничения.",
"tabs": {
"cities": "Ключевые города",
"internet": "Связь",
"operators": "Провайдеры и операторы",
"social": "Соцсети",
"messaging": "Мессенджеры"
},
"loading": "Загрузка: {name}…"
}
}

View file

@ -23,5 +23,6 @@
"selectView": "Выбрать вид",
"views": "Виды",
"prayerResources": "Молитвенные ресурсы",
"map": "Карта"
"map": "Карта",
"countryPosters": "Плакаты по странам"
}

View file

@ -21,5 +21,38 @@
"carriers": "运营商和互联网服务商({n})",
"socialPlatforms": "社交平台",
"note": "这是全国数据,不是城市测量值。运营商名称来自 ASN 注册持有者——其中除互联网服务商外还包括银行和大学,因此“运营商”标记是基于名称的推断,并非经过核实的分类。"
},
"list": {
"title": "联网城市",
"intro": "未接触族群所在地的网络连接情况。每个数字都是带有观测年份的实测国家统计 —",
"introStrong": "“未知”意味着未测量,绝不推测。",
"countries": "国家:{n}",
"measured": "已测量:{n}",
"unknown": "未知:{n}",
"low": "低连接:{n}",
"sectionMeta": "国家:{countries} · 族群:{groups}",
"unmeasured": "未测量:{n}",
"rowMeta": "族群:{groups} · 地点:{locations}",
"centres": "人口中心:{n}",
"mobPer100": "手机/百人",
"band": {
"yes": "已连接",
"partial": "部分",
"no": "低",
"unknown": "未知"
},
"source": "互联网与移动数据:世界银行开放数据(CC BY 4.0),最近观测 2018–2024。分档:已连接 ≥60% · 部分 25–59% · 低 <25% 的人口使用互联网。国家级精度:此规模下没有公开的逐城测量数据。互联网服务商与运营商名称及审查历史需要逐国引用的报道,此处不显示。"
},
"tables": {
"title": "城市数据",
"intro": "未接触族群生活在哪里,什么能触及他们。任何表格都可排序、筛选和导出;每张表都注明各自的来源与局限。",
"tabs": {
"cities": "重点城市",
"internet": "网络连接",
"operators": "网络服务商与运营商",
"social": "社交平台",
"messaging": "即时通讯"
},
"loading": "正在加载{name}…"
}
}

View file

@ -23,5 +23,6 @@
"selectView": "選擇檢視",
"views": "檢視",
"prayerResources": "禱告資源",
"map": "地圖"
"map": "地圖",
"countryPosters": "国家海报"
}

View file

@ -142,6 +142,7 @@
"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:universal-props": "node internal/check-universal-props.mjs --report",
"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",

View file

@ -34,8 +34,26 @@
import { computed, inject, ref } from 'vue'
import { useShadowStyles } from '@map/composables/useShadowStyles.js'
import data from './data/connectivity.json'
import { useI18n } from 'vue-i18n'
import enConnectivity from '@map/i18n/locales/en/connectivity.json'
const profileConfig = inject('profileConfig', ref(null))
// ── UI text: library/i18n/locales/<lc>/connectivity.json (the connectivity-map pattern) ──────
// i18n is OPTIONAL: useI18n() throws on a host that never installed it, so English from the
// shipped catalog is the fallback, never a blank or a key. Region and country names are data.
const enLookup = (key) =>
String(key).replace(/^connectivity\./, '').split('.').reduce((o, k) => (o == null ? o : o[k]), enConnectivity)
const fill = (str, params) => (params ? String(str).replace(/\{(\w+)\}/g, (m, k) => (k in params ? params[k] : m)) : str)
let t = (key, params) => fill(enLookup(key) ?? String(key), params)
try {
const i18n = useI18n()
t = (key, params) => { const v = i18n.t(key, params || {}); return v === key ? fill(enLookup(key) ?? key, params) : v }
} catch (_) { /* no i18n on this host: the English catalog above is the fallback */ }
// NUMERALS ARE HELD for the Driver (dx-shepherd, 2026-09-26): a locale-following format would switch
// 'ar' to Arabic-Indic digits. Until that is decided, numbers keep the browser-default format they
// had before this pass; only the TEXT is translated.
const num = (n) => (Number(n) || 0).toLocaleString()
const isDark = computed(() => profileConfig.value?.isDark === true)
const countries = computed(() => data.countries || [])
@ -75,7 +93,7 @@ const totals = computed(() => {
})
const band = (a) => a === 'yes' ? 'ok' : a === 'partial' ? 'mid' : a === 'no' ? 'low' : 'unk'
const bandLabel = (a) => a === 'yes' ? 'connected' : a === 'partial' ? 'partial' : a === 'no' ? 'low' : 'unknown'
const bandLabel = (a) => t('connectivity.list.band.' + (['yes', 'partial', 'no'].includes(a) ? a : 'unknown'))
useShadowStyles(
'.ci{position:absolute;inset:0;overflow-y:auto;padding:20px 18px 44px;background:#f6f7f9;color:#0f1419;' +
@ -119,17 +137,16 @@ useShadowStyles(
<template>
<div class="ci" :class="{ 'is-dark': isDark }">
<h2 class="ci-h">Cities with Internet</h2>
<h2 class="ci-h">{{ t('connectivity.list.title') }}</h2>
<p class="ci-sub">
Connectivity where the unengaged people groups live. Every figure is a measured national
statistic with its observation year — <strong>unknown means unmeasured, never assumed</strong>.
{{ t('connectivity.list.intro') }} <strong>{{ t('connectivity.list.introStrong') }}</strong>
</p>
<div class="ci-tot">
<span class="ci-chip">{{ totals.countries }} countries</span>
<span class="ci-chip">{{ totals.resolved }} measured</span>
<span class="ci-chip">{{ totals.unknown }} unknown</span>
<span class="ci-chip">{{ totals.low }} low-connectivity</span>
<span class="ci-chip">{{ t('connectivity.list.countries', { n: num(totals.countries) }) }}</span>
<span class="ci-chip">{{ t('connectivity.list.measured', { n: num(totals.resolved) }) }}</span>
<span class="ci-chip">{{ t('connectivity.list.unknown', { n: num(totals.unknown) }) }}</span>
<span class="ci-chip">{{ t('connectivity.list.low', { n: num(totals.low) }) }}</span>
</div>
<section v-for="sec in sections" :key="sec.name" class="sec">
@ -137,8 +154,8 @@ useShadowStyles(
<span class="sec-caret" :class="{ open: !isShut(sec.name) }">▶</span>
<h3 class="sec-name">{{ sec.name }}</h3>
<span class="sec-meta">
{{ sec.items.length }} countries · {{ sec.groups.toLocaleString() }} people groups
<template v-if="sec.unknown"> · {{ sec.unknown }} unmeasured</template>
{{ t('connectivity.list.sectionMeta', { countries: num(sec.items.length), groups: num(sec.groups) }) }}
<template v-if="sec.unknown"> · {{ t('connectivity.list.unmeasured', { n: num(sec.unknown) }) }}</template>
</span>
</button>
@ -147,8 +164,8 @@ useShadowStyles(
<div>
<div class="r-name">{{ c.country }}</div>
<div class="r-sub">
{{ c.people_groups }} people groups · {{ c.clusters }} locations
<template v-if="c.multi"> · {{ c.multi }} population centres</template>
{{ t('connectivity.list.rowMeta', { groups: num(c.people_groups), locations: num(c.clusters) }) }}
<template v-if="c.multi"> · {{ t('connectivity.list.centres', { n: num(c.multi) }) }}</template>
</div>
</div>
<div class="r-num">
@ -161,7 +178,7 @@ useShadowStyles(
<div class="r-num">
<template v-if="c.mobile_per_100 !== null && c.mobile_per_100 !== undefined">
{{ c.mobile_per_100 }}
<div class="r-sub">mob/100</div>
<div class="r-sub">{{ t('connectivity.list.mobPer100') }}</div>
</template>
<template v-else>—</template>
</div>
@ -170,11 +187,6 @@ useShadowStyles(
</div>
</section>
<p class="src">
Internet and mobile figures: World Bank Open Data (CC BY 4.0), most recent observation 2018–2024.
Banding: connected ≥60% · partial 25–59% · low &lt;25% of population using the internet.
Country-resolution — per-city measurements are not publicly available at this scale.
ISP names, carrier names and censorship history require per-country cited reporting and are not shown.
</p>
<p class="src">{{ t('connectivity.list.source') }}</p>
</div>
</template>

View file

@ -25,12 +25,30 @@ import { computed, inject, ref, watch } from 'vue'
import DataTable from '@map/components/tables/DataTable.vue'
import { useShadowStyles } from '@map/composables/useShadowStyles.js'
import { resolveAssetsBase } from '@map/utils/embedBase.js'
import { useI18n } from 'vue-i18n'
import enConnectivity from '@map/i18n/locales/en/connectivity.json'
const profileConfig = inject('profileConfig', ref(null))
const isDark = computed(() => profileConfig.value?.isDark === true)
const assetsBase = computed(() => resolveAssetsBase(profileConfig.value))
// ── UI text: library/i18n/locales/<lc>/connectivity.json (the connectivity-map pattern) ──────
// i18n is OPTIONAL: useI18n() throws on a host that never installed it, so English from the
// shipped catalog is the fallback, never a blank or a key. Region and country names are data.
const enLookup = (key) =>
String(key).replace(/^connectivity\./, '').split('.').reduce((o, k) => (o == null ? o : o[k]), enConnectivity)
const fill = (str, params) => (params ? String(str).replace(/\{(\w+)\}/g, (m, k) => (k in params ? params[k] : m)) : str)
let t = (key, params) => fill(enLookup(key) ?? String(key), params)
try {
const i18n = useI18n()
t = (key, params) => { const v = i18n.t(key, params || {}); return v === key ? fill(enLookup(key) ?? key, params) : v }
} catch (_) { /* no i18n on this host: the English catalog above is the fallback */ }
// NUMERALS ARE HELD for the Driver (dx-shepherd, 2026-09-26): a locale-following format would switch
// 'ar' to Arabic-Indic digits. Until that is decided, numbers keep the browser-default format they
// had before this pass; only the TEXT is translated.
const num = (n) => (Number(n) || 0).toLocaleString()
const TABS = [
{ id: 'cities', label: 'Key Cities', file: 'key-cities' },
{ id: 'internet', label: 'Connectivity', file: 'country-connectivity' },
@ -83,16 +101,13 @@ useShadowStyles(
<template>
<div class="ct" :class="{ 'is-dark': isDark }">
<h2 class="ct-h">Cities Data</h2>
<p class="ct-sub">
Where the unengaged people groups live — and what reaches them.
Sort, filter and export any table; each carries its own sources and limits.
</p>
<h2 class="ct-h">{{ t('connectivity.tables.title') }}</h2>
<p class="ct-sub">{{ t('connectivity.tables.intro') }}</p>
<div class="ct-tabs">
<button v-for="t in TABS" :key="t.id" type="button"
class="ct-tab" :class="{ on: active === t.id }" @click="active = t.id">
{{ t.label }}<span class="ct-n" v-if="cache[t.file]">{{ (cache[t.file].rows || []).length.toLocaleString() }}</span>
<button v-for="tab in TABS" :key="tab.id" type="button"
class="ct-tab" :class="{ on: active === tab.id }" @click="active = tab.id">
{{ t('connectivity.tables.tabs.' + tab.id) }}<span class="ct-n" v-if="cache[tab.file]">{{ num((cache[tab.file].rows || []).length) }}</span>
</button>
</div>
@ -100,7 +115,7 @@ useShadowStyles(
swapping both columns AND data on a live instance is where column state
(frozen, widths, filters) desynchronises from the new schema. -->
<div v-if="loadErr" class="ct-err">{{ loadErr }}</div>
<div v-else-if="!table" class="ct-load">Loading {{ current.label }}…</div>
<div v-else-if="!table" class="ct-load">{{ t('connectivity.tables.loading', { name: t('connectivity.tables.tabs.' + current.id) }) }}</div>
<DataTable
v-else
:key="current.id"

View file

@ -35,6 +35,14 @@ import { buildPaneColumn, PANE_GRID_STYLES } from '@map/layouts/pane-wrapper/pan
import { useShadowStyles } from '@map/composables/useShadowStyles.js'
import ViewSelect from '@map/components/ViewSelect.vue'
import ShareButton from '@map/components/map-controls/ShareButton.vue'
import { useI18n } from 'vue-i18n'
import enTabs from '@map/i18n/locales/en/tabs.json'
// The pane labels are the chrome a reader sees FIRST, and they were English literals while the
// panes inside translated (the upg-100-mfe finding). GUARDED: useI18n() throws on a host that never
// installed vue-i18n, so the English catalog is the fallback, never a blank or a dotted key.
let t = (k) => enTabs[String(k).replace(/^tabs\./, '')] || String(k)
try { const i18n = useI18n(); t = (k) => { const v = i18n.t(k); return v === k ? (enTabs[String(k).replace(/^tabs\./, '')] || k) : v } } catch (_) { /* no i18n on this host */ }
const cfg = inject('profileConfig', ref(null))
const uiStore = inject('uiStore', null)
@ -59,8 +67,8 @@ const spec = computed(() => ({
// while ViewSelect renders this array VERBATIM, so the two must agree or the tab
// strip desynchronises from the scroll column.
panes: [
{ id: 'wall', label: 'Country Posters', at: [0, 0], config: { profile: 'country-poster-wall' } },
{ id: 'map', label: 'Map', at: [1, 0], config: { profile: 'countries-map' } },
{ id: 'wall', label: t('tabs.countryPosters'), at: [0, 0], config: { profile: 'country-poster-wall' } },
{ id: 'map', label: t('tabs.map'), at: [1, 0], config: { profile: 'countries-map' } },
],
// The switcher lives in this element's own header, so the layout's "… below ↓"
// pill would be a second, redundant control (same call upg-100-mfe makes).

View file

@ -14,7 +14,7 @@
* people-groups-grid component; the dashboard is the exact research-dashboard component.
*/
import { reactive, provide, inject, ref, computed, watchEffect, watch, onMounted, getCurrentInstance } from 'vue'
import { SUPPORTED_LOCALES, setRuntimeLocale } from '@map/i18n/index.js'
import { SUPPORTED_LOCALES, RTL_LOCALES, setRuntimeLocale, getRuntimeLocale, detectLocale } from '@map/i18n/index.js'
import { resolveEmbedBase } from '@map/utils/embedBase.js'
import { useSharedMapToken, publishMapToken } from '@map/composables/useSharedMapToken.js'
import StackLayout from '@map/layouts/StackLayout.vue'

View file

@ -56,7 +56,7 @@
* elements do not merely look different, they imply OPPOSITE control ownership below.
*/
import { computed, reactive, watch, onMounted, onBeforeUnmount, getCurrentInstance, watchEffect, ref } from 'vue'
import { SUPPORTED_LOCALES, setRuntimeLocale } from '@map/i18n/index.js'
import { SUPPORTED_LOCALES, RTL_LOCALES, setRuntimeLocale, getRuntimeLocale, detectLocale } from '@map/i18n/index.js'
import StackLayout from '@map/layouts/StackLayout.vue'
import { resolveEmbedBase } from '@map/utils/embedBase.js'
import { publishMapToken } from '@map/composables/useSharedMapToken.js'

File diff suppressed because one or more lines are too long

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>all-people-groups · all-people-groups</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -30,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <all-people-groups> custom element. -->
<script src="../all-people-groups.js" integrity="sha384-Fk1cAFe2MbBsG2gfJQc2QNoG8CySIPOn0GWATpJ1uBlH51zspyobkOkzWAAXhn3H" crossorigin="anonymous"></script>
<script src="../all-people-groups.js" integrity="sha384-npdy7qTJnd1il1A28KBu1GtvBQE19MgD85j5NWxj/IolrBF3sKhYTzl/iqgRQAvT" 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

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>Big Picture — research header ↔ people-groups grid (composite) · big-picture</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
@ -37,7 +43,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <bp-big-picture> custom element. -->
<script src="../../big-picture.js" integrity="sha384-QkfaEQm7mpCC6VsaiEd+DAQEooG2EbLAL17qM5IHa6gejWy0p2thXkShsnbQXDW0" crossorigin="anonymous"></script>
<script src="../../big-picture.js" integrity="sha384-VURTOPp7qXzm2yZCpoIrqEhMrC1hbAyGrNmg9RhpzTKqmxCr9fNTdPqexzzgS8OH" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>Big Picture — frontier accent · big-picture</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
@ -37,7 +43,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <bp-big-picture> custom element. -->
<script src="../../big-picture.js" integrity="sha384-QkfaEQm7mpCC6VsaiEd+DAQEooG2EbLAL17qM5IHa6gejWy0p2thXkShsnbQXDW0" crossorigin="anonymous"></script>
<script src="../../big-picture.js" integrity="sha384-VURTOPp7qXzm2yZCpoIrqEhMrC1hbAyGrNmg9RhpzTKqmxCr9fNTdPqexzzgS8OH" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>big-picture · big-picture</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
@ -37,7 +43,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <bp-big-picture> custom element. -->
<script src="../big-picture.js" integrity="sha384-QkfaEQm7mpCC6VsaiEd+DAQEooG2EbLAL17qM5IHa6gejWy0p2thXkShsnbQXDW0" crossorigin="anonymous"></script>
<script src="../big-picture.js" integrity="sha384-VURTOPp7qXzm2yZCpoIrqEhMrC1hbAyGrNmg9RhpzTKqmxCr9fNTdPqexzzgS8OH" 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

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>connectivity-list · cities-internet</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
@ -26,7 +32,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <cities-internet-map> custom element. -->
<script src="../cities-internet.js" integrity="sha384-9GDQjiCOipIqmrbcDneieoklxT8wBvDjIuR0A1dJ3pRBvtmWffJn7DCMtFFWBu0F" crossorigin="anonymous"></script>
<script src="../cities-internet.js" integrity="sha384-mrFyobv27Rez+r7D8zfx8v0zV8anFpzKWuInX4SHo96KVnQhqOitVfILY4tjdBEi" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>connectivity-map · cities-internet</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -30,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <cities-internet-map> custom element. -->
<script src="../cities-internet.js" integrity="sha384-9GDQjiCOipIqmrbcDneieoklxT8wBvDjIuR0A1dJ3pRBvtmWffJn7DCMtFFWBu0F" crossorigin="anonymous"></script>
<script src="../cities-internet.js" integrity="sha384-mrFyobv27Rez+r7D8zfx8v0zV8anFpzKWuInX4SHo96KVnQhqOitVfILY4tjdBEi" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>data-tables · cities-internet</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
@ -26,7 +32,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <cities-internet-map> custom element. -->
<script src="../cities-internet.js" integrity="sha384-9GDQjiCOipIqmrbcDneieoklxT8wBvDjIuR0A1dJ3pRBvtmWffJn7DCMtFFWBu0F" crossorigin="anonymous"></script>
<script src="../cities-internet.js" integrity="sha384-mrFyobv27Rez+r7D8zfx8v0zV8anFpzKWuInX4SHo96KVnQhqOitVfILY4tjdBEi" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>countries-map · country-posters</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -30,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <country-posters-map> custom element. -->
<script src="../country-posters.js" integrity="sha384-lyfZlmC5pVYe/qvbvKKI+Xx+J6AYoXNo3V0vdBjP0oX7UW9M6zKxY/2ePobfApyu" crossorigin="anonymous"></script>
<script src="../country-posters.js" integrity="sha384-n0T9rOOsC50ppZASO07UWxyFCKTfilAMgcgn3+zG48uRKivmw2cEkraA+nXic9v7" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>country-poster-wall · country-posters</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
@ -26,7 +32,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <country-posters-map> custom element. -->
<script src="../country-posters.js" integrity="sha384-lyfZlmC5pVYe/qvbvKKI+Xx+J6AYoXNo3V0vdBjP0oX7UW9M6zKxY/2ePobfApyu" crossorigin="anonymous"></script>
<script src="../country-posters.js" integrity="sha384-n0T9rOOsC50ppZASO07UWxyFCKTfilAMgcgn3+zG48uRKivmw2cEkraA+nXic9v7" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>country-posters-mfe · country-posters</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -41,7 +47,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <country-posters-map> custom element. -->
<script src="../country-posters.js" integrity="sha384-lyfZlmC5pVYe/qvbvKKI+Xx+J6AYoXNo3V0vdBjP0oX7UW9M6zKxY/2ePobfApyu" crossorigin="anonymous"></script>
<script src="../country-posters.js" integrity="sha384-n0T9rOOsC50ppZASO07UWxyFCKTfilAMgcgn3+zG48uRKivmw2cEkraA+nXic9v7" 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

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>default · dashboard-plus-grid</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -41,7 +47,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <dashboard-plus-grid> custom element. -->
<script src="../../dashboard-plus-grid.js" integrity="sha384-stZQxboxwi/L6KrgqgqBx1RSdYtc4JhSz7g9Lf+DA7x3SKP2v8UpDRmDmG6O++8G" crossorigin="anonymous"></script>
<script src="../../dashboard-plus-grid.js" integrity="sha384-F2o7EFSzJSppnagqUHP73QA8s3LSZ+XiyNN6ltsG2sHhGpRkQFG/3gfIgHIvOa6i" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>dashboard-plus-grid · dashboard-plus-grid</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -41,7 +47,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <dashboard-plus-grid> custom element. -->
<script src="../dashboard-plus-grid.js" integrity="sha384-stZQxboxwi/L6KrgqgqBx1RSdYtc4JhSz7g9Lf+DA7x3SKP2v8UpDRmDmG6O++8G" crossorigin="anonymous"></script>
<script src="../dashboard-plus-grid.js" integrity="sha384-F2o7EFSzJSppnagqUHP73QA8s3LSZ+XiyNN6ltsG2sHhGpRkQFG/3gfIgHIvOa6i" 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

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>demo-map · demo-map</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -30,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <demo-map> custom element. -->
<script src="../demo-map.js" integrity="sha384-pQboGJuKCps0vTF6EI1gPDLlyZuLoDZTpH3HbbV7ROXstB6UmAVdvrzDk4K0uh4G" crossorigin="anonymous"></script>
<script src="../demo-map.js" integrity="sha384-e01v7Yez3VLCT6UVd24Qg5fSSzmX4emHdEC/9d+1K/ekrk2JFnBxi4fhPou+KweP" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>Demo map — MapLibre (token-free) · demo-map</title>
<link rel="icon" href="data:,">
<!-- MapLibre peer (token-free engine) loaded ONCE here; the custom element
@ -27,7 +33,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <demo-map> custom element. -->
<script src="../../demo-map.js" integrity="sha384-pQboGJuKCps0vTF6EI1gPDLlyZuLoDZTpH3HbbV7ROXstB6UmAVdvrzDk4K0uh4G" crossorigin="anonymous"></script>
<script src="../../demo-map.js" integrity="sha384-e01v7Yez3VLCT6UVd24Qg5fSSzmX4emHdEC/9d+1K/ekrk2JFnBxi4fhPou+KweP" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>Research Gallery — Big Picture + every research map (app-shell) · doxa-maps-spa</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>doxa-maps-spa · doxa-maps-spa</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.

View file

@ -13,7 +13,7 @@
"bundle": "all-people-groups",
"scriptUrl": "./all-people-groups/all-people-groups.js",
"output": "dx-maps/all-people-groups/all-people-groups.js",
"integrity": "sha384-Fk1cAFe2MbBsG2gfJQc2QNoG8CySIPOn0GWATpJ1uBlH51zspyobkOkzWAAXhn3H",
"integrity": "sha384-npdy7qTJnd1il1A28KBu1GtvBQE19MgD85j5NWxj/IolrBF3sKhYTzl/iqgRQAvT",
"elements": [
"all-people-groups"
],
@ -29,7 +29,7 @@
"scriptUrl": "./all-people-groups/all-people-groups.js",
"embed": {
"iframe": "<iframe src=\"./all-people-groups/all-people-groups/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early; 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=\"./all-people-groups/all-people-groups.js\" integrity=\"sha384-Fk1cAFe2MbBsG2gfJQc2QNoG8CySIPOn0GWATpJ1uBlH51zspyobkOkzWAAXhn3H\" crossorigin=\"anonymous\"></script>\n<all-people-groups profile-config='{\"profile\":\"all-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></all-people-groups>"
"script": "<!-- Mapbox engine, fetched early; 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=\"./all-people-groups/all-people-groups.js\" integrity=\"sha384-npdy7qTJnd1il1A28KBu1GtvBQE19MgD85j5NWxj/IolrBF3sKhYTzl/iqgRQAvT\" crossorigin=\"anonymous\"></script>\n<all-people-groups profile-config='{\"profile\":\"all-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></all-people-groups>"
},
"bundle": "all-people-groups"
}
@ -39,7 +39,7 @@
"bundle": "big-picture",
"scriptUrl": "./big-picture/big-picture.js",
"output": "dx-maps/big-picture/big-picture.js",
"integrity": "sha384-QkfaEQm7mpCC6VsaiEd+DAQEooG2EbLAL17qM5IHa6gejWy0p2thXkShsnbQXDW0",
"integrity": "sha384-VURTOPp7qXzm2yZCpoIrqEhMrC1hbAyGrNmg9RhpzTKqmxCr9fNTdPqexzzgS8OH",
"elements": [
"bp-big-picture",
"bp-research-header",
@ -61,7 +61,7 @@
"scriptUrl": "./big-picture/big-picture.js",
"embed": {
"iframe": "<iframe src=\"./big-picture/big-picture/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=\"./big-picture/big-picture.js\" integrity=\"sha384-QkfaEQm7mpCC6VsaiEd+DAQEooG2EbLAL17qM5IHa6gejWy0p2thXkShsnbQXDW0\" crossorigin=\"anonymous\"></script>\n<bp-big-picture profile-config='{\"profile\":\"big-picture\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></bp-big-picture>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./big-picture/big-picture.js\" integrity=\"sha384-VURTOPp7qXzm2yZCpoIrqEhMrC1hbAyGrNmg9RhpzTKqmxCr9fNTdPqexzzgS8OH\" crossorigin=\"anonymous\"></script>\n<bp-big-picture profile-config='{\"profile\":\"big-picture\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></bp-big-picture>"
},
"instances": [
{
@ -105,7 +105,7 @@
"bundle": "cities-internet",
"scriptUrl": "./cities-internet/cities-internet.js",
"output": "dx-maps/cities-internet/cities-internet.js",
"integrity": "sha384-9GDQjiCOipIqmrbcDneieoklxT8wBvDjIuR0A1dJ3pRBvtmWffJn7DCMtFFWBu0F",
"integrity": "sha384-mrFyobv27Rez+r7D8zfx8v0zV8anFpzKWuInX4SHo96KVnQhqOitVfILY4tjdBEi",
"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-9GDQjiCOipIqmrbcDneieoklxT8wBvDjIuR0A1dJ3pRBvtmWffJn7DCMtFFWBu0F\" 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-mrFyobv27Rez+r7D8zfx8v0zV8anFpzKWuInX4SHo96KVnQhqOitVfILY4tjdBEi\" 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-9GDQjiCOipIqmrbcDneieoklxT8wBvDjIuR0A1dJ3pRBvtmWffJn7DCMtFFWBu0F\" 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-mrFyobv27Rez+r7D8zfx8v0zV8anFpzKWuInX4SHo96KVnQhqOitVfILY4tjdBEi\" 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-9GDQjiCOipIqmrbcDneieoklxT8wBvDjIuR0A1dJ3pRBvtmWffJn7DCMtFFWBu0F\" 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-mrFyobv27Rez+r7D8zfx8v0zV8anFpzKWuInX4SHo96KVnQhqOitVfILY4tjdBEi\" 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": "dx-maps/country-posters/country-posters.js",
"integrity": "sha384-lyfZlmC5pVYe/qvbvKKI+Xx+J6AYoXNo3V0vdBjP0oX7UW9M6zKxY/2ePobfApyu",
"integrity": "sha384-n0T9rOOsC50ppZASO07UWxyFCKTfilAMgcgn3+zG48uRKivmw2cEkraA+nXic9v7",
"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-lyfZlmC5pVYe/qvbvKKI+Xx+J6AYoXNo3V0vdBjP0oX7UW9M6zKxY/2ePobfApyu\" 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-n0T9rOOsC50ppZASO07UWxyFCKTfilAMgcgn3+zG48uRKivmw2cEkraA+nXic9v7\" 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-lyfZlmC5pVYe/qvbvKKI+Xx+J6AYoXNo3V0vdBjP0oX7UW9M6zKxY/2ePobfApyu\" 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-n0T9rOOsC50ppZASO07UWxyFCKTfilAMgcgn3+zG48uRKivmw2cEkraA+nXic9v7\" 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-lyfZlmC5pVYe/qvbvKKI+Xx+J6AYoXNo3V0vdBjP0oX7UW9M6zKxY/2ePobfApyu\" 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-n0T9rOOsC50ppZASO07UWxyFCKTfilAMgcgn3+zG48uRKivmw2cEkraA+nXic9v7\" 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>"
}
}
]
@ -215,7 +215,7 @@
"bundle": "dashboard-plus-grid",
"scriptUrl": "./dashboard-plus-grid/dashboard-plus-grid.js",
"output": "dx-maps/dashboard-plus-grid/dashboard-plus-grid.js",
"integrity": "sha384-stZQxboxwi/L6KrgqgqBx1RSdYtc4JhSz7g9Lf+DA7x3SKP2v8UpDRmDmG6O++8G",
"integrity": "sha384-F2o7EFSzJSppnagqUHP73QA8s3LSZ+XiyNN6ltsG2sHhGpRkQFG/3gfIgHIvOa6i",
"elements": [
"dashboard-plus-grid"
],
@ -235,7 +235,7 @@
"scriptUrl": "./dashboard-plus-grid/dashboard-plus-grid.js",
"embed": {
"iframe": "<iframe src=\"./dashboard-plus-grid/dashboard-plus-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early; 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=\"./dashboard-plus-grid/dashboard-plus-grid.js\" integrity=\"sha384-stZQxboxwi/L6KrgqgqBx1RSdYtc4JhSz7g9Lf+DA7x3SKP2v8UpDRmDmG6O++8G\" crossorigin=\"anonymous\"></script>\n<dashboard-plus-grid profile-config='{\"profile\":\"dashboard-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></dashboard-plus-grid>"
"script": "<!-- Mapbox engine, fetched early; 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=\"./dashboard-plus-grid/dashboard-plus-grid.js\" integrity=\"sha384-F2o7EFSzJSppnagqUHP73QA8s3LSZ+XiyNN6ltsG2sHhGpRkQFG/3gfIgHIvOa6i\" crossorigin=\"anonymous\"></script>\n<dashboard-plus-grid profile-config='{\"profile\":\"dashboard-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></dashboard-plus-grid>"
},
"instances": [
{
@ -259,7 +259,7 @@
"bundle": "demo-map",
"scriptUrl": "./demo-map/demo-map.js",
"output": "dx-maps/demo-map/demo-map.js",
"integrity": "sha384-pQboGJuKCps0vTF6EI1gPDLlyZuLoDZTpH3HbbV7ROXstB6UmAVdvrzDk4K0uh4G",
"integrity": "sha384-e01v7Yez3VLCT6UVd24Qg5fSSzmX4emHdEC/9d+1K/ekrk2JFnBxi4fhPou+KweP",
"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-pQboGJuKCps0vTF6EI1gPDLlyZuLoDZTpH3HbbV7ROXstB6UmAVdvrzDk4K0uh4G\" 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-e01v7Yez3VLCT6UVd24Qg5fSSzmX4emHdEC/9d+1K/ekrk2JFnBxi4fhPou+KweP\" 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": "dx-maps/doxa-research-map/doxa-research-map.js",
"integrity": "sha384-Kba3/FZ8v1VrckuPXnzh/jWs0p6RaydyydEbEIgw+jSSVlCGUbvowdHN2YMSrxiE",
"integrity": "sha384-E/9wPeCVKfJRE0Oh2yOw3aHvEtVUFiBTtr3MpcUQ+U27nv7X81s+Y9UqAJM5IVDd",
"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-Kba3/FZ8v1VrckuPXnzh/jWs0p6RaydyydEbEIgw+jSSVlCGUbvowdHN2YMSrxiE\" 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-E/9wPeCVKfJRE0Oh2yOw3aHvEtVUFiBTtr3MpcUQ+U27nv7X81s+Y9UqAJM5IVDd\" 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": "dx-maps/doxa-simple-map/doxa-simple-map.js",
"integrity": "sha384-i2FnC9KrSn/cnEHqCtaXIWMZKEKMWOp54vyhAMGD3zE4sZUIg1g/j3Smz5ocfUkh",
"integrity": "sha384-juW40EsX6wSWnZbeU3bCfd4vAIasOy4AH1mRPcQKDzs+AKorOE47T27hp4X9Lsse",
"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-i2FnC9KrSn/cnEHqCtaXIWMZKEKMWOp54vyhAMGD3zE4sZUIg1g/j3Smz5ocfUkh\" 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-juW40EsX6wSWnZbeU3bCfd4vAIasOy4AH1mRPcQKDzs+AKorOE47T27hp4X9Lsse\" 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": "dx-maps/gospel-resources/gospel-resources.js",
"integrity": "sha384-1vo8W4mXKdyTBlaXJv6Cbyt9Y7zgXXu//hOupcILnQspA8GCM/pnmj+g1STS9btO",
"integrity": "sha384-D8a8LhZ5rU23MoNsMV17MoxiHdfL3UHfO4jlX/RFcfJeA+PijBCtOqjiGdDSFDZj",
"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-1vo8W4mXKdyTBlaXJv6Cbyt9Y7zgXXu//hOupcILnQspA8GCM/pnmj+g1STS9btO\" 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-D8a8LhZ5rU23MoNsMV17MoxiHdfL3UHfO4jlX/RFcfJeA+PijBCtOqjiGdDSFDZj\" 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-1vo8W4mXKdyTBlaXJv6Cbyt9Y7zgXXu//hOupcILnQspA8GCM/pnmj+g1STS9btO\" 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-D8a8LhZ5rU23MoNsMV17MoxiHdfL3UHfO4jlX/RFcfJeA+PijBCtOqjiGdDSFDZj\" 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-1vo8W4mXKdyTBlaXJv6Cbyt9Y7zgXXu//hOupcILnQspA8GCM/pnmj+g1STS9btO\" 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-D8a8LhZ5rU23MoNsMV17MoxiHdfL3UHfO4jlX/RFcfJeA+PijBCtOqjiGdDSFDZj\" 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-1vo8W4mXKdyTBlaXJv6Cbyt9Y7zgXXu//hOupcILnQspA8GCM/pnmj+g1STS9btO\" 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-D8a8LhZ5rU23MoNsMV17MoxiHdfL3UHfO4jlX/RFcfJeA+PijBCtOqjiGdDSFDZj\" 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-1vo8W4mXKdyTBlaXJv6Cbyt9Y7zgXXu//hOupcILnQspA8GCM/pnmj+g1STS9btO\" 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-D8a8LhZ5rU23MoNsMV17MoxiHdfL3UHfO4jlX/RFcfJeA+PijBCtOqjiGdDSFDZj\" 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": "dx-maps/my-upg-100-list/my-upg-100-list.js",
"integrity": "sha384-TTFVV3OoRkvEnYlfI57+wLnSxSrHBqamhev9rzcBxrFGzdNZ7XwWUvpOOeG6ikT0",
"integrity": "sha384-rwEZFr0I9/+aFfKJDojxPrQ6BwIafYom66bzxvaCxnURiVr4ALaoZWPqqcwByUeF",
"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-TTFVV3OoRkvEnYlfI57+wLnSxSrHBqamhev9rzcBxrFGzdNZ7XwWUvpOOeG6ikT0\" 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-rwEZFr0I9/+aFfKJDojxPrQ6BwIafYom66bzxvaCxnURiVr4ALaoZWPqqcwByUeF\" 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-TTFVV3OoRkvEnYlfI57+wLnSxSrHBqamhev9rzcBxrFGzdNZ7XwWUvpOOeG6ikT0\" 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-rwEZFr0I9/+aFfKJDojxPrQ6BwIafYom66bzxvaCxnURiVr4ALaoZWPqqcwByUeF\" 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-TTFVV3OoRkvEnYlfI57+wLnSxSrHBqamhev9rzcBxrFGzdNZ7XwWUvpOOeG6ikT0\" 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-rwEZFr0I9/+aFfKJDojxPrQ6BwIafYom66bzxvaCxnURiVr4ALaoZWPqqcwByUeF\" 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>"
}
}
]
@ -721,7 +721,7 @@
"bundle": "people-groups-grid",
"scriptUrl": "./people-groups-grid/people-groups-grid.js",
"output": "dx-maps/people-groups-grid/people-groups-grid.js",
"integrity": "sha384-NxK7wM4VhKnvgdeGmcwCcPGvNkQq4dZRXDkh8eUWhtcEuz4s7EFeQQjxA1PciJVt",
"integrity": "sha384-jRC+t4Fp5Vc7bBAG6wqHSlnBfH58NiOpDXRk4LITH38reLiDwln0dJd8a7LyYtdw",
"elements": [
"people-groups-grid"
],
@ -737,7 +737,7 @@
"scriptUrl": "./people-groups-grid/people-groups-grid.js",
"embed": {
"iframe": "<iframe src=\"./people-groups-grid/people-groups-grid/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=\"./people-groups-grid/people-groups-grid.js\" integrity=\"sha384-NxK7wM4VhKnvgdeGmcwCcPGvNkQq4dZRXDkh8eUWhtcEuz4s7EFeQQjxA1PciJVt\" crossorigin=\"anonymous\"></script>\n<people-groups-grid profile-config='{\"profile\":\"people-groups-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></people-groups-grid>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./people-groups-grid/people-groups-grid.js\" integrity=\"sha384-jRC+t4Fp5Vc7bBAG6wqHSlnBfH58NiOpDXRk4LITH38reLiDwln0dJd8a7LyYtdw\" crossorigin=\"anonymous\"></script>\n<people-groups-grid profile-config='{\"profile\":\"people-groups-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></people-groups-grid>"
},
"instances": [
{
@ -837,7 +837,7 @@
"bundle": "pplr-data-maps",
"scriptUrl": "./pplr-data-maps/pplr-data-maps.js",
"output": "dx-maps/pplr-data-maps/pplr-data-maps.js",
"integrity": "sha384-Ol7JJhbWaYthcjyEwQoSf+fsjcIEZGhbWwmGAAqPNj5fx/z4OCNAtHEMzo4ggbva",
"integrity": "sha384-Oxw1YTi/plI/0RTJeZQvJCan7XV0CzIJvkPRN0tDjLpVfz0qwVV7gN6vMU3P6tx4",
"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-Ol7JJhbWaYthcjyEwQoSf+fsjcIEZGhbWwmGAAqPNj5fx/z4OCNAtHEMzo4ggbva\" 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-Oxw1YTi/plI/0RTJeZQvJCan7XV0CzIJvkPRN0tDjLpVfz0qwVV7gN6vMU3P6tx4\" 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"
}
@ -863,7 +863,7 @@
"bundle": "prayer-walk-planner",
"scriptUrl": "./prayer-walk-planner/prayer-walk-planner.js",
"output": "dx-maps/prayer-walk-planner/prayer-walk-planner.js",
"integrity": "sha384-YZUFcXft7eTGJMY4I1FRak276dwfkSNFe6ylcWfRXJAmXWC39CCktE9qmNaZWSKB",
"integrity": "sha384-PqvBFQWuX/MKP2Jv7p/ir8zBvb6tNbyWh00ZHCZU/Q0dpaE7XvF36tMhmC9tixcJ",
"elements": [
"prayer-walk-planner"
],
@ -879,7 +879,7 @@
"scriptUrl": "./prayer-walk-planner/prayer-walk-planner.js",
"embed": {
"iframe": "<iframe src=\"./prayer-walk-planner/prayer-walk-planner/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=\"./prayer-walk-planner/prayer-walk-planner.js\" integrity=\"sha384-YZUFcXft7eTGJMY4I1FRak276dwfkSNFe6ylcWfRXJAmXWC39CCktE9qmNaZWSKB\" crossorigin=\"anonymous\"></script>\n<prayer-walk-planner profile-config='{\"profile\":\"prayer-walk-planner\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></prayer-walk-planner>"
"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=\"./prayer-walk-planner/prayer-walk-planner.js\" integrity=\"sha384-PqvBFQWuX/MKP2Jv7p/ir8zBvb6tNbyWh00ZHCZU/Q0dpaE7XvF36tMhmC9tixcJ\" crossorigin=\"anonymous\"></script>\n<prayer-walk-planner profile-config='{\"profile\":\"prayer-walk-planner\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></prayer-walk-planner>"
}
}
]
@ -888,7 +888,7 @@
"bundle": "regions-dashboard",
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"output": "dx-maps/regions-dashboard/regions-dashboard.js",
"integrity": "sha384-FDwUoPdVCOpa/WplF4PpBVLYMusCFPZqbxBBqQOFlI0sJhR+UB4HuSbH/O4MJec0",
"integrity": "sha384-nhQdaK/mbo+hByXAKQ9TRmewlRyzN10YWiPqijosjdijLmJfwla30Gd4D7Ithb6t",
"elements": [
"regions-dashboard"
],
@ -908,7 +908,7 @@
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"embed": {
"iframe": "<iframe src=\"./regions-dashboard/region-dashboards/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early; 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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-FDwUoPdVCOpa/WplF4PpBVLYMusCFPZqbxBBqQOFlI0sJhR+UB4HuSbH/O4MJec0\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
"script": "<!-- Mapbox engine, fetched early; 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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-nhQdaK/mbo+hByXAKQ9TRmewlRyzN10YWiPqijosjdijLmJfwla30Gd4D7Ithb6t\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
}
},
{
@ -922,7 +922,7 @@
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"embed": {
"iframe": "<iframe src=\"./regions-dashboard/regions-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-FDwUoPdVCOpa/WplF4PpBVLYMusCFPZqbxBBqQOFlI0sJhR+UB4HuSbH/O4MJec0\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-nhQdaK/mbo+hByXAKQ9TRmewlRyzN10YWiPqijosjdijLmJfwla30Gd4D7Ithb6t\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
}
},
{
@ -936,7 +936,7 @@
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"embed": {
"iframe": "<iframe src=\"./regions-dashboard/regions-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early; 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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-FDwUoPdVCOpa/WplF4PpBVLYMusCFPZqbxBBqQOFlI0sJhR+UB4HuSbH/O4MJec0\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
"script": "<!-- Mapbox engine, fetched early; 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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-nhQdaK/mbo+hByXAKQ9TRmewlRyzN10YWiPqijosjdijLmJfwla30Gd4D7Ithb6t\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
}
}
]
@ -945,7 +945,7 @@
"bundle": "research-dashboard",
"scriptUrl": "./research-dashboard/research-dashboard.js",
"output": "dx-maps/research-dashboard/research-dashboard.js",
"integrity": "sha384-qWWWrFhA8lGOVnjlGbE0uOx4QbLMsxgf17CxAlMS9E+tUur1KA2dsrG22mEkYAeO",
"integrity": "sha384-N8ZJTvr/l0jCSaV+3iP3gk/5R7SEwoJpMJFKEO9TYDC33wufmanR0eijkwSTO6mz",
"elements": [
"research-dashboard-map"
],
@ -961,7 +961,7 @@
"scriptUrl": "./research-dashboard/research-dashboard.js",
"embed": {
"iframe": "<iframe src=\"./research-dashboard/research-dashboard/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early; 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=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-qWWWrFhA8lGOVnjlGbE0uOx4QbLMsxgf17CxAlMS9E+tUur1KA2dsrG22mEkYAeO\" crossorigin=\"anonymous\"></script>\n<research-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></research-dashboard-map>"
"script": "<!-- Mapbox engine, fetched early; 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=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-N8ZJTvr/l0jCSaV+3iP3gk/5R7SEwoJpMJFKEO9TYDC33wufmanR0eijkwSTO6mz\" crossorigin=\"anonymous\"></script>\n<research-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></research-dashboard-map>"
},
"bundle": "research-dashboard"
}
@ -971,7 +971,7 @@
"bundle": "research-map-plus-grid",
"scriptUrl": "./research-map-plus-grid/research-map-plus-grid.js",
"output": "dx-maps/research-map-plus-grid/research-map-plus-grid.js",
"integrity": "sha384-nlzCq4Er6WPMedck7D5qAXa27wpbd75WI40/BlOhDA4ZKHgud1lhxfJWvy0bpFTA",
"integrity": "sha384-q6MGCvQSGtk5CaASt5uu1mD7qDGoBwo17PDg3lW9jDzBQ5hMGj56TngLR/o6fc05",
"elements": [
"research-map-plus-grid"
],
@ -991,7 +991,7 @@
"scriptUrl": "./research-map-plus-grid/research-map-plus-grid.js",
"embed": {
"iframe": "<iframe src=\"./research-map-plus-grid/research-map-plus-grid/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=\"./research-map-plus-grid/research-map-plus-grid.js\" integrity=\"sha384-nlzCq4Er6WPMedck7D5qAXa27wpbd75WI40/BlOhDA4ZKHgud1lhxfJWvy0bpFTA\" crossorigin=\"anonymous\"></script>\n<research-map-plus-grid profile-config='{\"profile\":\"research-map-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></research-map-plus-grid>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./research-map-plus-grid/research-map-plus-grid.js\" integrity=\"sha384-q6MGCvQSGtk5CaASt5uu1mD7qDGoBwo17PDg3lW9jDzBQ5hMGj56TngLR/o6fc05\" crossorigin=\"anonymous\"></script>\n<research-map-plus-grid profile-config='{\"profile\":\"research-map-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></research-map-plus-grid>"
},
"instances": [
{
@ -1059,7 +1059,7 @@
"bundle": "upg-neighbor",
"scriptUrl": "./upg-neighbor/upg-neighbor.js",
"output": "dx-maps/upg-neighbor/upg-neighbor.js",
"integrity": "sha384-ArOZYD+KcSsac8vqA8qrGCOfIzwg1ggx7pd9JvmitYUsQdyBRM6NAj0RDyUm72qV",
"integrity": "sha384-pfgq/jUvzR6Is/zMBujuN0Rk+t7KUQslO7vU9OVGVJzAiRsGjsUsC/6dQ4fZ/hn5",
"elements": [
"upg-neighbor"
],
@ -1075,7 +1075,7 @@
"scriptUrl": "./upg-neighbor/upg-neighbor.js",
"embed": {
"iframe": "<iframe src=\"./upg-neighbor/upg-neighbor/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early; 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=\"./upg-neighbor/upg-neighbor.js\" integrity=\"sha384-ArOZYD+KcSsac8vqA8qrGCOfIzwg1ggx7pd9JvmitYUsQdyBRM6NAj0RDyUm72qV\" crossorigin=\"anonymous\"></script>\n<upg-neighbor profile-config='{\"profile\":\"upg-neighbor\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></upg-neighbor>"
"script": "<!-- Mapbox engine, fetched early; 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=\"./upg-neighbor/upg-neighbor.js\" integrity=\"sha384-pfgq/jUvzR6Is/zMBujuN0Rk+t7KUQslO7vU9OVGVJzAiRsGjsUsC/6dQ4fZ/hn5\" crossorigin=\"anonymous\"></script>\n<upg-neighbor profile-config='{\"profile\":\"upg-neighbor\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></upg-neighbor>"
},
"instances": [
{
@ -1157,7 +1157,7 @@
"bundle": "wall-of-people-groups",
"scriptUrl": "./wall-of-people-groups/wall-of-people-groups.js",
"output": "dx-maps/wall-of-people-groups/wall-of-people-groups.js",
"integrity": "sha384-sXhpZYTHbVs5SvTcH8/oAaqN9bWazW5NzlhEpqkk127lciRKE+8xT0gQviFP+KRx",
"integrity": "sha384-/RvE4YrpW+WAsLi3FHzq/2wxmCVo9kBnA3VtSY+RI1v2B8zzMsHXjqwVlN6Fhg30",
"elements": [
"wall-of-people-groups"
],
@ -1173,7 +1173,7 @@
"scriptUrl": "./wall-of-people-groups/wall-of-people-groups.js",
"embed": {
"iframe": "<iframe src=\"./wall-of-people-groups/wall-of-people-groups/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./wall-of-people-groups/wall-of-people-groups.js\" integrity=\"sha384-sXhpZYTHbVs5SvTcH8/oAaqN9bWazW5NzlhEpqkk127lciRKE+8xT0gQviFP+KRx\" crossorigin=\"anonymous\"></script>\n<wall-of-people-groups profile-config='{\"profile\":\"wall-of-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></wall-of-people-groups>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./wall-of-people-groups/wall-of-people-groups.js\" integrity=\"sha384-/RvE4YrpW+WAsLi3FHzq/2wxmCVo9kBnA3VtSY+RI1v2B8zzMsHXjqwVlN6Fhg30\" crossorigin=\"anonymous\"></script>\n<wall-of-people-groups profile-config='{\"profile\":\"wall-of-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></wall-of-people-groups>"
},
"bundle": "wall-of-people-groups"
}

File diff suppressed because one or more lines are too long

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>research-map · doxa-research-map</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -30,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <doxa-research-map> custom element. -->
<script src="../doxa-research-map.js" integrity="sha384-Kba3/FZ8v1VrckuPXnzh/jWs0p6RaydyydEbEIgw+jSSVlCGUbvowdHN2YMSrxiE" crossorigin="anonymous"></script>
<script src="../doxa-research-map.js" integrity="sha384-E/9wPeCVKfJRE0Oh2yOw3aHvEtVUFiBTtr3MpcUQ+U27nv7X81s+Y9UqAJM5IVDd" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>Research map — MapLibre (token-free, no search bar) · doxa-research-map</title>
<link rel="icon" href="data:,">
<!-- MapLibre peer (token-free engine) loaded ONCE here; the custom element
@ -27,7 +33,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <doxa-research-map> custom element. -->
<script src="../../doxa-research-map.js" integrity="sha384-Kba3/FZ8v1VrckuPXnzh/jWs0p6RaydyydEbEIgw+jSSVlCGUbvowdHN2YMSrxiE" crossorigin="anonymous"></script>
<script src="../../doxa-research-map.js" integrity="sha384-E/9wPeCVKfJRE0Oh2yOw3aHvEtVUFiBTtr3MpcUQ+U27nv7X81s+Y9UqAJM5IVDd" 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

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>Adoption Map · doxa-simple-map</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -30,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
<script src="../../doxa-simple-map.js" integrity="sha384-i2FnC9KrSn/cnEHqCtaXIWMZKEKMWOp54vyhAMGD3zE4sZUIg1g/j3Smz5ocfUkh" crossorigin="anonymous"></script>
<script src="../../doxa-simple-map.js" integrity="sha384-juW40EsX6wSWnZbeU3bCfd4vAIasOy4AH1mRPcQKDzs+AKorOE47T27hp4X9Lsse" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>Engagement Map · doxa-simple-map</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -30,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
<script src="../../doxa-simple-map.js" integrity="sha384-i2FnC9KrSn/cnEHqCtaXIWMZKEKMWOp54vyhAMGD3zE4sZUIg1g/j3Smz5ocfUkh" crossorigin="anonymous"></script>
<script src="../../doxa-simple-map.js" integrity="sha384-juW40EsX6wSWnZbeU3bCfd4vAIasOy4AH1mRPcQKDzs+AKorOE47T27hp4X9Lsse" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>doxa-simple-map · doxa-simple-map</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -30,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
<script src="../doxa-simple-map.js" integrity="sha384-i2FnC9KrSn/cnEHqCtaXIWMZKEKMWOp54vyhAMGD3zE4sZUIg1g/j3Smz5ocfUkh" crossorigin="anonymous"></script>
<script src="../doxa-simple-map.js" integrity="sha384-juW40EsX6wSWnZbeU3bCfd4vAIasOy4AH1mRPcQKDzs+AKorOE47T27hp4X9Lsse" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>Prayer Map · doxa-simple-map</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -30,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
<script src="../../doxa-simple-map.js" integrity="sha384-i2FnC9KrSn/cnEHqCtaXIWMZKEKMWOp54vyhAMGD3zE4sZUIg1g/j3Smz5ocfUkh" crossorigin="anonymous"></script>
<script src="../../doxa-simple-map.js" integrity="sha384-juW40EsX6wSWnZbeU3bCfd4vAIasOy4AH1mRPcQKDzs+AKorOE47T27hp4X9Lsse" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>Vision card — reach at a glance · doxa-vision-card</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>Vision card — frontier accent · doxa-vision-card</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>doxa-vision-card · doxa-vision-card</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>golden-path-check · golden-path-check</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>charts · gospel-resources</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
@ -26,7 +32,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-1vo8W4mXKdyTBlaXJv6Cbyt9Y7zgXXu//hOupcILnQspA8GCM/pnmj+g1STS9btO" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-D8a8LhZ5rU23MoNsMV17MoxiHdfL3UHfO4jlX/RFcfJeA+PijBCtOqjiGdDSFDZj" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>data-tables · gospel-resources</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
@ -26,7 +32,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-1vo8W4mXKdyTBlaXJv6Cbyt9Y7zgXXu//hOupcILnQspA8GCM/pnmj+g1STS9btO" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-D8a8LhZ5rU23MoNsMV17MoxiHdfL3UHfO4jlX/RFcfJeA+PijBCtOqjiGdDSFDZj" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>gospel-dashboard · gospel-resources</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -41,7 +47,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-1vo8W4mXKdyTBlaXJv6Cbyt9Y7zgXXu//hOupcILnQspA8GCM/pnmj+g1STS9btO" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-D8a8LhZ5rU23MoNsMV17MoxiHdfL3UHfO4jlX/RFcfJeA+PijBCtOqjiGdDSFDZj" 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

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>resources-list · gospel-resources</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
@ -26,7 +32,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-1vo8W4mXKdyTBlaXJv6Cbyt9Y7zgXXu//hOupcILnQspA8GCM/pnmj+g1STS9btO" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-D8a8LhZ5rU23MoNsMV17MoxiHdfL3UHfO4jlX/RFcfJeA+PijBCtOqjiGdDSFDZj" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>resources-map · gospel-resources</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -30,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-1vo8W4mXKdyTBlaXJv6Cbyt9Y7zgXXu//hOupcILnQspA8GCM/pnmj+g1STS9btO" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-D8a8LhZ5rU23MoNsMV17MoxiHdfL3UHfO4jlX/RFcfJeA+PijBCtOqjiGdDSFDZj" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>dx-maps plugin studio</title>
<link rel="icon" href="data:,">
<script>window.MAP_TOKEN="pk.eyJ1IjoiZ29zeXN0ZW1zIiwiYSI6ImNtZm9vM291czA3amQya3BzYW42YW9ibTcifQ.52WM0IpxY9FcB0zc9f1zbQ";</script>

File diff suppressed because one or more lines are too long

View file

@ -13,7 +13,7 @@
"bundle": "all-people-groups",
"scriptUrl": "./all-people-groups/all-people-groups.js",
"output": "dx-maps/all-people-groups/all-people-groups.js",
"integrity": "sha384-Fk1cAFe2MbBsG2gfJQc2QNoG8CySIPOn0GWATpJ1uBlH51zspyobkOkzWAAXhn3H",
"integrity": "sha384-npdy7qTJnd1il1A28KBu1GtvBQE19MgD85j5NWxj/IolrBF3sKhYTzl/iqgRQAvT",
"elements": [
"all-people-groups"
],
@ -29,7 +29,7 @@
"scriptUrl": "./all-people-groups/all-people-groups.js",
"embed": {
"iframe": "<iframe src=\"./all-people-groups/all-people-groups/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early; 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=\"./all-people-groups/all-people-groups.js\" integrity=\"sha384-Fk1cAFe2MbBsG2gfJQc2QNoG8CySIPOn0GWATpJ1uBlH51zspyobkOkzWAAXhn3H\" crossorigin=\"anonymous\"></script>\n<all-people-groups profile-config='{\"profile\":\"all-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></all-people-groups>"
"script": "<!-- Mapbox engine, fetched early; 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=\"./all-people-groups/all-people-groups.js\" integrity=\"sha384-npdy7qTJnd1il1A28KBu1GtvBQE19MgD85j5NWxj/IolrBF3sKhYTzl/iqgRQAvT\" crossorigin=\"anonymous\"></script>\n<all-people-groups profile-config='{\"profile\":\"all-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></all-people-groups>"
},
"bundle": "all-people-groups"
}
@ -39,7 +39,7 @@
"bundle": "big-picture",
"scriptUrl": "./big-picture/big-picture.js",
"output": "dx-maps/big-picture/big-picture.js",
"integrity": "sha384-QkfaEQm7mpCC6VsaiEd+DAQEooG2EbLAL17qM5IHa6gejWy0p2thXkShsnbQXDW0",
"integrity": "sha384-VURTOPp7qXzm2yZCpoIrqEhMrC1hbAyGrNmg9RhpzTKqmxCr9fNTdPqexzzgS8OH",
"elements": [
"bp-big-picture",
"bp-research-header",
@ -61,7 +61,7 @@
"scriptUrl": "./big-picture/big-picture.js",
"embed": {
"iframe": "<iframe src=\"./big-picture/big-picture/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=\"./big-picture/big-picture.js\" integrity=\"sha384-QkfaEQm7mpCC6VsaiEd+DAQEooG2EbLAL17qM5IHa6gejWy0p2thXkShsnbQXDW0\" crossorigin=\"anonymous\"></script>\n<bp-big-picture profile-config='{\"profile\":\"big-picture\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></bp-big-picture>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./big-picture/big-picture.js\" integrity=\"sha384-VURTOPp7qXzm2yZCpoIrqEhMrC1hbAyGrNmg9RhpzTKqmxCr9fNTdPqexzzgS8OH\" crossorigin=\"anonymous\"></script>\n<bp-big-picture profile-config='{\"profile\":\"big-picture\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></bp-big-picture>"
},
"instances": [
{
@ -105,7 +105,7 @@
"bundle": "cities-internet",
"scriptUrl": "./cities-internet/cities-internet.js",
"output": "dx-maps/cities-internet/cities-internet.js",
"integrity": "sha384-9GDQjiCOipIqmrbcDneieoklxT8wBvDjIuR0A1dJ3pRBvtmWffJn7DCMtFFWBu0F",
"integrity": "sha384-mrFyobv27Rez+r7D8zfx8v0zV8anFpzKWuInX4SHo96KVnQhqOitVfILY4tjdBEi",
"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-9GDQjiCOipIqmrbcDneieoklxT8wBvDjIuR0A1dJ3pRBvtmWffJn7DCMtFFWBu0F\" 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-mrFyobv27Rez+r7D8zfx8v0zV8anFpzKWuInX4SHo96KVnQhqOitVfILY4tjdBEi\" 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-9GDQjiCOipIqmrbcDneieoklxT8wBvDjIuR0A1dJ3pRBvtmWffJn7DCMtFFWBu0F\" 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-mrFyobv27Rez+r7D8zfx8v0zV8anFpzKWuInX4SHo96KVnQhqOitVfILY4tjdBEi\" 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-9GDQjiCOipIqmrbcDneieoklxT8wBvDjIuR0A1dJ3pRBvtmWffJn7DCMtFFWBu0F\" 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-mrFyobv27Rez+r7D8zfx8v0zV8anFpzKWuInX4SHo96KVnQhqOitVfILY4tjdBEi\" 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": "dx-maps/country-posters/country-posters.js",
"integrity": "sha384-lyfZlmC5pVYe/qvbvKKI+Xx+J6AYoXNo3V0vdBjP0oX7UW9M6zKxY/2ePobfApyu",
"integrity": "sha384-n0T9rOOsC50ppZASO07UWxyFCKTfilAMgcgn3+zG48uRKivmw2cEkraA+nXic9v7",
"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-lyfZlmC5pVYe/qvbvKKI+Xx+J6AYoXNo3V0vdBjP0oX7UW9M6zKxY/2ePobfApyu\" 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-n0T9rOOsC50ppZASO07UWxyFCKTfilAMgcgn3+zG48uRKivmw2cEkraA+nXic9v7\" 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-lyfZlmC5pVYe/qvbvKKI+Xx+J6AYoXNo3V0vdBjP0oX7UW9M6zKxY/2ePobfApyu\" 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-n0T9rOOsC50ppZASO07UWxyFCKTfilAMgcgn3+zG48uRKivmw2cEkraA+nXic9v7\" 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-lyfZlmC5pVYe/qvbvKKI+Xx+J6AYoXNo3V0vdBjP0oX7UW9M6zKxY/2ePobfApyu\" 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-n0T9rOOsC50ppZASO07UWxyFCKTfilAMgcgn3+zG48uRKivmw2cEkraA+nXic9v7\" 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>"
}
}
]
@ -215,7 +215,7 @@
"bundle": "dashboard-plus-grid",
"scriptUrl": "./dashboard-plus-grid/dashboard-plus-grid.js",
"output": "dx-maps/dashboard-plus-grid/dashboard-plus-grid.js",
"integrity": "sha384-stZQxboxwi/L6KrgqgqBx1RSdYtc4JhSz7g9Lf+DA7x3SKP2v8UpDRmDmG6O++8G",
"integrity": "sha384-F2o7EFSzJSppnagqUHP73QA8s3LSZ+XiyNN6ltsG2sHhGpRkQFG/3gfIgHIvOa6i",
"elements": [
"dashboard-plus-grid"
],
@ -235,7 +235,7 @@
"scriptUrl": "./dashboard-plus-grid/dashboard-plus-grid.js",
"embed": {
"iframe": "<iframe src=\"./dashboard-plus-grid/dashboard-plus-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early; 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=\"./dashboard-plus-grid/dashboard-plus-grid.js\" integrity=\"sha384-stZQxboxwi/L6KrgqgqBx1RSdYtc4JhSz7g9Lf+DA7x3SKP2v8UpDRmDmG6O++8G\" crossorigin=\"anonymous\"></script>\n<dashboard-plus-grid profile-config='{\"profile\":\"dashboard-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></dashboard-plus-grid>"
"script": "<!-- Mapbox engine, fetched early; 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=\"./dashboard-plus-grid/dashboard-plus-grid.js\" integrity=\"sha384-F2o7EFSzJSppnagqUHP73QA8s3LSZ+XiyNN6ltsG2sHhGpRkQFG/3gfIgHIvOa6i\" crossorigin=\"anonymous\"></script>\n<dashboard-plus-grid profile-config='{\"profile\":\"dashboard-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></dashboard-plus-grid>"
},
"instances": [
{
@ -259,7 +259,7 @@
"bundle": "demo-map",
"scriptUrl": "./demo-map/demo-map.js",
"output": "dx-maps/demo-map/demo-map.js",
"integrity": "sha384-pQboGJuKCps0vTF6EI1gPDLlyZuLoDZTpH3HbbV7ROXstB6UmAVdvrzDk4K0uh4G",
"integrity": "sha384-e01v7Yez3VLCT6UVd24Qg5fSSzmX4emHdEC/9d+1K/ekrk2JFnBxi4fhPou+KweP",
"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-pQboGJuKCps0vTF6EI1gPDLlyZuLoDZTpH3HbbV7ROXstB6UmAVdvrzDk4K0uh4G\" 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-e01v7Yez3VLCT6UVd24Qg5fSSzmX4emHdEC/9d+1K/ekrk2JFnBxi4fhPou+KweP\" 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": "dx-maps/doxa-research-map/doxa-research-map.js",
"integrity": "sha384-Kba3/FZ8v1VrckuPXnzh/jWs0p6RaydyydEbEIgw+jSSVlCGUbvowdHN2YMSrxiE",
"integrity": "sha384-E/9wPeCVKfJRE0Oh2yOw3aHvEtVUFiBTtr3MpcUQ+U27nv7X81s+Y9UqAJM5IVDd",
"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-Kba3/FZ8v1VrckuPXnzh/jWs0p6RaydyydEbEIgw+jSSVlCGUbvowdHN2YMSrxiE\" 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-E/9wPeCVKfJRE0Oh2yOw3aHvEtVUFiBTtr3MpcUQ+U27nv7X81s+Y9UqAJM5IVDd\" 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": "dx-maps/doxa-simple-map/doxa-simple-map.js",
"integrity": "sha384-i2FnC9KrSn/cnEHqCtaXIWMZKEKMWOp54vyhAMGD3zE4sZUIg1g/j3Smz5ocfUkh",
"integrity": "sha384-juW40EsX6wSWnZbeU3bCfd4vAIasOy4AH1mRPcQKDzs+AKorOE47T27hp4X9Lsse",
"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-i2FnC9KrSn/cnEHqCtaXIWMZKEKMWOp54vyhAMGD3zE4sZUIg1g/j3Smz5ocfUkh\" 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-juW40EsX6wSWnZbeU3bCfd4vAIasOy4AH1mRPcQKDzs+AKorOE47T27hp4X9Lsse\" 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": "dx-maps/gospel-resources/gospel-resources.js",
"integrity": "sha384-1vo8W4mXKdyTBlaXJv6Cbyt9Y7zgXXu//hOupcILnQspA8GCM/pnmj+g1STS9btO",
"integrity": "sha384-D8a8LhZ5rU23MoNsMV17MoxiHdfL3UHfO4jlX/RFcfJeA+PijBCtOqjiGdDSFDZj",
"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-1vo8W4mXKdyTBlaXJv6Cbyt9Y7zgXXu//hOupcILnQspA8GCM/pnmj+g1STS9btO\" 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-D8a8LhZ5rU23MoNsMV17MoxiHdfL3UHfO4jlX/RFcfJeA+PijBCtOqjiGdDSFDZj\" 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-1vo8W4mXKdyTBlaXJv6Cbyt9Y7zgXXu//hOupcILnQspA8GCM/pnmj+g1STS9btO\" 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-D8a8LhZ5rU23MoNsMV17MoxiHdfL3UHfO4jlX/RFcfJeA+PijBCtOqjiGdDSFDZj\" 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-1vo8W4mXKdyTBlaXJv6Cbyt9Y7zgXXu//hOupcILnQspA8GCM/pnmj+g1STS9btO\" 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-D8a8LhZ5rU23MoNsMV17MoxiHdfL3UHfO4jlX/RFcfJeA+PijBCtOqjiGdDSFDZj\" 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-1vo8W4mXKdyTBlaXJv6Cbyt9Y7zgXXu//hOupcILnQspA8GCM/pnmj+g1STS9btO\" 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-D8a8LhZ5rU23MoNsMV17MoxiHdfL3UHfO4jlX/RFcfJeA+PijBCtOqjiGdDSFDZj\" 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-1vo8W4mXKdyTBlaXJv6Cbyt9Y7zgXXu//hOupcILnQspA8GCM/pnmj+g1STS9btO\" 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-D8a8LhZ5rU23MoNsMV17MoxiHdfL3UHfO4jlX/RFcfJeA+PijBCtOqjiGdDSFDZj\" 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": "dx-maps/my-upg-100-list/my-upg-100-list.js",
"integrity": "sha384-TTFVV3OoRkvEnYlfI57+wLnSxSrHBqamhev9rzcBxrFGzdNZ7XwWUvpOOeG6ikT0",
"integrity": "sha384-rwEZFr0I9/+aFfKJDojxPrQ6BwIafYom66bzxvaCxnURiVr4ALaoZWPqqcwByUeF",
"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-TTFVV3OoRkvEnYlfI57+wLnSxSrHBqamhev9rzcBxrFGzdNZ7XwWUvpOOeG6ikT0\" 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-rwEZFr0I9/+aFfKJDojxPrQ6BwIafYom66bzxvaCxnURiVr4ALaoZWPqqcwByUeF\" 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-TTFVV3OoRkvEnYlfI57+wLnSxSrHBqamhev9rzcBxrFGzdNZ7XwWUvpOOeG6ikT0\" 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-rwEZFr0I9/+aFfKJDojxPrQ6BwIafYom66bzxvaCxnURiVr4ALaoZWPqqcwByUeF\" 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-TTFVV3OoRkvEnYlfI57+wLnSxSrHBqamhev9rzcBxrFGzdNZ7XwWUvpOOeG6ikT0\" 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-rwEZFr0I9/+aFfKJDojxPrQ6BwIafYom66bzxvaCxnURiVr4ALaoZWPqqcwByUeF\" 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>"
}
}
]
@ -721,7 +721,7 @@
"bundle": "people-groups-grid",
"scriptUrl": "./people-groups-grid/people-groups-grid.js",
"output": "dx-maps/people-groups-grid/people-groups-grid.js",
"integrity": "sha384-NxK7wM4VhKnvgdeGmcwCcPGvNkQq4dZRXDkh8eUWhtcEuz4s7EFeQQjxA1PciJVt",
"integrity": "sha384-jRC+t4Fp5Vc7bBAG6wqHSlnBfH58NiOpDXRk4LITH38reLiDwln0dJd8a7LyYtdw",
"elements": [
"people-groups-grid"
],
@ -737,7 +737,7 @@
"scriptUrl": "./people-groups-grid/people-groups-grid.js",
"embed": {
"iframe": "<iframe src=\"./people-groups-grid/people-groups-grid/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=\"./people-groups-grid/people-groups-grid.js\" integrity=\"sha384-NxK7wM4VhKnvgdeGmcwCcPGvNkQq4dZRXDkh8eUWhtcEuz4s7EFeQQjxA1PciJVt\" crossorigin=\"anonymous\"></script>\n<people-groups-grid profile-config='{\"profile\":\"people-groups-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></people-groups-grid>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./people-groups-grid/people-groups-grid.js\" integrity=\"sha384-jRC+t4Fp5Vc7bBAG6wqHSlnBfH58NiOpDXRk4LITH38reLiDwln0dJd8a7LyYtdw\" crossorigin=\"anonymous\"></script>\n<people-groups-grid profile-config='{\"profile\":\"people-groups-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></people-groups-grid>"
},
"instances": [
{
@ -837,7 +837,7 @@
"bundle": "pplr-data-maps",
"scriptUrl": "./pplr-data-maps/pplr-data-maps.js",
"output": "dx-maps/pplr-data-maps/pplr-data-maps.js",
"integrity": "sha384-Ol7JJhbWaYthcjyEwQoSf+fsjcIEZGhbWwmGAAqPNj5fx/z4OCNAtHEMzo4ggbva",
"integrity": "sha384-Oxw1YTi/plI/0RTJeZQvJCan7XV0CzIJvkPRN0tDjLpVfz0qwVV7gN6vMU3P6tx4",
"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-Ol7JJhbWaYthcjyEwQoSf+fsjcIEZGhbWwmGAAqPNj5fx/z4OCNAtHEMzo4ggbva\" 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-Oxw1YTi/plI/0RTJeZQvJCan7XV0CzIJvkPRN0tDjLpVfz0qwVV7gN6vMU3P6tx4\" 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"
}
@ -863,7 +863,7 @@
"bundle": "prayer-walk-planner",
"scriptUrl": "./prayer-walk-planner/prayer-walk-planner.js",
"output": "dx-maps/prayer-walk-planner/prayer-walk-planner.js",
"integrity": "sha384-YZUFcXft7eTGJMY4I1FRak276dwfkSNFe6ylcWfRXJAmXWC39CCktE9qmNaZWSKB",
"integrity": "sha384-PqvBFQWuX/MKP2Jv7p/ir8zBvb6tNbyWh00ZHCZU/Q0dpaE7XvF36tMhmC9tixcJ",
"elements": [
"prayer-walk-planner"
],
@ -879,7 +879,7 @@
"scriptUrl": "./prayer-walk-planner/prayer-walk-planner.js",
"embed": {
"iframe": "<iframe src=\"./prayer-walk-planner/prayer-walk-planner/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=\"./prayer-walk-planner/prayer-walk-planner.js\" integrity=\"sha384-YZUFcXft7eTGJMY4I1FRak276dwfkSNFe6ylcWfRXJAmXWC39CCktE9qmNaZWSKB\" crossorigin=\"anonymous\"></script>\n<prayer-walk-planner profile-config='{\"profile\":\"prayer-walk-planner\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></prayer-walk-planner>"
"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=\"./prayer-walk-planner/prayer-walk-planner.js\" integrity=\"sha384-PqvBFQWuX/MKP2Jv7p/ir8zBvb6tNbyWh00ZHCZU/Q0dpaE7XvF36tMhmC9tixcJ\" crossorigin=\"anonymous\"></script>\n<prayer-walk-planner profile-config='{\"profile\":\"prayer-walk-planner\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></prayer-walk-planner>"
}
}
]
@ -888,7 +888,7 @@
"bundle": "regions-dashboard",
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"output": "dx-maps/regions-dashboard/regions-dashboard.js",
"integrity": "sha384-FDwUoPdVCOpa/WplF4PpBVLYMusCFPZqbxBBqQOFlI0sJhR+UB4HuSbH/O4MJec0",
"integrity": "sha384-nhQdaK/mbo+hByXAKQ9TRmewlRyzN10YWiPqijosjdijLmJfwla30Gd4D7Ithb6t",
"elements": [
"regions-dashboard"
],
@ -908,7 +908,7 @@
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"embed": {
"iframe": "<iframe src=\"./regions-dashboard/region-dashboards/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early; 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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-FDwUoPdVCOpa/WplF4PpBVLYMusCFPZqbxBBqQOFlI0sJhR+UB4HuSbH/O4MJec0\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
"script": "<!-- Mapbox engine, fetched early; 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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-nhQdaK/mbo+hByXAKQ9TRmewlRyzN10YWiPqijosjdijLmJfwla30Gd4D7Ithb6t\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
}
},
{
@ -922,7 +922,7 @@
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"embed": {
"iframe": "<iframe src=\"./regions-dashboard/regions-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-FDwUoPdVCOpa/WplF4PpBVLYMusCFPZqbxBBqQOFlI0sJhR+UB4HuSbH/O4MJec0\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-nhQdaK/mbo+hByXAKQ9TRmewlRyzN10YWiPqijosjdijLmJfwla30Gd4D7Ithb6t\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
}
},
{
@ -936,7 +936,7 @@
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
"embed": {
"iframe": "<iframe src=\"./regions-dashboard/regions-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early; 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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-FDwUoPdVCOpa/WplF4PpBVLYMusCFPZqbxBBqQOFlI0sJhR+UB4HuSbH/O4MJec0\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
"script": "<!-- Mapbox engine, fetched early; 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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-nhQdaK/mbo+hByXAKQ9TRmewlRyzN10YWiPqijosjdijLmJfwla30Gd4D7Ithb6t\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
}
}
]
@ -945,7 +945,7 @@
"bundle": "research-dashboard",
"scriptUrl": "./research-dashboard/research-dashboard.js",
"output": "dx-maps/research-dashboard/research-dashboard.js",
"integrity": "sha384-qWWWrFhA8lGOVnjlGbE0uOx4QbLMsxgf17CxAlMS9E+tUur1KA2dsrG22mEkYAeO",
"integrity": "sha384-N8ZJTvr/l0jCSaV+3iP3gk/5R7SEwoJpMJFKEO9TYDC33wufmanR0eijkwSTO6mz",
"elements": [
"research-dashboard-map"
],
@ -961,7 +961,7 @@
"scriptUrl": "./research-dashboard/research-dashboard.js",
"embed": {
"iframe": "<iframe src=\"./research-dashboard/research-dashboard/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early; 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=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-qWWWrFhA8lGOVnjlGbE0uOx4QbLMsxgf17CxAlMS9E+tUur1KA2dsrG22mEkYAeO\" crossorigin=\"anonymous\"></script>\n<research-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></research-dashboard-map>"
"script": "<!-- Mapbox engine, fetched early; 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=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-N8ZJTvr/l0jCSaV+3iP3gk/5R7SEwoJpMJFKEO9TYDC33wufmanR0eijkwSTO6mz\" crossorigin=\"anonymous\"></script>\n<research-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></research-dashboard-map>"
},
"bundle": "research-dashboard"
}
@ -971,7 +971,7 @@
"bundle": "research-map-plus-grid",
"scriptUrl": "./research-map-plus-grid/research-map-plus-grid.js",
"output": "dx-maps/research-map-plus-grid/research-map-plus-grid.js",
"integrity": "sha384-nlzCq4Er6WPMedck7D5qAXa27wpbd75WI40/BlOhDA4ZKHgud1lhxfJWvy0bpFTA",
"integrity": "sha384-q6MGCvQSGtk5CaASt5uu1mD7qDGoBwo17PDg3lW9jDzBQ5hMGj56TngLR/o6fc05",
"elements": [
"research-map-plus-grid"
],
@ -991,7 +991,7 @@
"scriptUrl": "./research-map-plus-grid/research-map-plus-grid.js",
"embed": {
"iframe": "<iframe src=\"./research-map-plus-grid/research-map-plus-grid/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=\"./research-map-plus-grid/research-map-plus-grid.js\" integrity=\"sha384-nlzCq4Er6WPMedck7D5qAXa27wpbd75WI40/BlOhDA4ZKHgud1lhxfJWvy0bpFTA\" crossorigin=\"anonymous\"></script>\n<research-map-plus-grid profile-config='{\"profile\":\"research-map-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></research-map-plus-grid>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./research-map-plus-grid/research-map-plus-grid.js\" integrity=\"sha384-q6MGCvQSGtk5CaASt5uu1mD7qDGoBwo17PDg3lW9jDzBQ5hMGj56TngLR/o6fc05\" crossorigin=\"anonymous\"></script>\n<research-map-plus-grid profile-config='{\"profile\":\"research-map-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></research-map-plus-grid>"
},
"instances": [
{
@ -1059,7 +1059,7 @@
"bundle": "upg-neighbor",
"scriptUrl": "./upg-neighbor/upg-neighbor.js",
"output": "dx-maps/upg-neighbor/upg-neighbor.js",
"integrity": "sha384-ArOZYD+KcSsac8vqA8qrGCOfIzwg1ggx7pd9JvmitYUsQdyBRM6NAj0RDyUm72qV",
"integrity": "sha384-pfgq/jUvzR6Is/zMBujuN0Rk+t7KUQslO7vU9OVGVJzAiRsGjsUsC/6dQ4fZ/hn5",
"elements": [
"upg-neighbor"
],
@ -1075,7 +1075,7 @@
"scriptUrl": "./upg-neighbor/upg-neighbor.js",
"embed": {
"iframe": "<iframe src=\"./upg-neighbor/upg-neighbor/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<!-- Mapbox engine, fetched early; 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=\"./upg-neighbor/upg-neighbor.js\" integrity=\"sha384-ArOZYD+KcSsac8vqA8qrGCOfIzwg1ggx7pd9JvmitYUsQdyBRM6NAj0RDyUm72qV\" crossorigin=\"anonymous\"></script>\n<upg-neighbor profile-config='{\"profile\":\"upg-neighbor\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></upg-neighbor>"
"script": "<!-- Mapbox engine, fetched early; 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=\"./upg-neighbor/upg-neighbor.js\" integrity=\"sha384-pfgq/jUvzR6Is/zMBujuN0Rk+t7KUQslO7vU9OVGVJzAiRsGjsUsC/6dQ4fZ/hn5\" crossorigin=\"anonymous\"></script>\n<upg-neighbor profile-config='{\"profile\":\"upg-neighbor\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></upg-neighbor>"
},
"instances": [
{
@ -1157,7 +1157,7 @@
"bundle": "wall-of-people-groups",
"scriptUrl": "./wall-of-people-groups/wall-of-people-groups.js",
"output": "dx-maps/wall-of-people-groups/wall-of-people-groups.js",
"integrity": "sha384-sXhpZYTHbVs5SvTcH8/oAaqN9bWazW5NzlhEpqkk127lciRKE+8xT0gQviFP+KRx",
"integrity": "sha384-/RvE4YrpW+WAsLi3FHzq/2wxmCVo9kBnA3VtSY+RI1v2B8zzMsHXjqwVlN6Fhg30",
"elements": [
"wall-of-people-groups"
],
@ -1173,7 +1173,7 @@
"scriptUrl": "./wall-of-people-groups/wall-of-people-groups.js",
"embed": {
"iframe": "<iframe src=\"./wall-of-people-groups/wall-of-people-groups/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./wall-of-people-groups/wall-of-people-groups.js\" integrity=\"sha384-sXhpZYTHbVs5SvTcH8/oAaqN9bWazW5NzlhEpqkk127lciRKE+8xT0gQviFP+KRx\" crossorigin=\"anonymous\"></script>\n<wall-of-people-groups profile-config='{\"profile\":\"wall-of-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></wall-of-people-groups>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./wall-of-people-groups/wall-of-people-groups.js\" integrity=\"sha384-/RvE4YrpW+WAsLi3FHzq/2wxmCVo9kBnA3VtSY+RI1v2B8zzMsHXjqwVlN6Fhg30\" crossorigin=\"anonymous\"></script>\n<wall-of-people-groups profile-config='{\"profile\":\"wall-of-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></wall-of-people-groups>"
},
"bundle": "wall-of-people-groups"
}

File diff suppressed because one or more lines are too long

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>poster-wall · my-upg-100-list</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
@ -26,7 +32,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <my-upg-100-list-map> custom element. -->
<script src="../my-upg-100-list.js" integrity="sha384-TTFVV3OoRkvEnYlfI57+wLnSxSrHBqamhev9rzcBxrFGzdNZ7XwWUvpOOeG6ikT0" crossorigin="anonymous"></script>
<script src="../my-upg-100-list.js" integrity="sha384-rwEZFr0I9/+aFfKJDojxPrQ6BwIafYom66bzxvaCxnURiVr4ALaoZWPqqcwByUeF" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>upg-100-list · my-upg-100-list</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -30,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <my-upg-100-list-map> custom element. -->
<script src="../my-upg-100-list.js" integrity="sha384-TTFVV3OoRkvEnYlfI57+wLnSxSrHBqamhev9rzcBxrFGzdNZ7XwWUvpOOeG6ikT0" crossorigin="anonymous"></script>
<script src="../my-upg-100-list.js" integrity="sha384-rwEZFr0I9/+aFfKJDojxPrQ6BwIafYom66bzxvaCxnURiVr4ALaoZWPqqcwByUeF" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>upg-100-mfe · my-upg-100-list</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -41,7 +47,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <my-upg-100-list-map> custom element. -->
<script src="../my-upg-100-list.js" integrity="sha384-TTFVV3OoRkvEnYlfI57+wLnSxSrHBqamhev9rzcBxrFGzdNZ7XwWUvpOOeG6ikT0" crossorigin="anonymous"></script>
<script src="../my-upg-100-list.js" integrity="sha384-rwEZFr0I9/+aFfKJDojxPrQ6BwIafYom66bzxvaCxnURiVr4ALaoZWPqqcwByUeF" 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

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>People Groups Grid — externally driven (controls off, props/events) · people-groups-grid</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
@ -26,7 +32,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <people-groups-grid> custom element. -->
<script src="../../people-groups-grid.js" integrity="sha384-NxK7wM4VhKnvgdeGmcwCcPGvNkQq4dZRXDkh8eUWhtcEuz4s7EFeQQjxA1PciJVt" crossorigin="anonymous"></script>
<script src="../../people-groups-grid.js" integrity="sha384-jRC+t4Fp5Vc7bBAG6wqHSlnBfH58NiOpDXRk4LITH38reLiDwln0dJd8a7LyYtdw" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>people-groups-grid · people-groups-grid</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
@ -26,7 +32,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <people-groups-grid> custom element. -->
<script src="../people-groups-grid.js" integrity="sha384-NxK7wM4VhKnvgdeGmcwCcPGvNkQq4dZRXDkh8eUWhtcEuz4s7EFeQQjxA1PciJVt" crossorigin="anonymous"></script>
<script src="../people-groups-grid.js" integrity="sha384-jRC+t4Fp5Vc7bBAG6wqHSlnBfH58NiOpDXRk4LITH38reLiDwln0dJd8a7LyYtdw" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>People Groups Grid — standalone (own search + 4 dropdowns) · people-groups-grid</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
@ -26,7 +32,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <people-groups-grid> custom element. -->
<script src="../../people-groups-grid.js" integrity="sha384-NxK7wM4VhKnvgdeGmcwCcPGvNkQq4dZRXDkh8eUWhtcEuz4s7EFeQQjxA1PciJVt" crossorigin="anonymous"></script>
<script src="../../people-groups-grid.js" integrity="sha384-jRC+t4Fp5Vc7bBAG6wqHSlnBfH58NiOpDXRk4LITH38reLiDwln0dJd8a7LyYtdw" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>plugin-studio · plugin-studio</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>Plugin Studio — every element by capability 5 -&gt; 1 (developer studio) · plugin-studio</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.

File diff suppressed because one or more lines are too long

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>pplr-data-maps · pplr-data-maps</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -30,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <pplr-data-maps> custom element. -->
<script src="../pplr-data-maps.js" integrity="sha384-Ol7JJhbWaYthcjyEwQoSf+fsjcIEZGhbWwmGAAqPNj5fx/z4OCNAtHEMzo4ggbva" crossorigin="anonymous"></script>
<script src="../pplr-data-maps.js" integrity="sha384-Oxw1YTi/plI/0RTJeZQvJCan7XV0CzIJvkPRN0tDjLpVfz0qwVV7gN6vMU3P6tx4" 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

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>prayer-walk-planner · prayer-walk-planner</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -30,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <prayer-walk-planner> custom element. -->
<script src="../prayer-walk-planner.js" integrity="sha384-YZUFcXft7eTGJMY4I1FRak276dwfkSNFe6ylcWfRXJAmXWC39CCktE9qmNaZWSKB" crossorigin="anonymous"></script>
<script src="../prayer-walk-planner.js" integrity="sha384-PqvBFQWuX/MKP2Jv7p/ir8zBvb6tNbyWh00ZHCZU/Q0dpaE7XvF36tMhmC9tixcJ" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>region-dashboards · regions-dashboard</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -30,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <regions-dashboard> custom element. -->
<script src="../regions-dashboard.js" integrity="sha384-FDwUoPdVCOpa/WplF4PpBVLYMusCFPZqbxBBqQOFlI0sJhR+UB4HuSbH/O4MJec0" crossorigin="anonymous"></script>
<script src="../regions-dashboard.js" integrity="sha384-nhQdaK/mbo+hByXAKQ9TRmewlRyzN10YWiPqijosjdijLmJfwla30Gd4D7Ithb6t" 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

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>regions-list · regions-dashboard</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
@ -26,7 +32,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <regions-dashboard> custom element. -->
<script src="../regions-dashboard.js" integrity="sha384-FDwUoPdVCOpa/WplF4PpBVLYMusCFPZqbxBBqQOFlI0sJhR+UB4HuSbH/O4MJec0" crossorigin="anonymous"></script>
<script src="../regions-dashboard.js" integrity="sha384-nhQdaK/mbo+hByXAKQ9TRmewlRyzN10YWiPqijosjdijLmJfwla30Gd4D7Ithb6t" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>regions-mfe · regions-dashboard</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -41,7 +47,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <regions-dashboard> custom element. -->
<script src="../regions-dashboard.js" integrity="sha384-FDwUoPdVCOpa/WplF4PpBVLYMusCFPZqbxBBqQOFlI0sJhR+UB4HuSbH/O4MJec0" crossorigin="anonymous"></script>
<script src="../regions-dashboard.js" integrity="sha384-nhQdaK/mbo+hByXAKQ9TRmewlRyzN10YWiPqijosjdijLmJfwla30Gd4D7Ithb6t" 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

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>research-dashboard · research-dashboard</title>
<link rel="icon" href="data:,">
<!-- NO STATIC ENGINE TAGS (2026-09-25). This leaf used to hard-link mapbox-gl.css, the
@ -30,7 +36,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <research-dashboard-map> custom element. -->
<script src="../research-dashboard.js" integrity="sha384-qWWWrFhA8lGOVnjlGbE0uOx4QbLMsxgf17CxAlMS9E+tUur1KA2dsrG22mEkYAeO" crossorigin="anonymous"></script>
<script src="../research-dashboard.js" integrity="sha384-N8ZJTvr/l0jCSaV+3iP3gk/5R7SEwoJpMJFKEO9TYDC33wufmanR0eijkwSTO6mz" 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

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>default · research-map-plus-grid</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
@ -37,7 +43,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <research-map-plus-grid> custom element. -->
<script src="../../research-map-plus-grid.js" integrity="sha384-nlzCq4Er6WPMedck7D5qAXa27wpbd75WI40/BlOhDA4ZKHgud1lhxfJWvy0bpFTA" crossorigin="anonymous"></script>
<script src="../../research-map-plus-grid.js" integrity="sha384-q6MGCvQSGtk5CaASt5uu1mD7qDGoBwo17PDg3lW9jDzBQ5hMGj56TngLR/o6fc05" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -3,6 +3,12 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- THIS PAGE IS OURS. The only thing that knows a document belongs to the plugin is the page
the generator writes, so it says so here. library/i18n reads it before reflecting an RTL
locale on <html dir>; nothing else sets it, so a PARTNER page defaults to "not ours" and
is never touched. Absence must mean restraint — an embedded plugin flipping a partner's
whole <html> because a reader followed a ?lang=ar link is the bug this prevents. -->
<script>window.MAP_OWNS_PAGE = true;</script>
<title>research-map-plus-grid · research-map-plus-grid</title>
<link rel="icon" href="data:,">
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
@ -37,7 +43,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <research-map-plus-grid> custom element. -->
<script src="../research-map-plus-grid.js" integrity="sha384-nlzCq4Er6WPMedck7D5qAXa27wpbd75WI40/BlOhDA4ZKHgud1lhxfJWvy0bpFTA" crossorigin="anonymous"></script>
<script src="../research-map-plus-grid.js" integrity="sha384-q6MGCvQSGtk5CaASt5uu1mD7qDGoBwo17PDg3lW9jDzBQ5hMGj56TngLR/o6fc05" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

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