Merge main, and regenerate the library menu it left stale
main's legend work added library/components/legends/SemanticTreeLegend.vue without re-running the derived index, so check:library-index was failing on a file none of this branch's work touched. Regenerated: 94 items catalogued. public/doxa-maps/index.html conflicted. It is generated, so it was resolved by regenerating the pipeline rather than by hand-merging two machine-written files: build the bundle, rebuild the tree, re-hash. fix:sri then reports all 111 hashes already in agreement, which is the evidence the tree is coherent rather than merely conflict-free.
This commit is contained in:
commit
273e6054fa
69 changed files with 973 additions and 487 deletions
159
internal/check-aria-labels-localized.mjs
Normal file
159
internal/check-aria-labels-localized.mjs
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
#!/usr/bin/env node
|
||||
// check-aria-labels-localized — no control may announce a RAW I18N KEY, and the
|
||||
// accessible names must change with the locale.
|
||||
//
|
||||
// ★ THE ONE STRING A SIGHTED TESTER NEVER SEES. Every other untranslated string in
|
||||
// this tree got caught because somebody looked at the screen. aria-label is only ever
|
||||
// spoken aloud, so it survived every visual QA pass. Measured 2026-09-24 on the served
|
||||
// upg-100-list leaf: the legend's toggle button announced the literal string
|
||||
// "aria.toggleLegend" — in English too, not just translated locales — because vue-i18n
|
||||
// ECHOES THE KEY when a lookup misses and `toggleLegend` was absent from aria.json
|
||||
// while its two siblings (backToLegend, closeDetailView) were present. Six call sites
|
||||
// across LegendDesktop.vue and LegendMobile.vue, desktop AND mobile, every locale.
|
||||
//
|
||||
// A second instance in the same sweep had the opposite shape: SemanticTreeLegend's
|
||||
// collapse button hardcoded 'Collapse legend' / 'Expand legend' with no t() at all, so
|
||||
// it was correct English and untranslatable. One key missing FROM the catalog, one
|
||||
// string never routed TO it — the gate below catches both, because it compares what is
|
||||
// ANNOUNCED across locales rather than reading the source.
|
||||
//
|
||||
// ⚠ TWO ASSERTIONS, NOT ONE. "No raw keys" alone passes a hardcoded English label, and
|
||||
// "labels differ across locales" alone passes a raw key (a key is identical in every
|
||||
// locale — which is exactly why the SEPARABILITY floor below is per-locale).
|
||||
//
|
||||
// ⚠ A RAW KEY HAS A SHAPE NO HUMAN LABEL HAS: dotted, camelCase, no spaces. That is the
|
||||
// whole detector, and it is locale-independent — it works on Arabic and Chinese pages
|
||||
// where no English word list could.
|
||||
//
|
||||
// Usage: node internal/check-aria-labels-localized.mjs <leafUrl> [locales]
|
||||
import { chromium } from 'playwright'
|
||||
|
||||
const URL_ = process.argv[2] || process.env.ARIA_URL
|
||||
if (!URL_) {
|
||||
console.log('ARIA-LABELS-LOCALIZED: SKIP — no leaf url given.')
|
||||
console.log(' Pass one, or set ARIA_URL. Serve the TREE ROOT (public/) and point at a leaf,')
|
||||
console.log(' e.g. doxa-maps/my-upg-100-list/upg-100-list/index.html')
|
||||
process.exit(0)
|
||||
}
|
||||
const UNDER_TEST = (process.argv[3] || 'es,ar,zh').split(',').map((s) => s.trim()).filter(Boolean)
|
||||
|
||||
// A raw vue-i18n key: starts lowercase, dotted, no whitespace. Human labels have spaces
|
||||
// ("Zoom in") or are non-Latin; neither matches.
|
||||
const RAW_KEY = /^[a-z][a-zA-Z0-9]*(\.[a-zA-Z0-9]+)+$/
|
||||
|
||||
// How many accessible names MUST change when the locale changes. Measured on the
|
||||
// upg-100-list leaf 2026-09-24: 6 of 13, desktop and mobile alike. The rest are map-
|
||||
// engine controls (Mapbox's own zoom/fullscreen buttons) whose labels this tree does
|
||||
// not own. Override for a leaf with a different control set.
|
||||
const LOCALIZED_FLOOR = Number(process.env.ARIA_LOCALIZED_FLOOR || 6)
|
||||
|
||||
async function readLabels(browser, lang, viewport, mobile) {
|
||||
const page = await browser.newPage({ viewport, isMobile: mobile, hasTouch: mobile })
|
||||
const errs = []
|
||||
page.on('pageerror', (e) => errs.push(String(e).slice(0, 120)))
|
||||
await page.goto(`${URL_}?lang=${lang}`, { waitUntil: 'load', timeout: 45000 })
|
||||
await page.waitForTimeout(9000)
|
||||
const labels = await page.evaluate(() => {
|
||||
const walk = (root, out = []) => {
|
||||
for (const el of root.querySelectorAll('*')) { out.push(el); if (el.shadowRoot) walk(el.shadowRoot, out) }
|
||||
return out
|
||||
}
|
||||
// Shadow-piercing: these controls live several shadow roots deep.
|
||||
return walk(document)
|
||||
.filter((e) => e.getAttribute && e.getAttribute('aria-label') !== null)
|
||||
.map((e) => (e.getAttribute('aria-label') || '').trim())
|
||||
})
|
||||
await page.close()
|
||||
return { labels, errs }
|
||||
}
|
||||
|
||||
const browser = await chromium.launch({ args: ['--use-gl=swiftshader', '--enable-unsafe-swiftshader'] })
|
||||
const VIEWPORTS = [
|
||||
{ name: 'desktop', viewport: { width: 1500, height: 1000 }, mobile: false },
|
||||
{ name: 'mobile', viewport: { width: 390, height: 844 }, mobile: true },
|
||||
]
|
||||
const seen = {}
|
||||
try {
|
||||
for (const vp of VIEWPORTS) {
|
||||
seen[vp.name] = {}
|
||||
for (const loc of ['en', ...UNDER_TEST]) {
|
||||
seen[vp.name][loc] = await readLabels(browser, loc, vp.viewport, vp.mobile)
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
await browser.close()
|
||||
}
|
||||
|
||||
const fails = []
|
||||
const report = []
|
||||
|
||||
for (const vp of VIEWPORTS) {
|
||||
const byLoc = seen[vp.name]
|
||||
const en = byLoc.en
|
||||
|
||||
// PRECONDITION: a page with no aria-labels at all makes every assertion vacuous. A
|
||||
// bundle that failed to execute renders nothing with zero page errors (the stale-SRI
|
||||
// signature), and would otherwise read as "nothing untranslated".
|
||||
if (!en.labels.length) {
|
||||
fails.push(`${vp.name}: no aria-labels rendered at all — either the wrong url, or the `
|
||||
+ 'bundle did not execute (a stale SRI hash refuses the script SILENTLY; run '
|
||||
+ '`bun run tree` after `BUNDLE=<n> bun x vite build`)')
|
||||
continue
|
||||
}
|
||||
|
||||
for (const loc of ['en', ...UNDER_TEST]) {
|
||||
const s = byLoc[loc]
|
||||
// ASSERTION 1 — NO RAW KEYS, in every locale INCLUDING English. A missing catalog
|
||||
// entry is announced as its own key name, which is gibberish to a screen reader.
|
||||
const raw = [...new Set(s.labels.filter((t) => RAW_KEY.test(t)))]
|
||||
if (raw.length) {
|
||||
fails.push(`${vp.name}/${loc}: ${raw.length} control(s) announce a RAW I18N KEY — `
|
||||
+ `${JSON.stringify(raw)} — vue-i18n echoes the key when the lookup misses, so a `
|
||||
+ 'screen reader reads the key name aloud')
|
||||
}
|
||||
// NEVER BLANK either: an empty aria-label is worse than none, it suppresses the
|
||||
// fallback to the element's own text.
|
||||
const blank = s.labels.filter((t) => !t).length
|
||||
if (blank) fails.push(`${vp.name}/${loc}: ${blank} EMPTY aria-label(s)`)
|
||||
if (s.errs.length) fails.push(`${vp.name}/${loc}: ${s.errs.length} page error(s): ${s.errs[0]}`)
|
||||
}
|
||||
|
||||
// ASSERTION 2 — THE LOCALE MUST MOVE THEM. Raw-key-free is not the same as localized:
|
||||
// a hardcoded English label passes assertion 1 forever. At least one accessible name
|
||||
// must differ from English in each locale, or nothing on this surface is translated.
|
||||
for (const loc of UNDER_TEST) {
|
||||
const s = byLoc[loc]
|
||||
const diff = s.labels.filter((t, i) => en.labels[i] && t !== en.labels[i]).length
|
||||
if (s.labels.length && diff === 0) {
|
||||
fails.push(`${vp.name}/${loc}: NOT ONE of ${s.labels.length} aria-label(s) differs from `
|
||||
+ 'English — the accessible names are hardcoded, not catalogued')
|
||||
}
|
||||
// ⚠ A FLOOR, NOT JUST "> 0". `diff === 0` alone is decoration: it prints a count and
|
||||
// only fails when EVERY label regresses. Measured 2026-09-24 — hardcoding ONE label
|
||||
// back to English dropped this from 6 to 5 and the gate still passed, which is the
|
||||
// exact shape ("a number printed but not asserted on") this tree keeps rediscovering.
|
||||
// The floor is the count that currently holds, so any single regression goes red.
|
||||
// RAISE IT when you localize more; never lower it to make a red build green.
|
||||
if (s.labels.length && diff < LOCALIZED_FLOOR) {
|
||||
fails.push(`${vp.name}/${loc}: only ${diff} of ${s.labels.length} aria-label(s) differ from `
|
||||
+ `English, expected at least ${LOCALIZED_FLOOR} — a label that used to be catalogued `
|
||||
+ 'has been hardcoded back to English (it leaves no raw key behind, so assertion 1 '
|
||||
+ 'cannot see it)')
|
||||
}
|
||||
report.push(` ${vp.name.padEnd(8)} ${loc.padEnd(3)}: ${diff}/${s.labels.length} differ from English, `
|
||||
+ `${s.labels.filter((t) => RAW_KEY.test(t)).length} raw key(s), ${s.labels.filter((t) => !t).length} blank`)
|
||||
}
|
||||
}
|
||||
|
||||
console.log('ARIA-LABELS-LOCALIZED')
|
||||
console.log(` leaf : ${URL_}`)
|
||||
console.log(` labels : ${seen.desktop?.en?.labels.length ?? 0} desktop / ${seen.mobile?.en?.labels.length ?? 0} mobile (English)`)
|
||||
for (const line of report) console.log(line)
|
||||
|
||||
if (fails.length) {
|
||||
console.error(`\nARIA-LABELS-LOCALIZED: FAIL — ${fails.length} problem(s)`)
|
||||
for (const f of fails) console.error(' - ' + f)
|
||||
process.exit(1)
|
||||
}
|
||||
console.log('\nARIA-LABELS-LOCALIZED: PASS — no control announces a raw i18n key, none is blank, '
|
||||
+ 'and choosing a locale changes what a screen reader says.')
|
||||
148
internal/check-legend-info-localized.mjs
Normal file
148
internal/check-legend-info-localized.mjs
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
#!/usr/bin/env node
|
||||
// check-legend-info-localized — the legend's INFO POPOVERS must translate, in the
|
||||
// real served page, not in a reimplementation of the lookup.
|
||||
//
|
||||
// ★ WHY THIS EXISTS BESIDE check:tabs-localized. That gate proves the dynamic-key
|
||||
// mechanism reaches tabs.json — genuinely valuable, and it passes. But it tests SEVEN
|
||||
// HARDCODED research-map tabs and it REIMPLEMENTS tabLabel() inside page.evaluate with
|
||||
// catalogs fed in by hand. So it proves "tab localization works, for these seven",
|
||||
// which is not the same claim as "this profile's tabs are localized". The UPG-100
|
||||
// legend's three tabs were absent from tabs.json entirely and that gate stayed green.
|
||||
//
|
||||
// ⚠ AND IT NEVER LOOKED AT `info` AT ALL. SemanticTreeLegend rendered `tab.info` RAW in
|
||||
// all three places it appears (the button's title=, and the popover body) while the tab
|
||||
// LABEL beside it went through the catalog. Measured 2026-09-24 on the served leaf:
|
||||
// ?lang=es changed 2 of 76 rendered strings ("POPULATION" -> "POBLACIÓN") and left all
|
||||
// three tabs AND all three info popovers in English. The mechanism worked; the strings
|
||||
// were never catalogued. The Driver named this affordance specifically — "the tab itself
|
||||
// gives you a little information button that will explain what a UPG-100 list is" —
|
||||
// which is exactly the sentence a reader who does not read English cannot use.
|
||||
//
|
||||
// ⚠ IT RENDERS THE REAL PAGE. A catalog-only check cannot tell a shipped translation
|
||||
// from a dead one, and a reimplemented lookup cannot tell you the component actually
|
||||
// calls it. This opens the served leaf, switches locale the way a reader does (?lang=),
|
||||
// CLICKS each info button and reads the popover that paints.
|
||||
//
|
||||
// ⚠ WAIT FOR THE FLUSH. showInfo() sets a ref; reading the DOM in the same tick as the
|
||||
// click finds no popover and reads as "the affordance is broken". Measured: the first
|
||||
// version of this probe reported "(no popover)" in every locale against a working build.
|
||||
//
|
||||
// Usage: node internal/check-legend-info-localized.mjs <leafUrl> [locales]
|
||||
import { chromium } from 'playwright'
|
||||
import { readFileSync, existsSync } from 'node:fs'
|
||||
import { join, dirname } from 'node:path'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
|
||||
const REPO = join(dirname(fileURLToPath(import.meta.url)), '..')
|
||||
const LOCALES = join(REPO, 'library/i18n/locales')
|
||||
|
||||
const URL_ = process.argv[2] || process.env.LEGEND_URL
|
||||
if (!URL_) {
|
||||
console.log('LEGEND-INFO-LOCALIZED: SKIP — no leaf url given.')
|
||||
console.log(' Pass one, or set LEGEND_URL. Serve the TREE ROOT (public/doxa-maps) and point')
|
||||
console.log(' at a profile whose legend carries per-tab info buttons, e.g.')
|
||||
console.log(' my-upg-100-list/upg-100-list/index.html')
|
||||
process.exit(0)
|
||||
}
|
||||
const UNDER_TEST = (process.argv[3] || 'es,ar,zh').split(',').map((s) => s.trim()).filter(Boolean)
|
||||
|
||||
const legendCat = (loc) => {
|
||||
const p = join(LOCALES, loc, 'legend.json')
|
||||
return existsSync(p) ? JSON.parse(readFileSync(p, 'utf8')) : null
|
||||
}
|
||||
|
||||
// Read each locale's info popovers from the REAL page, clicking every info button.
|
||||
async function readLegend(page, url, lang) {
|
||||
const errs = []
|
||||
page.on('pageerror', (e) => errs.push(String(e).slice(0, 120)))
|
||||
await page.goto(`${url}?lang=${lang}`, { waitUntil: 'load', timeout: 45000 })
|
||||
await page.waitForTimeout(9000)
|
||||
const walkFn = () => {
|
||||
const walk = (root, out = []) => {
|
||||
for (const el of root.querySelectorAll('*')) { out.push(el); if (el.shadowRoot) walk(el.shadowRoot, out) }
|
||||
return out
|
||||
}
|
||||
return walk(document)
|
||||
}
|
||||
const count = await page.evaluate(`(${walkFn.toString()})().filter(e => (e.className||'').toString().includes('stl-tab-info')).length`)
|
||||
const pops = []
|
||||
for (let i = 0; i < count; i++) {
|
||||
await page.evaluate(`(${walkFn.toString()})().filter(e => (e.className||'').toString().includes('stl-tab-info'))[${i}]?.click()`)
|
||||
// ⚠ showInfo() sets a ref — read AFTER Vue flushes, or every popover reads empty.
|
||||
await page.waitForTimeout(400)
|
||||
pops.push(await page.evaluate(`(() => { const el = (${walkFn.toString()})().find(e => (e.className||'').toString().includes('stl-info-pop')); return el ? (el.innerText||'').trim() : '' })()`))
|
||||
}
|
||||
const tabs = await page.evaluate(`(${walkFn.toString()})().filter(e => (e.className||'').toString().includes('stl-tab-chip')).map(c => (c.innerText||'').trim().split('\\n')[0]).filter(Boolean)`)
|
||||
return { tabs, pops, errs }
|
||||
}
|
||||
|
||||
const browser = await chromium.launch({ args: ['--use-gl=swiftshader', '--enable-unsafe-swiftshader'] })
|
||||
const seen = {}
|
||||
try {
|
||||
for (const loc of ['en', ...UNDER_TEST]) {
|
||||
const page = await browser.newPage({ viewport: { width: 1500, height: 1000 } })
|
||||
seen[loc] = await readLegend(page, URL_, loc)
|
||||
await page.close()
|
||||
}
|
||||
} finally {
|
||||
await browser.close()
|
||||
}
|
||||
|
||||
const en = seen.en
|
||||
const fails = []
|
||||
|
||||
// PRECONDITION: this page must actually HAVE the affordance, or every assertion below
|
||||
// is vacuous. A leaf whose bundle failed to execute renders zero tabs with zero page
|
||||
// errors — the stale-SRI signature — and would otherwise pass as "nothing untranslated".
|
||||
if (!en.pops.length) {
|
||||
console.error('\nLEGEND-INFO-LOCALIZED: FAIL — no info buttons rendered at all in English.')
|
||||
console.error(' Either this profile has no per-tab info affordance (wrong url), or the bundle')
|
||||
console.error(' did not execute. A stale SRI hash refuses the script SILENTLY, with no page')
|
||||
console.error(` error and zero tabs — run \`bun run tree\` after \`BUNDLE=<n> bun x vite build\`.`)
|
||||
console.error(` tabs rendered: ${JSON.stringify(en.tabs)} page errors: ${en.errs.length}`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
// THE LOAD-BEARING ASSERTION. A chosen locale must CHANGE the info text — that is the
|
||||
// difference between a translation that ships and one that merely exists on disk.
|
||||
const separable = {}
|
||||
for (const loc of UNDER_TEST) {
|
||||
const s = seen[loc]
|
||||
if (!s.pops.length) { fails.push(`${loc}: no info popovers rendered (English had ${en.pops.length})`); continue }
|
||||
if (s.pops.length !== en.pops.length) {
|
||||
fails.push(`${loc}: ${s.pops.length} info popover(s), English had ${en.pops.length}`)
|
||||
}
|
||||
// NEVER BLANK. The whole point of a per-key fallback is that an untranslated key
|
||||
// shows English rather than nothing.
|
||||
const blank = s.pops.filter((t) => !t.trim()).length
|
||||
if (blank) fails.push(`${loc}: ${blank} info popover(s) rendered BLANK — the fallback should show English`)
|
||||
// Count how many DIFFER from English. Zero means the catalog is not reached: either
|
||||
// the entries are missing, or the component renders the raw prop as it used to.
|
||||
const diff = s.pops.filter((t, i) => t && en.pops[i] && t !== en.pops[i]).length
|
||||
separable[loc] = diff
|
||||
const cat = legendCat(loc)
|
||||
const catKeys = cat && cat.tabInfo ? Object.keys(cat.tabInfo).length : 0
|
||||
if (catKeys > 0 && diff === 0) {
|
||||
fails.push(`${loc}: legend.json declares ${catKeys} tabInfo key(s) but NOT ONE info popover `
|
||||
+ 'differs from English — the catalog is present and unreached (the raw-prop bug)')
|
||||
}
|
||||
if (s.errs.length) fails.push(`${loc}: ${s.errs.length} page error(s): ${s.errs[0]}`)
|
||||
}
|
||||
|
||||
console.log('LEGEND-INFO-LOCALIZED')
|
||||
console.log(` leaf : ${URL_}`)
|
||||
console.log(` info popups: ${en.pops.length} (English)`)
|
||||
console.log(` tabs : ${en.tabs.join(' · ')}`)
|
||||
for (const loc of UNDER_TEST) {
|
||||
const s = seen[loc]
|
||||
console.log(` ${loc.padEnd(10)}: ${separable[loc] ?? 0}/${s.pops.length} info text(s) differ from English, `
|
||||
+ `${s.pops.filter((t) => !t.trim()).length} blank tabs: ${s.tabs.join(' · ')}`)
|
||||
}
|
||||
|
||||
if (fails.length) {
|
||||
console.error(`\nLEGEND-INFO-LOCALIZED: FAIL — ${fails.length} problem(s)`)
|
||||
for (const f of fails) console.error(' - ' + f)
|
||||
process.exit(1)
|
||||
}
|
||||
console.log('\nLEGEND-INFO-LOCALIZED: PASS — choosing a locale changes the rendered info text, so '
|
||||
+ 'the legend\'s explanations reach the reader in their own language, never blank.')
|
||||
|
|
@ -186,6 +186,32 @@ const r = await page.evaluate(() => {
|
|||
rhythms: RHYTHMS.filter((w) => body.includes(w)).length,
|
||||
rhythmsTotal: RHYTHMS.length,
|
||||
wheelSegs: document.querySelectorAll('svg path[fill^="hsl"]').length,
|
||||
// ⚠ COUNT THE WHEEL'S OWN LABELS, SCOPED TO THE WHEEL SHEET. `rhythms` below
|
||||
// searches document.body.innerText, and the SAME rhythm vocabulary is rendered
|
||||
// TWICE — once per wheel segment, and once per prayer point (each point prints
|
||||
// tr(p.rhythm) as its heading). So "every rhythm word appears in the document" is
|
||||
// satisfied by the POINTS page alone and says nothing about the wheel.
|
||||
// Measured 2026-09-24: blanking every wheel segment label left the gate reporting
|
||||
// "12 segments, 11/11 rhythms, content intact — PASS" on a prayer wheel that was a
|
||||
// twelve-colour pie chart with no words on it. Both numbers stayed true: the
|
||||
// segments are <path> elements and survive, and the words were still on the points
|
||||
// page. The Driver's spec names the wheel as one of the packet's four sections.
|
||||
//
|
||||
// COUNT ELEMENTS, NOT DISTINCT WORDS. `order` renders 12 segments from 12 keys, but
|
||||
// `praise` and `praise_end` collapse to the same word in English (which is why the
|
||||
// line below prints 11/11, not 12/12) — and that collision is LOCALE-DEPENDENT. A
|
||||
// distinct-word count would be a different number per language.
|
||||
wheelLabels: (() => {
|
||||
const title = document.querySelector('.wheel-title')
|
||||
const sheet = title ? title.closest('.sheet') : null
|
||||
const svg = sheet ? sheet.querySelector('svg') : null
|
||||
if (!svg) return -1
|
||||
// The segment labels are the non-numeric <text> runs: the pips are all "5" and
|
||||
// the footer reads "5 <minutes> x 12".
|
||||
return [...svg.querySelectorAll('text')]
|
||||
.map((t) => (t.textContent || '').trim())
|
||||
.filter((s) => s && !/^\d+$/.test(s) && !/^\d[\s\S]*×\s*12$/.test(s)).length
|
||||
})(),
|
||||
// ⚠ NOT body.includes('Gadarenes'). That was an ENGLISH proper noun, so this
|
||||
// assertion would go RED on a correctly-translated packet and stays green today
|
||||
// only because every locale falls back to English for this key. The check and the
|
||||
|
|
@ -268,6 +294,17 @@ if (r.cards && expectPhotos && r.imgs === 0) {
|
|||
+ 'PACKET_EXPECT_PHOTOS=0 to declare this a deliberately photo-less packet.')
|
||||
}
|
||||
if (r.wheelSegs !== 12) fails.push(`prayer wheel has ${r.wheelSegs} segments, expected 12`)
|
||||
// A SEGMENT WITHOUT ITS WORD IS A COLOUR. 12 labels, one per segment, on the wheel
|
||||
// sheet itself — not merely somewhere in the document.
|
||||
const WHEEL_LABELS = 12
|
||||
if (r.wheelLabels !== WHEEL_LABELS) {
|
||||
fails.push(r.wheelLabels === -1
|
||||
? 'no prayer-wheel svg found (no .wheel-title sheet) — the wheel page did not render'
|
||||
: `the prayer wheel paints ${r.wheelLabels} segment label(s), expected ${WHEEL_LABELS} — `
|
||||
+ 'the rhythm words are rendered TWICE in this packet (wheel segments and prayer-point '
|
||||
+ 'headings), so the document-wide rhythm check below passes on the points page alone '
|
||||
+ 'and cannot see an unlabelled wheel')
|
||||
}
|
||||
if (r.rhythms !== r.rhythmsTotal) fails.push(`only ${r.rhythms}/${r.rhythmsTotal} prayer rhythms present`)
|
||||
// Mark 5:1-20 in full is a Driver requirement for point 4: "it actually lists out the
|
||||
// full scripture, because prayer point number four is actually read the word." The
|
||||
|
|
@ -437,7 +474,7 @@ if (r.ranges.length) {
|
|||
console.log(` sheets/PDF pages : ${r.sheets} / ${pages}`)
|
||||
console.log(` people cards : ${r.cards} (${r.imgs} photos, ${r.nophoto} typographic)`)
|
||||
console.log(` prayer points : ${r.points} / ${POINTS_EXPECT}`)
|
||||
console.log(` wheel segments : ${r.wheelSegs}`)
|
||||
console.log(` wheel segments : ${r.wheelSegs} (${r.wheelLabels}/${WHEEL_LABELS} labelled)`)
|
||||
console.log(` Mark 5 in full : ${r.mark5Len} chars`
|
||||
+ `${scriptureIsEnglish ? ' ⚠ UNTRANSLATED (English fallback)' : ''}`)
|
||||
console.log(` metacamp.org : ${r.metacamp}`)
|
||||
|
|
|
|||
|
|
@ -41,6 +41,25 @@ function tabLabel(tab) {
|
|||
return tab && te(key) ? t(key) : (tab?.label ?? '')
|
||||
}
|
||||
|
||||
// THE INFO TEXT IS THE PART A NON-ENGLISH READER NEEDS MOST, and it was the one part
|
||||
// that never went through the catalog. `tab.info` rendered RAW in all three places it
|
||||
// appears (the button's title=, and the popover body), so a Spanish reader saw a
|
||||
// translated tab chip beside an English explanation of what that chip means. Measured
|
||||
// 2026-09-24 on the served upg-100-list leaf: ?lang=es changed 2 of 76 rendered strings
|
||||
// ("POPULATION" -> "POBLACIÓN") and left all three legend tabs AND all three info
|
||||
// popovers in English — the locale switch works, the strings were simply never in a
|
||||
// catalog. The Driver named this affordance specifically ("the tab itself gives you a
|
||||
// little information button that will explain what a UPG-100 list is"), which is exactly
|
||||
// the sentence a reader who does not read English cannot use.
|
||||
//
|
||||
// Same shape as tabLabel: `legend.tabInfo.<i18nKey|id>`, te() guard, falling back to the
|
||||
// hardcoded English `info` so a tab with no catalog entry renders unchanged rather than
|
||||
// blank. PER KEY, so a half-finished translation shows its finished entries.
|
||||
function tabInfo(tab) {
|
||||
const key = 'legend.tabInfo.' + (tab?.i18nKey || tab?.id)
|
||||
return tab && te(key) ? t(key) : (tab?.info ?? '')
|
||||
}
|
||||
|
||||
const props = defineProps({
|
||||
nodes: { type: Array, default: () => [] },
|
||||
tabs: { type: Array, default: null },
|
||||
|
|
@ -1039,8 +1058,8 @@ useShadowStyles(`
|
|||
v-if="!$slots['title-caret']"
|
||||
class="stl-collapse-btn"
|
||||
:class="{ closed: !panelOpen }"
|
||||
:title="panelOpen ? 'Collapse legend' : 'Expand legend'"
|
||||
:aria-label="panelOpen ? 'Collapse legend' : 'Expand legend'"
|
||||
:title="panelOpen ? t('aria.collapseLegend') : t('aria.expandLegend')"
|
||||
:aria-label="panelOpen ? t('aria.collapseLegend') : t('aria.expandLegend')"
|
||||
:aria-expanded="String(panelOpen)"
|
||||
@click="panelOpen = !panelOpen; emit('update:open', panelOpen)">
|
||||
<svg width="9" height="9" viewBox="0 0 12 12" fill="none">
|
||||
|
|
@ -1136,12 +1155,12 @@ useShadowStyles(`
|
|||
<div v-for="(tab, idx) in tabList" :key="tab.id"
|
||||
class="stl-tab-chip" :class="{ active: activeTab === idx }">
|
||||
<button class="stl-tab" @click="switchTab(idx)">{{ tabLabel(tab) }}</button>
|
||||
<button v-if="tab.info" class="stl-tab-info" :title="tab.info"
|
||||
<button v-if="tab.info" class="stl-tab-info" :title="tabInfo(tab)"
|
||||
@click="showInfo(idx, $event)">i</button>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="showInfoForTab !== null && tabList[showInfoForTab]?.info" class="stl-info-pop">
|
||||
{{ tabList[showInfoForTab].info }}
|
||||
{{ tabInfo(tabList[showInfoForTab]) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,7 @@
|
|||
{
|
||||
"backToLegend": "العودة إلى المفتاح",
|
||||
"closeDetailView": "إغلاق عرض التفاصيل"
|
||||
"closeDetailView": "إغلاق عرض التفاصيل",
|
||||
"collapseLegend": "طيّ وسيلة الإيضاح",
|
||||
"expandLegend": "توسيع وسيلة الإيضاح",
|
||||
"toggleLegend": "إظهار وسيلة الإيضاح أو إخفاؤها"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,5 +54,10 @@
|
|||
"peopleGroups": "الشعوب",
|
||||
"wagfRegions": "مناطق WAGF",
|
||||
"languages": "اللغات"
|
||||
},
|
||||
"tabInfo": {
|
||||
"upg100Region": "المنطقة — ترتّب قوائم UPG-100 حسب منطقة العالم (أفريقيا، الهند، الشرق الأوسط، الصمّ، …). الأعداد هي مجموع UUPG والسكان لكل قائمة تحتها.",
|
||||
"upg100Zone": "قوائم UPG-100 — كل واحدة هي قائمة صلاة للشعوب غير الموصول إليها في منطقة ما، وهي ما ترسمه الخريطة وتلوّنه. تُطبع كل قائمة ككُتيّب خاص بها.",
|
||||
"upg100Group": "مجموعة شعبية — المجموعات غير الموصول إليها داخل القائمة، الأكثر حاجة للصلاة أولاً. كل نقطة على الخريطة هي واحدة منها."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,5 +16,8 @@
|
|||
"pgic": "الشعب في الدولة",
|
||||
"region": "منطقة WAGF",
|
||||
"block": "كتلة WAGF",
|
||||
"country": "الدولة"
|
||||
}
|
||||
"country": "الدولة",
|
||||
"upg100Region": "المنطقة",
|
||||
"upg100Zone": "قوائم UPG-100",
|
||||
"upg100Group": "مجموعة شعبية"
|
||||
}
|
||||
|
|
@ -1,4 +1,7 @@
|
|||
{
|
||||
"backToLegend": "Zurück zur Legende",
|
||||
"closeDetailView": "Detailansicht schließen"
|
||||
"closeDetailView": "Detailansicht schließen",
|
||||
"collapseLegend": "Legende einklappen",
|
||||
"expandLegend": "Legende ausklappen",
|
||||
"toggleLegend": "Legende ein- oder ausblenden"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,5 +54,10 @@
|
|||
"peopleGroups": "Völker",
|
||||
"wagfRegions": "WAGF-Regionen",
|
||||
"languages": "Sprachen"
|
||||
},
|
||||
"tabInfo": {
|
||||
"upg100Region": "Region — sortiert die UPG-100-Listen nach Weltgegend (Afrika, Indien, Naher Osten, Gehörlose, …). Die Zahlen sind die UUPGs und die Bevölkerung aller darunterliegenden Listen zusammen.",
|
||||
"upg100Zone": "UPG-100-Listen — jede ist eine Gebetsliste der unerreichten Volksgruppen eines Gebiets und das, was die Karte zeichnet und einfärbt. Jede Liste wird als eigenes Heft gedruckt.",
|
||||
"upg100Group": "Volksgruppe — die einzelnen unerreichten Gruppen innerhalb einer Liste, größter Gebetsbedarf zuerst. Jeder Kartenpunkt ist eine davon."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,5 +16,8 @@
|
|||
"pgic": "Volksgruppe im Land",
|
||||
"region": "WAGF-Region",
|
||||
"block": "WAGF-Block",
|
||||
"country": "Land"
|
||||
}
|
||||
"country": "Land",
|
||||
"upg100Region": "Region",
|
||||
"upg100Zone": "UPG-100-Listen",
|
||||
"upg100Group": "Volksgruppe"
|
||||
}
|
||||
|
|
@ -1,4 +1,7 @@
|
|||
{
|
||||
"backToLegend": "Back to Legend",
|
||||
"closeDetailView": "Close detail view"
|
||||
"closeDetailView": "Close detail view",
|
||||
"collapseLegend": "Collapse legend",
|
||||
"expandLegend": "Expand legend",
|
||||
"toggleLegend": "Show or hide the legend"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,5 +54,10 @@
|
|||
"peopleGroups": "People Groups",
|
||||
"wagfRegions": "WAGF Regions",
|
||||
"languages": "Languages"
|
||||
},
|
||||
"tabInfo": {
|
||||
"upg100Region": "Region — sort the UPG-100 lists by world area (Africa, India, Middle East, Deaf, …). Counts are the UUPGs and population summed across every list beneath it.",
|
||||
"upg100Zone": "UPG-100 Lists — each one is a prayer list of the unreached people groups in an area, and is what the map paints and colours. Every list prints as its own packet.",
|
||||
"upg100Group": "People Group — the individual unreached groups inside a list, largest prayer need first. Each map dot is one of these."
|
||||
}
|
||||
}
|
||||
|
|
@ -16,5 +16,8 @@
|
|||
"pgic": "PG in Country",
|
||||
"region": "WAGF Region",
|
||||
"block": "WAGF Bloc",
|
||||
"country": "Country"
|
||||
}
|
||||
"country": "Country",
|
||||
"upg100Region": "Region",
|
||||
"upg100Zone": "UPG-100 Lists",
|
||||
"upg100Group": "People Group"
|
||||
}
|
||||
|
|
@ -1,4 +1,7 @@
|
|||
{
|
||||
"backToLegend": "Volver a la leyenda",
|
||||
"closeDetailView": "Cerrar vista de detalle"
|
||||
"closeDetailView": "Cerrar vista de detalle",
|
||||
"collapseLegend": "Contraer la leyenda",
|
||||
"expandLegend": "Expandir la leyenda",
|
||||
"toggleLegend": "Mostrar u ocultar la leyenda"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,5 +54,10 @@
|
|||
"peopleGroups": "Pueblos",
|
||||
"wagfRegions": "Regiones WAGF",
|
||||
"languages": "Idiomas"
|
||||
},
|
||||
"tabInfo": {
|
||||
"upg100Region": "Región — ordena las listas UPG-100 por área mundial (África, India, Oriente Medio, Sordos, …). Los totales son los UUPG y la población sumados de todas las listas que contiene.",
|
||||
"upg100Zone": "Listas UPG-100 — cada una es una lista de oración de los grupos étnicos no alcanzados de un área, y es lo que el mapa pinta y colorea. Cada lista se imprime como su propio paquete.",
|
||||
"upg100Group": "Grupo étnico — los grupos no alcanzados dentro de una lista, primero los de mayor necesidad de oración. Cada punto del mapa es uno de ellos."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,5 +16,8 @@
|
|||
"pgic": "Pueblo en país",
|
||||
"region": "Región WAGF",
|
||||
"block": "Bloque WAGF",
|
||||
"country": "País"
|
||||
}
|
||||
"country": "País",
|
||||
"upg100Region": "Región",
|
||||
"upg100Zone": "Listas UPG-100",
|
||||
"upg100Group": "Grupo étnico"
|
||||
}
|
||||
|
|
@ -1,4 +1,7 @@
|
|||
{
|
||||
"backToLegend": "Retour à la légende",
|
||||
"closeDetailView": "Fermer la vue détaillée"
|
||||
"closeDetailView": "Fermer la vue détaillée",
|
||||
"collapseLegend": "Réduire la légende",
|
||||
"expandLegend": "Développer la légende",
|
||||
"toggleLegend": "Afficher ou masquer la légende"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,5 +54,10 @@
|
|||
"peopleGroups": "Peuples",
|
||||
"wagfRegions": "Régions WAGF",
|
||||
"languages": "Langues"
|
||||
},
|
||||
"tabInfo": {
|
||||
"upg100Region": "Région — trie les listes UPG-100 par zone du monde (Afrique, Inde, Moyen-Orient, Sourds, …). Les totaux sont les UUPG et la population additionnés sur toutes les listes qu’elle contient.",
|
||||
"upg100Zone": "Listes UPG-100 — chacune est une liste de prière des groupes de peuples non atteints d’une zone, et c’est ce que la carte dessine et colore. Chaque liste s’imprime comme son propre livret.",
|
||||
"upg100Group": "Groupe de peuples — les groupes non atteints au sein d’une liste, les plus grands besoins de prière en premier. Chaque point de la carte en est un."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,5 +16,8 @@
|
|||
"pgic": "Peuple dans le pays",
|
||||
"region": "Région WAGF",
|
||||
"block": "Bloc WAGF",
|
||||
"country": "Pays"
|
||||
}
|
||||
"country": "Pays",
|
||||
"upg100Region": "Région",
|
||||
"upg100Zone": "Listes UPG-100",
|
||||
"upg100Group": "Groupe de peuples"
|
||||
}
|
||||
|
|
@ -1,4 +1,7 @@
|
|||
{
|
||||
"backToLegend": "लेजेंड पर वापस जाएं",
|
||||
"closeDetailView": "विवरण दृश्य बंद करें"
|
||||
"closeDetailView": "विवरण दृश्य बंद करें",
|
||||
"collapseLegend": "लेजेंड संक्षिप्त करें",
|
||||
"expandLegend": "लेजेंड विस्तृत करें",
|
||||
"toggleLegend": "लेजेंड दिखाएँ या छिपाएँ"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,5 +54,10 @@
|
|||
"peopleGroups": "जनसमूह",
|
||||
"wagfRegions": "WAGF क्षेत्र",
|
||||
"languages": "भाषाएँ"
|
||||
},
|
||||
"tabInfo": {
|
||||
"upg100Region": "क्षेत्र — UPG-100 सूचियों को विश्व क्षेत्र के अनुसार क्रमित करता है (अफ़्रीका, भारत, मध्य पूर्व, बधिर, …)। संख्याएँ उसके नीचे की हर सूची के UUPG और जनसंख्या का योग हैं।",
|
||||
"upg100Zone": "UPG-100 सूचियाँ — हर एक किसी क्षेत्र के अनपहुँचे जनसमूहों की प्रार्थना सूची है, और यही मानचित्र बनाता और रंगता है। हर सूची अपने अलग पैकेट के रूप में छपती है।",
|
||||
"upg100Group": "जनसमूह — किसी सूची के भीतर के अलग-अलग अनपहुँचे समूह, सबसे बड़ी प्रार्थना आवश्यकता पहले। मानचित्र का हर बिंदु इनमें से एक है।"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,5 +16,8 @@
|
|||
"pgic": "देश में जनसमूह",
|
||||
"region": "WAGF क्षेत्र",
|
||||
"block": "WAGF ब्लॉक",
|
||||
"country": "देश"
|
||||
}
|
||||
"country": "देश",
|
||||
"upg100Region": "क्षेत्र",
|
||||
"upg100Zone": "UPG-100 सूचियाँ",
|
||||
"upg100Group": "जनसमूह"
|
||||
}
|
||||
|
|
@ -1,4 +1,7 @@
|
|||
{
|
||||
"backToLegend": "Torna alla legenda",
|
||||
"closeDetailView": "Chiudi vista dettaglio"
|
||||
"closeDetailView": "Chiudi vista dettaglio",
|
||||
"collapseLegend": "Comprimi la legenda",
|
||||
"expandLegend": "Espandi la legenda",
|
||||
"toggleLegend": "Mostra o nascondi la legenda"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,5 +54,10 @@
|
|||
"peopleGroups": "Popoli",
|
||||
"wagfRegions": "Regioni WAGF",
|
||||
"languages": "Lingue"
|
||||
},
|
||||
"tabInfo": {
|
||||
"upg100Region": "Regione — ordina le liste UPG-100 per area del mondo (Africa, India, Medio Oriente, Sordi, …). I totali sono gli UUPG e la popolazione sommati di ogni lista sottostante.",
|
||||
"upg100Zone": "Liste UPG-100 — ognuna è una lista di preghiera dei gruppi etnici non raggiunti di un’area, ed è ciò che la mappa disegna e colora. Ogni lista si stampa come il proprio fascicolo.",
|
||||
"upg100Group": "Gruppo etnico — i singoli gruppi non raggiunti dentro una lista, prima quelli con maggiore bisogno di preghiera. Ogni punto della mappa è uno di questi."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,5 +16,8 @@
|
|||
"pgic": "Popolo nel paese",
|
||||
"region": "Regione WAGF",
|
||||
"block": "Blocco WAGF",
|
||||
"country": "Paese"
|
||||
}
|
||||
"country": "Paese",
|
||||
"upg100Region": "Regione",
|
||||
"upg100Zone": "Liste UPG-100",
|
||||
"upg100Group": "Gruppo etnico"
|
||||
}
|
||||
|
|
@ -1,4 +1,7 @@
|
|||
{
|
||||
"backToLegend": "Voltar à legenda",
|
||||
"closeDetailView": "Fechar vista de detalhe"
|
||||
"closeDetailView": "Fechar vista de detalhe",
|
||||
"collapseLegend": "Recolher a legenda",
|
||||
"expandLegend": "Expandir a legenda",
|
||||
"toggleLegend": "Mostrar ou ocultar a legenda"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,5 +54,10 @@
|
|||
"peopleGroups": "Povos",
|
||||
"wagfRegions": "Regiões WAGF",
|
||||
"languages": "Idiomas"
|
||||
},
|
||||
"tabInfo": {
|
||||
"upg100Region": "Região — ordena as listas UPG-100 por área do mundo (África, Índia, Oriente Médio, Surdos, …). Os totais são os UUPG e a população somados de todas as listas abaixo dela.",
|
||||
"upg100Zone": "Listas UPG-100 — cada uma é uma lista de oração dos grupos étnicos não alcançados de uma área, e é o que o mapa pinta e colore. Cada lista é impressa como seu próprio pacote.",
|
||||
"upg100Group": "Grupo étnico — os grupos não alcançados dentro de uma lista, primeiro os de maior necessidade de oração. Cada ponto do mapa é um deles."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,5 +16,8 @@
|
|||
"pgic": "Povo no país",
|
||||
"region": "Região WAGF",
|
||||
"block": "Bloco WAGF",
|
||||
"country": "País"
|
||||
}
|
||||
"country": "País",
|
||||
"upg100Region": "Região",
|
||||
"upg100Zone": "Listas UPG-100",
|
||||
"upg100Group": "Grupo étnico"
|
||||
}
|
||||
|
|
@ -1,4 +1,7 @@
|
|||
{
|
||||
"backToLegend": "Înapoi la legendă",
|
||||
"closeDetailView": "Închide vizualizarea detaliată"
|
||||
"closeDetailView": "Închide vizualizarea detaliată",
|
||||
"collapseLegend": "Restrânge legenda",
|
||||
"expandLegend": "Extinde legenda",
|
||||
"toggleLegend": "Afișează sau ascunde legenda"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,5 +54,10 @@
|
|||
"peopleGroups": "Popoare",
|
||||
"wagfRegions": "Regiuni WAGF",
|
||||
"languages": "Limbi"
|
||||
},
|
||||
"tabInfo": {
|
||||
"upg100Region": "Regiune — sortează listele UPG-100 după zona lumii (Africa, India, Orientul Mijlociu, Surzi, …). Totalurile sunt UUPG-urile și populația însumate din fiecare listă de dedesubt.",
|
||||
"upg100Zone": "Liste UPG-100 — fiecare este o listă de rugăciune a grupurilor etnice neatinse dintr-o zonă și este ceea ce harta desenează și colorează. Fiecare listă se tipărește ca propriul pachet.",
|
||||
"upg100Group": "Grup etnic — grupurile neatinse dintr-o listă, mai întâi cele cu cea mai mare nevoie de rugăciune. Fiecare punct de pe hartă este unul dintre ele."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,5 +16,8 @@
|
|||
"pgic": "Popor în țară",
|
||||
"region": "Regiune WAGF",
|
||||
"block": "Bloc WAGF",
|
||||
"country": "Țară"
|
||||
}
|
||||
"country": "Țară",
|
||||
"upg100Region": "Regiune",
|
||||
"upg100Zone": "Liste UPG-100",
|
||||
"upg100Group": "Grup etnic"
|
||||
}
|
||||
|
|
@ -1,4 +1,7 @@
|
|||
{
|
||||
"backToLegend": "Назад к легенде",
|
||||
"closeDetailView": "Закрыть подробный вид"
|
||||
"closeDetailView": "Закрыть подробный вид",
|
||||
"collapseLegend": "Свернуть легенду",
|
||||
"expandLegend": "Развернуть легенду",
|
||||
"toggleLegend": "Показать или скрыть легенду"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,5 +54,10 @@
|
|||
"peopleGroups": "Народы",
|
||||
"wagfRegions": "Регионы WAGF",
|
||||
"languages": "Языки"
|
||||
},
|
||||
"tabInfo": {
|
||||
"upg100Region": "Регион — сортирует списки UPG-100 по частям света (Африка, Индия, Ближний Восток, Глухие, …). Числа — это UUPG и население, просуммированные по всем спискам внутри.",
|
||||
"upg100Zone": "Списки UPG-100 — каждый представляет собой молитвенный список непросвещённых народов области и именно он отображается и раскрашивается на карте. Каждый список печатается отдельным буклетом.",
|
||||
"upg100Group": "Народ — отдельные непросвещённые народы внутри списка, сначала с наибольшей нуждой в молитве. Каждая точка на карте — один из них."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,5 +16,8 @@
|
|||
"pgic": "Народ в стране",
|
||||
"region": "Регион WAGF",
|
||||
"block": "Блок WAGF",
|
||||
"country": "Страна"
|
||||
}
|
||||
"country": "Страна",
|
||||
"upg100Region": "Регион",
|
||||
"upg100Zone": "Списки UPG-100",
|
||||
"upg100Group": "Народ"
|
||||
}
|
||||
|
|
@ -1,4 +1,7 @@
|
|||
{
|
||||
"backToLegend": "返回图例",
|
||||
"closeDetailView": "关闭详情视图"
|
||||
"closeDetailView": "关闭详情视图",
|
||||
"collapseLegend": "收起图例",
|
||||
"expandLegend": "展开图例",
|
||||
"toggleLegend": "显示或隐藏图例"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,5 +54,10 @@
|
|||
"peopleGroups": "民族",
|
||||
"wagfRegions": "WAGF 区域",
|
||||
"languages": "语言"
|
||||
},
|
||||
"tabInfo": {
|
||||
"upg100Region": "区域 — 按世界区域排列 UPG-100 名单(非洲、印度、中东、聋人……)。数字是其下每份名单的 UUPG 与人口总和。",
|
||||
"upg100Zone": "UPG-100 名单 — 每一份都是某地区未得之民的祷告名单,也是地图所绘制和上色的内容。每份名单印成独立的祷告册。",
|
||||
"upg100Group": "族群 — 名单内各个未得之民群体,祷告需要最大的排在前面。地图上每个点就是其中之一。"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,5 +16,8 @@
|
|||
"pgic": "国内民族",
|
||||
"region": "WAGF 区域",
|
||||
"block": "WAGF 板块",
|
||||
"country": "国家"
|
||||
}
|
||||
"country": "国家",
|
||||
"upg100Region": "区域",
|
||||
"upg100Zone": "UPG-100 名单",
|
||||
"upg100Group": "族群"
|
||||
}
|
||||
|
|
@ -112,6 +112,8 @@
|
|||
"verify:browser-all": "node internal/verify-browser-all.mjs # runs EVERY browser gate in the GATES array over the built tree in one command (needs `bun run serve` on 4173 + MAPBOX_TOKEN). Deliberately does NOT state a count: GATES lives in the .mjs and grows, so a number here rots on the next append — it said \"ALL 7\" while the array held 9. The script prints its own GATES.length at runtime; trust that. Every gate listed was RUN before being listed. The `verify:browser-all:plugin-gallery` mode is separate because it needs the vite dev server.",
|
||||
"check:shot-fonts": "node internal/check-shot-fonts.mjs # can THIS machine render the emoji the UI uses? Run BEFORE `bun run shots` — no font = tofu boxes in every committed PNG, which every other shot gate passes. Deliberately NOT in build:unlocked: it reports an ENVIRONMENT condition (this box has no emoji font), and a gate that always fails in the build makes the build useless.",
|
||||
"smoke:share-all": "sh -c 'B=${BASE_URL:-http://127.0.0.1:4173}; exec node internal/share-roundtrip-smoke.mjs --url \"$B/doxa-maps/prayer-walk-planner/prayer-walk-planner/index.html?tk=$MAPBOX_TOKEN\" --url \"$B/doxa-maps/all-people-groups/all-people-groups/index.html?tk=$MAPBOX_TOKEN\" --url \"$B/doxa-maps/cities-internet/connectivity-map/index.html?tk=$MAPBOX_TOKEN\" --url \"$B/doxa-maps/country-posters/country-posters-mfe/index.html?tk=$MAPBOX_TOKEN\" --url \"$B/doxa-maps/demo-map/demo-map/index.html?tk=$MAPBOX_TOKEN\" --url \"$B/doxa-maps/doxa-research-map/research-map/index.html?tk=$MAPBOX_TOKEN\" --url \"$B/doxa-maps/doxa-simple-map/doxa-simple-map/index.html?tk=$MAPBOX_TOKEN\" --url \"$B/doxa-maps/gospel-resources/resources-map/index.html?tk=$MAPBOX_TOKEN\" --url \"$B/doxa-maps/research-dashboard/research-dashboard/index.html?tk=$MAPBOX_TOKEN\" --url \"$B/doxa-maps/dashboard-plus-grid/dashboard-plus-grid/index.html?tk=$MAPBOX_TOKEN\" --url \"$B/doxa-maps/research-map-plus-grid/research-map-plus-grid/index.html?tk=$MAPBOX_TOKEN\" --url \"$B/doxa-maps/my-upg-100-list/upg-100-mfe/index.html?tk=$MAPBOX_TOKEN\" --browser chromium'",
|
||||
"smoke:legend-info": "sh -c 'B=${BASE_URL:-http://127.0.0.1:4173}; exec node internal/check-legend-info-localized.mjs \"$B/doxa-maps/my-upg-100-list/upg-100-list/index.html\" es,ar,zh'",
|
||||
"smoke:aria-labels": "sh -c 'B=${BASE_URL:-http://127.0.0.1:4173}; exec node internal/check-aria-labels-localized.mjs \"$B/doxa-maps/my-upg-100-list/upg-100-list/index.html\" es,ar,zh'",
|
||||
"check:sfc-parse": "node internal/check-sfc-script-parses.mjs # every .vue script block must parse as the BUILD parses it — catches the LIVE-CSS backtick that check:template-literal cannot see (it reads CSS comments only). 0 false positives on 83 files, where 3 lookahead heuristics scored 98 and 136.",
|
||||
"check:url-resolver": "node internal/check-url-resolver.mjs # cap-5 resolve() must not prefix a rooted URL (the dev-surface 404 class)",
|
||||
"smoke:studio": "node internal/smoke-studio.mjs # 5s DEV-surface check: / mounts the studio, tabs>0, 0 4xx (exit 2 = dev server down)",
|
||||
|
|
|
|||
36
public/doxa-maps/cities-internet/cities-internet.js
generated
36
public/doxa-maps/cities-internet/cities-internet.js
generated
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 <cities-internet-map> custom element. -->
|
||||
<script src="../cities-internet.js" integrity="sha384-qK1s7qgMF7DaMDxJXnS8StZi7vTRWSgWe564NFF2HUO889PW8Sp+uHaTd2LjdI7S" crossorigin="anonymous"></script>
|
||||
<script src="../cities-internet.js" integrity="sha384-nzv5X2WdO5IqlVUqnmsDPDSq2uHRbJGyoDIEjHz915D7nAeS428kzYSeaRyAIEf2" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <cities-internet-map> custom element. -->
|
||||
<script src="../cities-internet.js" integrity="sha384-qK1s7qgMF7DaMDxJXnS8StZi7vTRWSgWe564NFF2HUO889PW8Sp+uHaTd2LjdI7S" crossorigin="anonymous"></script>
|
||||
<script src="../cities-internet.js" integrity="sha384-nzv5X2WdO5IqlVUqnmsDPDSq2uHRbJGyoDIEjHz915D7nAeS428kzYSeaRyAIEf2" 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 <cities-internet-map> custom element. -->
|
||||
<script src="../cities-internet.js" integrity="sha384-qK1s7qgMF7DaMDxJXnS8StZi7vTRWSgWe564NFF2HUO889PW8Sp+uHaTd2LjdI7S" crossorigin="anonymous"></script>
|
||||
<script src="../cities-internet.js" integrity="sha384-nzv5X2WdO5IqlVUqnmsDPDSq2uHRbJGyoDIEjHz915D7nAeS428kzYSeaRyAIEf2" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <country-posters-map> custom element. -->
|
||||
<script src="../country-posters.js" integrity="sha384-5NIVhkaYneMmaHPBew8npZq0dQTh17eS/HtI9F1tmkILC4YWB0564qqO51BKisn+" crossorigin="anonymous"></script>
|
||||
<script src="../country-posters.js" integrity="sha384-+uSJg/LdhuPzecJG34oeevbtghdX7Pqaop+MyNzs4tyqd3/1frmrwQimIJgcv/yo" 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 <country-posters-map> custom element. -->
|
||||
<script src="../country-posters.js" integrity="sha384-5NIVhkaYneMmaHPBew8npZq0dQTh17eS/HtI9F1tmkILC4YWB0564qqO51BKisn+" crossorigin="anonymous"></script>
|
||||
<script src="../country-posters.js" integrity="sha384-+uSJg/LdhuPzecJG34oeevbtghdX7Pqaop+MyNzs4tyqd3/1frmrwQimIJgcv/yo" 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 <country-posters-map> custom element. -->
|
||||
<script src="../country-posters.js" integrity="sha384-5NIVhkaYneMmaHPBew8npZq0dQTh17eS/HtI9F1tmkILC4YWB0564qqO51BKisn+" crossorigin="anonymous"></script>
|
||||
<script src="../country-posters.js" integrity="sha384-+uSJg/LdhuPzecJG34oeevbtghdX7Pqaop+MyNzs4tyqd3/1frmrwQimIJgcv/yo" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
244
public/doxa-maps/country-posters/country-posters.js
generated
244
public/doxa-maps/country-posters/country-posters.js
generated
File diff suppressed because one or more lines are too long
108
public/doxa-maps/doxa-research-map/doxa-research-map.js
generated
108
public/doxa-maps/doxa-research-map/doxa-research-map.js
generated
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 <doxa-research-map> custom element. -->
|
||||
<script src="../doxa-research-map.js" integrity="sha384-FvBITE71wOJQKfD92Hau8dqn8CvQ5A2mYid8aTjKvXSLxZR4OqjpJaPsbWjlCPF8" crossorigin="anonymous"></script>
|
||||
<script src="../doxa-research-map.js" integrity="sha384-hCsiL74WyyjIlg577zCcAhG7fD0iUzqdvsnZMGvpiS3ra3NpSEoDczoHMWK2eF6x" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <doxa-research-map> custom element. -->
|
||||
<script src="../../doxa-research-map.js" integrity="sha384-FvBITE71wOJQKfD92Hau8dqn8CvQ5A2mYid8aTjKvXSLxZR4OqjpJaPsbWjlCPF8" crossorigin="anonymous"></script>
|
||||
<script src="../../doxa-research-map.js" integrity="sha384-hCsiL74WyyjIlg577zCcAhG7fD0iUzqdvsnZMGvpiS3ra3NpSEoDczoHMWK2eF6x" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
94
public/doxa-maps/doxa-simple-map/doxa-simple-map.js
generated
94
public/doxa-maps/doxa-simple-map/doxa-simple-map.js
generated
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 <doxa-map> custom element. -->
|
||||
<script src="../../doxa-simple-map.js" integrity="sha384-aQtM9ysPsVk31JRUVi+94JaADl2FBlQLfivtL56FKsK42HVgkyECwJz+UsOROs47" crossorigin="anonymous"></script>
|
||||
<script src="../../doxa-simple-map.js" integrity="sha384-FtEGLeSRNfBCdmK26IURIxCldSnfKphxRT74XgjftFGzNpvube+ov/EVBFi2gXjo" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
|
||||
<script src="../../doxa-simple-map.js" integrity="sha384-aQtM9ysPsVk31JRUVi+94JaADl2FBlQLfivtL56FKsK42HVgkyECwJz+UsOROs47" crossorigin="anonymous"></script>
|
||||
<script src="../../doxa-simple-map.js" integrity="sha384-FtEGLeSRNfBCdmK26IURIxCldSnfKphxRT74XgjftFGzNpvube+ov/EVBFi2gXjo" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
|
||||
<script src="../doxa-simple-map.js" integrity="sha384-aQtM9ysPsVk31JRUVi+94JaADl2FBlQLfivtL56FKsK42HVgkyECwJz+UsOROs47" crossorigin="anonymous"></script>
|
||||
<script src="../doxa-simple-map.js" integrity="sha384-FtEGLeSRNfBCdmK26IURIxCldSnfKphxRT74XgjftFGzNpvube+ov/EVBFi2gXjo" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
|
||||
<script src="../../doxa-simple-map.js" integrity="sha384-aQtM9ysPsVk31JRUVi+94JaADl2FBlQLfivtL56FKsK42HVgkyECwJz+UsOROs47" crossorigin="anonymous"></script>
|
||||
<script src="../../doxa-simple-map.js" integrity="sha384-FtEGLeSRNfBCdmK26IURIxCldSnfKphxRT74XgjftFGzNpvube+ov/EVBFi2gXjo" 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 <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js" integrity="sha384-dWZte5DwJYtc7xJvuh3VHD3zC9WQxOfcteCKTUgx6Oa3C0E2exWVijbT/asHxkjZ" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-r2AwOhX5crwXsnT2MsiQN8+nn2Ea/l2rYdsVL5BGTKR12W9+u7ggkHtDzv7neAPz" 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 <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js" integrity="sha384-dWZte5DwJYtc7xJvuh3VHD3zC9WQxOfcteCKTUgx6Oa3C0E2exWVijbT/asHxkjZ" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-r2AwOhX5crwXsnT2MsiQN8+nn2Ea/l2rYdsVL5BGTKR12W9+u7ggkHtDzv7neAPz" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
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 <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js" integrity="sha384-dWZte5DwJYtc7xJvuh3VHD3zC9WQxOfcteCKTUgx6Oa3C0E2exWVijbT/asHxkjZ" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-r2AwOhX5crwXsnT2MsiQN8+nn2Ea/l2rYdsVL5BGTKR12W9+u7ggkHtDzv7neAPz" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,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-dWZte5DwJYtc7xJvuh3VHD3zC9WQxOfcteCKTUgx6Oa3C0E2exWVijbT/asHxkjZ" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-r2AwOhX5crwXsnT2MsiQN8+nn2Ea/l2rYdsVL5BGTKR12W9+u7ggkHtDzv7neAPz" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
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
50
public/doxa-maps/manifest.json
generated
50
public/doxa-maps/manifest.json
generated
|
|
@ -101,7 +101,7 @@
|
|||
"bundle": "cities-internet",
|
||||
"scriptUrl": "./cities-internet/cities-internet.js",
|
||||
"output": "doxa-maps/cities-internet/cities-internet.js",
|
||||
"integrity": "sha384-qK1s7qgMF7DaMDxJXnS8StZi7vTRWSgWe564NFF2HUO889PW8Sp+uHaTd2LjdI7S",
|
||||
"integrity": "sha384-nzv5X2WdO5IqlVUqnmsDPDSq2uHRbJGyoDIEjHz915D7nAeS428kzYSeaRyAIEf2",
|
||||
"elements": [
|
||||
"cities-internet-map"
|
||||
],
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"scriptUrl": "./cities-internet/cities-internet.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./cities-internet/connectivity-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=\"./cities-internet/cities-internet.js\" integrity=\"sha384-qK1s7qgMF7DaMDxJXnS8StZi7vTRWSgWe564NFF2HUO889PW8Sp+uHaTd2LjdI7S\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-nzv5X2WdO5IqlVUqnmsDPDSq2uHRbJGyoDIEjHz915D7nAeS428kzYSeaRyAIEf2\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -131,7 +131,7 @@
|
|||
"scriptUrl": "./cities-internet/cities-internet.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./cities-internet/connectivity-map/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=\"./cities-internet/cities-internet.js\" integrity=\"sha384-qK1s7qgMF7DaMDxJXnS8StZi7vTRWSgWe564NFF2HUO889PW8Sp+uHaTd2LjdI7S\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-nzv5X2WdO5IqlVUqnmsDPDSq2uHRbJGyoDIEjHz915D7nAeS428kzYSeaRyAIEf2\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -145,7 +145,7 @@
|
|||
"scriptUrl": "./cities-internet/cities-internet.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./cities-internet/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=\"./cities-internet/cities-internet.js\" integrity=\"sha384-qK1s7qgMF7DaMDxJXnS8StZi7vTRWSgWe564NFF2HUO889PW8Sp+uHaTd2LjdI7S\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-nzv5X2WdO5IqlVUqnmsDPDSq2uHRbJGyoDIEjHz915D7nAeS428kzYSeaRyAIEf2\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -154,7 +154,7 @@
|
|||
"bundle": "country-posters",
|
||||
"scriptUrl": "./country-posters/country-posters.js",
|
||||
"output": "doxa-maps/country-posters/country-posters.js",
|
||||
"integrity": "sha384-5NIVhkaYneMmaHPBew8npZq0dQTh17eS/HtI9F1tmkILC4YWB0564qqO51BKisn+",
|
||||
"integrity": "sha384-+uSJg/LdhuPzecJG34oeevbtghdX7Pqaop+MyNzs4tyqd3/1frmrwQimIJgcv/yo",
|
||||
"elements": [
|
||||
"country-posters-map"
|
||||
],
|
||||
|
|
@ -174,7 +174,7 @@
|
|||
"scriptUrl": "./country-posters/country-posters.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./country-posters/countries-map/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=\"./country-posters/country-posters.js\" integrity=\"sha384-5NIVhkaYneMmaHPBew8npZq0dQTh17eS/HtI9F1tmkILC4YWB0564qqO51BKisn+\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-+uSJg/LdhuPzecJG34oeevbtghdX7Pqaop+MyNzs4tyqd3/1frmrwQimIJgcv/yo\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -188,7 +188,7 @@
|
|||
"scriptUrl": "./country-posters/country-posters.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./country-posters/country-poster-wall/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=\"./country-posters/country-posters.js\" integrity=\"sha384-5NIVhkaYneMmaHPBew8npZq0dQTh17eS/HtI9F1tmkILC4YWB0564qqO51BKisn+\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-+uSJg/LdhuPzecJG34oeevbtghdX7Pqaop+MyNzs4tyqd3/1frmrwQimIJgcv/yo\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -202,7 +202,7 @@
|
|||
"scriptUrl": "./country-posters/country-posters.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./country-posters/country-posters-mfe/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=\"./country-posters/country-posters.js\" integrity=\"sha384-5NIVhkaYneMmaHPBew8npZq0dQTh17eS/HtI9F1tmkILC4YWB0564qqO51BKisn+\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-posters-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-+uSJg/LdhuPzecJG34oeevbtghdX7Pqaop+MyNzs4tyqd3/1frmrwQimIJgcv/yo\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-posters-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -349,7 +349,7 @@
|
|||
"bundle": "doxa-research-map",
|
||||
"scriptUrl": "./doxa-research-map/doxa-research-map.js",
|
||||
"output": "doxa-maps/doxa-research-map/doxa-research-map.js",
|
||||
"integrity": "sha384-FvBITE71wOJQKfD92Hau8dqn8CvQ5A2mYid8aTjKvXSLxZR4OqjpJaPsbWjlCPF8",
|
||||
"integrity": "sha384-hCsiL74WyyjIlg577zCcAhG7fD0iUzqdvsnZMGvpiS3ra3NpSEoDczoHMWK2eF6x",
|
||||
"elements": [
|
||||
"doxa-research-map"
|
||||
],
|
||||
|
|
@ -365,7 +365,7 @@
|
|||
"scriptUrl": "./doxa-research-map/doxa-research-map.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./doxa-research-map/research-map/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=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-FvBITE71wOJQKfD92Hau8dqn8CvQ5A2mYid8aTjKvXSLxZR4OqjpJaPsbWjlCPF8\" crossorigin=\"anonymous\"></script>\n<doxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-research-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-hCsiL74WyyjIlg577zCcAhG7fD0iUzqdvsnZMGvpiS3ra3NpSEoDczoHMWK2eF6x\" crossorigin=\"anonymous\"></script>\n<doxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-research-map>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -391,7 +391,7 @@
|
|||
"bundle": "doxa-simple-map",
|
||||
"scriptUrl": "./doxa-simple-map/doxa-simple-map.js",
|
||||
"output": "doxa-maps/doxa-simple-map/doxa-simple-map.js",
|
||||
"integrity": "sha384-aQtM9ysPsVk31JRUVi+94JaADl2FBlQLfivtL56FKsK42HVgkyECwJz+UsOROs47",
|
||||
"integrity": "sha384-FtEGLeSRNfBCdmK26IURIxCldSnfKphxRT74XgjftFGzNpvube+ov/EVBFi2gXjo",
|
||||
"elements": [
|
||||
"doxa-map",
|
||||
"doxa-simple-map"
|
||||
|
|
@ -408,7 +408,7 @@
|
|||
"scriptUrl": "./doxa-simple-map/doxa-simple-map.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./doxa-simple-map/doxa-simple-map/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=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-aQtM9ysPsVk31JRUVi+94JaADl2FBlQLfivtL56FKsK42HVgkyECwJz+UsOROs47\" crossorigin=\"anonymous\"></script>\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-FtEGLeSRNfBCdmK26IURIxCldSnfKphxRT74XgjftFGzNpvube+ov/EVBFi2gXjo\" crossorigin=\"anonymous\"></script>\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-map>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -591,7 +591,7 @@
|
|||
"bundle": "gospel-resources",
|
||||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"output": "doxa-maps/gospel-resources/gospel-resources.js",
|
||||
"integrity": "sha384-dWZte5DwJYtc7xJvuh3VHD3zC9WQxOfcteCKTUgx6Oa3C0E2exWVijbT/asHxkjZ",
|
||||
"integrity": "sha384-r2AwOhX5crwXsnT2MsiQN8+nn2Ea/l2rYdsVL5BGTKR12W9+u7ggkHtDzv7neAPz",
|
||||
"elements": [
|
||||
"gospel-resources-map"
|
||||
],
|
||||
|
|
@ -607,7 +607,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-dWZte5DwJYtc7xJvuh3VHD3zC9WQxOfcteCKTUgx6Oa3C0E2exWVijbT/asHxkjZ\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"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-r2AwOhX5crwXsnT2MsiQN8+nn2Ea/l2rYdsVL5BGTKR12W9+u7ggkHtDzv7neAPz\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -621,7 +621,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-dWZte5DwJYtc7xJvuh3VHD3zC9WQxOfcteCKTUgx6Oa3C0E2exWVijbT/asHxkjZ\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"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-r2AwOhX5crwXsnT2MsiQN8+nn2Ea/l2rYdsVL5BGTKR12W9+u7ggkHtDzv7neAPz\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -635,7 +635,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-dWZte5DwJYtc7xJvuh3VHD3zC9WQxOfcteCKTUgx6Oa3C0E2exWVijbT/asHxkjZ\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"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-r2AwOhX5crwXsnT2MsiQN8+nn2Ea/l2rYdsVL5BGTKR12W9+u7ggkHtDzv7neAPz\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -649,7 +649,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": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-dWZte5DwJYtc7xJvuh3VHD3zC9WQxOfcteCKTUgx6Oa3C0E2exWVijbT/asHxkjZ\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"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-r2AwOhX5crwXsnT2MsiQN8+nn2Ea/l2rYdsVL5BGTKR12W9+u7ggkHtDzv7neAPz\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -658,7 +658,7 @@
|
|||
"bundle": "my-upg-100-list",
|
||||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"output": "doxa-maps/my-upg-100-list/my-upg-100-list.js",
|
||||
"integrity": "sha384-BoJ6i9UlcNIEw76OeLFJP2FJYItC1dRcOxbAm94MpsrtEG5f63MTLrnuUPnLX28r",
|
||||
"integrity": "sha384-KF3XG9q4VdSvuLQEeK0P1gsKg1cpNOvkLYK5MAIMCUwSsO07z5dI4ffGuc4U6Y+p",
|
||||
"elements": [
|
||||
"my-upg-100-list-map"
|
||||
],
|
||||
|
|
@ -678,7 +678,7 @@
|
|||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./my-upg-100-list/poster-wall/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=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-BoJ6i9UlcNIEw76OeLFJP2FJYItC1dRcOxbAm94MpsrtEG5f63MTLrnuUPnLX28r\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-KF3XG9q4VdSvuLQEeK0P1gsKg1cpNOvkLYK5MAIMCUwSsO07z5dI4ffGuc4U6Y+p\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -692,7 +692,7 @@
|
|||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./my-upg-100-list/upg-100-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=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-BoJ6i9UlcNIEw76OeLFJP2FJYItC1dRcOxbAm94MpsrtEG5f63MTLrnuUPnLX28r\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-KF3XG9q4VdSvuLQEeK0P1gsKg1cpNOvkLYK5MAIMCUwSsO07z5dI4ffGuc4U6Y+p\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -706,7 +706,7 @@
|
|||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./my-upg-100-list/upg-100-mfe/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=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-BoJ6i9UlcNIEw76OeLFJP2FJYItC1dRcOxbAm94MpsrtEG5f63MTLrnuUPnLX28r\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-KF3XG9q4VdSvuLQEeK0P1gsKg1cpNOvkLYK5MAIMCUwSsO07z5dI4ffGuc4U6Y+p\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -856,7 +856,7 @@
|
|||
"bundle": "regions-dashboard",
|
||||
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
|
||||
"output": "doxa-maps/regions-dashboard/regions-dashboard.js",
|
||||
"integrity": "sha384-4wHsJRC20pbwhDrZq3Rjop9CrHeO3WBd7qJW21zY/SNjBhJXHgmkCx0EMRs3Q7EI",
|
||||
"integrity": "sha384-ytQtETEeE4XyDOiMQwksdiiRD6dD55yw+8DO3Xqk0fCfQkpjjNPvA0DTdtMMIFQo",
|
||||
"elements": [
|
||||
"regions-dashboard"
|
||||
],
|
||||
|
|
@ -876,7 +876,7 @@
|
|||
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./regions-dashboard/region-dashboards/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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-4wHsJRC20pbwhDrZq3Rjop9CrHeO3WBd7qJW21zY/SNjBhJXHgmkCx0EMRs3Q7EI\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-ytQtETEeE4XyDOiMQwksdiiRD6dD55yw+8DO3Xqk0fCfQkpjjNPvA0DTdtMMIFQo\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -890,7 +890,7 @@
|
|||
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./regions-dashboard/regions-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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-4wHsJRC20pbwhDrZq3Rjop9CrHeO3WBd7qJW21zY/SNjBhJXHgmkCx0EMRs3Q7EI\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-ytQtETEeE4XyDOiMQwksdiiRD6dD55yw+8DO3Xqk0fCfQkpjjNPvA0DTdtMMIFQo\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -904,7 +904,7 @@
|
|||
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./regions-dashboard/regions-mfe/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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-4wHsJRC20pbwhDrZq3Rjop9CrHeO3WBd7qJW21zY/SNjBhJXHgmkCx0EMRs3Q7EI\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-ytQtETEeE4XyDOiMQwksdiiRD6dD55yw+8DO3Xqk0fCfQkpjjNPvA0DTdtMMIFQo\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
|||
180
public/doxa-maps/my-upg-100-list/my-upg-100-list.js
generated
180
public/doxa-maps/my-upg-100-list/my-upg-100-list.js
generated
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 <my-upg-100-list-map> custom element. -->
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-BoJ6i9UlcNIEw76OeLFJP2FJYItC1dRcOxbAm94MpsrtEG5f63MTLrnuUPnLX28r" crossorigin="anonymous"></script>
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-KF3XG9q4VdSvuLQEeK0P1gsKg1cpNOvkLYK5MAIMCUwSsO07z5dI4ffGuc4U6Y+p" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <my-upg-100-list-map> custom element. -->
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-BoJ6i9UlcNIEw76OeLFJP2FJYItC1dRcOxbAm94MpsrtEG5f63MTLrnuUPnLX28r" crossorigin="anonymous"></script>
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-KF3XG9q4VdSvuLQEeK0P1gsKg1cpNOvkLYK5MAIMCUwSsO07z5dI4ffGuc4U6Y+p" 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 <my-upg-100-list-map> custom element. -->
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-BoJ6i9UlcNIEw76OeLFJP2FJYItC1dRcOxbAm94MpsrtEG5f63MTLrnuUPnLX28r" crossorigin="anonymous"></script>
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-KF3XG9q4VdSvuLQEeK0P1gsKg1cpNOvkLYK5MAIMCUwSsO07z5dI4ffGuc4U6Y+p" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <regions-dashboard> custom element. -->
|
||||
<script src="../regions-dashboard.js" integrity="sha384-4wHsJRC20pbwhDrZq3Rjop9CrHeO3WBd7qJW21zY/SNjBhJXHgmkCx0EMRs3Q7EI" crossorigin="anonymous"></script>
|
||||
<script src="../regions-dashboard.js" integrity="sha384-ytQtETEeE4XyDOiMQwksdiiRD6dD55yw+8DO3Xqk0fCfQkpjjNPvA0DTdtMMIFQo" 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 <regions-dashboard> custom element. -->
|
||||
<script src="../regions-dashboard.js" integrity="sha384-4wHsJRC20pbwhDrZq3Rjop9CrHeO3WBd7qJW21zY/SNjBhJXHgmkCx0EMRs3Q7EI" crossorigin="anonymous"></script>
|
||||
<script src="../regions-dashboard.js" integrity="sha384-ytQtETEeE4XyDOiMQwksdiiRD6dD55yw+8DO3Xqk0fCfQkpjjNPvA0DTdtMMIFQo" 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 <regions-dashboard> custom element. -->
|
||||
<script src="../regions-dashboard.js" integrity="sha384-4wHsJRC20pbwhDrZq3Rjop9CrHeO3WBd7qJW21zY/SNjBhJXHgmkCx0EMRs3Q7EI" crossorigin="anonymous"></script>
|
||||
<script src="../regions-dashboard.js" integrity="sha384-ytQtETEeE4XyDOiMQwksdiiRD6dD55yw+8DO3Xqk0fCfQkpjjNPvA0DTdtMMIFQo" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
Loading…
Reference in a new issue