diff --git a/library/i18n/locales/ar/gospelInternet.json b/library/i18n/locales/ar/gospelInternet.json index 938de9ef6..4b35d3024 100644 --- a/library/i18n/locales/ar/gospelInternet.json +++ b/library/i18n/locales/ar/gospelInternet.json @@ -17,7 +17,8 @@ "failed": "تعذّر تحميل جدول الجيران، لذلك لم يُرسم هذا المخطط.", "reached": "موصول إليها بالفعل، لذلك في المركز:", "unmatched": "غير موجودة في جدول الجيران أصلاً، لذلك لم تُرسم:", - "unplaced": "لم تُوجد أي صلة، لذلك لم تُوضع:" + "unplaced": "لم تُوجد أي صلة، لذلك لم تُوضع:", + "shown": "المجموعات البشرية على الحلقات:" }, "centre": { "aria": "عرض", diff --git a/library/i18n/locales/de/gospelInternet.json b/library/i18n/locales/de/gospelInternet.json index dcfbeb7bf..1a5ea84d5 100644 --- a/library/i18n/locales/de/gospelInternet.json +++ b/library/i18n/locales/de/gospelInternet.json @@ -17,7 +17,8 @@ "failed": "Die Nachbartabelle konnte nicht geladen werden, daher wird dieses Diagramm nicht gezeichnet.", "reached": "Bereits erreicht, daher in der Mitte:", "unmatched": "Gar nicht in der Nachbartabelle, daher nicht gezeichnet:", - "unplaced": "Keine Beziehung gefunden, daher nicht eingeordnet:" + "unplaced": "Keine Beziehung gefunden, daher nicht eingeordnet:", + "shown": "Volksgruppen auf den Ringen:" }, "centre": { "aria": "Anzeigen", diff --git a/library/i18n/locales/en/gospelInternet.json b/library/i18n/locales/en/gospelInternet.json index 902b26685..f82524bb7 100644 --- a/library/i18n/locales/en/gospelInternet.json +++ b/library/i18n/locales/en/gospelInternet.json @@ -17,7 +17,8 @@ "failed": "The neighbour table could not be loaded, so this chart is not drawn.", "reached": "Already reached, so at the centre:", "unmatched": "Not in the neighbour table at all, so not drawn:", - "unplaced": "No relation found, so not placed:" + "unplaced": "No relation found, so not placed:", + "shown": "People groups on the rings:" }, "centre": { "aria": "Show", diff --git a/library/i18n/locales/es/gospelInternet.json b/library/i18n/locales/es/gospelInternet.json index 82c711bcc..98ff0d354 100644 --- a/library/i18n/locales/es/gospelInternet.json +++ b/library/i18n/locales/es/gospelInternet.json @@ -17,7 +17,8 @@ "failed": "No se pudo cargar la tabla de vecinos, así que este gráfico no se dibuja.", "reached": "Ya alcanzados, por eso en el centro:", "unmatched": "No están en la tabla de vecinos, así que no se dibujan:", - "unplaced": "No se encontró relación, así que no se sitúan:" + "unplaced": "No se encontró relación, así que no se sitúan:", + "shown": "Pueblos en los anillos:" }, "centre": { "aria": "Mostrar", diff --git a/library/i18n/locales/fr/gospelInternet.json b/library/i18n/locales/fr/gospelInternet.json index 21465cdb4..cd62b57da 100644 --- a/library/i18n/locales/fr/gospelInternet.json +++ b/library/i18n/locales/fr/gospelInternet.json @@ -17,7 +17,8 @@ "failed": "La table des voisins n’a pas pu être chargée, ce graphique n’est donc pas tracé.", "reached": "Déjà atteints, donc au centre :", "unmatched": "Absents de la table des voisins, donc non tracés :", - "unplaced": "Aucune relation trouvée, donc non placés :" + "unplaced": "Aucune relation trouvée, donc non placés :", + "shown": "Peuples sur les anneaux :" }, "centre": { "aria": "Afficher", diff --git a/library/i18n/locales/hi/gospelInternet.json b/library/i18n/locales/hi/gospelInternet.json index 0e1c88e42..abaace730 100644 --- a/library/i18n/locales/hi/gospelInternet.json +++ b/library/i18n/locales/hi/gospelInternet.json @@ -17,7 +17,8 @@ "failed": "पड़ोसी तालिका लोड नहीं हो सकी, इसलिए यह चित्र नहीं बनाया गया।", "reached": "पहले से पहुँचे हुए, इसलिए केंद्र में:", "unmatched": "पड़ोसी तालिका में हैं ही नहीं, इसलिए नहीं दिखाए गए:", - "unplaced": "कोई संबंध नहीं मिला, इसलिए स्थान नहीं दिया गया:" + "unplaced": "कोई संबंध नहीं मिला, इसलिए स्थान नहीं दिया गया:", + "shown": "वलयों पर जनसमूह:" }, "centre": { "aria": "दिखाएँ", diff --git a/library/i18n/locales/it/gospelInternet.json b/library/i18n/locales/it/gospelInternet.json index 2c38bfd2f..969049dfc 100644 --- a/library/i18n/locales/it/gospelInternet.json +++ b/library/i18n/locales/it/gospelInternet.json @@ -17,7 +17,8 @@ "failed": "Non è stato possibile caricare la tabella dei vicini, quindi questo grafico non viene disegnato.", "reached": "Già raggiunti, quindi al centro:", "unmatched": "Non presenti nella tabella dei vicini, quindi non disegnati:", - "unplaced": "Nessuna relazione trovata, quindi non collocati:" + "unplaced": "Nessuna relazione trovata, quindi non collocati:", + "shown": "Popoli sugli anelli:" }, "centre": { "aria": "Mostra", diff --git a/library/i18n/locales/pt/gospelInternet.json b/library/i18n/locales/pt/gospelInternet.json index f859bf389..94bff76c5 100644 --- a/library/i18n/locales/pt/gospelInternet.json +++ b/library/i18n/locales/pt/gospelInternet.json @@ -17,7 +17,8 @@ "failed": "Não foi possível carregar a tabela de vizinhos, por isso este gráfico não é desenhado.", "reached": "Já alcançados, por isso no centro:", "unmatched": "Não constam da tabela de vizinhos, por isso não são desenhados:", - "unplaced": "Nenhuma relação encontrada, por isso não posicionados:" + "unplaced": "Nenhuma relação encontrada, por isso não posicionados:", + "shown": "Povos nos anéis:" }, "centre": { "aria": "Mostrar", diff --git a/library/i18n/locales/ro/gospelInternet.json b/library/i18n/locales/ro/gospelInternet.json index e2a419cab..5a826f42e 100644 --- a/library/i18n/locales/ro/gospelInternet.json +++ b/library/i18n/locales/ro/gospelInternet.json @@ -17,7 +17,8 @@ "failed": "Tabelul vecinilor nu a putut fi încărcat, așa că acest grafic nu este desenat.", "reached": "Deja atinse, așadar în centru:", "unmatched": "Nu se află deloc în tabelul vecinilor, așadar nu sunt desenate:", - "unplaced": "Nicio relație găsită, așadar neașezate:" + "unplaced": "Nicio relație găsită, așadar neașezate:", + "shown": "Grupuri etnice pe inele:" }, "centre": { "aria": "Afișează", diff --git a/library/i18n/locales/ru/gospelInternet.json b/library/i18n/locales/ru/gospelInternet.json index cf8e32eff..ea467c69a 100644 --- a/library/i18n/locales/ru/gospelInternet.json +++ b/library/i18n/locales/ru/gospelInternet.json @@ -17,7 +17,8 @@ "failed": "Не удалось загрузить таблицу соседей, поэтому эта диаграмма не построена.", "reached": "Уже достигнуты, поэтому в центре:", "unmatched": "Вовсе отсутствуют в таблице соседей, поэтому не показаны:", - "unplaced": "Связь не найдена, поэтому не размещены:" + "unplaced": "Связь не найдена, поэтому не размещены:", + "shown": "Народы на кольцах:" }, "centre": { "aria": "Показать", diff --git a/library/i18n/locales/zh/gospelInternet.json b/library/i18n/locales/zh/gospelInternet.json index b35970437..eb6046d62 100644 --- a/library/i18n/locales/zh/gospelInternet.json +++ b/library/i18n/locales/zh/gospelInternet.json @@ -17,7 +17,8 @@ "failed": "无法载入邻族数据表,因此本图未绘制。", "reached": "已经得着,因此位于中心:", "unmatched": "根本不在邻族数据表中,因此未绘制:", - "unplaced": "未找到关联,因此未予定位:" + "unplaced": "未找到关联,因此未予定位:", + "shown": "环上的族群:" }, "centre": { "aria": "显示", diff --git a/plugin-designs/gospel-internet/src/components/GiCenteredSet.vue b/plugin-designs/gospel-internet/src/components/GiCenteredSet.vue index 270544426..5fc60cb65 100644 --- a/plugin-designs/gospel-internet/src/components/GiCenteredSet.vue +++ b/plugin-designs/gospel-internet/src/components/GiCenteredSet.vue @@ -92,6 +92,11 @@ const prepared = computed(() => { const layout = computed(() => layoutCenteredSet(prepared.value.groups, { innerR: 30, ringGap: 22 })) const tally = computed(() => ringTally(layout.value)) +// ★ COUNTED FROM THE LAYOUT, NOT FROM WHAT IS DRAWN. layout.placed is every group that HAS a ring, +// which is a fact about the data; the number of pins actually rendered depends on the fill mode and, +// in the dense mode, reads differently at different zooms. Captioning the drawn count would give a +// total that changes as the reader zooms — true at every instant and misleading overall. +const placedTotal = computed(() => layout.value.placed.length) const radii = computed(() => ringRadii({ innerR: 30, ringGap: 22 })) // The arrow carries its group's ring so the dimming can tell them apart. inwardArrow returns // geometry and the neighbour it names, not the ring — reading a.ring off it would have been @@ -201,7 +206,14 @@ useShadowStyles( :active-ring="activeRing" :panel="panelEl" @select="activeRing = $event" /> -
+ +
+ {{ T('gospelInternet.centered.shown', 'People groups on the rings:') }} {{ fmt(placedTotal) }}. {{ T('gospelInternet.centered.reached', 'Already reached, so at the centre:') }} {{ fmt(tally.centre) }}. {{ T('gospelInternet.centered.unplaced', 'No relation found, so not placed:') }} {{ fmt(tally.unplaced) }}. {{ T('gospelInternet.centered.unmatched', 'Not in the neighbour table at all, so not drawn:') }} {{ fmt(prepared.unmatched) }}. diff --git a/plugin-designs/gospel-internet/src/components/GiCenteredSetMap.vue b/plugin-designs/gospel-internet/src/components/GiCenteredSetMap.vue index 417aff354..8fb638528 100644 --- a/plugin-designs/gospel-internet/src/components/GiCenteredSetMap.vue +++ b/plugin-designs/gospel-internet/src/components/GiCenteredSetMap.vue @@ -78,11 +78,24 @@ const layout = computed(() => layoutCenteredSet(props.groups, { innerR: INNER_R, // evenly by angle and deterministically by id, never inside a label's keep-out arc. Over-full rings // shrink their pins to a floor before anything is reported unplaced — a visible pin beats a missing // one — and whatever still cannot fit is reported rather than silently overlapped or dropped. +// ★ THE ONE LINE DRIVER ROW 130 DECIDES. 'fit' (today) keeps every pin separable at the chart's own +// scale and reports what will not fit; on the real default view that is 931 of 2,074 drawn and 1,143 +// reported. 'fill-all' draws all 2,074 and lets zoom do the separating — measured: 0 unplaced, every +// pin inside its band, none under a label, ring 2 using 18 rows for its 658 groups. +// +// 'fit' is NOT a placeholder and must stay the default here until the ruling: it is the honest mode +// for a page that cannot zoom, which is why the POSTER should keep it whatever the screen chooses. +// The binding constraint is band DEPTH, not separation — sep can never fall below 2x the pin floor +// (5.2), and an 18.5-unit band therefore holds at most 3 rows, so no minSep reaches ring 2's 658. +// That is why this is a mode and not a tuned number. +const SET_FILL_MODE = 'fit' // ← row 130: change to 'fill-all' for the screen charts + const banded = computed(() => bandFill(layout.value.placed, radii.value, { ringGap: RING_GAP, labels: ringLabels.value, // The chart's own units, not screen pixels: this module cannot know the zoom. minSep: 7, + mode: SET_FILL_MODE, })) const features = computed(() => centeredSetFeatures(