From 58e113549c638016c3d6f8249ac2ee41ab0a5447 Mon Sep 17 00:00:00 2001 From: Doxa Maps Date: Tue, 29 Sep 2026 04:07:21 +0000 Subject: [PATCH] The %-evangelical page says how many people one box stands for MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Brief A1.4 asks the page to state how many people each cell represents; it printed the share and the population but never the unit a reader needs to read the grid ("each box ≈ 40,208 people" for the whole DOXA list). Computed with the screen chart's own peoplePerCell so paper and screen divide the same way, in all eleven languages, and omitted when the list has no published data. --- library/packet/packet-render.js | 7 +++++ library/scripts/posters/packet-strings.json | 33 ++++++++++++++------- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/library/packet/packet-render.js b/library/packet/packet-render.js index 48105ec81..c99eb1c47 100644 --- a/library/packet/packet-render.js +++ b/library/packet/packet-render.js @@ -51,6 +51,7 @@ const SCRIPT_FONT = { import { layoutBoundedSet, boundedSetTally } from '../components/charts/boundedSet.js' import { layoutCenteredSet, ringTally, ringRadii, RING_MAX } from '../components/charts/centeredSet.js' import { bandFill } from '../components/charts/ringBands.js' +import { peoplePerCell } from '../components/charts/packetCharts.js' // `describe` is INJECTED at the same seam as `strings`, and deliberately not imported. This module // has (almost) no imports on purpose: the SAME file runs under Node for the offline generator and @@ -202,6 +203,7 @@ export function createPacketRenderer({ strings, lang = 'en', fontData = null, de .lc-reached{background:#2f6d4f;border-color:#2f6d4f} .lc-legend{display:flex;justify-content:center;gap:34px;margin:16px 0 0;font:400 17px Georgia,serif;color:#413d35} .lc-legend i{display:inline-block;vertical-align:-1px;margin-inline-end:8px} + .lc-per{margin:8px 0 0;text-align:center;font:600 16px Georgia,serif;color:#413d35} .lc-foot{margin:12px auto 0;max-width:1180px;text-align:center;font:400 14px Georgia,serif;color:#6f6a5c} .sheet-map-poster{background:#fff} /* ⚠ THE FLOW PAGES HAD NO PADDING. .sheet is a bare box, and the pages laid out in flow (the life @@ -945,6 +947,10 @@ export function createPacketRenderer({ strings, lang = 'en', fontData = null, de ? ` · ${esc(fill(t('christian_coverage'), { matched: num(matched), total: num(inList) }))}` : ''; const people = known && Number(christian.population) > 0 ? ` · ${num(christian.population)} ${esc(t('christian_people'))}` : ''; + // Brief A1.4: the page states how many people ONE box stands for (the screen chart's own + // peoplePerCell, so paper and screen divide the same way). Only when the population is known. + const perBox = known && Number(christian.population) > 0 + ? `

${esc(fill(t('christian_per_cell'), { n: num(Math.round(peoplePerCell(christian.population, g.YEARS, g.WEEKS))) }))}

` : ''; return sheet(`
${esc(t('christian_kicker'))}

${esc(t('christian_title'))}

@@ -954,6 +960,7 @@ export function createPacketRenderer({ strings, lang = 'en', fontData = null, de ${esc(t('christian_reached'))} — ${reached} ${esc(t('christian_lost'))} — ${lost} + ${perBox}

${esc(t('christian_foot'))}${people}${coverage}

`, 'sheet-christian sheet-flow'); } diff --git a/library/scripts/posters/packet-strings.json b/library/scripts/posters/packet-strings.json index 77f24dcd3..8cc42294d 100644 --- a/library/scripts/posters/packet-strings.json +++ b/library/scripts/posters/packet-strings.json @@ -252,7 +252,8 @@ "Colossians": "Colossians", "1 Corinthians": "1 Corinthians", "1 Peter": "1 Peter" - } + }, + "christian_per_cell": "Each box ≈ {n} people" }, "es": { "map_page_kicker": "GRUPOS ÉTNICOS NO EVANGELIZADOS", @@ -499,7 +500,8 @@ "Colossians": "Colosenses", "1 Corinthians": "1 Corintios", "1 Peter": "1 Pedro" - } + }, + "christian_per_cell": "Cada casilla ≈ {n} personas" }, "fr": { "map_page_kicker": "GROUPES ETHNIQUES NON ATTEINTS", @@ -746,7 +748,8 @@ "Colossians": "Colossiens", "1 Corinthians": "1 Corinthiens", "1 Peter": "1 Pierre" - } + }, + "christian_per_cell": "Chaque case ≈ {n} personnes" }, "pt": { "map_page_kicker": "GRUPOS ÉTNICOS NÃO ALCANÇADOS", @@ -991,7 +994,8 @@ "Colossians": "Colossenses", "1 Corinthians": "1 Coríntios", "1 Peter": "1 Pedro" - } + }, + "christian_per_cell": "Cada caixa ≈ {n} pessoas" }, "de": { "map_page_kicker": "UNERREICHTE VOLKSGRUPPEN", @@ -1238,7 +1242,8 @@ "Colossians": "Kolosser", "1 Corinthians": "1. Korinther", "1 Peter": "1. Petrus" - } + }, + "christian_per_cell": "Jedes Kästchen ≈ {n} Menschen" }, "it": { "map_page_kicker": "GRUPPI ETNICI NON RAGGIUNTI", @@ -1483,7 +1488,8 @@ "Colossians": "Colossesi", "1 Corinthians": "1 Corinzi", "1 Peter": "1 Pietro" - } + }, + "christian_per_cell": "Ogni casella ≈ {n} persone" }, "ro": { "map_page_kicker": "GRUPURI ETNICE NEATINSE", @@ -1728,7 +1734,8 @@ "Colossians": "Coloseni", "1 Corinthians": "1 Corinteni", "1 Peter": "1 Petru" - } + }, + "christian_per_cell": "Fiecare căsuță ≈ {n} de oameni" }, "ru": { "map_page_kicker": "НЕОХВАЧЕННЫЕ НАРОДЫ", @@ -1975,7 +1982,8 @@ "Colossians": "Кол.", "1 Corinthians": "1 Кор.", "1 Peter": "1 Пет." - } + }, + "christian_per_cell": "Каждая клетка ≈ {n} чел." }, "ar": { "map_page_kicker": "شعوب غير مبلَّغة", @@ -2222,7 +2230,8 @@ "Colossians": "كولوسي", "1 Corinthians": "كورنثوس الأولى", "1 Peter": "بطرس الأولى" - } + }, + "christian_per_cell": "كل مربّع ≈ {n} شخص" }, "hi": { "map_page_kicker": "अनछुए जनसमूह", @@ -2467,7 +2476,8 @@ "Colossians": "कुलुस्सियों", "1 Corinthians": "1 कुरिन्थियों", "1 Peter": "1 पतरस" - } + }, + "christian_per_cell": "हर खाना ≈ {n} लोग" }, "zh": { "map_page_kicker": "未得之民", @@ -2712,6 +2722,7 @@ "Colossians": "歌罗西书", "1 Corinthians": "哥林多前书", "1 Peter": "彼得前书" - } + }, + "christian_per_cell": "每格约 {n} 人" } }