A9 leaf hints: cover a composite whose engine is in a composed child bundle
dx-shepherd/rega: both production composites should get hints, but 37/27 showed only regions-mfe was reclassified. research-map-plus-grid was still bare: it composes doxa-research-map (74 engine refs) but its OWN bundle has 0, so keying on the own-bundle signal alone missed it. builtBundleLoadsEngine now also scans the bundles a leaf `composes`, resolving a composes entry that names its child by element TAG (stack-demo composes "research-dashboard-map", bundle "research-dashboard") through an element→bundle map built from the scanned bundles. So a composite is hinted when its own bundle OR any composed child's bundle loads an engine; big-picture (composes only non-maps) stays out. Result: both production composites hinted (regions-mfe via own bundle, research-map-plus-grid via its child), and stack-demo too (it composes a map). check:leaf-hints mirrors the same tag→bundle resolution from the manifest, so gate and generator can't drift: PASS 41 hinted / 23 bare. Poison-tested the composes-child case (stripped → fails) and the pure-non-map case (big-picture given a hint → fails). Also carries the comment reword from the token-ladder correction across every hinted leaf.
This commit is contained in:
parent
778e990ca4
commit
3ea2e3ce69
43 changed files with 112 additions and 59 deletions
|
|
@ -47,7 +47,7 @@ const ENGINE_RE = /useMapInstance|useMapProvider|mapbox-gl|maplibre-gl|window\.(
|
||||||
// the gate and the generator cannot drift.
|
// the gate and the generator cannot drift.
|
||||||
const manifest = JSON.parse(readFileSync(join(TREE, 'manifest.json'), 'utf8'))
|
const manifest = JSON.parse(readFileSync(join(TREE, 'manifest.json'), 'utf8'))
|
||||||
const engineBundles = new Map()
|
const engineBundles = new Map()
|
||||||
function bundleLoadsEngine(bundle) {
|
function oneBundleLoadsEngine(bundle) {
|
||||||
if (!engineBundles.has(bundle)) {
|
if (!engineBundles.has(bundle)) {
|
||||||
let hit = false
|
let hit = false
|
||||||
try { hit = ENGINE_RE.test(readFileSync(join(TREE, bundle, `${bundle}.js`), 'utf8')) } catch { hit = false }
|
try { hit = ENGINE_RE.test(readFileSync(join(TREE, bundle, `${bundle}.js`), 'utf8')) } catch { hit = false }
|
||||||
|
|
@ -55,13 +55,27 @@ function bundleLoadsEngine(bundle) {
|
||||||
}
|
}
|
||||||
return engineBundles.get(bundle)
|
return engineBundles.get(bundle)
|
||||||
}
|
}
|
||||||
|
// Element tag → owning bundle (mirrors generate-tree): a composes entry may name a child by element tag.
|
||||||
|
const elementToBundle = new Map()
|
||||||
|
for (const b of manifest.bundles || []) for (const e of (b.elements || [])) elementToBundle.set(e, b.bundle)
|
||||||
|
// This bundle OR any bundle it composes loads an engine (mirrors generate-tree's builtBundleLoadsEngine):
|
||||||
|
// catches a composite whose engine lives in a lazily-fetched child (research-map-plus-grid → doxa-research-map).
|
||||||
|
function bundleLoadsEngine(bundle, composes) {
|
||||||
|
if (oneBundleLoadsEngine(bundle)) return true
|
||||||
|
for (const c of composes || []) {
|
||||||
|
const tag = String(c).split('/').pop()
|
||||||
|
const child = elementToBundle.get(tag) || String(c).split('/')[0]
|
||||||
|
if (child && child !== bundle && oneBundleLoadsEngine(child)) return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
// Expected hint state per profile, and the leaf dirs it renders to (profile page + any instance pages).
|
// Expected hint state per profile, and the leaf dirs it renders to (profile page + any instance pages).
|
||||||
const expect = new Map() // "<bundle>/<profile>" -> boolean shouldHint
|
const expect = new Map() // "<bundle>/<profile>" -> boolean shouldHint
|
||||||
for (const b of manifest.bundles || []) {
|
for (const b of manifest.bundles || []) {
|
||||||
for (const p of b.profiles || []) {
|
for (const p of b.profiles || []) {
|
||||||
const shell = p.type === 'nested-mfe-spa'
|
const shell = p.type === 'nested-mfe-spa'
|
||||||
const composite = p.type === 'nested-elements-mfe'
|
const composite = p.type === 'nested-elements-mfe'
|
||||||
const shouldHint = (!!p.isMap || (composite && bundleLoadsEngine(b.bundle))) && !shell
|
const shouldHint = (!!p.isMap || (composite && bundleLoadsEngine(b.bundle, b.composes))) && !shell
|
||||||
expect.set(`${b.bundle}/${p.profile}`, shouldHint)
|
expect.set(`${b.bundle}/${p.profile}`, shouldHint)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -884,14 +884,35 @@ function resourceHints({ isMapLibre, config, apiBaseUrl }) {
|
||||||
return lines.length ? ` <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->\n${lines.join('\n')}\n` : ''
|
return lines.length ? ` <!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->\n${lines.join('\n')}\n` : ''
|
||||||
}
|
}
|
||||||
|
|
||||||
// Does a bundle's BUILT .js reference a map engine? The directly verifiable signal for A9 leaf hints
|
// Does this BUILT bundle .js reference a map engine? Read from public/<tree>/<bundle>/<bundle>.js with the
|
||||||
// (below), read from public/<tree>/<bundle>/<bundle>.js with the same regex the source classifier uses.
|
// same regex the source classifier uses — the directly verifiable A9-leaf-hint signal.
|
||||||
// This catches a composite whose own bundle mounts a map inline even when its profile is isMap:false;
|
function oneBundleLoadsEngine(bundleName) {
|
||||||
// it does not catch one whose engine loads only in a lazily-fetched child bundle (see the hint comment).
|
|
||||||
function builtBundleLoadsEngine(bundleName) {
|
|
||||||
try { return MAP_ENGINE_RE.test(readFileSync(join(DEFAULT_ROOT, bundleName, `${bundleName}.js`), 'utf8')) }
|
try { return MAP_ENGINE_RE.test(readFileSync(join(DEFAULT_ROOT, bundleName, `${bundleName}.js`), 'utf8')) }
|
||||||
catch { return false }
|
catch { return false }
|
||||||
}
|
}
|
||||||
|
// Element tag → owning bundle, built once from the scanned bundles so a composes entry that names a
|
||||||
|
// child by its ELEMENT tag (stack-demo composes "research-dashboard-map", whose bundle is
|
||||||
|
// "research-dashboard") resolves to the right bundle, not a non-existent dir.
|
||||||
|
let ELEMENT_TO_BUNDLE = null
|
||||||
|
function setElementToBundle(bundles) {
|
||||||
|
ELEMENT_TO_BUNDLE = new Map()
|
||||||
|
for (const b of bundles) for (const e of (b.elements || [])) ELEMENT_TO_BUNDLE.set(e, b.bundle)
|
||||||
|
}
|
||||||
|
// Does a leaf's PAGE end up loading an engine? True if its own bundle does, OR any bundle it `composes`
|
||||||
|
// does — the latter catches a composite whose engine lives in a lazily-fetched child (research-map-plus-grid
|
||||||
|
// composes doxa-research-map: its own bundle has 0 engine refs, the child's has 74). A `composes` entry is
|
||||||
|
// "<bundle>/<profile>", a bare bundle, or an element TAG — resolved to a bundle via ELEMENT_TO_BUNDLE, then
|
||||||
|
// the bundle's first segment. Verifiable from built files, so the gate can mirror it. Excludes a composite
|
||||||
|
// that composes only non-maps (big-picture).
|
||||||
|
function builtBundleLoadsEngine(bundleName, composes) {
|
||||||
|
if (oneBundleLoadsEngine(bundleName)) return true
|
||||||
|
for (const c of composes || []) {
|
||||||
|
const tag = String(c).split('/').pop()
|
||||||
|
const child = (ELEMENT_TO_BUNDLE && ELEMENT_TO_BUNDLE.get(tag)) || String(c).split('/')[0]
|
||||||
|
if (child && child !== bundleName && oneBundleLoadsEngine(child)) return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
function mapPageHtml(opts) {
|
function mapPageHtml(opts) {
|
||||||
const { title, tag, config, jsSrc, apiBaseUrl, tokenUrlExpr, bakedToken, integrity, shellTokenFree, isMap, scrollPage, isComposite, bundleLoadsEngine } = opts
|
const { title, tag, config, jsSrc, apiBaseUrl, tokenUrlExpr, bakedToken, integrity, shellTokenFree, isMap, scrollPage, isComposite, bundleLoadsEngine } = opts
|
||||||
|
|
@ -938,20 +959,17 @@ function mapPageHtml(opts) {
|
||||||
// integrity and crossorigin from library/constants/cdn.js so it cannot drift from the runtime tag.
|
// integrity and crossorigin from library/constants/cdn.js so it cannot drift from the runtime tag.
|
||||||
// WHO GETS HINTS: any page whose OWN bundle loads a map engine — the directly verifiable signal
|
// WHO GETS HINTS: any page whose OWN bundle loads a map engine — the directly verifiable signal
|
||||||
// (`bundleLoadsEngine`, an engine reference in the built .js), NOT the leaf's `isMap` flag. rega's A9
|
// (`bundleLoadsEngine`, an engine reference in the built .js), NOT the leaf's `isMap` flag. rega's A9
|
||||||
// net run found regions-mfe (isMap:false, but 33 engine refs in its bundle) opening cdn.jsdelivr.net +
|
// net run found regions-mfe (isMap:false, 56 engine refs in its bundle) AND research-map-plus-grid
|
||||||
|
// (isMap:false, own bundle 0 refs but composes doxa-research-map, 74 refs) opening cdn.jsdelivr.net +
|
||||||
// tiles.openfreemap.org from the top page and getting no hints — my first cut keyed on isMap and missed
|
// tiles.openfreemap.org from the top page and getting no hints — my first cut keyed on isMap and missed
|
||||||
// it, the same trap check:leaf-engine-per-provider's isMap gate fell into. Keying on the built bundle
|
// both, the same trap check:leaf-engine-per-provider's isMap gate fell into. bundleLoadsEngine is true
|
||||||
// hints regions-mfe and excludes the genuinely map-less composites (big-picture, stack-demo: 0 engine
|
// when the leaf's own bundle OR any bundle it composes loads an engine, so both composites are covered;
|
||||||
// refs), with no false positives. A cap-5 nested-mfe-spa shell (shellTokenFree) is excluded even if it
|
// a composite that composes only non-maps (big-picture) stays out. A cap-5 nested-mfe-spa shell
|
||||||
// somehow references an engine: its nested maps render in their OWN iframe leaves, which carry hints.
|
// (shellTokenFree) is excluded even if it references an engine: its maps render in their OWN iframe
|
||||||
// KNOWN GAP: a composite whose engine loads only inside a LAZILY-fetched child bundle (research-map-plus-grid
|
// leaves, which carry hints. A plain non-map leaf (a list/card) can SHARE a bundle with a map leaf
|
||||||
// composes doxa-research-map; its own bundle has 0 engine refs) is not hinted — the top page's own bytes
|
// (connectivity-list rides the cities-internet bundle) — so the `isComposite &&` guard keeps the bundle
|
||||||
// don't name the engine. Recorded in the A9 report; the deeper fix is the upstream isMap classifier,
|
// signal from over-hinting it: the engine only mounts in-page for a real map leaf (drawsMap) or a cap-4
|
||||||
// which mislabels these composites isMap:false (composes-by-tag where the child .vue filename differs).
|
// composite (isComposite) that stacks a map child; a non-map, non-composite leaf never opens it.
|
||||||
// A plain non-map leaf (a list/card) can SHARE a bundle with a map leaf (connectivity-list rides the
|
|
||||||
// cities-internet bundle, which loads an engine for connectivity-map) — so the bundle signal alone
|
|
||||||
// over-hints it. The engine only mounts in-page for a real map leaf (drawsMap) or a cap-4 composite
|
|
||||||
// (isComposite) that stacks a map child; a non-map, non-composite leaf never opens the engine itself.
|
|
||||||
const drawsMapInPage = (drawsMap || (isComposite && bundleLoadsEngine)) && !shellTokenFree
|
const drawsMapInPage = (drawsMap || (isComposite && bundleLoadsEngine)) && !shellTokenFree
|
||||||
const hintBlock = drawsMapInPage ? resourceHints({ isMapLibre, config, apiBaseUrl }) : ''
|
const hintBlock = drawsMapInPage ? resourceHints({ isMapLibre, config, apiBaseUrl }) : ''
|
||||||
const peerBlock = shellOnly
|
const peerBlock = shellOnly
|
||||||
|
|
@ -1261,7 +1279,7 @@ function profileHtml(b, profile, tokenUrlExpr, bakedToken) {
|
||||||
// non-map leaf renders token-free with no map peer; only a real map runs the token ladder.
|
// non-map leaf renders token-free with no map peer; only a real map runs the token ladder.
|
||||||
isMap: profile.isMap,
|
isMap: profile.isMap,
|
||||||
// Whether this bundle's OWN built .js loads a map engine — the A9-leaf-hint signal (mapPageHtml).
|
// Whether this bundle's OWN built .js loads a map engine — the A9-leaf-hint signal (mapPageHtml).
|
||||||
bundleLoadsEngine: builtBundleLoadsEngine(b.bundle),
|
bundleLoadsEngine: builtBundleLoadsEngine(b.bundle, b.composes),
|
||||||
// A cap-4 composite (nested-elements-mfe) is a StackLayout SCROLL-STACK: its leaf must let the
|
// A cap-4 composite (nested-elements-mfe) is a StackLayout SCROLL-STACK: its leaf must let the
|
||||||
// DOCUMENT own the scroll (height:auto, no position:fixed) so the page grows and a reader scrolls
|
// DOCUMENT own the scroll (height:auto, no position:fixed) so the page grows and a reader scrolls
|
||||||
// PAST one section to the next. A fixed-viewport leaf traps a 100vh dashboard and nothing scrolls
|
// PAST one section to the next. A fixed-viewport leaf traps a 100vh dashboard and nothing scrolls
|
||||||
|
|
@ -1297,7 +1315,7 @@ function instanceHtml(b, profile, inst, tokenUrlExpr, bakedToken) {
|
||||||
// non-map (token-free, no peer); a preset of a real map still runs the token ladder.
|
// non-map (token-free, no peer); a preset of a real map still runs the token ladder.
|
||||||
isMap: profile.isMap,
|
isMap: profile.isMap,
|
||||||
// Same bundle as the profile page, so the same engine signal (A9-leaf-hint, mapPageHtml).
|
// Same bundle as the profile page, so the same engine signal (A9-leaf-hint, mapPageHtml).
|
||||||
bundleLoadsEngine: builtBundleLoadsEngine(b.bundle),
|
bundleLoadsEngine: builtBundleLoadsEngine(b.bundle, b.composes),
|
||||||
// A preset of a cap-4 composite scroll-stack is still a scroll page (see profileHtml).
|
// A preset of a cap-4 composite scroll-stack is still a scroll page (see profileHtml).
|
||||||
scrollPage: profile.type === 'nested-elements-mfe',
|
scrollPage: profile.type === 'nested-elements-mfe',
|
||||||
})
|
})
|
||||||
|
|
@ -1613,6 +1631,7 @@ function readDestinations() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function writeManifestAndHtml(root, bundles, tokenUrlExpr, bakedToken) {
|
function writeManifestAndHtml(root, bundles, tokenUrlExpr, bakedToken) {
|
||||||
|
setElementToBundle(bundles) // for builtBundleLoadsEngine's tag→bundle resolution (A9 leaf hints)
|
||||||
// ── DERIVE THE COMPOSITION TIER FROM THE EDGES, BEFORE ANYTHING READS THE MANIFEST ──────────
|
// ── DERIVE THE COMPOSITION TIER FROM THE EDGES, BEFORE ANYTHING READS THE MANIFEST ──────────
|
||||||
// Every consumer downstream — the gallery's capFor, the studio rail, check:composite-embed-knobs —
|
// Every consumer downstream — the gallery's capFor, the studio rail, check:composite-embed-knobs —
|
||||||
// trusts profile.type. Deriving here means a composite can no longer ship understated because its
|
// trusts profile.type. Deriving here means a composite can no longer ship understated because its
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>all-people-groups · all-people-groups</title>
|
<title>all-people-groups · all-people-groups</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>connectivity-map · cities-internet</title>
|
<title>connectivity-map · cities-internet</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>country-map · country-map</title>
|
<title>country-map · country-map</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>countries-map · country-posters</title>
|
<title>countries-map · country-posters</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>country-posters-mfe · country-posters</title>
|
<title>country-posters-mfe · country-posters</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>default · dashboard-plus-grid</title>
|
<title>default · dashboard-plus-grid</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>dashboard-plus-grid · dashboard-plus-grid</title>
|
<title>dashboard-plus-grid · dashboard-plus-grid</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>demo-map · demo-map</title>
|
<title>demo-map · demo-map</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>Demo map — MapLibre (token-free) · demo-map</title>
|
<title>Demo map — MapLibre (token-free) · demo-map</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>research-map · doxa-research-map</title>
|
<title>research-map · doxa-research-map</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>Research map — MapLibre (token-free, no search bar) · doxa-research-map</title>
|
<title>Research map — MapLibre (token-free, no search bar) · doxa-research-map</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>Adoption Map · doxa-simple-map</title>
|
<title>Adoption Map · doxa-simple-map</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>Engagement Map · doxa-simple-map</title>
|
<title>Engagement Map · doxa-simple-map</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>doxa-simple-map · doxa-simple-map</title>
|
<title>doxa-simple-map · doxa-simple-map</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>Prayer Map · doxa-simple-map</title>
|
<title>Prayer Map · doxa-simple-map</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>Gospel x Internet — the board · gospel-internet</title>
|
<title>Gospel x Internet — the board · gospel-internet</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>board · gospel-internet</title>
|
<title>board · gospel-internet</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>India and China by state and province · gospel-internet</title>
|
<title>India and China by state and province · gospel-internet</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>Language tree — which languages have the gospel, family by family · gospel-internet</title>
|
<title>Language tree — which languages have the gospel, family by family · gospel-internet</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>Platforms — which apps would carry a resource there · gospel-internet</title>
|
<title>Platforms — which apps would carry a resource there · gospel-internet</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>Project 700 — the list as a partner embed · gospel-internet</title>
|
<title>Project 700 — the list as a partner embed · gospel-internet</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>Nothing in their own language — the front door · gospel-internet</title>
|
<title>Nothing in their own language — the front door · gospel-internet</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>gospel-dashboard · gospel-resources</title>
|
<title>gospel-dashboard · gospel-resources</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>resources-map · gospel-resources</title>
|
<title>resources-map · gospel-resources</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>upg-100-list · my-upg-100-list</title>
|
<title>upg-100-list · my-upg-100-list</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>upg-100-mfe · my-upg-100-list</title>
|
<title>upg-100-mfe · my-upg-100-list</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>pplr-data-maps · pplr-data-maps</title>
|
<title>pplr-data-maps · pplr-data-maps</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>prayer-walk-planner · prayer-walk-planner</title>
|
<title>prayer-walk-planner · prayer-walk-planner</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>region-dashboards · regions-dashboard</title>
|
<title>region-dashboards · regions-dashboard</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>regions-mfe · regions-dashboard</title>
|
<title>regions-mfe · regions-dashboard</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>research-dashboard · research-dashboard</title>
|
<title>research-dashboard · research-dashboard</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,11 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>default · research-map-plus-grid</title>
|
<title>default · research-map-plus-grid</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
<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" />
|
||||||
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
|
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
|
||||||
This element draws no map tiles, so it needs no Mapbox/MapLibre engine and MUST NOT
|
This element draws no map tiles, so it needs no Mapbox/MapLibre engine and MUST NOT
|
||||||
gate on a token. Any nested MAP (in a composite/shell) renders in its own iframe leaf,
|
gate on a token. Any nested MAP (in a composite/shell) renders in its own iframe leaf,
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,11 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>research-map-plus-grid · research-map-plus-grid</title>
|
<title>research-map-plus-grid · research-map-plus-grid</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
<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" />
|
||||||
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
|
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
|
||||||
This element draws no map tiles, so it needs no Mapbox/MapLibre engine and MUST NOT
|
This element draws no map tiles, so it needs no Mapbox/MapLibre engine and MUST NOT
|
||||||
gate on a token. Any nested MAP (in a composite/shell) renders in its own iframe leaf,
|
gate on a token. Any nested MAP (in a composite/shell) renders in its own iframe leaf,
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,11 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>stack-demo · stack-demo</title>
|
<title>stack-demo · stack-demo</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
<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" />
|
||||||
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
|
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
|
||||||
This element draws no map tiles, so it needs no Mapbox/MapLibre engine and MUST NOT
|
This element draws no map tiles, so it needs no Mapbox/MapLibre engine and MUST NOT
|
||||||
gate on a token. Any nested MAP (in a composite/shell) renders in its own iframe leaf,
|
gate on a token. Any nested MAP (in a composite/shell) renders in its own iframe leaf,
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,11 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>pair · stack-demo</title>
|
<title>pair · stack-demo</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
<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" />
|
||||||
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
|
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
|
||||||
This element draws no map tiles, so it needs no Mapbox/MapLibre engine and MUST NOT
|
This element draws no map tiles, so it needs no Mapbox/MapLibre engine and MUST NOT
|
||||||
gate on a token. Any nested MAP (in a composite/shell) renders in its own iframe leaf,
|
gate on a token. Any nested MAP (in a composite/shell) renders in its own iframe leaf,
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>Mobilize near neighbors · upg-neighbor</title>
|
<title>Mobilize near neighbors · upg-neighbor</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>Mobilize near neighbors · upg-neighbor</title>
|
<title>Mobilize near neighbors · upg-neighbor</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>upg-neighbor · upg-neighbor</title>
|
<title>upg-neighbor · upg-neighbor</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>Bridge-language campaigns · upg-neighbor</title>
|
<title>Bridge-language campaigns · upg-neighbor</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>Mobilize near neighbors · upg-neighbor</title>
|
<title>Mobilize near neighbors · upg-neighbor</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script>window.MAP_OWNS_PAGE = true;</script>
|
<script>window.MAP_OWNS_PAGE = true;</script>
|
||||||
<title>UPG Neighbors: mobilize · upg-neighbor</title>
|
<title>UPG Neighbors: mobilize · upg-neighbor</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine derived from the token ladder). -->
|
<!-- A9 hints: the map's origins, so DNS/TLS + the engine start with the bundle, not after it (dx-base/a9-leaf-hints; engine = provider or the MapLibre default). -->
|
||||||
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
||||||
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin />
|
||||||
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
<link rel="preconnect" href="https://pray.doxa.life" crossorigin />
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue