Merge main into bundler-2/work
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions

# Conflicts:
#	public/doxa-maps/cities-internet/cities-internet.js
#	public/doxa-maps/cities-internet/connectivity-list/index.html
#	public/doxa-maps/cities-internet/connectivity-map/index.html
#	public/doxa-maps/cities-internet/data-tables/index.html
#	public/doxa-maps/doxa-maps-spa/manifest.json
#	public/doxa-maps/gospel-resources/charts/index.html
#	public/doxa-maps/gospel-resources/data-tables/index.html
#	public/doxa-maps/gospel-resources/gospel-dashboard/index.html
#	public/doxa-maps/gospel-resources/gospel-resources.js
#	public/doxa-maps/gospel-resources/resources-list/index.html
#	public/doxa-maps/gospel-resources/resources-map/index.html
#	public/doxa-maps/index.html
#	public/doxa-maps/manifest.json
This commit is contained in:
doxa-maps-88655c70 2026-09-25 14:42:21 +00:00
commit 519d5c80ef
16 changed files with 164 additions and 80 deletions

View file

@ -161,7 +161,12 @@ export async function ensureEngineScript(provider) {
* - Skips if the CSS link is already present and loaded (idempotent).
* - Always resolves — never hangs (2 s timeout fallback).
*/
async function ensureEngineCSS(element, cssUrl) {
// EXPORTED (2026-09-25) for the profiles that build their map RAW (new gl.Map) instead of through
// useMapInstance: cities-internet/connectivity-map and gospel-resources/resources-map. They never
// injected the engine stylesheet into their shadow root, so Mapbox's CSS canary reported "missing
// CSS declarations" (verify-map-paint) and controls/markers had no stylesheet to position them.
// Borrow this, with engineStylesheetUrl(provider); do not copy it.
export async function ensureEngineCSS(element, cssUrl) {
// An unmounted pane hands us null (see initializeMap's liveness checks); nothing to style.
if (!element) return
const root = element.getRootNode()

View file

@ -49,7 +49,7 @@ import FullscreenButton from '@map/components/map-controls/FullscreenButton.vue'
import ShareButton from '@map/components/map-controls/ShareButton.vue'
import { resolveAssetsBase } from '@map/utils/embedBase.js'
import { resolveMapProvider } from '@map/composables/useMapProvider.js'
import { ensureEngineScript, engineGlobal } from '@map/composables/useMapInstance.js'
import { ensureEngineScript, engineGlobal, ensureEngineCSS, engineStylesheetUrl } from '@map/composables/useMapInstance.js'
import { resolveNamedStyle } from '@map/styles/registry.js'
// People-group dots open the SAME detail panel as Prayer Progress (doxa-simple-map): the
// shared store selection, the shared GO-pin highlight, and the shared legend wrappers
@ -259,6 +259,11 @@ onMounted(async () => {
// into a container that no longer exists throws; this is the raw-map twin of the
// useMapInstance guard (0c1a91cd), which this profile does not go through.
if (unmounted || !mapEl.value) return
// The engine's stylesheet must be INSIDE this shadow root; a document-level <link> never reaches
// it. Without it Mapbox's CSS canary fires and controls/markers lose their positioning rules.
const css = engineStylesheetUrl(ciProvider)
if (css) await ensureEngineCSS(mapEl.value, css)
if (unmounted || !mapEl.value) return
const map = new gl.Map({
container: mapEl.value,
// Paired through the registry so both engines show the same intent: 'ink' is the

View file

@ -87,7 +87,7 @@ import FullscreenButton from '@map/components/map-controls/FullscreenButton.vue'
import ShareButton from '@map/components/map-controls/ShareButton.vue'
import { resolveAssetsBase } from '@map/utils/embedBase.js'
import { resolveMapProvider } from '@map/composables/useMapProvider.js'
import { ensureEngineScript, engineGlobal } from '@map/composables/useMapInstance.js'
import { ensureEngineScript, engineGlobal, engineStylesheetUrl } from '@map/composables/useMapInstance.js'
import { resolveNamedStyle } from '@map/styles/registry.js'
const profileConfig = inject('profileConfig', ref(null))
@ -937,6 +937,29 @@ function pinFC() {
return { type: 'FeatureCollection', features: feats }
}
/**
* Frame the DATA, not a guessed zoom. Runs once, on load, before the reader has navigated:
* every Doxa group is on screen at the start, which is the one moment the whole roster is
* the subject. Padding keeps the legend card from covering the westernmost pins.
*/
function fitToPins(map) {
const rows = pinRows.value
if (!map || !rows.length) return
let w = 180, e = -180, s = 90, n = -90
for (const r of rows) {
const lat = r[1], lng = r[2]
if (!Number.isFinite(lat) || !Number.isFinite(lng)) continue
if (lng < w) w = lng
if (lng > e) e = lng
if (lat < s) s = lat
if (lat > n) n = lat
}
if (w > e || s > n) return
try {
map.fitBounds([[w, s], [e, n]], { padding: { top: 24, right: 24, bottom: 24, left: 24 }, duration: 0, maxZoom: 4 })
} catch (_) { /* a bad extent must never stop the map drawing */ }
}
function paintPins(map) {
if (!pinRows.value.length) return
if (map.getSource('gr-pin-src')) { map.getSource('gr-pin-src').setData(pinFC()); return }
@ -1013,8 +1036,47 @@ function openPin(i) {
selectedGroup.value = groupAt(i)
}
/**
* ═══ THE ENGINE'S OWN CSS HAS TO REACH THIS SHADOW ROOT ═════════════════════════════════
*
* Bundles that go through useMapInstance get this for free — its header says so: "injects
* Mapbox GL CSS into the root". This profile calls `new gl.Map` directly, for the reasons
* above, and in taking that path it silently opted out of the CSS injection too.
*
* MEASURED, against a leaf that does use the composable. Mapbox inserts a hidden
* div.mapboxgl-canary and checks its computed style; mapbox-gl.css is the only thing that
* paints it salmon. research-dashboard: rgb(250,128,114), no warning. This leaf:
* rgba(0,0,0,0) and "missing CSS declarations" in the console. The stylesheet was in the
* leaf's DOCUMENT all along, which is why tiles painted and nothing looked obviously wrong —
* but document CSS does not cross a shadow boundary, so the controls, the geocoder and any
* markers were positioned by no stylesheet at all.
*
* Done here rather than in library/: engineStylesheetUrl is already exported, so this needs
* no shared change, and the engine choice stays the registry's rather than a second copy of
* the ENGINES table. Idempotent — a second mount finds the link already there.
*/
async function ensureEngineCssInRoot(el) {
const href = engineStylesheetUrl(grProvider)
if (!el || !href) return
const root = el.getRootNode()
if (!(root instanceof ShadowRoot)) return // light DOM: the document's own link applies
if (root.querySelector(`link[href="${href}"]`)) return
const link = document.createElement('link')
link.rel = 'stylesheet'
link.href = href
const ready = new Promise((resolve) => {
link.addEventListener('load', resolve, { once: true })
link.addEventListener('error', resolve, { once: true })
/* Never hang a map on a stylesheet: paint without it rather than not at all. */
setTimeout(resolve, 2000)
})
root.appendChild(link)
await ready
}
onMounted(async () => {
try { await ensureEngineScript(grProvider) } catch (_) { /* fall through to the notice below */ }
try { await ensureEngineCssInRoot(mapEl.value) } catch (_) { /* the map still paints */ }
const gl = engineGlobal(grProvider) || window.mapboxgl
if (!gl || !mapEl.value) { err.value = 'map engine not loaded'; return }
try {
@ -1026,6 +1088,13 @@ onMounted(async () => {
style: resolveNamedStyle(isDark.value ? 'ink' : 'paper', grProvider).style
|| (isDark.value ? 'mapbox://styles/mapbox/dark-v11' : 'mapbox://styles/mapbox/light-v11'),
accessToken: mapboxToken.value,
/* A starting zoom is a guess about the canvas. It was 1.3, which framed the world
while this leaf was running WITHOUT the engine's stylesheet; once mapbox-gl.css
reached the shadow root the canvas sized correctly and the same 1.3 cut the visible
band to -23.8..52.0 — Cape Town, Iceland and the Faroes fell off the map, and 21 of
Doxa's groups with them. Kept as the pre-load frame only; fitToPins below replaces
it with the DATA's own extent as soon as the pins are known, so the opening view
cannot depend on a canvas size again. */
center: [42, 18], zoom: 1.3, projection: 'mercator', attributionControl: false,
})
mapRef.value = markRaw(map)
@ -1036,7 +1105,7 @@ onMounted(async () => {
// credit + link back is required, and gbOpen is mixed-licence with several
// countries carrying a real attribution requirement (India CC BY 2.5 IN, etc).
addMapAttribution(map, { boundaries: true })
map.once('load', () => { paint(map, adm0); paintPins(map); openFromUrl() })
map.once('load', () => { paint(map, adm0); paintPins(map); fitToPins(map); openFromUrl() })
} catch (e) { err.value = String(e.message || e) }
})
onBeforeUnmount(() => {
@ -1077,7 +1146,12 @@ function filterComposedTables(q) {
useShadowStyles(
'.gm{position:absolute;inset:0;overflow:hidden}' +
'.gm-map{position:absolute;inset:0}' +
// inset:0 alone lost to mapbox-gl.css once that stylesheet finally reached this shadow
// root: .mapboxgl-map carries position:relative, which cancelled the absolute box and
// collapsed the canvas to 300px on a 900px viewport — a blank map that still reported
// 2,107 pins to queryRenderedFeatures, because that API does not care whether anything
// is visible. The size is stated outright now so no engine stylesheet can take it.
'.gm-map{position:absolute;inset:0;width:100%;height:100%}' +
// LEGEND: a BOUNDED, left-anchored panel — NOT a full-width strip.
// It used to be `left:8px;right:8px`, which is a strip spanning the whole map
// (MEASURED 1264px of a 1280px map, 98.75%). That collided with the floating

File diff suppressed because one or more lines are too long

View file

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

View file

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

View file

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

View file

@ -105,7 +105,7 @@
"bundle": "cities-internet",
"scriptUrl": "./cities-internet/cities-internet.js",
"output": "doxa-maps/cities-internet/cities-internet.js",
"integrity": "sha384-JlqDutZxpGdeSQgvfUzVoHH3oIPVtmSRBb/ImxkNhs76wVIA6sdAUaDnTWdxMvHa",
"integrity": "sha384-to5VPU6sRsiSsrGWUOe58CahHZCMdQfp1WLuOG325uIQ+7UfpJMx1VH17xAz/GaK",
"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-JlqDutZxpGdeSQgvfUzVoHH3oIPVtmSRBb/ImxkNhs76wVIA6sdAUaDnTWdxMvHa\" 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-to5VPU6sRsiSsrGWUOe58CahHZCMdQfp1WLuOG325uIQ+7UfpJMx1VH17xAz/GaK\" 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-JlqDutZxpGdeSQgvfUzVoHH3oIPVtmSRBb/ImxkNhs76wVIA6sdAUaDnTWdxMvHa\" 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-to5VPU6sRsiSsrGWUOe58CahHZCMdQfp1WLuOG325uIQ+7UfpJMx1VH17xAz/GaK\" 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-JlqDutZxpGdeSQgvfUzVoHH3oIPVtmSRBb/ImxkNhs76wVIA6sdAUaDnTWdxMvHa\" 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-to5VPU6sRsiSsrGWUOe58CahHZCMdQfp1WLuOG325uIQ+7UfpJMx1VH17xAz/GaK\" 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>"
}
}
]
@ -579,7 +579,7 @@
"bundle": "gospel-resources",
"scriptUrl": "./gospel-resources/gospel-resources.js",
"output": "doxa-maps/gospel-resources/gospel-resources.js",
"integrity": "sha384-u7GT8vtGsL1zWGSAytMKpZuLbZm8djzhVIt0kxzxfWBvs1AbxRS8L/11tBVfDlVq",
"integrity": "sha384-+NFlplj7hABypva56Rnn2nyLeAQxVd5rkx/EYxG+nogpN/TckKojaiV6iB+DHpRa",
"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-u7GT8vtGsL1zWGSAytMKpZuLbZm8djzhVIt0kxzxfWBvs1AbxRS8L/11tBVfDlVq\" 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-+NFlplj7hABypva56Rnn2nyLeAQxVd5rkx/EYxG+nogpN/TckKojaiV6iB+DHpRa\" 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-u7GT8vtGsL1zWGSAytMKpZuLbZm8djzhVIt0kxzxfWBvs1AbxRS8L/11tBVfDlVq\" 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-+NFlplj7hABypva56Rnn2nyLeAQxVd5rkx/EYxG+nogpN/TckKojaiV6iB+DHpRa\" 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-u7GT8vtGsL1zWGSAytMKpZuLbZm8djzhVIt0kxzxfWBvs1AbxRS8L/11tBVfDlVq\" 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-+NFlplj7hABypva56Rnn2nyLeAQxVd5rkx/EYxG+nogpN/TckKojaiV6iB+DHpRa\" 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-u7GT8vtGsL1zWGSAytMKpZuLbZm8djzhVIt0kxzxfWBvs1AbxRS8L/11tBVfDlVq\" 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-+NFlplj7hABypva56Rnn2nyLeAQxVd5rkx/EYxG+nogpN/TckKojaiV6iB+DHpRa\" 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-u7GT8vtGsL1zWGSAytMKpZuLbZm8djzhVIt0kxzxfWBvs1AbxRS8L/11tBVfDlVq\" 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-+NFlplj7hABypva56Rnn2nyLeAQxVd5rkx/EYxG+nogpN/TckKojaiV6iB+DHpRa\" 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>"
}
}
]

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-u7GT8vtGsL1zWGSAytMKpZuLbZm8djzhVIt0kxzxfWBvs1AbxRS8L/11tBVfDlVq" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-+NFlplj7hABypva56Rnn2nyLeAQxVd5rkx/EYxG+nogpN/TckKojaiV6iB+DHpRa" 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-u7GT8vtGsL1zWGSAytMKpZuLbZm8djzhVIt0kxzxfWBvs1AbxRS8L/11tBVfDlVq" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-+NFlplj7hABypva56Rnn2nyLeAQxVd5rkx/EYxG+nogpN/TckKojaiV6iB+DHpRa" 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-u7GT8vtGsL1zWGSAytMKpZuLbZm8djzhVIt0kxzxfWBvs1AbxRS8L/11tBVfDlVq" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-+NFlplj7hABypva56Rnn2nyLeAQxVd5rkx/EYxG+nogpN/TckKojaiV6iB+DHpRa" 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-u7GT8vtGsL1zWGSAytMKpZuLbZm8djzhVIt0kxzxfWBvs1AbxRS8L/11tBVfDlVq" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-+NFlplj7hABypva56Rnn2nyLeAQxVd5rkx/EYxG+nogpN/TckKojaiV6iB+DHpRa" 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-u7GT8vtGsL1zWGSAytMKpZuLbZm8djzhVIt0kxzxfWBvs1AbxRS8L/11tBVfDlVq" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-+NFlplj7hABypva56Rnn2nyLeAQxVd5rkx/EYxG+nogpN/TckKojaiV6iB+DHpRa" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

File diff suppressed because one or more lines are too long

View file

@ -105,7 +105,7 @@
"bundle": "cities-internet",
"scriptUrl": "./cities-internet/cities-internet.js",
"output": "doxa-maps/cities-internet/cities-internet.js",
"integrity": "sha384-JlqDutZxpGdeSQgvfUzVoHH3oIPVtmSRBb/ImxkNhs76wVIA6sdAUaDnTWdxMvHa",
"integrity": "sha384-to5VPU6sRsiSsrGWUOe58CahHZCMdQfp1WLuOG325uIQ+7UfpJMx1VH17xAz/GaK",
"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-JlqDutZxpGdeSQgvfUzVoHH3oIPVtmSRBb/ImxkNhs76wVIA6sdAUaDnTWdxMvHa\" 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-to5VPU6sRsiSsrGWUOe58CahHZCMdQfp1WLuOG325uIQ+7UfpJMx1VH17xAz/GaK\" 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-JlqDutZxpGdeSQgvfUzVoHH3oIPVtmSRBb/ImxkNhs76wVIA6sdAUaDnTWdxMvHa\" 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-to5VPU6sRsiSsrGWUOe58CahHZCMdQfp1WLuOG325uIQ+7UfpJMx1VH17xAz/GaK\" 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-JlqDutZxpGdeSQgvfUzVoHH3oIPVtmSRBb/ImxkNhs76wVIA6sdAUaDnTWdxMvHa\" 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-to5VPU6sRsiSsrGWUOe58CahHZCMdQfp1WLuOG325uIQ+7UfpJMx1VH17xAz/GaK\" 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>"
}
}
]
@ -579,7 +579,7 @@
"bundle": "gospel-resources",
"scriptUrl": "./gospel-resources/gospel-resources.js",
"output": "doxa-maps/gospel-resources/gospel-resources.js",
"integrity": "sha384-u7GT8vtGsL1zWGSAytMKpZuLbZm8djzhVIt0kxzxfWBvs1AbxRS8L/11tBVfDlVq",
"integrity": "sha384-+NFlplj7hABypva56Rnn2nyLeAQxVd5rkx/EYxG+nogpN/TckKojaiV6iB+DHpRa",
"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-u7GT8vtGsL1zWGSAytMKpZuLbZm8djzhVIt0kxzxfWBvs1AbxRS8L/11tBVfDlVq\" 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-+NFlplj7hABypva56Rnn2nyLeAQxVd5rkx/EYxG+nogpN/TckKojaiV6iB+DHpRa\" 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-u7GT8vtGsL1zWGSAytMKpZuLbZm8djzhVIt0kxzxfWBvs1AbxRS8L/11tBVfDlVq\" 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-+NFlplj7hABypva56Rnn2nyLeAQxVd5rkx/EYxG+nogpN/TckKojaiV6iB+DHpRa\" 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-u7GT8vtGsL1zWGSAytMKpZuLbZm8djzhVIt0kxzxfWBvs1AbxRS8L/11tBVfDlVq\" 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-+NFlplj7hABypva56Rnn2nyLeAQxVd5rkx/EYxG+nogpN/TckKojaiV6iB+DHpRa\" 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-u7GT8vtGsL1zWGSAytMKpZuLbZm8djzhVIt0kxzxfWBvs1AbxRS8L/11tBVfDlVq\" 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-+NFlplj7hABypva56Rnn2nyLeAQxVd5rkx/EYxG+nogpN/TckKojaiV6iB+DHpRa\" 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-u7GT8vtGsL1zWGSAytMKpZuLbZm8djzhVIt0kxzxfWBvs1AbxRS8L/11tBVfDlVq\" 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-+NFlplj7hABypva56Rnn2nyLeAQxVd5rkx/EYxG+nogpN/TckKojaiV6iB+DHpRa\" 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>"
}
}
]