Merge branch 'main' of https://git.nuxtbase.app/doxa-life/doxa-maps into bundler-3/work
This commit is contained in:
commit
d8c73c69fd
22 changed files with 112 additions and 52 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -23,6 +23,8 @@
|
|||
*/
|
||||
import { ref, computed, onMounted, onBeforeUnmount, watch, getCurrentInstance } from 'vue'
|
||||
import { useDashboardLayout } from '@map/composables/useDashboardLayout.js'
|
||||
import { useShareableView } from '@map/composables/useShareableView.js'
|
||||
import { SHARE_FACETS } from './src/model.js'
|
||||
import { useShadowStyles } from '@map/composables/useShadowStyles.js'
|
||||
import { listLabel } from '@map/lists/peopleGroupList.js'
|
||||
import { useBoard } from './src/useBoard.js'
|
||||
|
|
@ -66,6 +68,11 @@ onBeforeUnmount(() => { if (selTimer) clearTimeout(selTimer) })
|
|||
// board opens already in its state: no flash of the default view, and the first render mounts the panel
|
||||
// the preset asks for (the language tree included) where a headless mount check can see it.
|
||||
board.readUrl()
|
||||
// SHARE LINKS FROM THE KIT (useShareableView, query mode): the filters and the typed search live in the
|
||||
// URL under the board's published names (?access= ?band= ?country= …, the alias map keeps links already
|
||||
// shared working), restored on every load, written ONLY on our own leaves (urlState:'query') so a
|
||||
// partner's address bar is never rewritten. facetKeys is explicit: its default reads nothing on a cold load.
|
||||
useShareableView(bus, { mode: 'query', write: board.profileConfig.value?.urlState === 'query', facetKeys: SHARE_FACETS })
|
||||
|
||||
// ── responsive: one panel at a time under 760px (ResizeObserver on the shell, not @container: a
|
||||
// container query cannot target the container itself, which is unreliable inside a shadow root) ──────
|
||||
|
|
|
|||
|
|
@ -11,8 +11,9 @@
|
|||
* lng/lat through the INVERSE of Web Mercator, so on the map engine the drawing is undistorted.
|
||||
*
|
||||
* COLOUR, PER LANGUAGE (ISO 639-3), from sources the board can cite:
|
||||
* g a New Testament or full Bible found: eBible (nt/full flags), or a link whose scope is New
|
||||
* Testament, Full Bible, or 27/66 parts (FCBH, Scripture Earth, PNG.Bible, Door43)
|
||||
* g a New Testament or full Bible found: eBible (nt/full flags), a link whose scope is New
|
||||
* Testament, Full Bible, or 27/66 parts (FCBH, Scripture Earth, PNG.Bible, Door43), or FCBH's own
|
||||
* verse scope (people-group-pins codes[iso].au.vsc) of 27 or 66 parts
|
||||
* y something found in their own language (gospel-plugin's access ladder), but no New Testament
|
||||
* r nothing found in their own language in the sources checked
|
||||
* A DIALECT is never coloured on its own evidence: every source catalogues by language, never by dialect.
|
||||
|
|
@ -50,6 +51,10 @@ const ntFound = new Set()
|
|||
for (const [iso, v] of Object.entries(ebible)) if (v && (v.nt || v.full)) ntFound.add(iso)
|
||||
const NT_SCOPE = /^(New Testament|Full Bible)$|^(27|66) parts/
|
||||
for (const r of links) if (NT_SCOPE.test(r.scope || '')) ntFound.add(r.iso639_3)
|
||||
// Faith Comes By Hearing's own verse scope for its fileset (people-group-pins codes[iso].au.vsc, shaped
|
||||
// "N parts, FIRST to LAST"): the same 27|66-parts rule. FCBH's published claim, recorded as cited, not
|
||||
// counted book by book (gospel-plugin, 2026-09-27: 4 full Bibles + 5 NTs this adds).
|
||||
for (const [iso, c] of Object.entries(T('people-group-pins.json').codes || {})) if (/^(27|66) parts/.test((c && c.au && c.au.vsc) || '')) ntFound.add(iso)
|
||||
const langAccess = new Map() // iso -> 'some' | 'none' (from the rows: gospel-plugin's ladder)
|
||||
const groupsBy = new Map() // iso -> groups on the roster
|
||||
for (const r of gi.rows) {
|
||||
|
|
|
|||
|
|
@ -64,7 +64,10 @@ bus.setFilter('access_detail', ['read', 'hear'])
|
|||
const or = M.filterRows(rows, bus).length
|
||||
bus.setFilter('access_detail', 'read'); const a = M.filterRows(rows, bus).length
|
||||
bus.setFilter('access_detail', 'hear'); const b = M.filterRows(rows, bus).length
|
||||
ok(or === a + b && or === 57 + 806, `read|hear = ${or} = read ${a} + hear ${b}`)
|
||||
// the expected counts come from the table's own coverage report, not typed numbers: the sub-ladder moves
|
||||
// whenever the gospel pools are corrected (it did, 2026-09-27), and the rule under test is OR-within-key
|
||||
const cov = doc.meta.coverage.by_access_detail
|
||||
ok(or === a + b && a === cov.read && b === cov.hear, `read|hear = ${or} = read ${a} + hear ${b} (the table's own ${cov.read} + ${cov.hear})`)
|
||||
bus.clearFilters()
|
||||
|
||||
// 4. cascade
|
||||
|
|
@ -141,6 +144,27 @@ for (const n of ix.nodes) if (!n.p) { const x = scZero.get(n.id); gy += x.g + x.
|
|||
ok(gy === 0, `with only zero-access groups in scope, no family counts a green or yellow language (${gy})`)
|
||||
bus.clearFilters()
|
||||
|
||||
// 12. share links through the kit (useShareableView): the board's published names map to its bus keys,
|
||||
// and a link already shared restores (single values, and multi-values written with '|')
|
||||
const SV = await import(resolve(REPO, 'library/composables/useShareableView.js'))
|
||||
const r1 = SV.parseQuery('?access=bridge&country=IND&wayin=deaf&app=Telegram%20Messenger', M.SHARE_FACETS)
|
||||
ok(r1.filters.access_level === 'bridge' && r1.filters.country === 'IND' && r1.filters.way_in === 'deaf' && r1.filters.messaging === 'Telegram Messenger',
|
||||
'kit parser maps ?access= ?wayin= ?app= to the bus keys (old single-value links restore)')
|
||||
const r2 = SV.parseQuery('?band=yes|partial', M.SHARE_FACETS)
|
||||
ok(Array.isArray(r2.filters.band) && r2.filters.band.join(',') === 'yes,partial', `an old multi-value link (band=yes|partial) restores as two values (got ${JSON.stringify(r2.filters.band)})`)
|
||||
const w = SV.serializeQuery({ access_level: 'bridge', band: ['yes', 'partial'] }, '', '?view=zero&utm_source=x', { facetKeys: M.SHARE_FACETS })
|
||||
ok(w.includes('access=bridge') && w.includes('view=zero') && w.includes('utm_source=x') && !w.includes('access_level'), `the kit writes the published names and keeps the board's own params (${w})`)
|
||||
const mine = M.buildQuery({ view: 'zero', filterSet: { band: 'yes' }, keep: '?band=yes,partial', filters: false })
|
||||
ok(mine.includes('band=yes%2Cpartial') && mine.includes('view=zero'), 'the board\'s own writer leaves the filter params to the kit (filters:false)')
|
||||
|
||||
// 13. a tree node is shared by its id alone: the board's writer drops the kit's long language list
|
||||
{
|
||||
const kitUrl = SV.serializeQuery({ language: ['abf', 'ayh', 'bwi'], band: 'yes' }, '', '', { facetKeys: M.SHARE_FACETS })
|
||||
const q = new URLSearchParams(kitUrl); q.delete('language')
|
||||
const final = M.buildQuery({ view: 'board', filterSet: {}, keep: '?' + q.toString(), tree: 'araw1281', filters: false })
|
||||
ok(final.includes('tree=araw1281') && final.includes('band=yes') && !final.includes('language=') && !POISON, `a tree-family link is ?tree=<id> without its language list (${final})`)
|
||||
}
|
||||
|
||||
// 11. translation readiness: current against its snapshot, every roster language present, the no-NT set is
|
||||
// the tree's, the 31 codes Glottolog lacks read as UNKNOWN (null) not "none", and the signal count is a
|
||||
// recount of the five named facts (no hidden weighting)
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ const eb = T('ebible-index.json').codes || {}
|
|||
const links = T('gospel-resource-links.json').rows
|
||||
const nt = new Set(Object.entries(eb).filter(([, v]) => v && (v.nt || v.full)).map(([k]) => k))
|
||||
for (const r of links) if (/^(New Testament|Full Bible)$|^(27|66) parts/.test(r.scope || '')) nt.add(r.iso639_3)
|
||||
for (const [iso, c] of Object.entries(T('people-group-pins.json').codes || {})) if (/^(27|66) parts/.test((c && c.au && c.au.vsc) || '')) nt.add(iso)
|
||||
const some = new Set(gi.rows.filter((r) => r.access_detail && r.access_detail !== 'none').map((r) => r.iso639_3))
|
||||
const want = (iso) => nt.has(iso) ? 'g' : some.has(iso) ? 'y' : 'r'
|
||||
const wrong = nodes.filter((n) => n.iso && langs.has(n.iso) && n.st !== want(n.iso))
|
||||
|
|
|
|||
|
|
@ -82,6 +82,9 @@ export const URL_KEYS = {
|
|||
app: 'messaging',
|
||||
}
|
||||
export const VIEWS = ['board', 'zero', 'province', 'platforms']
|
||||
/** The board's URL filter names -> bus keys, for the kit's useShareableView (query mode, alias map).
|
||||
* The published names are kept so links already shared keep restoring. */
|
||||
export const SHARE_FACETS = Object.fromEntries(Object.entries(URL_KEYS))
|
||||
|
||||
/** Parse `?view=&access=…&group=` into { view, filters, group }. Unknown views fall back to board. */
|
||||
export function parseQuery(search) {
|
||||
|
|
@ -109,13 +112,15 @@ export function parseQuery(search) {
|
|||
}
|
||||
|
||||
/** The inverse: filterSet + view + group -> a query string (no leading '?'), stable key order. */
|
||||
export function buildQuery({ view, filterSet, group, keep, panel, tree } = {}) {
|
||||
export function buildQuery({ view, filterSet, group, keep, panel, tree, filters = true } = {}) {
|
||||
const q = new URLSearchParams(keep || '')
|
||||
for (const name of [...Object.keys(URL_KEYS), 'view', 'group', 'panel', 'tree']) q.delete(name)
|
||||
// filters:false = the FILTER params belong to another writer (the kit's useShareableView): neither
|
||||
// delete nor write them, so the two writers never fight over one address bar
|
||||
for (const name of [...(filters ? Object.keys(URL_KEYS) : []), 'view', 'group', 'panel', 'tree']) q.delete(name)
|
||||
if (view && view !== 'board') q.set('view', view)
|
||||
if (panel === 'tree') q.set('panel', 'tree')
|
||||
if (tree) q.set('tree', tree)
|
||||
for (const [name, key] of Object.entries(URL_KEYS)) {
|
||||
if (filters) for (const [name, key] of Object.entries(URL_KEYS)) {
|
||||
if (tree && key === 'language') continue
|
||||
const v = filterSet?.[key]
|
||||
if (v === undefined || v === null || v === '') continue
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ export function useBoard() {
|
|||
.then(([t, res]) => {
|
||||
tree.value = markRaw({ ...M.indexTree(t), meta: t.meta || {} })
|
||||
resources.value = markRaw(res)
|
||||
if (pendingTree) { setTreeNode(pendingTree); pendingTree = '' }
|
||||
applyPendingTree()
|
||||
return tree.value
|
||||
})
|
||||
.catch((e) => { treeLoading = null; throw e })
|
||||
|
|
@ -134,6 +134,14 @@ export function useBoard() {
|
|||
if (treeNode.value && k !== treeSetKey) { treeNode.value = ''; treeSetKey = '' }
|
||||
})
|
||||
let pendingTree = ''
|
||||
// A ?tree= link applies only once BOTH the tree and the rows are loaded, whichever arrives last:
|
||||
// setTreeNode keeps the node's languages that are on the board, and with no rows yet that is the empty
|
||||
// set, so the grid restored to 0 (rega F1: "6 of 2,107" before a reload, 0 after).
|
||||
function applyPendingTree() {
|
||||
if (!pendingTree || !tree.value || !all.value.length) return
|
||||
setTreeNode(pendingTree)
|
||||
pendingTree = ''
|
||||
}
|
||||
|
||||
// ── views are PRESETS over the one bus ────────────────────────────────────────────────────────────
|
||||
function setView(v, { keepFilters = false } = {}) {
|
||||
|
|
@ -164,9 +172,12 @@ export function useBoard() {
|
|||
const q = M.parseQuery(location.search)
|
||||
const hostView = cfg().view
|
||||
setView(q.view !== 'board' ? q.view : (M.VIEWS.includes(hostView) ? hostView : 'board'))
|
||||
// Explicit facets in the URL (or the host's profile-config `filters`) narrow the preset further.
|
||||
// The host's profile-config `filters` narrow the preset; URL FILTER params are read by the kit's
|
||||
// useShareableView (board.vue), except Gospel Resources' ?codes= / ?code=, which are this board's.
|
||||
const hostFilters = cfg().filters && typeof cfg().filters === 'object' ? cfg().filters : {}
|
||||
for (const [k, v] of Object.entries({ ...hostFilters, ...q.filters })) if (k in M.FACET_ACC) bus.setFilter(k, v)
|
||||
for (const [k, v] of Object.entries(hostFilters)) if (k in M.FACET_ACC) bus.setFilter(k, v)
|
||||
const codes = [...new URLSearchParams(location.search).getAll('codes'), ...new URLSearchParams(location.search).getAll('code')].length ? q.filters.language : null
|
||||
if (codes) bus.setFilter('language', codes)
|
||||
const group = q.group || cfg().group || ''
|
||||
if (group) pendingGroup = group
|
||||
const panel = q.panel === 'tree' || cfg().panel === 'tree' ? 'tree' : 'map'
|
||||
|
|
@ -182,17 +193,24 @@ export function useBoard() {
|
|||
// ?groups= arrives SELECTED (ringed, framed by the camera), the same peoples Gospel Resources would
|
||||
// draw for that link; slugs not on this list are dropped, never guessed
|
||||
if (pendingSelection) { bus.setSelection(pendingSelection.filter((s) => bySlug.value.has(s))); pendingSelection = null }
|
||||
applyPendingTree()
|
||||
})
|
||||
function syncUrl() {
|
||||
if (!writeUrl.value || typeof history === 'undefined') return
|
||||
const qs = M.buildQuery({ view: view.value, filterSet: bus.filterSet, group: openSlug.value, keep: location.search,
|
||||
panel: centre.value, tree: treeNode.value })
|
||||
let keep = location.search
|
||||
// A tree node is shared as ?tree=<glottocode> ALONE: its language list (hundreds of codes for a big
|
||||
// family) made links that break in chat apps and SMS, the field's channel (dx-shepherd GOFAM). The
|
||||
// kit writes `language` from the bus; this writer runs after it (flush:'post') and removes it while a
|
||||
// node is active. On load, ?tree= restores the node, which re-applies its languages itself.
|
||||
if (treeNode.value) { const q = new URLSearchParams(keep); q.delete('language'); keep = q.toString() ? '?' + q.toString() : '' }
|
||||
const qs = M.buildQuery({ view: view.value, filterSet: bus.filterSet, group: openSlug.value, keep,
|
||||
panel: centre.value, tree: treeNode.value, filters: false })
|
||||
const next = location.pathname + (qs ? '?' + qs : '') + location.hash
|
||||
if (next !== location.pathname + location.search + location.hash) {
|
||||
try { history.replaceState(history.state, '', next) } catch (_) { /* sandboxed */ }
|
||||
}
|
||||
}
|
||||
watch([view, openSlug, centre, treeNode, () => JSON.stringify(bus.filterSet)], syncUrl)
|
||||
watch([view, openSlug, centre, treeNode, () => JSON.stringify(bus.filterSet)], syncUrl, { flush: 'post' })
|
||||
|
||||
/** A link to one group, for "Copy link to this group" — the board's own page, ?group=<slug>. */
|
||||
function groupLink(slug) {
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -604,7 +604,7 @@
|
|||
"bundle": "gospel-internet",
|
||||
"scriptUrl": "./gospel-internet/gospel-internet.js",
|
||||
"output": "dx-maps/gospel-internet/gospel-internet.js",
|
||||
"integrity": "sha384-wRWCJhXf3QrvCUO5i22k46dpJFvQWnI8dmA1jLl2l4YkiomWTVYPjTfXlKz3HRez",
|
||||
"integrity": "sha384-FQze+F6zkEILo3+mgXTydQzG78xRu/chRBJtGXcRrUzK5Kz+PVt5vIiY+np+x/MD",
|
||||
"elements": [
|
||||
"gospel-internet-board"
|
||||
],
|
||||
|
|
@ -623,7 +623,7 @@
|
|||
"scriptUrl": "./gospel-internet/gospel-internet.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-internet/board/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-internet/gospel-internet.js\" integrity=\"sha384-wRWCJhXf3QrvCUO5i22k46dpJFvQWnI8dmA1jLl2l4YkiomWTVYPjTfXlKz3HRez\" crossorigin=\"anonymous\"></script>\n<gospel-internet-board profile-config='{\"profile\":\"board\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-internet-board>"
|
||||
"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-internet/gospel-internet.js\" integrity=\"sha384-FQze+F6zkEILo3+mgXTydQzG78xRu/chRBJtGXcRrUzK5Kz+PVt5vIiY+np+x/MD\" crossorigin=\"anonymous\"></script>\n<gospel-internet-board profile-config='{\"profile\":\"board\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-internet-board>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
|
||||
<script src="../../gospel-internet.js" integrity="sha384-wRWCJhXf3QrvCUO5i22k46dpJFvQWnI8dmA1jLl2l4YkiomWTVYPjTfXlKz3HRez" crossorigin="anonymous"></script>
|
||||
<script src="../../gospel-internet.js" integrity="sha384-FQze+F6zkEILo3+mgXTydQzG78xRu/chRBJtGXcRrUzK5Kz+PVt5vIiY+np+x/MD" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
|
||||
<script src="../gospel-internet.js" integrity="sha384-wRWCJhXf3QrvCUO5i22k46dpJFvQWnI8dmA1jLl2l4YkiomWTVYPjTfXlKz3HRez" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-internet.js" integrity="sha384-FQze+F6zkEILo3+mgXTydQzG78xRu/chRBJtGXcRrUzK5Kz+PVt5vIiY+np+x/MD" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
|
||||
<script src="../../gospel-internet.js" integrity="sha384-wRWCJhXf3QrvCUO5i22k46dpJFvQWnI8dmA1jLl2l4YkiomWTVYPjTfXlKz3HRez" crossorigin="anonymous"></script>
|
||||
<script src="../../gospel-internet.js" integrity="sha384-FQze+F6zkEILo3+mgXTydQzG78xRu/chRBJtGXcRrUzK5Kz+PVt5vIiY+np+x/MD" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
|
||||
<script src="../../gospel-internet.js" integrity="sha384-wRWCJhXf3QrvCUO5i22k46dpJFvQWnI8dmA1jLl2l4YkiomWTVYPjTfXlKz3HRez" crossorigin="anonymous"></script>
|
||||
<script src="../../gospel-internet.js" integrity="sha384-FQze+F6zkEILo3+mgXTydQzG78xRu/chRBJtGXcRrUzK5Kz+PVt5vIiY+np+x/MD" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
|
||||
<script src="../../gospel-internet.js" integrity="sha384-wRWCJhXf3QrvCUO5i22k46dpJFvQWnI8dmA1jLl2l4YkiomWTVYPjTfXlKz3HRez" crossorigin="anonymous"></script>
|
||||
<script src="../../gospel-internet.js" integrity="sha384-FQze+F6zkEILo3+mgXTydQzG78xRu/chRBJtGXcRrUzK5Kz+PVt5vIiY+np+x/MD" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
|
||||
<script src="../../gospel-internet.js" integrity="sha384-wRWCJhXf3QrvCUO5i22k46dpJFvQWnI8dmA1jLl2l4YkiomWTVYPjTfXlKz3HRez" crossorigin="anonymous"></script>
|
||||
<script src="../../gospel-internet.js" integrity="sha384-FQze+F6zkEILo3+mgXTydQzG78xRu/chRBJtGXcRrUzK5Kz+PVt5vIiY+np+x/MD" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
|
||||
<script src="../../gospel-internet.js" integrity="sha384-wRWCJhXf3QrvCUO5i22k46dpJFvQWnI8dmA1jLl2l4YkiomWTVYPjTfXlKz3HRez" crossorigin="anonymous"></script>
|
||||
<script src="../../gospel-internet.js" integrity="sha384-FQze+F6zkEILo3+mgXTydQzG78xRu/chRBJtGXcRrUzK5Kz+PVt5vIiY+np+x/MD" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -604,7 +604,7 @@
|
|||
"bundle": "gospel-internet",
|
||||
"scriptUrl": "./gospel-internet/gospel-internet.js",
|
||||
"output": "dx-maps/gospel-internet/gospel-internet.js",
|
||||
"integrity": "sha384-wRWCJhXf3QrvCUO5i22k46dpJFvQWnI8dmA1jLl2l4YkiomWTVYPjTfXlKz3HRez",
|
||||
"integrity": "sha384-FQze+F6zkEILo3+mgXTydQzG78xRu/chRBJtGXcRrUzK5Kz+PVt5vIiY+np+x/MD",
|
||||
"elements": [
|
||||
"gospel-internet-board"
|
||||
],
|
||||
|
|
@ -623,7 +623,7 @@
|
|||
"scriptUrl": "./gospel-internet/gospel-internet.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-internet/board/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-internet/gospel-internet.js\" integrity=\"sha384-wRWCJhXf3QrvCUO5i22k46dpJFvQWnI8dmA1jLl2l4YkiomWTVYPjTfXlKz3HRez\" crossorigin=\"anonymous\"></script>\n<gospel-internet-board profile-config='{\"profile\":\"board\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-internet-board>"
|
||||
"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-internet/gospel-internet.js\" integrity=\"sha384-FQze+F6zkEILo3+mgXTydQzG78xRu/chRBJtGXcRrUzK5Kz+PVt5vIiY+np+x/MD\" crossorigin=\"anonymous\"></script>\n<gospel-internet-board profile-config='{\"profile\":\"board\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-internet-board>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue