This commit is contained in:
commit
90b8109fd0
27 changed files with 195 additions and 129 deletions
|
|
@ -82,10 +82,25 @@ function approxIndices(haystack, needle, threshold) {
|
|||
}
|
||||
|
||||
/**
|
||||
* Low-level predicate shared with the dashboard's search matcher (useDashboardShell.js):
|
||||
* does `text` match `term` under the DX-life Fuse contract (exact substring first, then
|
||||
* k-errors fuzzy when term.length >= minMatchCharLength)? ONE matcher, every search surface.
|
||||
* Low-level predicates shared with the dashboard's search matcher (useDashboardShell.js).
|
||||
*
|
||||
* ★ TIERED, NOT A UNION (Driver 2026-09-24: "fuzzy search is too fuzzy -- Bhutan returns more
|
||||
* results than just the country, and there is no interoperability with the other filters like
|
||||
* selecting it as a place"). The first fuzzy pass returned exact matches PLUS every <=k-error
|
||||
* neighbour, so the EXACT term 'Bhutan' counted 132 rows while the Country filter counted 13 --
|
||||
* two controls disagreeing about the same place. The conventional contract is tiered: when a
|
||||
* term has exact matches, return ONLY those (search now agrees with the facet, 13 = 13); the
|
||||
* k-errors pass exists solely as the ZERO-RESULT typo rescue ('Bhutann', 'Banladesh').
|
||||
* Callers implement the tier over their row set: filter with exactMatches first, and only if
|
||||
* that yields nothing, filter with fuzzyMatches.
|
||||
*/
|
||||
export function exactMatches(text, term) {
|
||||
const raw = String(text ?? '')
|
||||
const q = String(term ?? '').trim()
|
||||
if (!q) return true
|
||||
if (!raw) return false
|
||||
return raw.toLowerCase().includes(q.toLowerCase())
|
||||
}
|
||||
export function fuzzyMatches(text, term, { threshold = 0.4, minMatchCharLength = 3 } = {}) {
|
||||
const raw = String(text ?? '')
|
||||
const q = String(term ?? '').trim()
|
||||
|
|
@ -109,18 +124,30 @@ export default class Fuse {
|
|||
if (!q) return this.list.map(item => ({ item, matches: [] }))
|
||||
if (q.length < this.minMatchCharLength) return []
|
||||
const exactOnly = this.threshold === 0
|
||||
// TIER 1: exact substring across the whole list. If ANY item matches exactly, fuzzy never
|
||||
// runs -- an exact term returns exactly the rows the equivalent facet filter selects
|
||||
// (see the tiered-contract note on exactMatches above).
|
||||
const exact = []
|
||||
for (const item of this.list) {
|
||||
const matches = []
|
||||
for (const key of this.keys) {
|
||||
const raw = getByPath(item, key)
|
||||
if (typeof raw !== 'string' || !raw) continue
|
||||
const indices = exactIndices(raw, q)
|
||||
if (indices.length) matches.push({ key, indices })
|
||||
}
|
||||
if (matches.length) exact.push({ item, matches })
|
||||
}
|
||||
if (exact.length || exactOnly) return exact
|
||||
// TIER 2: the zero-result typo rescue (k-errors edit distance).
|
||||
const results = []
|
||||
for (const item of this.list) {
|
||||
const matches = []
|
||||
for (const key of this.keys) {
|
||||
const raw = getByPath(item, key)
|
||||
if (typeof raw !== 'string' || !raw) continue
|
||||
let indices = exactIndices(raw, q)
|
||||
if (indices.length === 0 && !exactOnly) {
|
||||
const fz = approxIndices(raw, q, this.threshold)
|
||||
if (fz) indices = fz
|
||||
}
|
||||
if (indices.length) matches.push({ key, indices })
|
||||
const fz = approxIndices(raw, q, this.threshold)
|
||||
if (fz) matches.push({ key, indices: fz })
|
||||
}
|
||||
if (matches.length) results.push({ item, matches })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"type": "single",
|
||||
"label": "Cities with Internet — connectivity map",
|
||||
"config": {
|
||||
"pinHint": false
|
||||
},
|
||||
"note": "pinHint:false because this map has NO DOTS. It shades country polygons by national internet penetration; the shared PinHint's default label invites the reader to 'Tap a coloured dot', which points at something that does not exist here and makes a working map look broken. Opt-out is the documented channel (library/components/hints/PinHint.vue). Sibling: gospel-resources/resources-map.meta.json — keep these two in step."
|
||||
}
|
||||
8
plugin-designs/gospel-resources/resources-map.meta.json
Normal file
8
plugin-designs/gospel-resources/resources-map.meta.json
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"type": "single",
|
||||
"label": "Gospel Resources — resources map",
|
||||
"config": {
|
||||
"pinHint": false
|
||||
},
|
||||
"note": "pinHint:false because this map has NO DOTS. It shades country polygons by gospel-resource gap/coverage; the shared PinHint's default label invites the reader to 'Tap a coloured dot', which points at something that does not exist here and makes a working map look broken. Opt-out is the documented channel (library/components/hints/PinHint.vue). Sibling: cities-internet/connectivity-map.meta.json — keep these two in step."
|
||||
}
|
||||
|
|
@ -453,9 +453,9 @@ useShadowStyles(`
|
|||
open: two owners of one height is the bug this file keeps re-learning. */
|
||||
.rd-shell.rd-page-scroll.rd-table-collapsed{
|
||||
grid-template-rows: var(--rd-topbar-h,38px) auto var(--rd-stats-h,22px)
|
||||
calc(var(--rd-shell-h, 582px) - var(--table-bar-h,30px)) var(--table-bar-h,30px); }
|
||||
calc(var(--rd-shell-h, 562px) - var(--table-bar-h,30px)) var(--table-bar-h,30px); }
|
||||
.rd-shell.rd-page-scroll.rd-table-collapsed > [data-region="map"]{
|
||||
height:calc(var(--rd-shell-h, 582px) - var(--table-bar-h,30px)); }
|
||||
height:calc(var(--rd-shell-h, 562px) - var(--table-bar-h,30px)); }
|
||||
.rd-shell.rd-page-scroll > [data-region="map"]{ height:var(--rd-map-h, 340px); overflow:hidden; }
|
||||
.rd-shell.rd-page-scroll > [data-region="table"]{ overflow:visible; }
|
||||
.rd-shell.rd-page-scroll .rd-table-wrap{ height:auto; }
|
||||
|
|
@ -523,7 +523,7 @@ useShadowStyles(`
|
|||
GOAL CONTEXT: "we are trying to RECLAIM HEIGHT." 7 rows is 182px against today's 300px keyhole,
|
||||
so this alone returns 118px of the ~147px available. */
|
||||
.rd-shell.rd-page-scroll .rd-grid{
|
||||
max-height:var(--rd-table-max-h, calc(var(--rd-shell-h, 582px) - var(--rd-map-h, 340px) - var(--rd-table-bar-h, 32px) - var(--rd-table-foot-h, 28px))); }
|
||||
max-height:var(--rd-table-max-h, calc(var(--rd-shell-h, 562px) - var(--rd-map-h, 340px) - var(--rd-table-bar-h, 32px) - var(--rd-table-foot-h, 28px))); }
|
||||
/* ── FACETS/RAIL COLUMNS BOUNDED IN PAGE-SCROLL MODE (BUG-DASHBOARD-BAND-GROWS-ENORMOUS) ──────
|
||||
THE ROOT CAUSE, one level up from the table rule above. .rd-facets/.rd-rail are authored
|
||||
height:100%, which is correct in the FIXED-VIEWPORT grid (rows sum to a real, bounded
|
||||
|
|
@ -607,7 +607,7 @@ useShadowStyles(`
|
|||
the surplus painted as the grey band the Driver reported between/under map and table, and
|
||||
made a divider drag look broken (the row would not follow, the slack just moved).
|
||||
ONE QUANTITY, ONE OWNER applies to fallbacks too: same var, same fallback, everywhere. */
|
||||
max-height:calc(var(--rd-shell-h, 582px) + 1px); }
|
||||
max-height:calc(var(--rd-shell-h, 562px) + 1px); }
|
||||
|
||||
/* ★ THE ELEMENT MUST SIZE TO ITS CONTENT IN PAGE-SCROLL (Driver 2026-09-23: "massive grey gap
|
||||
between map and table and the map overflows into the people-group grid page — the dashboard
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
import { inject, computed, ref } from 'vue'
|
||||
import { useShadowStyles } from '@map/composables/useShadowStyles.js'
|
||||
import { aggregate, buildDonut, buildBars, lbl, buildCountryRegionColors } from '../../composables/useDashboardAggregations.js'
|
||||
import { buildSearchAccessors, makeSearchMatcher } from '../../composables/useDashboardShell.js'
|
||||
import { buildSearchAccessors, makeSearchMatcher, filterRowsBySearch } from '../../composables/useDashboardShell.js'
|
||||
|
||||
/**
|
||||
* ── THE RAIL'S TAB STRIP ──────────────────────────────────────────────────────────────────────
|
||||
|
|
@ -55,7 +55,8 @@ function rowsExcluding(exclude) {
|
|||
const keys = Object.keys(filterSet).filter((k) => !exclude.includes(k))
|
||||
const hasText = !!(bus?.searchTerm?.value || '').trim()
|
||||
if (!keys.length && !hasText) return rows
|
||||
return rows.filter((r) => keys.every((k) => { const a = FACET_ACC[k]; return a ? a(r) === filterSet[k] : true }) && matchSearch(r))
|
||||
const faceted = rows.filter((r) => keys.every((k) => { const a = FACET_ACC[k]; return a ? a(r) === filterSet[k] : true }))
|
||||
return filterRowsBySearch(faceted, matchSearch)
|
||||
}
|
||||
|
||||
// COUNTRY -> REGION hue (the Driver's "countries should match the colour of their regions").
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
*/
|
||||
import { inject, ref, computed, watch, onMounted, onBeforeUnmount } from 'vue'
|
||||
import { useShadowStyles } from '@map/composables/useShadowStyles.js'
|
||||
import { buildSearchAccessors, makeSearchMatcher } from '../../composables/useDashboardShell.js'
|
||||
import { buildSearchAccessors, makeSearchMatcher, filterRowsBySearch } from '../../composables/useDashboardShell.js'
|
||||
import { useCsvExport } from '../../composables/useCsvExport.js'
|
||||
import { useTreeLegendLabels } from '../../composables/useTreeLegendLabels.js'
|
||||
|
||||
|
|
@ -104,7 +104,8 @@ const filtered = computed(() => {
|
|||
const keys = Object.keys(filterSet)
|
||||
const hasText = !!(bus?.searchTerm?.value || '').trim()
|
||||
if (!keys.length && !hasText) return allRows.value
|
||||
return allRows.value.filter((r) => keys.every((k) => matchFacet(r, k, filterSet[k])) && matchSearch(r))
|
||||
const faceted = allRows.value.filter((r) => keys.every((k) => matchFacet(r, k, filterSet[k])))
|
||||
return filterRowsBySearch(faceted, matchSearch)
|
||||
})
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
import { inject, ref, reactive, computed, onMounted } from 'vue'
|
||||
import { useShadowStyles } from '@map/composables/useShadowStyles.js'
|
||||
import { aggregate, lbl } from '../../composables/useDashboardAggregations.js'
|
||||
import { buildSearchAccessors, makeSearchMatcher } from '../../composables/useDashboardShell.js'
|
||||
import { buildSearchAccessors, makeSearchMatcher, filterRowsBySearch } from '../../composables/useDashboardShell.js'
|
||||
import { useTreeLegendColors } from '../../composables/useTreeLegendColors.js'
|
||||
import { useTreeLegendLabels } from '../../composables/useTreeLegendLabels.js'
|
||||
|
||||
|
|
@ -58,7 +58,8 @@ function rowsExcluding(exclude) {
|
|||
const keys = Object.keys(filterSet).filter((k) => !exclude.includes(k))
|
||||
const hasText = !!(bus?.searchTerm?.value || '').trim()
|
||||
if (!keys.length && !hasText) return rows
|
||||
return rows.filter((r) => keys.every((k) => { const a = FACET_ACC[k]; return a ? a(r) === filterSet[k] : true }) && matchSearch(r))
|
||||
const faceted = rows.filter((r) => keys.every((k) => { const a = FACET_ACC[k]; return a ? a(r) === filterSet[k] : true }))
|
||||
return filterRowsBySearch(faceted, matchSearch)
|
||||
}
|
||||
|
||||
// ── SECTION COLLAPSE STATE (BUG-DASHBOARD-BAND-GROWS-ENORMOUS-WITH-LIVE-DATA) ────────────────
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ import MapToolbar from '@map/components/map-controls/MapToolbar.vue'
|
|||
import ZoomInButton from '@map/components/map-controls/ZoomInButton.vue'
|
||||
import ZoomOutButton from '@map/components/map-controls/ZoomOutButton.vue'
|
||||
import { lbl } from '../../composables/useDashboardAggregations.js'
|
||||
import { buildSearchAccessors, makeSearchMatcher } from '../../composables/useDashboardShell.js'
|
||||
import { buildSearchAccessors, makeSearchMatcher, filterRowsBySearch } from '../../composables/useDashboardShell.js'
|
||||
// ── THE PRAYER COLOUR STRATEGY, REUSED NOT RE-DERIVED ──
|
||||
// applyColor() returns the SAME 3-tier expression the prayer map paints with, keyed off the
|
||||
// FULL_PRAYER_THRESHOLD that library/colors/prayer-progress.js owns. Importing it here means the
|
||||
|
|
@ -50,7 +50,8 @@ const filteredRows = computed(() => {
|
|||
const keys = Object.keys(filterSet)
|
||||
const hasText = !!(bus?.searchTerm?.value || '').trim()
|
||||
if (!keys.length && !hasText) return rows
|
||||
return rows.filter((r) => keys.every((k) => { const a = FACET_ACC[k]; return a ? a(r) === filterSet[k] : true }) && matchSearch(r))
|
||||
const faceted = rows.filter((r) => keys.every((k) => { const a = FACET_ACC[k]; return a ? a(r) === filterSet[k] : true }))
|
||||
return filterRowsBySearch(faceted, matchSearch)
|
||||
})
|
||||
// Geo join is config-driven: geoFacet selects the facet whose `geoIso` accessor yields the ISO-3 join
|
||||
// value (e.g. 'IND') for the choropleth, and whose `get` accessor yields the filter label (e.g. 'India').
|
||||
|
|
|
|||
|
|
@ -111,7 +111,10 @@ import { ref, unref, onMounted, onBeforeUnmount } from 'vue'
|
|||
// +40px again (Driver 2026-09-23 second raise: "go taller with the dashboard by another 40px,
|
||||
// add that to the height of the map"): shellH 542 -> 582 and mapH 300 -> 340 move together, so
|
||||
// the whole gain lands in the map row and the table's derived share stays put.
|
||||
const DEFAULTS = { facetW: 296, railW: 296, tableH: '34%', mapH: 340, shellH: 582 }
|
||||
// Driver fine-tune 2026-09-23: "almost perfect height -- keep the map the same height, but
|
||||
// decrease the height of the dashboard by about 20px". Map stays 340; the 20px comes out of
|
||||
// the table's derived share (shell - map - bar - foot).
|
||||
const DEFAULTS = { facetW: 296, railW: 296, tableH: '34%', mapH: 340, shellH: 562 }
|
||||
const CLAMPS = { facetW: [160, 420], railW: [200, 520], tableH: [12, 70], mapH: [220, 1400], shellH: [400, 2600] }
|
||||
|
||||
// Mirrors the CSS fallback --rd-table-bar-h (research-dashboard.vue's .rd-table-bar budget calc) —
|
||||
|
|
@ -141,7 +144,7 @@ export function useDashboardLayout(options = {}) {
|
|||
// fresh drag re-personalises from there. The v1 blob is left in place, inert.
|
||||
// v2 -> v3: retire stored layouts so the new 542 default is actually SEEN -- a persisted
|
||||
// shellH:502 from the previous default would silently mask this change on the Driver's browser.
|
||||
storageKey = 'rd-dashboard-layout-v5',
|
||||
storageKey = 'rd-dashboard-layout-v6',
|
||||
} = options
|
||||
|
||||
const defaults = { ...DEFAULTS, ...(options.defaults || {}) }
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
* responsive switch, collapsible table dock, segmented mobile view, and the location.hash sync.
|
||||
* Only the SOURCE of the per-dashboard constants changed: from hard-coded → config.
|
||||
*/
|
||||
import { fuzzyMatches } from '@map/components/search/fuzzy.js'
|
||||
import { exactMatches, fuzzyMatches } from '@map/components/search/fuzzy.js'
|
||||
import { provide, ref, computed, watch, onMounted, onBeforeUnmount } from 'vue'
|
||||
import { createSelectionBus } from './useSelectionBus.js'
|
||||
import { useDashboardData } from './useDashboardData.js'
|
||||
|
|
@ -67,15 +67,29 @@ export function makeSearchMatcher(bus, accessors) {
|
|||
// silently lost that behaviour in the migration (measured: 'Bhutan' 13 rows, 'Bhutann' 0).
|
||||
// It now delegates to the shared fuzzyMatches() in @map fuzzy.js -- the same matcher the
|
||||
// grid's Fuse uses -- with the same DX-life options, so every search surface agrees.
|
||||
return (row) => {
|
||||
// Row-level predicates for the TIERED contract (see fuzzy.js exactMatches): the caller
|
||||
// (filterRowsBySearch below) runs the exact tier over the whole row set first and falls back
|
||||
// to the fuzzy tier only when exact yields nothing, so an exact term agrees with the facet.
|
||||
const test = (row, pred) => {
|
||||
const needle = (bus?.searchTerm?.value || '').trim()
|
||||
if (!needle) return true
|
||||
for (const acc of accessors) {
|
||||
const v = acc(row)
|
||||
if (v != null && fuzzyMatches(String(v), needle, { threshold: 0.4, minMatchCharLength: 3 })) return true
|
||||
if (v != null && pred(String(v), needle, { threshold: 0.4, minMatchCharLength: 3 })) return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
const matcher = (row) => test(row, fuzzyMatches)
|
||||
matcher.exact = (row) => test(row, exactMatches)
|
||||
matcher.active = () => !!(bus?.searchTerm?.value || '').trim()
|
||||
return matcher
|
||||
}
|
||||
|
||||
/** Apply the tiered search to a row set: exact tier first, fuzzy only as the typo rescue. */
|
||||
export function filterRowsBySearch(rows, matcher) {
|
||||
if (!matcher.active()) return rows
|
||||
const exact = rows.filter(matcher.exact)
|
||||
return exact.length ? exact : rows.filter(matcher)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -248,9 +262,11 @@ export function useDashboardShell(config) {
|
|||
const keys = Object.keys(bus.filterSet)
|
||||
const hasText = !!(bus.searchTerm?.value || '').trim()
|
||||
if (!keys.length && !hasText) return rows
|
||||
return rows.filter((r) =>
|
||||
keys.every((k) => { const a = FACET_ACC[k]; return a ? a(r) === bus.filterSet[k] : true }) && matchSearch(r)
|
||||
)
|
||||
const faceted = keys.length
|
||||
? rows.filter((r) => keys.every((k) => { const a = FACET_ACC[k]; return a ? a(r) === bus.filterSet[k] : true }))
|
||||
: rows
|
||||
// Tiered search over the faceted scope: exact first, fuzzy only if exact finds nothing.
|
||||
return filterRowsBySearch(faceted, matchSearch)
|
||||
})
|
||||
|
||||
// linked KPI strip — recomputes on every brush.
|
||||
|
|
|
|||
12
public/doxa-maps/big-picture/big-picture.js
generated
12
public/doxa-maps/big-picture/big-picture.js
generated
File diff suppressed because one or more lines are too long
|
|
@ -37,7 +37,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <bp-big-picture> custom element. -->
|
||||
<script src="../../big-picture.js" integrity="sha384-MG/HIBfHvBjodOyOgVlzhgK5sZhEg2BI4DGPBc7yUmjGM9CDWI5JMvQh9nHRbJz4" crossorigin="anonymous"></script>
|
||||
<script src="../../big-picture.js" integrity="sha384-LcTqxsi0hgbx7m3gsJQwpYSZkCHP1KDLkwUmBknrOBo6vvPxS10MhozDcVCdCwMG" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <bp-big-picture> custom element. -->
|
||||
<script src="../../big-picture.js" integrity="sha384-MG/HIBfHvBjodOyOgVlzhgK5sZhEg2BI4DGPBc7yUmjGM9CDWI5JMvQh9nHRbJz4" crossorigin="anonymous"></script>
|
||||
<script src="../../big-picture.js" integrity="sha384-LcTqxsi0hgbx7m3gsJQwpYSZkCHP1KDLkwUmBknrOBo6vvPxS10MhozDcVCdCwMG" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <bp-big-picture> custom element. -->
|
||||
<script src="../big-picture.js" integrity="sha384-MG/HIBfHvBjodOyOgVlzhgK5sZhEg2BI4DGPBc7yUmjGM9CDWI5JMvQh9nHRbJz4" crossorigin="anonymous"></script>
|
||||
<script src="../big-picture.js" integrity="sha384-LcTqxsi0hgbx7m3gsJQwpYSZkCHP1KDLkwUmBknrOBo6vvPxS10MhozDcVCdCwMG" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@
|
|||
(function () {
|
||||
var slot = document.getElementById('slot');
|
||||
var status = document.getElementById('status');
|
||||
var BASE_CONFIG = {"profile":"connectivity-map","dataSource":"pray-tools","instanceId":"cities-internet-connectivity-map","assetsBase":"../../assets"};
|
||||
var BASE_CONFIG = {"pinHint":false,"profile":"connectivity-map","dataSource":"pray-tools","instanceId":"cities-internet-connectivity-map","assetsBase":"../../assets"};
|
||||
// MapLibre map pages AND shell pages (app-shell / nested-mfe-spa) need NO token:
|
||||
// the ladder below is skipped entirely and the element mounts immediately.
|
||||
var TOKEN_FREE = false;
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -40,7 +40,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <dashboard-plus-grid> custom element. -->
|
||||
<script src="../../dashboard-plus-grid.js" integrity="sha384-w7w880pSJskqw4YryC9Fvmcnidv6poXCA8z7PjyNzsTeSOc7yBHkYnKi2gZAVKY1" crossorigin="anonymous"></script>
|
||||
<script src="../../dashboard-plus-grid.js" integrity="sha384-RwMGtLXZFtctic8xn5T2NZgovHMoiebxlDlXF6ywWqYIaei+Dr6Ujt+Zuf0HoS7X" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <dashboard-plus-grid> custom element. -->
|
||||
<script src="../dashboard-plus-grid.js" integrity="sha384-w7w880pSJskqw4YryC9Fvmcnidv6poXCA8z7PjyNzsTeSOc7yBHkYnKi2gZAVKY1" crossorigin="anonymous"></script>
|
||||
<script src="../dashboard-plus-grid.js" integrity="sha384-RwMGtLXZFtctic8xn5T2NZgovHMoiebxlDlXF6ywWqYIaei+Dr6Ujt+Zuf0HoS7X" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@
|
|||
(function () {
|
||||
var slot = document.getElementById('slot');
|
||||
var status = document.getElementById('status');
|
||||
var BASE_CONFIG = {"profile":"resources-map","dataSource":"pray-tools","instanceId":"gospel-resources-resources-map","assetsBase":"../../assets"};
|
||||
var BASE_CONFIG = {"pinHint":false,"profile":"resources-map","dataSource":"pray-tools","instanceId":"gospel-resources-resources-map","assetsBase":"../../assets"};
|
||||
// MapLibre map pages AND shell pages (app-shell / nested-mfe-spa) need NO token:
|
||||
// the ladder below is skipped entirely and the element mounts immediately.
|
||||
var TOKEN_FREE = false;
|
||||
|
|
|
|||
2
public/doxa-maps/index.html
generated
2
public/doxa-maps/index.html
generated
File diff suppressed because one or more lines are too long
16
public/doxa-maps/manifest.json
generated
16
public/doxa-maps/manifest.json
generated
|
|
@ -35,7 +35,7 @@
|
|||
"bundle": "big-picture",
|
||||
"scriptUrl": "./big-picture/big-picture.js",
|
||||
"output": "doxa-maps/big-picture/big-picture.js",
|
||||
"integrity": "sha384-MG/HIBfHvBjodOyOgVlzhgK5sZhEg2BI4DGPBc7yUmjGM9CDWI5JMvQh9nHRbJz4",
|
||||
"integrity": "sha384-LcTqxsi0hgbx7m3gsJQwpYSZkCHP1KDLkwUmBknrOBo6vvPxS10MhozDcVCdCwMG",
|
||||
"elements": [
|
||||
"bp-big-picture",
|
||||
"bp-research-header",
|
||||
|
|
@ -57,7 +57,7 @@
|
|||
"scriptUrl": "./big-picture/big-picture.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./big-picture/big-picture/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=\"./big-picture/big-picture.js\" integrity=\"sha384-MG/HIBfHvBjodOyOgVlzhgK5sZhEg2BI4DGPBc7yUmjGM9CDWI5JMvQh9nHRbJz4\" crossorigin=\"anonymous\"></script>\n<bp-big-picture profile-config='{\"profile\":\"big-picture\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></bp-big-picture>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./big-picture/big-picture.js\" integrity=\"sha384-LcTqxsi0hgbx7m3gsJQwpYSZkCHP1KDLkwUmBknrOBo6vvPxS10MhozDcVCdCwMG\" crossorigin=\"anonymous\"></script>\n<bp-big-picture profile-config='{\"profile\":\"big-picture\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></bp-big-picture>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -193,7 +193,7 @@
|
|||
"bundle": "dashboard-plus-grid",
|
||||
"scriptUrl": "./dashboard-plus-grid/dashboard-plus-grid.js",
|
||||
"output": "doxa-maps/dashboard-plus-grid/dashboard-plus-grid.js",
|
||||
"integrity": "sha384-w7w880pSJskqw4YryC9Fvmcnidv6poXCA8z7PjyNzsTeSOc7yBHkYnKi2gZAVKY1",
|
||||
"integrity": "sha384-RwMGtLXZFtctic8xn5T2NZgovHMoiebxlDlXF6ywWqYIaei+Dr6Ujt+Zuf0HoS7X",
|
||||
"elements": [
|
||||
"dashboard-plus-grid"
|
||||
],
|
||||
|
|
@ -213,7 +213,7 @@
|
|||
"scriptUrl": "./dashboard-plus-grid/dashboard-plus-grid.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./dashboard-plus-grid/dashboard-plus-grid/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=\"./dashboard-plus-grid/dashboard-plus-grid.js\" integrity=\"sha384-w7w880pSJskqw4YryC9Fvmcnidv6poXCA8z7PjyNzsTeSOc7yBHkYnKi2gZAVKY1\" crossorigin=\"anonymous\"></script>\n<dashboard-plus-grid profile-config='{\"profile\":\"dashboard-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></dashboard-plus-grid>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./dashboard-plus-grid/dashboard-plus-grid.js\" integrity=\"sha384-RwMGtLXZFtctic8xn5T2NZgovHMoiebxlDlXF6ywWqYIaei+Dr6Ujt+Zuf0HoS7X\" crossorigin=\"anonymous\"></script>\n<dashboard-plus-grid profile-config='{\"profile\":\"dashboard-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></dashboard-plus-grid>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -680,7 +680,7 @@
|
|||
"bundle": "people-groups-grid",
|
||||
"scriptUrl": "./people-groups-grid/people-groups-grid.js",
|
||||
"output": "doxa-maps/people-groups-grid/people-groups-grid.js",
|
||||
"integrity": "sha384-SKWGRiLzac7kgXqwKmZ6zztgnwonaWQuelRXos+pToKjq9s7H1DgpKb/t+4zVsIq",
|
||||
"integrity": "sha384-ktuMhVzpB05It1q3/X0mtY6H9bbjBSeamFjKx0BoQu1DuoNXNZBtDNs9itrbcHPG",
|
||||
"elements": [
|
||||
"people-groups-grid"
|
||||
],
|
||||
|
|
@ -696,7 +696,7 @@
|
|||
"scriptUrl": "./people-groups-grid/people-groups-grid.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./people-groups-grid/people-groups-grid/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=\"./people-groups-grid/people-groups-grid.js\" integrity=\"sha384-SKWGRiLzac7kgXqwKmZ6zztgnwonaWQuelRXos+pToKjq9s7H1DgpKb/t+4zVsIq\" crossorigin=\"anonymous\"></script>\n<people-groups-grid profile-config='{\"profile\":\"people-groups-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></people-groups-grid>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./people-groups-grid/people-groups-grid.js\" integrity=\"sha384-ktuMhVzpB05It1q3/X0mtY6H9bbjBSeamFjKx0BoQu1DuoNXNZBtDNs9itrbcHPG\" crossorigin=\"anonymous\"></script>\n<people-groups-grid profile-config='{\"profile\":\"people-groups-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></people-groups-grid>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -878,7 +878,7 @@
|
|||
"bundle": "research-dashboard",
|
||||
"scriptUrl": "./research-dashboard/research-dashboard.js",
|
||||
"output": "doxa-maps/research-dashboard/research-dashboard.js",
|
||||
"integrity": "sha384-uYPQZjDB+0BMyy/Vit6cXnhYiBLVAsqMGWzdYnczTXdMR9OCCLTXFbwUL3GE7pGd",
|
||||
"integrity": "sha384-9/hF/6WuV7HVDQuZS1MbAOJCtvh+RsNVEcRoPBTbfTn8SUNYnW2A46OY8EXcznsO",
|
||||
"elements": [
|
||||
"research-dashboard-map"
|
||||
],
|
||||
|
|
@ -894,7 +894,7 @@
|
|||
"scriptUrl": "./research-dashboard/research-dashboard.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./research-dashboard/research-dashboard/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=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-uYPQZjDB+0BMyy/Vit6cXnhYiBLVAsqMGWzdYnczTXdMR9OCCLTXFbwUL3GE7pGd\" crossorigin=\"anonymous\"></script>\n<research-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></research-dashboard-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-9/hF/6WuV7HVDQuZS1MbAOJCtvh+RsNVEcRoPBTbfTn8SUNYnW2A46OY8EXcznsO\" crossorigin=\"anonymous\"></script>\n<research-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></research-dashboard-map>"
|
||||
},
|
||||
"bundle": "research-dashboard"
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <people-groups-grid> custom element. -->
|
||||
<script src="../../people-groups-grid.js" integrity="sha384-SKWGRiLzac7kgXqwKmZ6zztgnwonaWQuelRXos+pToKjq9s7H1DgpKb/t+4zVsIq" crossorigin="anonymous"></script>
|
||||
<script src="../../people-groups-grid.js" integrity="sha384-ktuMhVzpB05It1q3/X0mtY6H9bbjBSeamFjKx0BoQu1DuoNXNZBtDNs9itrbcHPG" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <people-groups-grid> custom element. -->
|
||||
<script src="../people-groups-grid.js" integrity="sha384-SKWGRiLzac7kgXqwKmZ6zztgnwonaWQuelRXos+pToKjq9s7H1DgpKb/t+4zVsIq" crossorigin="anonymous"></script>
|
||||
<script src="../people-groups-grid.js" integrity="sha384-ktuMhVzpB05It1q3/X0mtY6H9bbjBSeamFjKx0BoQu1DuoNXNZBtDNs9itrbcHPG" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <people-groups-grid> custom element. -->
|
||||
<script src="../../people-groups-grid.js" integrity="sha384-SKWGRiLzac7kgXqwKmZ6zztgnwonaWQuelRXos+pToKjq9s7H1DgpKb/t+4zVsIq" crossorigin="anonymous"></script>
|
||||
<script src="../../people-groups-grid.js" integrity="sha384-ktuMhVzpB05It1q3/X0mtY6H9bbjBSeamFjKx0BoQu1DuoNXNZBtDNs9itrbcHPG" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <research-dashboard-map> custom element. -->
|
||||
<script src="../research-dashboard.js" integrity="sha384-uYPQZjDB+0BMyy/Vit6cXnhYiBLVAsqMGWzdYnczTXdMR9OCCLTXFbwUL3GE7pGd" crossorigin="anonymous"></script>
|
||||
<script src="../research-dashboard.js" integrity="sha384-9/hF/6WuV7HVDQuZS1MbAOJCtvh+RsNVEcRoPBTbfTn8SUNYnW2A46OY8EXcznsO" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
Loading…
Reference in a new issue