Update from source 34b375ee
This commit is contained in:
parent
c08421f886
commit
b25d403a90
21 changed files with 515 additions and 174 deletions
|
|
@ -63,12 +63,36 @@ const PATTERN = new RegExp(
|
|||
function scan(text) {
|
||||
const hits = []
|
||||
const lines = text.split('\n')
|
||||
// ⚠ BLOCK-COMMENT STATE, not a per-line prefix test. The first version asked only whether a line
|
||||
// STARTS with //, * or /*, and that is not what a comment is: it misses every CONTINUATION line of a
|
||||
// /* … */ block whose text happens to begin with something else.
|
||||
//
|
||||
// IT COST A FALSE ACCUSATION, 2026-09-27, and the accusation was aimed at the correct fix. gospel
|
||||
// fixed this defect in resources-map.vue — `const gl = engineGlobal(grProvider)`, no `||` — and
|
||||
// documented what they removed in a /* */ block whose second line begins with a BACKTICK:
|
||||
// `engineGlobal(grProvider) || window.mapboxgl`. engineGlobal already defaults to mapbox, so
|
||||
// The prefix test saw no comment marker, matched the quoted pattern, and reported gospel as the last
|
||||
// remaining offender at main 9df086e5. I relayed that to dx-shepherd as fact and it was wrong: the
|
||||
// line number had also moved three times (1490 -> 1505 -> 1509) purely because their file grew, which
|
||||
// is what made a stale card look like a live defect.
|
||||
// ★ A GATE THAT FAILS ON THE EXPLANATION OF A FIX IS WORSE THAN NO GATE. It tells the one person who
|
||||
// did the right thing that they did the wrong thing, and the cheapest way to make it green is to
|
||||
// DELETE the explanation — so the gate actively destroys the reasoning it should protect. This file's
|
||||
// own header quotes the pattern for the same reason, which is why the skip existed at all; it was
|
||||
// just too shallow to cover the form another agent actually used.
|
||||
let inBlock = false
|
||||
lines.forEach((line, i) => {
|
||||
// Skip comment lines: this file's own documentation quotes the bad pattern, and so does every fix
|
||||
// that explains what it removed. A gate that fails on its own explanation teaches people to delete
|
||||
// the explanation.
|
||||
const t = line.trim()
|
||||
if (t.startsWith('//') || t.startsWith('*') || t.startsWith('/*')) return
|
||||
const wasInBlock = inBlock
|
||||
// Track /* and */ on this line so the NEXT line knows where it stands. Deliberately simple: a
|
||||
// block marker inside a string literal would fool it, and the alternative is a JS parser for a
|
||||
// one-expression grep. The failure mode of over-skipping is a missed offender, which the
|
||||
// --self-test guards against by keeping real forms in the MUST-MATCH list.
|
||||
const opens = (line.match(/\/\*/g) || []).length
|
||||
const closes = (line.match(/\*\//g) || []).length
|
||||
if (opens > closes) inBlock = true
|
||||
else if (closes > opens) inBlock = false
|
||||
if (wasInBlock || t.startsWith('//') || t.startsWith('*') || t.startsWith('/*')) return
|
||||
PATTERN.lastIndex = 0
|
||||
let m
|
||||
while ((m = PATTERN.exec(line)) !== null) hits.push({ line: i + 1, engine: m[1], text: t.slice(0, 110) })
|
||||
|
|
@ -90,6 +114,21 @@ if (SELF_TEST) {
|
|||
'const gl = engineGlobal(p) || null',
|
||||
'const token = mapboxToken?.value || profileConfig?.value?.tk || \'\'',
|
||||
]
|
||||
// ★ MULTI-LINE CASES, because the single-line list above cannot express the bug that actually
|
||||
// happened: a CONTINUATION line of a /* */ block. Each entry is scanned as one text so the
|
||||
// block-comment state machine is what is under test, not the prefix check.
|
||||
const shouldNotMultiline = [
|
||||
// gospel's real fix at resources-map.vue, verbatim in shape — the line that was falsely accused
|
||||
// begins with a BACKTICK, so no prefix test could ever have skipped it.
|
||||
[` /* ⚠ NEVER SWITCH ENGINES SILENTLY. This used to read
|
||||
\`engineGlobal(grProvider) || window.mapboxgl\`. engineGlobal already defaults to mapbox, so
|
||||
the fallback could only ever fire for provider 'maplibre'. */
|
||||
const gl = engineGlobal(grProvider)`, 'a /* */ block quoting the removed fallback, then the correct fix'],
|
||||
// and the inverse: a real offender AFTER a block comment closes must still be caught, or the fix
|
||||
// above would have traded a false positive for a false negative.
|
||||
[` /* explanation that mentions engineGlobal(p) || window.mapboxgl and then ends */
|
||||
const gl = engineGlobal(p) || window.mapboxgl`, null],
|
||||
]
|
||||
let bad = 0
|
||||
for (const s of should) {
|
||||
const n = scan(s).length
|
||||
|
|
@ -101,6 +140,17 @@ if (SELF_TEST) {
|
|||
console.log(` ${n ? 'FALSE+ ' : 'ignored '} ${s.trim().slice(0, 62)}`)
|
||||
if (n) bad++
|
||||
}
|
||||
// The multi-line pairs: a label means "must be IGNORED and here is why", null means "must MATCH".
|
||||
// Both directions are asserted together on purpose — fixing the false positive by skipping more is
|
||||
// only correct if a real offender after the block still fails.
|
||||
for (const [text, why] of shouldNotMultiline) {
|
||||
const n = scan(text).length
|
||||
const wantHit = why === null
|
||||
const ok = wantHit ? n > 0 : n === 0
|
||||
if (!ok) bad++
|
||||
console.log(` ${ok ? (wantHit ? 'MATCHED ' : 'ignored ') : (wantHit ? 'MISSED ' : 'FALSE+ ')} `
|
||||
+ `[multi-line] ${wantHit ? 'a real offender AFTER a closed block comment' : why}`)
|
||||
}
|
||||
if (bad) {
|
||||
console.error(`\nNO-SILENT-ENGINE-SUBSTITUTION --self-test: FAIL — ${bad} case(s) wrong.`)
|
||||
process.exit(1)
|
||||
|
|
|
|||
|
|
@ -182,7 +182,9 @@
|
|||
"funnel_list_unreached": "Project 7000: unreached people groups",
|
||||
"funnel_list_frontier": "Project 4700: frontier people groups",
|
||||
"funnel_list_frontier-500k": "Project 700: frontier people groups of 500,000 or more",
|
||||
"funnel_list_unengaged": "Unengaged unreached people groups"
|
||||
"funnel_list_unengaged": "Unengaged unreached people groups",
|
||||
"zone_join": "{a} + {b}",
|
||||
"zone_join_more": "{a} + {n} more"
|
||||
},
|
||||
"es": {
|
||||
"map_page_kicker": "GRUPOS ÉTNICOS NO EVANGELIZADOS",
|
||||
|
|
@ -357,7 +359,9 @@
|
|||
"funnel_list_unreached": "Proyecto 7000: grupos étnicos no alcanzados",
|
||||
"funnel_list_frontier": "Proyecto 4700: grupos étnicos de frontera",
|
||||
"funnel_list_frontier-500k": "Proyecto 700: grupos étnicos de frontera de 500.000 o más",
|
||||
"funnel_list_unengaged": "Grupos étnicos no alcanzados y sin obreros"
|
||||
"funnel_list_unengaged": "Grupos étnicos no alcanzados y sin obreros",
|
||||
"zone_join": "{a} + {b}",
|
||||
"zone_join_more": "{a} + {n} más"
|
||||
},
|
||||
"fr": {
|
||||
"map_page_kicker": "GROUPES ETHNIQUES NON ATTEINTS",
|
||||
|
|
@ -532,7 +536,9 @@
|
|||
"funnel_list_unreached": "Projet 7000 : peuples non atteints",
|
||||
"funnel_list_frontier": "Projet 4700 : peuples frontières",
|
||||
"funnel_list_frontier-500k": "Projet 700 : peuples frontières de 500 000 personnes ou plus",
|
||||
"funnel_list_unengaged": "Peuples non atteints et sans ouvrier"
|
||||
"funnel_list_unengaged": "Peuples non atteints et sans ouvrier",
|
||||
"zone_join": "{a} + {b}",
|
||||
"zone_join_more": "{a} + {n} autres"
|
||||
},
|
||||
"pt": {
|
||||
"map_page_kicker": "GRUPOS ÉTNICOS NÃO ALCANÇADOS",
|
||||
|
|
@ -707,7 +713,9 @@
|
|||
"funnel_list_unreached": "Projeto 7000: grupos étnicos não alcançados",
|
||||
"funnel_list_frontier": "Projeto 4700: grupos étnicos de fronteira",
|
||||
"funnel_list_frontier-500k": "Projeto 700: grupos étnicos de fronteira de 500.000 ou mais",
|
||||
"funnel_list_unengaged": "Grupos étnicos não alcançados e sem obreiros"
|
||||
"funnel_list_unengaged": "Grupos étnicos não alcançados e sem obreiros",
|
||||
"zone_join": "{a} + {b}",
|
||||
"zone_join_more": "{a} + {n} mais"
|
||||
},
|
||||
"de": {
|
||||
"map_page_kicker": "UNERREICHTE VOLKSGRUPPEN",
|
||||
|
|
@ -882,7 +890,9 @@
|
|||
"funnel_list_unreached": "Projekt 7000: unerreichte Volksgruppen",
|
||||
"funnel_list_frontier": "Projekt 4700: Frontier-Volksgruppen",
|
||||
"funnel_list_frontier-500k": "Projekt 700: Frontier-Volksgruppen mit 500.000 oder mehr",
|
||||
"funnel_list_unengaged": "Unerreichte Volksgruppen ohne Mitarbeiter"
|
||||
"funnel_list_unengaged": "Unerreichte Volksgruppen ohne Mitarbeiter",
|
||||
"zone_join": "{a} + {b}",
|
||||
"zone_join_more": "{a} + {n} weitere"
|
||||
},
|
||||
"it": {
|
||||
"map_page_kicker": "GRUPPI ETNICI NON RAGGIUNTI",
|
||||
|
|
@ -1057,7 +1067,9 @@
|
|||
"funnel_list_unreached": "Progetto 7000: gruppi etnici non raggiunti",
|
||||
"funnel_list_frontier": "Progetto 4700: gruppi etnici di frontiera",
|
||||
"funnel_list_frontier-500k": "Progetto 700: gruppi etnici di frontiera di 500.000 o più",
|
||||
"funnel_list_unengaged": "Gruppi etnici non raggiunti e senza operai"
|
||||
"funnel_list_unengaged": "Gruppi etnici non raggiunti e senza operai",
|
||||
"zone_join": "{a} + {b}",
|
||||
"zone_join_more": "{a} + altri {n}"
|
||||
},
|
||||
"ro": {
|
||||
"map_page_kicker": "GRUPURI ETNICE NEATINSE",
|
||||
|
|
@ -1232,7 +1244,9 @@
|
|||
"funnel_list_unreached": "Proiectul 7000: grupuri etnice neatinse",
|
||||
"funnel_list_frontier": "Proiectul 4700: grupuri etnice de frontieră",
|
||||
"funnel_list_frontier-500k": "Proiectul 700: grupuri etnice de frontieră de 500.000 sau mai multe",
|
||||
"funnel_list_unengaged": "Grupuri etnice neatinse și fără lucrători"
|
||||
"funnel_list_unengaged": "Grupuri etnice neatinse și fără lucrători",
|
||||
"zone_join": "{a} + {b}",
|
||||
"zone_join_more": "{a} + încă {n}"
|
||||
},
|
||||
"ru": {
|
||||
"map_page_kicker": "НЕОХВАЧЕННЫЕ НАРОДЫ",
|
||||
|
|
@ -1407,7 +1421,9 @@
|
|||
"funnel_list_unreached": "Проект 7000: неохваченные народы",
|
||||
"funnel_list_frontier": "Проект 4700: народы-фронтир",
|
||||
"funnel_list_frontier-500k": "Проект 700: народы-фронтир численностью 500 000 и более",
|
||||
"funnel_list_unengaged": "Неохваченные народы без работников"
|
||||
"funnel_list_unengaged": "Неохваченные народы без работников",
|
||||
"zone_join": "{a} + {b}",
|
||||
"zone_join_more": "{a} + ещё {n}"
|
||||
},
|
||||
"ar": {
|
||||
"map_page_kicker": "شعوب غير مبلَّغة",
|
||||
|
|
@ -1582,7 +1598,9 @@
|
|||
"funnel_list_unreached": "مشروع 7000: المجموعات الشعبية غير المبلَّغة",
|
||||
"funnel_list_frontier": "مشروع 4700: المجموعات الشعبية الحدودية",
|
||||
"funnel_list_frontier-500k": "مشروع 700: المجموعات الشعبية الحدودية التي يبلغ عددها 500,000 أو أكثر",
|
||||
"funnel_list_unengaged": "مجموعات شعبية غير مبلَّغة وبلا عاملين"
|
||||
"funnel_list_unengaged": "مجموعات شعبية غير مبلَّغة وبلا عاملين",
|
||||
"zone_join": "{a} + {b}",
|
||||
"zone_join_more": "{a} + {n} أخرى"
|
||||
},
|
||||
"hi": {
|
||||
"map_page_kicker": "अनछुए जनसमूह",
|
||||
|
|
@ -1757,7 +1775,9 @@
|
|||
"funnel_list_unreached": "परियोजना 7000: अप्राप्त जनसमूह",
|
||||
"funnel_list_frontier": "परियोजना 4700: सीमांत जनसमूह",
|
||||
"funnel_list_frontier-500k": "परियोजना 700: 500,000 या अधिक के सीमांत जनसमूह",
|
||||
"funnel_list_unengaged": "अप्राप्त जनसमूह जिनमें कोई कार्यकर्ता नहीं"
|
||||
"funnel_list_unengaged": "अप्राप्त जनसमूह जिनमें कोई कार्यकर्ता नहीं",
|
||||
"zone_join": "{a} + {b}",
|
||||
"zone_join_more": "{a} + {n} और"
|
||||
},
|
||||
"zh": {
|
||||
"map_page_kicker": "未得之民",
|
||||
|
|
@ -1932,6 +1952,8 @@
|
|||
"funnel_list_unreached": "7000 计划:未得之民族群",
|
||||
"funnel_list_frontier": "4700 计划:前沿族群",
|
||||
"funnel_list_frontier-500k": "700 计划:50 万人以上的前沿族群",
|
||||
"funnel_list_unengaged": "无人服事的未得之民族群"
|
||||
"funnel_list_unengaged": "无人服事的未得之民族群",
|
||||
"zone_join": "{a} + {b}",
|
||||
"zone_join_more": "{a} + 另外 {n} 个"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -85,6 +85,16 @@ function leafPopulation(row, records) {
|
|||
export function buildLegendNodes(clusters, opts = {}) {
|
||||
const deafCount = opts.deafCount ?? 123;
|
||||
const records = Array.isArray(opts.records) ? opts.records : null;
|
||||
// ★ OPTIONAL GENERATED TITLE (the agent, 2026-09-27). `opts.title(zone)` returns a localized title
|
||||
// composed from already-translated parts, or NULL for a zone whose title cannot be generated — see
|
||||
// data/zone-title.js. Passing nothing keeps every hand-written English label exactly as it was, which
|
||||
// is why this is an option rather than a rewrite: the legend, the poster and the packet adopt it
|
||||
// independently, and a caller that has no records yet (records:null) still builds a correct tree.
|
||||
// ⚠ NULL MEANS "KEEP YOURS", NOT "NO TITLE". 18 of 28 zones decline (their labels are sub-national or
|
||||
// taxonomic, and Intl has no subdivisions), so the fallback is the normal path, not the error path.
|
||||
const titleOf = typeof opts.title === 'function'
|
||||
? (zone, fallback) => opts.title(zone) || fallback
|
||||
: (_zone, fallback) => fallback;
|
||||
const lists = clusters.lists || [];
|
||||
const asia = clusters.asia_lists || [];
|
||||
// slice 09b-6 §1(a): wire the 7 uncovered "Frontier Asia" zones (Nepal,
|
||||
|
|
@ -137,7 +147,7 @@ export function buildLegendNodes(clusters, opts = {}) {
|
|||
{
|
||||
id: l.id,
|
||||
zoneKey: l.id,
|
||||
label: l.label,
|
||||
label: titleOf(l, l.label),
|
||||
// Carry the province enumeration the region-name label replaced.
|
||||
...(l.provinceLabel ? { provinceLabel: l.provinceLabel } : {}),
|
||||
color: colorOf(l.id),
|
||||
|
|
@ -171,7 +181,7 @@ export function buildLegendNodes(clusters, opts = {}) {
|
|||
{
|
||||
id: r.id,
|
||||
zoneKey: r.id,
|
||||
label: r.label,
|
||||
label: titleOf(r, r.label),
|
||||
// The province enumeration the region-name label replaced. Carried through
|
||||
// like adm0/provinces above — a node rebuilt field-by-field silently drops
|
||||
// anything not named, which is exactly how adm0 and population were lost.
|
||||
|
|
@ -228,7 +238,7 @@ export function buildLegendNodes(clusters, opts = {}) {
|
|||
{
|
||||
id: u.id,
|
||||
zoneKey: u.id,
|
||||
label: u.label,
|
||||
label: titleOf(u, u.label),
|
||||
// Carry the province enumeration the region-name label replaced.
|
||||
...(u.provinceLabel ? { provinceLabel: u.provinceLabel } : {}),
|
||||
color: colorOf(u.id),
|
||||
|
|
|
|||
178
plugin-designs/my-upg-100-list/data/zone-title.js
vendored
Normal file
178
plugin-designs/my-upg-100-list/data/zone-title.js
vendored
Normal file
|
|
@ -0,0 +1,178 @@
|
|||
/**
|
||||
* zone-title — compose a zone's DISPLAY TITLE from parts that are ALREADY translated, so adding a
|
||||
* project list costs no new translation and adding a locale costs no code change.
|
||||
*
|
||||
* THE PROBLEM (the agent, 2026-09-27). Every zone label is a hand-written English string — "Middle East
|
||||
* Core", "Malabar Coast" — so the Arabic map reads English. Hand-translating them does not scale,
|
||||
* because UPG-100 is becoming a PATTERN: Project 7000 / 4700 / 3000 / 2000 / 700 each invent their own
|
||||
* ~100 clusters, and a per-title translation is a cost paid again for every list, forever. The agent's
|
||||
* question was precisely "how do you generate a title without a new translation each time".
|
||||
*
|
||||
* ★ WHAT THE DATA ACTUALLY ALLOWS, measured before any of this was written (2026-09-27):
|
||||
*
|
||||
* SOURCE COVERAGE OF OUR DATA FAILURE MODE
|
||||
* country_code_label from the records API all 175 codes, every locale (absent field)
|
||||
* Intl.DisplayNames({type:'region'}) all 175, every locale THROWS on ISO-3
|
||||
* Intl.DisplayNames({type:'language'}) 213 of 2242 = 9.5% ECHOES THE CODE
|
||||
*
|
||||
* ⚠ LANGUAGE IS NOT A USABLE TITLE SOURCE, which kills the more attractive half of the original idea.
|
||||
* `new Intl.DisplayNames(['en'],{type:'language'}).of('kfa')` returns the STRING "kfa" — it does not
|
||||
* throw — so a miss prints a raw code onto a printed poster with nothing raising a hand. And the 90.5%
|
||||
* miss is STRUCTURAL rather than a gap someone can fill: unreached peoples speak small languages by
|
||||
* definition, and CLDR carries the big ones. So this module never names a language.
|
||||
*
|
||||
* ★ AND COUNTRY NAMES COME FROM THE RECORDS, NOT FROM Intl, which was the measurement that simplified
|
||||
* the whole design. The records API already returns `country_code_label` localized by its own `lang`
|
||||
* parameter — verified live: IND is الهند / भारत / 印度 / Индия for lang=ar/hi/zh/ru, matching Intl
|
||||
* exactly. Since the packet and the page ALREADY fetch these records at the reader's locale, the
|
||||
* localized name is free and needs no ISO-3166 alpha-3 → alpha-2 mapping at all. Intl is kept only as a
|
||||
* FALLBACK for a caller who has a code and no record.
|
||||
*
|
||||
* WHICH ZONES THIS CAN AND CANNOT TITLE — stated here because a generator that silently produces a bad
|
||||
* title is worse than one that declines:
|
||||
* TIER A selector country_code → one country name. GENERATED
|
||||
* TIER B selector country_codes → 2..n country names + a joiner. GENERATED
|
||||
* TIER C wagf_block / wagf_region / pg_slugs / union / affinity_bloc → null. DECLINED
|
||||
* Tier C is 18 of our 28 zones and it cannot be done from country names: the 12 India/China zones are
|
||||
* `pg_slugs` whose every record is ONE country (measured: asia-india-kerala is 78/78 IND), so countries
|
||||
* would render "India" twelve times and could not tell "Malabar Coast" from "Northwest India" — those
|
||||
* labels are SUB-NATIONAL. Naming them needs a province/subdivision source, which Intl has none of; the
|
||||
* curated-table-vs-keep-English choice is with the agent (repo's digest item D). Until it is decided
|
||||
* this returns null for tier C and the caller keeps the existing label, so nothing regresses.
|
||||
*
|
||||
* THE ONLY TRANSLATED STRINGS ARE THE TWO JOINERS — `zone_join` ("{a} + {b}") and `zone_join_more`
|
||||
* ("{a} + {n} more") — in packet-strings.json, one pair per locale block. That is the entire
|
||||
* translation cost for every project list that ever uses this.
|
||||
*/
|
||||
|
||||
/** Tier A/B selector types. Anything else is tier C and declined. */
|
||||
const COUNTRY_SELECTORS = new Set(['country_code', 'country_codes'])
|
||||
|
||||
/**
|
||||
* The ISO-3 codes a selector names, in the order the selector lists them.
|
||||
* ⚠ ORDER IS THE AUTHOR'S, NOT ALPHABETICAL. clusters.json lists the countries of a zone with the
|
||||
* biggest/most representative first (middle-east-core starts IRN,YEM,IRQ), and that order is editorial
|
||||
* information: it is what makes "Iran + Yemen + 8 more" a better title than "Bahrain + Iran + 8 more".
|
||||
* Sorting here would discard a judgement someone already made.
|
||||
*/
|
||||
export function zoneCountryCodes(selector) {
|
||||
if (!selector || !COUNTRY_SELECTORS.has(selector.type)) return []
|
||||
if (selector.type === 'country_code') return selector.value ? [selector.value] : []
|
||||
return Array.isArray(selector.values) ? selector.values.filter(Boolean) : []
|
||||
}
|
||||
|
||||
/**
|
||||
* ISO-3 → a localized country name.
|
||||
*
|
||||
* @param {string} iso3
|
||||
* @param {object} opts
|
||||
* @param {Map<string,string>} [opts.byCode] ISO-3 → country_code_label, built from the records this
|
||||
* page/packet already loaded AT THE READER'S LOCALE. The preferred source: no alpha-2 mapping,
|
||||
* no second service, and it agrees with Intl where both have an answer.
|
||||
* @param {string} [opts.locale] used only by the Intl fallback.
|
||||
* @param {(iso3:string, locale:string)=>string} [opts.countryName] regions-plugin's coming library
|
||||
* helper (their card BUILD-LOCALIZED-COUNTRY-NAMES-ISO3-TO-ISO2). Injected rather than imported
|
||||
* so this module does not depend on an unlanded file; when it lands, pass it and it wins over
|
||||
* the local Intl fallback.
|
||||
* @returns {string|null} null rather than the raw code — see below.
|
||||
*/
|
||||
export function countryLabel(iso3, opts = {}) {
|
||||
const code = String(iso3 || '').toUpperCase()
|
||||
if (!code) return null
|
||||
// ★ ORDER: regions' helper (or Intl) FIRST, the records' label SECOND — and this order is the
|
||||
// opposite of the one I wrote first, corrected by measuring what the two sources actually say.
|
||||
// The records API returns the FORMAL country name, which is wrong for a poster header:
|
||||
// LAO "Lao People's Democratic Republic" vs Intl "Laos"
|
||||
// IRN "Islamic Republic of Iran" vs Intl "Iran"
|
||||
// CHN "People's Republic of China" vs Intl "China"
|
||||
// 28 of our 175 country labels are long formal forms like these. My first version preferred the
|
||||
// records because they were already localized and needed no code mapping — true, and it produced
|
||||
// "Lao People's Democratic Republic" as the title of the zone whose hand-written label was "Laos",
|
||||
// i.e. a generated title WORSE than the one it replaced. Intl gives the short common form in every
|
||||
// locale, which is what a header and a 380px legend row want.
|
||||
// The records stay as the fallback because they need no alpha-2 mapping and are always present.
|
||||
if (typeof opts.countryName === 'function') {
|
||||
const n = opts.countryName(code, opts.locale || 'en')
|
||||
if (n && n !== code) return n
|
||||
}
|
||||
// ⚠ Intl REGIONS TAKE ALPHA-2 AND THROW ON ALPHA-3 — `new Intl.DisplayNames(['en'],{type:'region'})
|
||||
// .of('IND')` is a RangeError, not a miss. So a 3-letter code needs a mapping, and `alpha2` is that
|
||||
// mapping, INJECTED rather than imported: regions-plugin owns the ISO-3→ISO-2 table (their card
|
||||
// BUILD-LOCALIZED-COUNTRY-NAMES-ISO3-TO-ISO2) and it has not landed, so this module must work without
|
||||
// it and improve when it arrives. With no mapper a 3-letter code simply falls through to the records
|
||||
// label below — the formal name, but a real localized name.
|
||||
// That THROW-vs-ECHO asymmetry with the language type is also why every lookup here ends in null
|
||||
// rather than in a code: one failure is loud, the other silent, and null normalises both.
|
||||
const two = code.length === 2 ? code
|
||||
: (typeof opts.alpha2 === 'function' ? String(opts.alpha2(code) || '').toUpperCase() : '')
|
||||
if (two.length === 2) {
|
||||
try {
|
||||
const n = new Intl.DisplayNames([opts.locale || 'en'], { type: 'region' }).of(two)
|
||||
if (n && n !== two) return n
|
||||
} catch (_) { /* not a region Intl knows */ }
|
||||
}
|
||||
// The records' own label: always localized, always present, but the FORMAL form. Second choice, not
|
||||
// no choice.
|
||||
const fromRecords = opts.byCode?.get(code)
|
||||
if (fromRecords) return fromRecords
|
||||
// ★ NEVER RETURN THE CODE. "SDN + 3 more" on a poster looks like a data bug to a reader and, worse,
|
||||
// reads as a successful translation to a gate that only checks the string is non-empty. A null makes
|
||||
// the caller fall back to the existing label, which is English but is at least a WORD.
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* The generated title for a zone, or null if this zone is not the kind that can be generated.
|
||||
*
|
||||
* @param {object} zone a clusters.json zone (needs .selector)
|
||||
* @param {object} strings the resolved locale block from packet-strings.json (per-KEY fallback to en
|
||||
* already applied by the caller, as packet.mjs does)
|
||||
* @param {object} opts as countryLabel, plus:
|
||||
* @param {number} [opts.maxParts=2] how many countries to name before collapsing to "+ n more".
|
||||
* 2 by default because these titles print on a poster header and in a legend row: three names
|
||||
* already wrap at the legend's 380px panel width in ar and hi, where the words are longer.
|
||||
* @returns {string|null}
|
||||
*/
|
||||
export function zoneTitle(zone, strings, opts = {}) {
|
||||
const codes = zoneCountryCodes(zone?.selector)
|
||||
if (!codes.length) return null // tier C — declined, caller keeps its label
|
||||
const maxParts = Math.max(1, opts.maxParts ?? 2)
|
||||
|
||||
const named = codes.map((c) => countryLabel(c, opts))
|
||||
// ★ ALL-OR-NOTHING ON THE NAMED HEAD. If any of the countries we would SHOW has no name, decline the
|
||||
// whole title rather than printing a partial one: a title that names two of three countries and drops
|
||||
// the third silently misinforms, and it cannot be distinguished from a correct title downstream.
|
||||
const head = named.slice(0, maxParts)
|
||||
if (head.some((n) => !n)) return null
|
||||
|
||||
if (codes.length === 1) return head[0]
|
||||
if (codes.length <= maxParts) {
|
||||
// Fold left so three names read "a + b + c" using the same two-part joiner, rather than needing a
|
||||
// separate three-part string per locale.
|
||||
return head.reduce((acc, n) => fill(strings?.zone_join, { a: acc, b: n }) ?? `${acc} + ${n}`)
|
||||
}
|
||||
const rest = codes.length - maxParts
|
||||
const joined = head.reduce((acc, n) => fill(strings?.zone_join, { a: acc, b: n }) ?? `${acc} + ${n}`)
|
||||
return fill(strings?.zone_join_more, { a: joined, n: rest }) ?? `${joined} + ${rest} more`
|
||||
}
|
||||
|
||||
/** `{a}` / `{b}` / `{n}` interpolation. Returns null on a missing pattern so the caller can default. */
|
||||
function fill(pattern, params) {
|
||||
if (!pattern) return null
|
||||
return String(pattern).replace(/\{(\w+)\}/g, (m, k) => (params[k] != null ? String(params[k]) : m))
|
||||
}
|
||||
|
||||
/**
|
||||
* ISO-3 → localized country label, from records the caller already has.
|
||||
* Built once per render rather than scanned per zone: 2107 records x 28 zones is 59k scans for data
|
||||
* that does not change during a render.
|
||||
*/
|
||||
export function countryLabelIndex(records) {
|
||||
const m = new Map()
|
||||
for (const r of records || []) {
|
||||
const cc = r?.country_code
|
||||
const label = r?.country_code_label
|
||||
if (cc && label && !m.has(cc)) m.set(String(cc).toUpperCase(), label)
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
|
@ -612,14 +612,32 @@ useShadowStyles(
|
|||
// The detail panel is the legend's mirror image (it sits top-RIGHT in LTR), so it has to swap too or
|
||||
// the two would trade places and collide on the other side.
|
||||
'[dir="rtl"] .upg-detail-panel{right:auto!important;left:8px!important}' +
|
||||
// ⚠ AND THE ROWS THEMSELVES. dir on the wrapper does NOT reach content that sets its own direction,
|
||||
// and the legend's rows render zone names + numbers that must read right-to-left as a unit. Without
|
||||
// this the panel mirrors but its contents stay LTR — which is what the picture shows.
|
||||
'[dir="rtl"] .stl-panel,[dir="rtl"] .stl-panel *{direction:rtl}' +
|
||||
// Numbers stay LTR inside an RTL line: a count or a percentage is a left-to-right run even in Arabic,
|
||||
// and without isolation the bidi algorithm reorders a run that STARTS with a digit. Same fix the
|
||||
// packet needed for scripture references.
|
||||
'[dir="rtl"] .stl-panel .stl-count,[dir="rtl"] .stl-panel .stl-pop{direction:ltr;unicode-bidi:isolate}' +
|
||||
// ★ THE TWO LEGEND-CONTENT RULES THAT USED TO SIT HERE ARE DELETED (2026-09-27), and they were NOT
|
||||
// equally provisional — one was redundant and the other was DEAD, which is worth separating because
|
||||
// only one of them was ever doing anything.
|
||||
//
|
||||
// '[dir="rtl"] .stl-panel,[dir="rtl"] .stl-panel *{direction:rtl}'
|
||||
// REDUNDANT. It matched real elements (.stl-panel appears 69 times in SemanticTreeLegend) but the
|
||||
// library gets there on its own: it uses the :dir(rtl) PSEUDO-CLASS (:645-646), which reads the
|
||||
// INHERITED direction rather than needing a declaration, and CSS `direction` inherits across the
|
||||
// shadow boundary. rega measured the consequence at main 4ca2dcf9 (row 56b): Simple Research and
|
||||
// Prayer Progress, which carry NO override at all, compute direction rtl on their legend rows under
|
||||
// ?lang=ar. A rule whose effect is indistinguishable from its absence on two other profiles is not
|
||||
// load-bearing here either.
|
||||
//
|
||||
// '[dir="rtl"] .stl-panel .stl-count,[dir="rtl"] .stl-panel .stl-pop{direction:ltr;unicode-bidi:isolate}'
|
||||
// ⚠ DEAD CSS, and it always was. The library's count and population cells are `.stl-num` (:1314-1315).
|
||||
// `.stl-count` and `.stl-pop` DO NOT EXIST — `git grep` finds those two class names nowhere in
|
||||
// library/ or any other plugin, only inside this override. So this rule matched zero elements from the
|
||||
// day it was written, and the digit order rega verified ("694", "1,413" keeping their order under ar)
|
||||
// was always the library's doing, never mine.
|
||||
// ★ THE LESSON IS ABOUT THE EVIDENCE, NOT THE CSS: this rule was written to fix a real bidi problem,
|
||||
// was believed to have fixed it, and was cited as the reason the numbers read correctly — while
|
||||
// matching nothing. A style rule fails SILENTLY when its selector is wrong; it does not warn, and the
|
||||
// page looks right if something else is already handling it. The only way to know a rule works is to
|
||||
// check that its selector exists, which is a different act from looking at the rendered page.
|
||||
// (dx-shepherd UPGDEL authorised deleting both as provisional; recording here that one of the two was
|
||||
// never provisional but inert, so nobody re-adds it believing it once worked.)
|
||||
// ⚠ AND THE REOPEN BUTTON, which I missed on my first pass and repo caught. SemanticTreeLegend has
|
||||
// TWO physical `left:8px` rules, not one: :619 for the panel and :921 for .stl-reopen, the button that
|
||||
// brings the panel back after it is collapsed. Mirroring only the panel would leave the button on the
|
||||
|
|
|
|||
|
|
@ -193,14 +193,66 @@ function paneElement(pane) {
|
|||
// `lang` is the alias the page may carry; children read `locale`.
|
||||
if (inherited.locale === undefined && inherited.lang !== undefined) inherited.locale = inherited.lang
|
||||
const pcfg = { ...inherited, ...spec.value.config, ...pane.config }
|
||||
// ★ NO "TAP A COLOURED DOT" COACH-MARK ON THIS PROFILE, AT ALL (the agent, 2026-09-27).
|
||||
// ProfileLoader mounts PinHint by default and self-gates it on a map <canvas> existing, which is a
|
||||
// sound gate for the question it asks ("is there a map here?") and the WRONG question for this
|
||||
// profile. UPG-100's map is a POSTER PREVIEW: the reader is looking at what will be printed, and there
|
||||
// is no per-dot detail to open. So the pill invites a gesture that does nothing, and on the phone the
|
||||
// the agent's screenshots show it over a page with no coloured dots on it at all.
|
||||
// ⚠ THIS SUPERSEDES THE inert WORK FOR THIS PROFILE, and that is worth saying plainly rather than
|
||||
// quietly leaving both in: PILLRISK was "the pill shows over the posters", and I fixed WHERE it shows.
|
||||
// The agent's answer is that it should not show HERE, full stop — a narrower and more correct claim
|
||||
// than mine. The inert signal stays because it is still right for its own reasons (a stacked pane
|
||||
// should not be in tab order or the a11y tree, and studio's PinHint change serves profiles that DO
|
||||
// want the pill), but it is no longer what keeps this pill off this app.
|
||||
// Opt-out via the contract that already existed — ProfileLoader.vue:150 reads
|
||||
// `config.pinHint !== false` — so this is a config value from my side, not a library change.
|
||||
pcfg.pinHint = false
|
||||
if (tk.value) pcfg.tk = tk.value
|
||||
el.setAttribute('profile-config', JSON.stringify(pcfg))
|
||||
return el
|
||||
}
|
||||
|
||||
// ★ TELL THE INVISIBLE PANE THAT IT IS INVISIBLE. `inert` on every pane except the active one.
|
||||
//
|
||||
// THE DEFECT, reported by the agent and traced by repo (PILLRISK, 2026-09-27): PinHint's "Tap a
|
||||
// coloured dot" pill appeared OVER the Prayer Resources posters on a phone. Its IntersectionObserver
|
||||
// was working correctly — that is the point. The panes are `position:absolute; inset:0` in one
|
||||
// scroll-snap column, so the map pane is STACKED BEHIND the active view at full size: 100% of its
|
||||
// geometry is inside the viewport while none of it is visible. An IntersectionObserver measures
|
||||
// INTERSECTION, not OCCLUSION, and no amount of tuning it can distinguish those two states. The
|
||||
// missing information was never geometric — only the composite knows which pane the reader chose.
|
||||
//
|
||||
// ⚠ inert, NOT display:none OR v-show, and this is the constraint that decides the whole approach:
|
||||
// hiding the pane would tear down the live map. A MapLibre/Mapbox canvas in a zero-size container
|
||||
// loses its size and re-initialises on the way back, which is exactly the cold-start path rega had to
|
||||
// verify in row 52. inert leaves the pane mounted, painted and warm; it only declares it non-interactive
|
||||
// — and, unlike aria-hidden, also removes it from tab order and the accessibility tree, so a keyboard
|
||||
// user cannot tab into a map they cannot see. (studio's contract, END-STU-PILL: PinHint walks up through
|
||||
// shadow roots for inert/hidden/aria-hidden and watches that chain with a MutationObserver, so no event
|
||||
// is needed and switching views brings the pill straight back.)
|
||||
//
|
||||
// ★ CORRECT AT EVERY VIEWPORT, not just the phone. pane-wrapper renders ONE column with
|
||||
// `scroll-snap-type: y mandatory` and `.pane { height: 100% }`, so exactly one pane fills the stage on
|
||||
// any width — there is no side-by-side mode in v1 whose second pane would be wrongly marked. Verified
|
||||
// in pane-wrapper.js:56-59 + :101 rather than assumed from the phone report.
|
||||
function markActivePane(activeId) {
|
||||
if (!column) return
|
||||
for (const pane of column.panes) {
|
||||
const el = column.mountEl(pane.id)
|
||||
if (!el) continue
|
||||
if (pane.id === activeId) el.removeAttribute('inert')
|
||||
else el.setAttribute('inert', '')
|
||||
}
|
||||
}
|
||||
|
||||
function go(id) {
|
||||
view.value = id
|
||||
column?.scrollTo(id)
|
||||
// Immediately, not on the scroll callback: scrollTo is SMOOTH, so onScroll's 120ms debounce fires
|
||||
// only after the animation settles. Waiting for it would leave the pill visible over the posters for
|
||||
// the length of the scroll — a shorter version of the same bug.
|
||||
markActivePane(id)
|
||||
}
|
||||
|
||||
// Cross-pane action (shell seam): the poster wall dispatches a scoped window event
|
||||
|
|
@ -253,10 +305,21 @@ onMounted(() => {
|
|||
paneEls[pane.id] = el
|
||||
column.mountEl(pane.id)?.appendChild(el)
|
||||
}
|
||||
// ★ THE FRESH-LOAD CASE, which is the one the agent actually hit. Without this the panes carry no
|
||||
// inert attribute at all until the reader touches the switcher, so the pill is over the posters on
|
||||
// ARRIVAL — before any view change has happened. A signal that only fires on transitions never
|
||||
// describes the initial state.
|
||||
markActivePane(column.current())
|
||||
|
||||
// Tabs are a readout as well as a control — follow the user's scroll.
|
||||
offScroll = column.onScroll(() => {
|
||||
const cur = column.current()
|
||||
if (cur && cur !== view.value) view.value = cur
|
||||
// Unconditionally, NOT inside the `cur !== view.value` guard above: go() has already set view.value
|
||||
// before this fires, so a switcher-driven scroll takes the early exit and would skip the marking. A
|
||||
// scroll-driven one needs it and a switcher-driven one is idempotent, so doing it always is both
|
||||
// cheaper to reason about and the only version that is correct on both paths.
|
||||
if (cur) markActivePane(cur)
|
||||
})
|
||||
window.addEventListener('doxa-upg-100-list:show-on-map', onShowOnMap)
|
||||
})
|
||||
|
|
|
|||
|
|
@ -36,7 +36,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-0EOpdNsc48Nq36PPgLQtiECw5bBKX7wH9sK0hpwcA2jP2G67FBd9YXWlUrRMC15B" crossorigin="anonymous"></script>
|
||||
<script src="../country-posters.js" integrity="sha384-zXBTjgmK2zlB+h7Pcd+wHgmC/VDSV/T1ZXQTsyJ20abAd8MPBfk2TGmRuKu0YUdw" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -32,7 +32,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-0EOpdNsc48Nq36PPgLQtiECw5bBKX7wH9sK0hpwcA2jP2G67FBd9YXWlUrRMC15B" crossorigin="anonymous"></script>
|
||||
<script src="../country-posters.js" integrity="sha384-zXBTjgmK2zlB+h7Pcd+wHgmC/VDSV/T1ZXQTsyJ20abAd8MPBfk2TGmRuKu0YUdw" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -47,7 +47,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-0EOpdNsc48Nq36PPgLQtiECw5bBKX7wH9sK0hpwcA2jP2G67FBd9YXWlUrRMC15B" crossorigin="anonymous"></script>
|
||||
<script src="../country-posters.js" integrity="sha384-zXBTjgmK2zlB+h7Pcd+wHgmC/VDSV/T1ZXQTsyJ20abAd8MPBfk2TGmRuKu0YUdw" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -157,7 +157,7 @@
|
|||
"bundle": "country-posters",
|
||||
"scriptUrl": "./country-posters/country-posters.js",
|
||||
"output": "dx-maps/country-posters/country-posters.js",
|
||||
"integrity": "sha384-0EOpdNsc48Nq36PPgLQtiECw5bBKX7wH9sK0hpwcA2jP2G67FBd9YXWlUrRMC15B",
|
||||
"integrity": "sha384-zXBTjgmK2zlB+h7Pcd+wHgmC/VDSV/T1ZXQTsyJ20abAd8MPBfk2TGmRuKu0YUdw",
|
||||
"elements": [
|
||||
"country-posters-map"
|
||||
],
|
||||
|
|
@ -177,7 +177,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": "<!-- 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=\"./country-posters/country-posters.js\" integrity=\"sha384-0EOpdNsc48Nq36PPgLQtiECw5bBKX7wH9sK0hpwcA2jP2G67FBd9YXWlUrRMC15B\" 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": "<!-- 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=\"./country-posters/country-posters.js\" integrity=\"sha384-zXBTjgmK2zlB+h7Pcd+wHgmC/VDSV/T1ZXQTsyJ20abAd8MPBfk2TGmRuKu0YUdw\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -191,7 +191,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-0EOpdNsc48Nq36PPgLQtiECw5bBKX7wH9sK0hpwcA2jP2G67FBd9YXWlUrRMC15B\" 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-zXBTjgmK2zlB+h7Pcd+wHgmC/VDSV/T1ZXQTsyJ20abAd8MPBfk2TGmRuKu0YUdw\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -205,7 +205,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": "<!-- 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=\"./country-posters/country-posters.js\" integrity=\"sha384-0EOpdNsc48Nq36PPgLQtiECw5bBKX7wH9sK0hpwcA2jP2G67FBd9YXWlUrRMC15B\" 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": "<!-- 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=\"./country-posters/country-posters.js\" integrity=\"sha384-zXBTjgmK2zlB+h7Pcd+wHgmC/VDSV/T1ZXQTsyJ20abAd8MPBfk2TGmRuKu0YUdw\" 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>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -663,7 +663,7 @@
|
|||
"bundle": "my-upg-100-list",
|
||||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"output": "dx-maps/my-upg-100-list/my-upg-100-list.js",
|
||||
"integrity": "sha384-IaMFwZnvFfeygMVBG1VH9jSyNM037nl0j975Nii51Ubwxi1n39GXfmImz7xtxUmk",
|
||||
"integrity": "sha384-a10oYTWi5e5sTZ2WG2IJtM7E9Px+w7KCE1zQKmH+3n7mdnDEeZ2K8ULLw1zeMe/I",
|
||||
"elements": [
|
||||
"my-upg-100-list-map"
|
||||
],
|
||||
|
|
@ -683,7 +683,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-IaMFwZnvFfeygMVBG1VH9jSyNM037nl0j975Nii51Ubwxi1n39GXfmImz7xtxUmk\" 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-a10oYTWi5e5sTZ2WG2IJtM7E9Px+w7KCE1zQKmH+3n7mdnDEeZ2K8ULLw1zeMe/I\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -697,7 +697,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": "<!-- 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=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-IaMFwZnvFfeygMVBG1VH9jSyNM037nl0j975Nii51Ubwxi1n39GXfmImz7xtxUmk\" 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": "<!-- 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=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-a10oYTWi5e5sTZ2WG2IJtM7E9Px+w7KCE1zQKmH+3n7mdnDEeZ2K8ULLw1zeMe/I\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -711,7 +711,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": "<!-- 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=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-IaMFwZnvFfeygMVBG1VH9jSyNM037nl0j975Nii51Ubwxi1n39GXfmImz7xtxUmk\" 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": "<!-- 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=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-a10oYTWi5e5sTZ2WG2IJtM7E9Px+w7KCE1zQKmH+3n7mdnDEeZ2K8ULLw1zeMe/I\" 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>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -887,7 +887,7 @@
|
|||
"bundle": "regions-dashboard",
|
||||
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
|
||||
"output": "dx-maps/regions-dashboard/regions-dashboard.js",
|
||||
"integrity": "sha384-H+peqtuS7sf6Z3UEur8bZNng4nJME6wRo5LxUngQaetNjf6oK1bDpXmRx2htLbbl",
|
||||
"integrity": "sha384-Egd8JW6F3SO6FCiWnm7uPmeqxqoI9Q52UWqShrFJrmqC+VNZzhiyYGY6CvFxQQgG",
|
||||
"elements": [
|
||||
"regions-dashboard"
|
||||
],
|
||||
|
|
@ -907,7 +907,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": "<!-- 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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-H+peqtuS7sf6Z3UEur8bZNng4nJME6wRo5LxUngQaetNjf6oK1bDpXmRx2htLbbl\" 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": "<!-- 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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-Egd8JW6F3SO6FCiWnm7uPmeqxqoI9Q52UWqShrFJrmqC+VNZzhiyYGY6CvFxQQgG\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -921,7 +921,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-H+peqtuS7sf6Z3UEur8bZNng4nJME6wRo5LxUngQaetNjf6oK1bDpXmRx2htLbbl\" 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-Egd8JW6F3SO6FCiWnm7uPmeqxqoI9Q52UWqShrFJrmqC+VNZzhiyYGY6CvFxQQgG\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -935,7 +935,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": "<!-- 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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-H+peqtuS7sf6Z3UEur8bZNng4nJME6wRo5LxUngQaetNjf6oK1bDpXmRx2htLbbl\" 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": "<!-- 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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-Egd8JW6F3SO6FCiWnm7uPmeqxqoI9Q52UWqShrFJrmqC+VNZzhiyYGY6CvFxQQgG\" 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>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -157,7 +157,7 @@
|
|||
"bundle": "country-posters",
|
||||
"scriptUrl": "./country-posters/country-posters.js",
|
||||
"output": "dx-maps/country-posters/country-posters.js",
|
||||
"integrity": "sha384-0EOpdNsc48Nq36PPgLQtiECw5bBKX7wH9sK0hpwcA2jP2G67FBd9YXWlUrRMC15B",
|
||||
"integrity": "sha384-zXBTjgmK2zlB+h7Pcd+wHgmC/VDSV/T1ZXQTsyJ20abAd8MPBfk2TGmRuKu0YUdw",
|
||||
"elements": [
|
||||
"country-posters-map"
|
||||
],
|
||||
|
|
@ -177,7 +177,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": "<!-- 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=\"./country-posters/country-posters.js\" integrity=\"sha384-0EOpdNsc48Nq36PPgLQtiECw5bBKX7wH9sK0hpwcA2jP2G67FBd9YXWlUrRMC15B\" 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": "<!-- 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=\"./country-posters/country-posters.js\" integrity=\"sha384-zXBTjgmK2zlB+h7Pcd+wHgmC/VDSV/T1ZXQTsyJ20abAd8MPBfk2TGmRuKu0YUdw\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -191,7 +191,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-0EOpdNsc48Nq36PPgLQtiECw5bBKX7wH9sK0hpwcA2jP2G67FBd9YXWlUrRMC15B\" 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-zXBTjgmK2zlB+h7Pcd+wHgmC/VDSV/T1ZXQTsyJ20abAd8MPBfk2TGmRuKu0YUdw\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -205,7 +205,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": "<!-- 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=\"./country-posters/country-posters.js\" integrity=\"sha384-0EOpdNsc48Nq36PPgLQtiECw5bBKX7wH9sK0hpwcA2jP2G67FBd9YXWlUrRMC15B\" 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": "<!-- 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=\"./country-posters/country-posters.js\" integrity=\"sha384-zXBTjgmK2zlB+h7Pcd+wHgmC/VDSV/T1ZXQTsyJ20abAd8MPBfk2TGmRuKu0YUdw\" 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>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -663,7 +663,7 @@
|
|||
"bundle": "my-upg-100-list",
|
||||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"output": "dx-maps/my-upg-100-list/my-upg-100-list.js",
|
||||
"integrity": "sha384-IaMFwZnvFfeygMVBG1VH9jSyNM037nl0j975Nii51Ubwxi1n39GXfmImz7xtxUmk",
|
||||
"integrity": "sha384-a10oYTWi5e5sTZ2WG2IJtM7E9Px+w7KCE1zQKmH+3n7mdnDEeZ2K8ULLw1zeMe/I",
|
||||
"elements": [
|
||||
"my-upg-100-list-map"
|
||||
],
|
||||
|
|
@ -683,7 +683,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-IaMFwZnvFfeygMVBG1VH9jSyNM037nl0j975Nii51Ubwxi1n39GXfmImz7xtxUmk\" 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-a10oYTWi5e5sTZ2WG2IJtM7E9Px+w7KCE1zQKmH+3n7mdnDEeZ2K8ULLw1zeMe/I\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -697,7 +697,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": "<!-- 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=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-IaMFwZnvFfeygMVBG1VH9jSyNM037nl0j975Nii51Ubwxi1n39GXfmImz7xtxUmk\" 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": "<!-- 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=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-a10oYTWi5e5sTZ2WG2IJtM7E9Px+w7KCE1zQKmH+3n7mdnDEeZ2K8ULLw1zeMe/I\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -711,7 +711,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": "<!-- 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=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-IaMFwZnvFfeygMVBG1VH9jSyNM037nl0j975Nii51Ubwxi1n39GXfmImz7xtxUmk\" 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": "<!-- 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=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-a10oYTWi5e5sTZ2WG2IJtM7E9Px+w7KCE1zQKmH+3n7mdnDEeZ2K8ULLw1zeMe/I\" 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>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -887,7 +887,7 @@
|
|||
"bundle": "regions-dashboard",
|
||||
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
|
||||
"output": "dx-maps/regions-dashboard/regions-dashboard.js",
|
||||
"integrity": "sha384-H+peqtuS7sf6Z3UEur8bZNng4nJME6wRo5LxUngQaetNjf6oK1bDpXmRx2htLbbl",
|
||||
"integrity": "sha384-Egd8JW6F3SO6FCiWnm7uPmeqxqoI9Q52UWqShrFJrmqC+VNZzhiyYGY6CvFxQQgG",
|
||||
"elements": [
|
||||
"regions-dashboard"
|
||||
],
|
||||
|
|
@ -907,7 +907,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": "<!-- 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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-H+peqtuS7sf6Z3UEur8bZNng4nJME6wRo5LxUngQaetNjf6oK1bDpXmRx2htLbbl\" 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": "<!-- 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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-Egd8JW6F3SO6FCiWnm7uPmeqxqoI9Q52UWqShrFJrmqC+VNZzhiyYGY6CvFxQQgG\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -921,7 +921,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-H+peqtuS7sf6Z3UEur8bZNng4nJME6wRo5LxUngQaetNjf6oK1bDpXmRx2htLbbl\" 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-Egd8JW6F3SO6FCiWnm7uPmeqxqoI9Q52UWqShrFJrmqC+VNZzhiyYGY6CvFxQQgG\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -935,7 +935,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": "<!-- 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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-H+peqtuS7sf6Z3UEur8bZNng4nJME6wRo5LxUngQaetNjf6oK1bDpXmRx2htLbbl\" 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": "<!-- 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=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-Egd8JW6F3SO6FCiWnm7uPmeqxqoI9Q52UWqShrFJrmqC+VNZzhiyYGY6CvFxQQgG\" 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>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -32,7 +32,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-IaMFwZnvFfeygMVBG1VH9jSyNM037nl0j975Nii51Ubwxi1n39GXfmImz7xtxUmk" crossorigin="anonymous"></script>
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-a10oYTWi5e5sTZ2WG2IJtM7E9Px+w7KCE1zQKmH+3n7mdnDEeZ2K8ULLw1zeMe/I" 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 <my-upg-100-list-map> custom element. -->
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-IaMFwZnvFfeygMVBG1VH9jSyNM037nl0j975Nii51Ubwxi1n39GXfmImz7xtxUmk" crossorigin="anonymous"></script>
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-a10oYTWi5e5sTZ2WG2IJtM7E9Px+w7KCE1zQKmH+3n7mdnDEeZ2K8ULLw1zeMe/I" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -47,7 +47,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-IaMFwZnvFfeygMVBG1VH9jSyNM037nl0j975Nii51Ubwxi1n39GXfmImz7xtxUmk" crossorigin="anonymous"></script>
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-a10oYTWi5e5sTZ2WG2IJtM7E9Px+w7KCE1zQKmH+3n7mdnDEeZ2K8ULLw1zeMe/I" 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 <regions-dashboard> custom element. -->
|
||||
<script src="../regions-dashboard.js" integrity="sha384-H+peqtuS7sf6Z3UEur8bZNng4nJME6wRo5LxUngQaetNjf6oK1bDpXmRx2htLbbl" crossorigin="anonymous"></script>
|
||||
<script src="../regions-dashboard.js" integrity="sha384-Egd8JW6F3SO6FCiWnm7uPmeqxqoI9Q52UWqShrFJrmqC+VNZzhiyYGY6CvFxQQgG" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -32,7 +32,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-H+peqtuS7sf6Z3UEur8bZNng4nJME6wRo5LxUngQaetNjf6oK1bDpXmRx2htLbbl" crossorigin="anonymous"></script>
|
||||
<script src="../regions-dashboard.js" integrity="sha384-Egd8JW6F3SO6FCiWnm7uPmeqxqoI9Q52UWqShrFJrmqC+VNZzhiyYGY6CvFxQQgG" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -47,7 +47,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-H+peqtuS7sf6Z3UEur8bZNng4nJME6wRo5LxUngQaetNjf6oK1bDpXmRx2htLbbl" crossorigin="anonymous"></script>
|
||||
<script src="../regions-dashboard.js" integrity="sha384-Egd8JW6F3SO6FCiWnm7uPmeqxqoI9Q52UWqShrFJrmqC+VNZzhiyYGY6CvFxQQgG" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
Loading…
Reference in a new issue