From a31c3b44d3c17c778d6b01addc67e392b7d74a18 Mon Sep 17 00:00:00 2001 From: Tommaso Casaburi Date: Thu, 21 May 2026 17:33:14 +0700 Subject: [PATCH] fix(board): warn on unverified addresses --- public/translations/ar/default.json | 3 +- public/translations/bn/default.json | 3 +- public/translations/cs/default.json | 3 +- public/translations/da/default.json | 3 +- public/translations/de/default.json | 3 +- public/translations/el/default.json | 3 +- public/translations/en/default.json | 3 +- public/translations/es/default.json | 3 +- public/translations/fa/default.json | 3 +- public/translations/fi/default.json | 3 +- public/translations/fil/default.json | 3 +- public/translations/fr/default.json | 3 +- public/translations/he/default.json | 3 +- public/translations/hi/default.json | 3 +- public/translations/hu/default.json | 3 +- public/translations/id/default.json | 3 +- public/translations/it/default.json | 3 +- public/translations/ja/default.json | 3 +- public/translations/ko/default.json | 3 +- public/translations/mr/default.json | 3 +- public/translations/nl/default.json | 3 +- public/translations/no/default.json | 3 +- public/translations/pl/default.json | 3 +- public/translations/pt/default.json | 3 +- public/translations/ro/default.json | 3 +- public/translations/ru/default.json | 3 +- public/translations/sq/default.json | 3 +- public/translations/sv/default.json | 3 +- public/translations/te/default.json | 3 +- public/translations/th/default.json | 3 +- public/translations/tr/default.json | 3 +- public/translations/uk/default.json | 3 +- public/translations/ur/default.json | 3 +- public/translations/vi/default.json | 3 +- public/translations/zh/default.json | 3 +- src/views/board/__tests__/board.test.tsx | 68 +++++++++++++++++++++++- src/views/board/board.module.css | 5 ++ src/views/board/board.tsx | 12 +++++ 38 files changed, 154 insertions(+), 36 deletions(-) diff --git a/public/translations/ar/default.json b/public/translations/ar/default.json index 66f2db02..fd5842ca 100644 --- a/public/translations/ar/default.json +++ b/public/translations/ar/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "فشلت الصورة الخارجية. جرّب VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "تجاهل" + "modQueue.dismiss": "تجاهل", + "board_address_unverified_warning": "لم يتم التحقق من عنوان هذه اللوحة. قد لا يكون مالك اللوحة مالكًا لهذا العنوان." } diff --git a/public/translations/bn/default.json b/public/translations/bn/default.json index 03340bd2..e75a7743 100644 --- a/public/translations/bn/default.json +++ b/public/translations/bn/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "বাইরের ছবি লোড হয়নি। VPN চেষ্টা করুন।", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "উপেক্ষা করুন" + "modQueue.dismiss": "উপেক্ষা করুন", + "board_address_unverified_warning": "এই বোর্ড ঠিকানাটি যাচাই করা হয়নি। বোর্ডের মালিক এই ঠিকানার মালিক নাও হতে পারেন।" } diff --git a/public/translations/cs/default.json b/public/translations/cs/default.json index 875808d4..230af2ff 100644 --- a/public/translations/cs/default.json +++ b/public/translations/cs/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Externí obrázek selhal. Zkuste VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Ignorovat" + "modQueue.dismiss": "Ignorovat", + "board_address_unverified_warning": "Tato adresa nástěnky není ověřená. Vlastník nástěnky nemusí tuto adresu vlastnit." } diff --git a/public/translations/da/default.json b/public/translations/da/default.json index 04793be5..aeae2846 100644 --- a/public/translations/da/default.json +++ b/public/translations/da/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Eksternt billede fejlede. Prøv VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Ignorer" + "modQueue.dismiss": "Ignorer", + "board_address_unverified_warning": "Denne boardadresse er ikke verificeret. Boardets ejer ejer muligvis ikke denne adresse." } diff --git a/public/translations/de/default.json b/public/translations/de/default.json index dc75dbe9..cd60291a 100644 --- a/public/translations/de/default.json +++ b/public/translations/de/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Externes Bild fehlgeschlagen. VPN versuchen.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Ignorieren" + "modQueue.dismiss": "Ignorieren", + "board_address_unverified_warning": "Diese Board-Adresse ist nicht verifiziert. Der Board-Betreiber besitzt diese Adresse möglicherweise nicht." } diff --git a/public/translations/el/default.json b/public/translations/el/default.json index 1eef4f74..e2333635 100644 --- a/public/translations/el/default.json +++ b/public/translations/el/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Η εξωτερική εικόνα απέτυχε. Δοκιμάστε VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Παράβλεψη" + "modQueue.dismiss": "Παράβλεψη", + "board_address_unverified_warning": "Αυτή η διεύθυνση board δεν έχει επαληθευτεί. Ο ιδιοκτήτης του board ενδέχεται να μην κατέχει αυτή τη διεύθυνση." } diff --git a/public/translations/en/default.json b/public/translations/en/default.json index 98e61fbb..aba892ef 100644 --- a/public/translations/en/default.json +++ b/public/translations/en/default.json @@ -407,5 +407,6 @@ "media_failed_to_load_inline": "External image from {{host}} failed. Try VPN.", "media_failed_to_load_inline_unknown": "External image failed. Try VPN.", "directory_status_unavailable_reason": "check only available for top 5 boards", - "modQueue.dismiss": "Dismiss" + "modQueue.dismiss": "Dismiss", + "board_address_unverified_warning": "This board address is not verified. The board owner might not own this address." } diff --git a/public/translations/es/default.json b/public/translations/es/default.json index 93e9cbf7..f1dab9bc 100644 --- a/public/translations/es/default.json +++ b/public/translations/es/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Falló la imagen externa. Prueba una VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Descartar" + "modQueue.dismiss": "Descartar", + "board_address_unverified_warning": "Esta dirección del tablón no está verificada. Es posible que el propietario del tablón no sea dueño de esta dirección." } diff --git a/public/translations/fa/default.json b/public/translations/fa/default.json index 6cd4ce0e..0c432607 100644 --- a/public/translations/fa/default.json +++ b/public/translations/fa/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "تصویر خارجی بارگیری نشد. VPN را امتحان کنید.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "نادیده گرفتن" + "modQueue.dismiss": "نادیده گرفتن", + "board_address_unverified_warning": "این نشانی برد تأیید نشده است. ممکن است مالک برد صاحب این نشانی نباشد." } diff --git a/public/translations/fi/default.json b/public/translations/fi/default.json index f53edc95..70e85f39 100644 --- a/public/translations/fi/default.json +++ b/public/translations/fi/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Ulkoinen kuva epäonnistui. Kokeile VPN:ää.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Ohita" + "modQueue.dismiss": "Ohita", + "board_address_unverified_warning": "Tätä laudan osoitetta ei ole vahvistettu. Laudan omistaja ei välttämättä omista tätä osoitetta." } diff --git a/public/translations/fil/default.json b/public/translations/fil/default.json index e60db7d7..15fefd7d 100644 --- a/public/translations/fil/default.json +++ b/public/translations/fil/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Nabigo ang panlabas na larawan. Subukan ang VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Huwag pansinin" + "modQueue.dismiss": "Huwag pansinin", + "board_address_unverified_warning": "Hindi beripikado ang address ng board na ito. Maaaring hindi pag-aari ng may-ari ng board ang address na ito." } diff --git a/public/translations/fr/default.json b/public/translations/fr/default.json index 82e04c20..3112e6e3 100644 --- a/public/translations/fr/default.json +++ b/public/translations/fr/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "L'image externe a échoué. Essayez un VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Ignorer" + "modQueue.dismiss": "Ignorer", + "board_address_unverified_warning": "Cette adresse de board n'est pas vérifiée. Le propriétaire du board pourrait ne pas posséder cette adresse." } diff --git a/public/translations/he/default.json b/public/translations/he/default.json index bbaa048f..dc5a697c 100644 --- a/public/translations/he/default.json +++ b/public/translations/he/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "התמונה החיצונית נכשלה. נסה VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "התעלם" + "modQueue.dismiss": "התעלם", + "board_address_unverified_warning": "כתובת הלוח הזו אינה מאומתת. ייתכן שבעל הלוח אינו הבעלים של הכתובת הזו." } diff --git a/public/translations/hi/default.json b/public/translations/hi/default.json index 9c18cc79..f784ecf8 100644 --- a/public/translations/hi/default.json +++ b/public/translations/hi/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "बाहरी छवि लोड नहीं हुई। VPN आज़माएँ।", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "अनदेखा करें" + "modQueue.dismiss": "अनदेखा करें", + "board_address_unverified_warning": "इस बोर्ड पते की पुष्टि नहीं हुई है। हो सकता है बोर्ड का मालिक इस पते का मालिक न हो।" } diff --git a/public/translations/hu/default.json b/public/translations/hu/default.json index be249717..42bddbf3 100644 --- a/public/translations/hu/default.json +++ b/public/translations/hu/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "A külső kép nem töltődött be. Próbálj VPN-t.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Mellőzés" + "modQueue.dismiss": "Mellőzés", + "board_address_unverified_warning": "Ez a board-cím nincs ellenőrizve. Lehet, hogy a board tulajdonosa nem birtokolja ezt a címet." } diff --git a/public/translations/id/default.json b/public/translations/id/default.json index bba85d86..7e4df368 100644 --- a/public/translations/id/default.json +++ b/public/translations/id/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Gambar eksternal gagal. Coba VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Abaikan" + "modQueue.dismiss": "Abaikan", + "board_address_unverified_warning": "Alamat board ini belum diverifikasi. Pemilik board mungkin tidak memiliki alamat ini." } diff --git a/public/translations/it/default.json b/public/translations/it/default.json index 10e7be4a..e744f00b 100644 --- a/public/translations/it/default.json +++ b/public/translations/it/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Immagine esterna non caricata. Prova una VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Ignora" + "modQueue.dismiss": "Ignora", + "board_address_unverified_warning": "Questo indirizzo della board non è verificato. Il proprietario della board potrebbe non possedere questo indirizzo." } diff --git a/public/translations/ja/default.json b/public/translations/ja/default.json index c04759c9..38756baf 100644 --- a/public/translations/ja/default.json +++ b/public/translations/ja/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "外部画像を読み込めませんでした。VPN を試してください。", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "無視" + "modQueue.dismiss": "無視", + "board_address_unverified_warning": "このボードアドレスは検証されていません。ボード所有者がこのアドレスを所有していない可能性があります。" } diff --git a/public/translations/ko/default.json b/public/translations/ko/default.json index 3add0b37..9275c41e 100644 --- a/public/translations/ko/default.json +++ b/public/translations/ko/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "외부 이미지를 불러오지 못했습니다. VPN을 시도하세요.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "무시" + "modQueue.dismiss": "무시", + "board_address_unverified_warning": "이 보드 주소는 확인되지 않았습니다. 보드 소유자가 이 주소를 소유하지 않았을 수 있습니다." } diff --git a/public/translations/mr/default.json b/public/translations/mr/default.json index 03ab064a..10e0a7b6 100644 --- a/public/translations/mr/default.json +++ b/public/translations/mr/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "बाह्य प्रतिमा लोड झाली नाही. VPN वापरून पाहा.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "दुर्लक्ष करा" + "modQueue.dismiss": "दुर्लक्ष करा", + "board_address_unverified_warning": "हा बोर्ड पत्ता सत्यापित केलेला नाही. बोर्डचा मालक हा पत्ता मालक नसू शकतो." } diff --git a/public/translations/nl/default.json b/public/translations/nl/default.json index e458291c..ba2782cf 100644 --- a/public/translations/nl/default.json +++ b/public/translations/nl/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Externe afbeelding mislukt. Probeer VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Negeren" + "modQueue.dismiss": "Negeren", + "board_address_unverified_warning": "Dit boardadres is niet geverifieerd. De eigenaar van het board is mogelijk niet de eigenaar van dit adres." } diff --git a/public/translations/no/default.json b/public/translations/no/default.json index c1f02eb8..7f8bc76e 100644 --- a/public/translations/no/default.json +++ b/public/translations/no/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Eksternt bilde kunne ikke lastes. Prøv VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Ignorer" + "modQueue.dismiss": "Ignorer", + "board_address_unverified_warning": "Denne board-adressen er ikke bekreftet. Board-eieren eier kanskje ikke denne adressen." } diff --git a/public/translations/pl/default.json b/public/translations/pl/default.json index 1596519f..de4dc88b 100644 --- a/public/translations/pl/default.json +++ b/public/translations/pl/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Obraz zewnętrzny nie załadował się. Spróbuj VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Pomiń" + "modQueue.dismiss": "Pomiń", + "board_address_unverified_warning": "Ten adres boarda nie jest zweryfikowany. Właściciel boarda może nie być właścicielem tego adresu." } diff --git a/public/translations/pt/default.json b/public/translations/pt/default.json index b710e876..f9cbaf7c 100644 --- a/public/translations/pt/default.json +++ b/public/translations/pt/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Falha na imagem externa. Tente uma VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Ignorar" + "modQueue.dismiss": "Ignorar", + "board_address_unverified_warning": "Este endereço do board não foi verificado. O proprietário do board pode não ser dono deste endereço." } diff --git a/public/translations/ro/default.json b/public/translations/ro/default.json index efd841df..8151a50a 100644 --- a/public/translations/ro/default.json +++ b/public/translations/ro/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Imaginea externă a eșuat. Încearcă VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Ignoră" + "modQueue.dismiss": "Ignoră", + "board_address_unverified_warning": "Această adresă de board nu este verificată. Proprietarul boardului s-ar putea să nu dețină această adresă." } diff --git a/public/translations/ru/default.json b/public/translations/ru/default.json index 89a82046..a22d5a2a 100644 --- a/public/translations/ru/default.json +++ b/public/translations/ru/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Внешнее изображение не загрузилось. Попробуйте VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Скрыть" + "modQueue.dismiss": "Скрыть", + "board_address_unverified_warning": "Этот адрес доски не проверен. Владелец доски может не владеть этим адресом." } diff --git a/public/translations/sq/default.json b/public/translations/sq/default.json index 8535cbdd..14d718c3 100644 --- a/public/translations/sq/default.json +++ b/public/translations/sq/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Imazhi i jashtëm dështoi. Provoni VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Shpërfill" + "modQueue.dismiss": "Shpërfill", + "board_address_unverified_warning": "Kjo adresë e board-it nuk është verifikuar. Pronari i board-it mund të mos e zotërojë këtë adresë." } diff --git a/public/translations/sv/default.json b/public/translations/sv/default.json index 7eaeaaab..1caa4ab6 100644 --- a/public/translations/sv/default.json +++ b/public/translations/sv/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Extern bild kunde inte läsas in. Prova VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Avfärda" + "modQueue.dismiss": "Avfärda", + "board_address_unverified_warning": "Den här board-adressen är inte verifierad. Boardets ägare kanske inte äger den här adressen." } diff --git a/public/translations/te/default.json b/public/translations/te/default.json index d3a88216..e8a43182 100644 --- a/public/translations/te/default.json +++ b/public/translations/te/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "బాహ్య చిత్రం లోడ్ కాలేదు. VPN ప్రయత్నించండి.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "విస్మరించు" + "modQueue.dismiss": "విస్మరించు", + "board_address_unverified_warning": "ఈ బోర్డ్ చిరునామా ధృవీకరించబడలేదు. బోర్డ్ యజమాని ఈ చిరునామాకు యజమాని కాకపోవచ్చు." } diff --git a/public/translations/th/default.json b/public/translations/th/default.json index c7e7dba8..cb9f7e9f 100644 --- a/public/translations/th/default.json +++ b/public/translations/th/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "โหลดรูปภาพภายนอกไม่สำเร็จ ลอง VPN", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "มองข้าม" + "modQueue.dismiss": "มองข้าม", + "board_address_unverified_warning": "ที่อยู่บอร์ดนี้ยังไม่ได้รับการยืนยัน เจ้าของบอร์ดอาจไม่ได้เป็นเจ้าของที่อยู่นี้" } diff --git a/public/translations/tr/default.json b/public/translations/tr/default.json index 2d724c32..78b54a2e 100644 --- a/public/translations/tr/default.json +++ b/public/translations/tr/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Harici görsel yüklenemedi. VPN deneyin.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Yoksay" + "modQueue.dismiss": "Yoksay", + "board_address_unverified_warning": "Bu board adresi doğrulanmamış. Board sahibi bu adresin sahibi olmayabilir." } diff --git a/public/translations/uk/default.json b/public/translations/uk/default.json index 5ad74d71..8ee4cd77 100644 --- a/public/translations/uk/default.json +++ b/public/translations/uk/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Зовнішнє зображення не завантажилося. Спробуйте VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Приховати" + "modQueue.dismiss": "Приховати", + "board_address_unverified_warning": "Цю адресу дошки не перевірено. Власник дошки може не володіти цією адресою." } diff --git a/public/translations/ur/default.json b/public/translations/ur/default.json index d1558330..0a068f78 100644 --- a/public/translations/ur/default.json +++ b/public/translations/ur/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "بیرونی تصویر لوڈ نہیں ہوئی۔ VPN آزمائیں۔", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "نظر انداز کریں" + "modQueue.dismiss": "نظر انداز کریں", + "board_address_unverified_warning": "اس بورڈ کے پتے کی تصدیق نہیں ہوئی۔ ممکن ہے بورڈ کا مالک اس پتے کا مالک نہ ہو۔" } diff --git a/public/translations/vi/default.json b/public/translations/vi/default.json index 95aaf1ad..79da0361 100644 --- a/public/translations/vi/default.json +++ b/public/translations/vi/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "Không tải được ảnh bên ngoài. Thử VPN.", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "Bỏ qua" + "modQueue.dismiss": "Bỏ qua", + "board_address_unverified_warning": "Địa chỉ bảng này chưa được xác minh. Chủ bảng có thể không sở hữu địa chỉ này." } diff --git a/public/translations/zh/default.json b/public/translations/zh/default.json index 8530390e..fab4dd1f 100644 --- a/public/translations/zh/default.json +++ b/public/translations/zh/default.json @@ -388,5 +388,6 @@ "media_failed_to_load_inline_unknown": "外部图片加载失败。试试 VPN。", "expiring_media_link_alert": "Media from {{domain}} expires quickly. Use a stable media link instead.", "nothing_found": "Nothing Found", - "modQueue.dismiss": "忽略" + "modQueue.dismiss": "忽略", + "board_address_unverified_warning": "此版面地址尚未验证。版主可能并不拥有此地址。" } diff --git a/src/views/board/__tests__/board.test.tsx b/src/views/board/__tests__/board.test.tsx index 4aaf5bf3..adc0ccd4 100644 --- a/src/views/board/__tests__/board.test.tsx +++ b/src/views/board/__tests__/board.test.tsx @@ -20,6 +20,14 @@ type TestComment = { timestamp?: number; }; +type TestCommunity = { + error?: Error; + nameResolved?: boolean; + shortAddress?: string; + state?: string; + title?: string; +}; + const testState = vi.hoisted(() => ({ account: { subscriptions: [] as string[] }, accountComments: [] as TestComment[], @@ -60,7 +68,7 @@ const testState = vi.hoisted(() => ({ shortAddress: 'music-posting.eth', state: 'ready', title: '/mu/ - Music', - }, + } as TestCommunity, communitySnapshot: { shortAddress: 'music-posting.eth', title: '/mu/ - Music', @@ -404,6 +412,64 @@ describe('Board', () => { ]); }); + it('warns when a loaded board address is not verified', async () => { + testState.directories = [{ address: 'business-and-finance.bso', directoryCode: 'biz', title: '/biz/ - Business & Finance' }]; + testState.directoryByAddress = { + 'business-and-finance.bso': { + address: 'business-and-finance.bso', + features: { postsPerPage: 2 }, + }, + }; + testState.resolvedCommunityAddress = 'business-and-finance.bso'; + testState.community = { + nameResolved: false, + shortAddress: 'business-and-finance.bso', + state: 'ready', + title: '/biz/ - Business & Finance', + }; + testState.communitySnapshot = { + shortAddress: 'business-and-finance.bso', + title: '/biz/ - Business & Finance', + }; + + await renderBoard({ + boardProps: { boardIdentifier: 'business-and-finance.bso', viewType: 'board' }, + initialEntry: '/business-and-finance.bso', + routePath: '/:boardIdentifier/*', + }); + + expect(container.textContent).toContain('board_address_unverified_warning'); + }); + + it('does not warn when a loaded board address is verified', async () => { + testState.directories = [{ address: 'business-and-finance.bso', directoryCode: 'biz', title: '/biz/ - Business & Finance' }]; + testState.directoryByAddress = { + 'business-and-finance.bso': { + address: 'business-and-finance.bso', + features: { postsPerPage: 2 }, + }, + }; + testState.resolvedCommunityAddress = 'business-and-finance.bso'; + testState.community = { + nameResolved: true, + shortAddress: 'business-and-finance.bso', + state: 'ready', + title: '/biz/ - Business & Finance', + }; + testState.communitySnapshot = { + shortAddress: 'business-and-finance.bso', + title: '/biz/ - Business & Finance', + }; + + await renderBoard({ + boardProps: { boardIdentifier: 'business-and-finance.bso', viewType: 'board' }, + initialEntry: '/business-and-finance.bso', + routePath: '/:boardIdentifier/*', + }); + + expect(container.textContent).not.toContain('board_address_unverified_warning'); + }); + it('renders the current page feed, inserts recent account comments, and wires footer actions', async () => { const currentTimestamp = Math.floor(Date.now() / 1000); testState.feed = [ diff --git a/src/views/board/board.module.css b/src/views/board/board.module.css index e7467a2f..8c77d713 100644 --- a/src/views/board/board.module.css +++ b/src/views/board/board.module.css @@ -7,6 +7,11 @@ padding: 15px 0 0 5px; } +.addressWarning { + color: var(--mod-queue-alert-color, red); + padding: 15px 5px 0 5px; +} + .footer { color: var(--post-mobile-abbr-text-color); padding: 15px 0 20px 5px; diff --git a/src/views/board/board.tsx b/src/views/board/board.tsx index 525b0bbc..6e2a2a22 100644 --- a/src/views/board/board.tsx +++ b/src/views/board/board.tsx @@ -594,6 +594,13 @@ const Board = ({ feedCacheKey, viewType, boardIdentifier: boardIdentifierProp, t }, [title, shortAddress, communityAddress, isVisible, params.boardIdentifier, boardIdentifierProp, directories, isInAllView, isInSubscriptionsView, isInModView, t]); const shouldShowErrorToUser = communityError?.message && feed.length === 0; + const shouldShowUnverifiedAddressWarning = + !isMultiboardView && + typeof communityIdentifier?.name === 'string' && + communityIdentifier.name.includes('.') && + typeof communityIdentifier.publicKey === 'string' && + communityIdentifier.publicKey.length > 0 && + communityData?.nameResolved === false; const displayFeed = effectiveInfiniteScroll ? combinedFeed : currentPageFeed; return ( @@ -605,6 +612,11 @@ const Board = ({ feedCacheKey, viewType, boardIdentifier: boardIdentifierProp, t )} + {shouldShowUnverifiedAddressWarning && ( +
+ {t('board_address_unverified_warning')} +
+ )} {effectiveInfiniteScroll ? (