Let the legend collapse on desktop, the way it already does on mobile
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions

Mobile has had a fold control since the narrow layout existed; desktop had none,
so a reader who wanted to see the map underneath had no way to move the legend
off it. The state was already there — every section read "not narrow OR open", so
on desktop the OR was always satisfied and the flag governed nothing. Now the
flag alone decides at both widths.

The control is deliberately not a new one. Same 22x20 caret, same rotation, same
aria contract as the shared SemanticTreeLegend's collapse button, which the
mobile legend also copies. Matching it costs nothing and means a reader who has
met one of these legends has met this one.

Collapsed, the panel shrinks to the caret. Hiding the contents alone would have
left a 380px box of empty background over the map: the reader presses collapse
and gets a blank panel instead of their map, which is worse than having no
control at all.

The choice is remembered for the session, so it survives working with the map but
not a fresh visit, and a remembered choice beats the width default — otherwise
dragging a window across the breakpoint would silently reopen a legend that had
been deliberately closed, undoing a decision rather than responding to one.
Storage access is wrapped: a sandboxed embed throws on it, and a legend that
cannot remember is much better than a map that will not load.
This commit is contained in:
Doxa Maps 2026-09-28 17:47:40 +00:00
parent 20355ca552
commit a45f1914a6
9 changed files with 100 additions and 49 deletions

View file

@ -542,12 +542,34 @@ function openFromUrl() {
// "a red dot can sit on a green country" is the thing that stops a correct map reading as
// a bug, so it stays one tap away rather than being dropped on small screens.
const narrow = ref(false)
// ONE state for both widths. It used to govern the mobile sheet only — every section read
// `!narrow || legendOpen`, so on desktop the legend was always open and there was no way to
// shut it. Now `legendOpen` alone decides, and desktop gets the same collapse control mobile
// has always had.
const legendOpen = ref(true)
// Remembered for the SESSION, not forever: a reader who collapses the legend to see the map
// wants it to stay collapsed while they work, and wants a fresh visit to start from the
// designed state rather than from a decision they made once and forgot. sessionStorage is
// exactly that lifetime. Wrapped because a sandboxed or storage-blocked embed throws on
// access, and a legend that cannot remember is far better than a map that will not load.
const LEGEND_KEY = 'gm.legendOpen'
function rememberLegend(v) {
try { window.sessionStorage?.setItem(LEGEND_KEY, v ? '1' : '0') } catch (_) {}
}
function recallLegend() {
try { const v = window.sessionStorage?.getItem(LEGEND_KEY); return v == null ? null : v === '1' }
catch (_) { return null }
}
function toggleLegend() { legendOpen.value = !legendOpen.value; rememberLegend(legendOpen.value) }
function syncNarrow() {
const n = typeof window !== 'undefined' && window.innerWidth < 700
if (n === narrow.value) return
narrow.value = n
legendOpen.value = !n
// A remembered choice wins over the width default. Without this, dragging a window across
// the breakpoint would silently reopen a legend the reader had deliberately closed — the
// resize would be undoing their decision rather than responding to it.
const remembered = recallLegend()
legendOpen.value = remembered == null ? !n : remembered
}
if (typeof window !== 'undefined') {
syncNarrow()
@ -1950,6 +1972,21 @@ useShadowStyles(
// Narrow screens: the rail is still on the right, so the legend must stop short
// of it rather than run under it. 46px = 32px button + 3px inset + clearance.
'@media(max-width:480px){.gm-legend{width:auto;inset-inline-end:46px}}' +
// The caret's box matches .stl-collapse-btn exactly (22x20, 5px radius, 1px border) so the
// two legends read as the same control. The colours are this map's, because the palette is
// the map's and the geometry is the fleet's.
// Collapsed, the panel must SHRINK TO THE CARET. Hiding the contents alone would leave a
// 380px box of empty background sitting over the map — the reader would have pressed
// collapse and got a blank panel instead of their map back, which is worse than no control.
'.gm-legend.closed{width:auto;padding:4px;background:rgba(243,243,241,.92)}' +
'.gm-legend.closed .gm-collapse{position:static;inset:auto}' +
'.gm-collapse{position:absolute;inset-block-start:8px;inset-inline-end:8px;width:22px;height:20px;' +
'display:flex;align-items:center;justify-content:center;background:rgba(209,212,205,.4);' +
'border:1px solid #d1d4cd;border-radius:5px;cursor:pointer;color:#6d766e;padding:0;' +
'transition:transform .3s ease-out,color .1s,background .1s;transform-origin:center}' +
'.gm-collapse:hover{color:#3b463d;background:rgba(146,177,149,.25);border-color:#92b195}' +
'.gm-collapse svg{transition:transform .18s;transform:rotate(180deg)}' +
'.gm-collapse.closed svg{transform:rotate(0deg)}' +
'.is-dark .gm-legend{background:rgba(19,32,25,.95);color:#e5e7eb}' +
'.gm-title{font-weight:700;font-size:15.5px;margin-bottom:5px}' +
'.gm-keys{display:flex;flex-wrap:wrap;gap:5px 12px}' +
@ -2172,7 +2209,7 @@ useShadowStyles(
<ShareButton :is-dark="isDark" :embed-path="shareEmbedPath" />
</MapToolbar>
<div v-if="!cardMode" class="gm-legend">
<div v-if="!cardMode" class="gm-legend" :class="{ closed: !legendOpen && !narrow }">
<!-- ═══ SOMEBODY ELSE'S LIST, SAID PLAINLY ════════════════════════════════════════
First thing in the legend, because it is the first thing that is different about
this map: the reader is looking at a subset somebody chose. Two numbers and one
@ -2207,7 +2244,21 @@ useShadowStyles(
<button type="button" class="gm-mode" :class="{ on: mode === 'gap' }" @click="setMode('gap')">{{ t('gospel.mode.gap') }}</button>
<button type="button" class="gm-mode" :class="{ on: mode === 'coverage' }" @click="setMode('coverage')">{{ t('gospel.mode.coverage') }}</button>
</div>
<button v-if="narrow" type="button" class="gm-fold" @click="legendOpen = !legendOpen"
<!-- DESKTOP COLLAPSE. Mobile has always had one; desktop had none, so a reader who
wanted the map under the legend had no way to move it. Deliberately NOT a new
control: same 22x20 caret, same rotation, same aria contract as the shared
SemanticTreeLegend's .stl-collapse-btn, which LegendMobile also copies. Matching it
costs nothing and means a reader who has met one legend has met this one. -->
<button v-if="!narrow" type="button" class="gm-collapse" :class="{ closed: !legendOpen }"
:title="legendOpen ? t('aria.collapseLegend') : t('aria.expandLegend')"
:aria-label="legendOpen ? t('aria.collapseLegend') : t('aria.expandLegend')"
:aria-expanded="String(legendOpen)" @click="toggleLegend">
<svg width="9" height="9" viewBox="0 0 12 12" fill="none" aria-hidden="true">
<path d="M2 4l4 4 4-4" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" />
</svg>
</button>
<button v-if="narrow" type="button" class="gm-fold" @click="toggleLegend"
:aria-expanded="legendOpen ? 'true' : 'false'">
<!-- "Key & notes" advertised only half of what is behind it. This panel also holds
the pin FILTERS — by design, because the key doubles as the filter (see below) —
@ -2216,19 +2267,19 @@ useShadowStyles(
reader with no reason to open "notes" never finds it. -->
{{ legendOpen ? 'Hide key &amp; filters' : 'Key &amp; filters' }}
</button>
<div v-show="!narrow || legendOpen" class="gm-title">
<div v-show="legendOpen" class="gm-title">
{{ mode === 'gap'
? t('gospel.legend.title')
: t('gospel.legend.titleCoverage') }}
</div>
<div v-show="!narrow || legendOpen" class="gm-keys">
<div v-show="legendOpen" class="gm-keys">
<span v-for="b in activeBands" :key="b.id" class="gm-key">
<i class="gm-sw" :style="{ background: b.color }"></i>{{ t(b.labelKey) }}
</span>
</div>
<!-- The tally sentence is still English prose, so it declares its own direction
like the caveat below it. -->
<div v-show="!narrow || legendOpen" class="gm-pinkey" v-if="pinTally.total">
<div v-show="legendOpen" class="gm-pinkey" v-if="pinTally.total">
<!-- Translated rather than pinned LTR. Pinning it left-aligned an English sentence
inside the RTL panel and the second line ran off the left edge — "th a link".
It is a COUNT, not doctrinal prose, so it belongs in the catalogue with the
@ -2242,7 +2293,7 @@ useShadowStyles(
<!-- The key IS the filter: a reader who has just understood what a colour means is
exactly the reader who wants to see only that colour. Two controls would be one
too many. -->
<div v-show="!narrow || legendOpen" class="gm-keys gm-keys-btn">
<div v-show="legendOpen" class="gm-keys gm-keys-btn">
<button type="button" class="gm-key gm-kbtn" :class="{ on: pinFilter === 'both' }"
@click="setPinFilter(pinFilter === 'both' ? 'all' : 'both')"
:aria-pressed="pinFilter === 'both'">
@ -2299,7 +2350,7 @@ useShadowStyles(
<b>{{ fmt(pinTally.hnr) }}</b>
</button>
</div>
<div v-if="pinFilter !== 'all' && (!narrow || legendOpen)" class="gm-filtered">
<div v-if="pinFilter !== 'all' && legendOpen" class="gm-filtered">
Showing only <b>{{ pinFilter === 'none' ? 'groups with nothing found'
: pinFilter === 'some' ? 'groups with some resource'
: pinFilter === 'hnr' ? 'groups that can hear the gospel but have no text Scripture in the pools checked'
@ -2313,7 +2364,7 @@ useShadowStyles(
<!-- The ONE translated line about the English below it. Rendered outside the LTR
block so it reads in the reader's own direction, and only when the locale is
not English — telling an English reader that the English is English is noise. -->
<div v-show="!narrow || legendOpen" v-if="!isEnglish" class="gm-caveat gm-prose-note">
<div v-show="legendOpen" v-if="!isEnglish" class="gm-caveat gm-prose-note">
{{ t('gospel.prose.english') }}
</div>
<!-- ═══ BOTTOM LINE UP FRONT ═══════════════════════════════════════════════════════
@ -2325,7 +2376,7 @@ useShadowStyles(
the page. Folded, not deleted: the basis is one click away, it stays English by the
standing decision on prose, so folding costs nothing to translate and removes 232
words from first sight. -->
<div v-show="!narrow || legendOpen" class="gm-caveat" dir="ltr">
<div v-show="legendOpen" class="gm-caveat" dir="ltr">
<b>{{ t('gospel.guide.dotVsCountry') }}</b>
<br><b>{{ t('gospel.guide.noneFoundShort') }}</b>
<br><b>{{ t('gospel.guide.tapCountry') }}</b>

View file

@ -742,7 +742,7 @@
"bundle": "gospel-resources",
"scriptUrl": "./gospel-resources/gospel-resources.js",
"output": "dx-maps/gospel-resources/gospel-resources.js",
"integrity": "sha384-dr1KyHZ1s+ot5QjWWZrVN972zBZw9Ad8IrcvLvTjme50GkZU/kUJqIeVaEQ7AhzK",
"integrity": "sha384-Q+U6QnOArHlw2zKO9+1ORyLH1vKjFWjiACEehXFS+7lO8yaTujslwq0WzFejtujP",
"elements": [
"gospel-resources-map"
],
@ -765,7 +765,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-dr1KyHZ1s+ot5QjWWZrVN972zBZw9Ad8IrcvLvTjme50GkZU/kUJqIeVaEQ7AhzK\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"provider\":\"maplibre\",\"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-Q+U6QnOArHlw2zKO9+1ORyLH1vKjFWjiACEehXFS+7lO8yaTujslwq0WzFejtujP\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -781,7 +781,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-dr1KyHZ1s+ot5QjWWZrVN972zBZw9Ad8IrcvLvTjme50GkZU/kUJqIeVaEQ7AhzK\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"provider\":\"maplibre\",\"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-Q+U6QnOArHlw2zKO9+1ORyLH1vKjFWjiACEehXFS+7lO8yaTujslwq0WzFejtujP\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -797,7 +797,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. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-dr1KyHZ1s+ot5QjWWZrVN972zBZw9Ad8IrcvLvTjme50GkZU/kUJqIeVaEQ7AhzK\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-Q+U6QnOArHlw2zKO9+1ORyLH1vKjFWjiACEehXFS+7lO8yaTujslwq0WzFejtujP\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -813,7 +813,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-dr1KyHZ1s+ot5QjWWZrVN972zBZw9Ad8IrcvLvTjme50GkZU/kUJqIeVaEQ7AhzK\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"provider\":\"maplibre\",\"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-Q+U6QnOArHlw2zKO9+1ORyLH1vKjFWjiACEehXFS+7lO8yaTujslwq0WzFejtujP\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -829,7 +829,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. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-dr1KyHZ1s+ot5QjWWZrVN972zBZw9Ad8IrcvLvTjme50GkZU/kUJqIeVaEQ7AhzK\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-Q+U6QnOArHlw2zKO9+1ORyLH1vKjFWjiACEehXFS+7lO8yaTujslwq0WzFejtujP\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
}
]

View file

@ -32,7 +32,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-dr1KyHZ1s+ot5QjWWZrVN972zBZw9Ad8IrcvLvTjme50GkZU/kUJqIeVaEQ7AhzK" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-Q+U6QnOArHlw2zKO9+1ORyLH1vKjFWjiACEehXFS+7lO8yaTujslwq0WzFejtujP" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -32,7 +32,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-dr1KyHZ1s+ot5QjWWZrVN972zBZw9Ad8IrcvLvTjme50GkZU/kUJqIeVaEQ7AhzK" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-Q+U6QnOArHlw2zKO9+1ORyLH1vKjFWjiACEehXFS+7lO8yaTujslwq0WzFejtujP" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -47,7 +47,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-dr1KyHZ1s+ot5QjWWZrVN972zBZw9Ad8IrcvLvTjme50GkZU/kUJqIeVaEQ7AhzK" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-Q+U6QnOArHlw2zKO9+1ORyLH1vKjFWjiACEehXFS+7lO8yaTujslwq0WzFejtujP" 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

@ -32,7 +32,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-dr1KyHZ1s+ot5QjWWZrVN972zBZw9Ad8IrcvLvTjme50GkZU/kUJqIeVaEQ7AhzK" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-Q+U6QnOArHlw2zKO9+1ORyLH1vKjFWjiACEehXFS+7lO8yaTujslwq0WzFejtujP" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -36,7 +36,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-dr1KyHZ1s+ot5QjWWZrVN972zBZw9Ad8IrcvLvTjme50GkZU/kUJqIeVaEQ7AhzK" crossorigin="anonymous"></script>
<script src="../gospel-resources.js" integrity="sha384-Q+U6QnOArHlw2zKO9+1ORyLH1vKjFWjiACEehXFS+7lO8yaTujslwq0WzFejtujP" crossorigin="anonymous"></script>
<script>
// Mapbox token resolution — the A3 ladder, in precedence order:

View file

@ -742,7 +742,7 @@
"bundle": "gospel-resources",
"scriptUrl": "./gospel-resources/gospel-resources.js",
"output": "dx-maps/gospel-resources/gospel-resources.js",
"integrity": "sha384-dr1KyHZ1s+ot5QjWWZrVN972zBZw9Ad8IrcvLvTjme50GkZU/kUJqIeVaEQ7AhzK",
"integrity": "sha384-Q+U6QnOArHlw2zKO9+1ORyLH1vKjFWjiACEehXFS+7lO8yaTujslwq0WzFejtujP",
"elements": [
"gospel-resources-map"
],
@ -765,7 +765,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-dr1KyHZ1s+ot5QjWWZrVN972zBZw9Ad8IrcvLvTjme50GkZU/kUJqIeVaEQ7AhzK\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"provider\":\"maplibre\",\"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-Q+U6QnOArHlw2zKO9+1ORyLH1vKjFWjiACEehXFS+7lO8yaTujslwq0WzFejtujP\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -781,7 +781,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-dr1KyHZ1s+ot5QjWWZrVN972zBZw9Ad8IrcvLvTjme50GkZU/kUJqIeVaEQ7AhzK\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"provider\":\"maplibre\",\"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-Q+U6QnOArHlw2zKO9+1ORyLH1vKjFWjiACEehXFS+7lO8yaTujslwq0WzFejtujP\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -797,7 +797,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. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-dr1KyHZ1s+ot5QjWWZrVN972zBZw9Ad8IrcvLvTjme50GkZU/kUJqIeVaEQ7AhzK\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-Q+U6QnOArHlw2zKO9+1ORyLH1vKjFWjiACEehXFS+7lO8yaTujslwq0WzFejtujP\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -813,7 +813,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-dr1KyHZ1s+ot5QjWWZrVN972zBZw9Ad8IrcvLvTjme50GkZU/kUJqIeVaEQ7AhzK\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"provider\":\"maplibre\",\"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-Q+U6QnOArHlw2zKO9+1ORyLH1vKjFWjiACEehXFS+7lO8yaTujslwq0WzFejtujP\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
},
{
@ -829,7 +829,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. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-dr1KyHZ1s+ot5QjWWZrVN972zBZw9Ad8IrcvLvTjme50GkZU/kUJqIeVaEQ7AhzK\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-Q+U6QnOArHlw2zKO9+1ORyLH1vKjFWjiACEehXFS+7lO8yaTujslwq0WzFejtujP\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
}
}
]