Add Scripture Earth, and lift 28 groups off "nothing found"
SIL and its translation partners publish Scripture for small languages the big catalogues skip, which is exactly the population left in the gap: 2,901 groups had nothing in eBible, Arclight, Door43 or FCBH. 921 codes now carry a Scripture Earth link and 28 groups that had nothing at all — 339,550 people — have Scripture in their own language for the first time on this map. Tier 0 falls 2,901 to 2,873. Most of this source is not what it appears to be, and the fetcher throws away both false positives rather than shipping them. Their open index lists 3,477 language directories, but 764 of the ones we can join are empty stubs: trusting the listing alone would have handed 716 people groups a link to an empty folder. And a "video" directory holds JESUSFilm-<iso>.txt metadata, not playable film — 1,588 codes have nothing else, so video alone never qualifies a code. Only PDF, audio, Scripture App Builder, study notes and SFM text count. All 921 URLs verified HTTP 200 before shipping, and the artefacts were opened by hand first: Baka's is 14.4 MB of application/pdf, Foodo's 40.7 MB, and a nonexistent sibling 404s, so a 200 here means a file. The coverage gate, the verifier and the links table each had to be taught the new field. Leaving any one of them ignorant would have been worse than not adding the source: the gate caught all 28 tier changes as inconsistent, and the links table filed 921 rows under the "other" publisher — the fallback that exists to make an unscreened domain impossible to hide. The sheet's "checked" line now names the pool too, since it is searched.
This commit is contained in:
parent
1cfb0578d9
commit
e1df0d5a7c
29 changed files with 24404 additions and 489 deletions
|
|
@ -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
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
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
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Reference in a new issue