mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
Binary file not shown.
|
After Width: | Height: | Size: 120 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
@@ -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> لإخفاء الأصل.",
|
||||
|
||||
@@ -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> অসল লুকাতে।",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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> για να κρύψετε το αρχικό.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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>.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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> כדי להסתיר את המקור.",
|
||||
|
||||
@@ -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> मूल छुपाने के लिए।",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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> して元を非表示にする。",
|
||||
|
||||
@@ -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> 하여 원본 숨기기.",
|
||||
|
||||
@@ -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> मूळ लपविण्यासाठी।",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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ł.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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> чтобы скрыть оригинал.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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> అసలు దాచడానికి.",
|
||||
|
||||
@@ -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> เพื่อซ่อนข้อมูลต้นฉบับ",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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> для приховання оригіналу.",
|
||||
|
||||
@@ -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> تاکہ اصل چھپ جائے۔",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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,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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 />
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -124,7 +124,6 @@ const blockquoteToGreentext = () => (tree: any) => {
|
||||
|
||||
interface MarkdownProps {
|
||||
content: string;
|
||||
spoiler?: boolean;
|
||||
title?: string;
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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')}
|
||||
|
||||
@@ -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 />
|
||||
|
||||
@@ -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
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user