Merge remote-tracking branch 'origin/main' into rega/research-gallery-embed

# Conflicts:
#	public/doxa-maps/index.html
This commit is contained in:
doxa-maps-88655c70 2026-09-25 08:21:21 +00:00
commit cc09fd6184
26 changed files with 818 additions and 45 deletions

View file

@ -123,5 +123,10 @@
"t_resources": "الموارد حسب الشعب",
"t_languages": "اللغات حسب البلد",
"t_growth": "الوصول مقابل نمو السكان"
},
"pages": {
"listTitle": "موارد الإنجيل حسب اللغة",
"chartsTitle": "موارد الإنجيل — حسب اللغة",
"loadingTables": "جارٍ تحميل جداول الموارد…"
}
}

View file

@ -123,5 +123,10 @@
"t_resources": "Ressourcen nach Volksgruppe",
"t_languages": "Sprachen nach Land",
"t_growth": "Zugang vs. Bevölkerungswachstum"
},
"pages": {
"listTitle": "Evangeliums-Ressourcen nach Sprache",
"chartsTitle": "Evangeliums-Ressourcen — nach Sprache",
"loadingTables": "Ressourcentabellen werden geladen…"
}
}

View file

@ -123,5 +123,10 @@
"t_resources": "Resources by People Group",
"t_languages": "Languages by Country",
"t_growth": "Access vs Population Growth"
},
"pages": {
"listTitle": "Gospel Resources by Language",
"chartsTitle": "Gospel Resources — by Language",
"loadingTables": "Loading resource tables…"
}
}

View file

@ -123,5 +123,10 @@
"t_resources": "Recursos por pueblo",
"t_languages": "Idiomas por país",
"t_growth": "Acceso vs crecimiento"
},
"pages": {
"listTitle": "Recursos del evangelio por idioma",
"chartsTitle": "Recursos del evangelio — por idioma",
"loadingTables": "Cargando tablas de recursos…"
}
}

View file

@ -123,5 +123,10 @@
"t_resources": "Ressources par peuple",
"t_languages": "Langues par pays",
"t_growth": "Accès vs croissance"
},
"pages": {
"listTitle": "Ressources de l'Évangile par langue",
"chartsTitle": "Ressources de l'Évangile — par langue",
"loadingTables": "Chargement des tableaux…"
}
}

View file

@ -123,5 +123,10 @@
"t_resources": "जनसमूह अनुसार संसाधन",
"t_languages": "देश अनुसार भाषाएँ",
"t_growth": "पहुँच बनाम जनसंख्या वृद्धि"
},
"pages": {
"listTitle": "भाषा अनुसार सुसमाचार संसाधन",
"chartsTitle": "सुसमाचार संसाधन — भाषा अनुसार",
"loadingTables": "संसाधन तालिकाएँ लोड हो रही हैं…"
}
}

View file

@ -123,5 +123,10 @@
"t_resources": "Risorse per popolo",
"t_languages": "Lingue per paese",
"t_growth": "Accesso vs crescita"
},
"pages": {
"listTitle": "Risorse del Vangelo per lingua",
"chartsTitle": "Risorse del Vangelo — per lingua",
"loadingTables": "Caricamento delle tabelle…"
}
}

View file

@ -123,5 +123,10 @@
"t_resources": "Recursos por povo",
"t_languages": "Idiomas por país",
"t_growth": "Acesso vs crescimento"
},
"pages": {
"listTitle": "Recursos do evangelho por idioma",
"chartsTitle": "Recursos do evangelho — por idioma",
"loadingTables": "Carregando tabelas de recursos…"
}
}

View file

@ -123,5 +123,10 @@
"t_resources": "Resurse pe popoare",
"t_languages": "Limbi pe țări",
"t_growth": "Acces vs creștere"
},
"pages": {
"listTitle": "Resurse ale Evangheliei pe limbi",
"chartsTitle": "Resurse ale Evangheliei — pe limbi",
"loadingTables": "Se încarcă tabelele…"
}
}

View file

@ -123,5 +123,10 @@
"t_resources": "Ресурсы по народам",
"t_languages": "Языки по странам",
"t_growth": "Доступ и рост населения"
},
"pages": {
"listTitle": "Ресурсы Евангелия по языкам",
"chartsTitle": "Ресурсы Евангелия — по языкам",
"loadingTables": "Загрузка таблиц ресурсов…"
}
}

View file

@ -123,5 +123,10 @@
"t_resources": "按族群列出资源",
"t_languages": "各国语言",
"t_growth": "可及性与人口增长"
},
"pages": {
"listTitle": "按语言列出的福音资源",
"chartsTitle": "福音资源 — 按语言",
"loadingTables": "正在加载资源表…"
}
}

View file

@ -45,10 +45,23 @@
* DATA: fetched at runtime from assets/tables/ (people-group-resources.json is 1.2MB;
* inlining it into the IIFE would block first paint for every profile in the bundle).
*/
import { useI18n } from 'vue-i18n'
import enGospel from '@map/i18n/locales/en/gospel.json'
import { computed, inject, ref, watch } from 'vue'
import BarChart from '@map/components/charts/BarChart.vue'
import { useShadowStyles } from '@map/composables/useShadowStyles.js'
/* Guarded like every other useI18n() in this bundle — the host may never have installed it,
and the shipped English catalogue is the fallback rather than a broken key. */
const enLookup = (key) =>
String(key).replace(/^gospel\./, '').split('.').reduce((o, k) => (o == null ? o : o[k]), enGospel)
let tr = (key) => enLookup(key) ?? String(key)
try {
const i18n = useI18n()
tr = (key) => { const v = i18n.t(key); return v === key ? (enLookup(key) ?? key) : v }
} catch (_) { /* no i18n on this host */ }
const profileConfig = inject('profileConfig', ref(null))
const isDark = computed(() => profileConfig.value?.isDark === true)
@ -400,9 +413,9 @@ useShadowStyles(
</script>
<template>
<div class="gc" dir="ltr" :class="{ 'is-dark': isDark }">
<h2 class="gc-h">Gospel Resources — by Language</h2>
<p class="gc-sub">
<div class="gc" :class="{ 'is-dark': isDark }">
<h2 class="gc-h">{{ tr('gospel.pages.chartsTitle') }}</h2>
<p class="gc-sub" dir="ltr">
{{ fmt(nGroups) }} people groups collapse to {{ fmt(nLang) }} languages, joined on exact
ISO 639-3 codes. A translation is made once per language and then serves every
group that speaks it — so the language is the unit of the gap.
@ -433,7 +446,7 @@ useShadowStyles(
</div>
<div v-if="loadErr" class="gc-err">{{ loadErr }}</div>
<div v-else-if="loading || !nLang" class="gc-load">Loading resource tables…</div>
<div v-else-if="loading || !nLang" class="gc-load">{{ tr('gospel.pages.loadingTables') }}</div>
<div v-else class="gc-card">
<BarChart
@ -493,7 +506,7 @@ useShadowStyles(
/>
<div v-if="picked" class="gc-pick">
<button type="button" @click="picked = null">Close</button>
<button type="button" @click="picked = null">{{ tr('gospel.sheet.close') }}</button>
<template v-if="picked.meta.iso">
<b>{{ picked.meta.name }}</b> · ISO 639-3 <b>{{ picked.meta.iso }}</b> ·
{{ fmt(picked.meta.population) }} people in

View file

@ -228,7 +228,16 @@ useShadowStyles(
<template>
<!-- The blanket dir="ltr" is gone: this profile's chrome is translated now, so Arabic gets
the RTL layout it should have. What stays LTR is each block of English prose, marked
where it sits — the same split the map profile already uses. -->
where it sits — the same split the map profile already uses.
★ CORRECTION, measured 2026-09-25. The previous commit recorded "in RTL the leftmost
data column clips against the edge" as known debt. That was wrong, and it was wrong in
the way that wastes someone else's afternoon: I read a screenshot instead of measuring.
Counting cells that fall outside the table holder, en and ar are IDENTICAL — 13 of 20
columns off-screen in both, scrollWidth 3146 against clientWidth 1400 either way. A
twenty-column table is simply wider than 1,400px, and RTL mirrors which edge the
overflow sits on. There is no RTL clipping bug to chase. Whether twenty columns is the
right design for a 1,400px screen is a real question, but it is a design question and
it is the same question in English. -->
<div class="gt" :class="{ 'is-dark': isDark }">
<h2 class="gt-h">{{ tr('gospel.tables.title') }}</h2>
<p class="gt-sub" dir="ltr">

View file

@ -1,4 +1,6 @@
<script setup>
import { useI18n } from 'vue-i18n'
import enGospel from '@map/i18n/locales/en/gospel.json'
import { resourceRows } from './gospel-resource-rows.js'
/**
* resources-list.vue — GOSPEL RESOURCES, by language.
@ -40,6 +42,17 @@ import { computed, inject, ref, watch } from 'vue'
import { useShadowStyles } from '@map/composables/useShadowStyles.js'
import { resolveAssetsBase } from '@map/utils/embedBase.js'
/* Guarded like every other useI18n() in this bundle — the host may never have installed it,
and the shipped English catalogue is the fallback rather than a broken key. */
const enLookup = (key) =>
String(key).replace(/^gospel\./, '').split('.').reduce((o, k) => (o == null ? o : o[k]), enGospel)
let tr = (key) => enLookup(key) ?? String(key)
try {
const i18n = useI18n()
tr = (key) => { const v = i18n.t(key); return v === key ? (enLookup(key) ?? key) : v }
} catch (_) { /* no i18n on this host */ }
const profileConfig = inject('profileConfig', ref(null))
const isDark = computed(() => profileConfig.value?.isDark === true)
@ -284,16 +297,16 @@ useShadowStyles(
</script>
<template>
<div class="gr" dir="ltr" :class="{ 'is-dark': isDark }">
<h2 class="gr-h">Gospel Resources by Language</h2>
<p class="gr-sub">
<div class="gr" :class="{ 'is-dark': isDark }">
<h2 class="gr-h">{{ tr('gospel.pages.listTitle') }}</h2>
<p class="gr-sub" dir="ltr">
Which unengaged people groups have scripture <strong>in their own language</strong> —
and which have none yet found.
</p>
<div class="gr-hero">
<div class="gr-hero-n">{{ fmt(stats.people_groups_without_scripture) }}</div>
<div class="gr-hero-t">
<div class="gr-hero" dir="ltr">
<div class="gr-hero-n" dir="ltr">{{ fmt(stats.people_groups_without_scripture) }}</div>
<div class="gr-hero-t" dir="ltr">
people groups across {{ fmt(stats.languages_without) }} languages
— no text Scripture found in the pools checked
<br>≈ {{ fmt(stats.population_without_scripture) }} people

View file

@ -0,0 +1,75 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>legacy map host</title>
<style>html,body{margin:0;height:100%;background:#f3f3f1}.host{position:fixed;inset:0}</style>
</head>
<body>
<div class="host" id="host"></div>
<script>
// Sandboxed host for the LEGACY upg-neighbor IIFE (pre-bundler architecture). This page runs
// inside an IFRAME so the old engine and its dependencies cannot collide with the modern
// bundles -- the isolation pattern the roundup mandates ("add without breaking doxa-maps").
var q = new URLSearchParams(location.search);
var el = (q.get('el') || 'send-map').replace(/[^a-z0-9-]/g, '');
var tk = q.get('tk') || '';
// Token globals the legacy build may read.
window.MAPBOX_TOKEN = tk; window.MAP_TOKEN = tk; window.UPG_TOKEN = tk;
// The legacy code fetches relative "/api/people-groups/..." which only resolved on its old
// origin. Shim fetch so those calls reach the live API from ANY host (static tree, iframe).
var API = 'https://pray.doxa.life';
// The cockpit profile fails closed without a configured API base and names this global in
// its own error banner (measured: "No API base configured (apiBase / window.MAP_APP_API_URL
// / VITE_API_BASE_URL) -- failing closed").
window.MAP_APP_API_URL = API;
var origFetch = window.fetch.bind(window);
window.fetch = function (input, init) {
try {
var url = typeof input === 'string' ? input : (input && input.url) || '';
if (url.indexOf('/api/') === 0) return origFetch(API + url, init);
} catch (e) { /* fall through */ }
return origFetch(input, init);
};
// ── KEYLESS SHIM ──────────────────────────────────────────────────────────
// The legacy bundle expects a mapboxgl GLOBAL and requests mapbox://styles/mapbox/light-v11.
// MapLibre is API-compatible with the mapbox-gl v1 surface the bundle uses, and OpenFreeMap
// Positron is the keyless twin of light-v11 -- so the shim below makes every legacy map run
// WITHOUT a Mapbox token: load our self-hosted MapLibre, alias it as mapboxgl, and rewrite
// any mapbox:// style to the keyless URL inside a patched Map constructor.
var KEYLESS_STYLE = 'https://tiles.openfreemap.org/styles/positron';
var lib = document.createElement('link'); lib.rel='stylesheet'; lib.href='./maplibre-gl.css';
document.head.appendChild(lib);
var ml = document.createElement('script');
ml.src = './maplibre-gl.js';
ml.onload = function () {
var Real = window.maplibregl.Map;
function PatchedMap (opts) {
if (opts && typeof opts.style === 'string' && opts.style.indexOf('mapbox://') === 0) opts.style = KEYLESS_STYLE;
return new Real(opts);
}
PatchedMap.prototype = Real.prototype;
window.mapboxgl = Object.assign({}, window.maplibregl, { Map: PatchedMap, accessToken: '' });
loadLegacy();
};
ml.onerror = function () { loadLegacy(); };
document.head.appendChild(ml);
function loadLegacy () {
var s = document.createElement('script');
s.src = './upg-neighbor.iife.js';
s.onload = function () {
var node = document.createElement(el);
node.style.cssText = 'display:block;width:100%;height:100%';
// The legacy elements use the SAME profile-config attribute contract as the modern
// bundles (measured: without it the element renders its own usage banner).
node.setAttribute('profile-config', JSON.stringify({ profile: el, tk: tk }));
document.getElementById('host').appendChild(node);
};
s.onerror = function () { document.body.innerHTML = '<p style="font:14px system-ui;padding:20px">legacy bundle failed to load</p>'; };
document.head.appendChild(s);
}
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -26,7 +26,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-si6xYD0jJTVi8u30O2GlmdcZB0yIVineJsCDRS7yYHQQOsRnF4mzSredX71y9dFg" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-pWaJ1mO+3WhT6X+j0slZ7o2RH3eJoSsARtAtM0pa1QG9NL1gRn5m28VKT0gRq+SZ" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -26,7 +26,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-si6xYD0jJTVi8u30O2GlmdcZB0yIVineJsCDRS7yYHQQOsRnF4mzSredX71y9dFg" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-pWaJ1mO+3WhT6X+j0slZ7o2RH3eJoSsARtAtM0pa1QG9NL1gRn5m28VKT0gRq+SZ" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -40,7 +40,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-si6xYD0jJTVi8u30O2GlmdcZB0yIVineJsCDRS7yYHQQOsRnF4mzSredX71y9dFg" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-pWaJ1mO+3WhT6X+j0slZ7o2RH3eJoSsARtAtM0pa1QG9NL1gRn5m28VKT0gRq+SZ" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

File diff suppressed because one or more lines are too long

View file

@ -26,7 +26,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-si6xYD0jJTVi8u30O2GlmdcZB0yIVineJsCDRS7yYHQQOsRnF4mzSredX71y9dFg" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-pWaJ1mO+3WhT6X+j0slZ7o2RH3eJoSsARtAtM0pa1QG9NL1gRn5m28VKT0gRq+SZ" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -29,7 +29,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
<script src="../gospel-resources.js" integrity="sha384-si6xYD0jJTVi8u30O2GlmdcZB0yIVineJsCDRS7yYHQQOsRnF4mzSredX71y9dFg" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-pWaJ1mO+3WhT6X+j0slZ7o2RH3eJoSsARtAtM0pa1QG9NL1gRn5m28VKT0gRq+SZ" 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

@ -579,7 +579,7 @@
"bundle": "gospel-resources",
"scriptUrl": "./gospel-resources/gospel-resources.js",
"output": "doxa-maps/gospel-resources/gospel-resources.js",
"integrity": "sha384-si6xYD0jJTVi8u30O2GlmdcZB0yIVineJsCDRS7yYHQQOsRnF4mzSredX71y9dFg",
"integrity": "sha384-pWaJ1mO+3WhT6X+j0slZ7o2RH3eJoSsARtAtM0pa1QG9NL1gRn5m28VKT0gRq+SZ",
"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-si6xYD0jJTVi8u30O2GlmdcZB0yIVineJsCDRS7yYHQQOsRnF4mzSredX71y9dFg\" 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-pWaJ1mO+3WhT6X+j0slZ7o2RH3eJoSsARtAtM0pa1QG9NL1gRn5m28VKT0gRq+SZ\" 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-si6xYD0jJTVi8u30O2GlmdcZB0yIVineJsCDRS7yYHQQOsRnF4mzSredX71y9dFg\" 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-pWaJ1mO+3WhT6X+j0slZ7o2RH3eJoSsARtAtM0pa1QG9NL1gRn5m28VKT0gRq+SZ\" 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": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-si6xYD0jJTVi8u30O2GlmdcZB0yIVineJsCDRS7yYHQQOsRnF4mzSredX71y9dFg\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-pWaJ1mO+3WhT6X+j0slZ7o2RH3eJoSsARtAtM0pa1QG9NL1gRn5m28VKT0gRq+SZ\" 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-si6xYD0jJTVi8u30O2GlmdcZB0yIVineJsCDRS7yYHQQOsRnF4mzSredX71y9dFg\" 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-pWaJ1mO+3WhT6X+j0slZ7o2RH3eJoSsARtAtM0pa1QG9NL1gRn5m28VKT0gRq+SZ\" 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": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-si6xYD0jJTVi8u30O2GlmdcZB0yIVineJsCDRS7yYHQQOsRnF4mzSredX71y9dFg\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-pWaJ1mO+3WhT6X+j0slZ7o2RH3eJoSsARtAtM0pa1QG9NL1gRn5m28VKT0gRq+SZ\" 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>"
}
}
]