This commit is contained in:
commit
f344b74334
42 changed files with 24549 additions and 579 deletions
24
README.md
24
README.md
|
|
@ -366,6 +366,30 @@ sanity-check one bundle without touching anyone else's output, use
|
|||
|
||||
---
|
||||
|
||||
## The delegation model — one build, many agents, one main
|
||||
|
||||
This repo is designed for **many builders working in parallel without stepping on each
|
||||
other**. The model is a set of concentric rings:
|
||||
|
||||

|
||||
|
||||
- **`main`** — the one shared branch. Everything converges here.
|
||||
- **Capture ring** — before pushing to `main`, a builder must *capture* it: **one builder at
|
||||
a time, first-come-first-serve.** Whoever holds it **resolves all merge conflicts**, lands
|
||||
their work, then releases. The next builder waits and retries. No two pushes race.
|
||||
- **Plugin Studio** — one repo, every plugin visible in one place, so each builder can see
|
||||
what already exists and reuse it.
|
||||
- **Plugins** — each is built in the shared bundler, so its shared, parameterized components
|
||||
become available to every other plugin (private components stay inside each plugin's own
|
||||
folder).
|
||||
- **Agents** — **one builder per plugin.** Each owns their plugin end to end. A cluster of
|
||||
experimental plugins is owned by a single roaming builder.
|
||||
- **Shepherd** — one builder keeps everyone honoring the model: plugins built in the studio,
|
||||
shared components truly shared, and every push serialized through the capture ring.
|
||||
|
||||
The effect is cooperative: each builder races to land the most working features, but the only
|
||||
way to score is to pass through the capture ring one at a time and **leave `main` green.**
|
||||
|
||||
## Repository layout
|
||||
|
||||
Two directories matter to a plugin author:
|
||||
|
|
|
|||
|
|
@ -70,8 +70,8 @@
|
|||
"title": "The gap by country",
|
||||
"grain": "one row per country that has at least one people group on this map",
|
||||
"generated": "2026-09-24",
|
||||
"measured": "242 countries · 2,901 groups with nothing found · 287,644,779 people",
|
||||
"by_region": "Oceania 51.2% (679 of 1325) · Africa 30.0% (923 of 3074) · Asia 19.3% (978 of 5073) · Americas 11.4% (241 of 2117) · Europe 10.1% (80 of 790)",
|
||||
"measured": "242 countries · 2,873 groups with nothing found · 287,305,229 people",
|
||||
"by_region": "Oceania 51.2% (678 of 1325) · Africa 29.9% (919 of 3074) · Asia 19.2% (974 of 5073) · Americas 10.5% (222 of 2117) · Europe 10.1% (80 of 790)",
|
||||
"three_questions": "Groups with nothing, people with nothing, and the share of the country each represents. They rank differently on purpose — Papua New Guinea has the most groups and few people, China the reverse, and Oceania has the worst share of any region while being the smallest by population.",
|
||||
"source": "data/tables/gospel-by-country.json, which is itself refreshed from data/tables/people-group-pins.json — the same index the map draws, so this table and the map cannot disagree.",
|
||||
"curated_columns": "growing_unreached and deaths_day come from the curated country analysis and are null where it does not cover the country. Null, never zero: zero is a claim this build cannot make."
|
||||
|
|
@ -82,9 +82,9 @@
|
|||
"iso3": "PNG",
|
||||
"region": "Oceania",
|
||||
"people_groups": 831,
|
||||
"groups_with_nothing": 469,
|
||||
"pct_with_nothing": 56.4,
|
||||
"people_with_nothing": 2187150,
|
||||
"groups_with_nothing": 468,
|
||||
"pct_with_nothing": 56.3,
|
||||
"people_with_nothing": 2179750,
|
||||
"groups_with_scripture": 332,
|
||||
"groups_with_film": 143,
|
||||
"band": "high",
|
||||
|
|
@ -112,9 +112,9 @@
|
|||
"iso3": "NGA",
|
||||
"region": "Africa",
|
||||
"people_groups": 433,
|
||||
"groups_with_nothing": 188,
|
||||
"pct_with_nothing": 43.4,
|
||||
"people_with_nothing": 9036825,
|
||||
"groups_with_nothing": 187,
|
||||
"pct_with_nothing": 43.2,
|
||||
"people_with_nothing": 8978825,
|
||||
"groups_with_scripture": 105,
|
||||
"groups_with_film": 188,
|
||||
"band": "high",
|
||||
|
|
@ -127,9 +127,9 @@
|
|||
"iso3": "CMR",
|
||||
"region": "Africa",
|
||||
"people_groups": 260,
|
||||
"groups_with_nothing": 130,
|
||||
"pct_with_nothing": 50,
|
||||
"people_with_nothing": 3722425,
|
||||
"groups_with_nothing": 129,
|
||||
"pct_with_nothing": 49.6,
|
||||
"people_with_nothing": 3656425,
|
||||
"groups_with_scripture": 72,
|
||||
"groups_with_film": 84,
|
||||
"band": "high",
|
||||
|
|
@ -262,9 +262,9 @@
|
|||
"iso3": "BRA",
|
||||
"region": "Americas",
|
||||
"people_groups": 270,
|
||||
"groups_with_nothing": 62,
|
||||
"pct_with_nothing": 23,
|
||||
"people_with_nothing": 73130,
|
||||
"groups_with_nothing": 58,
|
||||
"pct_with_nothing": 21.5,
|
||||
"people_with_nothing": 65680,
|
||||
"groups_with_scripture": 186,
|
||||
"groups_with_film": 163,
|
||||
"band": "partial",
|
||||
|
|
@ -292,9 +292,9 @@
|
|||
"iso3": "USA",
|
||||
"region": "Americas",
|
||||
"people_groups": 623,
|
||||
"groups_with_nothing": 44,
|
||||
"pct_with_nothing": 7.1,
|
||||
"people_with_nothing": 473415,
|
||||
"groups_with_nothing": 41,
|
||||
"pct_with_nothing": 6.6,
|
||||
"people_with_nothing": 465640,
|
||||
"groups_with_scripture": 517,
|
||||
"groups_with_film": 549,
|
||||
"band": "partial",
|
||||
|
|
@ -332,21 +332,6 @@
|
|||
"deaths_day": 0.6,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Vietnam",
|
||||
"iso3": "VNM",
|
||||
"region": "Asia",
|
||||
"people_groups": 74,
|
||||
"groups_with_nothing": 30,
|
||||
"pct_with_nothing": 40.5,
|
||||
"people_with_nothing": 1902675,
|
||||
"groups_with_scripture": 28,
|
||||
"groups_with_film": 38,
|
||||
"band": "high",
|
||||
"growing_unreached": 11,
|
||||
"deaths_day": 5.7,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Republic of the Congo",
|
||||
"iso3": "COG",
|
||||
|
|
@ -362,6 +347,21 @@
|
|||
"deaths_day": 1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Vietnam",
|
||||
"iso3": "VNM",
|
||||
"region": "Asia",
|
||||
"people_groups": 74,
|
||||
"groups_with_nothing": 29,
|
||||
"pct_with_nothing": 39.2,
|
||||
"people_with_nothing": 1860175,
|
||||
"groups_with_scripture": 28,
|
||||
"groups_with_film": 38,
|
||||
"band": "high",
|
||||
"growing_unreached": 11,
|
||||
"deaths_day": 5.7,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "New Caledonia",
|
||||
"iso3": "NCL",
|
||||
|
|
@ -397,9 +397,9 @@
|
|||
"iso3": "MMR",
|
||||
"region": "Asia",
|
||||
"people_groups": 110,
|
||||
"groups_with_nothing": 26,
|
||||
"pct_with_nothing": 23.6,
|
||||
"people_with_nothing": 1278900,
|
||||
"groups_with_nothing": 25,
|
||||
"pct_with_nothing": 22.7,
|
||||
"people_with_nothing": 1274400,
|
||||
"groups_with_scripture": 63,
|
||||
"groups_with_film": 64,
|
||||
"band": "partial",
|
||||
|
|
@ -467,36 +467,6 @@
|
|||
"deaths_day": 13.4,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Bhutan",
|
||||
"iso3": "BTN",
|
||||
"region": "Asia",
|
||||
"people_groups": 36,
|
||||
"groups_with_nothing": 20,
|
||||
"pct_with_nothing": 55.6,
|
||||
"people_with_nothing": 240825,
|
||||
"groups_with_scripture": 11,
|
||||
"groups_with_film": 16,
|
||||
"band": "high",
|
||||
"growing_unreached": 13,
|
||||
"deaths_day": 2.1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Canada",
|
||||
"iso3": "CAN",
|
||||
"region": "Americas",
|
||||
"people_groups": 304,
|
||||
"groups_with_nothing": 20,
|
||||
"pct_with_nothing": 6.6,
|
||||
"people_with_nothing": 187600,
|
||||
"groups_with_scripture": 256,
|
||||
"groups_with_film": 270,
|
||||
"band": "partial",
|
||||
"growing_unreached": null,
|
||||
"deaths_day": null,
|
||||
"basis": "pins only — no curated country analysis for this country"
|
||||
},
|
||||
{
|
||||
"country": "Afghanistan",
|
||||
"iso3": "AFG",
|
||||
|
|
@ -512,6 +482,21 @@
|
|||
"deaths_day": 17.6,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Bhutan",
|
||||
"iso3": "BTN",
|
||||
"region": "Asia",
|
||||
"people_groups": 36,
|
||||
"groups_with_nothing": 19,
|
||||
"pct_with_nothing": 52.8,
|
||||
"people_with_nothing": 238225,
|
||||
"groups_with_scripture": 11,
|
||||
"groups_with_film": 16,
|
||||
"band": "high",
|
||||
"growing_unreached": 13,
|
||||
"deaths_day": 2.1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Ethiopia",
|
||||
"iso3": "ETH",
|
||||
|
|
@ -527,6 +512,21 @@
|
|||
"deaths_day": 130,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Canada",
|
||||
"iso3": "CAN",
|
||||
"region": "Americas",
|
||||
"people_groups": 304,
|
||||
"groups_with_nothing": 18,
|
||||
"pct_with_nothing": 5.9,
|
||||
"people_with_nothing": 183000,
|
||||
"groups_with_scripture": 256,
|
||||
"groups_with_film": 270,
|
||||
"band": "partial",
|
||||
"growing_unreached": null,
|
||||
"deaths_day": null,
|
||||
"basis": "pins only — no curated country analysis for this country"
|
||||
},
|
||||
{
|
||||
"country": "Russian Federation",
|
||||
"iso3": "RUS",
|
||||
|
|
@ -572,21 +572,6 @@
|
|||
"deaths_day": 12.6,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Peru",
|
||||
"iso3": "PER",
|
||||
"region": "Americas",
|
||||
"people_groups": 90,
|
||||
"groups_with_nothing": 16,
|
||||
"pct_with_nothing": 17.8,
|
||||
"people_with_nothing": 1194475,
|
||||
"groups_with_scripture": 73,
|
||||
"groups_with_film": 57,
|
||||
"band": "partial",
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 5.4,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Ghana",
|
||||
"iso3": "GHA",
|
||||
|
|
@ -647,6 +632,21 @@
|
|||
"deaths_day": null,
|
||||
"basis": "pins only — no curated country analysis for this country"
|
||||
},
|
||||
{
|
||||
"country": "Peru",
|
||||
"iso3": "PER",
|
||||
"region": "Americas",
|
||||
"people_groups": 90,
|
||||
"groups_with_nothing": 12,
|
||||
"pct_with_nothing": 13.3,
|
||||
"people_with_nothing": 1160875,
|
||||
"groups_with_scripture": 73,
|
||||
"groups_with_film": 57,
|
||||
"band": "partial",
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 5.4,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Oman",
|
||||
"iso3": "OMN",
|
||||
|
|
@ -722,21 +722,6 @@
|
|||
"deaths_day": 0.1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Gabon",
|
||||
"iso3": "GAB",
|
||||
"region": "Africa",
|
||||
"people_groups": 45,
|
||||
"groups_with_nothing": 9,
|
||||
"pct_with_nothing": 20,
|
||||
"people_with_nothing": 99600,
|
||||
"groups_with_scripture": 13,
|
||||
"groups_with_film": 24,
|
||||
"band": "partial",
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 0.3,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "French Polynesia",
|
||||
"iso3": "PYF",
|
||||
|
|
@ -767,6 +752,21 @@
|
|||
"deaths_day": 4.1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Gabon",
|
||||
"iso3": "GAB",
|
||||
"region": "Africa",
|
||||
"people_groups": 45,
|
||||
"groups_with_nothing": 8,
|
||||
"pct_with_nothing": 17.8,
|
||||
"people_with_nothing": 92800,
|
||||
"groups_with_scripture": 13,
|
||||
"groups_with_film": 24,
|
||||
"band": "partial",
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 0.3,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Namibia",
|
||||
"iso3": "NAM",
|
||||
|
|
@ -797,21 +797,6 @@
|
|||
"deaths_day": 0,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Venezuela",
|
||||
"iso3": "VEN",
|
||||
"region": "Americas",
|
||||
"people_groups": 51,
|
||||
"groups_with_nothing": 7,
|
||||
"pct_with_nothing": 13.7,
|
||||
"people_with_nothing": 311800,
|
||||
"groups_with_scripture": 42,
|
||||
"groups_with_film": 39,
|
||||
"band": "partial",
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 0.2,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Cambodia",
|
||||
"iso3": "KHM",
|
||||
|
|
@ -1022,21 +1007,6 @@
|
|||
"deaths_day": null,
|
||||
"basis": "pins only — no curated country analysis for this country"
|
||||
},
|
||||
{
|
||||
"country": "Benin",
|
||||
"iso3": "BEN",
|
||||
"region": "Africa",
|
||||
"people_groups": 57,
|
||||
"groups_with_nothing": 5,
|
||||
"pct_with_nothing": 8.8,
|
||||
"people_with_nothing": 554500,
|
||||
"groups_with_scripture": 29,
|
||||
"groups_with_film": 38,
|
||||
"band": "partial",
|
||||
"growing_unreached": 4,
|
||||
"deaths_day": 21.9,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Brunei Darussalam",
|
||||
"iso3": "BRN",
|
||||
|
|
@ -1052,6 +1022,21 @@
|
|||
"deaths_day": 1.1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Venezuela",
|
||||
"iso3": "VEN",
|
||||
"region": "Americas",
|
||||
"people_groups": 51,
|
||||
"groups_with_nothing": 5,
|
||||
"pct_with_nothing": 9.8,
|
||||
"people_with_nothing": 307700,
|
||||
"groups_with_scripture": 42,
|
||||
"groups_with_film": 39,
|
||||
"band": "partial",
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 0.2,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Taiwan",
|
||||
"iso3": "TWN",
|
||||
|
|
@ -1172,21 +1157,6 @@
|
|||
"deaths_day": 1.3,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Mexico",
|
||||
"iso3": "MEX",
|
||||
"region": "Americas",
|
||||
"people_groups": 205,
|
||||
"groups_with_nothing": 5,
|
||||
"pct_with_nothing": 2.4,
|
||||
"people_with_nothing": 27700,
|
||||
"groups_with_scripture": 193,
|
||||
"groups_with_film": 175,
|
||||
"band": "partial",
|
||||
"growing_unreached": null,
|
||||
"deaths_day": null,
|
||||
"basis": "pins only — no curated country analysis for this country"
|
||||
},
|
||||
{
|
||||
"country": "Egypt",
|
||||
"iso3": "EGY",
|
||||
|
|
@ -1217,6 +1187,21 @@
|
|||
"deaths_day": 3.6,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Benin",
|
||||
"iso3": "BEN",
|
||||
"region": "Africa",
|
||||
"people_groups": 57,
|
||||
"groups_with_nothing": 4,
|
||||
"pct_with_nothing": 7,
|
||||
"people_with_nothing": 500000,
|
||||
"groups_with_scripture": 29,
|
||||
"groups_with_film": 38,
|
||||
"band": "partial",
|
||||
"growing_unreached": 4,
|
||||
"deaths_day": 21.9,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Comoros",
|
||||
"iso3": "COM",
|
||||
|
|
@ -1322,21 +1307,6 @@
|
|||
"deaths_day": 1.1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Bolivia",
|
||||
"iso3": "BOL",
|
||||
"region": "Americas",
|
||||
"people_groups": 39,
|
||||
"groups_with_nothing": 4,
|
||||
"pct_with_nothing": 10.3,
|
||||
"people_with_nothing": 134875,
|
||||
"groups_with_scripture": 34,
|
||||
"groups_with_film": 28,
|
||||
"band": "partial",
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 0,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "French Guiana",
|
||||
"iso3": "GUF",
|
||||
|
|
@ -1562,6 +1532,21 @@
|
|||
"deaths_day": 1.1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Mexico",
|
||||
"iso3": "MEX",
|
||||
"region": "Americas",
|
||||
"people_groups": 205,
|
||||
"groups_with_nothing": 3,
|
||||
"pct_with_nothing": 1.5,
|
||||
"people_with_nothing": 18600,
|
||||
"groups_with_scripture": 193,
|
||||
"groups_with_film": 175,
|
||||
"band": "partial",
|
||||
"growing_unreached": null,
|
||||
"deaths_day": null,
|
||||
"basis": "pins only — no curated country analysis for this country"
|
||||
},
|
||||
{
|
||||
"country": "Wallis and Futuna",
|
||||
"iso3": "WLF",
|
||||
|
|
@ -1727,6 +1712,21 @@
|
|||
"deaths_day": 0,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Bolivia",
|
||||
"iso3": "BOL",
|
||||
"region": "Americas",
|
||||
"people_groups": 39,
|
||||
"groups_with_nothing": 2,
|
||||
"pct_with_nothing": 5.1,
|
||||
"people_with_nothing": 120250,
|
||||
"groups_with_scripture": 34,
|
||||
"groups_with_film": 28,
|
||||
"band": "partial",
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 0,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Honduras",
|
||||
"iso3": "HND",
|
||||
|
|
@ -2687,21 +2687,6 @@
|
|||
"deaths_day": null,
|
||||
"basis": "pins only — no curated country analysis for this country"
|
||||
},
|
||||
{
|
||||
"country": "Syrian Arab Republic",
|
||||
"iso3": "SYR",
|
||||
"region": "Asia",
|
||||
"people_groups": 20,
|
||||
"groups_with_nothing": 1,
|
||||
"pct_with_nothing": 5,
|
||||
"people_with_nothing": 16000,
|
||||
"groups_with_scripture": 13,
|
||||
"groups_with_film": 19,
|
||||
"band": "partial",
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 25.7,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Lithuania",
|
||||
"iso3": "LTU",
|
||||
|
|
@ -3392,6 +3377,21 @@
|
|||
"deaths_day": 39.8,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Syrian Arab Republic",
|
||||
"iso3": "SYR",
|
||||
"region": "Asia",
|
||||
"people_groups": 20,
|
||||
"groups_with_nothing": 0,
|
||||
"pct_with_nothing": 0,
|
||||
"people_with_nothing": 0,
|
||||
"groups_with_scripture": 13,
|
||||
"groups_with_film": 19,
|
||||
"band": "covered",
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 25.7,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Jordan",
|
||||
"iso3": "JOR",
|
||||
|
|
|
|||
|
|
@ -59,14 +59,14 @@
|
|||
"country": "Brazil",
|
||||
"region": "Americas",
|
||||
"groups": 270,
|
||||
"no_resource": 62,
|
||||
"pop_no_resource": 73130,
|
||||
"no_resource": 58,
|
||||
"pop_no_resource": 65680,
|
||||
"scripture": 186,
|
||||
"film": 163,
|
||||
"growing_unreached": 38,
|
||||
"deaths_day": 1.2,
|
||||
"growth": 0.41,
|
||||
"pct_no_resource": 23,
|
||||
"pct_no_resource": 21.5,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -104,14 +104,14 @@
|
|||
"country": "Nigeria",
|
||||
"region": "Africa",
|
||||
"groups": 433,
|
||||
"no_resource": 188,
|
||||
"pop_no_resource": 9036825,
|
||||
"no_resource": 187,
|
||||
"pop_no_resource": 8978825,
|
||||
"scripture": 105,
|
||||
"film": 188,
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 44,
|
||||
"growth": null,
|
||||
"pct_no_resource": 43.4,
|
||||
"pct_no_resource": 43.2,
|
||||
"band": "high"
|
||||
},
|
||||
{
|
||||
|
|
@ -164,14 +164,14 @@
|
|||
"country": "Bhutan",
|
||||
"region": "Asia",
|
||||
"groups": 36,
|
||||
"no_resource": 20,
|
||||
"pop_no_resource": 240825,
|
||||
"no_resource": 19,
|
||||
"pop_no_resource": 238225,
|
||||
"scripture": 11,
|
||||
"film": 16,
|
||||
"growing_unreached": 13,
|
||||
"deaths_day": 2.1,
|
||||
"growth": 0.65,
|
||||
"pct_no_resource": 55.6,
|
||||
"pct_no_resource": 52.8,
|
||||
"band": "high"
|
||||
},
|
||||
{
|
||||
|
|
@ -194,14 +194,14 @@
|
|||
"country": "Vietnam",
|
||||
"region": "Asia",
|
||||
"groups": 74,
|
||||
"no_resource": 30,
|
||||
"pop_no_resource": 1902675,
|
||||
"no_resource": 29,
|
||||
"pop_no_resource": 1860175,
|
||||
"scripture": 28,
|
||||
"film": 38,
|
||||
"growing_unreached": 11,
|
||||
"deaths_day": 5.7,
|
||||
"growth": 0.63,
|
||||
"pct_no_resource": 40.5,
|
||||
"pct_no_resource": 39.2,
|
||||
"band": "high"
|
||||
},
|
||||
{
|
||||
|
|
@ -284,14 +284,14 @@
|
|||
"country": "Cameroon",
|
||||
"region": "Africa",
|
||||
"groups": 260,
|
||||
"no_resource": 130,
|
||||
"pop_no_resource": 3722425,
|
||||
"no_resource": 129,
|
||||
"pop_no_resource": 3656425,
|
||||
"scripture": 72,
|
||||
"film": 84,
|
||||
"growing_unreached": 8,
|
||||
"deaths_day": 3.4,
|
||||
"growth": 2.61,
|
||||
"pct_no_resource": 50,
|
||||
"pct_no_resource": 49.6,
|
||||
"band": "high"
|
||||
},
|
||||
{
|
||||
|
|
@ -494,14 +494,14 @@
|
|||
"country": "Myanmar",
|
||||
"region": "Asia",
|
||||
"groups": 110,
|
||||
"no_resource": 26,
|
||||
"pop_no_resource": 1278900,
|
||||
"no_resource": 25,
|
||||
"pop_no_resource": 1274400,
|
||||
"scripture": 63,
|
||||
"film": 64,
|
||||
"growing_unreached": 4,
|
||||
"deaths_day": 25.8,
|
||||
"growth": 0.67,
|
||||
"pct_no_resource": 23.6,
|
||||
"pct_no_resource": 22.7,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -509,14 +509,14 @@
|
|||
"country": "Benin",
|
||||
"region": "Africa",
|
||||
"groups": 57,
|
||||
"no_resource": 5,
|
||||
"pop_no_resource": 554500,
|
||||
"no_resource": 4,
|
||||
"pop_no_resource": 500000,
|
||||
"scripture": 29,
|
||||
"film": 38,
|
||||
"growing_unreached": 4,
|
||||
"deaths_day": 21.9,
|
||||
"growth": 2.46,
|
||||
"pct_no_resource": 8.8,
|
||||
"pct_no_resource": 7,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -674,14 +674,14 @@
|
|||
"country": "Peru",
|
||||
"region": "Americas",
|
||||
"groups": 90,
|
||||
"no_resource": 16,
|
||||
"pop_no_resource": 1194475,
|
||||
"no_resource": 12,
|
||||
"pop_no_resource": 1160875,
|
||||
"scripture": 73,
|
||||
"film": 57,
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 5.4,
|
||||
"growth": 1.09,
|
||||
"pct_no_resource": 17.8,
|
||||
"pct_no_resource": 13.3,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -809,14 +809,14 @@
|
|||
"country": "Gabon",
|
||||
"region": "Africa",
|
||||
"groups": 45,
|
||||
"no_resource": 9,
|
||||
"pop_no_resource": 99600,
|
||||
"no_resource": 8,
|
||||
"pop_no_resource": 92800,
|
||||
"scripture": 13,
|
||||
"film": 24,
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 0.3,
|
||||
"growth": 2.16,
|
||||
"pct_no_resource": 20,
|
||||
"pct_no_resource": 17.8,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -824,14 +824,14 @@
|
|||
"country": "Venezuela",
|
||||
"region": "Americas",
|
||||
"groups": 51,
|
||||
"no_resource": 7,
|
||||
"pop_no_resource": 311800,
|
||||
"no_resource": 5,
|
||||
"pop_no_resource": 307700,
|
||||
"scripture": 42,
|
||||
"film": 39,
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 0.2,
|
||||
"growth": 0.37,
|
||||
"pct_no_resource": 13.7,
|
||||
"pct_no_resource": 9.8,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -1049,14 +1049,14 @@
|
|||
"country": "Papua New Guinea",
|
||||
"region": "Oceania",
|
||||
"groups": 831,
|
||||
"no_resource": 469,
|
||||
"pop_no_resource": 2187150,
|
||||
"no_resource": 468,
|
||||
"pop_no_resource": 2179750,
|
||||
"scripture": 332,
|
||||
"film": 143,
|
||||
"growing_unreached": 1,
|
||||
"deaths_day": 0.9,
|
||||
"growth": 1.78,
|
||||
"pct_no_resource": 56.4,
|
||||
"pct_no_resource": 56.3,
|
||||
"band": "high"
|
||||
},
|
||||
{
|
||||
|
|
@ -1889,15 +1889,15 @@
|
|||
"country": "Syrian Arab Republic",
|
||||
"region": "Asia",
|
||||
"groups": 20,
|
||||
"no_resource": 1,
|
||||
"pop_no_resource": 16000,
|
||||
"no_resource": 0,
|
||||
"pop_no_resource": 0,
|
||||
"scripture": 13,
|
||||
"film": 19,
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 25.7,
|
||||
"growth": 4.47,
|
||||
"pct_no_resource": 5,
|
||||
"band": "partial"
|
||||
"pct_no_resource": 0,
|
||||
"band": "covered"
|
||||
},
|
||||
{
|
||||
"iso3": "JOR",
|
||||
|
|
@ -2264,14 +2264,14 @@
|
|||
"country": "United States of America",
|
||||
"region": "Americas",
|
||||
"groups": 623,
|
||||
"no_resource": 44,
|
||||
"pop_no_resource": 473415,
|
||||
"no_resource": 41,
|
||||
"pop_no_resource": 465640,
|
||||
"scripture": 517,
|
||||
"film": 549,
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 0.1,
|
||||
"growth": 0.96,
|
||||
"pct_no_resource": 7.1,
|
||||
"pct_no_resource": 6.6,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -2384,14 +2384,14 @@
|
|||
"country": "Bolivia",
|
||||
"region": "Americas",
|
||||
"groups": 39,
|
||||
"no_resource": 4,
|
||||
"pop_no_resource": 134875,
|
||||
"no_resource": 2,
|
||||
"pop_no_resource": 120250,
|
||||
"scripture": 34,
|
||||
"film": 28,
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 0,
|
||||
"growth": 1.37,
|
||||
"pct_no_resource": 10.3,
|
||||
"pct_no_resource": 5.1,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -2676,14 +2676,14 @@
|
|||
"country": "Mexico",
|
||||
"region": "Americas",
|
||||
"groups": 205,
|
||||
"no_resource": 5,
|
||||
"pop_no_resource": 27700,
|
||||
"no_resource": 3,
|
||||
"pop_no_resource": 18600,
|
||||
"scripture": 193,
|
||||
"film": 175,
|
||||
"growing_unreached": null,
|
||||
"deaths_day": null,
|
||||
"growth": null,
|
||||
"pct_no_resource": 2.4,
|
||||
"pct_no_resource": 1.5,
|
||||
"band": "partial",
|
||||
"from_pins_only": true
|
||||
},
|
||||
|
|
@ -2868,14 +2868,14 @@
|
|||
"country": "Canada",
|
||||
"region": "Americas",
|
||||
"groups": 304,
|
||||
"no_resource": 20,
|
||||
"pop_no_resource": 187600,
|
||||
"no_resource": 18,
|
||||
"pop_no_resource": 183000,
|
||||
"scripture": 256,
|
||||
"film": 270,
|
||||
"growing_unreached": null,
|
||||
"deaths_day": null,
|
||||
"growth": null,
|
||||
"pct_no_resource": 6.6,
|
||||
"pct_no_resource": 5.9,
|
||||
"band": "partial",
|
||||
"from_pins_only": true
|
||||
},
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
7242
data/tables/scriptureearth-index.json
Normal file
7242
data/tables/scriptureearth-index.json
Normal file
File diff suppressed because it is too large
Load diff
BIN
documentation/readme-images/delegation-model.png
Normal file
BIN
documentation/readme-images/delegation-model.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 228 KiB |
|
|
@ -93,7 +93,7 @@ if (POISON) {
|
|||
}
|
||||
|
||||
const SPECIAL = (c) => c === 'und' || c === 'mul' || c === 'mis' || c === 'zxx' || (c >= 'qaa' && c <= 'qtz')
|
||||
const hasRes = (v) => !!(v && (v.s || v.f || v.au || v.bv || (v.d && v.d.length)))
|
||||
const hasRes = (v) => !!(v && (v.s || v.f || v.au || v.bv || v.se || (v.d && v.d.length)))
|
||||
const fails = []
|
||||
const add = (clause, msg) => fails.push(` [${clause}] ${msg}`)
|
||||
|
||||
|
|
@ -121,7 +121,7 @@ if (missing.length) add('D', `${missing.length} code(s) carry a resource but app
|
|||
// E — the table cannot invent a URL
|
||||
const known = new Set()
|
||||
for (const v of Object.values(codes)) {
|
||||
if (v.s) known.add(v.s); if (v.f) known.add(v.f); if (v.z) known.add(v.z); if (v.za) known.add(v.za.u); if (v.au) known.add(v.au.u); if (v.bv) known.add(v.bv.u); if (v.gp) known.add(v.gp.u)
|
||||
if (v.s) known.add(v.s); if (v.f) known.add(v.f); if (v.z) known.add(v.z); if (v.za) known.add(v.za.u); if (v.au) known.add(v.au.u); if (v.bv) known.add(v.bv.u); if (v.gp) known.add(v.gp.u); if (v.se) known.add(v.se.u)
|
||||
for (const d of v.d || []) known.add(d.u)
|
||||
}
|
||||
const invented = trows.filter((t) => t.resource_url && !known.has(t.resource_url))
|
||||
|
|
@ -164,7 +164,7 @@ if (misTyped.length) add('H', `${misTyped.length} row(s) named "Open Bible Stori
|
|||
// G — no plain-http URL
|
||||
const httpUrls = []
|
||||
for (const [c, v] of Object.entries(codes)) {
|
||||
for (const u of [v.s, v.f, v.z, v.za && v.za.u, v.au && v.au.u, v.bv && v.bv.u, v.gp && v.gp.u, ...(v.d || []).map((d) => d.u)]) {
|
||||
for (const u of [v.s, v.f, v.z, v.za && v.za.u, v.au && v.au.u, v.bv && v.bv.u, v.gp && v.gp.u, v.se && v.se.u, ...(v.d || []).map((d) => d.u)]) {
|
||||
if (u && /^http:\/\//i.test(u)) httpUrls.push(`${c} ${u}`)
|
||||
}
|
||||
}
|
||||
|
|
@ -174,7 +174,7 @@ if (httpUrls.length) add('G', `${httpUrls.length} plain-http URL(s) (e.g. ${http
|
|||
let fBad = 0
|
||||
for (const r of rows) {
|
||||
const v = codes[r[4]] || {}
|
||||
const want = v.s && v.f ? 2 : (v.s || v.f || (v.d && v.d.length) || v.au || v.bv) ? 1 : 0
|
||||
const want = v.s && v.f ? 2 : (v.s || v.f || (v.d && v.d.length) || v.au || v.bv || v.se) ? 1 : 0
|
||||
if (want !== r[6]) fBad++
|
||||
}
|
||||
if (fBad) add('F', `${fBad} pin(s) carry a tier that disagrees with their code's URLs`)
|
||||
|
|
@ -204,6 +204,7 @@ if (verif && verif.links) {
|
|||
if (v.za && v.za.u) shipped.add(v.za.u)
|
||||
if (v.au && v.au.u) shipped.add(v.au.u)
|
||||
if (v.bv && v.bv.u) shipped.add(v.bv.u)
|
||||
if (v.se && v.se.u) shipped.add(v.se.u)
|
||||
if (v.gp && v.gp.u) shipped.add(v.gp.u)
|
||||
for (const d of v.d || []) if (d.u) shipped.add(d.u)
|
||||
}
|
||||
|
|
@ -239,6 +240,7 @@ if (verif && verif.links) {
|
|||
if (v.za && v.za.u) shipped2.add(v.za.u)
|
||||
if (v.au && v.au.u) shipped2.add(v.au.u)
|
||||
if (v.bv && v.bv.u) shipped2.add(v.bv.u)
|
||||
if (v.se && v.se.u) shipped2.add(v.se.u)
|
||||
if (v.gp && v.gp.u) shipped2.add(v.gp.u)
|
||||
for (const d of v.d || []) if (d.u) shipped2.add(d.u)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -351,6 +351,27 @@ const dataStore = inject('dataStore')
|
|||
// never updated by the mobile flow).
|
||||
const onSemanticTreeSelect = inject('onSemanticTreeSelect', () => {})
|
||||
|
||||
// ★ THE EXPORT AFFORDANCE, WHICH THIS SHEET RENDERED AND NEVER ENABLED.
|
||||
// This component already renders <SemanticTreeLegend> below — the same component that
|
||||
// owns the Export menu — but passed neither :export-enabled nor @export. exportEnabled
|
||||
// defaults to FALSE, so the control's v-if was never satisfied and a phone reader could
|
||||
// browse the UPG-100 lists and not export a packet or a poster. The packet IS the product
|
||||
// for that profile; the Driver asked for "print options at the top right of the legend...
|
||||
// that's the only way that map would be usable".
|
||||
//
|
||||
// ⚠ IT WAS NOT A DESIGN QUESTION, WHICH IS WHAT I FIRST RECORDED. The 0x0 elements that
|
||||
// measurement found belong to the OTHER, hidden SemanticTreeLegend instance — the desktop
|
||||
// one, mounted but not laid out below the breakpoint. That geometry made it look as though
|
||||
// the mobile sheet had nowhere to put the control. It renders its own instance, with a
|
||||
// titlebar, and only needed the prop.
|
||||
//
|
||||
// PROVIDE/INJECT, matching onSemanticTreeSelect directly above, because this sheet is
|
||||
// rendered deep inside a shell rather than as a direct child — an emit would not reach.
|
||||
// OPT-IN BY CONSTRUCTION: exportEnabled is true only when a profile actually provides a
|
||||
// handler, so the three profiles that do not provide one are untouched.
|
||||
const onLegendExport = inject('onLegendExport', null)
|
||||
const mobileExportEnabled = computed(() => typeof onLegendExport === 'function')
|
||||
|
||||
// ── Data-driven legend (universal for all legend types) ─────────────────────
|
||||
const legendTypeRef = toRef(props, 'legendType')
|
||||
const {
|
||||
|
|
@ -781,7 +802,9 @@ onBeforeUnmount(() => {
|
|||
:hideTabs="nodes ? !tabs : _isFlatTabMobile"
|
||||
:columnLabel="treeColumnLabelForMobile"
|
||||
:columns="columns || ['count', 'pop']"
|
||||
:export-enabled="mobileExportEnabled"
|
||||
@select="onSemanticTreeSelect"
|
||||
@export="(kind) => onLegendExport && onLegendExport(kind)"
|
||||
>
|
||||
<template #title-caret>
|
||||
<button class="mobile-collapse-caret"
|
||||
|
|
|
|||
|
|
@ -4,12 +4,12 @@
|
|||
"instances": [
|
||||
{
|
||||
"id": "app",
|
||||
"title": "DX-Maps SPA — Big Picture + every research map (app-shell)",
|
||||
"title": "Research Gallery — Big Picture + every research map (app-shell)",
|
||||
"props": {
|
||||
"profile": "doxa-maps-spa",
|
||||
"provider": "maplibre",
|
||||
"instanceId": "doxa-maps-spa-app",
|
||||
"title": "DX-Maps"
|
||||
"title": "Research Gallery"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -9,5 +9,5 @@
|
|||
"gospel-resources-map",
|
||||
"my-upg-100-list-map"
|
||||
],
|
||||
"label": "DX-Maps SPA (vertical-tab app-shell: Big Picture + every research map)"
|
||||
"label": "Research Gallery (vertical-tab app-shell: Big Picture + every research map)"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -458,6 +458,11 @@ const pinsByIso = computed(() => {
|
|||
// and fine in another.
|
||||
// Same normalisation the index was built with. Kept beside groupAt so the two cannot
|
||||
// drift: a key built differently here would silently match nothing.
|
||||
// Their directory names are file-format shorthand; a worker reading the sheet should see
|
||||
// what they can actually open, not the folder name.
|
||||
const SE_KIND = { PDF: 'PDF', audio: 'audio', sab: 'app', study: 'study notes', viewer: 'read online' }
|
||||
const seKinds = (k) => (Array.isArray(k) ? k : []).map((x) => SE_KIND[x] || x).join(', ')
|
||||
|
||||
const prayKey = (name, iso3) =>
|
||||
`${String(name || '').toLowerCase().replace(/[^a-z0-9]+/g, ' ').trim()}|${String(iso3 || '').toUpperCase()}`
|
||||
|
||||
|
|
@ -495,6 +500,7 @@ function groupAt(i) {
|
|||
audio: c.au || null,
|
||||
bible_video: c.bv || null,
|
||||
gospel_tract: c.gp || null,
|
||||
scripture_earth: c.se || null,
|
||||
related: c.rel || null,
|
||||
zume_url: c.z || '',
|
||||
zume_approx: c.za || null,
|
||||
|
|
@ -1281,6 +1287,17 @@ useShadowStyles(
|
|||
Gospel presentation · {{ selectedGroup.gospel_tract.n }}
|
||||
</a>
|
||||
|
||||
<!-- SCRIPTURE EARTH — SIL and its translation partners, reaching small languages
|
||||
the big catalogues skip. The chip names WHAT IS THERE rather than saying just
|
||||
"Scripture Earth", because the kinds differ per language and a worker needs to
|
||||
know whether they are being sent to a PDF or to recorded audio. Codes carrying
|
||||
only Jesus Film metadata stubs never reach this field. -->
|
||||
<a v-if="selectedGroup.scripture_earth" class="gm-chip ok wrap"
|
||||
:href="selectedGroup.scripture_earth.u" target="_blank" rel="noopener noreferrer"
|
||||
title="Scripture Earth (SIL International and its translation partners) publishes Scripture in this language. The listing shows every file they hold for it.">
|
||||
Scripture Earth · {{ seKinds(selectedGroup.scripture_earth.k) }}
|
||||
</a>
|
||||
|
||||
<!-- Zume is DISCIPLESHIP TRAINING, not Scripture and not film, so it sits here
|
||||
as its own thing and moves no tier. The absent case names the denominator
|
||||
rather than saying "none found": Zume is one platform in 54 languages, not
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ const VERIFY = resolve(REPO, 'data/tables/gospel-link-verification.json')
|
|||
const FCBH = resolve(REPO, 'data/tables/fcbh-index.json')
|
||||
const MACRO = resolve(REPO, 'data/tables/iso-macrolanguages.json')
|
||||
const GODTOOLS = resolve(REPO, 'data/tables/godtools-index.json')
|
||||
const SCRIPTUREEARTH = resolve(REPO, 'data/tables/scriptureearth-index.json')
|
||||
|
||||
// Two entries with the same subject rendered as "Open Bible Stories Open Bible Stories"
|
||||
// — two links a reader cannot tell apart. 40 languages are in that state, because a
|
||||
|
|
@ -150,6 +151,11 @@ try {
|
|||
let godtools = {}
|
||||
try { godtools = JSON.parse(readFileSync(GODTOOLS, 'utf8')).codes || {} } catch { godtools = {} }
|
||||
|
||||
// Scripture Earth (scripts/fetch-scriptureearth-index.mjs). Optional like the rest: if the
|
||||
// snapshot is absent the build still runs and simply offers less.
|
||||
let scriptureEarth = {}
|
||||
try { scriptureEarth = JSON.parse(readFileSync(SCRIPTUREEARTH, 'utf8')).byIso || {} } catch { scriptureEarth = {} }
|
||||
|
||||
let zume = {}
|
||||
let zumeApprox = {}
|
||||
try {
|
||||
|
|
@ -316,7 +322,7 @@ for (const [c, v] of Object.entries(codes)) {
|
|||
// credentials this build does not have, and they are the ONLY things the unchecked list
|
||||
// should ever name. A reader deciding where to work needs "we looked and it is not there"
|
||||
// to be distinguishable from "nobody looked".
|
||||
const SCANNED = 'ebible, arclight, door43, fcbh'
|
||||
const SCANNED = 'ebible, arclight, door43, fcbh, scriptureearth'
|
||||
const NOT_SCANNED = 'grn, api_bible, dbl, progress_bible'
|
||||
// SIGN LANGUAGES GET THEIR OWN PROVENANCE, because the generic list is actively
|
||||
// misleading for them. A Deaf group is not served by eBible (text), Door43 (text and
|
||||
|
|
@ -397,6 +403,24 @@ for (const [c, g] of Object.entries(godtools)) {
|
|||
gospelCodes++
|
||||
}
|
||||
|
||||
// SCRIPTURE EARTH. SIL and its translation partners publish Scripture for small languages
|
||||
// the big catalogues skip, which is why this pool reaches groups the others cannot. It DOES
|
||||
// lift a group off tier 0, on the same footing as Door43 and audio: a person here is offered
|
||||
// Scripture in their own language — PDF, recorded audio, a Scripture App Builder app, or the
|
||||
// SFM text — so "nothing found" is simply untrue for them. It never reaches tier 2, which
|
||||
// stays reserved for text Scripture together with the JESUS Film.
|
||||
//
|
||||
// The fetcher already threw away two kinds of false positive that would have shipped here:
|
||||
// empty directories (most of the index) and directories holding only JESUSFilm-*.txt
|
||||
// metadata stubs. What arrives in this file is content that was measured to exist.
|
||||
let seCodes = 0
|
||||
let seNew = 0
|
||||
for (const [c, e] of Object.entries(scriptureEarth)) {
|
||||
if (!codes[c]) { codes[c] = { l: '', ck: SCANNED, un: NOT_SCANNED }; seNew++ }
|
||||
codes[c].se = { u: e.u, k: e.k }
|
||||
seCodes++
|
||||
}
|
||||
|
||||
let zumeApproxCodes = 0
|
||||
for (const [c, a] of Object.entries(zumeApprox)) {
|
||||
// Never overwrite an exact join with an approximate one, and never create a code that
|
||||
|
|
@ -422,6 +446,7 @@ if (dead.size) {
|
|||
if (v.au && dead.has(v.au.u)) { delete v.au; droppedDead++ }
|
||||
if (v.bv && dead.has(v.bv.u)) { delete v.bv; droppedDead++ }
|
||||
if (v.gp && dead.has(v.gp.u)) { delete v.gp; droppedDead++ }
|
||||
if (v.se && dead.has(v.se.u)) { delete v.se; droppedDead++ }
|
||||
if (v.d) {
|
||||
const before = v.d.length
|
||||
v.d = v.d.filter((x) => !dead.has(x.u))
|
||||
|
|
@ -467,7 +492,7 @@ for (const [c, v] of Object.entries(codes)) {
|
|||
|
||||
const num = (v) => { const n = Number(v); return Number.isFinite(n) ? n : null }
|
||||
const pins = []
|
||||
let joined = 0, withUrl = 0, noCoord = 0, liftedByD43 = 0, liftedByAudio = 0
|
||||
let joined = 0, withUrl = 0, noCoord = 0, liftedByD43 = 0, liftedByAudio = 0, liftedBySE = 0
|
||||
for (const p of slim) {
|
||||
const lat = num(p.Lat), lng = num(p.Long)
|
||||
if (lat === null || lng === null) { noCoord++; continue }
|
||||
|
|
@ -478,13 +503,15 @@ for (const p of slim) {
|
|||
const hasD = !!(c && c.d && c.d.length)
|
||||
const hasA = !!(c && c.au)
|
||||
const hasBV = !!(c && c.bv)
|
||||
if (hasS || hasF || hasD || hasA || hasBV) withUrl++
|
||||
const hasSE = !!(c && c.se)
|
||||
if (hasS || hasF || hasD || hasA || hasBV || hasSE) withUrl++
|
||||
if (!hasS && !hasF && hasD) liftedByD43++
|
||||
if (!hasS && !hasF && !hasD && (hasA || hasBV)) liftedByAudio++
|
||||
if (!hasS && !hasF && !hasD && !hasA && !hasBV && hasSE) liftedBySE++
|
||||
// tier 2 = Scripture AND film · 1 = SOMETHING found · 0 = nothing in any pool checked.
|
||||
// A Door43 resource lifts a group out of tier 0 because "nothing found" is then simply
|
||||
// untrue for them — but it never reaches tier 2, which is reserved for Scripture + film.
|
||||
const tier = hasS && hasF ? 2 : (hasS || hasF || hasD || hasA || hasBV) ? 1 : 0
|
||||
const tier = hasS && hasF ? 2 : (hasS || hasF || hasD || hasA || hasBV || hasSE) ? 1 : 0
|
||||
pins.push([
|
||||
p.Name || '',
|
||||
Math.round(lat * 100) / 100,
|
||||
|
|
@ -525,6 +552,7 @@ console.log(`arclight codes ${Object.keys(arc).length} (${arcOnly} new, ${upgr
|
|||
console.log(`share urls ${Object.keys(share).length}`)
|
||||
console.log(`fcbh codes ${audioCodes} (${audioNew} new codes)`)
|
||||
console.log(`gospel tracts ${gospelCodes} (Cru/GodTools presentations; depth only, tier UNCHANGED)`)
|
||||
console.log(`scripture earth ${seCodes} (${seNew} new codes; SIL partners — Scripture in their own language)`)
|
||||
console.log(`related variety ${relatedCodes} (nothing of their own; an ISO macrolanguage sibling has something — tier UNCHANGED)`)
|
||||
console.log(`fcbh bible video ${videoCodes} (a separate page; never counted as film) + ${videoMerged} merged into the Scripture link`)
|
||||
console.log(`dead links dropped ${droppedDead} (verification proved them 404; ${dead.size} known broken)`)
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ const SOURCE = (u) =>
|
|||
: /zume\.training/i.test(u) ? 'Zume Training'
|
||||
: /bible\.is/i.test(u) ? 'Faith Comes By Hearing'
|
||||
: /knowgod\.com/i.test(u) ? 'Cru (GodTools)'
|
||||
: /scriptureearth\.org/i.test(u) ? 'Scripture Earth (SIL)'
|
||||
: 'other'
|
||||
|
||||
const out = []
|
||||
|
|
@ -115,6 +116,15 @@ for (const [code, c] of Object.entries(codes)) {
|
|||
// Its own type. A tract is not Scripture and not a course — it is the thing you open a
|
||||
// conversation with, and a reader choosing a link needs to know which of those they get.
|
||||
if (c.gp) add(c.gp.n || 'Gospel presentation', 'Gospel presentation', c.gp.u, 'Read in this language')
|
||||
// Scripture Earth is typed as Scripture because that is what it is — SIL and its
|
||||
// translation partners publishing the text in this language. The scope column names the
|
||||
// FORMATS actually held, since a worker needs to know whether they are being sent to a
|
||||
// PDF, to recorded audio, or to an app before they set out.
|
||||
if (c.se) {
|
||||
const SE_KIND = { PDF: 'PDF', audio: 'audio', sab: 'app', study: 'study notes', viewer: 'read online' }
|
||||
const kinds = (c.se.k || []).map((k) => SE_KIND[k] || k).join(', ')
|
||||
add('Scripture Earth', 'Scripture', c.se.u, kinds)
|
||||
}
|
||||
add('Zume Training', 'Discipleship training', c.z, 'Course in this language')
|
||||
// The approximate match ships too, with the qualification IN THE SCOPE COLUMN. Leaving
|
||||
// it out would make the table disagree with the map for these languages, and a reader
|
||||
|
|
|
|||
|
|
@ -0,0 +1,157 @@
|
|||
/**
|
||||
* fetch-scriptureearth-index.mjs — Scripture Earth, joined on ISO 639-3.
|
||||
*
|
||||
* WHY THIS SOURCE. Scripture Earth (SIL International and its translation partners)
|
||||
* publishes Scripture for minority languages that the big catalogues miss. eBible,
|
||||
* Arclight, Door43 and FCBH between them still leave 2,901 of our people groups with
|
||||
* nothing at all, and those groups are small-language groups almost by definition —
|
||||
* exactly the population this portal serves. Its content is straight Scripture
|
||||
* translation, which passes the doctrinal filter on the same footing as eBible.
|
||||
*
|
||||
* WHAT IS AND IS NOT EVIDENCE HERE — this is the whole point of the file.
|
||||
* The portal exposes an open Apache index at /data/, listing 3,477 ISO-639-3
|
||||
* directories. THE DIRECTORY EXISTING MEANS NOTHING. Measured: of the 622 directories
|
||||
* matching a tier-0 code, 582 are empty stubs — a bare parent link, 646 bytes. Trusting
|
||||
* the listing alone would have shipped 716 people groups a link to an empty folder.
|
||||
* So a code counts only when its directory actually holds an artefact directory.
|
||||
*
|
||||
* NOR IS EVERY ARTEFACT A RESOURCE. A `video/` directory here contains only
|
||||
* JESUSFilm-<iso>.<lang>.txt metadata stubs, not playable film — 17 of the 40 non-empty
|
||||
* tier-0 codes had nothing but those. A person sent there finds a text file. So `video`
|
||||
* alone never qualifies a code; only PDF, audio, sab (Scripture App Builder), study and
|
||||
* viewer (SFM scripture text) do. Verified by hand before this was written:
|
||||
* data/bkc/PDF/Baka-AT-01.pdf is 14,366,830 bytes of application/pdf, and a nonexistent
|
||||
* sibling returns 404 — so a 200 here is real.
|
||||
*
|
||||
* We do not touch their search endpoints. LSearch.php and livesearch.php answer "Hack!"
|
||||
* to a query string; the open directory index is the part of the site meant to be read,
|
||||
* and robots.txt disallows nothing.
|
||||
*/
|
||||
import { writeFileSync, readFileSync, existsSync } from 'node:fs'
|
||||
import { resolve, dirname } from 'node:path'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
import { writeSnapshot } from './_snapshot-guard.mjs'
|
||||
|
||||
const HERE = dirname(fileURLToPath(import.meta.url))
|
||||
const TABLES = resolve(HERE, '../../../data/tables')
|
||||
const OUT = resolve(TABLES, 'scriptureearth-index.json')
|
||||
const PINS = resolve(TABLES, 'people-group-pins.json')
|
||||
const ORIGIN = 'https://scriptureearth.org'
|
||||
|
||||
/** Their host rejects a bare client; this is the same UA a reader would arrive with. */
|
||||
const UA =
|
||||
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125 Safari/537.36'
|
||||
|
||||
/** An empty language directory is 646 bytes of Apache chrome. Anything real is larger. */
|
||||
const EMPTY_DIR_BYTES = 700
|
||||
|
||||
/**
|
||||
* Directories that represent something a person can actually open. `video` is deliberately
|
||||
* absent: see the header — it holds Jesus Film metadata stubs, not film.
|
||||
*/
|
||||
const REAL_KINDS = new Set(['PDF', 'audio', 'sab', 'study', 'viewer'])
|
||||
|
||||
const CONCURRENCY = Number(process.env.SE_CONCURRENCY || 4)
|
||||
const LIMIT = Number(process.env.SE_LIMIT || 0)
|
||||
|
||||
async function get(url, timeoutMs = 20000) {
|
||||
try {
|
||||
const r = await fetch(url, {
|
||||
headers: { 'user-agent': UA },
|
||||
redirect: 'follow',
|
||||
signal: AbortSignal.timeout(timeoutMs),
|
||||
})
|
||||
if (!r.ok) return null
|
||||
return await r.text()
|
||||
} catch {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
/** Child directory names in an Apache index, ignoring the sort links and the parent. */
|
||||
function childDirs(html) {
|
||||
const out = []
|
||||
for (const m of html.matchAll(/href="([^"?/][^"]*)\/"/g)) out.push(decodeURIComponent(m[1]))
|
||||
return out
|
||||
}
|
||||
|
||||
const root = await get(`${ORIGIN}/data/`, 60000)
|
||||
if (!root) {
|
||||
console.error('SCRIPTUREEARTH: /data/ did not answer — leaving the previous snapshot alone.')
|
||||
process.exit(1)
|
||||
}
|
||||
const listed = childDirs(root).filter((d) => /^[a-z]{3}$/.test(d))
|
||||
console.log(`SCRIPTUREEARTH: ${listed.length} ISO-639-3 directories listed.`)
|
||||
|
||||
/* Only codes our own map can join to. Scanning the other ~200 would be traffic for
|
||||
nothing — we could not attach the result to any people group. */
|
||||
const pins = JSON.parse(readFileSync(PINS, 'utf8'))
|
||||
const ours = new Set(Object.keys(pins.codes || {}).map((s) => s.toLowerCase()))
|
||||
let targets = listed.filter((d) => ours.has(d))
|
||||
if (LIMIT) targets = targets.slice(0, LIMIT)
|
||||
console.log(`SCRIPTUREEARTH: ${targets.length} of them are codes this map uses.`)
|
||||
|
||||
const byIso = {}
|
||||
let scanned = 0
|
||||
let empty = 0
|
||||
let videoOnly = 0
|
||||
|
||||
async function worker(queue) {
|
||||
for (;;) {
|
||||
const iso = queue.shift()
|
||||
if (!iso) return
|
||||
const html = await get(`${ORIGIN}/data/${iso}/`)
|
||||
scanned++
|
||||
if (scanned % 250 === 0) console.log(` ${scanned}/${targets.length}`)
|
||||
if (!html || html.length < EMPTY_DIR_BYTES) {
|
||||
empty++
|
||||
continue
|
||||
}
|
||||
const kinds = childDirs(html)
|
||||
const real = kinds.filter((k) => REAL_KINDS.has(k))
|
||||
if (!real.length) {
|
||||
videoOnly++
|
||||
continue
|
||||
}
|
||||
byIso[iso] = { u: `${ORIGIN}/data/${iso}/`, k: real.sort() }
|
||||
}
|
||||
}
|
||||
|
||||
const queue = [...targets]
|
||||
await Promise.all(Array.from({ length: CONCURRENCY }, () => worker(queue)))
|
||||
|
||||
console.log(
|
||||
`SCRIPTUREEARTH: ${Object.keys(byIso).length} code(s) hold a real artefact; ` +
|
||||
`${empty} empty stub(s), ${videoOnly} with only Jesus Film metadata.`,
|
||||
)
|
||||
|
||||
if (LIMIT) {
|
||||
console.log('SCRIPTUREEARTH: SE_LIMIT set — smoke run, writing nothing.')
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
writeSnapshot(
|
||||
OUT,
|
||||
`${JSON.stringify(
|
||||
{
|
||||
source: `${ORIGIN}/data/ (open Apache index, robots.txt disallows nothing)`,
|
||||
fetched: new Date().toISOString().slice(0, 10),
|
||||
_note:
|
||||
'A listed directory is NOT a resource: most are empty stubs, and a video/ directory ' +
|
||||
'holds JESUSFilm-*.txt metadata rather than film. Only codes with PDF, audio, sab, ' +
|
||||
'study or viewer content are kept. Publisher is SIL International and its translation ' +
|
||||
'partners — straight Scripture, same doctrinal footing as eBible.',
|
||||
listed: listed.length,
|
||||
scanned: targets.length,
|
||||
emptyStubs: empty,
|
||||
metadataOnly: videoOnly,
|
||||
codes: Object.keys(byIso).length,
|
||||
byIso,
|
||||
},
|
||||
null,
|
||||
1,
|
||||
)}\n`,
|
||||
(j) => Object.keys(j.byIso || {}).length,
|
||||
'Scripture Earth code(s)',
|
||||
)
|
||||
console.log(`wrote ${OUT}`)
|
||||
|
|
@ -333,6 +333,7 @@ for (const v of Object.values(pins.codes)) {
|
|||
if (v.au && v.au.u) urls.add(v.au.u)
|
||||
if (v.bv && v.bv.u) urls.add(v.bv.u)
|
||||
if (v.gp && v.gp.u) urls.add(v.gp.u)
|
||||
if (v.se && v.se.u) urls.add(v.se.u)
|
||||
for (const d of v.d || []) if (d.u) urls.add(d.u)
|
||||
}
|
||||
// Carry forward everything a previous run proved dead, so dropping a link cannot erase the
|
||||
|
|
|
|||
|
|
@ -1097,6 +1097,13 @@ function watchLegendRows() {
|
|||
// here). Providing it wires the mobile sheet to the same handler the desktop
|
||||
// legend's @select uses — without this, mobile rows render but tap dead.
|
||||
provide('onSemanticTreeSelect', onLegendSelect)
|
||||
// The SAME handler the desktop legend gets via @export. Provided rather than passed as a
|
||||
// prop because <LegendMobile> renders several levels down inside the shell, which is also
|
||||
// why onSemanticTreeSelect above is provided. Without this the mobile sheet rendered its
|
||||
// SemanticTreeLegend with exportEnabled defaulting to FALSE, so a phone reader could browse
|
||||
// the lists and had no way to print a packet or a poster — the half of this profile the
|
||||
// Driver called "the only way that map would be usable".
|
||||
provide('onLegendExport', onLegendExport)
|
||||
|
||||
// ── LEGEND EXPORT (top-right of the legend titlebar) ────────────────────────
|
||||
// The shared legend emits 'export' with 'poster' | 'packet' for the currently
|
||||
|
|
@ -1984,7 +1991,6 @@ onBeforeUnmount(() => {
|
|||
v-if="legendNodes.length"
|
||||
:nodes="legendNodes"
|
||||
:tabs="LEGEND_TABS"
|
||||
:default-tab="LEGEND_DEFAULT_TAB"
|
||||
:columns="['count', 'pop']"
|
||||
:title="LEGEND_TITLE"
|
||||
:export-enabled="true"
|
||||
|
|
@ -2004,6 +2010,8 @@ onBeforeUnmount(() => {
|
|||
v-if="legendNodes.length"
|
||||
legend-type="upg-100"
|
||||
:nodes="legendNodes"
|
||||
:tabs="LEGEND_TABS"
|
||||
:default-tab="LEGEND_DEFAULT_TAB"
|
||||
:columns="['count', 'pop']"
|
||||
column-label="UPG 100"
|
||||
:title="LEGEND_TITLE"
|
||||
|
|
|
|||
2
public/assets/tables/gospel-gaps.json
vendored
2
public/assets/tables/gospel-gaps.json
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
public/assets/tables/people-group-pins.json
vendored
2
public/assets/tables/people-group-pins.json
vendored
File diff suppressed because one or more lines are too long
340
public/doxa-maps/assets/tables/country-gap.json
generated
340
public/doxa-maps/assets/tables/country-gap.json
generated
|
|
@ -70,8 +70,8 @@
|
|||
"title": "The gap by country",
|
||||
"grain": "one row per country that has at least one people group on this map",
|
||||
"generated": "2026-09-24",
|
||||
"measured": "242 countries · 2,901 groups with nothing found · 287,644,779 people",
|
||||
"by_region": "Oceania 51.2% (679 of 1325) · Africa 30.0% (923 of 3074) · Asia 19.3% (978 of 5073) · Americas 11.4% (241 of 2117) · Europe 10.1% (80 of 790)",
|
||||
"measured": "242 countries · 2,873 groups with nothing found · 287,305,229 people",
|
||||
"by_region": "Oceania 51.2% (678 of 1325) · Africa 29.9% (919 of 3074) · Asia 19.2% (974 of 5073) · Americas 10.5% (222 of 2117) · Europe 10.1% (80 of 790)",
|
||||
"three_questions": "Groups with nothing, people with nothing, and the share of the country each represents. They rank differently on purpose — Papua New Guinea has the most groups and few people, China the reverse, and Oceania has the worst share of any region while being the smallest by population.",
|
||||
"source": "data/tables/gospel-by-country.json, which is itself refreshed from data/tables/people-group-pins.json — the same index the map draws, so this table and the map cannot disagree.",
|
||||
"curated_columns": "growing_unreached and deaths_day come from the curated country analysis and are null where it does not cover the country. Null, never zero: zero is a claim this build cannot make."
|
||||
|
|
@ -82,9 +82,9 @@
|
|||
"iso3": "PNG",
|
||||
"region": "Oceania",
|
||||
"people_groups": 831,
|
||||
"groups_with_nothing": 469,
|
||||
"pct_with_nothing": 56.4,
|
||||
"people_with_nothing": 2187150,
|
||||
"groups_with_nothing": 468,
|
||||
"pct_with_nothing": 56.3,
|
||||
"people_with_nothing": 2179750,
|
||||
"groups_with_scripture": 332,
|
||||
"groups_with_film": 143,
|
||||
"band": "high",
|
||||
|
|
@ -112,9 +112,9 @@
|
|||
"iso3": "NGA",
|
||||
"region": "Africa",
|
||||
"people_groups": 433,
|
||||
"groups_with_nothing": 188,
|
||||
"pct_with_nothing": 43.4,
|
||||
"people_with_nothing": 9036825,
|
||||
"groups_with_nothing": 187,
|
||||
"pct_with_nothing": 43.2,
|
||||
"people_with_nothing": 8978825,
|
||||
"groups_with_scripture": 105,
|
||||
"groups_with_film": 188,
|
||||
"band": "high",
|
||||
|
|
@ -127,9 +127,9 @@
|
|||
"iso3": "CMR",
|
||||
"region": "Africa",
|
||||
"people_groups": 260,
|
||||
"groups_with_nothing": 130,
|
||||
"pct_with_nothing": 50,
|
||||
"people_with_nothing": 3722425,
|
||||
"groups_with_nothing": 129,
|
||||
"pct_with_nothing": 49.6,
|
||||
"people_with_nothing": 3656425,
|
||||
"groups_with_scripture": 72,
|
||||
"groups_with_film": 84,
|
||||
"band": "high",
|
||||
|
|
@ -262,9 +262,9 @@
|
|||
"iso3": "BRA",
|
||||
"region": "Americas",
|
||||
"people_groups": 270,
|
||||
"groups_with_nothing": 62,
|
||||
"pct_with_nothing": 23,
|
||||
"people_with_nothing": 73130,
|
||||
"groups_with_nothing": 58,
|
||||
"pct_with_nothing": 21.5,
|
||||
"people_with_nothing": 65680,
|
||||
"groups_with_scripture": 186,
|
||||
"groups_with_film": 163,
|
||||
"band": "partial",
|
||||
|
|
@ -292,9 +292,9 @@
|
|||
"iso3": "USA",
|
||||
"region": "Americas",
|
||||
"people_groups": 623,
|
||||
"groups_with_nothing": 44,
|
||||
"pct_with_nothing": 7.1,
|
||||
"people_with_nothing": 473415,
|
||||
"groups_with_nothing": 41,
|
||||
"pct_with_nothing": 6.6,
|
||||
"people_with_nothing": 465640,
|
||||
"groups_with_scripture": 517,
|
||||
"groups_with_film": 549,
|
||||
"band": "partial",
|
||||
|
|
@ -332,21 +332,6 @@
|
|||
"deaths_day": 0.6,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Vietnam",
|
||||
"iso3": "VNM",
|
||||
"region": "Asia",
|
||||
"people_groups": 74,
|
||||
"groups_with_nothing": 30,
|
||||
"pct_with_nothing": 40.5,
|
||||
"people_with_nothing": 1902675,
|
||||
"groups_with_scripture": 28,
|
||||
"groups_with_film": 38,
|
||||
"band": "high",
|
||||
"growing_unreached": 11,
|
||||
"deaths_day": 5.7,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Republic of the Congo",
|
||||
"iso3": "COG",
|
||||
|
|
@ -362,6 +347,21 @@
|
|||
"deaths_day": 1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Vietnam",
|
||||
"iso3": "VNM",
|
||||
"region": "Asia",
|
||||
"people_groups": 74,
|
||||
"groups_with_nothing": 29,
|
||||
"pct_with_nothing": 39.2,
|
||||
"people_with_nothing": 1860175,
|
||||
"groups_with_scripture": 28,
|
||||
"groups_with_film": 38,
|
||||
"band": "high",
|
||||
"growing_unreached": 11,
|
||||
"deaths_day": 5.7,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "New Caledonia",
|
||||
"iso3": "NCL",
|
||||
|
|
@ -397,9 +397,9 @@
|
|||
"iso3": "MMR",
|
||||
"region": "Asia",
|
||||
"people_groups": 110,
|
||||
"groups_with_nothing": 26,
|
||||
"pct_with_nothing": 23.6,
|
||||
"people_with_nothing": 1278900,
|
||||
"groups_with_nothing": 25,
|
||||
"pct_with_nothing": 22.7,
|
||||
"people_with_nothing": 1274400,
|
||||
"groups_with_scripture": 63,
|
||||
"groups_with_film": 64,
|
||||
"band": "partial",
|
||||
|
|
@ -467,36 +467,6 @@
|
|||
"deaths_day": 13.4,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Bhutan",
|
||||
"iso3": "BTN",
|
||||
"region": "Asia",
|
||||
"people_groups": 36,
|
||||
"groups_with_nothing": 20,
|
||||
"pct_with_nothing": 55.6,
|
||||
"people_with_nothing": 240825,
|
||||
"groups_with_scripture": 11,
|
||||
"groups_with_film": 16,
|
||||
"band": "high",
|
||||
"growing_unreached": 13,
|
||||
"deaths_day": 2.1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Canada",
|
||||
"iso3": "CAN",
|
||||
"region": "Americas",
|
||||
"people_groups": 304,
|
||||
"groups_with_nothing": 20,
|
||||
"pct_with_nothing": 6.6,
|
||||
"people_with_nothing": 187600,
|
||||
"groups_with_scripture": 256,
|
||||
"groups_with_film": 270,
|
||||
"band": "partial",
|
||||
"growing_unreached": null,
|
||||
"deaths_day": null,
|
||||
"basis": "pins only — no curated country analysis for this country"
|
||||
},
|
||||
{
|
||||
"country": "Afghanistan",
|
||||
"iso3": "AFG",
|
||||
|
|
@ -512,6 +482,21 @@
|
|||
"deaths_day": 17.6,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Bhutan",
|
||||
"iso3": "BTN",
|
||||
"region": "Asia",
|
||||
"people_groups": 36,
|
||||
"groups_with_nothing": 19,
|
||||
"pct_with_nothing": 52.8,
|
||||
"people_with_nothing": 238225,
|
||||
"groups_with_scripture": 11,
|
||||
"groups_with_film": 16,
|
||||
"band": "high",
|
||||
"growing_unreached": 13,
|
||||
"deaths_day": 2.1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Ethiopia",
|
||||
"iso3": "ETH",
|
||||
|
|
@ -527,6 +512,21 @@
|
|||
"deaths_day": 130,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Canada",
|
||||
"iso3": "CAN",
|
||||
"region": "Americas",
|
||||
"people_groups": 304,
|
||||
"groups_with_nothing": 18,
|
||||
"pct_with_nothing": 5.9,
|
||||
"people_with_nothing": 183000,
|
||||
"groups_with_scripture": 256,
|
||||
"groups_with_film": 270,
|
||||
"band": "partial",
|
||||
"growing_unreached": null,
|
||||
"deaths_day": null,
|
||||
"basis": "pins only — no curated country analysis for this country"
|
||||
},
|
||||
{
|
||||
"country": "Russian Federation",
|
||||
"iso3": "RUS",
|
||||
|
|
@ -572,21 +572,6 @@
|
|||
"deaths_day": 12.6,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Peru",
|
||||
"iso3": "PER",
|
||||
"region": "Americas",
|
||||
"people_groups": 90,
|
||||
"groups_with_nothing": 16,
|
||||
"pct_with_nothing": 17.8,
|
||||
"people_with_nothing": 1194475,
|
||||
"groups_with_scripture": 73,
|
||||
"groups_with_film": 57,
|
||||
"band": "partial",
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 5.4,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Ghana",
|
||||
"iso3": "GHA",
|
||||
|
|
@ -647,6 +632,21 @@
|
|||
"deaths_day": null,
|
||||
"basis": "pins only — no curated country analysis for this country"
|
||||
},
|
||||
{
|
||||
"country": "Peru",
|
||||
"iso3": "PER",
|
||||
"region": "Americas",
|
||||
"people_groups": 90,
|
||||
"groups_with_nothing": 12,
|
||||
"pct_with_nothing": 13.3,
|
||||
"people_with_nothing": 1160875,
|
||||
"groups_with_scripture": 73,
|
||||
"groups_with_film": 57,
|
||||
"band": "partial",
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 5.4,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Oman",
|
||||
"iso3": "OMN",
|
||||
|
|
@ -722,21 +722,6 @@
|
|||
"deaths_day": 0.1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Gabon",
|
||||
"iso3": "GAB",
|
||||
"region": "Africa",
|
||||
"people_groups": 45,
|
||||
"groups_with_nothing": 9,
|
||||
"pct_with_nothing": 20,
|
||||
"people_with_nothing": 99600,
|
||||
"groups_with_scripture": 13,
|
||||
"groups_with_film": 24,
|
||||
"band": "partial",
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 0.3,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "French Polynesia",
|
||||
"iso3": "PYF",
|
||||
|
|
@ -767,6 +752,21 @@
|
|||
"deaths_day": 4.1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Gabon",
|
||||
"iso3": "GAB",
|
||||
"region": "Africa",
|
||||
"people_groups": 45,
|
||||
"groups_with_nothing": 8,
|
||||
"pct_with_nothing": 17.8,
|
||||
"people_with_nothing": 92800,
|
||||
"groups_with_scripture": 13,
|
||||
"groups_with_film": 24,
|
||||
"band": "partial",
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 0.3,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Namibia",
|
||||
"iso3": "NAM",
|
||||
|
|
@ -797,21 +797,6 @@
|
|||
"deaths_day": 0,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Venezuela",
|
||||
"iso3": "VEN",
|
||||
"region": "Americas",
|
||||
"people_groups": 51,
|
||||
"groups_with_nothing": 7,
|
||||
"pct_with_nothing": 13.7,
|
||||
"people_with_nothing": 311800,
|
||||
"groups_with_scripture": 42,
|
||||
"groups_with_film": 39,
|
||||
"band": "partial",
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 0.2,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Cambodia",
|
||||
"iso3": "KHM",
|
||||
|
|
@ -1022,21 +1007,6 @@
|
|||
"deaths_day": null,
|
||||
"basis": "pins only — no curated country analysis for this country"
|
||||
},
|
||||
{
|
||||
"country": "Benin",
|
||||
"iso3": "BEN",
|
||||
"region": "Africa",
|
||||
"people_groups": 57,
|
||||
"groups_with_nothing": 5,
|
||||
"pct_with_nothing": 8.8,
|
||||
"people_with_nothing": 554500,
|
||||
"groups_with_scripture": 29,
|
||||
"groups_with_film": 38,
|
||||
"band": "partial",
|
||||
"growing_unreached": 4,
|
||||
"deaths_day": 21.9,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Brunei Darussalam",
|
||||
"iso3": "BRN",
|
||||
|
|
@ -1052,6 +1022,21 @@
|
|||
"deaths_day": 1.1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Venezuela",
|
||||
"iso3": "VEN",
|
||||
"region": "Americas",
|
||||
"people_groups": 51,
|
||||
"groups_with_nothing": 5,
|
||||
"pct_with_nothing": 9.8,
|
||||
"people_with_nothing": 307700,
|
||||
"groups_with_scripture": 42,
|
||||
"groups_with_film": 39,
|
||||
"band": "partial",
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 0.2,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Taiwan",
|
||||
"iso3": "TWN",
|
||||
|
|
@ -1172,21 +1157,6 @@
|
|||
"deaths_day": 1.3,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Mexico",
|
||||
"iso3": "MEX",
|
||||
"region": "Americas",
|
||||
"people_groups": 205,
|
||||
"groups_with_nothing": 5,
|
||||
"pct_with_nothing": 2.4,
|
||||
"people_with_nothing": 27700,
|
||||
"groups_with_scripture": 193,
|
||||
"groups_with_film": 175,
|
||||
"band": "partial",
|
||||
"growing_unreached": null,
|
||||
"deaths_day": null,
|
||||
"basis": "pins only — no curated country analysis for this country"
|
||||
},
|
||||
{
|
||||
"country": "Egypt",
|
||||
"iso3": "EGY",
|
||||
|
|
@ -1217,6 +1187,21 @@
|
|||
"deaths_day": 3.6,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Benin",
|
||||
"iso3": "BEN",
|
||||
"region": "Africa",
|
||||
"people_groups": 57,
|
||||
"groups_with_nothing": 4,
|
||||
"pct_with_nothing": 7,
|
||||
"people_with_nothing": 500000,
|
||||
"groups_with_scripture": 29,
|
||||
"groups_with_film": 38,
|
||||
"band": "partial",
|
||||
"growing_unreached": 4,
|
||||
"deaths_day": 21.9,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Comoros",
|
||||
"iso3": "COM",
|
||||
|
|
@ -1322,21 +1307,6 @@
|
|||
"deaths_day": 1.1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Bolivia",
|
||||
"iso3": "BOL",
|
||||
"region": "Americas",
|
||||
"people_groups": 39,
|
||||
"groups_with_nothing": 4,
|
||||
"pct_with_nothing": 10.3,
|
||||
"people_with_nothing": 134875,
|
||||
"groups_with_scripture": 34,
|
||||
"groups_with_film": 28,
|
||||
"band": "partial",
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 0,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "French Guiana",
|
||||
"iso3": "GUF",
|
||||
|
|
@ -1562,6 +1532,21 @@
|
|||
"deaths_day": 1.1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Mexico",
|
||||
"iso3": "MEX",
|
||||
"region": "Americas",
|
||||
"people_groups": 205,
|
||||
"groups_with_nothing": 3,
|
||||
"pct_with_nothing": 1.5,
|
||||
"people_with_nothing": 18600,
|
||||
"groups_with_scripture": 193,
|
||||
"groups_with_film": 175,
|
||||
"band": "partial",
|
||||
"growing_unreached": null,
|
||||
"deaths_day": null,
|
||||
"basis": "pins only — no curated country analysis for this country"
|
||||
},
|
||||
{
|
||||
"country": "Wallis and Futuna",
|
||||
"iso3": "WLF",
|
||||
|
|
@ -1727,6 +1712,21 @@
|
|||
"deaths_day": 0,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Bolivia",
|
||||
"iso3": "BOL",
|
||||
"region": "Americas",
|
||||
"people_groups": 39,
|
||||
"groups_with_nothing": 2,
|
||||
"pct_with_nothing": 5.1,
|
||||
"people_with_nothing": 120250,
|
||||
"groups_with_scripture": 34,
|
||||
"groups_with_film": 28,
|
||||
"band": "partial",
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 0,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Honduras",
|
||||
"iso3": "HND",
|
||||
|
|
@ -2687,21 +2687,6 @@
|
|||
"deaths_day": null,
|
||||
"basis": "pins only — no curated country analysis for this country"
|
||||
},
|
||||
{
|
||||
"country": "Syrian Arab Republic",
|
||||
"iso3": "SYR",
|
||||
"region": "Asia",
|
||||
"people_groups": 20,
|
||||
"groups_with_nothing": 1,
|
||||
"pct_with_nothing": 5,
|
||||
"people_with_nothing": 16000,
|
||||
"groups_with_scripture": 13,
|
||||
"groups_with_film": 19,
|
||||
"band": "partial",
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 25.7,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Lithuania",
|
||||
"iso3": "LTU",
|
||||
|
|
@ -3392,6 +3377,21 @@
|
|||
"deaths_day": 39.8,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Syrian Arab Republic",
|
||||
"iso3": "SYR",
|
||||
"region": "Asia",
|
||||
"people_groups": 20,
|
||||
"groups_with_nothing": 0,
|
||||
"pct_with_nothing": 0,
|
||||
"people_with_nothing": 0,
|
||||
"groups_with_scripture": 13,
|
||||
"groups_with_film": 19,
|
||||
"band": "covered",
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 25.7,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Jordan",
|
||||
"iso3": "JOR",
|
||||
|
|
|
|||
|
|
@ -59,14 +59,14 @@
|
|||
"country": "Brazil",
|
||||
"region": "Americas",
|
||||
"groups": 270,
|
||||
"no_resource": 62,
|
||||
"pop_no_resource": 73130,
|
||||
"no_resource": 58,
|
||||
"pop_no_resource": 65680,
|
||||
"scripture": 186,
|
||||
"film": 163,
|
||||
"growing_unreached": 38,
|
||||
"deaths_day": 1.2,
|
||||
"growth": 0.41,
|
||||
"pct_no_resource": 23,
|
||||
"pct_no_resource": 21.5,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -104,14 +104,14 @@
|
|||
"country": "Nigeria",
|
||||
"region": "Africa",
|
||||
"groups": 433,
|
||||
"no_resource": 188,
|
||||
"pop_no_resource": 9036825,
|
||||
"no_resource": 187,
|
||||
"pop_no_resource": 8978825,
|
||||
"scripture": 105,
|
||||
"film": 188,
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 44,
|
||||
"growth": null,
|
||||
"pct_no_resource": 43.4,
|
||||
"pct_no_resource": 43.2,
|
||||
"band": "high"
|
||||
},
|
||||
{
|
||||
|
|
@ -164,14 +164,14 @@
|
|||
"country": "Bhutan",
|
||||
"region": "Asia",
|
||||
"groups": 36,
|
||||
"no_resource": 20,
|
||||
"pop_no_resource": 240825,
|
||||
"no_resource": 19,
|
||||
"pop_no_resource": 238225,
|
||||
"scripture": 11,
|
||||
"film": 16,
|
||||
"growing_unreached": 13,
|
||||
"deaths_day": 2.1,
|
||||
"growth": 0.65,
|
||||
"pct_no_resource": 55.6,
|
||||
"pct_no_resource": 52.8,
|
||||
"band": "high"
|
||||
},
|
||||
{
|
||||
|
|
@ -194,14 +194,14 @@
|
|||
"country": "Vietnam",
|
||||
"region": "Asia",
|
||||
"groups": 74,
|
||||
"no_resource": 30,
|
||||
"pop_no_resource": 1902675,
|
||||
"no_resource": 29,
|
||||
"pop_no_resource": 1860175,
|
||||
"scripture": 28,
|
||||
"film": 38,
|
||||
"growing_unreached": 11,
|
||||
"deaths_day": 5.7,
|
||||
"growth": 0.63,
|
||||
"pct_no_resource": 40.5,
|
||||
"pct_no_resource": 39.2,
|
||||
"band": "high"
|
||||
},
|
||||
{
|
||||
|
|
@ -284,14 +284,14 @@
|
|||
"country": "Cameroon",
|
||||
"region": "Africa",
|
||||
"groups": 260,
|
||||
"no_resource": 130,
|
||||
"pop_no_resource": 3722425,
|
||||
"no_resource": 129,
|
||||
"pop_no_resource": 3656425,
|
||||
"scripture": 72,
|
||||
"film": 84,
|
||||
"growing_unreached": 8,
|
||||
"deaths_day": 3.4,
|
||||
"growth": 2.61,
|
||||
"pct_no_resource": 50,
|
||||
"pct_no_resource": 49.6,
|
||||
"band": "high"
|
||||
},
|
||||
{
|
||||
|
|
@ -494,14 +494,14 @@
|
|||
"country": "Myanmar",
|
||||
"region": "Asia",
|
||||
"groups": 110,
|
||||
"no_resource": 26,
|
||||
"pop_no_resource": 1278900,
|
||||
"no_resource": 25,
|
||||
"pop_no_resource": 1274400,
|
||||
"scripture": 63,
|
||||
"film": 64,
|
||||
"growing_unreached": 4,
|
||||
"deaths_day": 25.8,
|
||||
"growth": 0.67,
|
||||
"pct_no_resource": 23.6,
|
||||
"pct_no_resource": 22.7,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -509,14 +509,14 @@
|
|||
"country": "Benin",
|
||||
"region": "Africa",
|
||||
"groups": 57,
|
||||
"no_resource": 5,
|
||||
"pop_no_resource": 554500,
|
||||
"no_resource": 4,
|
||||
"pop_no_resource": 500000,
|
||||
"scripture": 29,
|
||||
"film": 38,
|
||||
"growing_unreached": 4,
|
||||
"deaths_day": 21.9,
|
||||
"growth": 2.46,
|
||||
"pct_no_resource": 8.8,
|
||||
"pct_no_resource": 7,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -674,14 +674,14 @@
|
|||
"country": "Peru",
|
||||
"region": "Americas",
|
||||
"groups": 90,
|
||||
"no_resource": 16,
|
||||
"pop_no_resource": 1194475,
|
||||
"no_resource": 12,
|
||||
"pop_no_resource": 1160875,
|
||||
"scripture": 73,
|
||||
"film": 57,
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 5.4,
|
||||
"growth": 1.09,
|
||||
"pct_no_resource": 17.8,
|
||||
"pct_no_resource": 13.3,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -809,14 +809,14 @@
|
|||
"country": "Gabon",
|
||||
"region": "Africa",
|
||||
"groups": 45,
|
||||
"no_resource": 9,
|
||||
"pop_no_resource": 99600,
|
||||
"no_resource": 8,
|
||||
"pop_no_resource": 92800,
|
||||
"scripture": 13,
|
||||
"film": 24,
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 0.3,
|
||||
"growth": 2.16,
|
||||
"pct_no_resource": 20,
|
||||
"pct_no_resource": 17.8,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -824,14 +824,14 @@
|
|||
"country": "Venezuela",
|
||||
"region": "Americas",
|
||||
"groups": 51,
|
||||
"no_resource": 7,
|
||||
"pop_no_resource": 311800,
|
||||
"no_resource": 5,
|
||||
"pop_no_resource": 307700,
|
||||
"scripture": 42,
|
||||
"film": 39,
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 0.2,
|
||||
"growth": 0.37,
|
||||
"pct_no_resource": 13.7,
|
||||
"pct_no_resource": 9.8,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -1049,14 +1049,14 @@
|
|||
"country": "Papua New Guinea",
|
||||
"region": "Oceania",
|
||||
"groups": 831,
|
||||
"no_resource": 469,
|
||||
"pop_no_resource": 2187150,
|
||||
"no_resource": 468,
|
||||
"pop_no_resource": 2179750,
|
||||
"scripture": 332,
|
||||
"film": 143,
|
||||
"growing_unreached": 1,
|
||||
"deaths_day": 0.9,
|
||||
"growth": 1.78,
|
||||
"pct_no_resource": 56.4,
|
||||
"pct_no_resource": 56.3,
|
||||
"band": "high"
|
||||
},
|
||||
{
|
||||
|
|
@ -1889,15 +1889,15 @@
|
|||
"country": "Syrian Arab Republic",
|
||||
"region": "Asia",
|
||||
"groups": 20,
|
||||
"no_resource": 1,
|
||||
"pop_no_resource": 16000,
|
||||
"no_resource": 0,
|
||||
"pop_no_resource": 0,
|
||||
"scripture": 13,
|
||||
"film": 19,
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 25.7,
|
||||
"growth": 4.47,
|
||||
"pct_no_resource": 5,
|
||||
"band": "partial"
|
||||
"pct_no_resource": 0,
|
||||
"band": "covered"
|
||||
},
|
||||
{
|
||||
"iso3": "JOR",
|
||||
|
|
@ -2264,14 +2264,14 @@
|
|||
"country": "United States of America",
|
||||
"region": "Americas",
|
||||
"groups": 623,
|
||||
"no_resource": 44,
|
||||
"pop_no_resource": 473415,
|
||||
"no_resource": 41,
|
||||
"pop_no_resource": 465640,
|
||||
"scripture": 517,
|
||||
"film": 549,
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 0.1,
|
||||
"growth": 0.96,
|
||||
"pct_no_resource": 7.1,
|
||||
"pct_no_resource": 6.6,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -2384,14 +2384,14 @@
|
|||
"country": "Bolivia",
|
||||
"region": "Americas",
|
||||
"groups": 39,
|
||||
"no_resource": 4,
|
||||
"pop_no_resource": 134875,
|
||||
"no_resource": 2,
|
||||
"pop_no_resource": 120250,
|
||||
"scripture": 34,
|
||||
"film": 28,
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 0,
|
||||
"growth": 1.37,
|
||||
"pct_no_resource": 10.3,
|
||||
"pct_no_resource": 5.1,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -2676,14 +2676,14 @@
|
|||
"country": "Mexico",
|
||||
"region": "Americas",
|
||||
"groups": 205,
|
||||
"no_resource": 5,
|
||||
"pop_no_resource": 27700,
|
||||
"no_resource": 3,
|
||||
"pop_no_resource": 18600,
|
||||
"scripture": 193,
|
||||
"film": 175,
|
||||
"growing_unreached": null,
|
||||
"deaths_day": null,
|
||||
"growth": null,
|
||||
"pct_no_resource": 2.4,
|
||||
"pct_no_resource": 1.5,
|
||||
"band": "partial",
|
||||
"from_pins_only": true
|
||||
},
|
||||
|
|
@ -2868,14 +2868,14 @@
|
|||
"country": "Canada",
|
||||
"region": "Americas",
|
||||
"groups": 304,
|
||||
"no_resource": 20,
|
||||
"pop_no_resource": 187600,
|
||||
"no_resource": 18,
|
||||
"pop_no_resource": 183000,
|
||||
"scripture": 256,
|
||||
"film": 270,
|
||||
"growing_unreached": null,
|
||||
"deaths_day": null,
|
||||
"growth": null,
|
||||
"pct_no_resource": 6.6,
|
||||
"pct_no_resource": 5.9,
|
||||
"band": "partial",
|
||||
"from_pins_only": true
|
||||
},
|
||||
|
|
|
|||
2
public/doxa-maps/assets/tables/gospel-gaps.json
generated
2
public/doxa-maps/assets/tables/gospel-gaps.json
generated
File diff suppressed because one or more lines are too long
4616
public/doxa-maps/assets/tables/gospel-link-verification.json
generated
4616
public/doxa-maps/assets/tables/gospel-link-verification.json
generated
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
7242
public/doxa-maps/assets/tables/scriptureearth-index.json
generated
Normal file
7242
public/doxa-maps/assets/tables/scriptureearth-index.json
generated
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>DX-Maps SPA — Big Picture + every research map (app-shell) · doxa-maps-spa</title>
|
||||
<title>Research Gallery — Big Picture + every research map (app-shell) · doxa-maps-spa</title>
|
||||
<link rel="icon" href="data:,">
|
||||
<!-- NON-MAP leaf (app-shell / composite / grid / card / chart-table): NO map peer.
|
||||
This element draws no map tiles, so it needs no Mapbox/MapLibre engine and MUST NOT
|
||||
|
|
@ -42,7 +42,7 @@
|
|||
(function () {
|
||||
var slot = document.getElementById('slot');
|
||||
var status = document.getElementById('status');
|
||||
var BASE_CONFIG = {"assetsBase":"../../../assets","profile":"doxa-maps-spa","provider":"maplibre","instanceId":"doxa-maps-spa-app","title":"DX-Maps"};
|
||||
var BASE_CONFIG = {"assetsBase":"../../../assets","profile":"doxa-maps-spa","provider":"maplibre","instanceId":"doxa-maps-spa-app","title":"Research Gallery"};
|
||||
// MapLibre map pages AND shell pages (app-shell / nested-mfe-spa) need NO token:
|
||||
// the ladder below is skipped entirely and the element mounts immediately.
|
||||
var TOKEN_FREE = true;
|
||||
|
|
|
|||
|
|
@ -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-m1kSZ1EZu494b6AsdRCkdVNDC225dM1rVrYvmgJ904eZZA3D1QicF0gGU+qYKQ63" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-DLpCR/4TKWn/tY/3M4MYKfBcueIKSL1WhSTGSWs49t6raFYF5vJit++4TpmCdNJ2" 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-m1kSZ1EZu494b6AsdRCkdVNDC225dM1rVrYvmgJ904eZZA3D1QicF0gGU+qYKQ63" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-DLpCR/4TKWn/tY/3M4MYKfBcueIKSL1WhSTGSWs49t6raFYF5vJit++4TpmCdNJ2" 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 <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js" integrity="sha384-m1kSZ1EZu494b6AsdRCkdVNDC225dM1rVrYvmgJ904eZZA3D1QicF0gGU+qYKQ63" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-DLpCR/4TKWn/tY/3M4MYKfBcueIKSL1WhSTGSWs49t6raFYF5vJit++4TpmCdNJ2" 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-m1kSZ1EZu494b6AsdRCkdVNDC225dM1rVrYvmgJ904eZZA3D1QicF0gGU+qYKQ63" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-DLpCR/4TKWn/tY/3M4MYKfBcueIKSL1WhSTGSWs49t6raFYF5vJit++4TpmCdNJ2" 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-m1kSZ1EZu494b6AsdRCkdVNDC225dM1rVrYvmgJ904eZZA3D1QicF0gGU+qYKQ63" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-DLpCR/4TKWn/tY/3M4MYKfBcueIKSL1WhSTGSWs49t6raFYF5vJit++4TpmCdNJ2" 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
24
public/doxa-maps/manifest.json
generated
24
public/doxa-maps/manifest.json
generated
|
|
@ -327,13 +327,13 @@
|
|||
"instances": [
|
||||
{
|
||||
"id": "app",
|
||||
"title": "DX-Maps SPA — Big Picture + every research map (app-shell)",
|
||||
"title": "Research Gallery — Big Picture + every research map (app-shell)",
|
||||
"apiBaseUrl": "",
|
||||
"props": {
|
||||
"profile": "doxa-maps-spa",
|
||||
"provider": "maplibre",
|
||||
"instanceId": "doxa-maps-spa-app",
|
||||
"title": "DX-Maps"
|
||||
"title": "Research Gallery"
|
||||
},
|
||||
"element": "doxa-maps-spa",
|
||||
"iframeUrl": "./doxa-maps-spa/doxa-maps-spa/app/index.html",
|
||||
|
|
@ -591,7 +591,7 @@
|
|||
"bundle": "gospel-resources",
|
||||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"output": "doxa-maps/gospel-resources/gospel-resources.js",
|
||||
"integrity": "sha384-m1kSZ1EZu494b6AsdRCkdVNDC225dM1rVrYvmgJ904eZZA3D1QicF0gGU+qYKQ63",
|
||||
"integrity": "sha384-DLpCR/4TKWn/tY/3M4MYKfBcueIKSL1WhSTGSWs49t6raFYF5vJit++4TpmCdNJ2",
|
||||
"elements": [
|
||||
"gospel-resources-map"
|
||||
],
|
||||
|
|
@ -611,7 +611,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-m1kSZ1EZu494b6AsdRCkdVNDC225dM1rVrYvmgJ904eZZA3D1QicF0gGU+qYKQ63\" 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-DLpCR/4TKWn/tY/3M4MYKfBcueIKSL1WhSTGSWs49t6raFYF5vJit++4TpmCdNJ2\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -625,7 +625,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-m1kSZ1EZu494b6AsdRCkdVNDC225dM1rVrYvmgJ904eZZA3D1QicF0gGU+qYKQ63\" 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-DLpCR/4TKWn/tY/3M4MYKfBcueIKSL1WhSTGSWs49t6raFYF5vJit++4TpmCdNJ2\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -639,7 +639,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/gospel-dashboard/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-m1kSZ1EZu494b6AsdRCkdVNDC225dM1rVrYvmgJ904eZZA3D1QicF0gGU+qYKQ63\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"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-DLpCR/4TKWn/tY/3M4MYKfBcueIKSL1WhSTGSWs49t6raFYF5vJit++4TpmCdNJ2\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -653,7 +653,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-m1kSZ1EZu494b6AsdRCkdVNDC225dM1rVrYvmgJ904eZZA3D1QicF0gGU+qYKQ63\" 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-DLpCR/4TKWn/tY/3M4MYKfBcueIKSL1WhSTGSWs49t6raFYF5vJit++4TpmCdNJ2\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -667,7 +667,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-m1kSZ1EZu494b6AsdRCkdVNDC225dM1rVrYvmgJ904eZZA3D1QicF0gGU+qYKQ63\" 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-DLpCR/4TKWn/tY/3M4MYKfBcueIKSL1WhSTGSWs49t6raFYF5vJit++4TpmCdNJ2\" 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>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -676,7 +676,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-KF3XG9q4VdSvuLQEeK0P1gsKg1cpNOvkLYK5MAIMCUwSsO07z5dI4ffGuc4U6Y+p",
|
||||
"integrity": "sha384-xb5q69l8SauILfDQxPhCJeIaJ0JZVCOV5KhsOmbOrPbyAjr9y5Cjw+WmDUjN5IjB",
|
||||
"elements": [
|
||||
"my-upg-100-list-map"
|
||||
],
|
||||
|
|
@ -696,7 +696,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-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>"
|
||||
"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-xb5q69l8SauILfDQxPhCJeIaJ0JZVCOV5KhsOmbOrPbyAjr9y5Cjw+WmDUjN5IjB\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -710,7 +710,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-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>"
|
||||
"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-xb5q69l8SauILfDQxPhCJeIaJ0JZVCOV5KhsOmbOrPbyAjr9y5Cjw+WmDUjN5IjB\" 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>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -724,7 +724,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-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>"
|
||||
"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-xb5q69l8SauILfDQxPhCJeIaJ0JZVCOV5KhsOmbOrPbyAjr9y5Cjw+WmDUjN5IjB\" 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>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
|||
136
public/doxa-maps/my-upg-100-list/my-upg-100-list.js
generated
136
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-KF3XG9q4VdSvuLQEeK0P1gsKg1cpNOvkLYK5MAIMCUwSsO07z5dI4ffGuc4U6Y+p" crossorigin="anonymous"></script>
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-xb5q69l8SauILfDQxPhCJeIaJ0JZVCOV5KhsOmbOrPbyAjr9y5Cjw+WmDUjN5IjB" 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-KF3XG9q4VdSvuLQEeK0P1gsKg1cpNOvkLYK5MAIMCUwSsO07z5dI4ffGuc4U6Y+p" crossorigin="anonymous"></script>
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-xb5q69l8SauILfDQxPhCJeIaJ0JZVCOV5KhsOmbOrPbyAjr9y5Cjw+WmDUjN5IjB" 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-KF3XG9q4VdSvuLQEeK0P1gsKg1cpNOvkLYK5MAIMCUwSsO07z5dI4ffGuc4U6Y+p" crossorigin="anonymous"></script>
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-xb5q69l8SauILfDQxPhCJeIaJ0JZVCOV5KhsOmbOrPbyAjr9y5Cjw+WmDUjN5IjB" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
Loading…
Reference in a new issue