Merge origin/development into studio/deep-research (MapInfo as landed; upg100's files take development's side)
This commit is contained in:
commit
a1d9a1e318
20 changed files with 117 additions and 54 deletions
|
|
@ -30,10 +30,13 @@
|
|||
* localStorage, read through a guard: private browsing and sandboxed frames throw on access, and a
|
||||
* hint must never be the thing that breaks a page. The button itself always stays.
|
||||
*
|
||||
* ★ TEXT. The component's own words are in the 'mapInfo' catalogue area, in all eleven locales.
|
||||
* The per-map words (lead, takeaway, note) belong to the map's owner and arrive as KEYS in the
|
||||
* owner's own area, or as ready strings. Everything is resolved at render, never stored, so a live
|
||||
* language switch re-translates it. A host without vue-i18n has only the page-global locale, which
|
||||
* ★ TEXT. The component's own words are in the 'mapInfo' catalogue area, in all eleven locales, and
|
||||
* so are the per-map words, as mapInfo.tab.<tabId>.lead / .takeaway / .note, passed in as KEYS (ready
|
||||
* strings also work). NOT in each map's own area: a bundle ships only the catalogue areas its source
|
||||
* names (internal/i18n-areas.mjs), and the gallery that mounts one of these per map names none of the
|
||||
* maps' areas, so a key there would render blank; naming them would pull every map's whole catalogue
|
||||
* into the gallery. Everything is resolved at render, never stored, so a live language switch
|
||||
* re-translates it. A host without vue-i18n has only the page-global locale, which
|
||||
* nothing observes; pass `locale` from a host that tracks it, and the popup also re-reads the
|
||||
* global every time it opens.
|
||||
*
|
||||
|
|
@ -133,6 +136,12 @@ async function hide() {
|
|||
}
|
||||
function onKey(e) { if (e.key === 'Escape') { e.stopPropagation(); hide() } }
|
||||
function toggle(i) { expanded[i] = !expanded[i] }
|
||||
// ★ A MISSING EXAMPLE IMAGE DISAPPEARS, QUIETLY. The examples are pre-generated files that ship in the
|
||||
// tree; if one is absent (a shoot not yet landed, a tree copied without it) the reader must see neither
|
||||
// a broken-image icon nor an empty frame. An artefact whose lead image fails is dropped whole, title
|
||||
// and all (failed[i]); a single page or card that fails later just hides itself. The text above the
|
||||
// examples still reads on its own.
|
||||
function dropImg(e) { const el = e && e.target; if (el) el.style.display = 'none' }
|
||||
|
||||
// ── examples ─────────────────────────────────────────────────────────────────────────────────────
|
||||
function url(src) {
|
||||
|
|
@ -210,7 +219,6 @@ useShadowStyles(`
|
|||
.mi-table th{ background:#f5f6f9; font-weight:600; }
|
||||
.mi-more{ margin:6px 0 0; font-size:13px; color:#556; }
|
||||
.mi-note{ margin:18px 0 0; padding:10px 12px; border-radius:8px; background:#fff7e6; color:#5a4300; font-size:14px; }
|
||||
.mi-missing{ padding:24px; border-radius:8px; background:#f4f5f8; color:#556; text-align:center; font-size:14px; }
|
||||
.mi-foot{ padding:12px 20px; border-top:1px solid #e6e8ee; font-size:14px; }
|
||||
.mi-foot label{ display:inline-flex; align-items:center; gap:8px; min-height:44px; cursor:pointer; }
|
||||
.mi-foot input{ width:20px; height:20px; }
|
||||
|
|
@ -262,22 +270,18 @@ useShadowStyles(`
|
|||
<p v-if="leadKey || lead" class="mi-lead">{{ text(leadKey, lead) }}</p>
|
||||
<p v-if="takeawayKey || takeaway" class="mi-takeaway"><b>{{ t('mapInfo.takeaway') }}</b> {{ text(takeawayKey, takeaway) }}</p>
|
||||
|
||||
<section v-for="(ex, i) in examples" :key="i" class="mi-ex">
|
||||
<section v-for="(ex, i) in examples" v-show="!failed[i]" :key="i" class="mi-ex">
|
||||
<h3>{{ titleOf(ex) }}</h3>
|
||||
|
||||
<template v-if="ex.kind === 'image'">
|
||||
<div v-if="failed[i]" class="mi-missing">{{ t('mapInfo.unavailable') }}</div>
|
||||
<template v-else>
|
||||
<img class="mi-img mi-poster" :src="url(ex.src)" :alt="ex.alt || titleOf(ex)" decoding="async" @error="failed[i] = true" />
|
||||
<div v-if="ex.full" class="mi-center">
|
||||
<a class="mi-full" :href="url(ex.full)" target="_blank" rel="noopener">{{ t('mapInfo.openFull') }}</a>
|
||||
</div>
|
||||
</template>
|
||||
<img class="mi-img mi-poster" :src="url(ex.src)" :alt="ex.alt || titleOf(ex)" decoding="async" @error="failed[i] = true" />
|
||||
<div v-if="ex.full" class="mi-center">
|
||||
<a class="mi-full" :href="url(ex.full)" target="_blank" rel="noopener">{{ t('mapInfo.openFull') }}</a>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template v-else-if="ex.kind === 'pages' && (ex.pages || []).length">
|
||||
<div v-if="failed[i]" class="mi-missing">{{ t('mapInfo.unavailable') }}</div>
|
||||
<template v-else-if="!expanded[i]">
|
||||
<template v-if="!expanded[i]">
|
||||
<button type="button" class="mi-hit mi-page" :class="{ 'mi-stack': ex.pages.length > 1 }"
|
||||
:aria-label="t('mapInfo.expandPages', { n: num(ex.pages.length) })" aria-expanded="false" @click="toggle(i)">
|
||||
<img class="mi-img" :src="url(ex.pages[0])" :alt="titleOf(ex)" decoding="async" @error="failed[i] = true" />
|
||||
|
|
@ -291,7 +295,7 @@ useShadowStyles(`
|
|||
<div class="mi-pages">
|
||||
<button v-for="(p, k) in ex.pages" :key="k" type="button" class="mi-hit mi-open mi-page"
|
||||
:aria-label="t('mapInfo.collapsePages')" @click="toggle(i)">
|
||||
<img class="mi-img" :src="url(p)" :alt="titleOf(ex) + ' ' + num(k + 1)" loading="lazy" decoding="async" />
|
||||
<img class="mi-img" :src="url(p)" :alt="titleOf(ex) + ' ' + num(k + 1)" loading="lazy" decoding="async" @error="dropImg" />
|
||||
</button>
|
||||
</div>
|
||||
<div class="mi-center"><button type="button" class="mi-toggle" aria-expanded="true" @click="toggle(i)">{{ t('mapInfo.collapsePages') }}</button></div>
|
||||
|
|
@ -302,7 +306,7 @@ useShadowStyles(`
|
|||
<template v-if="!expanded[i]">
|
||||
<button type="button" class="mi-hit mi-deck" :aria-label="t('mapInfo.expandDeck', { n: num(ex.cards.length) })"
|
||||
aria-expanded="false" @click="toggle(i)">
|
||||
<img v-for="(c, k) in deckTop(ex)" :key="k" class="mi-card" :src="url(c)" alt="" decoding="async"
|
||||
<img v-for="(c, k) in deckTop(ex)" :key="k" class="mi-card" :src="url(c)" alt="" decoding="async" @error="k === 0 ? (failed[i] = true) : dropImg($event)"
|
||||
:style="{ insetInlineStart: (k * 36) + 'px', transform: 'rotate(' + ((k - 2) * 4) + 'deg)', zIndex: 10 - k }" />
|
||||
</button>
|
||||
<div class="mi-center">
|
||||
|
|
@ -312,7 +316,7 @@ useShadowStyles(`
|
|||
<template v-else>
|
||||
<div class="mi-center"><button type="button" class="mi-toggle" aria-expanded="true" @click="toggle(i)">{{ t('mapInfo.collapseDeck') }}</button></div>
|
||||
<div class="mi-grid">
|
||||
<img v-for="(c, k) in ex.cards" :key="k" class="mi-img" :src="url(c)" :alt="titleOf(ex) + ' ' + num(k + 1)" loading="lazy" decoding="async" />
|
||||
<img v-for="(c, k) in ex.cards" :key="k" class="mi-img" :src="url(c)" :alt="titleOf(ex) + ' ' + num(k + 1)" loading="lazy" decoding="async" @error="dropImg" />
|
||||
</div>
|
||||
<div class="mi-center"><button type="button" class="mi-toggle" aria-expanded="true" @click="toggle(i)">{{ t('mapInfo.collapseDeck') }}</button></div>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -15,6 +15,11 @@
|
|||
"collapseDeck": "تجميع البطاقات",
|
||||
"moreRows": "صفوف إضافية في جدول البيانات الكامل: {n}",
|
||||
"openFull": "فتح بالحجم الكامل",
|
||||
"unavailable": "تعذّر تحميل هذا المثال.",
|
||||
"pointerOff": "لا تُشِر إلى هذا الزر مرة أخرى"
|
||||
"pointerOff": "لا تُشِر إلى هذا الزر مرة أخرى",
|
||||
"tab": {
|
||||
"upg-100": {
|
||||
"lead": "قائمة UPG-100 على خريطة واحدة: الشعوب غير المُبشَّرة، مجمّعة في مناطق يمكنك أن تتبنّاها بالصلاة.",
|
||||
"takeaway": "لكل منطقة: ملصق للحائط، وحزمة صلاة للتوزيع، ومجموعة من بطاقات الصلاة. المثال أدناه هو المنطقة التي تضم أكبر عدد من الناس في شعوب لا يعمل أحد بعد على غرس كنائس بينها."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,11 @@
|
|||
"collapseDeck": "Karten stapeln",
|
||||
"moreRows": "Weitere Zeilen in der vollständigen Tabelle: {n}",
|
||||
"openFull": "In voller Größe öffnen",
|
||||
"unavailable": "Dieses Beispiel konnte nicht geladen werden.",
|
||||
"pointerOff": "Nicht mehr auf diese Schaltfläche hinweisen"
|
||||
"pointerOff": "Nicht mehr auf diese Schaltfläche hinweisen",
|
||||
"tab": {
|
||||
"upg-100": {
|
||||
"lead": "Die UPG-100-Liste auf einer Karte: unerreichte Volksgruppen, zusammengefasst in Zonen, die Sie im Gebet übernehmen können.",
|
||||
"takeaway": "für jede Zone ein Wandposter, ein Gebetsheft zum Weitergeben und ein Satz Gebetskarten. Das Beispiel unten ist die Zone mit den meisten Menschen in Volksgruppen, unter denen noch niemand Gemeinden gründet."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,11 @@
|
|||
"collapseDeck": "Stack the cards",
|
||||
"moreRows": "More rows in the full spreadsheet: {n}",
|
||||
"openFull": "Open full size",
|
||||
"unavailable": "This example could not be loaded.",
|
||||
"pointerOff": "Don't point at this button again"
|
||||
"pointerOff": "Don't point at this button again",
|
||||
"tab": {
|
||||
"upg-100": {
|
||||
"lead": "The UPG-100 list on one map: unreached people groups, gathered into zones you can adopt in prayer.",
|
||||
"takeaway": "for any zone, a wall poster, a prayer packet to hand out and a deck of prayer cards. The example below is the zone with the most people in groups where no one is planting churches yet."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,11 @@
|
|||
"collapseDeck": "Apilar las tarjetas",
|
||||
"moreRows": "Más filas en la hoja de cálculo completa: {n}",
|
||||
"openFull": "Abrir a tamaño completo",
|
||||
"unavailable": "No se pudo cargar este ejemplo.",
|
||||
"pointerOff": "No volver a señalar este botón"
|
||||
"pointerOff": "No volver a señalar este botón",
|
||||
"tab": {
|
||||
"upg-100": {
|
||||
"lead": "La lista UPG-100 en un solo mapa: pueblos no alcanzados, agrupados en zonas que usted puede adoptar en oración.",
|
||||
"takeaway": "para cada zona, un póster para la pared, un paquete de oración para repartir y un mazo de tarjetas de oración. El ejemplo de abajo es la zona con más personas en pueblos donde todavía nadie está plantando iglesias."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,11 @@
|
|||
"collapseDeck": "Empiler les cartes",
|
||||
"moreRows": "Lignes supplémentaires dans le tableur complet : {n}",
|
||||
"openFull": "Ouvrir en taille réelle",
|
||||
"unavailable": "Impossible de charger cet exemple.",
|
||||
"pointerOff": "Ne plus signaler ce bouton"
|
||||
"pointerOff": "Ne plus signaler ce bouton",
|
||||
"tab": {
|
||||
"upg-100": {
|
||||
"lead": "La liste UPG-100 sur une seule carte : les peuples non atteints, regroupés en zones que vous pouvez adopter dans la prière.",
|
||||
"takeaway": "pour chaque zone, une affiche murale, un livret de prière à distribuer et un jeu de cartes de prière. L'exemple ci-dessous est la zone qui compte le plus de personnes dans des peuples où personne n'implante encore d'Églises."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,11 @@
|
|||
"collapseDeck": "कार्ड एक साथ रखें",
|
||||
"moreRows": "पूरी स्प्रेडशीट में और पंक्तियाँ: {n}",
|
||||
"openFull": "पूरे आकार में खोलें",
|
||||
"unavailable": "यह उदाहरण लोड नहीं हो सका।",
|
||||
"pointerOff": "इस बटन की ओर फिर से इशारा न करें"
|
||||
"pointerOff": "इस बटन की ओर फिर से इशारा न करें",
|
||||
"tab": {
|
||||
"upg-100": {
|
||||
"lead": "UPG-100 सूची एक ही नक्शे पर: अपहुँचे जन-समूह, क्षेत्रों में बाँटे गए, जिन्हें आप प्रार्थना में अपना सकते हैं।",
|
||||
"takeaway": "हर क्षेत्र के लिए दीवार का एक पोस्टर, बाँटने के लिए एक प्रार्थना पुस्तिका और प्रार्थना कार्डों का एक सेट। नीचे का उदाहरण वह क्षेत्र है जहाँ ऐसे जन-समूहों में सबसे अधिक लोग हैं जिनके बीच अभी कोई कलीसिया स्थापित नहीं कर रहा है।"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,11 @@
|
|||
"collapseDeck": "Impila le carte",
|
||||
"moreRows": "Altre righe nel foglio di calcolo completo: {n}",
|
||||
"openFull": "Apri a grandezza intera",
|
||||
"unavailable": "Impossibile caricare questo esempio.",
|
||||
"pointerOff": "Non indicare più questo pulsante"
|
||||
"pointerOff": "Non indicare più questo pulsante",
|
||||
"tab": {
|
||||
"upg-100": {
|
||||
"lead": "La lista UPG-100 su un'unica mappa: popoli non raggiunti, raggruppati in zone che puoi adottare nella preghiera.",
|
||||
"takeaway": "per ogni zona, un poster da parete, un libretto di preghiera da distribuire e un mazzo di carte di preghiera. L'esempio qui sotto è la zona con più persone in popoli dove nessuno sta ancora fondando chiese."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,11 @@
|
|||
"collapseDeck": "Empilhar os cartões",
|
||||
"moreRows": "Mais linhas na planilha completa: {n}",
|
||||
"openFull": "Abrir em tamanho real",
|
||||
"unavailable": "Não foi possível carregar este exemplo.",
|
||||
"pointerOff": "Não apontar mais para este botão"
|
||||
"pointerOff": "Não apontar mais para este botão",
|
||||
"tab": {
|
||||
"upg-100": {
|
||||
"lead": "A lista UPG-100 em um só mapa: povos não alcançados, agrupados em zonas que você pode adotar em oração.",
|
||||
"takeaway": "para cada zona, um pôster de parede, um pacote de oração para distribuir e um baralho de cartões de oração. O exemplo abaixo é a zona com mais pessoas em povos onde ninguém ainda está plantando igrejas."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,11 @@
|
|||
"collapseDeck": "Strânge cartonașele",
|
||||
"moreRows": "Rânduri suplimentare în foaia de calcul completă: {n}",
|
||||
"openFull": "Deschide la dimensiune completă",
|
||||
"unavailable": "Acest exemplu nu a putut fi încărcat.",
|
||||
"pointerOff": "Nu mai indica acest buton"
|
||||
"pointerOff": "Nu mai indica acest buton",
|
||||
"tab": {
|
||||
"upg-100": {
|
||||
"lead": "Lista UPG-100 pe o singură hartă: popoare neatinse, grupate în zone pe care le poți adopta în rugăciune.",
|
||||
"takeaway": "pentru fiecare zonă, un poster de perete, un pachet de rugăciune de împărțit și un set de cartonașe de rugăciune. Exemplul de mai jos este zona cu cei mai mulți oameni din popoare în care nimeni nu plantează încă biserici."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,11 @@
|
|||
"collapseDeck": "Сложить карточки в стопку",
|
||||
"moreRows": "Ещё строк в полной таблице: {n}",
|
||||
"openFull": "Открыть в полном размере",
|
||||
"unavailable": "Не удалось загрузить этот пример.",
|
||||
"pointerOff": "Больше не указывать на эту кнопку"
|
||||
"pointerOff": "Больше не указывать на эту кнопку",
|
||||
"tab": {
|
||||
"upg-100": {
|
||||
"lead": "Список UPG-100 на одной карте: недостигнутые народы, объединённые в зоны, которые вы можете взять на молитвенное попечение.",
|
||||
"takeaway": "для каждой зоны — настенный плакат, молитвенный буклет для раздачи и набор молитвенных карточек. Ниже показана зона, где больше всего людей в народах, среди которых пока никто не основывает церкви."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,11 @@
|
|||
"collapseDeck": "把卡片叠起来",
|
||||
"moreRows": "完整电子表格中的更多行:{n}",
|
||||
"openFull": "以完整尺寸打开",
|
||||
"unavailable": "无法加载此示例。",
|
||||
"pointerOff": "不再指向这个按钮"
|
||||
"pointerOff": "不再指向这个按钮",
|
||||
"tab": {
|
||||
"upg-100": {
|
||||
"lead": "UPG-100 名单尽在一张地图上:未得之民按区域分组,你可以在祷告中认领一个区域。",
|
||||
"takeaway": "每个区域都有一张墙面海报、一本可分发的祷告手册和一套祷告卡。下面的示例是这样一个区域:在尚无人植堂的族群中,这里的人数最多。"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -289,7 +289,8 @@ const tabs = computed(() => profileConfig?.value?.tabs ?? DEFAULT_TABS)
|
|||
// profileConfig.tabs is the host's own words and is shown as given.
|
||||
const DEFAULT_LABELS = Object.fromEntries(DEFAULT_TABS.map((d) => [d.id, d.label]))
|
||||
const tabLabel = (tab) => ((!tab.label || tab.label === DEFAULT_LABELS[tab.id]) && te('tabs.' + tab.id)) ? t('tabs.' + tab.id) : tab.label
|
||||
// before giving an instance a 2nd tab: the tab bar needs role="tablist"/"tab" + :aria-selected (the underline already marks the active tab by shape, not only colour)
|
||||
// With 2+ tabs (the research page passes three) the bar is a tablist: a screen reader announces each
|
||||
// button as a tab and which one is selected. The underline marks the active tab by shape, not only colour.
|
||||
const showTabBar = computed(() => tabs.value.length > 1)
|
||||
|
||||
// ─── Tab state ────────────────────────────────────────────────────────────────
|
||||
|
|
@ -1406,12 +1407,15 @@ onBeforeUnmount(() => {
|
|||
>
|
||||
|
||||
<!-- In-map tab bar (only when 2+ tabs) -->
|
||||
<div v-if="showTabBar" class="dsm-tab-bar">
|
||||
<div v-if="showTabBar" class="dsm-tab-bar" role="tablist">
|
||||
<button
|
||||
v-for="tab in tabs"
|
||||
:key="tab.id"
|
||||
type="button"
|
||||
role="tab"
|
||||
class="dsm-tab"
|
||||
:class="{ active: activeTabId === tab.id }"
|
||||
:aria-selected="activeTabId === tab.id ? 'true' : 'false'"
|
||||
@click="switchTab(tab.id)"
|
||||
>
|
||||
{{ tabLabel(tab) }}
|
||||
|
|
|
|||
|
|
@ -462,7 +462,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-uVjVvk2lTU1akrc6T0SouQ9zOIX/35Hrltso16QO4xkaN1Nyy+6QuP8BhWG/74wE",
|
||||
"integrity": "sha384-9DC6IjuVnKHJrXixRzkEyt4XKBfhkhD4xT0aAcXzOJWSMSZFsoA4576Fn6+C0nMV",
|
||||
"elements": [
|
||||
"doxa-map",
|
||||
"doxa-simple-map"
|
||||
|
|
@ -482,8 +482,8 @@
|
|||
"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": "<!-- MapLibre engine (the default), fetched early -->\n<link rel=\"preload\" as=\"script\" href=\"https://cdn.jsdelivr.net/npm/maplibre-gl@5.24.0/dist/maplibre-gl.js\" integrity=\"sha384-5+cfbwT0iiub6VsQAdn6yz16nr6sDiQoHx6tm4O8OVYXHYOxcffFmCJBL0dgdvGp\" crossorigin=\"anonymous\">\n<link rel=\"preload\" as=\"style\" href=\"https://cdn.jsdelivr.net/npm/maplibre-gl@5.24.0/dist/maplibre-gl.css\" integrity=\"sha384-uTttxo/aOKbdE5RlD/SPzSDoDmNvGlUYPjONi2MN/b7c9HPSvW07OIuyP7uL6jxK\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-uVjVvk2lTU1akrc6T0SouQ9zOIX/35Hrltso16QO4xkaN1Nyy+6QuP8BhWG/74wE\" crossorigin=\"anonymous\"></script>\n<!-- MapLibre draws this map and needs no token. For Mapbox, paste this map's embed.scriptMapbox from manifest.json instead: it sets \"provider\":\"mapbox\" and preloads the Mapbox engine; fill \"tk\" with your token. -->\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-map>",
|
||||
"scriptMapbox": "<!-- Mapbox engine, fetched early -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<link rel=\"preload\" as=\"style\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.css\" integrity=\"sha384-rp1X/jJ9MpWPef9OimfXhOaOc4Gzs87yQvF+ajwY6X2H4PTeHNycNlLWiWvj7ehV\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-uVjVvk2lTU1akrc6T0SouQ9zOIX/35Hrltso16QO4xkaN1Nyy+6QuP8BhWG/74wE\" crossorigin=\"anonymous\"></script>\n<!-- Mapbox draws this map: fill \"tk\" with your Mapbox token. -->\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"provider\":\"mapbox\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-map>"
|
||||
"script": "<!-- MapLibre engine (the default), fetched early -->\n<link rel=\"preload\" as=\"script\" href=\"https://cdn.jsdelivr.net/npm/maplibre-gl@5.24.0/dist/maplibre-gl.js\" integrity=\"sha384-5+cfbwT0iiub6VsQAdn6yz16nr6sDiQoHx6tm4O8OVYXHYOxcffFmCJBL0dgdvGp\" crossorigin=\"anonymous\">\n<link rel=\"preload\" as=\"style\" href=\"https://cdn.jsdelivr.net/npm/maplibre-gl@5.24.0/dist/maplibre-gl.css\" integrity=\"sha384-uTttxo/aOKbdE5RlD/SPzSDoDmNvGlUYPjONi2MN/b7c9HPSvW07OIuyP7uL6jxK\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-9DC6IjuVnKHJrXixRzkEyt4XKBfhkhD4xT0aAcXzOJWSMSZFsoA4576Fn6+C0nMV\" crossorigin=\"anonymous\"></script>\n<!-- MapLibre draws this map and needs no token. For Mapbox, paste this map's embed.scriptMapbox from manifest.json instead: it sets \"provider\":\"mapbox\" and preloads the Mapbox engine; fill \"tk\" with your token. -->\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-map>",
|
||||
"scriptMapbox": "<!-- Mapbox engine, fetched early -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<link rel=\"preload\" as=\"style\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.css\" integrity=\"sha384-rp1X/jJ9MpWPef9OimfXhOaOc4Gzs87yQvF+ajwY6X2H4PTeHNycNlLWiWvj7ehV\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-9DC6IjuVnKHJrXixRzkEyt4XKBfhkhD4xT0aAcXzOJWSMSZFsoA4576Fn6+C0nMV\" crossorigin=\"anonymous\"></script>\n<!-- Mapbox draws this map: fill \"tk\" with your Mapbox token. -->\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"provider\":\"mapbox\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-map>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -70,7 +70,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-uVjVvk2lTU1akrc6T0SouQ9zOIX/35Hrltso16QO4xkaN1Nyy+6QuP8BhWG/74wE" crossorigin="anonymous"></script>
|
||||
<script src="../../doxa-simple-map.js" integrity="sha384-9DC6IjuVnKHJrXixRzkEyt4XKBfhkhD4xT0aAcXzOJWSMSZFsoA4576Fn6+C0nMV" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -70,7 +70,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-uVjVvk2lTU1akrc6T0SouQ9zOIX/35Hrltso16QO4xkaN1Nyy+6QuP8BhWG/74wE" crossorigin="anonymous"></script>
|
||||
<script src="../../doxa-simple-map.js" integrity="sha384-9DC6IjuVnKHJrXixRzkEyt4XKBfhkhD4xT0aAcXzOJWSMSZFsoA4576Fn6+C0nMV" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -70,7 +70,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-uVjVvk2lTU1akrc6T0SouQ9zOIX/35Hrltso16QO4xkaN1Nyy+6QuP8BhWG/74wE" crossorigin="anonymous"></script>
|
||||
<script src="../doxa-simple-map.js" integrity="sha384-9DC6IjuVnKHJrXixRzkEyt4XKBfhkhD4xT0aAcXzOJWSMSZFsoA4576Fn6+C0nMV" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -70,7 +70,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-uVjVvk2lTU1akrc6T0SouQ9zOIX/35Hrltso16QO4xkaN1Nyy+6QuP8BhWG/74wE" crossorigin="anonymous"></script>
|
||||
<script src="../../doxa-simple-map.js" integrity="sha384-9DC6IjuVnKHJrXixRzkEyt4XKBfhkhD4xT0aAcXzOJWSMSZFsoA4576Fn6+C0nMV" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -462,7 +462,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-uVjVvk2lTU1akrc6T0SouQ9zOIX/35Hrltso16QO4xkaN1Nyy+6QuP8BhWG/74wE",
|
||||
"integrity": "sha384-9DC6IjuVnKHJrXixRzkEyt4XKBfhkhD4xT0aAcXzOJWSMSZFsoA4576Fn6+C0nMV",
|
||||
"elements": [
|
||||
"doxa-map",
|
||||
"doxa-simple-map"
|
||||
|
|
@ -482,8 +482,8 @@
|
|||
"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": "<!-- MapLibre engine (the default), fetched early -->\n<link rel=\"preload\" as=\"script\" href=\"https://cdn.jsdelivr.net/npm/maplibre-gl@5.24.0/dist/maplibre-gl.js\" integrity=\"sha384-5+cfbwT0iiub6VsQAdn6yz16nr6sDiQoHx6tm4O8OVYXHYOxcffFmCJBL0dgdvGp\" crossorigin=\"anonymous\">\n<link rel=\"preload\" as=\"style\" href=\"https://cdn.jsdelivr.net/npm/maplibre-gl@5.24.0/dist/maplibre-gl.css\" integrity=\"sha384-uTttxo/aOKbdE5RlD/SPzSDoDmNvGlUYPjONi2MN/b7c9HPSvW07OIuyP7uL6jxK\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-uVjVvk2lTU1akrc6T0SouQ9zOIX/35Hrltso16QO4xkaN1Nyy+6QuP8BhWG/74wE\" crossorigin=\"anonymous\"></script>\n<!-- MapLibre draws this map and needs no token. For Mapbox, paste this map's embed.scriptMapbox from manifest.json instead: it sets \"provider\":\"mapbox\" and preloads the Mapbox engine; fill \"tk\" with your token. -->\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-map>",
|
||||
"scriptMapbox": "<!-- Mapbox engine, fetched early -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<link rel=\"preload\" as=\"style\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.css\" integrity=\"sha384-rp1X/jJ9MpWPef9OimfXhOaOc4Gzs87yQvF+ajwY6X2H4PTeHNycNlLWiWvj7ehV\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-uVjVvk2lTU1akrc6T0SouQ9zOIX/35Hrltso16QO4xkaN1Nyy+6QuP8BhWG/74wE\" crossorigin=\"anonymous\"></script>\n<!-- Mapbox draws this map: fill \"tk\" with your Mapbox token. -->\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"provider\":\"mapbox\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-map>"
|
||||
"script": "<!-- MapLibre engine (the default), fetched early -->\n<link rel=\"preload\" as=\"script\" href=\"https://cdn.jsdelivr.net/npm/maplibre-gl@5.24.0/dist/maplibre-gl.js\" integrity=\"sha384-5+cfbwT0iiub6VsQAdn6yz16nr6sDiQoHx6tm4O8OVYXHYOxcffFmCJBL0dgdvGp\" crossorigin=\"anonymous\">\n<link rel=\"preload\" as=\"style\" href=\"https://cdn.jsdelivr.net/npm/maplibre-gl@5.24.0/dist/maplibre-gl.css\" integrity=\"sha384-uTttxo/aOKbdE5RlD/SPzSDoDmNvGlUYPjONi2MN/b7c9HPSvW07OIuyP7uL6jxK\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-9DC6IjuVnKHJrXixRzkEyt4XKBfhkhD4xT0aAcXzOJWSMSZFsoA4576Fn6+C0nMV\" crossorigin=\"anonymous\"></script>\n<!-- MapLibre draws this map and needs no token. For Mapbox, paste this map's embed.scriptMapbox from manifest.json instead: it sets \"provider\":\"mapbox\" and preloads the Mapbox engine; fill \"tk\" with your token. -->\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-map>",
|
||||
"scriptMapbox": "<!-- Mapbox engine, fetched early -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<link rel=\"preload\" as=\"style\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.css\" integrity=\"sha384-rp1X/jJ9MpWPef9OimfXhOaOc4Gzs87yQvF+ajwY6X2H4PTeHNycNlLWiWvj7ehV\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-9DC6IjuVnKHJrXixRzkEyt4XKBfhkhD4xT0aAcXzOJWSMSZFsoA4576Fn6+C0nMV\" crossorigin=\"anonymous\"></script>\n<!-- Mapbox draws this map: fill \"tk\" with your Mapbox token. -->\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"provider\":\"mapbox\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-map>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue