Merge pull request #443 from plebbit/development

Development
This commit is contained in:
Tom (plebeius.eth)
2024-07-07 20:17:28 +02:00
committed by GitHub
57 changed files with 171 additions and 98 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "عرض لوحات آمنة للعمل فقط",
"show_all_content": "عرض جميع المحتويات",
"link_type": "نوع الرابط",
"comment_edited_at_timestamp": "تم تحرير التعليق في {{timestamp}}.",
"comment_edited_at_timestamp": "تم تحرير التعليق في <1>{{timestamp}}</1>",
"reason_reason": "السبب: \"{{reason}}\".",
"click_here_to_show_original": "<1>انقر هنا</1> لعرض الأصل.",
"click_here_to_hide_original": "<1>انقر هنا</1> لإخفاء الأصل.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "শুধুমাত্র কাজ-সম্পূর্ণ বোর্ড দেখান",
"show_all_content": "সমস্ত কন্টেন্ট দেখান",
"link_type": "লিংক প্রকার",
"comment_edited_at_timestamp": "মন্তব্য সম্পাদনা করা হয়েছে {{timestamp}} তারিখে।",
"comment_edited_at_timestamp": "<1>{{timestamp}}</1> এ মন্তব্য সম্পাদিত হয়েছে",
"reason_reason": "কারণ: \"{{reason}}\".",
"click_here_to_show_original": "<1>এখানে ক্লিক করুন</1> অসল দেখানোর জন্য।",
"click_here_to_hide_original": "<1>এখানে ক্লিক করুন</1> অসল লুকাতে।",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Zobrazit pouze bezpečné pracovní desky",
"show_all_content": "Zobrazit veškerý obsah",
"link_type": "Typ odkazu",
"comment_edited_at_timestamp": "Komentář byl upraven dne {{timestamp}}.",
"comment_edited_at_timestamp": "Komentář byl upraven dne <1>{{timestamp}}</1>",
"reason_reason": "Důvod: \"{{reason}}\".",
"click_here_to_show_original": "Klikněte <1>zde</1> pro zobrazení původního.",
"click_here_to_hide_original": "Klikněte <1>zde</1> pro skrytí původního.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Vis kun Worksafe boards",
"show_all_content": "Vis alt indhold",
"link_type": "Link type",
"comment_edited_at_timestamp": "Kommentaren blev redigeret den {{timestamp}}.",
"comment_edited_at_timestamp": "Kommentaren blev redigeret den <1>{{timestamp}}</1>",
"reason_reason": "Grund: \"{{reason}}\".",
"click_here_to_show_original": "<1>Klik her</1> for at vise originalen.",
"click_here_to_hide_original": "<1>Klik her</1> for at skjule originalen.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Nur sichere Boards anzeigen",
"show_all_content": "Alle Inhalte anzeigen",
"link_type": "Linktyp",
"comment_edited_at_timestamp": "Kommentar bearbeitet am {{timestamp}}.",
"comment_edited_at_timestamp": "Kommentar bearbeitet am <1>{{timestamp}}</1>",
"reason_reason": "Grund: \"{{reason}}\".",
"click_here_to_show_original": "<1>Hier klicken</1>, um das Original anzuzeigen.",
"click_here_to_hide_original": "<1>Hier klicken</1>, um das Original zu verstecken.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Εμφάνιση μόνο ασφαλών πινάκων εργασίας",
"show_all_content": "Εμφάνιση όλων των περιεχομένων",
"link_type": "Τύπος συνδέσμου",
"comment_edited_at_timestamp": "Επεξεργασία σχολίου στις {{timestamp}}.",
"comment_edited_at_timestamp": "Σχόλιο επεξεργασμένο στις <1>{{timestamp}}</1>",
"reason_reason": "Λόγος: \"{{reason}}\".",
"click_here_to_show_original": "<1>Κάντε κλικ εδώ</1> για να εμφανιστεί το αρχικό.",
"click_here_to_hide_original": "<1>Κάντε κλικ εδώ</1> για να κρύψετε το αρχικό.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Show Worksafe Boards Only",
"show_all_content": "Show All Content",
"link_type": "Link type",
"comment_edited_at_timestamp": "Comment edited at {{timestamp}}.",
"comment_edited_at_timestamp": "Comment edited at <1>{{timestamp}}</1>",
"reason_reason": "Reason: \"{{reason}}\".",
"click_here_to_show_original": "<1>Click here</1> to show the original.",
"click_here_to_hide_original": "<1>Click here</1> to hide the original.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Mostrar solo tableros seguros para el trabajo",
"show_all_content": "Mostrar todo el contenido",
"link_type": "Tipo de enlace",
"comment_edited_at_timestamp": "Comentario editado en {{timestamp}}.",
"comment_edited_at_timestamp": "Comentario editado el <1>{{timestamp}}</1>",
"reason_reason": "Motivo: \"{{reason}}\".",
"click_here_to_show_original": "<1>Haga clic aquí</1> para mostrar el original.",
"click_here_to_hide_original": "<1>Haga clic aquí</1> para ocultar el original.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "نمایش تنها بوردهای ایمن برای کار",
"show_all_content": "نمایش تمام محتوا",
"link_type": "نوع پیوند",
"comment_edited_at_timestamp": "ویرایش نظر در {{timestamp}}.",
"comment_edited_at_timestamp": "نظر ویرایش شده در <1>{{timestamp}}</1>",
"reason_reason": "دلیل: \"{{reason}}\".",
"click_here_to_show_original": "<1>برای نمایش اصلی اینجا کلیک کنید</1>.",
"click_here_to_hide_original": "<1>برای پنهان کردن اصل اینجا کلیک کنید</1>.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Näytä vain työturvalliset hallit",
"show_all_content": "Näytä kaikki sisällöt",
"link_type": "Linkin tyyppi",
"comment_edited_at_timestamp": "Kommentti muokattu {{timestamp}}.",
"comment_edited_at_timestamp": "Kommentti muokattu <1>{{timestamp}}</1>",
"reason_reason": "Syy: \"{{reason}}\".",
"click_here_to_show_original": "<1>Klikkaa tästä</1> näyttääksesi alkuperäisen.",
"click_here_to_hide_original": "<1>Klikkaa tästä</1> piilottaaksesi alkuperäisen.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Ipakita lamang ang mga Worksafe boards",
"show_all_content": "Ipakita lahat ng nilalaman",
"link_type": "Uri ng Link",
"comment_edited_at_timestamp": "Inedit na komento sa {{timestamp}}.",
"comment_edited_at_timestamp": "Na-edit ang komento sa <1>{{timestamp}}</1>",
"reason_reason": "Dahilan: \"{{reason}}\".",
"click_here_to_show_original": "<1>I-click dito</1> upang ipakita ang orihinal.",
"click_here_to_hide_original": "<1>I-click dito</1> upang itago ang orihinal.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Afficher uniquement les tableaux Worksafe",
"show_all_content": "Afficher tout le contenu",
"link_type": "Type de lien",
"comment_edited_at_timestamp": "Commentaire modifié à {{timestamp}}.",
"comment_edited_at_timestamp": "Commentaire modifié le <1>{{timestamp}}</1>",
"reason_reason": "Raison: \"{{reason}}\".",
"click_here_to_show_original": "<1>Cliquez ici</1> pour afficher l'original.",
"click_here_to_hide_original": "<1>Cliquez ici</1> pour masquer l'original.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "הצג לוחות עבודה בטוחים בלבד",
"show_all_content": "הצג את כל התוכן",
"link_type": "סוג קישור",
"comment_edited_at_timestamp": "התגובה עודכנה ב {{timestamp}}.",
"comment_edited_at_timestamp": "התגובה נערכה ב-<1>{{timestamp}}</1>",
"reason_reason": "סיבה: \"{{reason}}\".",
"click_here_to_show_original": "<1>לחץ כאן</1> כדי להציג את המקור.",
"click_here_to_hide_original": "<1>לחץ כאן</1> כדי להסתיר את המקור.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "केवल कामसुरक्षित बोर्ड्स दिखाएं",
"show_all_content": "सभी सामग्री दिखाएं",
"link_type": "लिंक प्रकार",
"comment_edited_at_timestamp": "टिप्पणी {{timestamp}} पर संपादित की गई",
"comment_edited_at_timestamp": "<1>{{timestamp}}</1> पर टिप्पणी संपादित की गई",
"reason_reason": "कारण: \"{{reason}}\".",
"click_here_to_show_original": "<1>यहां क्लिक करें</1> मूल दिखाने के लिए।",
"click_here_to_hide_original": "<1>यहां क्लिक करें</1> मूल छुपाने के लिए।",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Csak munkabiztos táblák mutatása",
"show_all_content": "Mutasd az összes tartalmat",
"link_type": "Link típusa",
"comment_edited_at_timestamp": "Hozzászólás szerkesztve itt: {{timestamp}}.",
"comment_edited_at_timestamp": "Megjegyzés szerkesztve ekkor: <1>{{timestamp}}</1>",
"reason_reason": "Ok: \"{{reason}}\".",
"click_here_to_show_original": "<1>Kattints ide</1> az eredeti megjelenítéséhez.",
"click_here_to_hide_original": "<1>Kattints ide</1> az eredeti elrejtéséhez.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Tampilkan Hanya Board Worksafe",
"show_all_content": "Tampilkan Semua Konten",
"link_type": "Tipe tautan",
"comment_edited_at_timestamp": "Komentar diedit pada {{timestamp}}.",
"comment_edited_at_timestamp": "Komentar diedit pada <1>{{timestamp}}</1>",
"reason_reason": "Alasan: \"{{reason}}\".",
"click_here_to_show_original": "<1>Klik di sini</1> untuk menampilkan aslinya.",
"click_here_to_hide_original": "<1>Klik di sini</1> untuk menyembunyikan aslinya.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Mostra solo le board Worksafe",
"show_all_content": "Mostra tutti i contenuti",
"link_type": "Tipo di link",
"comment_edited_at_timestamp": "Commento modificato il {{timestamp}}.",
"comment_edited_at_timestamp": "Commento modificato il <1>{{timestamp}}</1>",
"reason_reason": "Motivo: \"{{reason}}\".",
"click_here_to_show_original": "<1>Clicca qui</1> per mostrare l'originale.",
"click_here_to_hide_original": "<1>Clicca qui</1> per nascondere l'originale.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Worksafeボードのみ表示",
"show_all_content": "すべてのコンテンツを表示",
"link_type": "リンクの種類",
"comment_edited_at_timestamp": "コメントは{{timestamp}}に編集されました",
"comment_edited_at_timestamp": "<1>{{timestamp}}</1> にコメントを編集しました",
"reason_reason": "理由: \"{{reason}}\".",
"click_here_to_show_original": "<1>ここをクリック</1> して元の表示。",
"click_here_to_hide_original": "<1>ここをクリック</1> して元を非表示にする。",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "작업 안전 보드만 표시",
"show_all_content": "모든 콘텐츠 보기",
"link_type": "링크 유형",
"comment_edited_at_timestamp": "댓글 편집 날짜: {{timestamp}}",
"comment_edited_at_timestamp": "댓글 편집 시간: <1>{{timestamp}}</1>",
"reason_reason": "이유: \"{{reason}}\".",
"click_here_to_show_original": "<1>여기를 클릭</1> 하여 원본 표시.",
"click_here_to_hide_original": "<1>여기를 클릭</1> 하여 원본 숨기기.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "केवळ कामसुरक्षित बोर्ड्स दाखवा",
"show_all_content": "सर्व सामग्री दाखवा",
"link_type": "लिंक प्रकार",
"comment_edited_at_timestamp": "टिप्पणी {{timestamp}} वर संपादित केली आहे.",
"comment_edited_at_timestamp": "<1>{{timestamp}}</1> ला संपादित केल",
"reason_reason": "कारण: \"{{reason}}\".",
"click_here_to_show_original": "<1>येथे क्लिक करा</1> मूळ पाहण्यासाठी।",
"click_here_to_hide_original": "<1>येथे क्लिक करा</1> मूळ लपविण्यासाठी।",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Toon alleen Worksafe boards",
"show_all_content": "Toon alle inhoud",
"link_type": "Link type",
"comment_edited_at_timestamp": "Reactie bewerkt op {{timestamp}}.",
"comment_edited_at_timestamp": "Reactie bewerkt op <1>{{timestamp}}</1>",
"reason_reason": "Reden: \"{{reason}}\".",
"click_here_to_show_original": "<1>Klik hier</1> om de originele te tonen.",
"click_here_to_hide_original": "<1>Klik hier</1> om de originele te verbergen.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Vis kun Worksafe boards",
"show_all_content": "Vis allt innhold",
"link_type": "Lenketype",
"comment_edited_at_timestamp": "Kommentaren ble redigert på {{timestamp}}.",
"comment_edited_at_timestamp": "Kommentaren ble redigert på <1>{{timestamp}}</1>",
"reason_reason": "Årsak: \"{{reason}}\".",
"click_here_to_show_original": "<1>Klikk her</1> for å vise originalen.",
"click_here_to_hide_original": "<1>Klikk her</1> for å skjule originalen.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Pokaż tylko bezpieczne tablice",
"show_all_content": "Pokaż całą zawartość",
"link_type": "Typ łącza",
"comment_edited_at_timestamp": "Komentarz edytowany o {{timestamp}}.",
"comment_edited_at_timestamp": "Komentarz edytowany <1>{{timestamp}}</1>",
"reason_reason": "Powód: \"{{reason}}\".",
"click_here_to_show_original": "<1>Kliknij tutaj</1>, aby pokazać oryginał.",
"click_here_to_hide_original": "<1>Kliknij tutaj</1>, aby ukryć oryginał.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Mostrar apenas boards Worksafe",
"show_all_content": "Mostrar Todo o Conteúdo",
"link_type": "Tipo de link",
"comment_edited_at_timestamp": "Comentário editado em {{timestamp}}.",
"comment_edited_at_timestamp": "Comentário editado em <1>{{timestamp}}</1>",
"reason_reason": "Razão: \"{{reason}}\".",
"click_here_to_show_original": "<1>Clique aqui</1> para mostrar o original.",
"click_here_to_hide_original": "<1>Clique aqui</1> para ocultar o original.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Afișați doar tablourile Worksafe",
"show_all_content": "Afișați tot conținutul",
"link_type": "Tipul linkului",
"comment_edited_at_timestamp": "Comentariu editat la {{timestamp}}.",
"comment_edited_at_timestamp": "Comentariu editat la <1>{{timestamp}}</1>",
"reason_reason": "Motiv: \"{{reason}}\".",
"click_here_to_show_original": "<1>Click aici</1> pentru a arăta originalul.",
"click_here_to_hide_original": "<1>Click aici</1> pentru a ascunde originalul.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Показывать только безопасные доски",
"show_all_content": "Показать весь контент",
"link_type": "Тип ссылки",
"comment_edited_at_timestamp": "Комментарий изменён {{timestamp}}.",
"comment_edited_at_timestamp": "Комментарий изменен в <1>{{timestamp}}</1>",
"reason_reason": "Причина: \"{{reason}}\".",
"click_here_to_show_original": "<1>Нажмите здесь</1> для отображения оригинала.",
"click_here_to_hide_original": "<1>Нажмите здесь</1> чтобы скрыть оригинал.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Shfaq vetëm taulat e sigurta të punës",
"show_all_content": "Shfaq të gjitha përmbajtjet",
"link_type": "Lloji i lidhjes",
"comment_edited_at_timestamp": "Komenti është ndryshuar në {{timestamp}}.",
"comment_edited_at_timestamp": "Komenti u redaktua në <1>{{timestamp}}</1>",
"reason_reason": "Arsye: \"{{reason}}\".",
"click_here_to_show_original": "<1>Kliko këtu</1> për të treguar origjinalin.",
"click_here_to_hide_original": "<1>Kliko këtu</1> për të fshehur origjinalin.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Visa endast Worksafe-styrelser",
"show_all_content": "Visa allt innehåll",
"link_type": "Länktyp",
"comment_edited_at_timestamp": "Kommentaren redigerades den {{timestamp}}.",
"comment_edited_at_timestamp": "Kommentar redigerad vid <1>{{timestamp}}</1>",
"reason_reason": "Anledning: \"{{reason}}\".",
"click_here_to_show_original": "<1>Klicka här</1> för att visa original.",
"click_here_to_hide_original": "<1>Klicka här</1> för att dölja original.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "పనిమాడు భద్రపరిచిన బోర్డులను మాత్రమే చూపించు",
"show_all_content": "అన్ని కాంటెంట్ చూపించు",
"link_type": "లింక్ రకం",
"comment_edited_at_timestamp": "వ్యాఖ్యను {{timestamp}} లో సవరించబడింది.",
"comment_edited_at_timestamp": "<1>{{timestamp}}</1> లో సమీక్ష సవరించబడింది",
"reason_reason": "కారణం: \"{{reason}}\".",
"click_here_to_show_original": "<1>ఇక్కడ క్లిక్ చేయండి</1> అసలు చూపించడానికి.",
"click_here_to_hide_original": "<1>ఇక్కడ క్లిక్ చేయండి</1> అసలు దాచడానికి.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "แสดงบอร์ด Worksafe เท่านั้น",
"show_all_content": "แสดงเนื้อหาทั้งหมด",
"link_type": "ประเภทลิงก์",
"comment_edited_at_timestamp": "แก้ไขความคิดเห็นที่ {{timestamp}}",
"comment_edited_at_timestamp": "แก้ไขความคิดเห็นที่ <1>{{timestamp}}</1>",
"reason_reason": "เหตุผล: \"{{reason}}\".",
"click_here_to_show_original": "<1>คลิกที่นี่</1> เพื่อแสดงข้อมูลต้นฉบับ",
"click_here_to_hide_original": "<1>คลิกที่นี่</1> เพื่อซ่อนข้อมูลต้นฉบับ",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Sadece Worksafe Panoları Göster",
"show_all_content": "Tüm İçeriği Göster",
"link_type": "Bağlantı türü",
"comment_edited_at_timestamp": "Yorum {{timestamp}} tarihinde düzenlendi.",
"comment_edited_at_timestamp": "<1>{{timestamp}}</1> tarihinde yorum düzenlendi",
"reason_reason": "Sebep: \"{{reason}}\".",
"click_here_to_show_original": "<1>Buraya tıklayın</1> orijinali göstermek için.",
"click_here_to_hide_original": "<1>Buraya tıklayın</1> orijinali gizlemek için.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Показувати лише безпечні дошки",
"show_all_content": "Показати весь вміст",
"link_type": "Тип посилання",
"comment_edited_at_timestamp": "Коментар було відредаговано {{timestamp}}.",
"comment_edited_at_timestamp": "Коментар відредаговано в <1>{{timestamp}}</1>",
"reason_reason": "Причина: \"{{reason}}\".",
"click_here_to_show_original": "<1>Натисніть тут</1> для відображення оригіналу.",
"click_here_to_hide_original": "<1>Натисніть тут</1> для приховання оригіналу.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "صرف کام سے بچائے گئے بورڈز دکھائیں",
"show_all_content": "تمام مواد دکھائیں",
"link_type": "لنک کی قسم",
"comment_edited_at_timestamp": "تبدیل کی گئی تبدیلی کا {{timestamp}}۔",
"comment_edited_at_timestamp": "تبدیل کیا گیا تبصرہ <1>{{timestamp}}</1> پر",
"reason_reason": "وجہ: \"{{reason}}\".",
"click_here_to_show_original": "<1>یہاں کلک کریں</1> تاکہ اصل دکھائی دے۔",
"click_here_to_hide_original": "<1>یہاں کلک کریں</1> تاکہ اصل چھپ جائے۔",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "Chỉ hiển thị bảng Worksafe",
"show_all_content": "Hiển thị tất cả nội dung",
"link_type": "Loại liên kết",
"comment_edited_at_timestamp": "Bình luận được chỉnh sửa lúc {{timestamp}}.",
"comment_edited_at_timestamp": "Bình luận được chỉnh sửa lúc <1>{{timestamp}}</1>",
"reason_reason": "Lý do: \"{{reason}}\".",
"click_here_to_show_original": "<1>Nhấp vào đây</1> để hiển thị nguyên bản.",
"click_here_to_hide_original": "<1>Nhấp vào đây</1> để ẩn nguyên bản.",
+1 -1
View File
@@ -195,7 +195,7 @@
"show_worksafe_boards_only": "仅显示安全工作板",
"show_all_content": "显示所有内容",
"link_type": "链接类型",
"comment_edited_at_timestamp": "评论于{{timestamp}}进行了编辑",
"comment_edited_at_timestamp": "评论于 <1>{{timestamp}}</1> 被编辑",
"reason_reason": "原因: \"{{reason}}\".",
"click_here_to_show_original": "<1>点击这里</1> 显示原文。",
"click_here_to_hide_original": "<1>点击这里</1> 隐藏原文。",
+1
View File
@@ -1,5 +1,6 @@
.app {
z-index: 1;
color-scheme: var(--color-scheme, revert) !important;
}
.boardLayout {
@@ -32,6 +32,7 @@
display: flex;
align-items: center;
justify-content: space-between; /* Ensure elements are spaced out properly */
padding-right: 5px;
}
.desktopBoardButtons::after {
+24 -4
View File
@@ -1,13 +1,15 @@
import { useTranslation } from 'react-i18next';
import { Link, useLocation, useNavigate, useParams } from 'react-router-dom';
import { useAccountComment, useSubscribe } from '@plebbit/plebbit-react-hooks';
import { isAllView, isCatalogView, isPendingPostView, isPostPageView, isSubscriptionsView } from '../../lib/utils/view-utils';
import { useAccountComment, useComment, useSubscribe } from '@plebbit/plebbit-react-hooks';
import { isAllView, isCatalogView, isDescriptionView, isPendingPostView, isPostPageView, isRulesView, isSubscriptionsView } from '../../lib/utils/view-utils';
import useCatalogStyleStore from '../../stores/use-catalog-style-store';
import useFeedResetStore from '../../stores/use-feed-reset-store';
import useSortingStore from '../../stores/use-sorting-store';
import useTimeFilter from '../../hooks/use-time-filter';
import CatalogFilters from '../../views/catalog/catalog-filters/';
import styles from './board-buttons.module.css';
import Tooltip from '../tooltip';
import useCountLinksInReplies from '../../hooks/use-count-links-in-replies';
interface BoardButtonsProps {
address?: string | undefined;
@@ -220,6 +222,25 @@ export const MobileBoardButtons = () => {
);
};
const PostPageStats = () => {
const params = useParams();
const location = useLocation();
const isInDescriptionView = isDescriptionView(location.pathname, params);
const isInRulesView = isRulesView(location.pathname, params);
const comment = useComment({ commentCid: params?.commentCid });
const { closed, pinned, replyCount } = comment || {};
const linkCount = useCountLinksInReplies(comment);
return (
<span>
{(pinned || isInDescriptionView || isInRulesView) && 'Sticky / '}
{(closed || isInDescriptionView || isInRulesView) && 'Closed / '}
<Tooltip children={replyCount?.toString()} content='Replies' /> / <Tooltip children={linkCount?.toString()} content='Links' />
</span>
);
};
export const DesktopBoardButtons = () => {
const params = useParams();
const location = useLocation();
@@ -243,8 +264,7 @@ export const DesktopBoardButtons = () => {
<CatalogButton address={subplebbitAddress} isInAllView={isInAllView} isInSubscriptionsView={isInSubscriptionsView} />]
{isInPostView && (
<span className={styles.rightSideButtons}>
[
<SubscribeButton address={subplebbitAddress} />]
<PostPageStats />
</span>
)}
</>
@@ -39,6 +39,10 @@
image-rendering: pixelated;
}
.redOfflineIcon {
background-image: url('/public/assets/icons/offline-red.png') !important;
}
@media (max-width: 640px) {
.boardTitle {
padding-top: 40px;
+6 -13
View File
@@ -1,14 +1,13 @@
import { useState } from 'react';
import { useLocation, useParams } from 'react-router-dom';
import { useTranslation } from 'react-i18next';
import { useAccountComment, useSubplebbit } from '@plebbit/plebbit-react-hooks';
import { getFormattedTimeAgo } from '../../lib/utils/time-utils';
import { isAllView, isSubscriptionsView } from '../../lib/utils/view-utils';
import styles from './board-header.module.css';
import { useMultisubMetadata } from '../../hooks/use-default-subplebbits';
import useIsMobile from '../../hooks/use-is-mobile';
import useIsSubplebbitOffline from '../../hooks/use-is-subplebbit-offline';
const totalBanners = 59;
const totalBanners = 60;
const ImageBanner = () => {
const [imagePath] = useState(() => {
@@ -20,10 +19,8 @@ const ImageBanner = () => {
};
const BoardHeader = () => {
const { t } = useTranslation();
const location = useLocation();
const params = useParams();
const isInAllView = isAllView(location.pathname, params);
const isInSubscriptionsView = isSubscriptionsView(location.pathname, useParams());
@@ -31,18 +28,14 @@ const BoardHeader = () => {
const subplebbitAddress = params?.subplebbitAddress || accountComment?.subplebbitAddress;
const subplebbit = useSubplebbit({ subplebbitAddress });
const { address, shortAddress, updatedAt } = subplebbit || {};
const { address, shortAddress } = subplebbit || {};
const multisubMetadata = useMultisubMetadata();
const title = isInAllView ? multisubMetadata?.title || 'all' : isInSubscriptionsView ? 'Subscriptions' : subplebbit?.title;
const subtitle = isInAllView ? 'p/all' : isInSubscriptionsView ? 'p/subscriptions' : `p/${address}`;
const isBoardOffline = updatedAt && updatedAt < Date.now() / 1000 - 60 * 60;
const offlineMessage = updatedAt
? isBoardOffline && t('posts_last_synced_info', { time: getFormattedTimeAgo(updatedAt), interpolation: { escapeValue: false } })
: t('subplebbit_offline_info');
const { isOffline, isDefinitelyOffline, offlineTitle } = useIsSubplebbitOffline(subplebbit);
const iconClass = `${styles.offlineIcon} ${isDefinitelyOffline ? styles.redOfflineIcon : ''}`;
return (
<div className={styles.content}>
@@ -53,7 +46,7 @@ const BoardHeader = () => {
)}
<div className={styles.boardTitle}>
{title || `p/${shortAddress || subplebbitAddress}`}
{isBoardOffline && <span className={styles.offlineIcon} title={offlineMessage} />}
{isOffline && <span className={`${styles.offlineIcon} ${iconClass}`} title={offlineTitle} />}
</div>
<div className={styles.boardSubtitle}>{subtitle}</div>
<hr />
+3 -6
View File
@@ -12,11 +12,11 @@ import useEditCommentPrivileges from '../../hooks/use-author-privileges';
import useCountLinksInReplies from '../../hooks/use-count-links-in-replies';
import useFetchGifFirstFrame from '../../hooks/use-fetch-gif-first-frame';
import useHide from '../../hooks/use-hide';
import useWindowWidth from '../../hooks/use-window-width';
import PostMenuDesktop from '../post-desktop/post-menu-desktop';
import styles from './catalog-row.module.css';
import Markdown from '../markdown';
import _ from 'lodash';
import useWindowWidth from '../../hooks/use-window-width';
interface CatalogPostMediaProps {
commentMediaInfo: any;
@@ -113,6 +113,7 @@ const CatalogPost = ({ post }: { post: Comment }) => {
timestamp,
title,
} = post || {};
const linkCount = useCountLinksInReplies(post);
const commentMediaInfo = getCommentMediaInfo(post);
const hasThumbnail = getHasThumbnail(commentMediaInfo, link);
const { hidden } = useHide({ cid });
@@ -122,8 +123,6 @@ const CatalogPost = ({ post }: { post: Comment }) => {
const postLink = isInAllView && isDescription ? `/p/all/description` : `/p/${subplebbitAddress}/${isDescription ? 'description' : isRules ? 'rules' : `c/${cid}`}`;
const linkCount = useCountLinksInReplies(post);
const threadIcons = (
<div className={styles.threadIcons}>
{pinned && <span className={styles.stickyIcon} title={t('sticky')} />}
@@ -188,9 +187,7 @@ const CatalogPost = ({ post }: { post: Comment }) => {
});
const postContent = (
<div className={`${styles.teaser} ${hidden && styles.hidden}`}>
{hidden ? <b>({t('hidden')})</b> : <Markdown title={title} content={content} spoiler={spoiler} />}
</div>
<div className={`${styles.teaser} ${hidden && styles.hidden}`}>{hidden ? <b>({t('hidden')})</b> : <Markdown title={title} content={content} />}</div>
);
const { imageSize, showOPComment } = useCatalogStyleStore();
@@ -88,6 +88,7 @@
.content iframe {
border: none;
color-scheme: light;
}
.fileInfo {
-1
View File
@@ -124,7 +124,6 @@ const blockquoteToGreentext = () => (tree: any) => {
interface MarkdownProps {
content: string;
spoiler?: boolean;
title?: string;
}
+17 -10
View File
@@ -207,7 +207,7 @@ const PostMedia = ({ post }: PostProps) => {
</span>
)}
</div>
{(hasThumbnail || (!hasThumbnail && !showThumbnail)) && (
{(hasThumbnail || (!hasThumbnail && !showThumbnail) || spoiler) && (
<div className={styles.fileThumbnail}>
<CommentMedia commentMediaInfo={commentMediaInfo} post={post} showThumbnail={showThumbnail} setShowThumbnail={setShowThumbnail} />
</div>
@@ -217,8 +217,9 @@ const PostMedia = ({ post }: PostProps) => {
};
const PostMessage = ({ post }: PostProps) => {
const { cid, content, commentAuthor, deleted, edit, original, parentCid, postCid, reason, removed, spoiler, state, subplebbitAddress } = post || {};
const banned = !!commentAuthor?.banExpiresAt;
const { cid, content, deleted, edit, original, parentCid, postCid, reason, removed, state, subplebbitAddress } = post || {};
// TODO: commentAuthor is not available outside of editedComment, update when available
// const banned = !!post?.commentAuthor?.banExpiresAt;
const { t } = useTranslation();
const params = useParams();
const location = useLocation();
@@ -240,7 +241,7 @@ const PostMessage = ({ post }: PostProps) => {
return (
<blockquote className={styles.postMessage}>
{isReply && !(removed || deleted) && isReplyingToReply && <ReplyQuotePreview isQuotelinkReply={true} quotelinkReply={quotelinkReply} />}
{isReply && !(removed || deleted) && state !== 'failed' && isReplyingToReply && <ReplyQuotePreview isQuotelinkReply={true} quotelinkReply={quotelinkReply} />}
{removed ? (
<Tooltip
children={<span className={styles.removedContent}>({t('this_post_was_removed')})</span>}
@@ -251,12 +252,17 @@ const PostMessage = ({ post }: PostProps) => {
<Tooltip children={<span className={styles.deletedContent}>{t('user_deleted_this_post')}</span>} content={reason && `${t('reason')}: ${reason}`} />
) : (
<>
{!showOriginal && <Markdown content={displayContent} spoiler={spoiler} />}
{!showOriginal && <Markdown content={displayContent} />}
{edit && original?.content !== post?.content && (
<span className={styles.editedInfo}>
{showOriginal && <Markdown content={original?.content} />}
<br />
{t('comment_edited_at_timestamp', { timestamp: getFormattedDate(edit?.timestamp), interpolation: { escapeValue: false } })}{' '}
<Trans
i18nKey={'comment_edited_at_timestamp'}
values={{ timestamp: getFormattedDate(edit?.timestamp) }}
shouldUnescape={true}
components={{ 1: <Tooltip content={getFormattedTimeAgo(edit?.timestamp)} children={<></>} /> }}
/>{' '}
{reason && <>{t('reason_reason', { reason: reason, interpolation: { escapeValue: false } })} </>}
{showOriginal ? (
<Trans
@@ -275,7 +281,8 @@ const PostMessage = ({ post }: PostProps) => {
)}
</>
)}
{banned && (
{/* TODO: commentAuthor is not available outside of editedComment, update when available */}
{/* {banned && (
<span className={styles.removedContent}>
<br />
<br />
@@ -288,7 +295,7 @@ const PostMessage = ({ post }: PostProps) => {
})}${reason ? `. ${_.capitalize(t('reason'))}: "${reason}"` : ''}`}
/>
</span>
)}
)} */}
{!isReply && content.length > 1000 && !isInPostView && (
<span className={styles.abbr}>
<br />
@@ -348,9 +355,9 @@ const PostDesktop = ({ openReplyModal, post, roles, showAllReplies, showReplies
const replies = useReplies(post);
const visiblelinksCount = useCountLinksInReplies(post, 5);
const totallinksCount = useCountLinksInReplies(post);
const totalLinksCount = useCountLinksInReplies(post);
const repliesCount = pinned ? replyCount : replyCount - 5;
const linksCount = pinned ? totallinksCount : totallinksCount - visiblelinksCount;
const linksCount = pinned ? totalLinksCount : totalLinksCount - visiblelinksCount;
const { showOmittedReplies, setShowOmittedReplies } = useShowOmittedReplies();
// scroll to reply if pathname is reply permalink (backlink)
+4 -9
View File
@@ -12,7 +12,7 @@ import useReply from '../../hooks/use-reply';
import useChallengesStore from '../../stores/use-challenges-store';
import styles from './post-form.module.css';
import _ from 'lodash';
import { getFormattedTimeAgo } from '../../lib/utils/time-utils';
import useIsSubplebbitOffline from '../../hooks/use-is-subplebbit-offline';
type SubmitState = {
subplebbitAddress: string | undefined;
@@ -272,17 +272,12 @@ const PostForm = () => {
const [showForm, setShowForm] = useState(false);
const subplebbit = useSubplebbit({ subplebbitAddress: params?.subplebbitAddress });
const { updatedAt } = subplebbit || {};
const isBoardOffline = updatedAt && updatedAt < Date.now() / 1000 - 60 * 60;
const offlineMessage = updatedAt
? isBoardOffline && t('posts_last_synced_info', { time: getFormattedTimeAgo(updatedAt), interpolation: { escapeValue: false } })
: t('subplebbit_offline_info');
const { isOffline, offlineTitle } = useIsSubplebbitOffline(subplebbit);
return (
<>
<div className={styles.postFormDesktop}>
{!(isInAllView || isInSubscriptionsView) && showForm && isBoardOffline && <div className={styles.offlineBoard}>{offlineMessage}</div>}
{!(isInAllView || isInSubscriptionsView) && showForm && isOffline && <div className={styles.offlineBoard}>{offlineTitle}</div>}
{isThreadClosed ? (
<div className={styles.closed}>
{t('thread_closed')}
@@ -302,7 +297,7 @@ const PostForm = () => {
)}
</div>
<div className={styles.postFormMobile}>
{!(isInAllView || isInSubscriptionsView) && showForm && isBoardOffline && <div className={styles.offlineBoard}>{offlineMessage}</div>}
{!(isInAllView || isInSubscriptionsView) && showForm && isOffline && <div className={styles.offlineBoard}>{offlineTitle}</div>}
{isThreadClosed ? (
<div className={styles.closed}>
{t('thread_closed')}
+8 -6
View File
@@ -152,8 +152,9 @@ const ReplyBacklinks = ({ post }: PostProps) => {
const PostMessageMobile = ({ post }: PostProps) => {
const { t } = useTranslation();
const { cid, commentAuthor, content, deleted, edit, original, parentCid, postCid, reason, removed, spoiler, state, subplebbitAddress } = post || {};
const banned = !!commentAuthor?.banExpiresAt;
const { cid, content, deleted, edit, original, parentCid, postCid, reason, removed, state, subplebbitAddress } = post || {};
// TODO: commentAuthor is not available outside of editedComment, update when available
// const banned = !!post?.commentAuthor?.banExpiresAt;
const [showOriginal, setShowOriginal] = useState(false);
const params = useParams();
@@ -176,7 +177,7 @@ const PostMessageMobile = ({ post }: PostProps) => {
return (
content && (
<blockquote className={`${styles.postMessage} ${!isReply && styles.clampLines}`}>
{isReply && !(removed || deleted) && isReplyingToReply && <ReplyQuotePreview isQuotelinkReply={true} quotelinkReply={quotelinkReply} />}
{isReply && !(removed || deleted) && state !== 'failed' && isReplyingToReply && <ReplyQuotePreview isQuotelinkReply={true} quotelinkReply={quotelinkReply} />}
{removed ? (
<Tooltip
children={<span className={styles.removedContent}>({t('this_post_was_removed')})</span>}
@@ -187,7 +188,7 @@ const PostMessageMobile = ({ post }: PostProps) => {
<Tooltip children={<span className={styles.deletedContent}>{t('user_deleted_this_post')}</span>} content={reason && `${t('reason')}: ${reason}`} />
) : (
<>
{!showOriginal && <Markdown content={displayContent} spoiler={spoiler} />}
{!showOriginal && <Markdown content={displayContent} />}
{edit && original?.content !== post?.content && (
<span className={styles.editedInfo}>
{showOriginal && <Markdown content={original?.content} />}
@@ -211,7 +212,8 @@ const PostMessageMobile = ({ post }: PostProps) => {
)}
</>
)}
{banned && (
{/* TODO: commentAuthor is not available outside of editedComment, update when available */}
{/* {banned && (
<span className={styles.removedContent}>
<br />
<br />
@@ -224,7 +226,7 @@ const PostMessageMobile = ({ post }: PostProps) => {
})}${reason ? `. ${_.capitalize(t('reason'))}: "${reason}"` : ''}`}
/>
</span>
)}
)} */}
{!isReply && content.length > 1000 && !isInPostView && (
<span className={styles.abbr}>
<br />
+19
View File
@@ -0,0 +1,19 @@
import { useTranslation } from 'react-i18next';
import { Subplebbit } from '@plebbit/plebbit-react-hooks';
import { getFormattedTimeAgo } from '../lib/utils/time-utils';
const useIsSubplebbitOffline = (subplebbit: Subplebbit) => {
const { t } = useTranslation();
const { updatedAt, updatingState } = subplebbit || {};
const isProbablyOffline = !updatedAt || (updatedAt && updatedAt < Date.now() / 1000 - 60 * 60);
const isDefinitelyOffline = updatingState === 'failed';
const isOffline = isProbablyOffline || isDefinitelyOffline;
const offlineTitle = updatedAt
? isOffline && t('posts_last_synced_info', { time: getFormattedTimeAgo(updatedAt), interpolation: { escapeValue: false } })
: t('subplebbit_offline_info');
return { isOffline, isDefinitelyOffline, offlineTitle };
};
export default useIsSubplebbitOffline;
+6 -2
View File
@@ -30,8 +30,12 @@ hr {
text-transform: capitalize;
}
* {
color-scheme: var(--color-scheme, revert);
.red {
color: red !important;
}
:root {
color-scheme: dark;
}
@media (max-width: 640px) {
+10
View File
@@ -1,4 +1,6 @@
:root .yotsuba {
--color-scheme: light;
/* backlink */
--post-backlink-text-color: navy;
--post-backlink-text-decoration: underline;
@@ -204,6 +206,8 @@
}
:root .yotsuba-b {
--color-scheme: light;
/* backlink */
--post-backlink-text-color: #34345C;
--post-backlink-text-decoration: underline;
@@ -409,6 +413,8 @@
}
:root .futaba {
--color-scheme: light;
/* backlink */
--post-backlink-text-color: navy;
--post-backlink-text-decoration: underline;
@@ -581,6 +587,8 @@
}
:root .burichan {
--color-scheme: light;
/* backlink */
--post-backlink-text-color: #34345C;
--post-backlink-text-decoration: underline;
@@ -976,6 +984,8 @@
}
:root .photon {
--color-scheme: light;
/* backlink */
--post-backlink-text-color: #f60;
--post-backlink-text-decoration: underline;
+2 -2
View File
@@ -72,14 +72,14 @@ const Board = () => {
const loadingString = (
<div className={styles.stateString}>
{state === 'failed' ? (
state
<span className='red'>{state}</span>
) : isInSubscriptionsView && subscriptions?.length === 0 ? (
t('not_subscribed_to_any_board')
) : (
<LoadingEllipsis string={loadingStateString} />
)}
{error && (
<div style={{ color: 'red' }}>
<div className='red'>
<br />
{error.message}
</div>
+4 -7
View File
@@ -2,12 +2,12 @@ import { Link } from 'react-router-dom';
import { useTranslation } from 'react-i18next';
import { Subplebbit, useAccount, useAccountSubplebbits } from '@plebbit/plebbit-react-hooks';
import Plebbit from '@plebbit/plebbit-js/dist/browser/index.js';
import { getFormattedTimeAgo } from '../../../lib/utils/time-utils';
import useHomeFiltersStore from '../../../stores/use-home-filters-store';
import { useMultisubMetadata } from '../../../hooks/use-default-subplebbits';
import styles from '../home.module.css';
import { nsfwTags } from '../home';
import BoxModal from '../box-modal';
import useIsSubplebbitOffline from '../../../hooks/use-is-subplebbit-offline';
const Board = ({ subplebbit, subplebbits }: { subplebbit: Subplebbit; subplebbits: any }) => {
const { t } = useTranslation();
@@ -18,15 +18,12 @@ const Board = ({ subplebbit, subplebbits }: { subplebbit: Subplebbit; subplebbit
const boardLink = useCatalog ? `/p/${address}/catalog` : `/p/${address}`;
const subplebbitData = subplebbits && subplebbits.find((sub: Subplebbit) => sub?.address === address);
const updatedAt = subplebbitData?.updatedAt;
const isOffline = updatedAt && updatedAt < Date.now() / 1000 - 60 * 60;
const offlineTitle = updatedAt
? isOffline && t('posts_last_synced_info', { time: getFormattedTimeAgo(updatedAt), interpolation: { escapeValue: false } })
: t('subplebbit_offline_info');
const { isDefinitelyOffline, isOffline, offlineTitle } = useIsSubplebbitOffline(subplebbitData);
const iconClass = `${styles.offlineIcon} ${isDefinitelyOffline ? styles.redOfflineIcon : ''}`;
return (
<div className={styles.subplebbit} key={address}>
{isOffline && <span className={styles.offlineIcon} title={offlineTitle} />}
{isOffline && <span className={`${styles.offlineIcon} ${iconClass}`} title={offlineTitle} />}
<Link to={boardLink}>{title || address}</Link>
{nsfwTag && <span className={styles.nsfw}> ({t(nsfwTag)})</span>}
</div>
+4
View File
@@ -187,6 +187,10 @@
image-rendering: pixelated;
}
.redOfflineIcon {
background-image: url('/public/assets/icons/offline-red.png') !important;
}
.boardsBoxContent {
font-size: 93%;
padding: 0.5em;
@@ -30,8 +30,13 @@ const PopularThreadCard = ({ post, boardTitle, boardShortAddress }: PopularThrea
</Link>
</div>
<div className={styles.threadContent}>
{title && <b>{title}</b>}
{content && (content.length > 99 ? `: ${content.substring(0, 99)}...` : `: ${content}`)}
{title && (
<>
<b>{title.trim()}</b>
{content && ': '}
</>
)}
{content && (content.length > 99 ? `${content.substring(0, 99).trim()}...` : `${content}`)}
</div>
</div>
);
+11
View File
@@ -3,6 +3,12 @@
overflow-x: hidden;
}
.error {
color: red;
padding: 5px;
display: block;
}
.thread {
clear: both;
}
@@ -508,6 +514,11 @@
}
@media (min-width: 640px) {
.error {
padding-left: 0;
padding-bottom: 0;
}
.replyQuotePreview {
padding-right: 7px;
padding-left: 2px;
+4 -1
View File
@@ -75,7 +75,7 @@ const PostPage = () => {
post = comment;
}
const { deleted, locked, removed } = post || {};
const { error, deleted, locked, removed, replyCount } = post || {};
const isThreadClosed = deleted || locked || removed;
useEffect(() => {
@@ -92,6 +92,9 @@ const PostPage = () => {
<div className={styles.content}>
{isInSettigsView && <SettingsModal />}
{showReplyModal && activeCid && <ReplyModal closeModal={closeModal} parentCid={activeCid} scrollY={scrollY} />}
{/* TODO: remove this replyCount error once api supports scrolling replies pages */}
{replyCount > 60 && <span className={styles.error}>Error: this thread has too many replies, some of them cannot be displayed right now.</span>}
{error && <span className={styles.error}>Error: {error.message}</span>}
{isInDescriptionView ? (
<SubplebbitDescription
avatarUrl={suggested?.avatarUrl}