From 7b1e64eaba4a7af7777afab04b9b91ceeef4cb3a Mon Sep 17 00:00:00 2001 From: Doxa Maps Date: Sat, 26 Sep 2026 01:19:24 +0000 Subject: [PATCH] Wall of People Groups: level of detail like a map, and an HD poster print path The wall gave all ~2,100 card photos their full href at once, so every photo was fetched and decoded even with the whole 4000x3000 wall on screen and each photo a few pixels wide. Now: - photo URLs are parked in data-hd; zoomed out (a card under 48 px on screen) the wall shows only the light image slots, with no photos loaded; - zoomed in, updateLod() (rAF-throttled on every zoom/pan) gives HD photos only to the cards in view plus one card of margin, and REMOVES them from cards that leave the view; a 300-image cap keeps any view light; - "Print HD poster" loads every photo, waits for them, prints, then returns to level of detail; it replaces the old "coming later" alert (new key wall.printPoster, all 11 locales). The geometry is a pure module (src/wallLod.js), so it is tested without a browser. MEASURED, headless: the real 2,107-card layout at 1280x800. Sampled photos are ~200x250 (23 real image URLs from the live API): ~0.22 MB each decoded, ~45 KB compressed. Loading all of them, as before, is ~466 MB decoded + ~94 MB downloaded. With LOD: zoom 1-4x = 0 photos; 6x = 150 (~33 MB); 8x = 80 (~18 MB); 12x = 63 (~14 MB). lodPlan matches a brute-force visibility oracle at every zoom. Photos are the part of the 1.4 GB that can be measured without a browser; the rest (DOM, rasterisation) needs a browser heap snapshot: needs eyes. needs eyes: Wall of People Groups: DevTools memory before/after; zoomed out = no photos, zoom in = photos appear only where you look; "Print HD poster" prints every photo. (cherry picked from commit ef9646f8f52cec562000d4671ab5d681038edcb6) --- library/i18n/locales/ar/wall.json | 3 +- library/i18n/locales/de/wall.json | 3 +- library/i18n/locales/en/wall.json | 3 +- library/i18n/locales/es/wall.json | 3 +- library/i18n/locales/fr/wall.json | 3 +- library/i18n/locales/hi/wall.json | 3 +- library/i18n/locales/it/wall.json | 3 +- library/i18n/locales/pt/wall.json | 3 +- library/i18n/locales/ro/wall.json | 3 +- library/i18n/locales/ru/wall.json | 3 +- library/i18n/locales/zh/wall.json | 3 +- .../src/components/PeopleGroupsWall.vue | 70 +++++++++++++++++-- .../wall-of-people-groups/src/wallLod.js | 57 +++++++++++++++ 13 files changed, 143 insertions(+), 17 deletions(-) create mode 100644 plugin-designs/wall-of-people-groups/src/wallLod.js diff --git a/library/i18n/locales/ar/wall.json b/library/i18n/locales/ar/wall.json index e00acbe03..b7a6604d9 100644 --- a/library/i18n/locales/ar/wall.json +++ b/library/i18n/locales/ar/wall.json @@ -37,5 +37,6 @@ "commentPlaceholder": "شارك صلاتك أو أفكارك…", "postComment": "نشر التعليق", "noPeopleId": "ليس لهذا الشعب معرّف PeopleID3", - "statusUnknown": "الحالة غير معروفة" + "statusUnknown": "الحالة غير معروفة", + "printPoster": "🖨️ طباعة ملصق عالي الدقة" } diff --git a/library/i18n/locales/de/wall.json b/library/i18n/locales/de/wall.json index 8c3f4b905..63de13891 100644 --- a/library/i18n/locales/de/wall.json +++ b/library/i18n/locales/de/wall.json @@ -37,5 +37,6 @@ "commentPlaceholder": "Teilen Sie Ihr Gebet oder Ihre Gedanken…", "postComment": "Kommentar posten", "noPeopleId": "Diese Volksgruppe hat keine PeopleID3", - "statusUnknown": "Status unbekannt" + "statusUnknown": "Status unbekannt", + "printPoster": "🖨️ HD-Poster drucken" } diff --git a/library/i18n/locales/en/wall.json b/library/i18n/locales/en/wall.json index 24fe579b4..b8a3b4db3 100644 --- a/library/i18n/locales/en/wall.json +++ b/library/i18n/locales/en/wall.json @@ -37,5 +37,6 @@ "commentPlaceholder": "Share your prayer or thoughts…", "postComment": "Post Comment", "noPeopleId": "This people group doesn't have a PeopleID3", - "statusUnknown": "Status Unknown" + "statusUnknown": "Status Unknown", + "printPoster": "🖨️ Print HD poster" } diff --git a/library/i18n/locales/es/wall.json b/library/i18n/locales/es/wall.json index d88c9ae82..029d5b1af 100644 --- a/library/i18n/locales/es/wall.json +++ b/library/i18n/locales/es/wall.json @@ -37,5 +37,6 @@ "commentPlaceholder": "Comparte tu oración o tus pensamientos…", "postComment": "Publicar comentario", "noPeopleId": "Este pueblo no tiene PeopleID3", - "statusUnknown": "Estado desconocido" + "statusUnknown": "Estado desconocido", + "printPoster": "🖨️ Imprimir póster HD" } diff --git a/library/i18n/locales/fr/wall.json b/library/i18n/locales/fr/wall.json index 2d68c329d..c055feed8 100644 --- a/library/i18n/locales/fr/wall.json +++ b/library/i18n/locales/fr/wall.json @@ -37,5 +37,6 @@ "commentPlaceholder": "Partagez votre prière ou vos pensées…", "postComment": "Publier le commentaire", "noPeopleId": "Ce peuple n’a pas de PeopleID3", - "statusUnknown": "Statut inconnu" + "statusUnknown": "Statut inconnu", + "printPoster": "🖨️ Imprimer l’affiche HD" } diff --git a/library/i18n/locales/hi/wall.json b/library/i18n/locales/hi/wall.json index 22efdb72c..667f9e4f5 100644 --- a/library/i18n/locales/hi/wall.json +++ b/library/i18n/locales/hi/wall.json @@ -37,5 +37,6 @@ "commentPlaceholder": "अपनी प्रार्थना या विचार साझा करें…", "postComment": "टिप्पणी पोस्ट करें", "noPeopleId": "इस जनसमूह के पास PeopleID3 नहीं है", - "statusUnknown": "स्थिति अज्ञात" + "statusUnknown": "स्थिति अज्ञात", + "printPoster": "🖨️ HD पोस्टर छापें" } diff --git a/library/i18n/locales/it/wall.json b/library/i18n/locales/it/wall.json index 2b49cbe59..5aed52e34 100644 --- a/library/i18n/locales/it/wall.json +++ b/library/i18n/locales/it/wall.json @@ -37,5 +37,6 @@ "commentPlaceholder": "Condividi la tua preghiera o i tuoi pensieri…", "postComment": "Pubblica commento", "noPeopleId": "Questo popolo non ha un PeopleID3", - "statusUnknown": "Stato sconosciuto" + "statusUnknown": "Stato sconosciuto", + "printPoster": "🖨️ Stampa poster HD" } diff --git a/library/i18n/locales/pt/wall.json b/library/i18n/locales/pt/wall.json index ce366431e..53c39afb1 100644 --- a/library/i18n/locales/pt/wall.json +++ b/library/i18n/locales/pt/wall.json @@ -37,5 +37,6 @@ "commentPlaceholder": "Partilhe a sua oração ou pensamentos…", "postComment": "Publicar comentário", "noPeopleId": "Este povo não tem PeopleID3", - "statusUnknown": "Estado desconhecido" + "statusUnknown": "Estado desconhecido", + "printPoster": "🖨️ Imprimir cartaz HD" } diff --git a/library/i18n/locales/ro/wall.json b/library/i18n/locales/ro/wall.json index cf78484bf..d1912a05a 100644 --- a/library/i18n/locales/ro/wall.json +++ b/library/i18n/locales/ro/wall.json @@ -37,5 +37,6 @@ "commentPlaceholder": "Împărtășiți rugăciunea sau gândurile…", "postComment": "Publică comentariul", "noPeopleId": "Acest popor nu are PeopleID3", - "statusUnknown": "Stare necunoscută" + "statusUnknown": "Stare necunoscută", + "printPoster": "🖨️ Tipărește afișul HD" } diff --git a/library/i18n/locales/ru/wall.json b/library/i18n/locales/ru/wall.json index fe739b556..5d1899ab0 100644 --- a/library/i18n/locales/ru/wall.json +++ b/library/i18n/locales/ru/wall.json @@ -37,5 +37,6 @@ "commentPlaceholder": "Поделитесь молитвой или мыслями…", "postComment": "Опубликовать", "noPeopleId": "У этого народа нет PeopleID3", - "statusUnknown": "Статус неизвестен" + "statusUnknown": "Статус неизвестен", + "printPoster": "🖨️ Печать плаката HD" } diff --git a/library/i18n/locales/zh/wall.json b/library/i18n/locales/zh/wall.json index 2dd14536e..472dc2efd 100644 --- a/library/i18n/locales/zh/wall.json +++ b/library/i18n/locales/zh/wall.json @@ -37,5 +37,6 @@ "commentPlaceholder": "分享你的祷告或想法…", "postComment": "发表评论", "noPeopleId": "该族群没有 PeopleID3", - "statusUnknown": "状态未知" + "statusUnknown": "状态未知", + "printPoster": "🖨️ 打印高清海报" } diff --git a/plugin-designs/wall-of-people-groups/src/components/PeopleGroupsWall.vue b/plugin-designs/wall-of-people-groups/src/components/PeopleGroupsWall.vue index 21a79bdaa..2a4b39cce 100644 --- a/plugin-designs/wall-of-people-groups/src/components/PeopleGroupsWall.vue +++ b/plugin-designs/wall-of-people-groups/src/components/PeopleGroupsWall.vue @@ -7,6 +7,7 @@ {{ isLandscape ? $t('wall.toPortrait') : $t('wall.toLandscape') }} {{ isLandscape ? $t('wall.currentLandscape') : $t('wall.currentPortrait') }} + {{ $t('wall.groupsLoaded', { n: totalGroups }) }} @@ -32,6 +33,7 @@