mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
@@ -9,6 +9,7 @@
|
||||
"@capacitor/app": "6.0.1",
|
||||
"@floating-ui/react": "0.26.1",
|
||||
"@plebbit/plebbit-react-hooks": "https://github.com/plebbit/plebbit-react-hooks.git#6d35eb3b4dc84f8fdcbb46d95e3b1d78f1750b5f",
|
||||
"@react-spring/web": "9.7.5",
|
||||
"@testing-library/jest-dom": "5.14.1",
|
||||
"@testing-library/react": "13.0.0",
|
||||
"@testing-library/user-event": "13.2.1",
|
||||
@@ -16,6 +17,7 @@
|
||||
"@types/node": "20.8.2",
|
||||
"@types/react": "18.2.25",
|
||||
"@types/react-dom": "18.2.10",
|
||||
"@use-gesture/react": "10.3.1",
|
||||
"cross-env": "7.0.3",
|
||||
"electron-context-menu": "3.3.0",
|
||||
"electron-is-dev": "2.0.0",
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 89 KiB |
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "التعليق طويل جدًا. <1>اضغط هنا</1> لعرض النص الكامل.",
|
||||
"replies_omitted": "{{repliesCount}} ردود محذوفة. <1>اضغط هنا</1> لعرضها.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} ردود و{{linksCount}} روابط محذوفة. <1>اضغط هنا</1> لعرضها.",
|
||||
"thread_closed_alert": "الموضوع مغلق",
|
||||
"this_thread_is_closed": "الموضوع مغلق",
|
||||
"reply_to_cid": "الرد على {{cid}}",
|
||||
"submit": "إرسال",
|
||||
"gif": "جي آي إف",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "جارٍ تحميل الاشتراكات",
|
||||
"create_board": "إنشاء لوحة",
|
||||
"enter_board_address": "أدخل عنوان أي لوحة",
|
||||
"board_not_reachable": "اللوحة غير قابلة للوصول"
|
||||
"board_not_reachable": "اللوحة غير قابلة للوصول",
|
||||
"cannot_edit_thread": "لا يمكنك تعديل هذا الموضوع",
|
||||
"cannot_edit_reply": "لا يمكنك تعديل هذه الردود",
|
||||
"this_thread_was_deleted": "تم حذف هذا الموضوع بواسطة مؤلفه",
|
||||
"this_thread_was_removed": "تم إزالة هذا الموضوع بواسطة مشرفي المنتدى",
|
||||
"this_reply_was_deleted": "تم حذف هذه الرد من قبل مؤلفه",
|
||||
"this_reply_was_removed": "تمت إزالة هذه الرد من قبل مشرفي المنتدى"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "মন্তব্য খুব দীর্ঘ। <1>পূর্ণ পাঠ্য দেখতে এখানে ক্লিক করুন</1>।",
|
||||
"replies_omitted": "{{repliesCount}}টি উত্তর বাদ দেওয়া হয়েছে। <1>দেখতে এখানে ক্লিক করুন</1>।",
|
||||
"replies_and_links_omitted": "{{repliesCount}}টি উত্তর এবং {{linksCount}}টি লিঙ্ক বাদ দেওয়া হয়েছে। <1>দেখতে এখানে ক্লিক করুন</1>।",
|
||||
"thread_closed_alert": "থ্রেডটি বন্ধ করা হয়েছে",
|
||||
"this_thread_is_closed": "থ্রেডটি বন্ধ করা হয়েছে",
|
||||
"reply_to_cid": "{{cid}}-এ উত্তর দিন",
|
||||
"submit": "জমা দিন",
|
||||
"gif": "জিআইএফ",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "সাবস্ক্রিপশন লোড হচ্ছে",
|
||||
"create_board": "বোর্ড তৈরি করুন",
|
||||
"enter_board_address": "যেকোনো বোর্ডের ঠিকানা লিখুন",
|
||||
"board_not_reachable": "বোর্ডটি অ্যাক্সেসযোগ্য নয়"
|
||||
"board_not_reachable": "বোর্ডটি অ্যাক্সেসযোগ্য নয়",
|
||||
"cannot_edit_thread": "আপনি এই থ্রেডটি সম্পাদনা করতে পারবেন না",
|
||||
"cannot_edit_reply": "আপনি এই রিপ্লাইটি সম্পাদনা করতে পারবেন না",
|
||||
"this_thread_was_deleted": "এই থ্রেডটি এর লেখক দ্বারা মুছে ফেলা হয়েছে",
|
||||
"this_thread_was_removed": "এই থ্রেডটি বোর্ড moderators দ্বারা মুছে ফেলা হয়েছে",
|
||||
"this_reply_was_deleted": "এই প্রতিক্রিয়া তার লেখক দ্বারা মুছে ফেলা হয়েছে",
|
||||
"this_reply_was_removed": "এই প্রতিক্রিয়া বোর্ড পরিচালকদের দ্বারা সরানো হয়েছে"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Komentář je příliš dlouhý. <1>Klikněte zde</1> pro zobrazení celého textu.",
|
||||
"replies_omitted": "{{repliesCount}} odpovědí vynecháno. <1>Klikněte zde</1> pro zobrazení.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} odpovědí a {{linksCount}} odkazů vynecháno. <1>Klikněte zde</1> pro zobrazení.",
|
||||
"thread_closed_alert": "Vlákno je uzavřeno",
|
||||
"this_thread_is_closed": "Vlákno je uzavřeno",
|
||||
"reply_to_cid": "Odpovědět na {{cid}}",
|
||||
"submit": "Odeslat",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Načítání odběrů",
|
||||
"create_board": "Vytvořit desku",
|
||||
"enter_board_address": "Zadejte adresu libovolné desky",
|
||||
"board_not_reachable": "Deska není dostupná"
|
||||
"board_not_reachable": "Deska není dostupná",
|
||||
"cannot_edit_thread": "Nemůžete upravit toto vlákno",
|
||||
"cannot_edit_reply": "Tento příspěvek nelze upravit",
|
||||
"this_thread_was_deleted": "Toto vlákno bylo smazáno jeho autorem",
|
||||
"this_thread_was_removed": "Toto vlákno bylo odstraněno moderátory fóra",
|
||||
"this_reply_was_deleted": "Tato odpověď byla smazána autorem",
|
||||
"this_reply_was_removed": "Tato odpověď byla odstraněna moderátory fóra"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Kommentaren er for lang. <1>Klik her</1> for at se hele teksten.",
|
||||
"replies_omitted": "{{repliesCount}} svar udeladt. <1>Klik her</1> for at se dem.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} svar og {{linksCount}} links udeladt. <1>Klik her</1> for at se dem.",
|
||||
"thread_closed_alert": "Tråden er lukket",
|
||||
"this_thread_is_closed": "Tråden er lukket",
|
||||
"reply_to_cid": "Svar til {{cid}}",
|
||||
"submit": "Indsend",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Indlæser abonnementer",
|
||||
"create_board": "Opret tavle",
|
||||
"enter_board_address": "Indtast enhver tavleadresse",
|
||||
"board_not_reachable": "Boardet er ikke tilgængeligt"
|
||||
"board_not_reachable": "Boardet er ikke tilgængeligt",
|
||||
"cannot_edit_thread": "Du kan ikke redigere dette emne",
|
||||
"cannot_edit_reply": "Du kan ikke redigere dette svar",
|
||||
"this_thread_was_deleted": "Denne tråd blev slettet af dens forfatter",
|
||||
"this_thread_was_removed": "Denne tråd blev fjernet af boardmoderatorer",
|
||||
"this_reply_was_deleted": "Dette svar blev slettet af forfatteren",
|
||||
"this_reply_was_removed": "Dette svar blev fjernet af forummoderatorer"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Kommentar zu lang. <1>Klicken Sie hier</1>, um den vollständigen Text anzuzeigen.",
|
||||
"replies_omitted": "{{repliesCount}} Antworten ausgelassen. <1>Klicken Sie hier</1>, um sie anzuzeigen.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} Antworten und {{linksCount}} Links ausgelassen. <1>Klicken Sie hier</1>, um sie anzuzeigen.",
|
||||
"thread_closed_alert": "Der Thread ist geschlossen",
|
||||
"this_thread_is_closed": "Der Thread ist geschlossen",
|
||||
"reply_to_cid": "Antwort an {{cid}}",
|
||||
"submit": "Einreichen",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Lade Abonnements",
|
||||
"create_board": "Board erstellen",
|
||||
"enter_board_address": "Geben Sie eine beliebige Board-Adresse ein",
|
||||
"board_not_reachable": "Board ist nicht erreichbar"
|
||||
"board_not_reachable": "Board ist nicht erreichbar",
|
||||
"cannot_edit_thread": "Sie können dieses Thema nicht bearbeiten",
|
||||
"cannot_edit_reply": "Sie können diese Antwort nicht bearbeiten",
|
||||
"this_thread_was_deleted": "Dieser Thread wurde von seinem Autor gelöscht",
|
||||
"this_thread_was_removed": "Dieser Thread wurde von den Moderatoren des Boards entfernt",
|
||||
"this_reply_was_deleted": "Diese Antwort wurde vom Autor gelöscht",
|
||||
"this_reply_was_removed": "Diese Antwort wurde von den Forenmoderatoren entfernt"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Το σχόλιο είναι πολύ μακροσκελές. <1>Κάντε κλικ εδώ</1> για να δείτε το πλήρες κείμενο.",
|
||||
"replies_omitted": "{{repliesCount}} απαντήσεις παραλείφθηκαν. <1>Κάντε κλικ εδώ</1> για να τις δείτε.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} απαντήσεις και {{linksCount}} σύνδεσμοι παραλείφθηκαν. <1>Κάντε κλικ εδώ</1> για να τις δείτε.",
|
||||
"thread_closed_alert": "Το νήμα έχει κλείσει",
|
||||
"this_thread_is_closed": "Το νήμα έχει κλείσει",
|
||||
"reply_to_cid": "Απάντηση σε {{cid}}",
|
||||
"submit": "Υποβολή",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Φορτώνει συνδρομές",
|
||||
"create_board": "Δημιουργία πίνακα",
|
||||
"enter_board_address": "Εισάγετε οποιαδήποτε διεύθυνση πίνακα",
|
||||
"board_not_reachable": "Ο πίνακας δεν είναι προσβάσιμος"
|
||||
"board_not_reachable": "Ο πίνακας δεν είναι προσβάσιμος",
|
||||
"cannot_edit_thread": "Δεν μπορείτε να επεξεργαστείτε αυτήν την ανάρτηση",
|
||||
"cannot_edit_reply": "Δεν μπορείτε να επεξεργαστείτε αυτήν την απάντηση",
|
||||
"this_thread_was_deleted": "Αυτή η συζήτηση διαγράφηκε από τον συγγραφέα της",
|
||||
"this_thread_was_removed": "Αυτή η συζήτηση αφαιρέθηκε από τους διαχειριστές του φόρουμ",
|
||||
"this_reply_was_deleted": "Αυτή η απάντηση διαγράφηκε από τον συγγραφέα της",
|
||||
"this_reply_was_removed": "Η απάντηση αυτή αφαιρέθηκε από τους διαχειριστές του φόρουμ"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Comment too long. <1>Click here</1> to view the full text.",
|
||||
"replies_omitted": "{{repliesCount}} replies omitted. <1>Click here</1> to view.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} replies and {{linksCount}} links omitted. <1>Click here</1> to view.",
|
||||
"thread_closed_alert": "This thread is closed",
|
||||
"this_thread_is_closed": "This thread is closed",
|
||||
"reply_to_cid": "Reply to {{cid}}",
|
||||
"submit": "Submit",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Loading subscriptions",
|
||||
"create_board": "Create Board",
|
||||
"enter_board_address": "Enter any board address",
|
||||
"board_not_reachable": "Board is not reachable"
|
||||
"board_not_reachable": "Board is not reachable",
|
||||
"cannot_edit_thread": "You cannot edit this thread",
|
||||
"cannot_edit_reply": "You cannot edit this reply",
|
||||
"this_thread_was_deleted": "This thread was deleted by its author",
|
||||
"this_thread_was_removed": "This thread was removed by board moderators",
|
||||
"this_reply_was_deleted": "This reply was deleted by its author",
|
||||
"this_reply_was_removed": "This reply was removed by board moderators"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Comentario demasiado largo. <1>Haz clic aquí</1> para ver el texto completo.",
|
||||
"replies_omitted": "{{repliesCount}} respuestas omitidas. <1>Haz clic aquí</1> para verlas.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} respuestas y {{linksCount}} enlaces omitidos. <1>Haz clic aquí</1> para verlos.",
|
||||
"thread_closed_alert": "El hilo está cerrado",
|
||||
"this_thread_is_closed": "El hilo está cerrado",
|
||||
"reply_to_cid": "Responder a {{cid}}",
|
||||
"submit": "Enviar",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Cargando suscripciones",
|
||||
"create_board": "Crear tablero",
|
||||
"enter_board_address": "Ingrese cualquier dirección de tablero",
|
||||
"board_not_reachable": "El tablero no es accesible"
|
||||
"board_not_reachable": "El tablero no es accesible",
|
||||
"cannot_edit_thread": "No puedes editar este hilo",
|
||||
"cannot_edit_reply": "No puedes editar esta respuesta",
|
||||
"this_thread_was_deleted": "Este hilo fue eliminado por su autor",
|
||||
"this_thread_was_removed": "Este hilo fue eliminado por los moderadores del foro",
|
||||
"this_reply_was_deleted": "Esta respuesta fue eliminada por su autor",
|
||||
"this_reply_was_removed": "Esta respuesta fue eliminada por los moderadores del foro"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "نظر بسیار طولانی است. <1>اینجا کلیک کنید</1> تا متن کامل را ببینید.",
|
||||
"replies_omitted": "{{repliesCount}} پاسخ حذف شده است. <1>اینجا کلیک کنید</1> تا آنها را مشاهده کنید.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} پاسخ و {{linksCount}} لینک حذف شده است. <1>اینجا کلیک کنید</1> تا آنها را مشاهده کنید.",
|
||||
"thread_closed_alert": "موضوع بسته شده است",
|
||||
"this_thread_is_closed": "موضوع بسته شده است",
|
||||
"reply_to_cid": "پاسخ به {{cid}}",
|
||||
"submit": "ارسال",
|
||||
"gif": "گیف",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "در حال بارگذاری اشتراکها",
|
||||
"create_board": "ایجاد تابلو",
|
||||
"enter_board_address": "آدرس هر تابلو را وارد کنید",
|
||||
"board_not_reachable": "تابلو قابل دسترسی نیست"
|
||||
"board_not_reachable": "تابلو قابل دسترسی نیست",
|
||||
"cannot_edit_thread": "شما نمیتوانید این موضوع را ویرایش کنید",
|
||||
"cannot_edit_reply": "شما نمیتوانید این پاسخ را ویرایش کنید",
|
||||
"this_thread_was_deleted": "این موضوع توسط نویسندهاش حذف شد",
|
||||
"this_thread_was_removed": "این تاپیک توسط مدیران انجمن حذف شد",
|
||||
"this_reply_was_deleted": "این پاسخ توسط نویسندهاش حذف شد",
|
||||
"this_reply_was_removed": "این پاسخ توسط مدیران انجمن حذف شد"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Kommentti on liian pitkä. <1>Napsauta tästä</1> nähdäksesi koko tekstin.",
|
||||
"replies_omitted": "{{repliesCount}} vastausta jätetty pois. <1>Napsauta tästä</1> nähdäksesi ne.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} vastausta ja {{linksCount}} linkkiä jätetty pois. <1>Napsauta tästä</1> nähdäksesi ne.",
|
||||
"thread_closed_alert": "Ketju on suljettu",
|
||||
"this_thread_is_closed": "Ketju on suljettu",
|
||||
"reply_to_cid": "Vastaa {{cid}}",
|
||||
"submit": "Lähetä",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Ladataan tilauksia",
|
||||
"create_board": "Luo taulu",
|
||||
"enter_board_address": "Syötä mikä tahansa taulun osoite",
|
||||
"board_not_reachable": "Taulua ei ole käytettävissä"
|
||||
"board_not_reachable": "Taulua ei ole käytettävissä",
|
||||
"cannot_edit_thread": "Et voi muokata tätä ketjua",
|
||||
"cannot_edit_reply": "Et voi muokata tätä vastausta",
|
||||
"this_thread_was_deleted": "Tämä ketju poistettiin sen kirjoittajan toimesta",
|
||||
"this_thread_was_removed": "Tämä ketju poistettiin foorumin moderaattoreiden toimesta",
|
||||
"this_reply_was_deleted": "Tämä vastaus poistettiin sen kirjoittajalta",
|
||||
"this_reply_was_removed": "Tämä vastaus poistettiin foorumin moderaattoreiden toimesta"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Masyadong mahaba ang komento. <1>I-click dito</1> upang makita ang buong teksto.",
|
||||
"replies_omitted": "{{repliesCount}} mga tugon ang hindi ipinakita. <1>I-click dito</1> upang makita.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} mga tugon at {{linksCount}} mga link ang hindi ipinakita. <1>I-click dito</1> upang makita.",
|
||||
"thread_closed_alert": "Sarado na ang thread",
|
||||
"this_thread_is_closed": "Sarado na ang thread",
|
||||
"reply_to_cid": "Tumugon sa {{cid}}",
|
||||
"submit": "Isumite",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Naglo-load ng mga subscription",
|
||||
"create_board": "Gumawa ng board",
|
||||
"enter_board_address": "Ipasok ang anumang address ng board",
|
||||
"board_not_reachable": "Hindi maa-access ang board"
|
||||
"board_not_reachable": "Hindi maa-access ang board",
|
||||
"cannot_edit_thread": "Hindi mo maaaring i-edit ang thread na ito",
|
||||
"cannot_edit_reply": "Hindi mo maaaring i-edit ang reply na ito",
|
||||
"this_thread_was_deleted": "Ang thread na ito ay tinanggal ng may-akda nito",
|
||||
"this_thread_was_removed": "Inalis ang thread na ito ng mga moderator ng board",
|
||||
"this_reply_was_deleted": "Ang tugon na ito ay tinanggal ng may-akda nito",
|
||||
"this_reply_was_removed": "Ang sagot na ito ay tinanggal ng mga moderator ng board"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Commentaire trop long. <1>Cliquez ici</1> pour voir le texte complet.",
|
||||
"replies_omitted": "{{repliesCount}} réponses omises. <1>Cliquez ici</1> pour les afficher.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} réponses et {{linksCount}} liens omis. <1>Cliquez ici</1> pour les afficher.",
|
||||
"thread_closed_alert": "Le fil est fermé",
|
||||
"this_thread_is_closed": "Le fil est fermé",
|
||||
"reply_to_cid": "Répondre à {{cid}}",
|
||||
"submit": "Soumettre",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Chargement des abonnements",
|
||||
"create_board": "Créer un tableau",
|
||||
"enter_board_address": "Entrez n'importe quelle adresse du forum",
|
||||
"board_not_reachable": "Le tableau n'est pas accessible"
|
||||
"board_not_reachable": "Le tableau n'est pas accessible",
|
||||
"cannot_edit_thread": "Vous ne pouvez pas modifier ce fil",
|
||||
"cannot_edit_reply": "Vous ne pouvez pas modifier cette réponse",
|
||||
"this_thread_was_deleted": "Ce sujet a été supprimé par son auteur",
|
||||
"this_thread_was_removed": "Ce sujet a été supprimé par les modérateurs du forum",
|
||||
"this_reply_was_deleted": "Cette réponse a été supprimée par son auteur",
|
||||
"this_reply_was_removed": "Cette réponse a été supprimée par les modérateurs du forum"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "התגובה ארוכה מדי. <1>לחץ כאן</1> כדי לראות את הטקסט המלא.",
|
||||
"replies_omitted": "{{repliesCount}} תגובות נשמטו. <1>לחץ כאן</1> לצפייה.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} תגובות ו{{linksCount}} קישורים נשמטו. <1>לחץ כאן</1> לצפייה.",
|
||||
"thread_closed_alert": "האשכול סגור",
|
||||
"this_thread_is_closed": "האשכול סגור",
|
||||
"reply_to_cid": "תגובה ל{{cid}}",
|
||||
"submit": "שלח",
|
||||
"gif": "גיף",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "טוען מנויים",
|
||||
"create_board": "צור לוח",
|
||||
"enter_board_address": "הזן כתובת לוח כלשהי",
|
||||
"board_not_reachable": "הלוח לא נגיש"
|
||||
"board_not_reachable": "הלוח לא נגיש",
|
||||
"cannot_edit_thread": "אינך יכול לערוך את השרשור הזה",
|
||||
"cannot_edit_reply": "אינך יכול לערוך את התגובה הזו",
|
||||
"this_thread_was_deleted": "השרשור הזה נמחק על ידי המחבר שלו",
|
||||
"this_thread_was_removed": "השרשור הזה הוסר על ידי מנהלי הפורום",
|
||||
"this_reply_was_deleted": "תשובה זו נמחקה על ידי המחבר שלה",
|
||||
"this_reply_was_removed": "תשובה זו הוסרה על ידי מנהלי הפורום"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "टिप्पणी बहुत लंबी है। <1>पूरा टेक्स्ट देखने के लिए यहां क्लिक करें</1>।",
|
||||
"replies_omitted": "{{repliesCount}} उत्तर छोड़े गए हैं। <1>देखने के लिए यहां क्लिक करें</1>।",
|
||||
"replies_and_links_omitted": "{{repliesCount}} उत्तर और {{linksCount}} लिंक छोड़े गए हैं। <1>देखने के लिए यहां क्लिक करें</1>।",
|
||||
"thread_closed_alert": "यह थ्रेड बंद है",
|
||||
"this_thread_is_closed": "यह थ्रेड बंद है",
|
||||
"reply_to_cid": "{{cid}} का उत्तर दें",
|
||||
"submit": "जमा करें",
|
||||
"gif": "जीआईएफ",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "सब्सक्रिप्शन लोड हो रहे हैं",
|
||||
"create_board": "बोर्ड बनाएं",
|
||||
"enter_board_address": "किसी भी बोर्ड का पता दर्ज करें",
|
||||
"board_not_reachable": "बोर्ड पहुँच योग्य नहीं है"
|
||||
"board_not_reachable": "बोर्ड पहुँच योग्य नहीं है",
|
||||
"cannot_edit_thread": "आप इस थ्रेड को संपादित नहीं कर सकते",
|
||||
"cannot_edit_reply": "आप इस उत्तर को संपादित नहीं कर सकते",
|
||||
"this_thread_was_deleted": "इस थ्रेड को इसके लेखक ने हटा दिया है",
|
||||
"this_thread_was_removed": "यह थ्रेड बोर्ड मॉडरेटर्स द्वारा हटा दिया गया था",
|
||||
"this_reply_was_deleted": "इस उत्तर को इसके लेखक द्वारा हटा दिया गया था",
|
||||
"this_reply_was_removed": "यह उत्तर बोर्ड मॉडरेटर द्वारा हटा दिया गया था"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "A megjegyzés túl hosszú. <1>Kattintson ide</1> a teljes szöveg megtekintéséhez.",
|
||||
"replies_omitted": "{{repliesCount}} válasz kihagyva. <1>Kattintson ide</1> a megtekintéshez.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} válasz és {{linksCount}} link kihagyva. <1>Kattintson ide</1> a megtekintéshez.",
|
||||
"thread_closed_alert": "A téma lezárva",
|
||||
"this_thread_is_closed": "A téma lezárva",
|
||||
"reply_to_cid": "Válasz erre: {{cid}}",
|
||||
"submit": "Beküldés",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Előfizetések betöltése",
|
||||
"create_board": "Hozzon létre táblát",
|
||||
"enter_board_address": "Adjon meg bármilyen táblázat címet",
|
||||
"board_not_reachable": "A tábla nem elérhető"
|
||||
"board_not_reachable": "A tábla nem elérhető",
|
||||
"cannot_edit_thread": "Nem szerkesztheted ezt a szálat",
|
||||
"cannot_edit_reply": "Nem szerkesztheted ezt a választ",
|
||||
"this_thread_was_deleted": "Ez a szál törlésre került a szerzője által",
|
||||
"this_thread_was_removed": "Ezt a témát a fórum moderátorai eltávolították",
|
||||
"this_reply_was_deleted": "Ez a válasz törölve lett a szerzője által",
|
||||
"this_reply_was_removed": "Ez a válasz törlésre került a fórum moderátorai által"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Komentar terlalu panjang. <1>Klik di sini</1> untuk melihat teks lengkap.",
|
||||
"replies_omitted": "{{repliesCount}} balasan dihilangkan. <1>Klik di sini</1> untuk melihat.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} balasan dan {{linksCount}} tautan dihilangkan. <1>Klik di sini</1> untuk melihat.",
|
||||
"thread_closed_alert": "Thread ini ditutup",
|
||||
"this_thread_is_closed": "Thread ini ditutup",
|
||||
"reply_to_cid": "Balas ke {{cid}}",
|
||||
"submit": "Kirim",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Memuat langganan",
|
||||
"create_board": "Buat papan",
|
||||
"enter_board_address": "Masukkan alamat papan apa saja",
|
||||
"board_not_reachable": "Papan tidak dapat dijangkau"
|
||||
"board_not_reachable": "Papan tidak dapat dijangkau",
|
||||
"cannot_edit_thread": "Anda tidak dapat mengedit thread ini",
|
||||
"cannot_edit_reply": "Anda tidak dapat mengedit balasan ini",
|
||||
"this_thread_was_deleted": "Thread ini dihapus oleh penulisnya",
|
||||
"this_thread_was_removed": "Thread ini dihapus oleh moderator papan",
|
||||
"this_reply_was_deleted": "Balasan ini dihapus oleh penulisnya",
|
||||
"this_reply_was_removed": "Balasan ini dihapus oleh moderator papan"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Commento troppo lungo. <1>Clicca qui</1> per vedere il testo completo.",
|
||||
"replies_omitted": "{{repliesCount}} risposte omesse. <1>Clicca qui</1> per visualizzare.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} risposte e {{linksCount}} link omessi. <1>Clicca qui</1> per visualizzare.",
|
||||
"thread_closed_alert": "Questo thread è chiuso",
|
||||
"this_thread_is_closed": "Questo thread è chiuso",
|
||||
"reply_to_cid": "Rispondi a {{cid}}",
|
||||
"submit": "Invia",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Caricamento abbonamenti",
|
||||
"create_board": "Crea Board",
|
||||
"enter_board_address": "Inserisci indirizzo di qualsiasi board",
|
||||
"board_not_reachable": "Board non raggiungibile"
|
||||
"board_not_reachable": "Board non raggiungibile",
|
||||
"cannot_edit_thread": "Non puoi modificare questa discussione",
|
||||
"cannot_edit_reply": "Non puoi modificare questa risposta",
|
||||
"this_thread_was_deleted": "Questo thread è stato eliminato dal suo autore",
|
||||
"this_thread_was_removed": "Questo thread è stato rimosso dai moderatori del board",
|
||||
"this_reply_was_deleted": "Questa risposta è stata eliminata dal suo autore",
|
||||
"this_reply_was_removed": "Questa risposta è stata rimossa dai moderatori del forum"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "コメントが長すぎます。 <1>ここをクリック</1>して全文を表示。",
|
||||
"replies_omitted": "{{repliesCount}}件の返信が省略されました。 <1>ここをクリック</1>して表示。",
|
||||
"replies_and_links_omitted": "{{repliesCount}}件の返信と{{linksCount}}件のリンクが省略されました。 <1>ここをクリック</1>して表示。",
|
||||
"thread_closed_alert": "このスレッドは閉じられています",
|
||||
"this_thread_is_closed": "このスレッドは閉じられています",
|
||||
"reply_to_cid": "{{cid}}に返信",
|
||||
"submit": "送信",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "購読を読み込み中",
|
||||
"create_board": "ボードを作成",
|
||||
"enter_board_address": "任意のボードアドレスを入力してください",
|
||||
"board_not_reachable": "ボードにアクセスできません"
|
||||
"board_not_reachable": "ボードにアクセスできません",
|
||||
"cannot_edit_thread": "このスレッドを編集できません",
|
||||
"cannot_edit_reply": "この返信は編集できません",
|
||||
"this_thread_was_deleted": "このスレッドは著者によって削除されました",
|
||||
"this_thread_was_removed": "このスレッドはボードのモデレーターによって削除されました",
|
||||
"this_reply_was_deleted": "この返信はその著者によって削除されました",
|
||||
"this_reply_was_removed": "この返信は掲示板のモデレーターによって削除されました"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "댓글이 너무 깁니다. <1>여기를 클릭하십시오</1> 전체 텍스트를 보려면.",
|
||||
"replies_omitted": "{{repliesCount}}개의 답글이 생략되었습니다. <1>여기를 클릭하십시오</1> 보려면.",
|
||||
"replies_and_links_omitted": "{{repliesCount}}개의 답글과 {{linksCount}}개의 링크가 생략되었습니다. <1>여기를 클릭하십시오</1> 보려면.",
|
||||
"thread_closed_alert": "이 스레드는 닫혔습니다",
|
||||
"this_thread_is_closed": "이 스레드는 닫혔습니다",
|
||||
"reply_to_cid": "{{cid}}에 답변",
|
||||
"submit": "제출",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "구독 로딩 중",
|
||||
"create_board": "보드 만들기",
|
||||
"enter_board_address": "어떤 보드 주소든 입력하세요",
|
||||
"board_not_reachable": "보드를 찾을 수 없습니다"
|
||||
"board_not_reachable": "보드를 찾을 수 없습니다",
|
||||
"cannot_edit_thread": "이 스레드를 편집할 수 없습니다",
|
||||
"cannot_edit_reply": "이 답글을 수정할 수 없습니다",
|
||||
"this_thread_was_deleted": "이 스레드는 작성자에 의해 삭제되었습니다",
|
||||
"this_thread_was_removed": "이 스레드는 보드 관리자에 의해 제거되었습니다",
|
||||
"this_reply_was_deleted": "이 답글은 작성자에 의해 삭제되었습니다",
|
||||
"this_reply_was_removed": "이 답글은 게시판 관리자에 의해 삭제되었습니다"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "टिप्पणी खूप लांब आहे. <1>पूर्ण मजकूर पाहण्यासाठी येथे क्लिक करा</1>.",
|
||||
"replies_omitted": "{{repliesCount}} प्रतिसाद वगळले गेले आहेत. <1>पाहण्यासाठी येथे क्लिक करा</1>.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} प्रतिसाद आणि {{linksCount}} दुवे वगळले गेले आहेत. <1>पाहण्यासाठी येथे क्लिक करा</1>.",
|
||||
"thread_closed_alert": "हा थ्रेड बंद आहे",
|
||||
"this_thread_is_closed": "हा थ्रेड बंद आहे",
|
||||
"reply_to_cid": "{{cid}} ला उत्तर द्या",
|
||||
"submit": "सबमिट करा",
|
||||
"gif": "जीआईएफ",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "सदस्यता लोड होत आहे",
|
||||
"create_board": "बोर्ड तयार करा",
|
||||
"enter_board_address": "कोणत्याही बोर्ड पत्त्याची नोंद करा",
|
||||
"board_not_reachable": "बोर्ड उपलब्ध नाही"
|
||||
"board_not_reachable": "बोर्ड उपलब्ध नाही",
|
||||
"cannot_edit_thread": "तुम्ही हा थ्रेड संपादित करू शकत नाही",
|
||||
"cannot_edit_reply": "तुम्ही हा प्रतिसाद संपादित करू शकत नाही",
|
||||
"this_thread_was_deleted": "हा धागा त्याच्या लेखकाने हटविला",
|
||||
"this_thread_was_removed": "हे थ्रेड बोर्ड मध्यमाने काढले गेले आहे",
|
||||
"this_reply_was_deleted": "हा प्रतिसाद त्याच्या लेखकाने हटवला आहे",
|
||||
"this_reply_was_removed": "या उत्तराला बोर्ड मॉडरेटरने काढले आहे"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Reactie te lang. <1>Klik hier</1> om de volledige tekst te bekijken.",
|
||||
"replies_omitted": "{{repliesCount}} reacties weggelaten. <1>Klik hier</1> om ze te bekijken.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} reacties en {{linksCount}} links weggelaten. <1>Klik hier</1> om ze te bekijken.",
|
||||
"thread_closed_alert": "De thread is gesloten",
|
||||
"this_thread_is_closed": "De thread is gesloten",
|
||||
"reply_to_cid": "Reageren op {{cid}}",
|
||||
"submit": "Verzenden",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Abonnementen laden",
|
||||
"create_board": "Maak bord",
|
||||
"enter_board_address": "Voer een willekeurig bordadres in",
|
||||
"board_not_reachable": "Bord is niet bereikbaar"
|
||||
"board_not_reachable": "Bord is niet bereikbaar",
|
||||
"cannot_edit_thread": "Je kunt deze thread niet bewerken",
|
||||
"cannot_edit_reply": "Je kunt deze reactie niet bewerken",
|
||||
"this_thread_was_deleted": "Dit draadje is verwijderd door de auteur",
|
||||
"this_thread_was_removed": "Deze thread werd verwijderd door boardmoderators",
|
||||
"this_reply_was_deleted": "Dit antwoord werd verwijderd door de auteur",
|
||||
"this_reply_was_removed": "Dit antwoord is verwijderd door de forum moderators"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Kommentaren er for lang. <1>Klikk her</1> for å se hele teksten.",
|
||||
"replies_omitted": "{{repliesCount}} svar utelatt. <1>Klikk her</1> for å se dem.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} svar og {{linksCount}} lenker utelatt. <1>Klikk her</1> for å se dem.",
|
||||
"thread_closed_alert": "Tråden er stengt",
|
||||
"this_thread_is_closed": "Tråden er stengt",
|
||||
"reply_to_cid": "Svar til {{cid}}",
|
||||
"submit": "Send inn",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Laster abonnementer",
|
||||
"create_board": "Lag tavle",
|
||||
"enter_board_address": "Skriv inn hvilken som helst brettadresse",
|
||||
"board_not_reachable": "Brettet er ikke tilgjengelig"
|
||||
"board_not_reachable": "Brettet er ikke tilgjengelig",
|
||||
"cannot_edit_thread": "Du kan ikke redigere denne tråden",
|
||||
"cannot_edit_reply": "Du kan ikke redigere dette svaret",
|
||||
"this_thread_was_deleted": "Denne tråden ble slettet av forfatteren",
|
||||
"this_thread_was_removed": "Denne tråden ble fjernet av boardmoderatorer",
|
||||
"this_reply_was_deleted": "Dette svaret ble slettet av forfatteren",
|
||||
"this_reply_was_removed": "Dette svaret ble fjernet av forummoderatorer"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Komentarz jest za długi. <1>Kliknij tutaj</1>, aby zobaczyć pełny tekst.",
|
||||
"replies_omitted": "Pominięto {{repliesCount}} odpowiedzi. <1>Kliknij tutaj</1>, aby je zobaczyć.",
|
||||
"replies_and_links_omitted": "Pominięto {{repliesCount}} odpowiedzi i {{linksCount}} linków. <1>Kliknij tutaj</1>, aby je zobaczyć.",
|
||||
"thread_closed_alert": "Wątek jest zamknięty",
|
||||
"this_thread_is_closed": "Wątek jest zamknięty",
|
||||
"reply_to_cid": "Odpowiedz na {{cid}}",
|
||||
"submit": "Zatwierdź",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Ładowanie subskrypcji",
|
||||
"create_board": "Utwórz tablicę",
|
||||
"enter_board_address": "Wprowadź dowolny adres tablicy",
|
||||
"board_not_reachable": "Tablica jest niedostępna"
|
||||
"board_not_reachable": "Tablica jest niedostępna",
|
||||
"cannot_edit_thread": "Nie możesz edytować tego wątku",
|
||||
"cannot_edit_reply": "Nie możesz edytować tej odpowiedzi",
|
||||
"this_thread_was_deleted": "Wątek ten został usunięty przez jego autora",
|
||||
"this_thread_was_removed": "Wątek został usunięty przez moderatorów forum",
|
||||
"this_reply_was_deleted": "Ta odpowiedź została usunięta przez autora",
|
||||
"this_reply_was_removed": "Ta odpowiedź została usunięta przez moderatorów forum"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Comentário muito longo. <1>Clique aqui</1> para ver o texto completo.",
|
||||
"replies_omitted": "{{repliesCount}} respostas omitidas. <1>Clique aqui</1> para visualizar.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} respostas e {{linksCount}} links omitidos. <1>Clique aqui</1> para visualizar.",
|
||||
"thread_closed_alert": "O tópico está fechado",
|
||||
"this_thread_is_closed": "O tópico está fechado",
|
||||
"reply_to_cid": "Responder a {{cid}}",
|
||||
"submit": "Enviar",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Carregando assinaturas",
|
||||
"create_board": "Criar quadro",
|
||||
"enter_board_address": "Digite qualquer endereço de quadro",
|
||||
"board_not_reachable": "O quadro não é acessível"
|
||||
"board_not_reachable": "O quadro não é acessível",
|
||||
"cannot_edit_thread": "Você não pode editar este tópico",
|
||||
"cannot_edit_reply": "Você não pode editar esta resposta",
|
||||
"this_thread_was_deleted": "Este tópico foi excluído pelo seu autor",
|
||||
"this_thread_was_removed": "Este tópico foi removido pelos moderadores do fórum",
|
||||
"this_reply_was_deleted": "Esta resposta foi excluída pelo autor",
|
||||
"this_reply_was_removed": "Esta resposta foi removida pelos moderadores do fórum"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Comentariul este prea lung. <1>Click aici</1> pentru a vedea textul complet.",
|
||||
"replies_omitted": "{{repliesCount}} răspunsuri omise. <1>Click aici</1> pentru a le vizualiza.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} răspunsuri și {{linksCount}} linkuri omise. <1>Click aici</1> pentru a le vizualiza.",
|
||||
"thread_closed_alert": "Acest fir de discuție este închis",
|
||||
"this_thread_is_closed": "Acest fir de discuție este închis",
|
||||
"reply_to_cid": "Răspundeți la {{cid}}",
|
||||
"submit": "Trimite",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Încărcarea abonamentelor",
|
||||
"create_board": "Creați tablou",
|
||||
"enter_board_address": "Introduceți orice adresă de tablă",
|
||||
"board_not_reachable": "Tabloul nu este accesibil"
|
||||
"board_not_reachable": "Tabloul nu este accesibil",
|
||||
"cannot_edit_thread": "Nu poți edita acest subiect",
|
||||
"cannot_edit_reply": "Nu poți edita acest răspuns",
|
||||
"this_thread_was_deleted": "Acest thread a fost șters de autorul său",
|
||||
"this_thread_was_removed": "Acest thread a fost eliminat de moderatorii board-ului",
|
||||
"this_reply_was_deleted": "Acest răspuns a fost șters de autorul său",
|
||||
"this_reply_was_removed": "Acest răspuns a fost eliminat de moderatorii forumului"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Комментарий слишком длинный. <1>Нажмите здесь</1>, чтобы прочитать полный текст.",
|
||||
"replies_omitted": "{{repliesCount}} ответов пропущено. <1>Нажмите здесь</1>, чтобы посмотреть.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} ответов и {{linksCount}} ссылок пропущено. <1>Нажмите здесь</1>, чтобы посмотреть.",
|
||||
"thread_closed_alert": "Тема закрыта",
|
||||
"this_thread_is_closed": "Тема закрыта",
|
||||
"reply_to_cid": "Ответить на {{cid}}",
|
||||
"submit": "Отправить",
|
||||
"gif": "ГИФ",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Загрузка подписок",
|
||||
"create_board": "Создать доску",
|
||||
"enter_board_address": "Введите любой адрес доски",
|
||||
"board_not_reachable": "Доска недоступна"
|
||||
"board_not_reachable": "Доска недоступна",
|
||||
"cannot_edit_thread": "Вы не можете редактировать эту тему",
|
||||
"cannot_edit_reply": "Вы не можете отредактировать этот ответ",
|
||||
"this_thread_was_deleted": "Эта тема была удалена её автором",
|
||||
"this_thread_was_removed": "Эта тема была удалена модераторами форума",
|
||||
"this_reply_was_deleted": "Этот ответ был удален автором",
|
||||
"this_reply_was_removed": "Этот ответ был удален модераторами форума"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Komenti është shumë i gjatë. <1>Kliko këtu</1> për të parë tekstin e plotë.",
|
||||
"replies_omitted": "{{repliesCount}} përgjigje janë lënë jashtë. <1>Kliko këtu</1> për t'i shikuar.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} përgjigje dhe {{linksCount}} lidhje janë lënë jashtë. <1>Kliko këtu</1> për t'i shikuar.",
|
||||
"thread_closed_alert": "Temë është mbyllur",
|
||||
"this_thread_is_closed": "Temë është mbyllur",
|
||||
"reply_to_cid": "Përgjigju në {{cid}}",
|
||||
"submit": "Dorëzo",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Po ngarkohen abonimet",
|
||||
"create_board": "Krijo bord",
|
||||
"enter_board_address": "Shkruani çdo adresë bordi",
|
||||
"board_not_reachable": "Tabela nuk është e arritshme"
|
||||
"board_not_reachable": "Tabela nuk është e arritshme",
|
||||
"cannot_edit_thread": "Nuk mund ta redaktoni këtë temë",
|
||||
"cannot_edit_reply": "Nuk mund ta redaktoni këtë përgjigje",
|
||||
"this_thread_was_deleted": "Ky thread u fshi nga autori i tij",
|
||||
"this_thread_was_removed": "Ky thread u hoq nga moderatorët e bordit",
|
||||
"this_reply_was_deleted": "Ky përgjigje u fshi nga autori i saj",
|
||||
"this_reply_was_removed": "Ky përgjigje u hoq nga moderatorët e forumit"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Kommentaren är för lång. <1>Klicka här</1> för att se hela texten.",
|
||||
"replies_omitted": "{{repliesCount}} svar utelämnade. <1>Klicka här</1> för att visa dem.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} svar och {{linksCount}} länkar utelämnade. <1>Klicka här</1> för att visa dem.",
|
||||
"thread_closed_alert": "Tråden är stängd",
|
||||
"this_thread_is_closed": "Tråden är stängd",
|
||||
"reply_to_cid": "Svara på {{cid}}",
|
||||
"submit": "Skicka in",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Laddar prenumerationer",
|
||||
"create_board": "Skapa tavla",
|
||||
"enter_board_address": "Ange vilken som helst brädets adress",
|
||||
"board_not_reachable": "Tavlan är inte tillgänglig"
|
||||
"board_not_reachable": "Tavlan är inte tillgänglig",
|
||||
"cannot_edit_thread": "Du kan inte redigera denna tråd",
|
||||
"cannot_edit_reply": "Du kan inte redigera detta svar",
|
||||
"this_thread_was_deleted": "Denna tråd raderades av dess författare",
|
||||
"this_thread_was_removed": "Denna tråd togs bort av forumets moderatorer",
|
||||
"this_reply_was_deleted": "Detta svar togs bort av författaren",
|
||||
"this_reply_was_removed": "Detta svar togs bort av forumets moderatorer"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "వ్యాఖ్య చాలా పొడవుగా ఉంది. <1>పూర్తి టెక్స్ట్ చూడటానికి ఇక్కడ క్లిక్ చేయండి</1>.",
|
||||
"replies_omitted": "{{repliesCount}} స్పందనలు వదిలివేయబడ్డాయి. <1>చూడటానికి ఇక్కడ క్లిక్ చేయండి</1>.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} స్పందనలు మరియు {{linksCount}} లింకులు వదిలివేయబడ్డాయి. <1>చూడటానికి ఇక్కడ క్లిక్ చేయండి</1>.",
|
||||
"thread_closed_alert": "ఈ థ్రెడ్ మూసివేయబడింది",
|
||||
"this_thread_is_closed": "ఈ థ్రెడ్ మూసివేయబడింది",
|
||||
"reply_to_cid": "{{cid}}కి స్పందించండి",
|
||||
"submit": "సమర్పించు",
|
||||
"gif": "జీఐఎఫ్",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "సబ్స్క్రిప్షన్లు లోడ్ అవుతున్నాయి",
|
||||
"create_board": "బోర్డ్ రూపొందించండి",
|
||||
"enter_board_address": "ఏదైనా బోర్డ్ అడ్రస్ నమోదు చేయండి",
|
||||
"board_not_reachable": "బోర్డు అందుబాటులో లేదు"
|
||||
"board_not_reachable": "బోర్డు అందుబాటులో లేదు",
|
||||
"cannot_edit_thread": "మీరు ఈ థ్రెడ్ని ఎడిట్ చేయలేరు",
|
||||
"cannot_edit_reply": "మీరు ఈ రిప్లయ్ను ఎడిట్ చేయలేరు",
|
||||
"this_thread_was_deleted": "ఈ థ్రెడ్ను దాని రచయిత తొలగించారు",
|
||||
"this_thread_was_removed": "ఈ థ్రెడ్ బోర్డ్ మోడరేటర్ల ద్వారా తీసివేయబడింది",
|
||||
"this_reply_was_deleted": "ఈ స్పందనను దాని రచయిత తొలగించారు",
|
||||
"this_reply_was_removed": "ఈ స్పందన బోర్డ్ మోడరేటర్లచే తొలగించబడింది"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "ความคิดเห็นยาวเกินไป <1>คลิกที่นี่</1> เพื่อดูข้อความเต็ม.",
|
||||
"replies_omitted": "ข้าม {{repliesCount}} คำตอบ <1>คลิกที่นี่</1> เพื่อดู.",
|
||||
"replies_and_links_omitted": "ข้าม {{repliesCount}} คำตอบและ {{linksCount}} ลิงก์ <1>คลิกที่นี่</1> เพื่อดู.",
|
||||
"thread_closed_alert": "กระทู้นี้ถูกปิด",
|
||||
"this_thread_is_closed": "กระทู้นี้ถูกปิด",
|
||||
"reply_to_cid": "ตอบกลับ {{cid}}",
|
||||
"submit": "ส่ง",
|
||||
"gif": "จีไอเอฟ",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "กำลังโหลดการสมัครสมาชิก",
|
||||
"create_board": "สร้างกระดาน",
|
||||
"enter_board_address": "ป้อนที่อยู่บอร์ดใดก็ได้",
|
||||
"board_not_reachable": "ไม่สามารถเข้าถึงบอร์ดได้"
|
||||
"board_not_reachable": "ไม่สามารถเข้าถึงบอร์ดได้",
|
||||
"cannot_edit_thread": "คุณไม่สามารถแก้ไขกระทู้นี้ได้",
|
||||
"cannot_edit_reply": "คุณไม่สามารถแก้ไขคำตอบนี้ได้",
|
||||
"this_thread_was_deleted": "กระทู้นี้ถูกลบโดยผู้แต่ง",
|
||||
"this_thread_was_removed": "กระทู้นี้ถูกลบโดยผู้ดูแลบอร์ด",
|
||||
"this_reply_was_deleted": "การตอบกลับนี้ถูกลบโดยผู้แต่ง",
|
||||
"this_reply_was_removed": "คำตอบนี้ถูกลบโดยผู้ดูแลบอร์ด"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Yorum çok uzun. <1>Buraya tıklayın</1> tam metni görüntülemek için.",
|
||||
"replies_omitted": "{{repliesCount}} yanıt göz ardı edildi. <1>Buraya tıklayın</1> görüntülemek için.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} yanıt ve {{linksCount}} bağlantı göz ardı edildi. <1>Buraya tıklayın</1> görüntülemek için.",
|
||||
"thread_closed_alert": "Bu konu kapatılmıştır",
|
||||
"this_thread_is_closed": "Bu konu kapatılmıştır",
|
||||
"reply_to_cid": "{{cid}}’ye yanıt ver",
|
||||
"submit": "Gönder",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Abonelikler yükleniyor",
|
||||
"create_board": "Tahta oluştur",
|
||||
"enter_board_address": "Herhangi bir tahta adresini girin",
|
||||
"board_not_reachable": "Board erişilemez"
|
||||
"board_not_reachable": "Board erişilemez",
|
||||
"cannot_edit_thread": "Bu başlığı düzenleyemezsiniz",
|
||||
"cannot_edit_reply": "Bu yanıtı düzenleyemezsiniz",
|
||||
"this_thread_was_deleted": "Bu başlık, yazarının tarafından silindi",
|
||||
"this_thread_was_removed": "Bu konu, board moderatörleri tarafından kaldırıldı",
|
||||
"this_reply_was_deleted": "Bu yanıt, yazar tarafından silindi",
|
||||
"this_reply_was_removed": "Bu yanıt, forum moderatörleri tarafından kaldırıldı"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Коментар занадто довгий. <1>Натисніть тут</1>, щоб переглянути повний текст.",
|
||||
"replies_omitted": "{{repliesCount}} відповідей пропущено. <1>Натисніть тут</1>, щоб переглянути.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} відповідей та {{linksCount}} посилань пропущено. <1>Натисніть тут</1>, щоб переглянути.",
|
||||
"thread_closed_alert": "Тему закрито",
|
||||
"this_thread_is_closed": "Тему закрито",
|
||||
"reply_to_cid": "Відповісти на {{cid}}",
|
||||
"submit": "Надіслати",
|
||||
"gif": "ГІФ",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Завантаження підписок",
|
||||
"create_board": "Створити дошку",
|
||||
"enter_board_address": "Введіть будь-яку адресу дошки",
|
||||
"board_not_reachable": "Дошка недоступна"
|
||||
"board_not_reachable": "Дошка недоступна",
|
||||
"cannot_edit_thread": "Ви не можете редагувати цю тему",
|
||||
"cannot_edit_reply": "Ви не можете редагувати цю відповідь",
|
||||
"this_thread_was_deleted": "Цю тему видалив її автор",
|
||||
"this_thread_was_removed": "Цю тему було видалено модераторами форуму",
|
||||
"this_reply_was_deleted": "Цю відповідь було видалено її автором",
|
||||
"this_reply_was_removed": "Цю відповідь було видалено модераторами форуму"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "تبصرہ بہت طویل ہے۔ <1>مکمل متن دیکھنے کے لیے یہاں کلک کریں</1>۔",
|
||||
"replies_omitted": "{{repliesCount}} جوابات چھوڑ دیے گئے ہیں۔ <1>مکمل دیکھنے کے لیے یہاں کلک کریں</1>۔",
|
||||
"replies_and_links_omitted": "{{repliesCount}} جوابات اور {{linksCount}} لنکس چھوڑ دیے گئے ہیں۔ <1>مکمل دیکھنے کے لیے یہاں کلک کریں</1>۔",
|
||||
"thread_closed_alert": "یہ دھاگہ بند ہے",
|
||||
"this_thread_is_closed": "یہ دھاگہ بند ہے",
|
||||
"reply_to_cid": "{{cid}} کا جواب دیں",
|
||||
"submit": "جمع کرائیں",
|
||||
"gif": "جی آئی ایف",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "سبسکرپشن لوڈ ہو رہی ہے",
|
||||
"create_board": "بورڈ بنائیں",
|
||||
"enter_board_address": "کسی بھی بورڈ کا پتہ درج کریں",
|
||||
"board_not_reachable": "بورڈ قابل رسائی نہیں ہے"
|
||||
"board_not_reachable": "بورڈ قابل رسائی نہیں ہے",
|
||||
"cannot_edit_thread": "آپ اس تھریڈ کو ایڈٹ نہیں کر سکتے",
|
||||
"cannot_edit_reply": "آپ اس جواب کو ایڈٹ نہیں کر سکتے",
|
||||
"this_thread_was_deleted": "اس تھریڈ کو اس کے مصنف نے حذف کیا",
|
||||
"this_thread_was_removed": "اس تھریڈ کو بورڈ کے موڈریٹرز نے ہٹا دیا ہے",
|
||||
"this_reply_was_deleted": "اس جواب کو اس کے مصنف نے حذف کر دیا تھا",
|
||||
"this_reply_was_removed": "اس جواب کو بورڈ کے منتظمین نے حذف کر دیا ہے"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "Bình luận quá dài. <1>Nhấn vào đây</1> để xem toàn bộ văn bản.",
|
||||
"replies_omitted": "{{repliesCount}} câu trả lời bị bỏ qua. <1>Nhấn vào đây</1> để xem.",
|
||||
"replies_and_links_omitted": "{{repliesCount}} câu trả lời và {{linksCount}} liên kết bị bỏ qua. <1>Nhấn vào đây</1> để xem.",
|
||||
"thread_closed_alert": "Chủ đề này đã đóng",
|
||||
"this_thread_is_closed": "Chủ đề này đã đóng",
|
||||
"reply_to_cid": "Trả lời {{cid}}",
|
||||
"submit": "Gửi",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "Đang tải đăng ký",
|
||||
"create_board": "Tạo bảng",
|
||||
"enter_board_address": "Nhập bất kỳ địa chỉ bảng nào",
|
||||
"board_not_reachable": "Bảng không thể truy cập"
|
||||
"board_not_reachable": "Bảng không thể truy cập",
|
||||
"cannot_edit_thread": "Bạn không thể chỉnh sửa chủ đề này",
|
||||
"cannot_edit_reply": "Bạn không thể chỉnh sửa phản hồi này",
|
||||
"this_thread_was_deleted": "Chủ đề này đã bị tác giả của nó xóa",
|
||||
"this_thread_was_removed": "Chủ đề này đã bị các quản trị viên diễn đàn xóa",
|
||||
"this_reply_was_deleted": "Câu trả lời này đã bị tác giả của nó xóa",
|
||||
"this_reply_was_removed": "Phản hồi này đã bị xóa bởi các quản trị viên diễn đàn"
|
||||
}
|
||||
@@ -59,7 +59,7 @@
|
||||
"comment_too_long": "评论太长。 <1>点击这里</1>查看完整文本。",
|
||||
"replies_omitted": "省略了{{repliesCount}}条回复。 <1>点击这里</1>查看。",
|
||||
"replies_and_links_omitted": "省略了{{repliesCount}}条回复和{{linksCount}}个链接。 <1>点击这里</1>查看。",
|
||||
"thread_closed_alert": "该主题已关闭",
|
||||
"this_thread_is_closed": "该主题已关闭",
|
||||
"reply_to_cid": "回复{{cid}}",
|
||||
"submit": "提交",
|
||||
"gif": "GIF",
|
||||
@@ -284,5 +284,11 @@
|
||||
"loading_subscriptions": "加载订阅",
|
||||
"create_board": "创建板块",
|
||||
"enter_board_address": "输入任何板块地址",
|
||||
"board_not_reachable": "无法访问板块"
|
||||
"board_not_reachable": "无法访问板块",
|
||||
"cannot_edit_thread": "您无法编辑此线程",
|
||||
"cannot_edit_reply": "您无法编辑此回复",
|
||||
"this_thread_was_deleted": "该线程已被其作者删除",
|
||||
"this_thread_was_removed": "此帖子已被论坛版主删除",
|
||||
"this_reply_was_deleted": "该回复已被其作者删除",
|
||||
"this_reply_was_removed": "该回复已被版主删除"
|
||||
}
|
||||
@@ -9,7 +9,7 @@ import useIsSubplebbitOffline from '../../hooks/use-is-subplebbit-offline';
|
||||
import { shouldShowSnow } from '../../lib/snow';
|
||||
import Tooltip from '../tooltip';
|
||||
|
||||
const totalBanners = 61;
|
||||
const totalBanners = 62;
|
||||
|
||||
const ImageBanner = () => {
|
||||
const [imagePath] = useState(() => {
|
||||
@@ -42,7 +42,7 @@ const BoardHeader = () => {
|
||||
<div className={`${styles.content} ${shouldShowSnow() ? styles.garland : ''}`}>
|
||||
{!useIsMobile() && (
|
||||
<div className={styles.bannerCnt}>
|
||||
<ImageBanner key={isInAllView ? 'all' : isInSubscriptionsView ? 'subscriptions' : address} />
|
||||
<ImageBanner key={isInAllView ? 'all' : isInSubscriptionsView ? 'subscriptions' : subplebbitAddress} />
|
||||
</div>
|
||||
)}
|
||||
<div className={styles.boardTitle}>
|
||||
|
||||
@@ -34,8 +34,7 @@ const timestampToDays = (timestamp: number) => {
|
||||
const EditMenu = ({ post }: { post: Comment }) => {
|
||||
const { t } = useTranslation();
|
||||
const isMobile = useIsMobile();
|
||||
const { author, cid, content, deleted, locked, parentCid, pinned, postCid, reason, removed, spoiler, subplebbitAddress } = post || {};
|
||||
const isReply = parentCid;
|
||||
const { author, cid, content, deleted, isRules, locked, parentCid, pinned, postCid, reason, removed, spoiler, subplebbitAddress } = post || {};
|
||||
const [isEditMenuOpen, setIsEditMenuOpen] = useState(false);
|
||||
const [isContentEditorOpen, setIsContentEditorOpen] = useState(false);
|
||||
|
||||
@@ -236,8 +235,19 @@ const EditMenu = ({ post }: { post: Comment }) => {
|
||||
|
||||
return (
|
||||
<>
|
||||
<span className={`${styles.checkbox} ${isReply && styles.replyCheckbox}`} ref={refs.setReference} {...(cid && getReferenceProps())}>
|
||||
<input type='checkbox' onChange={() => setIsEditMenuOpen(cid && (isAccountCommentAuthor || isAccountMod) ? !isEditMenuOpen : false)} checked={isEditMenuOpen} />
|
||||
<span className={`${styles.checkbox} ${parentCid && styles.replyCheckbox}`} ref={refs.setReference} {...(cid && getReferenceProps())}>
|
||||
<input
|
||||
type='checkbox'
|
||||
onChange={() => {
|
||||
if (cid && (isAccountCommentAuthor || isAccountMod)) {
|
||||
setIsEditMenuOpen(!isEditMenuOpen);
|
||||
} else {
|
||||
setIsEditMenuOpen(false);
|
||||
alert(parentCid || isRules ? t('cannot_edit_reply') : t('cannot_edit_thread'));
|
||||
}
|
||||
}}
|
||||
checked={isEditMenuOpen}
|
||||
/>
|
||||
</span>
|
||||
{isEditMenuOpen && (isAccountCommentAuthor || isAccountMod) && (
|
||||
<FloatingFocusManager context={context} modal={false}>
|
||||
@@ -282,7 +292,7 @@ const EditMenu = ({ post }: { post: Comment }) => {
|
||||
{_.capitalize(t('remove'))}?]
|
||||
</label>
|
||||
</div>
|
||||
{!isReply && (
|
||||
{!parentCid && (
|
||||
<div className={styles.menuItem}>
|
||||
[
|
||||
<label>
|
||||
|
||||
@@ -74,6 +74,8 @@ const YoutubeEmbed = ({ parsedUrl }: EmbedComponentProps) => {
|
||||
if (!videoId) {
|
||||
if (parsedUrl.host.includes('youtu.be')) {
|
||||
videoId = parsedUrl.pathname.substring(1);
|
||||
} else if (parsedUrl.pathname.includes('/shorts/')) {
|
||||
videoId = parsedUrl.pathname.split('/shorts/')[1];
|
||||
} else if (isInvidious) {
|
||||
if (parsedUrl.pathname.startsWith('/watch')) {
|
||||
videoId = parsedUrl.searchParams.get('v');
|
||||
|
||||
@@ -76,6 +76,18 @@ const PostInfo = ({ openReplyModal, post, postReplyCount = 0, roles, isHidden }:
|
||||
|
||||
const { hidden } = useHide(post);
|
||||
|
||||
const onReplyModalClick = () => {
|
||||
deleted
|
||||
? isReply
|
||||
? alert(t('this_reply_was_deleted'))
|
||||
: alert(t('this_thread_was_deleted'))
|
||||
: removed
|
||||
? isReply
|
||||
? alert(t('this_reply_was_removed'))
|
||||
: alert(t('this_thread_was_removed'))
|
||||
: openReplyModal && openReplyModal(cid, postCid, subplebbitAddress);
|
||||
};
|
||||
|
||||
return (
|
||||
<div className={styles.postInfo}>
|
||||
{isHidden ? parentCid && <span className={styles.hiddenReplyEditMenuSpacer} /> : <EditMenu post={post} />}
|
||||
@@ -160,11 +172,7 @@ const PostInfo = ({ openReplyModal, post, postReplyCount = 0, roles, isHidden }:
|
||||
<Link to={`/p/${subplebbitAddress}/c/${cid}`} className={styles.linkToPost} title={t('link_to_post')} onClick={(e) => !cid && e.preventDefault()}>
|
||||
c/
|
||||
</Link>
|
||||
<span
|
||||
className={styles.replyToPost}
|
||||
title={t('reply_to_post')}
|
||||
onMouseDown={() => openReplyModal && !(deleted || removed) && openReplyModal(cid, postCid, subplebbitAddress)}
|
||||
>
|
||||
<span className={styles.replyToPost} title={t('reply_to_post')} onMouseDown={onReplyModalClick}>
|
||||
{shortCid}
|
||||
</span>
|
||||
</span>
|
||||
@@ -407,7 +415,7 @@ const PostDesktop = ({ openReplyModal, post, roles, showAllReplies, showReplies
|
||||
)}
|
||||
</div>
|
||||
{!isInPendingPostView &&
|
||||
!isDescription &&
|
||||
(!isDescription || (isDescription && !subplebbit?.updatedAt)) &&
|
||||
!isRules &&
|
||||
stateString &&
|
||||
stateString !== 'Failed' &&
|
||||
|
||||
@@ -57,6 +57,18 @@ const PostInfoAndMedia = ({ openReplyModal, post, postReplyCount = 0, roles }: P
|
||||
|
||||
const { hidden } = useHide(post);
|
||||
|
||||
const onReplyModalClick = () => {
|
||||
deleted
|
||||
? isReply
|
||||
? alert(t('this_reply_was_deleted'))
|
||||
: alert(t('this_thread_was_deleted'))
|
||||
: removed
|
||||
? isReply
|
||||
? alert(t('this_reply_was_removed'))
|
||||
: alert(t('this_thread_was_removed'))
|
||||
: openReplyModal && openReplyModal(cid, postCid, subplebbitAddress);
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className={styles.postInfo}>
|
||||
@@ -152,11 +164,7 @@ const PostInfoAndMedia = ({ openReplyModal, post, postReplyCount = 0, roles }: P
|
||||
<Link to={`/p/${subplebbitAddress}/c/${cid}`} className={styles.linkToPost} title={t('link_to_post')} onClick={(e) => !cid && e.preventDefault()}>
|
||||
c/
|
||||
</Link>
|
||||
<span
|
||||
className={styles.replyToPost}
|
||||
title={t('reply_to_post')}
|
||||
onMouseDown={() => openReplyModal && !(deleted || removed) && openReplyModal(cid, postCid, subplebbitAddress)}
|
||||
>
|
||||
<span className={styles.replyToPost} title={t('reply_to_post')} onMouseDown={onReplyModalClick}>
|
||||
{shortCid.slice(0, -4)}
|
||||
</span>
|
||||
</span>
|
||||
@@ -333,7 +341,7 @@ const PostMobile = ({ openReplyModal, post, roles, showAllReplies, showReplies =
|
||||
)}
|
||||
</div>
|
||||
{!isInPendingPostView &&
|
||||
!isDescription &&
|
||||
(!isDescription || (isDescription && !subplebbit?.updatedAt)) &&
|
||||
!isRules &&
|
||||
stateString &&
|
||||
stateString !== 'Failed' &&
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
.container {
|
||||
position: fixed;
|
||||
top: calc(50% - 150px);
|
||||
left: calc(50% - 150px);
|
||||
display: block;
|
||||
padding: 2px;
|
||||
font-size: 10pt;
|
||||
@@ -10,6 +8,9 @@
|
||||
z-index: 3;
|
||||
background-color: var(--challenge-modal-background-color);
|
||||
border: var(--challenge-modal-border);
|
||||
will-change: transform;
|
||||
backface-visibility: hidden;
|
||||
-webkit-backface-visibility: hidden;
|
||||
}
|
||||
|
||||
.title {
|
||||
@@ -24,6 +25,9 @@
|
||||
background-color: var(--challenge-modal-title-background-color);
|
||||
color: var(--challenge-modal-title-text-color);
|
||||
border: var(--challenge-modal-title-border);
|
||||
user-select: none;
|
||||
-webkit-user-select: none;
|
||||
touch-action: none;
|
||||
}
|
||||
|
||||
.closeIcon {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import { useCallback, useEffect, useRef, useState } from 'react';
|
||||
import { useLocation, useParams } from 'react-router-dom';
|
||||
import { Trans, useTranslation } from 'react-i18next';
|
||||
import Draggable from 'react-draggable';
|
||||
import { setAccount, useAccount, useComment, useSubplebbit } from '@plebbit/plebbit-react-hooks';
|
||||
import Plebbit from '@plebbit/plebbit-js/dist/browser/index.js';
|
||||
import { formatMarkdown } from '../../lib/utils/post-utils';
|
||||
@@ -17,6 +16,8 @@ import _ from 'lodash';
|
||||
import useAnonMode from '../../hooks/use-anon-mode';
|
||||
import FileUploader from '../../plugins/file-uploader';
|
||||
import { Capacitor } from '@capacitor/core';
|
||||
import { useSpring, animated } from '@react-spring/web';
|
||||
import { useDrag } from '@use-gesture/react';
|
||||
|
||||
const isAndroid = Capacitor.getPlatform() === 'android';
|
||||
|
||||
@@ -144,14 +145,29 @@ const ReplyModal = ({ closeModal, showReplyModal, parentCid, postCid, scrollY, s
|
||||
const nodeRef = useRef<HTMLDivElement>(null);
|
||||
const isMobile = useIsMobile();
|
||||
|
||||
const [{ x, y }, api] = useSpring(() => ({
|
||||
x: window.innerWidth / 2 - 150,
|
||||
y: window.innerHeight / 2 - 400,
|
||||
}));
|
||||
|
||||
const bind = useDrag(
|
||||
({ offset: [ox, oy] }) => {
|
||||
api.start({ x: ox, y: oy, immediate: true });
|
||||
},
|
||||
{
|
||||
from: () => [x.get(), y.get()],
|
||||
filterTaps: true,
|
||||
bounds: undefined,
|
||||
},
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
if (nodeRef.current && isMobile) {
|
||||
const viewportHeight = window.innerHeight;
|
||||
const modalHeight = 150;
|
||||
const centeredPosition = scrollY + viewportHeight / 2 - modalHeight / 2;
|
||||
nodeRef.current.style.top = `${centeredPosition}px`;
|
||||
const centeredPosition = scrollY + viewportHeight / 2 - 300;
|
||||
api.start({ y: centeredPosition, immediate: true });
|
||||
}
|
||||
}, [isMobile, scrollY]);
|
||||
}, [isMobile, scrollY, api]);
|
||||
|
||||
const parentCidRef = useRef<HTMLSpanElement>(null);
|
||||
|
||||
@@ -275,8 +291,16 @@ const ReplyModal = ({ closeModal, showReplyModal, parentCid, postCid, scrollY, s
|
||||
}, [displayName, setPublishReplyOptions]);
|
||||
|
||||
const modalContent = (
|
||||
<div className={styles.container} ref={nodeRef}>
|
||||
<div className={`replyModalHandle ${styles.title}`}>
|
||||
<animated.div
|
||||
className={styles.container}
|
||||
ref={nodeRef}
|
||||
style={{
|
||||
x,
|
||||
y,
|
||||
touchAction: 'none',
|
||||
}}
|
||||
>
|
||||
<div className={`replyModalHandle ${styles.title}`} {...(!isMobile ? bind() : {})}>
|
||||
{t('reply_to_cid', { cid: `c/${parentCid && Plebbit.getShortCid(parentCid)}`, interpolation: { escapeValue: false } })}
|
||||
<button
|
||||
className={styles.closeIcon}
|
||||
@@ -346,19 +370,10 @@ const ReplyModal = ({ closeModal, showReplyModal, parentCid, postCid, scrollY, s
|
||||
{lengthError ? <div className={styles.error}>{lengthError}</div> : error && <div className={styles.error}>{error}</div>}
|
||||
{!(isInAllView || isInSubscriptionsView) && offlineAlert}
|
||||
</div>
|
||||
</div>
|
||||
</animated.div>
|
||||
);
|
||||
|
||||
return (
|
||||
showReplyModal &&
|
||||
(isMobile ? (
|
||||
modalContent
|
||||
) : (
|
||||
<Draggable handle='.replyModalHandle' nodeRef={nodeRef}>
|
||||
{modalContent}
|
||||
</Draggable>
|
||||
))
|
||||
);
|
||||
return showReplyModal && modalContent;
|
||||
};
|
||||
|
||||
export default ReplyModal;
|
||||
|
||||
@@ -5,12 +5,6 @@ const { version } = packageJson;
|
||||
const commitRef = process.env.REACT_APP_COMMIT_REF;
|
||||
const isElectron = window.isElectron === true;
|
||||
|
||||
const getBetaVersion = (version: string) => {
|
||||
const parts = version.split('.');
|
||||
parts[parts.length - 1] = (parseInt(parts[parts.length - 1]) + 1).toString();
|
||||
return parts.join('.') + '-beta';
|
||||
};
|
||||
|
||||
const Version = () => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
@@ -21,7 +15,7 @@ const Version = () => {
|
||||
target='_blank'
|
||||
rel='noopener noreferrer'
|
||||
>
|
||||
v{commitRef ? getBetaVersion(version) : version}
|
||||
v{commitRef ? '-dev' : version}
|
||||
</a>
|
||||
{isElectron && (
|
||||
<>
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
import { useMemo } from 'react';
|
||||
|
||||
const getUniqueTags = (multisub: any) => {
|
||||
const allTags = new Set<string>();
|
||||
Object.values(multisub).forEach((sub: any) => {
|
||||
if (sub?.tags?.length) {
|
||||
sub.tags.forEach((tag: string) => allTags.add(tag));
|
||||
}
|
||||
});
|
||||
return Array.from(allTags).sort();
|
||||
};
|
||||
|
||||
export const useDefaultSubplebbitTags = (subplebbits: any) => {
|
||||
return useMemo(() => getUniqueTags(subplebbits), [subplebbits]);
|
||||
};
|
||||
@@ -13,6 +13,7 @@ export interface MultisubSubplebbit {
|
||||
tags?: string[];
|
||||
features?: string[];
|
||||
plebchanAutoSubscribe?: boolean;
|
||||
lowUptime?: boolean;
|
||||
}
|
||||
|
||||
export interface DefaultSubplebbitsState {
|
||||
@@ -51,15 +52,17 @@ export const useDefaultSubplebbits = () => {
|
||||
return res.json();
|
||||
});
|
||||
|
||||
cacheSubplebbits = multisub.subplebbits;
|
||||
const filteredSubplebbits = multisub.subplebbits.filter((sub: MultisubSubplebbit) => !sub.lowUptime);
|
||||
|
||||
cacheSubplebbits = filteredSubplebbits;
|
||||
|
||||
// Cache auto-subscribe addresses when we fetch subplebbits
|
||||
cacheAutoSubscribeAddresses = multisub.subplebbits
|
||||
cacheAutoSubscribeAddresses = filteredSubplebbits
|
||||
.filter((sub: MultisubSubplebbit) => sub.plebchanAutoSubscribe && sub.address)
|
||||
.map((sub: MultisubSubplebbit) => sub.address);
|
||||
|
||||
setState({
|
||||
subplebbits: multisub.subplebbits,
|
||||
subplebbits: filteredSubplebbits,
|
||||
loading: false,
|
||||
error: null,
|
||||
});
|
||||
@@ -78,6 +81,8 @@ export const useDefaultSubplebbits = () => {
|
||||
return cacheSubplebbits || state.subplebbits;
|
||||
};
|
||||
|
||||
export const getAutoSubscribeAddresses = () => cacheAutoSubscribeAddresses || [];
|
||||
|
||||
export const useDefaultSubplebbitsState = () => {
|
||||
const [state, setState] = useState<DefaultSubplebbitsState>({
|
||||
subplebbits: cacheSubplebbits || [],
|
||||
@@ -154,4 +159,16 @@ export const useMultisubMetadata = () => {
|
||||
return cacheMetadata || metadata;
|
||||
};
|
||||
|
||||
export const getAutoSubscribeAddresses = () => cacheAutoSubscribeAddresses || [];
|
||||
const getUniqueTags = (multisub: any) => {
|
||||
const allTags = new Set<string>();
|
||||
Object.values(multisub).forEach((sub: any) => {
|
||||
if (sub?.tags?.length) {
|
||||
sub.tags.forEach((tag: string) => allTags.add(tag));
|
||||
}
|
||||
});
|
||||
return Array.from(allTags).sort();
|
||||
};
|
||||
|
||||
export const useDefaultSubplebbitTags = (subplebbits: any) => {
|
||||
return useMemo(() => getUniqueTags(subplebbits), [subplebbits]);
|
||||
};
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
import { useMemo } from 'react';
|
||||
import useStateString from './use-state-string';
|
||||
import { useSubplebbit, useSubplebbitsStates } from '@plebbit/plebbit-react-hooks';
|
||||
|
||||
const clientHosts: { [key: string]: string } = {};
|
||||
|
||||
const getClientHost = (clientUrl: string): string => {
|
||||
if (!clientHosts[clientUrl]) {
|
||||
try {
|
||||
clientHosts[clientUrl] = new URL(clientUrl).hostname || clientUrl;
|
||||
} catch (e) {
|
||||
clientHosts[clientUrl] = clientUrl;
|
||||
}
|
||||
}
|
||||
return clientHosts[clientUrl];
|
||||
};
|
||||
|
||||
const useFeedStateString = (subplebbitAddresses?: string[]): string | undefined => {
|
||||
// single subplebbit feed state string
|
||||
const subplebbitAddress = subplebbitAddresses?.length === 1 ? subplebbitAddresses[0] : undefined;
|
||||
const subplebbit = useSubplebbit({ subplebbitAddress });
|
||||
const singleSubplebbitFeedStateString = useStateString(subplebbit);
|
||||
|
||||
// multiple subplebbit feed state string
|
||||
const { states } = useSubplebbitsStates({ subplebbitAddresses });
|
||||
|
||||
const multipleSubplebbitsFeedStateString = useMemo(() => {
|
||||
if (subplebbitAddress) {
|
||||
return;
|
||||
}
|
||||
|
||||
// e.g. Resolving 2 addresses from infura.io, fetching 2 IPNS, 1 IPFS from cloudflare-ipfs.com, ipfs.io
|
||||
let stateString = '';
|
||||
|
||||
if (states['resolving-address']) {
|
||||
const { subplebbitAddresses, clientUrls } = states['resolving-address'];
|
||||
if (subplebbitAddresses.length && clientUrls.length) {
|
||||
stateString += `resolving ${subplebbitAddresses.length} ${subplebbitAddresses.length === 1 ? 'address' : 'addresses'} from ${clientUrls
|
||||
.map(getClientHost)
|
||||
.join(', ')}`;
|
||||
}
|
||||
}
|
||||
|
||||
// find all page client and sub addresses
|
||||
const pagesStatesClientHosts = new Set();
|
||||
const pagesStatesSubplebbitAddresses = new Set();
|
||||
for (const state in states) {
|
||||
if (state.match('page')) {
|
||||
states[state].clientUrls.forEach((clientUrl) => pagesStatesClientHosts.add(getClientHost(clientUrl)));
|
||||
states[state].subplebbitAddresses.forEach((subplebbitAddress) => pagesStatesSubplebbitAddresses.add(subplebbitAddress));
|
||||
}
|
||||
}
|
||||
|
||||
if (states['fetching-ipns'] || states['fetching-ipfs'] || pagesStatesSubplebbitAddresses.size) {
|
||||
// separate 2 different states using ', '
|
||||
if (stateString) {
|
||||
stateString += ', ';
|
||||
}
|
||||
|
||||
// find all client urls
|
||||
const clientHosts = new Set([...pagesStatesClientHosts]);
|
||||
states['fetching-ipns']?.clientUrls.forEach((clientUrl) => clientHosts.add(getClientHost(clientUrl)));
|
||||
states['fetching-ipfs']?.clientUrls.forEach((clientUrl) => clientHosts.add(getClientHost(clientUrl)));
|
||||
|
||||
if (clientHosts.size) {
|
||||
stateString += 'loading ';
|
||||
if (states['fetching-ipns']) {
|
||||
stateString += `${states['fetching-ipns'].subplebbitAddresses.length} boards`;
|
||||
}
|
||||
if (states['fetching-ipfs']) {
|
||||
if (states['fetching-ipns']) {
|
||||
stateString += ', ';
|
||||
}
|
||||
stateString += `${states['fetching-ipfs'].subplebbitAddresses.length} posts`;
|
||||
}
|
||||
if (pagesStatesSubplebbitAddresses.size) {
|
||||
if (states['fetching-ipns'] || states['fetching-ipfs']) {
|
||||
stateString += ', ';
|
||||
}
|
||||
stateString += `${pagesStatesSubplebbitAddresses.size} ${pagesStatesSubplebbitAddresses.size === 1 ? 'page' : 'pages'}`;
|
||||
}
|
||||
stateString += ` from ${[...clientHosts].join(', ')}`;
|
||||
}
|
||||
}
|
||||
|
||||
// capitalize first letter
|
||||
stateString = stateString.charAt(0).toUpperCase() + stateString.slice(1);
|
||||
|
||||
// if string is empty, return undefined instead
|
||||
return stateString === '' ? undefined : stateString;
|
||||
}, [states, subplebbitAddress]);
|
||||
|
||||
if (singleSubplebbitFeedStateString) {
|
||||
return singleSubplebbitFeedStateString;
|
||||
}
|
||||
return multipleSubplebbitsFeedStateString;
|
||||
};
|
||||
|
||||
export default useFeedStateString;
|
||||
@@ -1,5 +1,5 @@
|
||||
import { useMemo } from 'react';
|
||||
import { useClientsStates } from '@plebbit/plebbit-react-hooks';
|
||||
import { useClientsStates, useSubplebbit, useSubplebbitsStates } from '@plebbit/plebbit-react-hooks';
|
||||
import { debounce } from 'lodash';
|
||||
|
||||
interface CommentOrSubplebbit {
|
||||
@@ -61,11 +61,11 @@ const useStateString = (commentOrSubplebbit: CommentOrSubplebbit): string | unde
|
||||
if (stateString) {
|
||||
stateString = stateString
|
||||
.replaceAll('-', ' ')
|
||||
.replace('ipfs', 'post')
|
||||
.replace('ipfs', 'thread')
|
||||
.replace('ipns', 'subplebbit')
|
||||
.replace('fetching', 'loading')
|
||||
.replace('fetching', 'downloading')
|
||||
.replace('subplebbit subplebbit', 'board')
|
||||
.replace('loading subplebbit', 'loading board');
|
||||
.replace('downloading subplebbit', 'downloading board');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,4 +77,85 @@ const useStateString = (commentOrSubplebbit: CommentOrSubplebbit): string | unde
|
||||
}, [debouncedStates, commentOrSubplebbit]);
|
||||
};
|
||||
|
||||
export const useFeedStateString = (subplebbitAddresses?: string[]): string | undefined => {
|
||||
// single subplebbit feed state string
|
||||
const subplebbitAddress = subplebbitAddresses?.length === 1 ? subplebbitAddresses[0] : undefined;
|
||||
const subplebbit = useSubplebbit({ subplebbitAddress });
|
||||
const singleSubplebbitFeedStateString = useStateString(subplebbit);
|
||||
|
||||
// multiple subplebbit feed state string
|
||||
const { states } = useSubplebbitsStates({ subplebbitAddresses });
|
||||
|
||||
const multipleSubplebbitsFeedStateString = useMemo(() => {
|
||||
if (subplebbitAddress) {
|
||||
return;
|
||||
}
|
||||
|
||||
// e.g. Resolving 2 addresses from infura.io, fetching 2 IPNS, 1 IPFS from cloudflare-ipfs.com, ipfs.io
|
||||
let stateString = '';
|
||||
|
||||
if (states['resolving-address']) {
|
||||
const { subplebbitAddresses, clientUrls } = states['resolving-address'];
|
||||
if (subplebbitAddresses.length && clientUrls.length) {
|
||||
stateString += `resolving ${subplebbitAddresses.length} ${subplebbitAddresses.length === 1 ? 'address' : 'addresses'} from ${clientUrls
|
||||
.map(getClientHost)
|
||||
.join(', ')}`;
|
||||
}
|
||||
}
|
||||
|
||||
// find all page client and sub addresses
|
||||
const pagesStatesClientHosts = new Set();
|
||||
const pagesStatesSubplebbitAddresses = new Set();
|
||||
for (const state in states) {
|
||||
if (state.match('page')) {
|
||||
states[state].clientUrls.forEach((clientUrl) => pagesStatesClientHosts.add(getClientHost(clientUrl)));
|
||||
states[state].subplebbitAddresses.forEach((subplebbitAddress) => pagesStatesSubplebbitAddresses.add(subplebbitAddress));
|
||||
}
|
||||
}
|
||||
|
||||
if (states['fetching-ipns'] || states['fetching-ipfs'] || pagesStatesSubplebbitAddresses.size) {
|
||||
// separate 2 different states using ', '
|
||||
if (stateString) {
|
||||
stateString += ', ';
|
||||
}
|
||||
|
||||
// find all client urls
|
||||
const clientHosts = new Set([...pagesStatesClientHosts]);
|
||||
states['fetching-ipns']?.clientUrls.forEach((clientUrl) => clientHosts.add(getClientHost(clientUrl)));
|
||||
states['fetching-ipfs']?.clientUrls.forEach((clientUrl) => clientHosts.add(getClientHost(clientUrl)));
|
||||
|
||||
if (clientHosts.size) {
|
||||
stateString += 'downloading ';
|
||||
if (states['fetching-ipns']) {
|
||||
stateString += `${states['fetching-ipns'].subplebbitAddresses.length} boards`;
|
||||
}
|
||||
if (states['fetching-ipfs']) {
|
||||
if (states['fetching-ipns']) {
|
||||
stateString += ', ';
|
||||
}
|
||||
stateString += `${states['fetching-ipfs'].subplebbitAddresses.length} threads`;
|
||||
}
|
||||
if (pagesStatesSubplebbitAddresses.size) {
|
||||
if (states['fetching-ipns'] || states['fetching-ipfs']) {
|
||||
stateString += ', ';
|
||||
}
|
||||
stateString += `${pagesStatesSubplebbitAddresses.size} ${pagesStatesSubplebbitAddresses.size === 1 ? 'page' : 'pages'}`;
|
||||
}
|
||||
stateString += ` from ${[...clientHosts].join(', ')}`;
|
||||
}
|
||||
}
|
||||
|
||||
// capitalize first letter
|
||||
stateString = stateString.charAt(0).toUpperCase() + stateString.slice(1);
|
||||
|
||||
// if string is empty, return undefined instead
|
||||
return stateString === '' ? undefined : stateString;
|
||||
}, [states, subplebbitAddress]);
|
||||
|
||||
if (singleSubplebbitFeedStateString) {
|
||||
return singleSubplebbitFeedStateString;
|
||||
}
|
||||
return multipleSubplebbitsFeedStateString;
|
||||
};
|
||||
|
||||
export default useStateString;
|
||||
|
||||
@@ -52,6 +52,8 @@ export const getHasThumbnail = (commentMediaInfo: CommentMediaInfo | undefined,
|
||||
const getYouTubeVideoId = (url: URL): string | null => {
|
||||
if (url.host.includes('youtu.be')) {
|
||||
return url.pathname.slice(1);
|
||||
} else if (url.pathname.includes('/shorts/')) {
|
||||
return url.pathname.split('/shorts/')[1].split('/')[0];
|
||||
} else if (url.searchParams.has('v')) {
|
||||
return url.searchParams.get('v');
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import { shouldShowSnow } from '../../lib/snow';
|
||||
import { getCommentMediaInfo, getHasThumbnail } from '../../lib/utils/media-utils';
|
||||
import { isAllView, isSubscriptionsView } from '../../lib/utils/view-utils';
|
||||
import { useDefaultSubplebbitAddresses } from '../../hooks/use-default-subplebbits';
|
||||
import useFeedStateString from '../../hooks/use-feed-state-string';
|
||||
import { useFeedStateString } from '../../hooks/use-state-string';
|
||||
import useReplyModal from '../../hooks/use-reply-modal';
|
||||
import useTimeFilter from '../../hooks/use-time-filter';
|
||||
import useInterfaceSettingsStore from '../../stores/use-interface-settings-store';
|
||||
@@ -56,16 +56,13 @@ const Board = () => {
|
||||
const { sortType } = useSortingStore();
|
||||
const { timeFilterSeconds, timeFilterName } = useTimeFilter();
|
||||
|
||||
const feedOptions: any = useMemo(
|
||||
() => ({
|
||||
subplebbitAddresses,
|
||||
sortType,
|
||||
postsPerPage: isInAllView || isInSubscriptionsView ? 5 : 25,
|
||||
...(isInAllView || isInSubscriptionsView ? { newerThan: timeFilterSeconds } : {}),
|
||||
filter: hideThreadsWithoutImages ? threadsWithoutImagesFilter : undefined,
|
||||
}),
|
||||
[subplebbitAddresses, sortType, timeFilterSeconds, isInAllView, isInSubscriptionsView, hideThreadsWithoutImages],
|
||||
);
|
||||
const feedOptions = {
|
||||
subplebbitAddresses,
|
||||
sortType,
|
||||
postsPerPage: isInAllView || isInSubscriptionsView ? 5 : 25,
|
||||
...(isInAllView || isInSubscriptionsView ? { newerThan: timeFilterSeconds } : {}),
|
||||
filter: hideThreadsWithoutImages ? threadsWithoutImagesFilter : undefined,
|
||||
};
|
||||
|
||||
const { feed, hasMore, loadMore, reset, subplebbitAddressesWithNewerPosts } = useFeed(feedOptions);
|
||||
const { accountComments } = useAccountComments();
|
||||
|
||||
@@ -7,7 +7,7 @@ import { getCommentMediaInfo, getHasThumbnail } from '../../lib/utils/media-util
|
||||
import { isAllView, isSubscriptionsView } from '../../lib/utils/view-utils';
|
||||
import useCatalogFeedRows from '../../hooks/use-catalog-feed-rows';
|
||||
import { useDefaultSubplebbits } from '../../hooks/use-default-subplebbits';
|
||||
import useFeedStateString from '../../hooks/use-feed-state-string';
|
||||
import { useFeedStateString } from '../../hooks/use-state-string';
|
||||
import useTimeFilter from '../../hooks/use-time-filter';
|
||||
import useWindowWidth from '../../hooks/use-window-width';
|
||||
import useCatalogStyleStore from '../../stores/use-catalog-style-store';
|
||||
|
||||
@@ -3,8 +3,7 @@ import { Link, useLocation } from 'react-router-dom';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import Plebbit from '@plebbit/plebbit-js/dist/browser/index.js';
|
||||
import { Subplebbit, useSubplebbit, useSubplebbitStats } from '@plebbit/plebbit-react-hooks';
|
||||
import { useDefaultSubplebbitsState } from '../../../hooks/use-default-subplebbits';
|
||||
import { useDefaultSubplebbitTags } from '../../../hooks/use-default-subplebbits-tags';
|
||||
import { useDefaultSubplebbitsState, useDefaultSubplebbitTags } from '../../../hooks/use-default-subplebbits';
|
||||
import useIsMobile from '../../../hooks/use-is-mobile';
|
||||
import useIsSubplebbitOffline from '../../../hooks/use-is-subplebbit-offline';
|
||||
import LoadingEllipsis from '../../../components/loading-ellipsis';
|
||||
|
||||
+5
-26
@@ -3,7 +3,6 @@ import { Link, useNavigate } from 'react-router-dom';
|
||||
import { Trans, useTranslation } from 'react-i18next';
|
||||
import { useSubplebbits } from '@plebbit/plebbit-react-hooks';
|
||||
import styles from './home.module.css';
|
||||
import packageJson from '../../../package.json';
|
||||
import { useDefaultSubplebbits, useDefaultSubplebbitAddresses } from '../../hooks/use-default-subplebbits';
|
||||
import useSubplebbitsStats from '../../hooks/use-subplebbits-stats';
|
||||
import PopularThreadsBox from './popular-threads-box';
|
||||
@@ -106,24 +105,6 @@ const Stats = ({ subplebbitAddresses }: { subplebbitAddresses: string[] }) => {
|
||||
);
|
||||
};
|
||||
|
||||
const { version } = packageJson;
|
||||
const downloadAppLink = (() => {
|
||||
const platform = navigator.platform;
|
||||
if (platform === 'Linux' || platform === 'Linux x86_64' || platform === 'Linux i686' || platform === 'Linux aarch64') {
|
||||
return `https://github.com/plebbit/plebchan/releases/download/v${version}/plebchan-${version}.AppImage`;
|
||||
} else if (platform === 'Win32' || platform === 'Win64' || platform === 'Windows') {
|
||||
return `https://github.com/plebbit/plebchan/releases/download/v${version}/plebchan.Portable.${version}.exe`;
|
||||
} else if (platform === 'MacIntel' || platform === 'Macintosh') {
|
||||
return `https://github.com/plebbit/plebchan/releases/download/v${version}/plebchan-${version}.dmg`;
|
||||
} else if (platform === 'Android') {
|
||||
return undefined;
|
||||
} else if (platform === 'iPhone' || platform === 'iPad') {
|
||||
return undefined;
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
})();
|
||||
|
||||
export const Footer = () => {
|
||||
const { t } = useTranslation();
|
||||
return (
|
||||
@@ -134,13 +115,11 @@ export const Footer = () => {
|
||||
{t('about')}
|
||||
</a>
|
||||
</li>
|
||||
{downloadAppLink && (
|
||||
<li>
|
||||
<a href={downloadAppLink} target='_blank' rel='noopener noreferrer'>
|
||||
{t('download_app')}
|
||||
</a>
|
||||
</li>
|
||||
)}
|
||||
<li>
|
||||
<a href='https://blog.plebbit.eth.limo' target='_blank' rel='noopener noreferrer'>
|
||||
Blog
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<Link to='/faq'>FAQ</Link>
|
||||
</li>
|
||||
|
||||
+2
-11
@@ -30,14 +30,6 @@ export const Post = ({ post, showAllReplies = false, showReplies = true, openRep
|
||||
const subplebbit = useSubplebbit({ subplebbitAddress: post?.subplebbitAddress });
|
||||
const isMobile = useIsMobile();
|
||||
|
||||
const { deleted, locked, removed } = post || {};
|
||||
const isThreadClosed = deleted || locked || removed;
|
||||
|
||||
const { t } = useTranslation();
|
||||
if (isThreadClosed) {
|
||||
openReplyModal = () => alert(t('thread_closed_alert'));
|
||||
}
|
||||
|
||||
let comment = post;
|
||||
|
||||
// handle pending mod or author edit
|
||||
@@ -85,8 +77,7 @@ const PostPage = () => {
|
||||
post = comment;
|
||||
}
|
||||
|
||||
const { error, deleted, locked, removed, replyCount } = post || {};
|
||||
const isThreadClosed = deleted || locked || removed;
|
||||
const { error, replyCount } = post || {};
|
||||
|
||||
useEffect(() => {
|
||||
window.scrollTo(0, 0);
|
||||
@@ -128,7 +119,7 @@ const PostPage = () => {
|
||||
) : isInRulesView ? (
|
||||
<SubplebbitRules createdAt={createdAt} rules={rules} subplebbitAddress={subplebbitAddress} />
|
||||
) : (
|
||||
<Post post={post} showAllReplies={true} openReplyModal={isThreadClosed ? () => alert(t('thread_closed_alert')) : openReplyModal} />
|
||||
<Post post={post} showAllReplies={true} openReplyModal={openReplyModal} />
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -3412,6 +3412,51 @@
|
||||
resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
|
||||
integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==
|
||||
|
||||
"@react-spring/animated@~9.7.5":
|
||||
version "9.7.5"
|
||||
resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.7.5.tgz#eb0373aaf99b879736b380c2829312dae3b05f28"
|
||||
integrity sha512-Tqrwz7pIlsSDITzxoLS3n/v/YCUHQdOIKtOJf4yL6kYVSDTSmVK1LI1Q3M/uu2Sx4X3pIWF3xLUhlsA6SPNTNg==
|
||||
dependencies:
|
||||
"@react-spring/shared" "~9.7.5"
|
||||
"@react-spring/types" "~9.7.5"
|
||||
|
||||
"@react-spring/core@~9.7.5":
|
||||
version "9.7.5"
|
||||
resolved "https://registry.yarnpkg.com/@react-spring/core/-/core-9.7.5.tgz#72159079f52c1c12813d78b52d4f17c0bf6411f7"
|
||||
integrity sha512-rmEqcxRcu7dWh7MnCcMXLvrf6/SDlSokLaLTxiPlAYi11nN3B5oiCUAblO72o+9z/87j2uzxa2Inm8UbLjXA+w==
|
||||
dependencies:
|
||||
"@react-spring/animated" "~9.7.5"
|
||||
"@react-spring/shared" "~9.7.5"
|
||||
"@react-spring/types" "~9.7.5"
|
||||
|
||||
"@react-spring/rafz@~9.7.5":
|
||||
version "9.7.5"
|
||||
resolved "https://registry.yarnpkg.com/@react-spring/rafz/-/rafz-9.7.5.tgz#ee7959676e7b5d6a3813e8c17d5e50df98b95df9"
|
||||
integrity sha512-5ZenDQMC48wjUzPAm1EtwQ5Ot3bLIAwwqP2w2owG5KoNdNHpEJV263nGhCeKKmuA3vG2zLLOdu3or6kuDjA6Aw==
|
||||
|
||||
"@react-spring/shared@~9.7.5":
|
||||
version "9.7.5"
|
||||
resolved "https://registry.yarnpkg.com/@react-spring/shared/-/shared-9.7.5.tgz#6d513622df6ad750bbbd4dedb4ca0a653ec92073"
|
||||
integrity sha512-wdtoJrhUeeyD/PP/zo+np2s1Z820Ohr/BbuVYv+3dVLW7WctoiN7std8rISoYoHpUXtbkpesSKuPIw/6U1w1Pw==
|
||||
dependencies:
|
||||
"@react-spring/rafz" "~9.7.5"
|
||||
"@react-spring/types" "~9.7.5"
|
||||
|
||||
"@react-spring/types@~9.7.5":
|
||||
version "9.7.5"
|
||||
resolved "https://registry.yarnpkg.com/@react-spring/types/-/types-9.7.5.tgz#e5dd180f3ed985b44fd2cd2f32aa9203752ef3e8"
|
||||
integrity sha512-HVj7LrZ4ReHWBimBvu2SKND3cDVUPWKLqRTmWe/fNY6o1owGOX0cAHbdPDTMelgBlVbrTKrre6lFkhqGZErK/g==
|
||||
|
||||
"@react-spring/web@^9.7.5":
|
||||
version "9.7.5"
|
||||
resolved "https://registry.yarnpkg.com/@react-spring/web/-/web-9.7.5.tgz#7d7782560b3a6fb9066b52824690da738605de80"
|
||||
integrity sha512-lmvqGwpe+CSttsWNZVr+Dg62adtKhauGwLyGE/RRyZ8AAMLgb9x3NDMA5RMElXo+IMyTkPp7nxTB8ZQlmhb6JQ==
|
||||
dependencies:
|
||||
"@react-spring/animated" "~9.7.5"
|
||||
"@react-spring/core" "~9.7.5"
|
||||
"@react-spring/shared" "~9.7.5"
|
||||
"@react-spring/types" "~9.7.5"
|
||||
|
||||
"@remix-run/router@1.9.0":
|
||||
version "1.9.0"
|
||||
resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.9.0.tgz#9033238b41c4cbe1e961eccb3f79e2c588328cf6"
|
||||
@@ -4471,6 +4516,18 @@
|
||||
resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.1.tgz#28fa185f67daaf7b7a1a8c1d445132c5d979f8bd"
|
||||
integrity sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==
|
||||
|
||||
"@use-gesture/core@10.3.1":
|
||||
version "10.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@use-gesture/core/-/core-10.3.1.tgz#976c9421e905f0079d49822cfd5c2e56b808fc56"
|
||||
integrity sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==
|
||||
|
||||
"@use-gesture/react@^10.3.1":
|
||||
version "10.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@use-gesture/react/-/react-10.3.1.tgz#17a743a894d9bd9a0d1980c618f37f0164469867"
|
||||
integrity sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g==
|
||||
dependencies:
|
||||
"@use-gesture/core" "10.3.1"
|
||||
|
||||
"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1":
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6"
|
||||
|
||||
Reference in New Issue
Block a user