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