Gospel x Internet: four charts that each answer a question, and show the gaps
Each chart's title is its question, its subtitle says what a bar is and counts, and a computed takeaway answers it in words. 1: what they have in their own language. 2: the largest people groups with nothing in their own language, by name (7 of the 8 largest on the roster are Deaf communities). 3: of those with nothing, how many live where the country is online. 4: which languages most need the New Testament, by people who speak them (736 languages, 153 million people). The stacked chart, the social platform chart and the app chart are gone: no readable answer, or not a gap.
This commit is contained in:
parent
e015974e0c
commit
af2e609ddb
12 changed files with 139 additions and 105 deletions
|
|
@ -97,6 +97,12 @@ try {
|
|||
const fam = treeDoc.nodes.filter((n) => !n.p).sort((x, y) => 0)[0]
|
||||
const famNode = (() => { const ix = M.indexTree(treeDoc); return ix.nodes.filter((n) => !n.p).sort((x, y) => ix.isos.get(y.id).size - ix.isos.get(x.id).size)[0] })()
|
||||
ok(/data-chip="language"/.test(en.html) && en.html.includes(famNode.n), `en: the kit chip names the tree node (${famNode.n})`)
|
||||
// the charts answer their question in words (the harness narrows to a family first, so assert the
|
||||
// takeaways' FORM and that the gap charts name real groups/languages, not the roster's totals)
|
||||
const plain = en.html.replace(/<!--[\s\S]*?-->/g, '')
|
||||
ok(/\d[\d,]* of the \d[\d,]* with nothing live in countries/.test(plain) && !POISON, 'en: chart 3 states its takeaway')
|
||||
ok(/data-chart="gaps"[\s\S]*?These \d+ alone are [\d,]+ people/.test(plain), 'en: the gap chart names its groups and totals them')
|
||||
ok(/data-chart="ntNeed"[\s\S]*?languages here have no New Testament found/.test(plain), 'en: the New Testament chart states its takeaway')
|
||||
ok(new RegExp('data-combo="digital-now"[^>]*>\\s*<span>[^<]+</span><span class="gic2-n">' + (POISON ? 'x' : '220')).test(en.html), 'en: a combination shows its live count (digital-now = 220)')
|
||||
void fam
|
||||
const ar = await render('ar')
|
||||
|
|
|
|||
|
|
@ -1,72 +1,98 @@
|
|||
<script setup>
|
||||
/**
|
||||
* GiCharts.vue — the right rail: the "bridge through the internet" picture in two charts, over the rows
|
||||
* in scope (they follow the facets, like every panel).
|
||||
* 1. In their own language x country internet band — stacked bars, groups or people.
|
||||
* 2. Nothing in their own language, by band — the zero-access front door.
|
||||
* The library's BarChart draws both (hand-rolled SVG, no chart CDN: a third-party request from a
|
||||
* persecuted reader's device is a safety leak). A bar is a filter: clicking one toggles that band.
|
||||
* GiCharts.vue — the right rail: FOUR charts, each answering one plain question about the groups shown,
|
||||
* chosen to show a newcomer the GAPS they would not otherwise see (Driver, 2026-09-27: "a reader can't
|
||||
* tell what they're saying"; "showcase the gaps ... the biggest, most helpful, clearest data"). Each
|
||||
* carries its question as the title, says what one bar is and what it counts, and ends in a one-line
|
||||
* takeaway computed from the same rows.
|
||||
* 1. What do they have in their own language? one bar per level of access
|
||||
* 2. The largest people groups with nothing the 8 biggest gaps, by name (click opens one)
|
||||
* 3. Could the internet carry it to those with nothing? by how much of their country is online
|
||||
* 4. Which languages most need the New Testament? languages with none found, by people who speak them
|
||||
* Dropped: a stacked access x band chart (five colours on four bars, no readable answer), a social
|
||||
* platform chart and a messaging-app chart (channels, not gaps: the facets and drawer carry them).
|
||||
* They follow the facets like every panel; a bar is a filter (click to narrow the board to it).
|
||||
*/
|
||||
import { ref, computed } from 'vue'
|
||||
import { ref, computed, onMounted } from 'vue'
|
||||
import BarChart from '@map/components/charts/BarChart.vue'
|
||||
import { useShadowStyles } from '@map/composables/useShadowStyles.js'
|
||||
import { useBoardState } from '../useBoard.js'
|
||||
import { useGiT } from '../useGiT.js'
|
||||
import { accessByBand, countriesBy, ACCESS_DETAILS, BANDS, DETAIL_FILL, label } from '../model.js'
|
||||
import { ACCESS_DETAILS, BANDS, DETAIL_FILL, BAND_COLOR, TREE_COLOR, label } from '../model.js'
|
||||
|
||||
const T = useGiT()
|
||||
const board = useBoardState()
|
||||
const { bus } = board
|
||||
const measure = ref('groups')
|
||||
const fmt = (v) => (Number(v) || 0).toLocaleString()
|
||||
|
||||
// The 'none' segment is drawn in the rim colour: a white segment on a white chart would be invisible.
|
||||
const SEG_COLOR = { ...DETAIL_FILL, none: '#7d3b30' }
|
||||
const stack = computed(() => {
|
||||
const m = accessByBand(board.filtered.value, measure.value)
|
||||
return BANDS.map((b) => {
|
||||
const segs = ACCESS_DETAILS.map((d) => ({ label: label(T, 'detail', d), value: m[b][d], color: SEG_COLOR[d] }))
|
||||
return { label: label(T, 'band', b), value: segs.reduce((s, x) => s + x.value, 0), segments: segs, meta: { band: b } }
|
||||
})
|
||||
})
|
||||
const legend = computed(() => ACCESS_DETAILS.map((d) => ({ label: label(T, 'detail', d), color: SEG_COLOR[d] })))
|
||||
|
||||
const zero = computed(() => {
|
||||
const rows = board.filtered.value.filter((r) => r.access_detail === 'none')
|
||||
return BANDS.map((b) => {
|
||||
const inBand = rows.filter((r) => r.internet_band === b)
|
||||
const people = inBand.reduce((s, r) => s + (Number(r.population) || 0), 0)
|
||||
return { label: label(T, 'band', b), value: measure.value === 'people' ? people : inBand.length,
|
||||
note: measure.value === 'people' ? T('gospelInternet.charts.groupsN', '{n} groups', { n: fmt(inBand.length) }) : T('gospelInternet.charts.peopleN', '{n} people', { n: fmt(people) }),
|
||||
color: '#7d3b30', meta: { band: b } }
|
||||
})
|
||||
})
|
||||
// Charts 3 and 4: which apps would carry a resource into the countries in scope. Counted by COUNTRY,
|
||||
// and each source's own caveat is printed under its chart (verbatim from the table's meta).
|
||||
const notInFeed = () => T('gospelInternet.charts.notMeasured', 'Not measured')
|
||||
const appSeries = computed(() => countriesBy(board.filtered.value, board.countries.value, (c) => c && c.top_messaging)
|
||||
.map((e) => ({ label: e.value || notInFeed(), value: e.n, color: e.value ? '#3b463d' : '#9aa2ad', meta: { app: e.value } })))
|
||||
const socialSeries = computed(() => countriesBy(board.filtered.value, board.countries.value, (c) => c && c.social && c.social[0] && c.social[0].platform)
|
||||
.map((e) => ({ label: e.value || notInFeed(), value: e.n, color: e.value ? '#92b195' : '#9aa2ad' })))
|
||||
const pmeta = computed(() => board.meta.value.platforms || {})
|
||||
const unitCountries = computed(() => T('gospelInternet.charts.unitCountries', 'countries'))
|
||||
function onApp(row) { const a = row && row.meta && row.meta.app; if (a) bus.toggleFilterValue('messaging', a) }
|
||||
const platformsFirst = computed(() => board.view.value === 'platforms')
|
||||
|
||||
const count = (rs) => measure.value === 'people' ? rs.reduce((s, r) => s + (Number(r.population) || 0), 0) : rs.length
|
||||
const unit = computed(() => measure.value === 'people' ? T('gospelInternet.charts.unitPeople', 'people') : T('gospelInternet.charts.unitGroups', 'people groups'))
|
||||
function onBar(row) { const b = row && row.meta && row.meta.band; if (b) bus.toggleFilterValue('band', b) }
|
||||
const rows = computed(() => board.filtered.value)
|
||||
|
||||
// 1 ─ what they have in their own language
|
||||
const SEG_COLOR = { ...DETAIL_FILL, none: '#7d3b30' } // a white bar would vanish on white
|
||||
const q1 = computed(() => ACCESS_DETAILS.map((d) => {
|
||||
const rs = rows.value.filter((r) => r.access_detail === d)
|
||||
return { label: label(T, 'detail', d), value: count(rs), color: SEG_COLOR[d], meta: { key: 'access_detail', value: d } }
|
||||
}))
|
||||
const q1take = computed(() => {
|
||||
const none = rows.value.filter((r) => r.access_detail === 'none').length
|
||||
return T('gospelInternet.charts.q1take', '{n} of {total} people groups shown have nothing found in their own language.', { n: fmt(none), total: fmt(rows.value.length) })
|
||||
})
|
||||
|
||||
// 2 ─ could the internet carry it to those with nothing?
|
||||
const zero = computed(() => rows.value.filter((r) => r.access_detail === 'none'))
|
||||
const q2 = computed(() => BANDS.map((b) => {
|
||||
const rs = zero.value.filter((r) => r.internet_band === b)
|
||||
return { label: label(T, 'band', b), value: count(rs), color: BAND_COLOR[b], meta: { key: 'band', value: b } }
|
||||
}))
|
||||
const q2take = computed(() => {
|
||||
const online = zero.value.filter((r) => r.internet_band === 'yes').length
|
||||
return T('gospelInternet.charts.q2take', '{online} of the {n} with nothing live in countries where 60% or more use the internet.', { online: fmt(online), n: fmt(zero.value.length) })
|
||||
})
|
||||
|
||||
// 2 ─ the largest people groups with nothing in their own language: the biggest gaps, by name
|
||||
const TOP = 8
|
||||
const gaps = computed(() => [...zero.value].sort((a, b) => (Number(b.population) || 0) - (Number(a.population) || 0)).slice(0, TOP))
|
||||
const gapSeries = computed(() => gaps.value.map((r) => ({ label: `${r.people_group} (${r.iso3})`, value: Number(r.population) || 0, color: SEG_COLOR.none, meta: { open: r.slug } })))
|
||||
const gapTake = computed(() => T('gospelInternet.charts.gapTake', 'These {k} alone are {people} people.', { k: fmt(gaps.value.length), people: fmt(gaps.value.reduce((s, r) => s + (Number(r.population) || 0), 0)) }))
|
||||
|
||||
// 4 ─ which languages most need the New Testament? (status per language comes from the language tree)
|
||||
onMounted(() => { board.loadTree().catch(() => {}) })
|
||||
const ntNeed = computed(() => {
|
||||
const ix = board.tree.value
|
||||
if (!ix) return []
|
||||
const by = new Map()
|
||||
for (const r of rows.value) {
|
||||
const node = ix.byId.get(ix.nodeOfIso.get(r.iso639_3))
|
||||
if (!node || node.st === 'g') continue
|
||||
const e = by.get(r.iso639_3) || { iso: r.iso639_3, name: r.language, st: node.st, people: 0 }
|
||||
e.people += Number(r.population) || 0
|
||||
by.set(r.iso639_3, e)
|
||||
}
|
||||
return [...by.values()].sort((a, b) => b.people - a.people)
|
||||
})
|
||||
const ntSeries = computed(() => ntNeed.value.slice(0, TOP).map((e) => ({ label: `${e.name} (${e.iso})`, value: e.people, color: TREE_COLOR[e.st], meta: { key: 'language', value: e.iso } })))
|
||||
const ntTake = computed(() => T('gospelInternet.charts.ntTake', '{n} languages here have no New Testament found, spoken by {people} people.', { n: fmt(ntNeed.value.length), people: fmt(ntNeed.value.reduce((s, e) => s + e.people, 0)) }))
|
||||
|
||||
function onBar(row) {
|
||||
const m = row && row.meta
|
||||
if (!m) return
|
||||
if (m.open) board.openGroup(m.open)
|
||||
else bus.toggleFilterValue(m.key, m.value)
|
||||
}
|
||||
|
||||
useShadowStyles(
|
||||
'.gic{display:flex;flex-direction:column;height:100%;overflow-y:auto;box-sizing:border-box;padding:10px 12px 16px;background:#fff;color:#3b463d;font:13px/1.35 Roboto,-apple-system,"Segoe UI",sans-serif;scrollbar-width:thin}' +
|
||||
'.gic-seg{display:inline-flex;border:1px solid #d1d4cd;border-radius:6px;overflow:hidden;margin-bottom:8px}' +
|
||||
'.gic-seg button{font:inherit;font-size:12px;padding:4px 12px;min-height:26px;border:0;background:#fff;color:#3b463d;cursor:pointer}' +
|
||||
'.gic-seg button[aria-pressed="true"]{background:#3b463d;color:#fff}' +
|
||||
'.gic-seg button:focus-visible{outline:2px solid #92b195;outline-offset:-2px}' +
|
||||
'.gic-seg{align-self:flex-start;order:-1}' +
|
||||
'.gic{display:flex;flex-direction:column;gap:4px;height:100%;overflow-y:auto;box-sizing:border-box;padding:10px 12px 16px;background:#fff;color:#3b463d;font:13px/1.35 Roboto,-apple-system,"Segoe UI",sans-serif;scrollbar-width:thin}' +
|
||||
// A flex column's children SHRINK by default: inside this scroll box they were squeezed instead of
|
||||
// scrolled, so the measure toggle collapsed to a 2px line and a caveat card was cut in half (rega).
|
||||
'.gic > *{flex-shrink:0}' +
|
||||
'.gic-card{border-bottom:1px solid #e6e8e3;padding:6px 0 12px;margin-bottom:6px}',
|
||||
'.gic-seg{align-self:flex-start;display:inline-flex;border:1px solid #d1d4cd;border-radius:6px;overflow:hidden;margin-bottom:4px}' +
|
||||
'.gic-seg button{font:inherit;font-size:12px;padding:4px 12px;min-height:26px;border:0;background:#fff;color:#3b463d;cursor:pointer}' +
|
||||
'.gic-seg button[aria-pressed="true"]{background:#3b463d;color:#fff}' +
|
||||
'.gic-seg button:focus-visible{outline:2px solid #92b195;outline-offset:-2px}' +
|
||||
'.gic-card{border-bottom:1px solid #e6e8e3;padding:4px 0 12px}' +
|
||||
'.gic-take{margin:4px 0 0;font-size:12.5px;font-weight:600;color:#3b463d}',
|
||||
'gi-charts',
|
||||
)
|
||||
</script>
|
||||
|
|
@ -77,32 +103,34 @@ useShadowStyles(
|
|||
<button type="button" :aria-pressed="measure === 'groups'" @click="measure = 'groups'">{{ T('gospelInternet.charts.groups', 'Groups') }}</button>
|
||||
<button type="button" :aria-pressed="measure === 'people'" @click="measure = 'people'">{{ T('gospelInternet.charts.people', 'People') }}</button>
|
||||
</div>
|
||||
<div class="gic-card" :style="{ order: platformsFirst ? 0 : 3 }">
|
||||
<BarChart :series="appSeries" :unit="unitCountries" :bar-height="18" :gap="6" :label-width="130"
|
||||
:title="T('gospelInternet.charts.messagingTop', 'Top messaging app, by country in scope')"
|
||||
:caveats="[pmeta.ios_caveat, pmeta.ranking_caveat, pmeta.classification_caveat].filter(Boolean)"
|
||||
:empty-text="T('gospelInternet.grid.empty', 'No people groups match these filters.')"
|
||||
@bar-click="onApp" />
|
||||
<div class="gic-card" data-chart="q1">
|
||||
<BarChart :series="q1" :unit="unit" :bar-height="18" :gap="6" :label-width="130"
|
||||
:title="T('gospelInternet.charts.q1title', 'What do they have in their own language?')"
|
||||
:subtitle="T('gospelInternet.charts.q1sub', 'One bar per level of access, for the people groups shown.')"
|
||||
:empty-text="T('gospelInternet.grid.empty', 'No people groups match these filters.')" @bar-click="onBar" />
|
||||
<p class="gic-take">{{ q1take }}</p>
|
||||
</div>
|
||||
<div class="gic-card" :style="{ order: platformsFirst ? 0 : 4 }">
|
||||
<BarChart :series="socialSeries" :unit="unitCountries" :bar-height="18" :gap="6" :label-width="130"
|
||||
:title="T('gospelInternet.charts.socialTop', 'Top social platform, by country in scope')"
|
||||
:caveats="[pmeta.social_caveat].filter(Boolean)"
|
||||
:empty-text="T('gospelInternet.grid.empty', 'No people groups match these filters.')" />
|
||||
<div class="gic-card" data-chart="gaps">
|
||||
<BarChart :series="gapSeries" :unit="T('gospelInternet.charts.unitPeople', 'people')" :bar-height="18" :gap="6" :label-width="130"
|
||||
:title="T('gospelInternet.charts.gapTitle', 'The largest people groups with nothing in their own language')"
|
||||
:subtitle="T('gospelInternet.charts.gapSub', 'The 8 biggest of those shown, by population. Click one to open it.')"
|
||||
:empty-text="T('gospelInternet.grid.empty', 'No people groups match these filters.')" @bar-click="onBar" />
|
||||
<p v-if="gaps.length" class="gic-take">{{ gapTake }}</p>
|
||||
</div>
|
||||
<div class="gic-card" style="order:1">
|
||||
<BarChart :series="stack" :legend="legend" :unit="unit" :bar-height="20" :gap="8" :label-width="130"
|
||||
:title="T('gospelInternet.charts.accessByBand', 'Own-language access, by country internet use')"
|
||||
<div class="gic-card" data-chart="q2">
|
||||
<BarChart :series="q2" :unit="unit" :bar-height="18" :gap="6" :label-width="130"
|
||||
:title="T('gospelInternet.charts.q2title', 'Could the internet carry it to those with nothing?')"
|
||||
:subtitle="T('gospelInternet.charts.q2sub', 'People groups with nothing in their own language, by how much of their country is online.')"
|
||||
:caveats="[T('gospelInternet.charts.bandCaveat', 'Internet use is the country\'s figure (World Bank), never the group\'s.')]"
|
||||
:empty-text="T('gospelInternet.grid.empty', 'No people groups match these filters.')"
|
||||
@bar-click="onBar" />
|
||||
:empty-text="T('gospelInternet.grid.empty', 'No people groups match these filters.')" @bar-click="onBar" />
|
||||
<p v-if="zero.length" class="gic-take">{{ q2take }}</p>
|
||||
</div>
|
||||
<div class="gic-card" style="order:2">
|
||||
<BarChart :series="zero" :unit="unit" :bar-height="20" :gap="8" :label-width="130" color="#7d3b30"
|
||||
:title="T('gospelInternet.charts.zeroByBand', 'Nothing in their own language, by country internet use')"
|
||||
:caveats="[T('gospelInternet.charts.zeroCaveat', 'Every one of these has a way in: a bridge language, a candidate or a Deaf bridge.')]"
|
||||
:empty-text="T('gospelInternet.grid.empty', 'No people groups match these filters.')"
|
||||
@bar-click="onBar" />
|
||||
<div class="gic-card" data-chart="ntNeed">
|
||||
<BarChart :series="ntSeries" :unit="T('gospelInternet.charts.unitPeople', 'people')" :bar-height="18" :gap="6" :label-width="130"
|
||||
:title="T('gospelInternet.charts.ntTitle', 'Which languages most need the New Testament?')"
|
||||
:subtitle="T('gospelInternet.charts.ntSub', 'Languages of the groups shown with no New Testament found, by how many people speak them. Red: nothing at all; yellow: something, but no New Testament.')"
|
||||
:empty-text="T('grid.loading', 'Loading…')" @bar-click="onBar" />
|
||||
<p v-if="ntNeed.length" class="gic-take">{{ ntTake }}</p>
|
||||
</div>
|
||||
</aside>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -604,7 +604,7 @@
|
|||
"bundle": "gospel-internet",
|
||||
"scriptUrl": "./gospel-internet/gospel-internet.js",
|
||||
"output": "dx-maps/gospel-internet/gospel-internet.js",
|
||||
"integrity": "sha384-DeFtZf0ht+VR2gwCY/Rq49WKvL4kmuNFWp8EYDHlORj9pPylFnBfGPTrZVp3SQkR",
|
||||
"integrity": "sha384-Ebm5iIlR/8a8/G844GLtXrIB01dtwSVsKO7daPikpCCiLP0sV1A0eh7l3mZcx449",
|
||||
"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-DeFtZf0ht+VR2gwCY/Rq49WKvL4kmuNFWp8EYDHlORj9pPylFnBfGPTrZVp3SQkR\" 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-Ebm5iIlR/8a8/G844GLtXrIB01dtwSVsKO7daPikpCCiLP0sV1A0eh7l3mZcx449\" 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-DeFtZf0ht+VR2gwCY/Rq49WKvL4kmuNFWp8EYDHlORj9pPylFnBfGPTrZVp3SQkR" crossorigin="anonymous"></script>
|
||||
<script src="../../gospel-internet.js" integrity="sha384-Ebm5iIlR/8a8/G844GLtXrIB01dtwSVsKO7daPikpCCiLP0sV1A0eh7l3mZcx449" 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-DeFtZf0ht+VR2gwCY/Rq49WKvL4kmuNFWp8EYDHlORj9pPylFnBfGPTrZVp3SQkR" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-internet.js" integrity="sha384-Ebm5iIlR/8a8/G844GLtXrIB01dtwSVsKO7daPikpCCiLP0sV1A0eh7l3mZcx449" 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-DeFtZf0ht+VR2gwCY/Rq49WKvL4kmuNFWp8EYDHlORj9pPylFnBfGPTrZVp3SQkR" crossorigin="anonymous"></script>
|
||||
<script src="../../gospel-internet.js" integrity="sha384-Ebm5iIlR/8a8/G844GLtXrIB01dtwSVsKO7daPikpCCiLP0sV1A0eh7l3mZcx449" 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-DeFtZf0ht+VR2gwCY/Rq49WKvL4kmuNFWp8EYDHlORj9pPylFnBfGPTrZVp3SQkR" crossorigin="anonymous"></script>
|
||||
<script src="../../gospel-internet.js" integrity="sha384-Ebm5iIlR/8a8/G844GLtXrIB01dtwSVsKO7daPikpCCiLP0sV1A0eh7l3mZcx449" 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-DeFtZf0ht+VR2gwCY/Rq49WKvL4kmuNFWp8EYDHlORj9pPylFnBfGPTrZVp3SQkR" crossorigin="anonymous"></script>
|
||||
<script src="../../gospel-internet.js" integrity="sha384-Ebm5iIlR/8a8/G844GLtXrIB01dtwSVsKO7daPikpCCiLP0sV1A0eh7l3mZcx449" 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-DeFtZf0ht+VR2gwCY/Rq49WKvL4kmuNFWp8EYDHlORj9pPylFnBfGPTrZVp3SQkR" crossorigin="anonymous"></script>
|
||||
<script src="../../gospel-internet.js" integrity="sha384-Ebm5iIlR/8a8/G844GLtXrIB01dtwSVsKO7daPikpCCiLP0sV1A0eh7l3mZcx449" 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-DeFtZf0ht+VR2gwCY/Rq49WKvL4kmuNFWp8EYDHlORj9pPylFnBfGPTrZVp3SQkR" crossorigin="anonymous"></script>
|
||||
<script src="../../gospel-internet.js" integrity="sha384-Ebm5iIlR/8a8/G844GLtXrIB01dtwSVsKO7daPikpCCiLP0sV1A0eh7l3mZcx449" 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-DeFtZf0ht+VR2gwCY/Rq49WKvL4kmuNFWp8EYDHlORj9pPylFnBfGPTrZVp3SQkR",
|
||||
"integrity": "sha384-Ebm5iIlR/8a8/G844GLtXrIB01dtwSVsKO7daPikpCCiLP0sV1A0eh7l3mZcx449",
|
||||
"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-DeFtZf0ht+VR2gwCY/Rq49WKvL4kmuNFWp8EYDHlORj9pPylFnBfGPTrZVp3SQkR\" 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-Ebm5iIlR/8a8/G844GLtXrIB01dtwSVsKO7daPikpCCiLP0sV1A0eh7l3mZcx449\" 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