mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
@@ -204,9 +204,11 @@
|
||||
"by": "بواسطة",
|
||||
"last_reply_by": "آخر رد بواسطة",
|
||||
"showing_all_replies": "عرض جميع الردود.",
|
||||
"x_posts_by_this_user_address": "{{number}} مشاركات من هذا العنوان للمستخدم",
|
||||
"1_post_by_this_user_address": "مشاركة واحدة من هذا العنوان للمستخدم",
|
||||
"highlight_posts": "تسليط الضوء على المشاركات من خلال هذا العنوان للمستخدم",
|
||||
"display_name_too_long": "اسم العرض طويل جداً",
|
||||
"title_too_long": "العنوان طويل جداً"
|
||||
"title_too_long": "العنوان طويل جداً",
|
||||
"1_post_by_this_id": "مشاركة واحدة بهذا المعرف",
|
||||
"x_posts_by_this_id": "{{number}} منشور من هذا المعرف",
|
||||
"ban_expires_at": "محظور من p/{{address}} حتى {{timestamp}}",
|
||||
"user_banned": "تم حظر المستخدم لهذا المنشور"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "দ্বারা",
|
||||
"last_reply_by": "শেষ উত্তর দেননি",
|
||||
"showing_all_replies": "সব উত্তর দেখাচ্ছি।",
|
||||
"x_posts_by_this_user_address": "এই ব্যবহারকারী ঠিকানা দ্বারা {{number}} টি পোস্ট",
|
||||
"1_post_by_this_user_address": "এই ব্যবহারকারী ঠিকানা দ্বারা 1 টি পোস্ট",
|
||||
"highlight_posts": "এই ব্যবহারকারী ঠিকানা দ্বারা পোস্টগুলি হাইলাইট করুন",
|
||||
"display_name_too_long": "প্রদর্শনী নাম অত্যন্ত দীর্ঘ",
|
||||
"title_too_long": "শিরোনাম অত্যন্ত দীর্ঘ"
|
||||
"title_too_long": "শিরোনাম অত্যন্ত দীর্ঘ",
|
||||
"1_post_by_this_id": "এই আইডি দ্বারা 1 পোস্ট",
|
||||
"x_posts_by_this_id": "এই আইডি থেকে {{number}} পোস্ট",
|
||||
"ban_expires_at": "p/{{address}} থেকে {{timestamp}} পর্যন্ত নিষিদ্ধ",
|
||||
"user_banned": "এই পোস্টের জন্য ব্যবহারকারী নিষিদ্ধ হয়েছে"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "od",
|
||||
"last_reply_by": "Poslední odpověď od",
|
||||
"showing_all_replies": "Zobrazuji všechny odpovědi.",
|
||||
"x_posts_by_this_user_address": "{{number}} příspěvků od tohoto uživatelského adresy",
|
||||
"1_post_by_this_user_address": "1 příspěvek od tohoto uživatelského adresy",
|
||||
"highlight_posts": "Zvýraznit příspěvky z této uživatelské adresy",
|
||||
"display_name_too_long": "Zobrazované jméno je příliš dlouhé",
|
||||
"title_too_long": "Název je příliš dlouhý"
|
||||
"title_too_long": "Název je příliš dlouhý",
|
||||
"1_post_by_this_id": "1 příspěvek s tímto ID",
|
||||
"x_posts_by_this_id": "{{number}} příspěvků z tohoto ID",
|
||||
"ban_expires_at": "Zakázán z p/{{address}} do {{timestamp}}",
|
||||
"user_banned": "Uživatel byl zablokován za tento příspěvek"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "af",
|
||||
"last_reply_by": "Seneste svar fra",
|
||||
"showing_all_replies": "Viser alle svar.",
|
||||
"x_posts_by_this_user_address": "{{number}} indlæg fra denne brugeradresse",
|
||||
"1_post_by_this_user_address": "1 indlæg fra denne brugeradresse",
|
||||
"highlight_posts": "Fremhæv indlæg fra denne brugeradresse",
|
||||
"display_name_too_long": "Visningsnavn for langt",
|
||||
"title_too_long": "Titel for lang"
|
||||
"title_too_long": "Titel for lang",
|
||||
"1_post_by_this_id": "1 post med dette ID",
|
||||
"x_posts_by_this_id": "{{number}} indlæg fra denne ID",
|
||||
"ban_expires_at": "Udelukket fra p/{{address}} indtil {{timestamp}}",
|
||||
"user_banned": "Brugeren blev blokeret for dette indlæg"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "von",
|
||||
"last_reply_by": "Letzte Antwort von",
|
||||
"showing_all_replies": "Zeige alle Antworten.",
|
||||
"x_posts_by_this_user_address": "{{number}} Beiträge von dieser Benutzeradresse",
|
||||
"1_post_by_this_user_address": "1 Beitrag von dieser Benutzeradresse",
|
||||
"highlight_posts": "Beiträge von dieser Benutzeradresse hervorheben",
|
||||
"display_name_too_long": "Angezeigter Name zu lang",
|
||||
"title_too_long": "Titel zu lang"
|
||||
"title_too_long": "Titel zu lang",
|
||||
"1_post_by_this_id": "1 Beitrag mit dieser ID",
|
||||
"x_posts_by_this_id": "{{number}} Beiträge von dieser ID",
|
||||
"ban_expires_at": "Gesperrt von p/{{address}} bis {{timestamp}}",
|
||||
"user_banned": "Benutzer wurde für diesen Beitrag gesperrt"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "από",
|
||||
"last_reply_by": "Τελευταία απάντηση από",
|
||||
"showing_all_replies": "Εμφανίζονται όλες οι απαντήσεις.",
|
||||
"x_posts_by_this_user_address": "{{number}} δημοσιεύσεις από αυτήν τη διεύθυνση χρήστη",
|
||||
"1_post_by_this_user_address": "1 δημοσίευση από αυτήν τη διεύθυνση χρήστη",
|
||||
"highlight_posts": "Επισήμανση δημοσιεύσεων από αυτήν τη διεύθυνση χρήστη",
|
||||
"display_name_too_long": "Το όνομα εμφάνισης είναι πολύ μεγάλο",
|
||||
"title_too_long": "Το τίτλος είναι πολύ μεγάλος"
|
||||
"title_too_long": "Το τίτλος είναι πολύ μεγάλος",
|
||||
"1_post_by_this_id": "1 ανάρτηση με αυτό το ID",
|
||||
"x_posts_by_this_id": "{{number}} αναρτήσεις από αυτό το ID",
|
||||
"ban_expires_at": "Αποκλείστηκε από p/{{address}} έως {{timestamp}}",
|
||||
"user_banned": "Ο χρήστης αποκλείστηκε για αυτή τη δημοσίευση"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "by",
|
||||
"last_reply_by": "Last reply by",
|
||||
"showing_all_replies": "Showing all replies.",
|
||||
"x_posts_by_this_user_address": "{{number}} posts by this user address",
|
||||
"1_post_by_this_user_address": "1 post by this user address",
|
||||
"highlight_posts": "Highlight posts by this user address",
|
||||
"display_name_too_long": "display name too long",
|
||||
"title_too_long": "title too long"
|
||||
"title_too_long": "title too long",
|
||||
"1_post_by_this_id": "1 post by this ID",
|
||||
"x_posts_by_this_id": "{{number}} posts from this ID",
|
||||
"ban_expires_at": "Banned from p/{{address}} until {{timestamp}}",
|
||||
"user_banned": "User was banned for this post"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "por",
|
||||
"last_reply_by": "Última respuesta de",
|
||||
"showing_all_replies": "Mostrando todas las respuestas.",
|
||||
"x_posts_by_this_user_address": "{{number}} publicaciones de esta dirección de usuario",
|
||||
"1_post_by_this_user_address": "1 publicación de esta dirección de usuario",
|
||||
"highlight_posts": "Resaltar publicaciones de esta dirección de usuario",
|
||||
"display_name_too_long": "nombre de visualización demasiado largo",
|
||||
"title_too_long": "título demasiado largo"
|
||||
"title_too_long": "título demasiado largo",
|
||||
"1_post_by_this_id": "1 publicación con este ID",
|
||||
"x_posts_by_this_id": "{{number}} publicaciones desde este ID",
|
||||
"ban_expires_at": "Baneado de p/{{address}} hasta {{timestamp}}",
|
||||
"user_banned": "El usuario fue baneado por esta publicación"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "توسط",
|
||||
"last_reply_by": "آخرین پاسخ توسط",
|
||||
"showing_all_replies": "نمایش تمام پاسخها.",
|
||||
"x_posts_by_this_user_address": "{{number}} پست از این آدرس کاربر",
|
||||
"1_post_by_this_user_address": "1 پست از این آدرس کاربر",
|
||||
"highlight_posts": "برجسته سازی پست ها از این آدرس کاربر",
|
||||
"display_name_too_long": "نام نمایشی خیلی طولانی است",
|
||||
"title_too_long": "عنوان خیلی طولانی است"
|
||||
"title_too_long": "عنوان خیلی طولانی است",
|
||||
"1_post_by_this_id": "1 پست با این شناسه",
|
||||
"x_posts_by_this_id": "{{number}} پست از این شناسه",
|
||||
"ban_expires_at": "مسدود از p/{{address}} تا {{timestamp}}",
|
||||
"user_banned": "این کاربر برای این پست مسدود شد"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "kirjoittanut",
|
||||
"last_reply_by": "Viimeisin vastaus",
|
||||
"showing_all_replies": "Näytetään kaikki vastaukset.",
|
||||
"x_posts_by_this_user_address": "Tästä käyttäjän osoitteesta {{number}} viestiä",
|
||||
"1_post_by_this_user_address": "1 viesti tästä käyttäjän osoitteesta",
|
||||
"highlight_posts": "Korosta tämän käyttäjän osoitteen viestit",
|
||||
"display_name_too_long": "Näyttönimi liian pitkä",
|
||||
"title_too_long": "Otsikko on liian pitkä"
|
||||
"title_too_long": "Otsikko on liian pitkä",
|
||||
"1_post_by_this_id": "1 viesti tällä tunnuksella",
|
||||
"x_posts_by_this_id": "{{number}} viestiä tältä tunnukselta",
|
||||
"ban_expires_at": "Porttikielto p/{{address}} asti {{timestamp}}",
|
||||
"user_banned": "Käyttäjä on estetty tästä viestistä"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "ni",
|
||||
"last_reply_by": "Huling sagot ni",
|
||||
"showing_all_replies": "Nagpapakita ng lahat ng mga sagot.",
|
||||
"x_posts_by_this_user_address": "{{number}} mga post mula sa user address na ito",
|
||||
"1_post_by_this_user_address": "1 post mula sa user address na ito",
|
||||
"highlight_posts": "I-highlight ang mga post mula sa user address na ito",
|
||||
"display_name_too_long": "ang display name ay masyadong mahaba",
|
||||
"title_too_long": "ang pamagat ay masyadong mahaba"
|
||||
"title_too_long": "ang pamagat ay masyadong mahaba",
|
||||
"1_post_by_this_id": "1 post sa pamamagitan ng ID na ito",
|
||||
"x_posts_by_this_id": "{{number}} post mula sa ID na ito",
|
||||
"ban_expires_at": "Bawal sa p/{{address}} hanggang {{timestamp}}",
|
||||
"user_banned": "Banal ang user para sa post na ito"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "par",
|
||||
"last_reply_by": "Dernière réponse par",
|
||||
"showing_all_replies": "Affichage de toutes les réponses.",
|
||||
"x_posts_by_this_user_address": "{{number}} messages de cette adresse utilisateur",
|
||||
"1_post_by_this_user_address": "1 message de cette adresse utilisateur",
|
||||
"highlight_posts": "Mettre en évidence les messages de cette adresse utilisateur",
|
||||
"display_name_too_long": "nom d'affichage trop long",
|
||||
"title_too_long": "titre trop long"
|
||||
"title_too_long": "titre trop long",
|
||||
"1_post_by_this_id": "1 publication avec cet identifiant",
|
||||
"x_posts_by_this_id": "{{number}} publications depuis cet identifiant",
|
||||
"ban_expires_at": "Banni de p/{{address}} jusqu'au {{timestamp}}",
|
||||
"user_banned": "L'utilisateur a été banni pour ce post"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "על ידי",
|
||||
"last_reply_by": "תגובה אחרונה מאת",
|
||||
"showing_all_replies": "מציג את כל התגובות.",
|
||||
"x_posts_by_this_user_address": "{{number}} הודעות מכתובת המשתמש הזו",
|
||||
"1_post_by_this_user_address": "1 הודעה מכתובת המשתמש הזו",
|
||||
"highlight_posts": "הדגשת הודעות מכתובת המשתמש הזו",
|
||||
"display_name_too_long": "שם התצוגה ארוך מדי",
|
||||
"title_too_long": "הכותרת ארוכה מדי"
|
||||
"title_too_long": "הכותרת ארוכה מדי",
|
||||
"1_post_by_this_id": "פוסט אחד עם המזהה הזה",
|
||||
"x_posts_by_this_id": "{{number}} פוסטים מהמזהה הזה",
|
||||
"ban_expires_at": "נחסם מ-p/{{address}} עד {{timestamp}}",
|
||||
"user_banned": "המשתמש נחסם עבור הפוסט הזה"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "द्वारा",
|
||||
"last_reply_by": "अंतिम उत्तर दिया गया है",
|
||||
"showing_all_replies": "सभी उत्तर दिखा रहा है।",
|
||||
"x_posts_by_this_user_address": "इस उपयोगकर्ता पते से {{number}} पोस्ट",
|
||||
"1_post_by_this_user_address": "इस उपयोगकर्ता पते से 1 पोस्ट",
|
||||
"highlight_posts": "इस उपयोगकर्ता पते से पोस्ट्स को हाइलाइट करें",
|
||||
"display_name_too_long": "प्रदर्शन नाम बहुत लंबा है",
|
||||
"title_too_long": "शीर्षक बहुत लंबा है"
|
||||
"title_too_long": "शीर्षक बहुत लंबा है",
|
||||
"1_post_by_this_id": "इस आईडी द्वारा 1 पोस्ट",
|
||||
"x_posts_by_this_id": "इस आईडी से {{number}} पोस्ट",
|
||||
"ban_expires_at": "p/{{address}} से {{timestamp}} तक पर प्रतिबंधित",
|
||||
"user_banned": "इस पोस्ट के लिए उपयोगकर्ता पर प्रतिबंध लगा दिया गया था"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "által",
|
||||
"last_reply_by": "Utolsó válasz írta",
|
||||
"showing_all_replies": "Az összes válasz megjelenítése.",
|
||||
"x_posts_by_this_user_address": "{{number}} bejegyzés ebből a felhasználói címből",
|
||||
"1_post_by_this_user_address": "1 bejegyzés ebből a felhasználói címből",
|
||||
"highlight_posts": "Kiemelt bejegyzések ebből a felhasználói címből",
|
||||
"display_name_too_long": "a megjelenített név túl hosszú",
|
||||
"title_too_long": "a cím túl hosszú"
|
||||
"title_too_long": "a cím túl hosszú",
|
||||
"1_post_by_this_id": "1 bejegyzés ezzel az azonosítóval",
|
||||
"x_posts_by_this_id": "{{number}} bejegyzés erről az azonosítóról",
|
||||
"ban_expires_at": "Tiltva p/{{address}}-tól {{timestamp}}-ig",
|
||||
"user_banned": "A felhasználót letiltották ennek a posztnak a kapcsán"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "oleh",
|
||||
"last_reply_by": "Balasan terakhir oleh",
|
||||
"showing_all_replies": "Menampilkan semua balasan.",
|
||||
"x_posts_by_this_user_address": "{{number}} posting dari alamat pengguna ini",
|
||||
"1_post_by_this_user_address": "1 posting dari alamat pengguna ini",
|
||||
"highlight_posts": "Sorot posting dari alamat pengguna ini",
|
||||
"display_name_too_long": "nama tampilan terlalu panjang",
|
||||
"title_too_long": "judul terlalu panjang"
|
||||
"title_too_long": "judul terlalu panjang",
|
||||
"1_post_by_this_id": "1 pos dengan ID ini",
|
||||
"x_posts_by_this_id": "{{number}} pos dari ID ini",
|
||||
"ban_expires_at": "Dilarang dari p/{{address}} sampai {{timestamp}}",
|
||||
"user_banned": "Pengguna diblokir untuk pos ini"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "da",
|
||||
"last_reply_by": "Ultima risposta da",
|
||||
"showing_all_replies": "Mostrando tutte le risposte.",
|
||||
"x_posts_by_this_user_address": "{{number}} post da questo indirizzo di utente",
|
||||
"1_post_by_this_user_address": "1 post da questo indirizzo di utente",
|
||||
"highlight_posts": "Evidenziare i post da questo indirizzo di utente",
|
||||
"display_name_too_long": "nome visualizzato troppo lungo",
|
||||
"title_too_long": "titolo troppo lungo"
|
||||
"title_too_long": "titolo troppo lungo",
|
||||
"1_post_by_this_id": "1 post con questo ID",
|
||||
"x_posts_by_this_id": "{{number}} post da questo ID",
|
||||
"ban_expires_at": "Bannato da p/{{address}} fino al {{timestamp}}",
|
||||
"user_banned": "L'utente è stato bannato per questo post"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "によって",
|
||||
"last_reply_by": "最後の返信者",
|
||||
"showing_all_replies": "すべての返信を表示しています。",
|
||||
"x_posts_by_this_user_address": "このユーザーアドレスからの投稿数:{{number}}",
|
||||
"1_post_by_this_user_address": "このユーザーアドレスからの1件の投稿",
|
||||
"highlight_posts": "このユーザーアドレスによる投稿を強調表示する",
|
||||
"display_name_too_long": "表示名が長すぎます",
|
||||
"title_too_long": "タイトルが長すぎます"
|
||||
"title_too_long": "タイトルが長すぎます",
|
||||
"1_post_by_this_id": "このIDで1件の投稿",
|
||||
"x_posts_by_this_id": "このIDからの{{number}} 件の投稿",
|
||||
"ban_expires_at": "p/{{address}}から{{timestamp}}まで禁止",
|
||||
"user_banned": "この投稿のためにユーザーが禁止されました"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "작성자:",
|
||||
"last_reply_by": "마지막 답글 작성자:",
|
||||
"showing_all_replies": "모든 답글을 표시합니다.",
|
||||
"x_posts_by_this_user_address": "이 사용자 주소로부터 {{number}}개의 게시물",
|
||||
"1_post_by_this_user_address": "이 사용자 주소로부터 1개의 게시물",
|
||||
"highlight_posts": "이 사용자 주소의 게시물 강조 표시",
|
||||
"display_name_too_long": "표시 이름이 너무 깁니다",
|
||||
"title_too_long": "제목이 너무 깁니다"
|
||||
"title_too_long": "제목이 너무 깁니다",
|
||||
"1_post_by_this_id": "이 ID로 게시된 1개의 글",
|
||||
"x_posts_by_this_id": "이 ID로부터의 {{number}}개의 글",
|
||||
"ban_expires_at": "p/{{address}}에서 {{timestamp}}까지 금지됨",
|
||||
"user_banned": "이 게시물로 인해 사용자가 차단되었습니다"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "व्यक्ती",
|
||||
"last_reply_by": "शेवटचा प्रतिसाद व्यक्ती",
|
||||
"showing_all_replies": "सर्व प्रतिसाद दाखवत आहे.",
|
||||
"x_posts_by_this_user_address": "या वापरकर्त्याचे {{number}} पोस्ट्स",
|
||||
"1_post_by_this_user_address": "या वापरकर्त्याची 1 पोस्ट",
|
||||
"highlight_posts": "या वापरकर्त्याच्या पत्त्यापासून पोस्ट्स हायलाइट करा",
|
||||
"display_name_too_long": "डिस्प्ले नाम खूप लांब आहे",
|
||||
"title_too_long": "शीर्षक खूप लांब आहे"
|
||||
"title_too_long": "शीर्षक खूप लांब आहे",
|
||||
"1_post_by_this_id": "या ID वर 1 पोस्ट",
|
||||
"x_posts_by_this_id": "या ID पासून {{number}} पोस्ट",
|
||||
"ban_expires_at": "p/{{address}} ते {{timestamp}} पर्यंत प्रतिबंधित",
|
||||
"user_banned": "या पोस्टसाठी वापरकर्ता ब्लॉक केला गेला होता"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "door",
|
||||
"last_reply_by": "Laatste reactie door",
|
||||
"showing_all_replies": "Alle antwoorden weergeven.",
|
||||
"x_posts_by_this_user_address": "{{number}} berichten van dit gebruikersadres",
|
||||
"1_post_by_this_user_address": "1 bericht van dit gebruikersadres",
|
||||
"highlight_posts": "Berichten van dit gebruikersadres markeren",
|
||||
"display_name_too_long": "weergavenaam te lang",
|
||||
"title_too_long": "titel te lang"
|
||||
"title_too_long": "titel te lang",
|
||||
"1_post_by_this_id": "1 bericht met dit ID",
|
||||
"x_posts_by_this_id": "{{number}} berichten met dit ID",
|
||||
"ban_expires_at": "Verbannen van p/{{address}} tot {{timestamp}}",
|
||||
"user_banned": "Gebruiker is verbannen voor deze post"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "av",
|
||||
"last_reply_by": "Siste svar fra",
|
||||
"showing_all_replies": "Viser alle svar.",
|
||||
"x_posts_by_this_user_address": "{{number}} innlegg fra denne brukeradressen",
|
||||
"1_post_by_this_user_address": "1 innlegg fra denne brukeradressen",
|
||||
"highlight_posts": "Fremhev innlegg fra denne brukeradressen",
|
||||
"display_name_too_long": "visningsnavn for langt",
|
||||
"title_too_long": "tittel for lang"
|
||||
"title_too_long": "tittel for lang",
|
||||
"1_post_by_this_id": "1 post med denne ID-en",
|
||||
"x_posts_by_this_id": "{{number}} poster med denne ID-en",
|
||||
"ban_expires_at": "Utestengt fra p/{{address}} til {{timestamp}}",
|
||||
"user_banned": "Brukeren ble utestengt for dette innlegget"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "przez",
|
||||
"last_reply_by": "Ostatnia odpowiedź od",
|
||||
"showing_all_replies": "Wyświetlanie wszystkich odpowiedzi.",
|
||||
"x_posts_by_this_user_address": "{{number}} postów z tego adresu użytkownika",
|
||||
"1_post_by_this_user_address": "1 post z tego adresu użytkownika",
|
||||
"highlight_posts": "Wyróżnij posty z tego adresu użytkownika",
|
||||
"display_name_too_long": "nazwa wyświetlana jest zbyt długa",
|
||||
"title_too_long": "tytuł jest zbyt długi"
|
||||
"title_too_long": "tytuł jest zbyt długi",
|
||||
"1_post_by_this_id": "1 post z tym identyfikatorem",
|
||||
"x_posts_by_this_id": "{{number}} postów z tego identyfikatora",
|
||||
"ban_expires_at": "Zablokowany na p/{{address}} do {{timestamp}}",
|
||||
"user_banned": "Użytkownik został zablokowany za ten post"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "por",
|
||||
"last_reply_by": "Última resposta por",
|
||||
"showing_all_replies": "Mostrando todas as respostas.",
|
||||
"x_posts_by_this_user_address": "{{number}} postagens deste endereço de usuário",
|
||||
"1_post_by_this_user_address": "1 postagem deste endereço de usuário",
|
||||
"highlight_posts": "Destacar postagens deste endereço de usuário",
|
||||
"display_name_too_long": "nome de exibição muito longo",
|
||||
"title_too_long": "título muito longo"
|
||||
"title_too_long": "título muito longo",
|
||||
"1_post_by_this_id": "1 post com este ID",
|
||||
"x_posts_by_this_id": "{{number}} posts com este ID",
|
||||
"ban_expires_at": "Banido de p/{{address}} até {{timestamp}}",
|
||||
"user_banned": "O usuário foi banido por este post"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "de către",
|
||||
"last_reply_by": "Ultima răspuns de la",
|
||||
"showing_all_replies": "Afișare toate răspunsurile.",
|
||||
"x_posts_by_this_user_address": "{{number}} mesaje de la această adresă de utilizator",
|
||||
"1_post_by_this_user_address": "1 mesaj de la această adresă de utilizator",
|
||||
"highlight_posts": "Evidențiați mesajele de la această adresă de utilizator",
|
||||
"display_name_too_long": "numele afișat este prea lung",
|
||||
"title_too_long": "titlul este prea lung"
|
||||
"title_too_long": "titlul este prea lung",
|
||||
"1_post_by_this_id": "1 post cu acest ID",
|
||||
"x_posts_by_this_id": "{{number}} postări cu acest ID",
|
||||
"ban_expires_at": "Interzis de la p/{{address}} până la {{timestamp}}",
|
||||
"user_banned": "Utilizatorul a fost interzis pentru acest mesaj"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "от",
|
||||
"last_reply_by": "Последний ответ от",
|
||||
"showing_all_replies": "Показываются все ответы.",
|
||||
"x_posts_by_this_user_address": "{{number}} сообщений с этого адреса пользователя",
|
||||
"1_post_by_this_user_address": "1 сообщение с этого адреса пользователя",
|
||||
"highlight_posts": "Выделить сообщения с этого адреса пользователя",
|
||||
"display_name_too_long": "отображаемое имя слишком длинное",
|
||||
"title_too_long": "заголовок слишком длинный"
|
||||
"title_too_long": "заголовок слишком длинный",
|
||||
"1_post_by_this_id": "1 сообщение с этим идентификатором",
|
||||
"x_posts_by_this_id": "{{number}} сообщений с этого идентификатора",
|
||||
"ban_expires_at": "Забанен на p/{{address}} до {{timestamp}}",
|
||||
"user_banned": "Пользователь был заблокирован за этот пост"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "nga",
|
||||
"last_reply_by": "Përgjigje e fundit nga",
|
||||
"showing_all_replies": "Duke treguar të gjitha përgjigjet.",
|
||||
"x_posts_by_this_user_address": "{{number}} postime nga ky adresa e përdoruesit",
|
||||
"1_post_by_this_user_address": "1 postim nga ky adresa e përdoruesit",
|
||||
"highlight_posts": "Shëno postime nga ky adresa e përdoruesit",
|
||||
"display_name_too_long": "emri i shfaqur është shumë i gjatë",
|
||||
"title_too_long": "titulli shumë i gjatë"
|
||||
"title_too_long": "titulli shumë i gjatë",
|
||||
"1_post_by_this_id": "1 postim me këtë ID",
|
||||
"x_posts_by_this_id": "{{number}} postime nga ky ID",
|
||||
"ban_expires_at": "I ndaluar nga p/{{address}} deri më {{timestamp}}",
|
||||
"user_banned": "Përdoruesi u ndalua për këtë postim"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "av",
|
||||
"last_reply_by": "Senaste svar av",
|
||||
"showing_all_replies": "Visar alla svar.",
|
||||
"x_posts_by_this_user_address": "{{number}} inlägg från denna användaradress",
|
||||
"1_post_by_this_user_address": "1 inlägg från denna användaradress",
|
||||
"highlight_posts": "Markera inlägg från denna användaradress",
|
||||
"display_name_too_long": "visningsnamn för långt",
|
||||
"title_too_long": "titel för långt"
|
||||
"title_too_long": "titel för långt",
|
||||
"1_post_by_this_id": "1 inlägg med detta ID",
|
||||
"x_posts_by_this_id": "{{number}} inlägg från detta ID",
|
||||
"ban_expires_at": "Bannad från p/{{address}} till {{timestamp}}",
|
||||
"user_banned": "Användaren blev blockerad för detta inlägg"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "ద్వారా",
|
||||
"last_reply_by": "చివరి సమాధానం ఇచ్చింది",
|
||||
"showing_all_replies": "అన్ని సమాధానాలను చూపుతుంది.",
|
||||
"x_posts_by_this_user_address": "ఈ వాడుకరి చిరునామ నుండి {{number}} పోస్టులు",
|
||||
"1_post_by_this_user_address": "ఈ వాడుకరి చిరునామ నుండి 1 పోస్టు",
|
||||
"highlight_posts": "ఈ వాడుకరి చిరునామ నుండి పోస్టులను హైలైట్ చేయండి",
|
||||
"display_name_too_long": "ప్రదర్శన పేరు చాలా నీటిగా ఉంది",
|
||||
"title_too_long": "శీర్షిక చాలా పొడవుగా ఉంది"
|
||||
"title_too_long": "శీర్షిక చాలా పొడవుగా ఉంది",
|
||||
"1_post_by_this_id": "ఈ ID ద్వారా 1 పోస్టు",
|
||||
"x_posts_by_this_id": "ఈ ID నుండి {{number}} పోస్టు",
|
||||
"ban_expires_at": "p/{{address}} నుండి {{timestamp}} వరకు నిషేధించబడింది",
|
||||
"user_banned": "ఈ పోస్టు కోసం వాడు బ్యాన్ చేయబడింది"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "โดย",
|
||||
"last_reply_by": "การตอบคำถามล่าสุดโดย",
|
||||
"showing_all_replies": "กำลังแสดงคำตอบทั้งหมด",
|
||||
"x_posts_by_this_user_address": "{{number}} โพสต์โดยที่อยู่ผู้ใช้นี้",
|
||||
"1_post_by_this_user_address": "1 โพสต์โดยที่อยู่ผู้ใช้นี้",
|
||||
"highlight_posts": "เน้นโพสต์โดยที่อยู่ผู้ใช้นี้",
|
||||
"display_name_too_long": "ชื่อที่แสดงนามสกุลยาวเกินไป",
|
||||
"title_too_long": "ชื่อเรื่องยาวเกินไป"
|
||||
"title_too_long": "ชื่อเรื่องยาวเกินไป",
|
||||
"1_post_by_this_id": "1 โพสต์โดย ID นี้",
|
||||
"x_posts_by_this_id": "{{number}} โพสต์จาก ID นี้",
|
||||
"ban_expires_at": "ถูกห้ามใช้งานจาก p/{{address}} จนถึง {{timestamp}}",
|
||||
"user_banned": "ผู้ใช้ถูกห้ามใช้งานสำหรับโพสต์นี้"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "tarafından",
|
||||
"last_reply_by": "Son cevap",
|
||||
"showing_all_replies": "Tüm yanıtlar gösteriliyor.",
|
||||
"x_posts_by_this_user_address": "Bu kullanıcı adresinden {{number}} gönderi",
|
||||
"1_post_by_this_user_address": "Bu kullanıcı adresinden 1 gönderi",
|
||||
"highlight_posts": "Bu kullanıcı adresinden gelen gönderileri vurgula",
|
||||
"display_name_too_long": "görünen adı çok uzun",
|
||||
"title_too_long": "başlık çok uzun"
|
||||
"title_too_long": "başlık çok uzun",
|
||||
"1_post_by_this_id": "Bu ID ile 1 gönderi",
|
||||
"x_posts_by_this_id": "Bu ID ile {{number}} gönderi",
|
||||
"ban_expires_at": "p/{{address}} adresinden {{timestamp}} tarihine kadar yasaklandı",
|
||||
"user_banned": "Kullanıcı bu gönderi için yasaklandı"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "від",
|
||||
"last_reply_by": "Остання відповідь від",
|
||||
"showing_all_replies": "Показуються всі відповіді.",
|
||||
"x_posts_by_this_user_address": "{{number}} повідомлень з цієї адреси користувача",
|
||||
"1_post_by_this_user_address": "1 повідомлення з цієї адреси користувача",
|
||||
"highlight_posts": "Виділити повідомлення з цієї адреси користувача",
|
||||
"display_name_too_long": "ім'я відображається занадто довге",
|
||||
"title_too_long": "заголовок відображається занадто довгий"
|
||||
"title_too_long": "заголовок відображається занадто довгий",
|
||||
"1_post_by_this_id": "1 пост з цим ідентифікатором",
|
||||
"x_posts_by_this_id": "{{number}} пост з цього ідентифікатора",
|
||||
"ban_expires_at": "Заборонений з p/{{address}} до {{timestamp}}",
|
||||
"user_banned": "Користувач був заблокований за цей пост"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "کے ذریعے",
|
||||
"last_reply_by": "آخری جواب دیا گیا",
|
||||
"showing_all_replies": "تمام جوابات دکھا رہا ہے۔",
|
||||
"x_posts_by_this_user_address": "اس صارف ایڈریس کے {{number}} پوسٹس",
|
||||
"1_post_by_this_user_address": "1 پوسٹ اس صارف ایڈریس کے",
|
||||
"highlight_posts": "اس صارف ایڈریس کے ذریعے پوسٹس کو ہائی لائٹ کریں",
|
||||
"display_name_too_long": "ڈسپلے نام بہت لمبا ہے",
|
||||
"title_too_long": "عنوان بہت لمبا ہے"
|
||||
"title_too_long": "عنوان بہت لمبا ہے",
|
||||
"1_post_by_this_id": "اس آئی ڈی پر 1 پوسٹ",
|
||||
"x_posts_by_this_id": "اس آئی ڈی سے {{number}} پوسٹ",
|
||||
"ban_expires_at": "p/{{address}} سے {{timestamp}} تک ممنوع",
|
||||
"user_banned": "اس پوسٹ کے لئے صارف کو پابندی عائد کردی گئی تھی"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "bởi",
|
||||
"last_reply_by": "Trả lời cuối cùng bởi",
|
||||
"showing_all_replies": "Đang hiển thị tất cả các phản hồi.",
|
||||
"x_posts_by_this_user_address": "{{number}} bài đăng từ địa chỉ người dùng này",
|
||||
"1_post_by_this_user_address": "1 bài đăng từ địa chỉ người dùng này",
|
||||
"highlight_posts": "Đánh dấu bài đăng từ địa chỉ người dùng này",
|
||||
"display_name_too_long": "tên hiển thị quá dài",
|
||||
"title_too_long": "tiêu đề quá dài"
|
||||
"title_too_long": "tiêu đề quá dài",
|
||||
"1_post_by_this_id": "1 bài đăng bởi ID này",
|
||||
"x_posts_by_this_id": "{{number}} bài đăng từ ID này",
|
||||
"ban_expires_at": "Bị cấm từ p/{{address}} cho đến {{timestamp}}",
|
||||
"user_banned": "Người dùng đã bị cấm vì bài đăng này"
|
||||
}
|
||||
@@ -204,9 +204,11 @@
|
||||
"by": "由...发布",
|
||||
"last_reply_by": "最后回复者",
|
||||
"showing_all_replies": "显示所有回复。",
|
||||
"x_posts_by_this_user_address": "此用户地址的{{number}}篇帖子",
|
||||
"1_post_by_this_user_address": "此用户地址的1篇帖子",
|
||||
"highlight_posts": "突出显示此用户地址的帖子",
|
||||
"display_name_too_long": "显示名称太长",
|
||||
"title_too_long": "标题太长"
|
||||
"title_too_long": "标题太长",
|
||||
"1_post_by_this_id": "此ID的1篇帖子",
|
||||
"x_posts_by_this_id": "此ID的{{number}}篇帖子",
|
||||
"ban_expires_at": "被禁止从p/{{address}}到{{timestamp}}",
|
||||
"user_banned": "用户因此帖子被禁止"
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
import { useEffect, useRef, useState } from 'react';
|
||||
import { useState } from 'react';
|
||||
import { Trans, useTranslation } from 'react-i18next';
|
||||
import { autoUpdate, flip, FloatingFocusManager, offset, shift, useClick, useDismiss, useFloating, useId, useInteractions, useRole } from '@floating-ui/react';
|
||||
import { Comment, PublishCommentEditOptions, usePublishCommentEdit } from '@plebbit/plebbit-react-hooks';
|
||||
@@ -17,25 +17,27 @@ type EditMenuProps = {
|
||||
post: Comment;
|
||||
};
|
||||
|
||||
const daysToTimestampInSeconds = (days: number) => {
|
||||
const now = new Date();
|
||||
now.setDate(now.getDate() + days);
|
||||
return Math.floor(now.getTime() / 1000);
|
||||
};
|
||||
|
||||
const timestampToDays = (timestamp: number) => {
|
||||
const now = Math.floor(Date.now() / 1000);
|
||||
return Math.max(1, Math.floor((timestamp - now) / (24 * 60 * 60)));
|
||||
};
|
||||
|
||||
const EditMenu = ({ isAccountMod, isAccountCommentAuthor, isCommentAuthorMod, post }: EditMenuProps) => {
|
||||
const { t } = useTranslation();
|
||||
const isMobile = useIsMobile();
|
||||
|
||||
const { banExpiresAt, cid, content, deleted, locked, parentCid, pinned, removed, spoiler, subplebbitAddress } = post || {};
|
||||
const { cid, commentAuthor, content, deleted, locked, parentCid, pinned, reason, removed, spoiler, subplebbitAddress } = post || {};
|
||||
const isReply = parentCid;
|
||||
|
||||
const [isEditMenuOpen, setIsEditMenuOpen] = useState(false);
|
||||
|
||||
const [isContentEditorOpen, setIsContentEditorOpen] = useState(false);
|
||||
const contentEditorRef = useRef<HTMLTextAreaElement>(null);
|
||||
useEffect(() => {
|
||||
if (contentEditorRef.current) {
|
||||
contentEditorRef.current.focus();
|
||||
}
|
||||
}, []);
|
||||
|
||||
const defaultPublishEditOptions: PublishCommentEditOptions = {
|
||||
commentAuthor: isAccountMod && !isAccountCommentAuthor && banExpiresAt !== undefined ? { banExpiresAt } : undefined,
|
||||
commentAuthor: isAccountMod && !isAccountCommentAuthor ? commentAuthor : undefined,
|
||||
commentCid: cid,
|
||||
content: isAccountCommentAuthor ? content : undefined,
|
||||
deleted: isAccountCommentAuthor ? deleted : undefined,
|
||||
@@ -55,13 +57,9 @@ const EditMenu = ({ isAccountMod, isAccountCommentAuthor, isCommentAuthorMod, po
|
||||
const [publishCommentEditOptions, setPublishCommentEditOptions] = useState(defaultPublishEditOptions);
|
||||
const { publishCommentEdit } = usePublishCommentEdit(publishCommentEditOptions);
|
||||
|
||||
const [banDuration, setBanDuration] = useState(1);
|
||||
|
||||
const daysToTimestampInSeconds = (days: number) => {
|
||||
const now = new Date();
|
||||
now.setDate(now.getDate() + days);
|
||||
return Math.floor(now.getTime() / 1000);
|
||||
};
|
||||
const [banDuration, setBanDuration] = useState(() =>
|
||||
publishCommentEditOptions.commentAuthor?.banExpiresAt ? timestampToDays(publishCommentEditOptions.commentAuthor.banExpiresAt) : 1,
|
||||
);
|
||||
|
||||
const onCheckbox = (e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
const { id, checked } = e.target;
|
||||
@@ -145,8 +143,8 @@ const EditMenu = ({ isAccountMod, isAccountCommentAuthor, isCommentAuthorMod, po
|
||||
<textarea
|
||||
className={styles.editTextarea}
|
||||
value={publishCommentEditOptions.content ?? ''}
|
||||
ref={contentEditorRef}
|
||||
onChange={(e) => setPublishCommentEditOptions((state) => ({ ...state, content: e.target.value }))}
|
||||
autoFocus={true}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
@@ -157,7 +155,7 @@ const EditMenu = ({ isAccountMod, isAccountCommentAuthor, isCommentAuthorMod, po
|
||||
<div className={styles.menuItem}>
|
||||
<label>
|
||||
[
|
||||
<input onChange={onCheckbox} checked={publishCommentEditOptions.removed ?? false} type='checkbox' id='removed' />
|
||||
<input onChange={onCheckbox} checked={publishCommentEditOptions.removed} type='checkbox' id='removed' />
|
||||
{_.capitalize(t('remove'))}?]
|
||||
</label>
|
||||
</div>
|
||||
@@ -165,7 +163,7 @@ const EditMenu = ({ isAccountMod, isAccountCommentAuthor, isCommentAuthorMod, po
|
||||
<div className={styles.menuItem}>
|
||||
[
|
||||
<label>
|
||||
<input onChange={onCheckbox} checked={publishCommentEditOptions.locked ?? false} type='checkbox' id='locked' />
|
||||
<input onChange={onCheckbox} checked={publishCommentEditOptions.locked} type='checkbox' id='locked' />
|
||||
{_.capitalize(t('close_thread'))}?
|
||||
</label>
|
||||
]
|
||||
@@ -174,7 +172,7 @@ const EditMenu = ({ isAccountMod, isAccountCommentAuthor, isCommentAuthorMod, po
|
||||
<div className={styles.menuItem}>
|
||||
[
|
||||
<label>
|
||||
<input onChange={onCheckbox} checked={publishCommentEditOptions.spoiler ?? false} type='checkbox' id='spoiler' />
|
||||
<input onChange={onCheckbox} checked={publishCommentEditOptions.spoiler} type='checkbox' id='spoiler' />
|
||||
{_.capitalize(t('spoiler'))}?
|
||||
</label>
|
||||
]
|
||||
@@ -182,7 +180,7 @@ const EditMenu = ({ isAccountMod, isAccountCommentAuthor, isCommentAuthorMod, po
|
||||
<div className={styles.menuItem}>
|
||||
[
|
||||
<label>
|
||||
<input onChange={onCheckbox} checked={publishCommentEditOptions.pinned ?? false} type='checkbox' id='pinned' />
|
||||
<input onChange={onCheckbox} checked={publishCommentEditOptions.pinned} type='checkbox' id='pinned' />
|
||||
{_.capitalize(t('sticky'))}?
|
||||
</label>
|
||||
]
|
||||
@@ -191,12 +189,12 @@ const EditMenu = ({ isAccountMod, isAccountCommentAuthor, isCommentAuthorMod, po
|
||||
<div className={styles.menuItem}>
|
||||
[
|
||||
<label>
|
||||
<input onChange={onCheckbox} checked={!!publishCommentEditOptions.commentAuthor?.banExpiresAt ?? false} type='checkbox' id='banUser' />
|
||||
<input onChange={onCheckbox} checked={publishCommentEditOptions.commentAuthor?.banExpiresAt !== undefined} type='checkbox' id='banUser' />
|
||||
<Trans
|
||||
i18nKey='ban_user_for'
|
||||
shouldUnescape={true}
|
||||
components={{
|
||||
1: <input className={styles.banInput} onChange={onBanDurationChange} type='number' min={1} max={100} defaultValue={banDuration} />,
|
||||
1: <input className={styles.banInput} onChange={onBanDurationChange} type='number' min={1} max={100} value={banDuration} />,
|
||||
}}
|
||||
/>
|
||||
?
|
||||
@@ -208,7 +206,7 @@ const EditMenu = ({ isAccountMod, isAccountCommentAuthor, isCommentAuthorMod, po
|
||||
)}
|
||||
<div className={`${styles.menuItem} ${styles.menuReason}`}>
|
||||
{_.capitalize(t('reason'))}? ({t('optional')})
|
||||
<input type='text' onChange={onReason} defaultValue={post?.reason ?? ''} size={14} />
|
||||
<input type='text' onChange={onReason} defaultValue={reason ?? ''} size={14} />
|
||||
</div>
|
||||
<div className={styles.bottom}>
|
||||
<button className={isMobile ? 'button' : ''} onClick={_publishCommentEdit}>
|
||||
|
||||
@@ -106,7 +106,7 @@ const PostInfo = ({ openReplyModal, post, postReplyCount = 0, roles, isHidden }:
|
||||
{shortAddress || accountShortAddress}
|
||||
</span>
|
||||
}
|
||||
content={`${numberOfPostsByAuthor === 1 ? t('1_post_by_this_user_address') : t('x_posts_by_this_user_address', { number: numberOfPostsByAuthor })}`}
|
||||
content={`${numberOfPostsByAuthor === 1 ? t('1_post_by_this_id') : t('x_posts_by_this_id', { number: numberOfPostsByAuthor })}`}
|
||||
showTooltip={isInPostPageView || showOmittedReplies[postCid] || (postReplyCount < 6 && !pinned)}
|
||||
/>
|
||||
){' '}
|
||||
@@ -217,7 +217,8 @@ const PostMedia = ({ post }: PostProps) => {
|
||||
};
|
||||
|
||||
const PostMessage = ({ post }: PostProps) => {
|
||||
const { cid, content, deleted, edit, original, parentCid, postCid, reason, removed, spoiler, state, subplebbitAddress } = post || {};
|
||||
const { cid, content, commentAuthor, deleted, edit, original, parentCid, postCid, reason, removed, spoiler, state, subplebbitAddress } = post || {};
|
||||
const banned = !!commentAuthor?.banExpiresAt;
|
||||
const { t } = useTranslation();
|
||||
const params = useParams();
|
||||
const location = useLocation();
|
||||
@@ -241,9 +242,13 @@ const PostMessage = ({ post }: PostProps) => {
|
||||
<blockquote className={styles.postMessage}>
|
||||
{isReply && !(removed || deleted) && isReplyingToReply && <ReplyQuotePreview isQuotelinkReply={true} quotelinkReply={quotelinkReply} />}
|
||||
{removed ? (
|
||||
<span className={styles.removedContent}>({t('this_post_was_removed')})</span>
|
||||
<Tooltip
|
||||
children={<span className={styles.removedContent}>({t('this_post_was_removed')})</span>}
|
||||
content={`${_.capitalize(t('reason'))}: "${reason}"`}
|
||||
showTooltip={!!reason}
|
||||
/>
|
||||
) : deleted ? (
|
||||
<span className={styles.deletedContent}>{t('user_deleted_this_post')}</span>
|
||||
<Tooltip children={<span className={styles.deletedContent}>{t('user_deleted_this_post')}</span>} content={reason && `${t('reason')}: ${reason}`} />
|
||||
) : (
|
||||
<>
|
||||
{!showOriginal && <Markdown content={displayContent} spoiler={spoiler} />}
|
||||
@@ -270,11 +275,18 @@ const PostMessage = ({ post }: PostProps) => {
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
{(removed || deleted) && reason && (
|
||||
<span>
|
||||
{banned && (
|
||||
<span className={styles.removedContent}>
|
||||
<br />
|
||||
<br />
|
||||
{t('reason')}: {reason}
|
||||
<Tooltip
|
||||
children={`(${t('user_banned')})`}
|
||||
content={`${t('ban_expires_at', {
|
||||
address: subplebbitAddress && Plebbit.getShortAddress(subplebbitAddress),
|
||||
timestamp: getFormattedDate(commentAuthor?.banExpiresAt),
|
||||
interpolation: { escapeValue: false },
|
||||
})}${reason ? `. ${_.capitalize(t('reason'))}: "${reason}"` : ''}`}
|
||||
/>
|
||||
</span>
|
||||
)}
|
||||
{!isReply && content.length > 1000 && !isInPostView && (
|
||||
@@ -371,7 +383,7 @@ const PostDesktop = ({ openReplyModal, post, roles, showAllReplies, showReplies
|
||||
{!isHidden && !content && <div className={styles.spacer} />}
|
||||
{!isHidden && content && <PostMessage post={post} />}
|
||||
</div>
|
||||
{!isHidden && !isDescription && !isRules && !isInPendingPostView && (replies.length > 5 || (pinned && replies.length > 0)) && !isInPostPageView && (
|
||||
{!isHidden && !isDescription && !isRules && !isInPendingPostView && (repliesCount > 5 || (pinned && repliesCount > 0)) && !isInPostPageView && (
|
||||
<span className={styles.summary}>
|
||||
<span
|
||||
className={`${showOmittedReplies[cid] ? styles.hideOmittedReplies : styles.showOmittedReplies} ${styles.omittedRepliesButtonWrapper}`}
|
||||
|
||||
@@ -80,7 +80,7 @@ const PostInfoAndMedia = ({ openReplyModal, post, postReplyCount = 0, roles }: P
|
||||
{shortAddress || accountShortAddress}
|
||||
</span>
|
||||
}
|
||||
content={`${numberOfPostsByAuthor === 1 ? t('1_post_by_this_user_address') : t('x_posts_by_this_user_address', { number: numberOfPostsByAuthor })}`}
|
||||
content={`${numberOfPostsByAuthor === 1 ? t('1_post_by_this_id') : t('x_posts_by_this_id', { number: numberOfPostsByAuthor })}`}
|
||||
showTooltip={isInPostPageView || postReplyCount < 6}
|
||||
/>
|
||||
){' '}
|
||||
@@ -152,7 +152,8 @@ const ReplyBacklinks = ({ post }: PostProps) => {
|
||||
|
||||
const PostMessageMobile = ({ post }: PostProps) => {
|
||||
const { t } = useTranslation();
|
||||
const { cid, content, deleted, edit, original, parentCid, postCid, reason, removed, spoiler, state, subplebbitAddress } = post || {};
|
||||
const { cid, commentAuthor, content, deleted, edit, original, parentCid, postCid, reason, removed, spoiler, state, subplebbitAddress } = post || {};
|
||||
const banned = !!commentAuthor?.banExpiresAt;
|
||||
const [showOriginal, setShowOriginal] = useState(false);
|
||||
|
||||
const params = useParams();
|
||||
@@ -177,9 +178,13 @@ const PostMessageMobile = ({ post }: PostProps) => {
|
||||
<blockquote className={`${styles.postMessage} ${!isReply && styles.clampLines}`}>
|
||||
{isReply && !(removed || deleted) && isReplyingToReply && <ReplyQuotePreview isQuotelinkReply={true} quotelinkReply={quotelinkReply} />}
|
||||
{removed ? (
|
||||
<span className={styles.removedContent}>({t('this_post_was_removed')})</span>
|
||||
<Tooltip
|
||||
children={<span className={styles.removedContent}>({t('this_post_was_removed')})</span>}
|
||||
content={`${_.capitalize(t('reason'))}: "${reason}"`}
|
||||
showTooltip={!!reason}
|
||||
/>
|
||||
) : deleted ? (
|
||||
<span className={styles.removedContent}>{t('user_deleted_this_post')}</span>
|
||||
<Tooltip children={<span className={styles.deletedContent}>{t('user_deleted_this_post')}</span>} content={reason && `${t('reason')}: ${reason}`} />
|
||||
) : (
|
||||
<>
|
||||
{!showOriginal && <Markdown content={displayContent} spoiler={spoiler} />}
|
||||
@@ -206,11 +211,18 @@ const PostMessageMobile = ({ post }: PostProps) => {
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
{(removed || deleted) && reason && (
|
||||
<span>
|
||||
{banned && (
|
||||
<span className={styles.removedContent}>
|
||||
<br />
|
||||
<br />
|
||||
reason: {reason}
|
||||
<Tooltip
|
||||
children={`(${t('user_banned')})`}
|
||||
content={`${t('ban_expires_at', {
|
||||
address: subplebbitAddress && Plebbit.getShortAddress(subplebbitAddress),
|
||||
timestamp: getFormattedDate(commentAuthor?.banExpiresAt),
|
||||
interpolation: { escapeValue: false },
|
||||
})}${reason ? `. ${_.capitalize(t('reason'))}: "${reason}"` : ''}`}
|
||||
/>
|
||||
</span>
|
||||
)}
|
||||
{!isReply && content.length > 1000 && !isInPostView && (
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { useState, ReactNode } from 'react';
|
||||
import { useFloating, autoUpdate, offset, flip, shift, useHover, useFocus, useDismiss, useRole, useInteractions, FloatingPortal } from '@floating-ui/react';
|
||||
import { useFloating, autoUpdate, offset, shift, useHover, useFocus, useDismiss, useRole, useInteractions, FloatingPortal } from '@floating-ui/react';
|
||||
import styles from './tooltip.module.css';
|
||||
|
||||
interface TooltipProps {
|
||||
@@ -16,13 +16,7 @@ const Tooltip = ({ content, children, showTooltip = true }: TooltipProps) => {
|
||||
onOpenChange: setIsOpen,
|
||||
placement: 'top',
|
||||
whileElementsMounted: autoUpdate,
|
||||
middleware: [
|
||||
offset(5),
|
||||
flip({
|
||||
fallbackAxisSideDirection: 'start',
|
||||
}),
|
||||
shift(),
|
||||
],
|
||||
middleware: [offset(5), shift()],
|
||||
});
|
||||
|
||||
const hover = useHover(context, { move: false, delay: { open: 500, close: 0 } });
|
||||
|
||||
@@ -44,7 +44,6 @@
|
||||
background-color: var(--topbar-mobile-background-color);
|
||||
border-bottom: var(--topbar-mobile-border-bottom);
|
||||
font-size: var(--topbar-mobile-font-size);
|
||||
color: var(--topbar-mobile-button-text-color);
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
z-index: 3;
|
||||
@@ -54,7 +53,7 @@
|
||||
}
|
||||
|
||||
.boardNavMobile .pageJump a, .boardNavMobile .pageJump span {
|
||||
color: var(--topbar-mobile-button-color);
|
||||
color: var(--topbar-mobile-button-text-color);
|
||||
text-decoration: var(--button-text-decoration-mobile);
|
||||
}
|
||||
|
||||
|
||||
@@ -169,7 +169,7 @@ const TopBarMobile = ({ subplebbitAddress }: { subplebbitAddress: string }) => {
|
||||
<strong>{t('board')}</strong>
|
||||
{boardSelect}
|
||||
{(isInAllView || isInSubscriptionsView) && (
|
||||
<TimeFilter isTopbar={true} isInAllView={isInAllView} isInCatalogView={false} isInSubscriptionsView={isInSubscriptionsView} />
|
||||
<TimeFilter isTopbar={true} isInAllView={isInAllView} isInCatalogView={isInCatalogView} isInSubscriptionsView={isInSubscriptionsView} />
|
||||
)}
|
||||
</div>
|
||||
<div className={styles.pageJump}>
|
||||
|
||||
+4
-4
@@ -30,6 +30,10 @@ hr {
|
||||
text-transform: capitalize;
|
||||
}
|
||||
|
||||
* {
|
||||
color-scheme: var(--color-scheme, revert);
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.button {
|
||||
font-size: var(--button-font-size-mobile);
|
||||
@@ -48,10 +52,6 @@ hr {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
select {
|
||||
filter: var(--filter80);
|
||||
}
|
||||
|
||||
.highlight {
|
||||
background: var(--reply-highlight-background-color) !important;
|
||||
}
|
||||
|
||||
@@ -44,9 +44,11 @@ export const isCatalogView = (pathname: string, params: ParamsType): boolean =>
|
||||
decodedPathname === `/p/all/catalog` ||
|
||||
decodedPathname === `/p/all/catalog/settings` ||
|
||||
decodedPathname === `/p/all/catalog/${timeFilterName}` ||
|
||||
decodedPathname === `/p/all/catalog/${timeFilterName}/settings` ||
|
||||
decodedPathname === `/p/subscriptions/catalog` ||
|
||||
decodedPathname === `/p/subscriptions/catalog/settings` ||
|
||||
decodedPathname === `/p/subscriptions/catalog/${timeFilterName}`
|
||||
decodedPathname === `/p/subscriptions/catalog/${timeFilterName}` ||
|
||||
decodedPathname === `/p/subscriptions/catalog/${timeFilterName}/settings`
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
+2
-5
@@ -763,6 +763,8 @@
|
||||
}
|
||||
|
||||
:root .tomorrow {
|
||||
--color-scheme: dark;
|
||||
|
||||
/* backlink */
|
||||
--post-backlink-text-color: #5f89ac;
|
||||
--post-backlink-text-decoration: underline;
|
||||
@@ -944,11 +946,6 @@
|
||||
--reply-highlight-border-left: 1px solid #111;
|
||||
--reply-highlight-border-top: 1px solid #111;
|
||||
|
||||
/* select */
|
||||
--select-border: 1px solid #575a60;
|
||||
--select-background-color: #282a2e;
|
||||
--select-color: #c5c8c6;
|
||||
|
||||
/* settings modal */
|
||||
--settings-modal-font-size: 14px;
|
||||
--settings-modal-background-color: #282a2e;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
position: relative;
|
||||
margin-bottom: 0.5em;
|
||||
padding-bottom: 0.5em;
|
||||
border: 1px solid var(--homepage-box-border-color);
|
||||
border: 1px solid;
|
||||
}
|
||||
|
||||
.boxBar {
|
||||
@@ -38,6 +38,7 @@
|
||||
.infoBox {
|
||||
background: var(--homepage-box-background-color);
|
||||
color: var(--homepage-infobox-text-color);
|
||||
border: 1px solid var(--homepage-box-border-color);
|
||||
}
|
||||
|
||||
.infoBox .boxBar {
|
||||
|
||||
@@ -1,8 +1,14 @@
|
||||
import { useEffect } from 'react';
|
||||
import { HashLink } from 'react-router-hash-link';
|
||||
import { Footer, HomeLogo } from '../home';
|
||||
import styles from './faq.module.css';
|
||||
|
||||
const FAQ = () => {
|
||||
useEffect(() => {
|
||||
window.scrollTo(0, 0);
|
||||
document.title = 'FAQ - plebchan';
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div className={styles.wrapper}>
|
||||
<div className={styles.content}>
|
||||
|
||||
@@ -25,6 +25,10 @@
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
|
||||
.infoBox {
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
.boardsBox {
|
||||
overflow: hidden;
|
||||
min-height: 150px;
|
||||
@@ -105,6 +109,10 @@
|
||||
padding: 3px 10px;
|
||||
}
|
||||
|
||||
.searchBar input:focus {
|
||||
border-color: #ea8;
|
||||
}
|
||||
|
||||
.searchButton {
|
||||
margin-left: 4px;
|
||||
padding: 3px 5px;
|
||||
|
||||
@@ -47,7 +47,7 @@ const SearchBar = () => {
|
||||
const InfoBox = () => {
|
||||
const { t } = useTranslation();
|
||||
return (
|
||||
<div className={styles.box}>
|
||||
<div className={`${styles.box} ${styles.infoBox}`}>
|
||||
<div className={styles.infoboxBar}>
|
||||
<h2>{t('what_is_plebchan')}</h2>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
.content {
|
||||
margin-bottom: 150px;
|
||||
margin-bottom: 15px;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useEffect } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { Role, useComment, useEditedComment, useSubplebbit } from '@plebbit/plebbit-react-hooks';
|
||||
import { Comment, Role, useComment, useEditedComment, useSubplebbit } from '@plebbit/plebbit-react-hooks';
|
||||
import { useLocation, useParams } from 'react-router-dom';
|
||||
import { isDescriptionView, isRulesView, isSettingsView } from '../../lib/utils/view-utils';
|
||||
import useIsMobile from '../../hooks/use-is-mobile';
|
||||
@@ -68,7 +68,7 @@ const PostPage = () => {
|
||||
|
||||
// if the comment is a reply, return the post comment instead, then the reply will be highlighted in the thread
|
||||
const postComment = useComment({ commentCid: comment?.postCid });
|
||||
let post;
|
||||
let post: Comment;
|
||||
if (comment.parentCid) {
|
||||
post = postComment;
|
||||
} else {
|
||||
@@ -82,6 +82,12 @@ const PostPage = () => {
|
||||
window.scrollTo(0, 0);
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
const boardTitle = title ? title : shortAddress || subplebbitAddress;
|
||||
const postTitle = post?.title?.slice(0, 30) || post?.content?.slice(0, 30);
|
||||
document.title = (postTitle ? postTitle.trim() + '... - ' : '') + boardTitle + ' - plebchan';
|
||||
}, [title, shortAddress, subplebbitAddress, post?.title, post?.content]);
|
||||
|
||||
return (
|
||||
<div className={styles.content}>
|
||||
{isInSettigsView && <SettingsModal />}
|
||||
|
||||
Reference in New Issue
Block a user