diff --git a/plugin-designs/gospel-resources/resources-map.vue b/plugin-designs/gospel-resources/resources-map.vue index eee1f67e7..cc1dc8579 100644 --- a/plugin-designs/gospel-resources/resources-map.vue +++ b/plugin-designs/gospel-resources/resources-map.vue @@ -920,6 +920,45 @@ const countryStats = computed(() => { } }) +/** + * ═══ PRAYER IS A MOVE, NOT A STATISTIC ════════════════════════════════════════════════════ + * + * A country click ended in numbers. Every one of them describes work somebody else has to fund, + * staff or translate — and the one thing the reader of a country can do THIS MINUTE was reachable + * only by guessing which pin to tap. So the country sheet now ends in a move: the largest group + * here that has nothing AND nobody praying, with its prayer page one tap away. + * + * ⚠ THE DENOMINATOR IS STATED BECAUSE IT IS NOT THE COUNTRY. doxa.life publishes a page for + * 1,723 of the 12,379 groups on this map, so "nobody praying" can only ever be said of the + * groups that HAVE a page — never of the country. Rendering a bare count would read as "14 groups + * in this country have nobody praying", which this data cannot support. It is shown as N of M. + * + * ⚠ ZERO IS ZERO ON doxa.life's COUNTER, which is what the gap tab already says in full. It is + * not a claim that nobody in the world prays for these people — an unknowable thing. + */ +const countryPrayer = computed(() => { + const g = groupsForCountry.value + let pages = 0, noPray = 0, noPrayPeople = 0 + let firstMove = null, firstMovePop = -1 + for (const r of g) { + const e = prayIndex.value[prayKey(r.people_group, r._iso3 || selected.value?.iso3 || '')] + if (!e) continue + pages++ + if (e.praying > 0) continue + noPray++ + noPrayPeople += r.population || 0 + /* NEED FIRST, THEN SIZE, and India shows what that costs: of its 601 groups with nobody + praying only FIVE have nothing at all, so this offers Malai Pandaram at 8,700 people ahead + of Badhai at 851,000 — who already have Scripture and film. That is the map's own ladder + applied to prayer rather than a second, quieter ranking, and the sub-label says "nothing + found" so the reader can see which rung they were handed. Where every unprayed-for group + here has something, the largest of those is offered instead. */ + const rank = (hasAny(r) ? 0 : 1e12) + (r.population || 0) + if (rank > firstMovePop) { firstMovePop = rank; firstMove = { ...e, group: r } } + } + return { pages, noPray, noPrayPeople, firstMove } +}) + /* ITEM 2 — resources in a group's OWN language, joined on the EXACT ISO 639-3 code. * Never a name match: language names collide and drift ("Arabic" is dozens of * distinct codes), and a fuzzy hit here would put the wrong scripture in someone's @@ -2630,6 +2669,12 @@ useShadowStyles( rows underneath already showed the third. -->