Merge remote-tracking branch 'origin/development' into wall-of-people-groups-plugin/work

This commit is contained in:
Doxa Maps 2026-09-30 22:49:32 +00:00
commit 28cb482c79
11 changed files with 43 additions and 46 deletions

View file

@ -167,13 +167,18 @@ const run = (rule, src) => rule.test ? rule.test(src) : [...src.matchAll(rule.re
const lineOf = (src, idx) => src.slice(0, idx).split('\n').length
// ── self-test: every rule must see a planted violation ─────────────────────────────────────────
// The TOK-LITERAL sample is ASSEMBLED HERE, never written as one literal: a committed string shaped like a
// real Mapbox token is itself what that rule forbids, and reads as a leaked credential to any secret scan.
// It is plainly fake ('example, not a token'), yet shaped like one: pk. + base64url JSON + . + a tail, which
// is all the rule's regex looks for, so the self-test still proves the rule fires.
const FAKE_TOKEN = 'pk.' + Buffer.from('{"u":"example","note":"not-a-token"}').toString('base64url') + '.' + 'x'.repeat(22)
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'
const t = '${FAKE_TOKEN}'
n.toLocaleString('en-US')
const r = await fetch(base + '/api/people-groups/list?fields=slug')
const dsm = new DataSourceManager({ locale: 'en' })

View file

@ -583,7 +583,7 @@
"check:poster-layout-optin": "the composed poster sheet (header, map, legend beside it, footer) is OPT-IN: spec.layout === 'poster' asks for it, and every caller that does not gets the full-page map exactly as before, asserted by object identity, not just by value. Drives the real layout decisions with real spec objects. Headless, no browser.",
"check:poster-print-fallback": "clicks the REAL poster print control with the served poster generator and every posters/*.webp aborted, and asserts the preview RASTERISES from posters/<id>.html instead of opening on \"Poster not available yet\". Needs a served tree built with posterSources:true; NOT MEASURED otherwise.",
"check:posters-exportable": "every poster the tree offers can be printed. With posterSources on, the tree once shipped only the 28 zone sources, so 350 of 378 posters said \"poster not found (404)\". Each id, from data/posters and the wall's previews, must ship a real WebP (RIFF..WEBP) or a real poster source (its class=\"stage\" element), so a placeholder or a host's fallback page cannot pass. SKIPs when posters are off by config, which check:poster-degrades covers. Reads the built tree; no server.",
"check:posterverse-shelf": "Posterverse (the capability-5 poster shell) shows exactly its allow-list and never a gated plugin. Asserts the rail rows per section (Posters: upg-100, country-posters, poster-design; Experimental: wall-of-people-groups, all-people-groups, upg-neighbor, bible-posters), that no row names key-cities or a shell (a key-cities bundle is planted into the built manifest, because the real one withholds gated profiles), that every present row opens the profile it names (no silent fallback to a leaf), that posterverse.meta.json composes equals the rows whose bundle exists, and 11-locale parity of the shell strings. --self-test plants one defect per arm. Headless. Exit 0 pass, 1 fail, 75 no built manifest.",
"check:posterverse-shelf": "Posterverse (the capability-5 poster shell) shows exactly its allow-list and never a gated plugin. Asserts the rail rows per section (Posters: upg-100, country-posters, poster-design; Experimental: wall-of-people-groups, bible-posters), that no row names key-cities or a shell (a key-cities bundle is planted into the built manifest, because the real one withholds gated profiles), that every present row opens the profile it names (no silent fallback to a leaf), that posterverse.meta.json composes equals the rows whose bundle exists, and 11-locale parity of the shell strings. --self-test plants one defect per arm. Headless. Exit 0 pass, 1 fail, 75 no built manifest.",
"check:prayer-walk-planner": "the Prayer Walk Planner is a full-page tool that prints a real walking map: the map canvas fills the page below the toolbar in its own leaf AND inside the Research Gallery at 1280x800 and 390x844 (the gallery once collapsed it to 76px / 0px); a real zone (Balat, Istanbul) renders a >=2000px print map that is not blank, saved to OUT=<dir> so a human can read it; ?lang=es gives a Spanish toolbar; 0 page errors. Run inside the shared browser locks. Exit 2 = SKIP.",
"check:preset-config-merge": "a preset page (<bundle>/<profile>/<instance>/index.html) keeps every default in its profile's .meta.json config, with the instance's props merged over them (go-int's upg-neighbor presets lost pinHint:false when props replaced the config). Reads the built tree; SKIP without one.",
"check:profile-table": "the prayer packet's profile TABLE (20 full-width rows: picture, generated description, three boxes; PER_PAGE stays 20): a row stays tall enough for a name plus a two-line description at the smallest fit size, and truncation happens only at a whole word. Character-count, not DOM, so Node and the browser agree. Cannot see the RENDERED row height: that is check:packet-render, a browser gate. By the UPG-100 owner; mutation-tested. Headless; in gates:pre.",

View file

@ -4,9 +4,7 @@
"composes": [
"my-upg-100-list/upg-100-mfe",
"country-posters/country-posters-mfe",
"wall-of-people-groups/wall-of-people-groups",
"all-people-groups/all-people-groups",
"upg-neighbor/upg-neighbor"
"wall-of-people-groups/wall-of-people-groups"
],
"label": "Posterverse (vertical-tab app shell: every poster plugin)"
}

View file

@ -9,7 +9,7 @@
*
* WHAT IT ASSERTS (each arm is poisoned by --self-test before a pass is trusted):
* A. the rail's rows are exactly the named sets: Posters = upg-100, country-posters, poster-design;
* Experimental = wall-of-people-groups, all-people-groups, upg-neighbor, bible-posters. Ids unique,
* Experimental = wall-of-people-groups, bible-posters (poster plugins only). Ids unique,
* every row in a declared section.
* B. no row names a NEVER bundle (key-cities, the shells themselves), and resolving the built
* manifest WITH a key-cities bundle planted in it yields no key-cities row (the real manifest
@ -34,7 +34,7 @@ const ROOT = resolve(PLUGIN, '../..')
const EXPECT = {
posters: ['upg-100', 'country-posters', 'poster-design'],
experimental: ['wall-of-people-groups', 'all-people-groups', 'upg-neighbor', 'bible-posters'],
experimental: ['wall-of-people-groups', 'bible-posters'],
}
const GATED = 'key-cities'
@ -114,7 +114,7 @@ function selfTest(base) {
const clone = (o) => JSON.parse(JSON.stringify(o))
const cases = [
['A: key-cities added to Experimental', (c) => { c.TABS = [...c.TABS, { id: 'key-cities', section: 'experimental', bundle: 'key-cities', profile: 'key-cities' }] }, /^A: section experimental|^B: row key-cities/],
['A: a row dropped', (c) => { c.TABS = c.TABS.filter((t) => t.id !== 'upg-neighbor') }, /^A: section experimental/],
['A: a row dropped', (c) => { c.TABS = c.TABS.filter((t) => t.id !== 'wall-of-people-groups') }, /^A: section experimental/],
['B: resolver that shows whatever the manifest carries', (c) => { c.resolveTabs = (m) => (m.bundles || []).map((b) => ({ id: b.bundle, bundle: b.bundle, profile: b.bundle, tag: b.bundle, scriptUrl: b.scriptUrl })) }, /^B: resolution produced a key-cities row/],
['C: a composite row falls back to a leaf', (c) => { c.manifest = clone(c.manifest); const b = c.manifest.bundles.find((x) => x.bundle === 'my-upg-100-list'); b.profiles = b.profiles.filter((p) => p.profile !== 'upg-100-mfe') }, /^C: row upg-100 opens/],
['D: composes drift', (c) => { c.meta = { ...c.meta, composes: c.meta.composes.slice(1) } }, /^D: the rail shows/],

View file

@ -18,8 +18,8 @@ export const STRINGS = {
'tab.upg-100': 'UPG 100 List Posters', 'sub.upg-100': 'my unreached list + posters',
'tab.country-posters': 'Country Posters', 'sub.country-posters': 'a poster for every country',
'tab.poster-design': 'Poster Design', 'sub.poster-design': 'every poster style and size',
'tab.wall-of-people-groups': 'Wall of People Groups', 'tab.all-people-groups': 'All People Groups',
'tab.upg-neighbor': 'UPG Neighbor', 'tab.bible-posters': 'Bible Posters',
'tab.wall-of-people-groups': 'Wall of People Groups',
'tab.bible-posters': 'Bible Posters',
experimentalSub: 'experimental bundle', lab: 'lab',
loading: 'Loading {label}…', loadFailed: 'Could not load {label}.',
manifestHint: 'This tab is composed from manifest.json — build the tree, or serve the built tree, to load it.',
@ -31,8 +31,8 @@ export const STRINGS = {
'tab.upg-100': 'Carteles de la lista UPG 100', 'sub.upg-100': 'mi lista de no alcanzados + carteles',
'tab.country-posters': 'Carteles por país', 'sub.country-posters': 'un cartel para cada país',
'tab.poster-design': 'Diseño de carteles', 'sub.poster-design': 'todos los estilos y tamaños de cartel',
'tab.wall-of-people-groups': 'Muro de los pueblos', 'tab.all-people-groups': 'Todos los pueblos',
'tab.upg-neighbor': 'Vecino UPG', 'tab.bible-posters': 'Carteles bíblicos',
'tab.wall-of-people-groups': 'Muro de los pueblos',
'tab.bible-posters': 'Carteles bíblicos',
experimentalSub: 'mapa experimental', lab: 'beta',
loading: 'Cargando {label}…', loadFailed: 'No se pudo cargar {label}.',
manifestHint: 'Esta pestaña se compone a partir de manifest.json: compila el árbol o sirve el árbol compilado para cargarla.',
@ -44,8 +44,8 @@ export const STRINGS = {
'tab.upg-100': 'Affiches de la liste UPG 100', 'sub.upg-100': 'ma liste des non atteints + affiches',
'tab.country-posters': 'Affiches par pays', 'sub.country-posters': 'une affiche pour chaque pays',
'tab.poster-design': 'Conception d’affiches', 'sub.poster-design': 'tous les styles et formats d’affiche',
'tab.wall-of-people-groups': 'Mur des peuples', 'tab.all-people-groups': 'Tous les peuples',
'tab.upg-neighbor': 'Voisin UPG', 'tab.bible-posters': 'Affiches bibliques',
'tab.wall-of-people-groups': 'Mur des peuples',
'tab.bible-posters': 'Affiches bibliques',
experimentalSub: 'carte expérimentale', lab: 'bêta',
loading: 'Chargement de {label}…', loadFailed: 'Impossible de charger {label}.',
manifestHint: "Cet onglet est composé à partir de manifest.json : construisez l'arborescence ou servez l'arborescence construite pour le charger.",
@ -57,8 +57,8 @@ export const STRINGS = {
'tab.upg-100': 'Poster der UPG 100 Liste', 'sub.upg-100': 'meine Liste der Unerreichten + Poster',
'tab.country-posters': 'Länderposter', 'sub.country-posters': 'ein Poster für jedes Land',
'tab.poster-design': 'Postergestaltung', 'sub.poster-design': 'alle Posterstile und -größen',
'tab.wall-of-people-groups': 'Wand der Volksgruppen', 'tab.all-people-groups': 'Alle Volksgruppen',
'tab.upg-neighbor': 'UPG-Nachbar', 'tab.bible-posters': 'Bibelposter',
'tab.wall-of-people-groups': 'Wand der Volksgruppen',
'tab.bible-posters': 'Bibelposter',
experimentalSub: 'experimentelle Karte', lab: 'Beta',
loading: '{label} wird geladen…', loadFailed: '{label} konnte nicht geladen werden.',
manifestHint: 'Dieser Tab wird aus manifest.json zusammengesetzt – bauen Sie den Baum oder stellen Sie den gebauten Baum bereit, um ihn zu laden.',
@ -70,8 +70,8 @@ export const STRINGS = {
'tab.upg-100': 'Cartazes da lista UPG 100', 'sub.upg-100': 'minha lista de não alcançados + cartazes',
'tab.country-posters': 'Cartazes por país', 'sub.country-posters': 'um cartaz para cada país',
'tab.poster-design': 'Design de cartazes', 'sub.poster-design': 'todos os estilos e tamanhos de cartaz',
'tab.wall-of-people-groups': 'Mural dos povos', 'tab.all-people-groups': 'Todos os povos',
'tab.upg-neighbor': 'Vizinho UPG', 'tab.bible-posters': 'Cartazes bíblicos',
'tab.wall-of-people-groups': 'Mural dos povos',
'tab.bible-posters': 'Cartazes bíblicos',
experimentalSub: 'mapa experimental', lab: 'beta',
loading: 'Carregando {label}…', loadFailed: 'Não foi possível carregar {label}.',
manifestHint: 'Esta aba é composta a partir do manifest.json — compile a árvore ou sirva a árvore compilada para carregá-la.',
@ -83,8 +83,8 @@ export const STRINGS = {
'tab.upg-100': 'Poster della lista UPG 100', 'sub.upg-100': 'la mia lista dei non raggiunti + poster',
'tab.country-posters': 'Poster per paese', 'sub.country-posters': 'un poster per ogni paese',
'tab.poster-design': 'Design dei poster', 'sub.poster-design': 'tutti gli stili e i formati dei poster',
'tab.wall-of-people-groups': 'Muro dei popoli', 'tab.all-people-groups': 'Tutti i popoli',
'tab.upg-neighbor': 'Vicino UPG', 'tab.bible-posters': 'Poster biblici',
'tab.wall-of-people-groups': 'Muro dei popoli',
'tab.bible-posters': 'Poster biblici',
experimentalSub: 'mappa sperimentale', lab: 'beta',
loading: 'Caricamento di {label}…', loadFailed: 'Impossibile caricare {label}.',
manifestHint: "Questa scheda è composta da manifest.json: compila l'albero o pubblica l'albero compilato per caricarla.",
@ -96,8 +96,8 @@ export const STRINGS = {
'tab.upg-100': 'Afișe din lista UPG 100', 'sub.upg-100': 'lista mea de neatinși + afișe',
'tab.country-posters': 'Afișe pe țări', 'sub.country-posters': 'un afiș pentru fiecare țară',
'tab.poster-design': 'Design de afișe', 'sub.poster-design': 'toate stilurile și dimensiunile de afiș',
'tab.wall-of-people-groups': 'Zidul popoarelor', 'tab.all-people-groups': 'Toate popoarele',
'tab.upg-neighbor': 'Vecin UPG', 'tab.bible-posters': 'Afișe biblice',
'tab.wall-of-people-groups': 'Zidul popoarelor',
'tab.bible-posters': 'Afișe biblice',
experimentalSub: 'hartă experimentală', lab: 'beta',
loading: 'Se încarcă {label}…', loadFailed: '{label} nu a putut fi încărcat.',
manifestHint: 'Această filă este compusă din manifest.json — construiți arborele sau serviți arborele construit pentru a o încărca.',
@ -109,8 +109,8 @@ export const STRINGS = {
'tab.upg-100': 'Плакаты списка UPG 100', 'sub.upg-100': 'мой список недостигнутых + плакаты',
'tab.country-posters': 'Плакаты по странам', 'sub.country-posters': 'плакат для каждой страны',
'tab.poster-design': 'Дизайн плакатов', 'sub.poster-design': 'все стили и размеры плакатов',
'tab.wall-of-people-groups': 'Стена народов', 'tab.all-people-groups': 'Все народы',
'tab.upg-neighbor': 'Сосед UPG', 'tab.bible-posters': 'Библейские плакаты',
'tab.wall-of-people-groups': 'Стена народов',
'tab.bible-posters': 'Библейские плакаты',
experimentalSub: 'экспериментальная карта', lab: 'бета',
loading: 'Загрузка: {label}…', loadFailed: 'Не удалось загрузить: {label}.',
manifestHint: 'Эта вкладка собирается из manifest.json — соберите дерево или разместите собранное дерево, чтобы загрузить её.',
@ -122,8 +122,8 @@ export const STRINGS = {
'tab.upg-100': 'ملصقات قائمة UPG 100', 'sub.upg-100': 'قائمتي لغير المُبشَّرين + ملصقات',
'tab.country-posters': 'ملصقات الدول', 'sub.country-posters': 'ملصق لكل دولة',
'tab.poster-design': 'تصميم الملصقات', 'sub.poster-design': 'كل أنماط الملصقات وأحجامها',
'tab.wall-of-people-groups': 'جدار الشعوب', 'tab.all-people-groups': 'جميع الشعوب',
'tab.upg-neighbor': 'جار UPG', 'tab.bible-posters': 'ملصقات الكتاب المقدس',
'tab.wall-of-people-groups': 'جدار الشعوب',
'tab.bible-posters': 'ملصقات الكتاب المقدس',
experimentalSub: 'خريطة تجريبية', lab: 'تجريبي',
loading: 'جارٍ تحميل {label}…', loadFailed: 'تعذّر تحميل {label}.',
manifestHint: 'تُبنى علامة التبويب هذه من manifest.json — ابنِ الشجرة أو قدّم الشجرة المبنية لتحميلها.',
@ -135,8 +135,8 @@ export const STRINGS = {
'tab.upg-100': 'UPG 100 सूची पोस्टर', 'sub.upg-100': 'मेरी अप्राप्त सूची + पोस्टर',
'tab.country-posters': 'देश पोस्टर', 'sub.country-posters': 'हर देश के लिए एक पोस्टर',
'tab.poster-design': 'पोस्टर डिज़ाइन', 'sub.poster-design': 'हर पोस्टर शैली और आकार',
'tab.wall-of-people-groups': 'जनसमूहों की दीवार', 'tab.all-people-groups': 'सभी जनसमूह',
'tab.upg-neighbor': 'UPG पड़ोसी', 'tab.bible-posters': 'बाइबल पोस्टर',
'tab.wall-of-people-groups': 'जनसमूहों की दीवार',
'tab.bible-posters': 'बाइबल पोस्टर',
experimentalSub: 'प्रायोगिक मानचित्र', lab: 'बीटा',
loading: '{label} लोड हो रहा है…', loadFailed: '{label} लोड नहीं हो सका।',
manifestHint: 'यह टैब manifest.json से बनता है — इसे लोड करने के लिए ट्री बनाएँ या बना हुआ ट्री सर्व करें।',
@ -148,8 +148,8 @@ export const STRINGS = {
'tab.upg-100': 'UPG 100 名单海报', 'sub.upg-100': '我的未得之民名单 + 海报',
'tab.country-posters': '国家海报', 'sub.country-posters': '每个国家一张海报',
'tab.poster-design': '海报设计', 'sub.poster-design': '所有海报样式与尺寸',
'tab.wall-of-people-groups': '民族之墙', 'tab.all-people-groups': '所有民族',
'tab.upg-neighbor': 'UPG 邻居', 'tab.bible-posters': '圣经海报',
'tab.wall-of-people-groups': '民族之墙',
'tab.bible-posters': '圣经海报',
experimentalSub: '实验性地图', lab: '测试版',
loading: '正在加载{label}…', loadFailed: '无法加载{label}。',
manifestHint: '此标签页由 manifest.json 组成——请构建目录树或提供已构建的目录树以加载它。',

View file

@ -32,8 +32,6 @@ export const TABS = [
// Provisional ids: no poster-design bundle exists yet, so this row is pruned until one does.
{ id: 'poster-design', section: 'posters', icon: 'poster', bundle: 'poster-design', profile: 'poster-design-mfe', provisional: true },
{ id: 'wall-of-people-groups', section: 'experimental', icon: 'flask', bundle: 'wall-of-people-groups', profile: 'wall-of-people-groups' },
{ id: 'all-people-groups', section: 'experimental', icon: 'flask', bundle: 'all-people-groups', profile: 'all-people-groups' },
{ id: 'upg-neighbor', section: 'experimental', icon: 'flask', bundle: 'upg-neighbor', profile: 'upg-neighbor' },
// Provisional ids: no bible-posters bundle exists yet, so this row is pruned until one does.
{ id: 'bible-posters', section: 'experimental', icon: 'flask', bundle: 'bible-posters', profile: 'bible-posters', provisional: true },
]
@ -47,7 +45,7 @@ export const NEVER = new Set(['key-cities', 'posterverse', 'doxa-maps-spa', 'plu
// (browsers keep ~8-16 live contexts and silently kill the oldest). Taken from the Research Gallery's
// measured HEAVY_ELEMENTS for the tags this rail shows; any profile the manifest marks `isMap` is
// treated as heavy too, so a new map row is bounded without an edit here.
const HEAVY_TAGS = new Set(['my-upg-100-list-map', 'country-posters-map', 'all-people-groups'])
const HEAVY_TAGS = new Set(['my-upg-100-list-map', 'country-posters-map'])
/**
* Complete each row from the manifest: the bundle's scriptUrl and the profile's element tag. A row

View file

@ -1069,16 +1069,14 @@
"bundle": "posterverse",
"scriptUrl": "./posterverse/posterverse.js",
"output": "dx-maps/posterverse/posterverse.js",
"integrity": "sha384-xwStH6d1rIR+LOJ9iBnJXyNFIMTzSQ51YA2+UhqJgloN4EeH6vYubtHY3JM9j7p0",
"integrity": "sha384-brdiKg/0LXeaLF4WmTdeiia1QKk9Qy2qn6MHrKnPM2HXAKMPxTfY98MuxGQWIwIS",
"elements": [
"posterverse-app"
],
"composes": [
"my-upg-100-list/upg-100-mfe",
"country-posters/country-posters-mfe",
"wall-of-people-groups/wall-of-people-groups",
"all-people-groups/all-people-groups",
"upg-neighbor/upg-neighbor"
"wall-of-people-groups/wall-of-people-groups"
],
"stage": "experimental",
"profiles": [
@ -1095,7 +1093,7 @@
"scriptUrl": "./posterverse/posterverse.js",
"embed": {
"iframe": "<iframe src=\"./posterverse/posterverse/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=\"./posterverse/posterverse.js\" integrity=\"sha384-xwStH6d1rIR+LOJ9iBnJXyNFIMTzSQ51YA2+UhqJgloN4EeH6vYubtHY3JM9j7p0\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<posterverse-app profile-config='{\"profile\":\"posterverse\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></posterverse-app>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./posterverse/posterverse.js\" integrity=\"sha384-brdiKg/0LXeaLF4WmTdeiia1QKk9Qy2qn6MHrKnPM2HXAKMPxTfY98MuxGQWIwIS\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<posterverse-app profile-config='{\"profile\":\"posterverse\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></posterverse-app>"
},
"instances": [
{

View file

@ -1069,16 +1069,14 @@
"bundle": "posterverse",
"scriptUrl": "./posterverse/posterverse.js",
"output": "dx-maps/posterverse/posterverse.js",
"integrity": "sha384-xwStH6d1rIR+LOJ9iBnJXyNFIMTzSQ51YA2+UhqJgloN4EeH6vYubtHY3JM9j7p0",
"integrity": "sha384-brdiKg/0LXeaLF4WmTdeiia1QKk9Qy2qn6MHrKnPM2HXAKMPxTfY98MuxGQWIwIS",
"elements": [
"posterverse-app"
],
"composes": [
"my-upg-100-list/upg-100-mfe",
"country-posters/country-posters-mfe",
"wall-of-people-groups/wall-of-people-groups",
"all-people-groups/all-people-groups",
"upg-neighbor/upg-neighbor"
"wall-of-people-groups/wall-of-people-groups"
],
"stage": "experimental",
"profiles": [
@ -1095,7 +1093,7 @@
"scriptUrl": "./posterverse/posterverse.js",
"embed": {
"iframe": "<iframe src=\"./posterverse/posterverse/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=\"./posterverse/posterverse.js\" integrity=\"sha384-xwStH6d1rIR+LOJ9iBnJXyNFIMTzSQ51YA2+UhqJgloN4EeH6vYubtHY3JM9j7p0\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<posterverse-app profile-config='{\"profile\":\"posterverse\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></posterverse-app>"
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./posterverse/posterverse.js\" integrity=\"sha384-brdiKg/0LXeaLF4WmTdeiia1QKk9Qy2qn6MHrKnPM2HXAKMPxTfY98MuxGQWIwIS\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<posterverse-app profile-config='{\"profile\":\"posterverse\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></posterverse-app>"
},
"instances": [
{

File diff suppressed because one or more lines are too long

View file

@ -67,7 +67,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <posterverse-app> custom element. -->
<script src="../../posterverse.js" integrity="sha384-xwStH6d1rIR+LOJ9iBnJXyNFIMTzSQ51YA2+UhqJgloN4EeH6vYubtHY3JM9j7p0" crossorigin="anonymous"></script>
<script src="../../posterverse.js" integrity="sha384-brdiKg/0LXeaLF4WmTdeiia1QKk9Qy2qn6MHrKnPM2HXAKMPxTfY98MuxGQWIwIS" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -67,7 +67,7 @@
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
<!-- Bundle IIFE — registers the <posterverse-app> custom element. -->
<script src="../posterverse.js" integrity="sha384-xwStH6d1rIR+LOJ9iBnJXyNFIMTzSQ51YA2+UhqJgloN4EeH6vYubtHY3JM9j7p0" crossorigin="anonymous"></script>
<script src="../posterverse.js" integrity="sha384-brdiKg/0LXeaLF4WmTdeiia1QKk9Qy2qn6MHrKnPM2HXAKMPxTfY98MuxGQWIwIS" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order: