mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
fix(mod queue): restrict trash action to trash board
This commit is contained in:
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "يجب عليك الرد برابط.",
|
"reply_link_required_alert": "يجب عليك الرد برابط.",
|
||||||
"reply_media_link_required_alert": "يجب عليك الرد برابط لصورة أو فيديو.",
|
"reply_media_link_required_alert": "يجب عليك الرد برابط لصورة أو فيديو.",
|
||||||
"reply_links_not_allowed_alert": "لا يُسمح بروابط الردود في هذه اللوحة.",
|
"reply_links_not_allowed_alert": "لا يُسمح بروابط الردود في هذه اللوحة.",
|
||||||
"transfer": "نقل",
|
"modQueue.transferTitle": "انقل المنشور إلى /trash/",
|
||||||
"modQueue.transferTitle": "نقل المنشور",
|
|
||||||
"modQueue.transferSource": "من",
|
"modQueue.transferSource": "من",
|
||||||
"modQueue.transferTarget": "إلى منتدى",
|
"modQueue.transferTarget": "إلى",
|
||||||
"modQueue.transferFields": "نسخ الحقول",
|
"modQueue.transferFields": "نسخ الحقول",
|
||||||
"modQueue.transferNoFields": "اختر حقلًا واحدًا على الأقل للنسخ.",
|
"modQueue.transferNoFields": "اختر حقلًا واحدًا على الأقل للنسخ.",
|
||||||
"modQueue.transferSuccess": "تم النقل. يشير المنشور الأصلي الآن إلى اللوحة الجديدة.",
|
"modQueue.transferSuccess": "نُقل إلى /trash/. يشير المنشور الأصلي الآن إلى /trash/.",
|
||||||
"transferred": "منقول",
|
"transferred": "منقول",
|
||||||
"modQueue.transferTitleWithNumber": "نقل المنشور رقم {{number}}",
|
"modQueue.transferTitleWithNumber": "انقل المنشور رقم {{number}} إلى /trash/",
|
||||||
"modQueue.transferRecreateNotice": "هذا ليس نقلا حقيقيا على مستوى البروتوكول. يعيد 5chan إنشاء المنشور على اللوحة المحددة ويزيل الأصل.",
|
"modQueue.transferRecreateNotice": "هذا ليس نقلاً حقيقياً على مستوى البروتوكول. يعيد 5chan إنشاء المنشور على /trash/ ويزيل الأصل.",
|
||||||
"modQueue.transferRepliesNotice": "لن تُنقل الردود. سيتم حذفها مع المنشور الأصلي.",
|
"modQueue.transferRepliesNotice": "لن تُنقل الردود. سيتم حذفها مع المنشور الأصلي.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "سينشئ 5chan حسابا مؤقتا جديدا لهذا المنشور المنسوخ فقط، ثم يحذفه بعد النشر."
|
"modQueue.transferTemporaryAccountNotice": "سينشئ 5chan حسابا مؤقتا جديدا لهذا المنشور المنسوخ فقط، ثم يحذفه بعد النشر.",
|
||||||
|
"trash": "سلة المهملات"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "আপনাকে একটি লিঙ্ক দিয়ে উত্তর দিতে হবে।",
|
"reply_link_required_alert": "আপনাকে একটি লিঙ্ক দিয়ে উত্তর দিতে হবে।",
|
||||||
"reply_media_link_required_alert": "আপনাকে একটি ছবি বা ভিডিও লিঙ্ক দিয়ে উত্তর দিতে হবে।",
|
"reply_media_link_required_alert": "আপনাকে একটি ছবি বা ভিডিও লিঙ্ক দিয়ে উত্তর দিতে হবে।",
|
||||||
"reply_links_not_allowed_alert": "এই বোর্ডে উত্তরের লিঙ্ক অনুমোদিত নয়।",
|
"reply_links_not_allowed_alert": "এই বোর্ডে উত্তরের লিঙ্ক অনুমোদিত নয়।",
|
||||||
"transfer": "স্থানান্তর",
|
"modQueue.transferTitle": "পোস্টটি /trash/-এ সরান",
|
||||||
"modQueue.transferTitle": "পোস্ট স্থানান্তর",
|
|
||||||
"modQueue.transferSource": "থেকে",
|
"modQueue.transferSource": "থেকে",
|
||||||
"modQueue.transferTarget": "বোর্ডে",
|
"modQueue.transferTarget": "গন্তব্য",
|
||||||
"modQueue.transferFields": "ক্ষেত্র কপি করুন",
|
"modQueue.transferFields": "ক্ষেত্র কপি করুন",
|
||||||
"modQueue.transferNoFields": "কপি করতে অন্তত একটি ক্ষেত্র নির্বাচন করুন।",
|
"modQueue.transferNoFields": "কপি করতে অন্তত একটি ক্ষেত্র নির্বাচন করুন।",
|
||||||
"modQueue.transferSuccess": "স্থানান্তরিত হয়েছে। মূল পোস্টটি এখন নতুন বোর্ডের দিকে নির্দেশ করে।",
|
"modQueue.transferSuccess": "/trash/-এ সরানো হয়েছে। মূল পোস্টটি এখন /trash/-এর দিকে নির্দেশ করে।",
|
||||||
"transferred": "স্থানান্তরিত",
|
"transferred": "স্থানান্তরিত",
|
||||||
"modQueue.transferTitleWithNumber": "পোস্ট No.{{number}} স্থানান্তর",
|
"modQueue.transferTitleWithNumber": "পোস্ট No.{{number}} /trash/-এ সরান",
|
||||||
"modQueue.transferRecreateNotice": "এটি প্রোটোকলের আসল স্থানান্তর নয়। 5chan নির্বাচিত বোর্ডে পোস্টটি আবার তৈরি করে এবং আসলটি সরিয়ে দেয়।",
|
"modQueue.transferRecreateNotice": "এটি প্রোটোকল স্তরের আসল স্থানান্তর নয়। 5chan পোস্টটি /trash/-এ আবার তৈরি করে এবং আসলটি সরিয়ে দেয়।",
|
||||||
"modQueue.transferRepliesNotice": "উত্তরগুলো স্থানান্তরিত হবে না। সেগুলো মূল পোস্টের সঙ্গে মুছে যাবে।",
|
"modQueue.transferRepliesNotice": "উত্তরগুলো সরানো হবে না। সেগুলো মূল পোস্টের সঙ্গে মুছে যাবে।",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan শুধু এই কপি করা পোস্টের জন্য একটি নতুন অস্থায়ী অ্যাকাউন্ট তৈরি করবে, তারপর প্রকাশের পর সেটি মুছে দেবে।"
|
"modQueue.transferTemporaryAccountNotice": "5chan শুধু এই কপি করা পোস্টের জন্য একটি নতুন অস্থায়ী অ্যাকাউন্ট তৈরি করবে, তারপর প্রকাশের পর সেটি মুছে দেবে।",
|
||||||
|
"trash": "ট্র্যাশ"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Musíte odpovědět odkazem.",
|
"reply_link_required_alert": "Musíte odpovědět odkazem.",
|
||||||
"reply_media_link_required_alert": "Musíte odpovědět odkazem na obrázek nebo video.",
|
"reply_media_link_required_alert": "Musíte odpovědět odkazem na obrázek nebo video.",
|
||||||
"reply_links_not_allowed_alert": "Odkazy v odpovědích nejsou na této nástěnce povoleny.",
|
"reply_links_not_allowed_alert": "Odkazy v odpovědích nejsou na této nástěnce povoleny.",
|
||||||
"transfer": "Přesunout",
|
"modQueue.transferTitle": "Přesunout příspěvek do /trash/",
|
||||||
"modQueue.transferTitle": "Přesunout příspěvek",
|
|
||||||
"modQueue.transferSource": "Od",
|
"modQueue.transferSource": "Od",
|
||||||
"modQueue.transferTarget": "Do fóra",
|
"modQueue.transferTarget": "Do",
|
||||||
"modQueue.transferFields": "Kopírovat pole",
|
"modQueue.transferFields": "Kopírovat pole",
|
||||||
"modQueue.transferNoFields": "Vyberte alespoň jedno pole ke kopírování.",
|
"modQueue.transferNoFields": "Vyberte alespoň jedno pole ke kopírování.",
|
||||||
"modQueue.transferSuccess": "Přesunuto. Původní příspěvek teď odkazuje na novou nástěnku.",
|
"modQueue.transferSuccess": "Přesunuto do /trash/. Původní příspěvek teď odkazuje na /trash/.",
|
||||||
"transferred": "Přesunuto",
|
"transferred": "Přesunuto",
|
||||||
"modQueue.transferTitleWithNumber": "Přesunout příspěvek č. {{number}}",
|
"modQueue.transferTitleWithNumber": "Přesunout příspěvek č. {{number}} do /trash/",
|
||||||
"modQueue.transferRecreateNotice": "Toto není skutečný protokolový přesun. 5chan příspěvek znovu vytvoří na vybrané nástěnce a původní odstraní.",
|
"modQueue.transferRecreateNotice": "Toto není skutečný protokolový přesun. 5chan příspěvek znovu vytvoří v /trash/ a původní odstraní.",
|
||||||
"modQueue.transferRepliesNotice": "Odpovědi se nepřesunou. Budou odstraněny spolu s původním příspěvkem.",
|
"modQueue.transferRepliesNotice": "Odpovědi se nepřesunou. Budou odstraněny spolu s původním příspěvkem.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan vytvoří nový dočasný účet jen pro tento zkopírovaný příspěvek a po zveřejnění ho smaže."
|
"modQueue.transferTemporaryAccountNotice": "5chan vytvoří nový dočasný účet jen pro tento zkopírovaný příspěvek a po zveřejnění ho smaže.",
|
||||||
|
"trash": "Koš"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Du skal svare med et link.",
|
"reply_link_required_alert": "Du skal svare med et link.",
|
||||||
"reply_media_link_required_alert": "Du skal svare med et billed- eller videolink.",
|
"reply_media_link_required_alert": "Du skal svare med et billed- eller videolink.",
|
||||||
"reply_links_not_allowed_alert": "Svarlinks er ikke tilladt på dette board.",
|
"reply_links_not_allowed_alert": "Svarlinks er ikke tilladt på dette board.",
|
||||||
"transfer": "Overfør",
|
"modQueue.transferTitle": "Flyt indlæg til /trash/",
|
||||||
"modQueue.transferTitle": "Overfør indlæg",
|
|
||||||
"modQueue.transferSource": "Fra",
|
"modQueue.transferSource": "Fra",
|
||||||
"modQueue.transferTarget": "Til forum",
|
"modQueue.transferTarget": "Til",
|
||||||
"modQueue.transferFields": "Kopiér felter",
|
"modQueue.transferFields": "Kopiér felter",
|
||||||
"modQueue.transferNoFields": "Vælg mindst ét felt, der skal kopieres.",
|
"modQueue.transferNoFields": "Vælg mindst ét felt, der skal kopieres.",
|
||||||
"modQueue.transferSuccess": "Overført. Det oprindelige opslag peger nu på det nye board.",
|
"modQueue.transferSuccess": "Flyttet til /trash/. Det oprindelige opslag peger nu på /trash/.",
|
||||||
"transferred": "Overført",
|
"transferred": "Overført",
|
||||||
"modQueue.transferTitleWithNumber": "Overfør opslag No.{{number}}",
|
"modQueue.transferTitleWithNumber": "Flyt opslag No.{{number}} til /trash/",
|
||||||
"modQueue.transferRecreateNotice": "Dette er ikke en rigtig protokoloverførsel. 5chan genskaber opslaget på det valgte board og fjerner originalen.",
|
"modQueue.transferRecreateNotice": "Dette er ikke en rigtig protokoloverførsel. 5chan genskaber opslaget i /trash/ og fjerner originalen.",
|
||||||
"modQueue.transferRepliesNotice": "Svar bliver ikke overført. De slettes sammen med det oprindelige opslag.",
|
"modQueue.transferRepliesNotice": "Svar flyttes ikke. De slettes sammen med det oprindelige opslag.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan opretter en ny midlertidig konto kun til dette kopierede opslag og sletter den efter publicering."
|
"modQueue.transferTemporaryAccountNotice": "5chan opretter en ny midlertidig konto kun til dette kopierede opslag og sletter den efter publicering.",
|
||||||
|
"trash": "Papirkurv"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Du musst mit einem Link antworten.",
|
"reply_link_required_alert": "Du musst mit einem Link antworten.",
|
||||||
"reply_media_link_required_alert": "Du musst mit einem Bild- oder Videolink antworten.",
|
"reply_media_link_required_alert": "Du musst mit einem Bild- oder Videolink antworten.",
|
||||||
"reply_links_not_allowed_alert": "Antwortlinks sind auf diesem Board nicht erlaubt.",
|
"reply_links_not_allowed_alert": "Antwortlinks sind auf diesem Board nicht erlaubt.",
|
||||||
"transfer": "Übertragen",
|
"modQueue.transferTitle": "Beitrag nach /trash/ verschieben",
|
||||||
"modQueue.transferTitle": "Beitrag übertragen",
|
|
||||||
"modQueue.transferSource": "Von",
|
"modQueue.transferSource": "Von",
|
||||||
"modQueue.transferTarget": "Zum Forum",
|
"modQueue.transferTarget": "Nach",
|
||||||
"modQueue.transferFields": "Felder kopieren",
|
"modQueue.transferFields": "Felder kopieren",
|
||||||
"modQueue.transferNoFields": "Wählen Sie mindestens ein Feld zum Kopieren aus.",
|
"modQueue.transferNoFields": "Wählen Sie mindestens ein Feld zum Kopieren aus.",
|
||||||
"modQueue.transferSuccess": "Übertragen. Der ursprüngliche Beitrag verweist jetzt auf das neue Board.",
|
"modQueue.transferSuccess": "Nach /trash/ verschoben. Der ursprüngliche Beitrag verweist jetzt auf /trash/.",
|
||||||
"transferred": "Übertragen",
|
"transferred": "Übertragen",
|
||||||
"modQueue.transferTitleWithNumber": "Beitrag Nr. {{number}} übertragen",
|
"modQueue.transferTitleWithNumber": "Beitrag Nr. {{number}} nach /trash/ verschieben",
|
||||||
"modQueue.transferRecreateNotice": "Das ist keine echte Protokoll-Übertragung. 5chan erstellt den Beitrag auf dem gewählten Board neu und entfernt das Original.",
|
"modQueue.transferRecreateNotice": "Das ist keine echte Protokoll-Übertragung. 5chan erstellt den Beitrag in /trash/ neu und entfernt das Original.",
|
||||||
"modQueue.transferRepliesNotice": "Antworten werden nicht übertragen. Sie werden mit dem ursprünglichen Beitrag gelöscht.",
|
"modQueue.transferRepliesNotice": "Antworten werden nicht verschoben. Sie werden mit dem ursprünglichen Beitrag gelöscht.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan erstellt nur für diesen kopierten Beitrag ein neues temporäres Konto und löscht es nach dem Veröffentlichen."
|
"modQueue.transferTemporaryAccountNotice": "5chan erstellt nur für diesen kopierten Beitrag ein neues temporäres Konto und löscht es nach dem Veröffentlichen.",
|
||||||
|
"trash": "Papierkorb"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Πρέπει να απαντήσετε με έναν σύνδεσμο.",
|
"reply_link_required_alert": "Πρέπει να απαντήσετε με έναν σύνδεσμο.",
|
||||||
"reply_media_link_required_alert": "Πρέπει να απαντήσετε με σύνδεσμο εικόνας ή βίντεο.",
|
"reply_media_link_required_alert": "Πρέπει να απαντήσετε με σύνδεσμο εικόνας ή βίντεο.",
|
||||||
"reply_links_not_allowed_alert": "Οι σύνδεσμοι στις απαντήσεις δεν επιτρέπονται σε αυτόν τον πίνακα.",
|
"reply_links_not_allowed_alert": "Οι σύνδεσμοι στις απαντήσεις δεν επιτρέπονται σε αυτόν τον πίνακα.",
|
||||||
"transfer": "Μεταφορά",
|
"modQueue.transferTitle": "Μετακίνηση ανάρτησης στο /trash/",
|
||||||
"modQueue.transferTitle": "Μεταφορά δημοσίευσης",
|
|
||||||
"modQueue.transferSource": "Από",
|
"modQueue.transferSource": "Από",
|
||||||
"modQueue.transferTarget": "Στο φόρουμ",
|
"modQueue.transferTarget": "Προς",
|
||||||
"modQueue.transferFields": "Αντιγραφή πεδίων",
|
"modQueue.transferFields": "Αντιγραφή πεδίων",
|
||||||
"modQueue.transferNoFields": "Επιλέξτε τουλάχιστον ένα πεδίο για αντιγραφή.",
|
"modQueue.transferNoFields": "Επιλέξτε τουλάχιστον ένα πεδίο για αντιγραφή.",
|
||||||
"modQueue.transferSuccess": "Μεταφέρθηκε. Η αρχική ανάρτηση δείχνει πλέον στον νέο πίνακα.",
|
"modQueue.transferSuccess": "Μετακινήθηκε στο /trash/. Η αρχική ανάρτηση δείχνει πλέον στο /trash/.",
|
||||||
"transferred": "Μεταφέρθηκε",
|
"transferred": "Μεταφέρθηκε",
|
||||||
"modQueue.transferTitleWithNumber": "Μεταφορά ανάρτησης No.{{number}}",
|
"modQueue.transferTitleWithNumber": "Μετακίνηση ανάρτησης No.{{number}} στο /trash/",
|
||||||
"modQueue.transferRecreateNotice": "Αυτό δεν είναι πραγματική μεταφορά στο πρωτόκολλο. Το 5chan αναδημιουργεί την ανάρτηση στον επιλεγμένο πίνακα και αφαιρεί την αρχική.",
|
"modQueue.transferRecreateNotice": "Αυτό δεν είναι πραγματική μεταφορά στο πρωτόκολλο. Το 5chan αναδημιουργεί την ανάρτηση στο /trash/ και αφαιρεί την αρχική.",
|
||||||
"modQueue.transferRepliesNotice": "Οι απαντήσεις δεν μεταφέρονται. Θα διαγραφούν μαζί με την αρχική ανάρτηση.",
|
"modQueue.transferRepliesNotice": "Οι απαντήσεις δεν μετακινούνται. Θα διαγραφούν μαζί με την αρχική ανάρτηση.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "Το 5chan θα δημιουργήσει έναν νέο προσωρινό λογαριασμό μόνο για αυτό το αντιγραμμένο post και θα τον διαγράψει μετά τη δημοσίευση."
|
"modQueue.transferTemporaryAccountNotice": "Το 5chan θα δημιουργήσει έναν νέο προσωρινό λογαριασμό μόνο για αυτό το αντιγραμμένο post και θα τον διαγράψει μετά τη δημοσίευση.",
|
||||||
|
"trash": "Κάδος"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -469,16 +469,16 @@
|
|||||||
"reply_link_required_alert": "You must reply with a link.",
|
"reply_link_required_alert": "You must reply with a link.",
|
||||||
"reply_media_link_required_alert": "You must reply with an image or video link.",
|
"reply_media_link_required_alert": "You must reply with an image or video link.",
|
||||||
"reply_links_not_allowed_alert": "Reply links are not allowed on this board.",
|
"reply_links_not_allowed_alert": "Reply links are not allowed on this board.",
|
||||||
"transfer": "Transfer",
|
"modQueue.transferTitle": "Move post to /trash/",
|
||||||
"modQueue.transferTitle": "Transfer post",
|
|
||||||
"modQueue.transferSource": "From",
|
"modQueue.transferSource": "From",
|
||||||
"modQueue.transferTarget": "To board",
|
"modQueue.transferTarget": "To",
|
||||||
"modQueue.transferFields": "Copy fields",
|
"modQueue.transferFields": "Copy fields",
|
||||||
"modQueue.transferNoFields": "Choose at least one field to copy.",
|
"modQueue.transferNoFields": "Choose at least one field to copy.",
|
||||||
"modQueue.transferSuccess": "Transferred. The original post now points to the new board.",
|
"modQueue.transferSuccess": "Moved to /trash/. The original post now points to /trash/.",
|
||||||
"transferred": "Transferred",
|
"transferred": "Transferred",
|
||||||
"modQueue.transferTitleWithNumber": "Transfer Post No.{{number}}",
|
"modQueue.transferTitleWithNumber": "Move Post No.{{number}} to /trash/",
|
||||||
"modQueue.transferRecreateNotice": "This is not a real protocol transfer. 5chan recreates the post on the selected board and removes the original.",
|
"modQueue.transferRecreateNotice": "This is not a real protocol transfer. 5chan recreates the post on /trash/ and removes the original.",
|
||||||
"modQueue.transferRepliesNotice": "Replies are not transferred. They are deleted with the original post.",
|
"modQueue.transferRepliesNotice": "Replies are not moved. They are deleted with the original post.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan will create a new temporary account just for this copied post, then delete it after publishing."
|
"modQueue.transferTemporaryAccountNotice": "5chan will create a new temporary account just for this copied post, then delete it after publishing.",
|
||||||
|
"trash": "Trash"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Debes responder con un enlace.",
|
"reply_link_required_alert": "Debes responder con un enlace.",
|
||||||
"reply_media_link_required_alert": "Debes responder con un enlace a una imagen o un video.",
|
"reply_media_link_required_alert": "Debes responder con un enlace a una imagen o un video.",
|
||||||
"reply_links_not_allowed_alert": "Los enlaces en respuestas no están permitidos en este tablón.",
|
"reply_links_not_allowed_alert": "Los enlaces en respuestas no están permitidos en este tablón.",
|
||||||
"transfer": "Transferir",
|
"modQueue.transferTitle": "Mover publicación a /trash/",
|
||||||
"modQueue.transferTitle": "Transferir publicación",
|
|
||||||
"modQueue.transferSource": "De",
|
"modQueue.transferSource": "De",
|
||||||
"modQueue.transferTarget": "Al foro",
|
"modQueue.transferTarget": "A",
|
||||||
"modQueue.transferFields": "Copiar campos",
|
"modQueue.transferFields": "Copiar campos",
|
||||||
"modQueue.transferNoFields": "Elige al menos un campo para copiar.",
|
"modQueue.transferNoFields": "Elige al menos un campo para copiar.",
|
||||||
"modQueue.transferSuccess": "Transferido. La publicación original ahora apunta al nuevo foro.",
|
"modQueue.transferSuccess": "Movida a /trash/. La publicación original ahora apunta a /trash/.",
|
||||||
"transferred": "Transferido",
|
"transferred": "Transferido",
|
||||||
"modQueue.transferTitleWithNumber": "Transferir publicación No.{{number}}",
|
"modQueue.transferTitleWithNumber": "Mover publicación No.{{number}} a /trash/",
|
||||||
"modQueue.transferRecreateNotice": "Esto no es una transferencia real del protocolo. 5chan vuelve a crear la publicación en el foro seleccionado y elimina la original.",
|
"modQueue.transferRecreateNotice": "Esto no es una transferencia real del protocolo. 5chan vuelve a crear la publicación en /trash/ y elimina la original.",
|
||||||
"modQueue.transferRepliesNotice": "Las respuestas no se transfieren. Se eliminan junto con la publicación original.",
|
"modQueue.transferRepliesNotice": "Las respuestas no se mueven. Se eliminan junto con la publicación original.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan creará una nueva cuenta temporal solo para esta publicación copiada y la eliminará después de publicarla."
|
"modQueue.transferTemporaryAccountNotice": "5chan creará una nueva cuenta temporal solo para esta publicación copiada y la eliminará después de publicarla.",
|
||||||
|
"trash": "Papelera"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "باید با یک پیوند پاسخ دهید.",
|
"reply_link_required_alert": "باید با یک پیوند پاسخ دهید.",
|
||||||
"reply_media_link_required_alert": "باید با یک پیوند تصویر یا ویدیو پاسخ دهید.",
|
"reply_media_link_required_alert": "باید با یک پیوند تصویر یا ویدیو پاسخ دهید.",
|
||||||
"reply_links_not_allowed_alert": "پیوندها در پاسخها در این برد مجاز نیستند.",
|
"reply_links_not_allowed_alert": "پیوندها در پاسخها در این برد مجاز نیستند.",
|
||||||
"transfer": "انتقال",
|
"modQueue.transferTitle": "انتقال پست به /trash/",
|
||||||
"modQueue.transferTitle": "انتقال پست",
|
|
||||||
"modQueue.transferSource": "از",
|
"modQueue.transferSource": "از",
|
||||||
"modQueue.transferTarget": "به تالار",
|
"modQueue.transferTarget": "به",
|
||||||
"modQueue.transferFields": "کپی فیلدها",
|
"modQueue.transferFields": "کپی فیلدها",
|
||||||
"modQueue.transferNoFields": "حداقل یک فیلد برای کپی انتخاب کنید.",
|
"modQueue.transferNoFields": "حداقل یک فیلد برای کپی انتخاب کنید.",
|
||||||
"modQueue.transferSuccess": "منتقل شد. پست اصلی اکنون به برد جدید اشاره میکند.",
|
"modQueue.transferSuccess": "به /trash/ منتقل شد. پست اصلی اکنون به /trash/ اشاره میکند.",
|
||||||
"transferred": "منتقل شد",
|
"transferred": "منتقل شد",
|
||||||
"modQueue.transferTitleWithNumber": "انتقال پست شماره {{number}}",
|
"modQueue.transferTitleWithNumber": "انتقال پست شماره {{number}} به /trash/",
|
||||||
"modQueue.transferRecreateNotice": "این یک انتقال واقعی در سطح پروتکل نیست. 5chan پست را در برد انتخابشده دوباره میسازد و نسخه اصلی را حذف میکند.",
|
"modQueue.transferRecreateNotice": "این یک انتقال واقعی در سطح پروتکل نیست. 5chan پست را در /trash/ دوباره میسازد و نسخه اصلی را حذف میکند.",
|
||||||
"modQueue.transferRepliesNotice": "پاسخها منتقل نمیشوند. آنها همراه با پست اصلی حذف میشوند.",
|
"modQueue.transferRepliesNotice": "پاسخها منتقل نمیشوند. آنها همراه با پست اصلی حذف میشوند.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan فقط برای این پست کپیشده یک حساب موقت جدید میسازد و پس از انتشار آن را حذف میکند."
|
"modQueue.transferTemporaryAccountNotice": "5chan فقط برای این پست کپیشده یک حساب موقت جدید میسازد و پس از انتشار آن را حذف میکند.",
|
||||||
|
"trash": "زبالهدان"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Sinun on vastattava linkillä.",
|
"reply_link_required_alert": "Sinun on vastattava linkillä.",
|
||||||
"reply_media_link_required_alert": "Sinun on vastattava kuva- tai videolinkillä.",
|
"reply_media_link_required_alert": "Sinun on vastattava kuva- tai videolinkillä.",
|
||||||
"reply_links_not_allowed_alert": "Vastauslinkit eivät ole sallittuja tällä laudalla.",
|
"reply_links_not_allowed_alert": "Vastauslinkit eivät ole sallittuja tällä laudalla.",
|
||||||
"transfer": "Siirrä",
|
"modQueue.transferTitle": "Siirrä viesti /trash/-laudalle",
|
||||||
"modQueue.transferTitle": "Siirrä viesti",
|
|
||||||
"modQueue.transferSource": "Mistä",
|
"modQueue.transferSource": "Mistä",
|
||||||
"modQueue.transferTarget": "Foorumille",
|
"modQueue.transferTarget": "Kohde",
|
||||||
"modQueue.transferFields": "Kopioi kentät",
|
"modQueue.transferFields": "Kopioi kentät",
|
||||||
"modQueue.transferNoFields": "Valitse vähintään yksi kopioitava kenttä.",
|
"modQueue.transferNoFields": "Valitse vähintään yksi kopioitava kenttä.",
|
||||||
"modQueue.transferSuccess": "Siirretty. Alkuperäinen viesti osoittaa nyt uudelle laudalle.",
|
"modQueue.transferSuccess": "Siirretty /trash/-laudalle. Alkuperäinen viesti osoittaa nyt /trash/-laudalle.",
|
||||||
"transferred": "Siirretty",
|
"transferred": "Siirretty",
|
||||||
"modQueue.transferTitleWithNumber": "Siirrä viesti No.{{number}}",
|
"modQueue.transferTitleWithNumber": "Siirrä viesti No.{{number}} /trash/-laudalle",
|
||||||
"modQueue.transferRecreateNotice": "Tämä ei ole oikea protokollatason siirto. 5chan luo viestin uudelleen valitulle laudalle ja poistaa alkuperäisen.",
|
"modQueue.transferRecreateNotice": "Tämä ei ole oikea protokollatason siirto. 5chan luo viestin uudelleen /trash/-laudalle ja poistaa alkuperäisen.",
|
||||||
"modQueue.transferRepliesNotice": "Vastauksia ei siirretä. Ne poistetaan alkuperäisen viestin mukana.",
|
"modQueue.transferRepliesNotice": "Vastauksia ei siirretä. Ne poistetaan alkuperäisen viestin mukana.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan luo uuden väliaikaisen tilin vain tätä kopioitua viestiä varten ja poistaa sen julkaisun jälkeen."
|
"modQueue.transferTemporaryAccountNotice": "5chan luo uuden väliaikaisen tilin vain tätä kopioitua viestiä varten ja poistaa sen julkaisun jälkeen.",
|
||||||
|
"trash": "Roskakori"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Kailangan mong tumugon gamit ang isang link.",
|
"reply_link_required_alert": "Kailangan mong tumugon gamit ang isang link.",
|
||||||
"reply_media_link_required_alert": "Kailangan mong tumugon gamit ang link ng larawan o video.",
|
"reply_media_link_required_alert": "Kailangan mong tumugon gamit ang link ng larawan o video.",
|
||||||
"reply_links_not_allowed_alert": "Hindi pinapayagan ang mga link sa tugon sa board na ito.",
|
"reply_links_not_allowed_alert": "Hindi pinapayagan ang mga link sa tugon sa board na ito.",
|
||||||
"transfer": "Ilipat",
|
"modQueue.transferTitle": "Ilipat ang post sa /trash/",
|
||||||
"modQueue.transferTitle": "Ilipat ang post",
|
|
||||||
"modQueue.transferSource": "Mula sa",
|
"modQueue.transferSource": "Mula sa",
|
||||||
"modQueue.transferTarget": "Sa board",
|
"modQueue.transferTarget": "Sa",
|
||||||
"modQueue.transferFields": "Kopyahin ang mga field",
|
"modQueue.transferFields": "Kopyahin ang mga field",
|
||||||
"modQueue.transferNoFields": "Pumili ng kahit isang field na kopyahin.",
|
"modQueue.transferNoFields": "Pumili ng kahit isang field na kopyahin.",
|
||||||
"modQueue.transferSuccess": "Nailipat. Nakaturo na ngayon ang orihinal na post sa bagong board.",
|
"modQueue.transferSuccess": "Inilipat sa /trash/. Nakaturo na ngayon ang orihinal na post sa /trash/.",
|
||||||
"transferred": "Nailipat",
|
"transferred": "Nailipat",
|
||||||
"modQueue.transferTitleWithNumber": "Ilipat ang post No.{{number}}",
|
"modQueue.transferTitleWithNumber": "Ilipat ang post No.{{number}} sa /trash/",
|
||||||
"modQueue.transferRecreateNotice": "Hindi ito tunay na protocol transfer. Muling ginagawa ng 5chan ang post sa napiling board at inaalis ang orihinal.",
|
"modQueue.transferRecreateNotice": "Hindi ito tunay na protocol transfer. Muling ginagawa ng 5chan ang post sa /trash/ at inaalis ang orihinal.",
|
||||||
"modQueue.transferRepliesNotice": "Hindi maililipat ang mga reply. Mabubura ang mga ito kasama ng orihinal na post.",
|
"modQueue.transferRepliesNotice": "Hindi inililipat ang mga reply. Mabubura ang mga ito kasama ng orihinal na post.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "Gagawa ang 5chan ng bagong pansamantalang account para lang sa kinopyang post na ito, at buburahin ito pagkatapos ma-publish."
|
"modQueue.transferTemporaryAccountNotice": "Gagawa ang 5chan ng bagong pansamantalang account para lang sa kinopyang post na ito, at buburahin ito pagkatapos ma-publish.",
|
||||||
|
"trash": "Basura"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Vous devez répondre avec un lien.",
|
"reply_link_required_alert": "Vous devez répondre avec un lien.",
|
||||||
"reply_media_link_required_alert": "Vous devez répondre avec un lien d'image ou de vidéo.",
|
"reply_media_link_required_alert": "Vous devez répondre avec un lien d'image ou de vidéo.",
|
||||||
"reply_links_not_allowed_alert": "Les liens dans les réponses ne sont pas autorisés sur ce board.",
|
"reply_links_not_allowed_alert": "Les liens dans les réponses ne sont pas autorisés sur ce board.",
|
||||||
"transfer": "Transférer",
|
"modQueue.transferTitle": "Déplacer le message vers /trash/",
|
||||||
"modQueue.transferTitle": "Transférer la publication",
|
|
||||||
"modQueue.transferSource": "De",
|
"modQueue.transferSource": "De",
|
||||||
"modQueue.transferTarget": "Au forum",
|
"modQueue.transferTarget": "Vers",
|
||||||
"modQueue.transferFields": "Copier les champs",
|
"modQueue.transferFields": "Copier les champs",
|
||||||
"modQueue.transferNoFields": "Choisissez au moins un champ à copier.",
|
"modQueue.transferNoFields": "Choisissez au moins un champ à copier.",
|
||||||
"modQueue.transferSuccess": "Transféré. Le message d’origine pointe maintenant vers le nouveau board.",
|
"modQueue.transferSuccess": "Déplacé vers /trash/. Le message d’origine pointe maintenant vers /trash/.",
|
||||||
"transferred": "Transféré",
|
"transferred": "Transféré",
|
||||||
"modQueue.transferTitleWithNumber": "Transférer le message No.{{number}}",
|
"modQueue.transferTitleWithNumber": "Déplacer le message No.{{number}} vers /trash/",
|
||||||
"modQueue.transferRecreateNotice": "Ce n’est pas un vrai transfert au niveau du protocole. 5chan recrée le message sur le board choisi et retire l’original.",
|
"modQueue.transferRecreateNotice": "Ce n’est pas un vrai transfert au niveau du protocole. 5chan recrée le message sur /trash/ et retire l’original.",
|
||||||
"modQueue.transferRepliesNotice": "Les réponses ne sont pas transférées. Elles sont supprimées avec le message d’origine.",
|
"modQueue.transferRepliesNotice": "Les réponses ne sont pas déplacées. Elles sont supprimées avec le message d’origine.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan créera un nouveau compte temporaire uniquement pour ce message copié, puis le supprimera après publication."
|
"modQueue.transferTemporaryAccountNotice": "5chan créera un nouveau compte temporaire uniquement pour ce message copié, puis le supprimera après publication.",
|
||||||
|
"trash": "Corbeille"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "עליך להשיב עם קישור.",
|
"reply_link_required_alert": "עליך להשיב עם קישור.",
|
||||||
"reply_media_link_required_alert": "עליך להשיב עם קישור לתמונה או לסרטון.",
|
"reply_media_link_required_alert": "עליך להשיב עם קישור לתמונה או לסרטון.",
|
||||||
"reply_links_not_allowed_alert": "קישורים בתגובות אינם מותרים בלוח הזה.",
|
"reply_links_not_allowed_alert": "קישורים בתגובות אינם מותרים בלוח הזה.",
|
||||||
"transfer": "העבר",
|
"modQueue.transferTitle": "העבר את הפוסט אל /trash/",
|
||||||
"modQueue.transferTitle": "העברת פוסט",
|
|
||||||
"modQueue.transferSource": "מ-",
|
"modQueue.transferSource": "מ-",
|
||||||
"modQueue.transferTarget": "לפורום",
|
"modQueue.transferTarget": "אל",
|
||||||
"modQueue.transferFields": "העתק שדות",
|
"modQueue.transferFields": "העתק שדות",
|
||||||
"modQueue.transferNoFields": "בחר לפחות שדה אחד להעתקה.",
|
"modQueue.transferNoFields": "בחר לפחות שדה אחד להעתקה.",
|
||||||
"modQueue.transferSuccess": "הועבר. הפוסט המקורי מפנה עכשיו ללוח החדש.",
|
"modQueue.transferSuccess": "הועבר אל /trash/. הפוסט המקורי מפנה עכשיו אל /trash/.",
|
||||||
"transferred": "הועבר",
|
"transferred": "הועבר",
|
||||||
"modQueue.transferTitleWithNumber": "העברת פוסט מס׳ {{number}}",
|
"modQueue.transferTitleWithNumber": "העבר את פוסט מס׳ {{number}} אל /trash/",
|
||||||
"modQueue.transferRecreateNotice": "זו לא העברה אמיתית ברמת הפרוטוקול. 5chan יוצר מחדש את הפוסט בלוח שנבחר ומסיר את המקור.",
|
"modQueue.transferRecreateNotice": "זו לא העברה אמיתית ברמת הפרוטוקול. 5chan יוצר מחדש את הפוסט ב-/trash/ ומסיר את המקור.",
|
||||||
"modQueue.transferRepliesNotice": "תגובות לא מועברות. הן נמחקות יחד עם הפוסט המקורי.",
|
"modQueue.transferRepliesNotice": "התגובות לא מועברות. הן נמחקות יחד עם הפוסט המקורי.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan ייצור חשבון זמני חדש רק עבור הפוסט המועתק הזה, ואז ימחק אותו לאחר הפרסום."
|
"modQueue.transferTemporaryAccountNotice": "5chan ייצור חשבון זמני חדש רק עבור הפוסט המועתק הזה, ואז ימחק אותו לאחר הפרסום.",
|
||||||
|
"trash": "אשפה"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "आपको एक लिंक के साथ जवाब देना होगा।",
|
"reply_link_required_alert": "आपको एक लिंक के साथ जवाब देना होगा।",
|
||||||
"reply_media_link_required_alert": "आपको किसी छवि या वीडियो लिंक के साथ जवाब देना होगा।",
|
"reply_media_link_required_alert": "आपको किसी छवि या वीडियो लिंक के साथ जवाब देना होगा।",
|
||||||
"reply_links_not_allowed_alert": "इस बोर्ड पर जवाबों में लिंक की अनुमति नहीं है।",
|
"reply_links_not_allowed_alert": "इस बोर्ड पर जवाबों में लिंक की अनुमति नहीं है।",
|
||||||
"transfer": "स्थानांतरित करें",
|
"modQueue.transferTitle": "पोस्ट को /trash/ पर ले जाएँ",
|
||||||
"modQueue.transferTitle": "पोस्ट स्थानांतरित करें",
|
|
||||||
"modQueue.transferSource": "से",
|
"modQueue.transferSource": "से",
|
||||||
"modQueue.transferTarget": "फोरम पर",
|
"modQueue.transferTarget": "पर",
|
||||||
"modQueue.transferFields": "फ़ील्ड कॉपी करें",
|
"modQueue.transferFields": "फ़ील्ड कॉपी करें",
|
||||||
"modQueue.transferNoFields": "कॉपी करने के लिए कम से कम एक फ़ील्ड चुनें।",
|
"modQueue.transferNoFields": "कॉपी करने के लिए कम से कम एक फ़ील्ड चुनें।",
|
||||||
"modQueue.transferSuccess": "स्थानांतरित हो गया। मूल पोस्ट अब नए बोर्ड की ओर इशारा करती है।",
|
"modQueue.transferSuccess": "/trash/ पर ले जाया गया। मूल पोस्ट अब /trash/ की ओर इशारा करती है।",
|
||||||
"transferred": "स्थानांतरित",
|
"transferred": "स्थानांतरित",
|
||||||
"modQueue.transferTitleWithNumber": "पोस्ट No.{{number}} स्थानांतरित करें",
|
"modQueue.transferTitleWithNumber": "पोस्ट No.{{number}} को /trash/ पर ले जाएँ",
|
||||||
"modQueue.transferRecreateNotice": "यह असली प्रोटोकॉल ट्रांसफर नहीं है। 5chan चुने गए बोर्ड पर पोस्ट को फिर से बनाता है और मूल पोस्ट हटा देता है।",
|
"modQueue.transferRecreateNotice": "यह असली प्रोटोकॉल ट्रांसफर नहीं है। 5chan पोस्ट को /trash/ पर फिर से बनाता है और मूल पोस्ट हटा देता है।",
|
||||||
"modQueue.transferRepliesNotice": "जवाब स्थानांतरित नहीं होंगे। वे मूल पोस्ट के साथ हटा दिए जाएंगे।",
|
"modQueue.transferRepliesNotice": "जवाब नहीं ले जाए जाएँगे। वे मूल पोस्ट के साथ हटा दिए जाएँगे।",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan सिर्फ इस कॉपी किए गए पोस्ट के लिए एक नया अस्थायी खाता बनाएगा, फिर प्रकाशित करने के बाद उसे हटा देगा।"
|
"modQueue.transferTemporaryAccountNotice": "5chan सिर्फ इस कॉपी किए गए पोस्ट के लिए एक नया अस्थायी खाता बनाएगा, फिर प्रकाशित करने के बाद उसे हटा देगा।",
|
||||||
|
"trash": "ट्रैश"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Linkkel kell válaszolnod.",
|
"reply_link_required_alert": "Linkkel kell válaszolnod.",
|
||||||
"reply_media_link_required_alert": "Kép- vagy videólinkkel kell válaszolnod.",
|
"reply_media_link_required_alert": "Kép- vagy videólinkkel kell válaszolnod.",
|
||||||
"reply_links_not_allowed_alert": "Ezen a táblán nem engedélyezettek a válaszlinkek.",
|
"reply_links_not_allowed_alert": "Ezen a táblán nem engedélyezettek a válaszlinkek.",
|
||||||
"transfer": "Átvitel",
|
"modQueue.transferTitle": "Bejegyzés áthelyezése ide: /trash/",
|
||||||
"modQueue.transferTitle": "Bejegyzés áthelyezése",
|
|
||||||
"modQueue.transferSource": "Honnan",
|
"modQueue.transferSource": "Honnan",
|
||||||
"modQueue.transferTarget": "Fórumra",
|
"modQueue.transferTarget": "Ide",
|
||||||
"modQueue.transferFields": "Mezők másolása",
|
"modQueue.transferFields": "Mezők másolása",
|
||||||
"modQueue.transferNoFields": "Válasszon legalább egy mezőt a másoláshoz.",
|
"modQueue.transferNoFields": "Válasszon legalább egy mezőt a másoláshoz.",
|
||||||
"modQueue.transferSuccess": "Áthelyezve. Az eredeti bejegyzés most az új táblára mutat.",
|
"modQueue.transferSuccess": "Áthelyezve ide: /trash/. Az eredeti bejegyzés most a /trash/ helyre mutat.",
|
||||||
"transferred": "Áthelyezve",
|
"transferred": "Áthelyezve",
|
||||||
"modQueue.transferTitleWithNumber": "No.{{number}} bejegyzés áthelyezése",
|
"modQueue.transferTitleWithNumber": "No.{{number}} bejegyzés áthelyezése ide: /trash/",
|
||||||
"modQueue.transferRecreateNotice": "Ez nem valódi protokollszintű áthelyezés. A 5chan újra létrehozza a bejegyzést a kiválasztott táblán, majd eltávolítja az eredetit.",
|
"modQueue.transferRecreateNotice": "Ez nem valódi protokollszintű áthelyezés. A 5chan újra létrehozza a bejegyzést a /trash/ helyen, majd eltávolítja az eredetit.",
|
||||||
"modQueue.transferRepliesNotice": "A válaszok nem kerülnek át. Az eredeti bejegyzéssel együtt törlődnek.",
|
"modQueue.transferRepliesNotice": "A válaszok nem kerülnek át. Az eredeti bejegyzéssel együtt törlődnek.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "A 5chan új ideiglenes fiókot hoz létre csak ehhez a másolt bejegyzéshez, majd közzététel után törli."
|
"modQueue.transferTemporaryAccountNotice": "A 5chan új ideiglenes fiókot hoz létre csak ehhez a másolt bejegyzéshez, majd közzététel után törli.",
|
||||||
|
"trash": "Kuka"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Anda harus membalas dengan tautan.",
|
"reply_link_required_alert": "Anda harus membalas dengan tautan.",
|
||||||
"reply_media_link_required_alert": "Anda harus membalas dengan tautan gambar atau video.",
|
"reply_media_link_required_alert": "Anda harus membalas dengan tautan gambar atau video.",
|
||||||
"reply_links_not_allowed_alert": "Tautan balasan tidak diizinkan di papan ini.",
|
"reply_links_not_allowed_alert": "Tautan balasan tidak diizinkan di papan ini.",
|
||||||
"transfer": "Pindahkan",
|
"modQueue.transferTitle": "Pindahkan postingan ke /trash/",
|
||||||
"modQueue.transferTitle": "Transfer posting",
|
|
||||||
"modQueue.transferSource": "Dari",
|
"modQueue.transferSource": "Dari",
|
||||||
"modQueue.transferTarget": "Ke forum",
|
"modQueue.transferTarget": "Ke",
|
||||||
"modQueue.transferFields": "Salin bidang",
|
"modQueue.transferFields": "Salin bidang",
|
||||||
"modQueue.transferNoFields": "Pilih setidaknya satu bidang untuk disalin.",
|
"modQueue.transferNoFields": "Pilih setidaknya satu bidang untuk disalin.",
|
||||||
"modQueue.transferSuccess": "Ditransfer. Postingan asli sekarang mengarah ke board baru.",
|
"modQueue.transferSuccess": "Dipindahkan ke /trash/. Postingan asli sekarang mengarah ke /trash/.",
|
||||||
"transferred": "Ditransfer",
|
"transferred": "Ditransfer",
|
||||||
"modQueue.transferTitleWithNumber": "Transfer postingan No.{{number}}",
|
"modQueue.transferTitleWithNumber": "Pindahkan postingan No.{{number}} ke /trash/",
|
||||||
"modQueue.transferRecreateNotice": "Ini bukan transfer protokol yang sebenarnya. 5chan membuat ulang postingan di board yang dipilih dan menghapus yang asli.",
|
"modQueue.transferRecreateNotice": "Ini bukan transfer protokol yang sebenarnya. 5chan membuat ulang postingan di /trash/ dan menghapus yang asli.",
|
||||||
"modQueue.transferRepliesNotice": "Balasan tidak ditransfer. Balasan akan dihapus bersama postingan asli.",
|
"modQueue.transferRepliesNotice": "Balasan tidak dipindahkan. Balasan akan dihapus bersama postingan asli.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan akan membuat akun sementara baru hanya untuk postingan salinan ini, lalu menghapusnya setelah dipublikasikan."
|
"modQueue.transferTemporaryAccountNotice": "5chan akan membuat akun sementara baru hanya untuk postingan salinan ini, lalu menghapusnya setelah dipublikasikan.",
|
||||||
|
"trash": "Sampah"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Devi rispondere con un link.",
|
"reply_link_required_alert": "Devi rispondere con un link.",
|
||||||
"reply_media_link_required_alert": "Devi rispondere con un link a un'immagine o a un video.",
|
"reply_media_link_required_alert": "Devi rispondere con un link a un'immagine o a un video.",
|
||||||
"reply_links_not_allowed_alert": "I link nelle risposte non sono consentiti su questa board.",
|
"reply_links_not_allowed_alert": "I link nelle risposte non sono consentiti su questa board.",
|
||||||
"transfer": "Trasferisci",
|
"modQueue.transferTitle": "Sposta post in /trash/",
|
||||||
"modQueue.transferTitle": "Trasferisci post",
|
|
||||||
"modQueue.transferSource": "Da",
|
"modQueue.transferSource": "Da",
|
||||||
"modQueue.transferTarget": "Al board",
|
"modQueue.transferTarget": "A",
|
||||||
"modQueue.transferFields": "Copia campi",
|
"modQueue.transferFields": "Copia campi",
|
||||||
"modQueue.transferNoFields": "Scegli almeno un campo da copiare.",
|
"modQueue.transferNoFields": "Scegli almeno un campo da copiare.",
|
||||||
"modQueue.transferSuccess": "Trasferito. Il post originale ora punta alla nuova board.",
|
"modQueue.transferSuccess": "Spostato in /trash/. Il post originale ora punta a /trash/.",
|
||||||
"transferred": "Trasferito",
|
"transferred": "Trasferito",
|
||||||
"modQueue.transferTitleWithNumber": "Trasferisci post No.{{number}}",
|
"modQueue.transferTitleWithNumber": "Sposta post No.{{number}} in /trash/",
|
||||||
"modQueue.transferRecreateNotice": "Questo non è un vero trasferimento del protocollo. 5chan ricrea il post nella board selezionata e rimuove l’originale.",
|
"modQueue.transferRecreateNotice": "Questo non è un vero trasferimento del protocollo. 5chan ricrea il post in /trash/ e rimuove l’originale.",
|
||||||
"modQueue.transferRepliesNotice": "Le risposte non vengono trasferite. Verranno eliminate insieme al post originale.",
|
"modQueue.transferRepliesNotice": "Le risposte non vengono spostate. Verranno eliminate insieme al post originale.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan creerà un nuovo account temporaneo solo per questo post copiato, poi lo eliminerà dopo la pubblicazione."
|
"modQueue.transferTemporaryAccountNotice": "5chan creerà un nuovo account temporaneo solo per questo post copiato, poi lo eliminerà dopo la pubblicazione.",
|
||||||
|
"trash": "Cestino"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "リンク付きで返信する必要があります。",
|
"reply_link_required_alert": "リンク付きで返信する必要があります。",
|
||||||
"reply_media_link_required_alert": "画像または動画のリンク付きで返信する必要があります。",
|
"reply_media_link_required_alert": "画像または動画のリンク付きで返信する必要があります。",
|
||||||
"reply_links_not_allowed_alert": "この板では返信リンクは許可されていません。",
|
"reply_links_not_allowed_alert": "この板では返信リンクは許可されていません。",
|
||||||
"transfer": "転送",
|
"modQueue.transferTitle": "投稿を /trash/ へ移動",
|
||||||
"modQueue.transferTitle": "投稿を転送",
|
|
||||||
"modQueue.transferSource": "移行元",
|
"modQueue.transferSource": "移行元",
|
||||||
"modQueue.transferTarget": "掲示板へ",
|
"modQueue.transferTarget": "移動先",
|
||||||
"modQueue.transferFields": "フィールドをコピー",
|
"modQueue.transferFields": "フィールドをコピー",
|
||||||
"modQueue.transferNoFields": "コピーする項目を1つ以上選択してください。",
|
"modQueue.transferNoFields": "コピーする項目を1つ以上選択してください。",
|
||||||
"modQueue.transferSuccess": "転送しました。元の投稿は新しい板を指すようになりました。",
|
"modQueue.transferSuccess": "/trash/ へ移動しました。元の投稿は /trash/ を指すようになりました。",
|
||||||
"transferred": "転送済み",
|
"transferred": "転送済み",
|
||||||
"modQueue.transferTitleWithNumber": "投稿 No.{{number}} を転送",
|
"modQueue.transferTitleWithNumber": "投稿 No.{{number}} を /trash/ へ移動",
|
||||||
"modQueue.transferRecreateNotice": "これはプロトコル上の本当の転送ではありません。5chan は選択した板に投稿を再作成し、元の投稿を削除します。",
|
"modQueue.transferRecreateNotice": "これはプロトコル上の本当の転送ではありません。5chan は /trash/ に投稿を再作成し、元の投稿を削除します。",
|
||||||
"modQueue.transferRepliesNotice": "返信は転送されません。元の投稿と一緒に削除されます。",
|
"modQueue.transferRepliesNotice": "返信は移動されません。元の投稿と一緒に削除されます。",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan はこのコピー投稿専用の一時アカウントを新しく作成し、公開後に削除します。"
|
"modQueue.transferTemporaryAccountNotice": "5chan はこのコピー投稿専用の一時アカウントを新しく作成し、公開後に削除します。",
|
||||||
|
"trash": "ゴミ箱"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "링크를 포함해 답글을 달아야 합니다.",
|
"reply_link_required_alert": "링크를 포함해 답글을 달아야 합니다.",
|
||||||
"reply_media_link_required_alert": "이미지 또는 동영상 링크를 포함해 답글을 달아야 합니다.",
|
"reply_media_link_required_alert": "이미지 또는 동영상 링크를 포함해 답글을 달아야 합니다.",
|
||||||
"reply_links_not_allowed_alert": "이 게시판에서는 답글 링크가 허용되지 않습니다.",
|
"reply_links_not_allowed_alert": "이 게시판에서는 답글 링크가 허용되지 않습니다.",
|
||||||
"transfer": "이전",
|
"modQueue.transferTitle": "게시글을 /trash/로 이동",
|
||||||
"modQueue.transferTitle": "게시글 이동",
|
|
||||||
"modQueue.transferSource": "원본",
|
"modQueue.transferSource": "원본",
|
||||||
"modQueue.transferTarget": "게시판으로",
|
"modQueue.transferTarget": "대상",
|
||||||
"modQueue.transferFields": "필드 복사",
|
"modQueue.transferFields": "필드 복사",
|
||||||
"modQueue.transferNoFields": "복사할 필드를 하나 이상 선택하세요.",
|
"modQueue.transferNoFields": "복사할 필드를 하나 이상 선택하세요.",
|
||||||
"modQueue.transferSuccess": "이동되었습니다. 원래 게시글은 이제 새 게시판을 가리킵니다.",
|
"modQueue.transferSuccess": "/trash/로 이동되었습니다. 원래 게시글은 이제 /trash/를 가리킵니다.",
|
||||||
"transferred": "이동됨",
|
"transferred": "이동됨",
|
||||||
"modQueue.transferTitleWithNumber": "게시글 No.{{number}} 이동",
|
"modQueue.transferTitleWithNumber": "게시글 No.{{number}}을 /trash/로 이동",
|
||||||
"modQueue.transferRecreateNotice": "이것은 실제 프로토콜 전송이 아닙니다. 5chan은 선택한 게시판에 게시글을 다시 만들고 원본을 제거합니다.",
|
"modQueue.transferRecreateNotice": "이것은 실제 프로토콜 전송이 아닙니다. 5chan은 /trash/에 게시글을 다시 만들고 원본을 제거합니다.",
|
||||||
"modQueue.transferRepliesNotice": "답글은 이동되지 않습니다. 원본 게시글과 함께 삭제됩니다.",
|
"modQueue.transferRepliesNotice": "답글은 이동되지 않습니다. 원본 게시글과 함께 삭제됩니다.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan은 이 복사된 게시글만을 위한 새 임시 계정을 만든 뒤 게시 후 삭제합니다."
|
"modQueue.transferTemporaryAccountNotice": "5chan은 이 복사된 게시글만을 위한 새 임시 계정을 만든 뒤 게시 후 삭제합니다.",
|
||||||
|
"trash": "휴지통"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "तुम्ही दुव्यासह उत्तर देणे आवश्यक आहे.",
|
"reply_link_required_alert": "तुम्ही दुव्यासह उत्तर देणे आवश्यक आहे.",
|
||||||
"reply_media_link_required_alert": "तुम्ही प्रतिमा किंवा व्हिडिओ दुव्यासह उत्तर देणे आवश्यक आहे.",
|
"reply_media_link_required_alert": "तुम्ही प्रतिमा किंवा व्हिडिओ दुव्यासह उत्तर देणे आवश्यक आहे.",
|
||||||
"reply_links_not_allowed_alert": "या बोर्डवर उत्तरांमधील दुवे परवानगी नाहीत.",
|
"reply_links_not_allowed_alert": "या बोर्डवर उत्तरांमधील दुवे परवानगी नाहीत.",
|
||||||
"transfer": "हस्तांतरित करा",
|
"modQueue.transferTitle": "पोस्ट /trash/ मध्ये हलवा",
|
||||||
"modQueue.transferTitle": "पोस्ट हस्तांतरित करा",
|
|
||||||
"modQueue.transferSource": "पासून",
|
"modQueue.transferSource": "पासून",
|
||||||
"modQueue.transferTarget": "फोरमवर",
|
"modQueue.transferTarget": "कडे",
|
||||||
"modQueue.transferFields": "फील्ड कॉपी करा",
|
"modQueue.transferFields": "फील्ड कॉपी करा",
|
||||||
"modQueue.transferNoFields": "कॉपी करण्यासाठी किमान एक फील्ड निवडा.",
|
"modQueue.transferNoFields": "कॉपी करण्यासाठी किमान एक फील्ड निवडा.",
|
||||||
"modQueue.transferSuccess": "स्थानांतरित झाले. मूळ पोस्ट आता नवीन बोर्डकडे निर्देश करते.",
|
"modQueue.transferSuccess": "/trash/ मध्ये हलवले. मूळ पोस्ट आता /trash/ कडे निर्देश करते.",
|
||||||
"transferred": "स्थानांतरित",
|
"transferred": "स्थानांतरित",
|
||||||
"modQueue.transferTitleWithNumber": "पोस्ट No.{{number}} स्थानांतरित करा",
|
"modQueue.transferTitleWithNumber": "पोस्ट No.{{number}} /trash/ मध्ये हलवा",
|
||||||
"modQueue.transferRecreateNotice": "हे खरे प्रोटोकॉल ट्रान्सफर नाही. 5chan निवडलेल्या बोर्डावर पोस्ट पुन्हा तयार करते आणि मूळ पोस्ट काढते.",
|
"modQueue.transferRecreateNotice": "हे खरे प्रोटोकॉल ट्रान्सफर नाही. 5chan पोस्ट /trash/ मध्ये पुन्हा तयार करते आणि मूळ काढून टाकते.",
|
||||||
"modQueue.transferRepliesNotice": "प्रत्युत्तरे स्थानांतरित होणार नाहीत. ती मूळ पोस्टसोबत हटवली जातील.",
|
"modQueue.transferRepliesNotice": "प्रत्युत्तरे हलवली जाणार नाहीत. ती मूळ पोस्टसोबत हटवली जातील.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan या कॉपी केलेल्या पोस्टसाठीच एक नवीन तात्पुरते खाते तयार करेल आणि प्रकाशित झाल्यावर ते हटवेल."
|
"modQueue.transferTemporaryAccountNotice": "5chan या कॉपी केलेल्या पोस्टसाठीच एक नवीन तात्पुरते खाते तयार करेल आणि प्रकाशित झाल्यावर ते हटवेल.",
|
||||||
|
"trash": "कचरा"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Je moet antwoorden met een link.",
|
"reply_link_required_alert": "Je moet antwoorden met een link.",
|
||||||
"reply_media_link_required_alert": "Je moet antwoorden met een afbeeldings- of videolink.",
|
"reply_media_link_required_alert": "Je moet antwoorden met een afbeeldings- of videolink.",
|
||||||
"reply_links_not_allowed_alert": "Antwoordlinks zijn niet toegestaan op dit bord.",
|
"reply_links_not_allowed_alert": "Antwoordlinks zijn niet toegestaan op dit bord.",
|
||||||
"transfer": "Overdragen",
|
"modQueue.transferTitle": "Bericht naar /trash/ verplaatsen",
|
||||||
"modQueue.transferTitle": "Bericht overdragen",
|
|
||||||
"modQueue.transferSource": "Van",
|
"modQueue.transferSource": "Van",
|
||||||
"modQueue.transferTarget": "Naar forum",
|
"modQueue.transferTarget": "Naar",
|
||||||
"modQueue.transferFields": "Velden kopiëren",
|
"modQueue.transferFields": "Velden kopiëren",
|
||||||
"modQueue.transferNoFields": "Kies minimaal één veld om te kopiëren.",
|
"modQueue.transferNoFields": "Kies minimaal één veld om te kopiëren.",
|
||||||
"modQueue.transferSuccess": "Overgezet. Het oorspronkelijke bericht verwijst nu naar het nieuwe board.",
|
"modQueue.transferSuccess": "Verplaatst naar /trash/. Het oorspronkelijke bericht verwijst nu naar /trash/.",
|
||||||
"transferred": "Overgezet",
|
"transferred": "Overgezet",
|
||||||
"modQueue.transferTitleWithNumber": "Bericht No.{{number}} overzetten",
|
"modQueue.transferTitleWithNumber": "Bericht No.{{number}} naar /trash/ verplaatsen",
|
||||||
"modQueue.transferRecreateNotice": "Dit is geen echte protocoloverdracht. 5chan maakt het bericht opnieuw op het gekozen board en verwijdert het origineel.",
|
"modQueue.transferRecreateNotice": "Dit is geen echte protocoloverdracht. 5chan maakt het bericht opnieuw in /trash/ en verwijdert het origineel.",
|
||||||
"modQueue.transferRepliesNotice": "Reacties worden niet overgezet. Ze worden samen met het oorspronkelijke bericht verwijderd.",
|
"modQueue.transferRepliesNotice": "Reacties worden niet verplaatst. Ze worden samen met het oorspronkelijke bericht verwijderd.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan maakt alleen voor dit gekopieerde bericht een nieuw tijdelijk account aan en verwijdert het na publicatie."
|
"modQueue.transferTemporaryAccountNotice": "5chan maakt alleen voor dit gekopieerde bericht een nieuw tijdelijk account aan en verwijdert het na publicatie.",
|
||||||
|
"trash": "Prullenbak"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Du må svare med en lenke.",
|
"reply_link_required_alert": "Du må svare med en lenke.",
|
||||||
"reply_media_link_required_alert": "Du må svare med en bilde- eller videolenke.",
|
"reply_media_link_required_alert": "Du må svare med en bilde- eller videolenke.",
|
||||||
"reply_links_not_allowed_alert": "Svarlenker er ikke tillatt på dette forumet.",
|
"reply_links_not_allowed_alert": "Svarlenker er ikke tillatt på dette forumet.",
|
||||||
"transfer": "Overfør",
|
"modQueue.transferTitle": "Flytt innlegg til /trash/",
|
||||||
"modQueue.transferTitle": "Overfør innlegg",
|
|
||||||
"modQueue.transferSource": "Fra",
|
"modQueue.transferSource": "Fra",
|
||||||
"modQueue.transferTarget": "Til forum",
|
"modQueue.transferTarget": "Til",
|
||||||
"modQueue.transferFields": "Kopier felt",
|
"modQueue.transferFields": "Kopier felt",
|
||||||
"modQueue.transferNoFields": "Velg minst ett felt som skal kopieres.",
|
"modQueue.transferNoFields": "Velg minst ett felt som skal kopieres.",
|
||||||
"modQueue.transferSuccess": "Overført. Det opprinnelige innlegget peker nå til det nye boardet.",
|
"modQueue.transferSuccess": "Flyttet til /trash/. Det opprinnelige innlegget peker nå til /trash/.",
|
||||||
"transferred": "Overført",
|
"transferred": "Overført",
|
||||||
"modQueue.transferTitleWithNumber": "Overfør innlegg No.{{number}}",
|
"modQueue.transferTitleWithNumber": "Flytt innlegg No.{{number}} til /trash/",
|
||||||
"modQueue.transferRecreateNotice": "Dette er ikke en ekte protokolloverføring. 5chan oppretter innlegget på nytt på valgt board og fjerner originalen.",
|
"modQueue.transferRecreateNotice": "Dette er ikke en ekte protokolloverføring. 5chan oppretter innlegget på nytt i /trash/ og fjerner originalen.",
|
||||||
"modQueue.transferRepliesNotice": "Svar overføres ikke. De slettes sammen med det opprinnelige innlegget.",
|
"modQueue.transferRepliesNotice": "Svar flyttes ikke. De slettes sammen med det opprinnelige innlegget.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan oppretter en ny midlertidig konto bare for dette kopierte innlegget, og sletter den etter publisering."
|
"modQueue.transferTemporaryAccountNotice": "5chan oppretter en ny midlertidig konto bare for dette kopierte innlegget, og sletter den etter publisering.",
|
||||||
|
"trash": "Papirkurv"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Musisz odpowiedzieć linkiem.",
|
"reply_link_required_alert": "Musisz odpowiedzieć linkiem.",
|
||||||
"reply_media_link_required_alert": "Musisz odpowiedzieć linkiem do obrazu lub filmu.",
|
"reply_media_link_required_alert": "Musisz odpowiedzieć linkiem do obrazu lub filmu.",
|
||||||
"reply_links_not_allowed_alert": "Linki w odpowiedziach nie są dozwolone na tej tablicy.",
|
"reply_links_not_allowed_alert": "Linki w odpowiedziach nie są dozwolone na tej tablicy.",
|
||||||
"transfer": "Przenieś",
|
"modQueue.transferTitle": "Przenieś post do /trash/",
|
||||||
"modQueue.transferTitle": "Przenieś post",
|
|
||||||
"modQueue.transferSource": "Z",
|
"modQueue.transferSource": "Z",
|
||||||
"modQueue.transferTarget": "Do forum",
|
"modQueue.transferTarget": "Do",
|
||||||
"modQueue.transferFields": "Kopiuj pola",
|
"modQueue.transferFields": "Kopiuj pola",
|
||||||
"modQueue.transferNoFields": "Wybierz co najmniej jedno pole do skopiowania.",
|
"modQueue.transferNoFields": "Wybierz co najmniej jedno pole do skopiowania.",
|
||||||
"modQueue.transferSuccess": "Przeniesiono. Oryginalny post wskazuje teraz nową tablicę.",
|
"modQueue.transferSuccess": "Przeniesiono do /trash/. Oryginalny post wskazuje teraz /trash/.",
|
||||||
"transferred": "Przeniesiono",
|
"transferred": "Przeniesiono",
|
||||||
"modQueue.transferTitleWithNumber": "Przenieś post No.{{number}}",
|
"modQueue.transferTitleWithNumber": "Przenieś post No.{{number}} do /trash/",
|
||||||
"modQueue.transferRecreateNotice": "To nie jest prawdziwe przeniesienie w protokole. 5chan odtwarza post na wybranej tablicy i usuwa oryginał.",
|
"modQueue.transferRecreateNotice": "To nie jest rzeczywisty transfer na poziomie protokołu. 5chan odtwarza post w /trash/ i usuwa oryginał.",
|
||||||
"modQueue.transferRepliesNotice": "Odpowiedzi nie są przenoszone. Zostaną usunięte razem z oryginalnym postem.",
|
"modQueue.transferRepliesNotice": "Odpowiedzi nie zostaną przeniesione. Zostaną usunięte razem z oryginalnym postem.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan utworzy nowe konto tymczasowe tylko dla tego skopiowanego posta, a potem usunie je po opublikowaniu."
|
"modQueue.transferTemporaryAccountNotice": "5chan utworzy nowe konto tymczasowe tylko dla tego skopiowanego posta, a potem usunie je po opublikowaniu.",
|
||||||
|
"trash": "Kosz"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Você deve responder com um link.",
|
"reply_link_required_alert": "Você deve responder com um link.",
|
||||||
"reply_media_link_required_alert": "Você deve responder com um link de imagem ou vídeo.",
|
"reply_media_link_required_alert": "Você deve responder com um link de imagem ou vídeo.",
|
||||||
"reply_links_not_allowed_alert": "Links em respostas não são permitidos neste board.",
|
"reply_links_not_allowed_alert": "Links em respostas não são permitidos neste board.",
|
||||||
"transfer": "Transferir",
|
"modQueue.transferTitle": "Mover postagem para /trash/",
|
||||||
"modQueue.transferTitle": "Transferir publicação",
|
|
||||||
"modQueue.transferSource": "De",
|
"modQueue.transferSource": "De",
|
||||||
"modQueue.transferTarget": "Para o fórum",
|
"modQueue.transferTarget": "Para",
|
||||||
"modQueue.transferFields": "Copiar campos",
|
"modQueue.transferFields": "Copiar campos",
|
||||||
"modQueue.transferNoFields": "Escolha pelo menos um campo para copiar.",
|
"modQueue.transferNoFields": "Escolha pelo menos um campo para copiar.",
|
||||||
"modQueue.transferSuccess": "Transferido. A postagem original agora aponta para o novo board.",
|
"modQueue.transferSuccess": "Movido para /trash/. A postagem original agora aponta para /trash/.",
|
||||||
"transferred": "Transferido",
|
"transferred": "Transferido",
|
||||||
"modQueue.transferTitleWithNumber": "Transferir postagem No.{{number}}",
|
"modQueue.transferTitleWithNumber": "Mover postagem No.{{number}} para /trash/",
|
||||||
"modQueue.transferRecreateNotice": "Isto não é uma transferência real do protocolo. O 5chan recria a postagem no board selecionado e remove a original.",
|
"modQueue.transferRecreateNotice": "Isto não é uma transferência real do protocolo. O 5chan recria a postagem em /trash/ e remove a original.",
|
||||||
"modQueue.transferRepliesNotice": "As respostas não são transferidas. Elas serão excluídas junto com a postagem original.",
|
"modQueue.transferRepliesNotice": "As respostas não são movidas. Elas serão excluídas junto com a postagem original.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "O 5chan criará uma nova conta temporária apenas para esta postagem copiada e a excluirá depois da publicação."
|
"modQueue.transferTemporaryAccountNotice": "O 5chan criará uma nova conta temporária apenas para esta postagem copiada e a excluirá depois da publicação.",
|
||||||
|
"trash": "Lixeira"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Trebuie să răspunzi cu un link.",
|
"reply_link_required_alert": "Trebuie să răspunzi cu un link.",
|
||||||
"reply_media_link_required_alert": "Trebuie să răspunzi cu un link de imagine sau video.",
|
"reply_media_link_required_alert": "Trebuie să răspunzi cu un link de imagine sau video.",
|
||||||
"reply_links_not_allowed_alert": "Linkurile în răspunsuri nu sunt permise pe acest board.",
|
"reply_links_not_allowed_alert": "Linkurile în răspunsuri nu sunt permise pe acest board.",
|
||||||
"transfer": "Transferă",
|
"modQueue.transferTitle": "Mută postarea în /trash/",
|
||||||
"modQueue.transferTitle": "Transferă postarea",
|
|
||||||
"modQueue.transferSource": "De la",
|
"modQueue.transferSource": "De la",
|
||||||
"modQueue.transferTarget": "La forum",
|
"modQueue.transferTarget": "La",
|
||||||
"modQueue.transferFields": "Copiază câmpurile",
|
"modQueue.transferFields": "Copiază câmpurile",
|
||||||
"modQueue.transferNoFields": "Alege cel puțin un câmp de copiat.",
|
"modQueue.transferNoFields": "Alege cel puțin un câmp de copiat.",
|
||||||
"modQueue.transferSuccess": "Transferat. Postarea originală trimite acum la noul board.",
|
"modQueue.transferSuccess": "Mutată în /trash/. Postarea originală trimite acum la /trash/.",
|
||||||
"transferred": "Transferat",
|
"transferred": "Transferat",
|
||||||
"modQueue.transferTitleWithNumber": "Transferă postarea No.{{number}}",
|
"modQueue.transferTitleWithNumber": "Mută postarea No.{{number}} în /trash/",
|
||||||
"modQueue.transferRecreateNotice": "Acesta nu este un transfer real la nivel de protocol. 5chan recreează postarea pe boardul ales și elimină originalul.",
|
"modQueue.transferRecreateNotice": "Acesta nu este un transfer real la nivel de protocol. 5chan recreează postarea în /trash/ și elimină originalul.",
|
||||||
"modQueue.transferRepliesNotice": "Răspunsurile nu sunt transferate. Vor fi șterse odată cu postarea originală.",
|
"modQueue.transferRepliesNotice": "Răspunsurile nu sunt mutate. Vor fi șterse odată cu postarea originală.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan va crea un cont temporar nou doar pentru această postare copiată, apoi îl va șterge după publicare."
|
"modQueue.transferTemporaryAccountNotice": "5chan va crea un cont temporar nou doar pentru această postare copiată, apoi îl va șterge după publicare.",
|
||||||
|
"trash": "Coș"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Вы должны ответить ссылкой.",
|
"reply_link_required_alert": "Вы должны ответить ссылкой.",
|
||||||
"reply_media_link_required_alert": "Вы должны ответить ссылкой на изображение или видео.",
|
"reply_media_link_required_alert": "Вы должны ответить ссылкой на изображение или видео.",
|
||||||
"reply_links_not_allowed_alert": "Ссылки в ответах на этой доске запрещены.",
|
"reply_links_not_allowed_alert": "Ссылки в ответах на этой доске запрещены.",
|
||||||
"transfer": "Перенести",
|
"modQueue.transferTitle": "Переместить пост в /trash/",
|
||||||
"modQueue.transferTitle": "Перенести пост",
|
|
||||||
"modQueue.transferSource": "Из",
|
"modQueue.transferSource": "Из",
|
||||||
"modQueue.transferTarget": "На форум",
|
"modQueue.transferTarget": "В",
|
||||||
"modQueue.transferFields": "Копировать поля",
|
"modQueue.transferFields": "Копировать поля",
|
||||||
"modQueue.transferNoFields": "Выберите хотя бы одно поле для копирования.",
|
"modQueue.transferNoFields": "Выберите хотя бы одно поле для копирования.",
|
||||||
"modQueue.transferSuccess": "Перенесено. Исходный пост теперь указывает на новую доску.",
|
"modQueue.transferSuccess": "Перемещено в /trash/. Исходный пост теперь указывает на /trash/.",
|
||||||
"transferred": "Перенесено",
|
"transferred": "Перенесено",
|
||||||
"modQueue.transferTitleWithNumber": "Перенести пост No.{{number}}",
|
"modQueue.transferTitleWithNumber": "Переместить пост No.{{number}} в /trash/",
|
||||||
"modQueue.transferRecreateNotice": "Это не настоящий перенос на уровне протокола. 5chan заново создаёт пост на выбранной доске и удаляет оригинал.",
|
"modQueue.transferRecreateNotice": "Это не настоящий перенос на уровне протокола. 5chan заново создаёт пост в /trash/ и удаляет оригинал.",
|
||||||
"modQueue.transferRepliesNotice": "Ответы не переносятся. Они будут удалены вместе с исходным постом.",
|
"modQueue.transferRepliesNotice": "Ответы не перемещаются. Они будут удалены вместе с исходным постом.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan создаст новый временный аккаунт только для этой скопированной публикации, а затем удалит его после публикации."
|
"modQueue.transferTemporaryAccountNotice": "5chan создаст новый временный аккаунт только для этой скопированной публикации, а затем удалит его после публикации.",
|
||||||
|
"trash": "Корзина"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Duhet të përgjigjesh me një lidhje.",
|
"reply_link_required_alert": "Duhet të përgjigjesh me një lidhje.",
|
||||||
"reply_media_link_required_alert": "Duhet të përgjigjesh me një lidhje imazhi ose videoje.",
|
"reply_media_link_required_alert": "Duhet të përgjigjesh me një lidhje imazhi ose videoje.",
|
||||||
"reply_links_not_allowed_alert": "Lidhjet në përgjigje nuk lejohen në këtë bord.",
|
"reply_links_not_allowed_alert": "Lidhjet në përgjigje nuk lejohen në këtë bord.",
|
||||||
"transfer": "Transfero",
|
"modQueue.transferTitle": "Zhvendose postimin te /trash/",
|
||||||
"modQueue.transferTitle": "Transfero postimin",
|
|
||||||
"modQueue.transferSource": "Nga",
|
"modQueue.transferSource": "Nga",
|
||||||
"modQueue.transferTarget": "Në forum",
|
"modQueue.transferTarget": "Te",
|
||||||
"modQueue.transferFields": "Kopjo fushat",
|
"modQueue.transferFields": "Kopjo fushat",
|
||||||
"modQueue.transferNoFields": "Zgjidhni të paktën një fushë për të kopjuar.",
|
"modQueue.transferNoFields": "Zgjidhni të paktën një fushë për të kopjuar.",
|
||||||
"modQueue.transferSuccess": "U transferua. Postimi origjinal tani të drejton te bordi i ri.",
|
"modQueue.transferSuccess": "U zhvendos te /trash/. Postimi origjinal tani të drejton te /trash/.",
|
||||||
"transferred": "U transferua",
|
"transferred": "U transferua",
|
||||||
"modQueue.transferTitleWithNumber": "Transfero postimin No.{{number}}",
|
"modQueue.transferTitleWithNumber": "Zhvendose postimin No.{{number}} te /trash/",
|
||||||
"modQueue.transferRecreateNotice": "Ky nuk është transferim i vërtetë në protokoll. 5chan e rikrijon postimin në bordin e zgjedhur dhe heq origjinalin.",
|
"modQueue.transferRecreateNotice": "Ky nuk është transferim i vërtetë në protokoll. 5chan e rikrijon postimin te /trash/ dhe heq origjinalin.",
|
||||||
"modQueue.transferRepliesNotice": "Përgjigjet nuk transferohen. Ato fshihen bashkë me postimin origjinal.",
|
"modQueue.transferRepliesNotice": "Përgjigjet nuk zhvendosen. Ato fshihen bashkë me postimin origjinal.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan do të krijojë një llogari të re të përkohshme vetëm për këtë postim të kopjuar, pastaj do ta fshijë pas publikimit."
|
"modQueue.transferTemporaryAccountNotice": "5chan do të krijojë një llogari të re të përkohshme vetëm për këtë postim të kopjuar, pastaj do ta fshijë pas publikimit.",
|
||||||
|
"trash": "Kosh"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Du måste svara med en länk.",
|
"reply_link_required_alert": "Du måste svara med en länk.",
|
||||||
"reply_media_link_required_alert": "Du måste svara med en bild- eller videolänk.",
|
"reply_media_link_required_alert": "Du måste svara med en bild- eller videolänk.",
|
||||||
"reply_links_not_allowed_alert": "Svarslänkar är inte tillåtna på detta bräde.",
|
"reply_links_not_allowed_alert": "Svarslänkar är inte tillåtna på detta bräde.",
|
||||||
"transfer": "Överför",
|
"modQueue.transferTitle": "Flytta inlägg till /trash/",
|
||||||
"modQueue.transferTitle": "Överför inlägg",
|
|
||||||
"modQueue.transferSource": "Från",
|
"modQueue.transferSource": "Från",
|
||||||
"modQueue.transferTarget": "Till forum",
|
"modQueue.transferTarget": "Till",
|
||||||
"modQueue.transferFields": "Kopiera fält",
|
"modQueue.transferFields": "Kopiera fält",
|
||||||
"modQueue.transferNoFields": "Välj minst ett fält att kopiera.",
|
"modQueue.transferNoFields": "Välj minst ett fält att kopiera.",
|
||||||
"modQueue.transferSuccess": "Överfört. Det ursprungliga inlägget pekar nu till den nya boarden.",
|
"modQueue.transferSuccess": "Flyttat till /trash/. Det ursprungliga inlägget pekar nu till /trash/.",
|
||||||
"transferred": "Överfört",
|
"transferred": "Överfört",
|
||||||
"modQueue.transferTitleWithNumber": "Överför inlägg No.{{number}}",
|
"modQueue.transferTitleWithNumber": "Flytta inlägg No.{{number}} till /trash/",
|
||||||
"modQueue.transferRecreateNotice": "Det här är inte en riktig protokollöverföring. 5chan återskapar inlägget på vald board och tar bort originalet.",
|
"modQueue.transferRecreateNotice": "Det här är inte en riktig protokollöverföring. 5chan återskapar inlägget i /trash/ och tar bort originalet.",
|
||||||
"modQueue.transferRepliesNotice": "Svar överförs inte. De raderas tillsammans med det ursprungliga inlägget.",
|
"modQueue.transferRepliesNotice": "Svar flyttas inte. De raderas tillsammans med det ursprungliga inlägget.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan skapar ett nytt tillfälligt konto bara för det här kopierade inlägget och raderar det efter publicering."
|
"modQueue.transferTemporaryAccountNotice": "5chan skapar ett nytt tillfälligt konto bara för det här kopierade inlägget och raderar det efter publicering.",
|
||||||
|
"trash": "Papperskorg"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "మీరు లింక్తో ప్రత్యుత్తరం ఇవ్వాలి.",
|
"reply_link_required_alert": "మీరు లింక్తో ప్రత్యుత్తరం ఇవ్వాలి.",
|
||||||
"reply_media_link_required_alert": "మీరు చిత్రం లేదా వీడియో లింక్తో ప్రత్యుత్తరం ఇవ్వాలి.",
|
"reply_media_link_required_alert": "మీరు చిత్రం లేదా వీడియో లింక్తో ప్రత్యుత్తరం ఇవ్వాలి.",
|
||||||
"reply_links_not_allowed_alert": "ఈ బోర్డులో ప్రత్యుత్తర లింక్లకు అనుమతి లేదు.",
|
"reply_links_not_allowed_alert": "ఈ బోర్డులో ప్రత్యుత్తర లింక్లకు అనుమతి లేదు.",
|
||||||
"transfer": "బదిలీ",
|
"modQueue.transferTitle": "పోస్ట్ను /trash/కి తరలించండి",
|
||||||
"modQueue.transferTitle": "పోస్ట్ను బదిలీ చేయండి",
|
|
||||||
"modQueue.transferSource": "నుండి",
|
"modQueue.transferSource": "నుండి",
|
||||||
"modQueue.transferTarget": "ఫోరంకు",
|
"modQueue.transferTarget": "కు",
|
||||||
"modQueue.transferFields": "ఫీల్డ్లను కాపీ చేయండి",
|
"modQueue.transferFields": "ఫీల్డ్లను కాపీ చేయండి",
|
||||||
"modQueue.transferNoFields": "కాపీ చేయడానికి కనీసం ఒక ఫీల్డ్ ఎంచుకోండి.",
|
"modQueue.transferNoFields": "కాపీ చేయడానికి కనీసం ఒక ఫీల్డ్ ఎంచుకోండి.",
|
||||||
"modQueue.transferSuccess": "బదిలీ చేయబడింది. అసలు పోస్ట్ ఇప్పుడు కొత్త బోర్డును సూచిస్తుంది.",
|
"modQueue.transferSuccess": "/trash/కి తరలించబడింది. అసలు పోస్ట్ ఇప్పుడు /trash/ను సూచిస్తుంది.",
|
||||||
"transferred": "బదిలీ చేయబడింది",
|
"transferred": "బదిలీ చేయబడింది",
|
||||||
"modQueue.transferTitleWithNumber": "పోస్ట్ No.{{number}} బదిలీ చేయండి",
|
"modQueue.transferTitleWithNumber": "పోస్ట్ No.{{number}}ను /trash/కి తరలించండి",
|
||||||
"modQueue.transferRecreateNotice": "ఇది నిజమైన ప్రోటోకాల్ బదిలీ కాదు. 5chan ఎంచుకున్న బోర్డులో పోస్ట్ను మళ్లీ సృష్టించి అసలుదాన్ని తొలగిస్తుంది.",
|
"modQueue.transferRecreateNotice": "ఇది నిజమైన ప్రోటోకాల్ బదిలీ కాదు. 5chan పోస్ట్ను /trash/లో మళ్లీ సృష్టించి అసలుదాన్ని తొలగిస్తుంది.",
|
||||||
"modQueue.transferRepliesNotice": "ప్రత్యుత్తరాలు బదిలీ చేయబడవు. అవి అసలు పోస్ట్తో పాటు తొలగించబడతాయి.",
|
"modQueue.transferRepliesNotice": "ప్రత్యుత్తరాలు తరలించబడవు. అవి అసలు పోస్ట్తో పాటు తొలగించబడతాయి.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan ఈ కాపీ చేసిన పోస్ట్ కోసమే కొత్త తాత్కాలిక ఖాతాను సృష్టించి, ప్రచురించిన తర్వాత దాన్ని తొలగిస్తుంది."
|
"modQueue.transferTemporaryAccountNotice": "5chan ఈ కాపీ చేసిన పోస్ట్ కోసమే కొత్త తాత్కాలిక ఖాతాను సృష్టించి, ప్రచురించిన తర్వాత దాన్ని తొలగిస్తుంది.",
|
||||||
|
"trash": "ట్రాష్"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "คุณต้องตอบกลับพร้อมลิงก์",
|
"reply_link_required_alert": "คุณต้องตอบกลับพร้อมลิงก์",
|
||||||
"reply_media_link_required_alert": "คุณต้องตอบกลับพร้อมลิงก์รูปภาพหรือวิดีโอ",
|
"reply_media_link_required_alert": "คุณต้องตอบกลับพร้อมลิงก์รูปภาพหรือวิดีโอ",
|
||||||
"reply_links_not_allowed_alert": "ไม่อนุญาตให้ใส่ลิงก์ในคำตอบบนบอร์ดนี้",
|
"reply_links_not_allowed_alert": "ไม่อนุญาตให้ใส่ลิงก์ในคำตอบบนบอร์ดนี้",
|
||||||
"transfer": "โอน",
|
"modQueue.transferTitle": "ย้ายโพสต์ไปที่ /trash/",
|
||||||
"modQueue.transferTitle": "ย้ายโพสต์",
|
|
||||||
"modQueue.transferSource": "จาก",
|
"modQueue.transferSource": "จาก",
|
||||||
"modQueue.transferTarget": "ไปยังกระดาน",
|
"modQueue.transferTarget": "ไปที่",
|
||||||
"modQueue.transferFields": "คัดลอกฟิลด์",
|
"modQueue.transferFields": "คัดลอกฟิลด์",
|
||||||
"modQueue.transferNoFields": "เลือกอย่างน้อยหนึ่งฟิลด์ที่จะคัดลอก",
|
"modQueue.transferNoFields": "เลือกอย่างน้อยหนึ่งฟิลด์ที่จะคัดลอก",
|
||||||
"modQueue.transferSuccess": "โอนย้ายแล้ว โพสต์ต้นฉบับชี้ไปยังกระดานใหม่แล้ว",
|
"modQueue.transferSuccess": "ย้ายไปที่ /trash/ แล้ว โพสต์ต้นฉบับชี้ไปที่ /trash/ แล้ว",
|
||||||
"transferred": "โอนย้ายแล้ว",
|
"transferred": "โอนย้ายแล้ว",
|
||||||
"modQueue.transferTitleWithNumber": "โอนย้ายโพสต์ No.{{number}}",
|
"modQueue.transferTitleWithNumber": "ย้ายโพสต์ No.{{number}} ไปที่ /trash/",
|
||||||
"modQueue.transferRecreateNotice": "นี่ไม่ใช่การโอนย้ายจริงในระดับโปรโตคอล 5chan จะสร้างโพสต์ใหม่บนกระดานที่เลือกและลบต้นฉบับ",
|
"modQueue.transferRecreateNotice": "นี่ไม่ใช่การโอนย้ายจริงในระดับโปรโตคอล 5chan จะสร้างโพสต์ใหม่ใน /trash/ และลบต้นฉบับ",
|
||||||
"modQueue.transferRepliesNotice": "การตอบกลับจะไม่ถูกโอนย้าย และจะถูกลบไปพร้อมกับโพสต์ต้นฉบับ",
|
"modQueue.transferRepliesNotice": "การตอบกลับจะไม่ถูกย้าย และจะถูกลบไปพร้อมกับโพสต์ต้นฉบับ",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan จะสร้างบัญชีชั่วคราวใหม่สำหรับโพสต์ที่คัดลอกนี้เท่านั้น แล้วลบบัญชีนั้นหลังเผยแพร่"
|
"modQueue.transferTemporaryAccountNotice": "5chan จะสร้างบัญชีชั่วคราวใหม่สำหรับโพสต์ที่คัดลอกนี้เท่านั้น แล้วลบบัญชีนั้นหลังเผยแพร่",
|
||||||
|
"trash": "ถังขยะ"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Bir bağlantıyla yanıt vermelisiniz.",
|
"reply_link_required_alert": "Bir bağlantıyla yanıt vermelisiniz.",
|
||||||
"reply_media_link_required_alert": "Bir görsel veya video bağlantısıyla yanıt vermelisiniz.",
|
"reply_media_link_required_alert": "Bir görsel veya video bağlantısıyla yanıt vermelisiniz.",
|
||||||
"reply_links_not_allowed_alert": "Bu panoda yanıt bağlantılarına izin verilmiyor.",
|
"reply_links_not_allowed_alert": "Bu panoda yanıt bağlantılarına izin verilmiyor.",
|
||||||
"transfer": "Aktar",
|
"modQueue.transferTitle": "Gönderiyi /trash/ panosuna taşı",
|
||||||
"modQueue.transferTitle": "Gönderiyi aktar",
|
|
||||||
"modQueue.transferSource": "Kaynak",
|
"modQueue.transferSource": "Kaynak",
|
||||||
"modQueue.transferTarget": "Foruma",
|
"modQueue.transferTarget": "Hedef",
|
||||||
"modQueue.transferFields": "Alanları kopyala",
|
"modQueue.transferFields": "Alanları kopyala",
|
||||||
"modQueue.transferNoFields": "Kopyalamak için en az bir alan seçin.",
|
"modQueue.transferNoFields": "Kopyalamak için en az bir alan seçin.",
|
||||||
"modQueue.transferSuccess": "Aktarıldı. Orijinal gönderi artık yeni panoya işaret ediyor.",
|
"modQueue.transferSuccess": "/trash/ panosuna taşındı. Orijinal gönderi artık /trash/ panosuna işaret ediyor.",
|
||||||
"transferred": "Aktarıldı",
|
"transferred": "Aktarıldı",
|
||||||
"modQueue.transferTitleWithNumber": "No.{{number}} gönderisini aktar",
|
"modQueue.transferTitleWithNumber": "No.{{number}} gönderisini /trash/ panosuna taşı",
|
||||||
"modQueue.transferRecreateNotice": "Bu gerçek bir protokol aktarımı değildir. 5chan gönderiyi seçilen panoda yeniden oluşturur ve orijinali kaldırır.",
|
"modQueue.transferRecreateNotice": "Bu gerçek bir protokol aktarımı değildir. 5chan gönderiyi /trash/ panosunda yeniden oluşturur ve orijinali kaldırır.",
|
||||||
"modQueue.transferRepliesNotice": "Yanıtlar aktarılmaz. Orijinal gönderiyle birlikte silinirler.",
|
"modQueue.transferRepliesNotice": "Yanıtlar taşınmaz. Orijinal gönderiyle birlikte silinirler.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan yalnızca bu kopyalanan gönderi için yeni bir geçici hesap oluşturacak, yayımladıktan sonra da silecek."
|
"modQueue.transferTemporaryAccountNotice": "5chan yalnızca bu kopyalanan gönderi için yeni bir geçici hesap oluşturacak, yayımladıktan sonra da silecek.",
|
||||||
|
"trash": "Çöp"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Ви маєте відповісти посиланням.",
|
"reply_link_required_alert": "Ви маєте відповісти посиланням.",
|
||||||
"reply_media_link_required_alert": "Ви маєте відповісти посиланням на зображення або відео.",
|
"reply_media_link_required_alert": "Ви маєте відповісти посиланням на зображення або відео.",
|
||||||
"reply_links_not_allowed_alert": "Посилання у відповідях на цій дошці заборонені.",
|
"reply_links_not_allowed_alert": "Посилання у відповідях на цій дошці заборонені.",
|
||||||
"transfer": "Перенести",
|
"modQueue.transferTitle": "Перемістити допис у /trash/",
|
||||||
"modQueue.transferTitle": "Перенести допис",
|
|
||||||
"modQueue.transferSource": "З",
|
"modQueue.transferSource": "З",
|
||||||
"modQueue.transferTarget": "На форум",
|
"modQueue.transferTarget": "До",
|
||||||
"modQueue.transferFields": "Копіювати поля",
|
"modQueue.transferFields": "Копіювати поля",
|
||||||
"modQueue.transferNoFields": "Виберіть принаймні одне поле для копіювання.",
|
"modQueue.transferNoFields": "Виберіть принаймні одне поле для копіювання.",
|
||||||
"modQueue.transferSuccess": "Перенесено. Початковий допис тепер указує на нову дошку.",
|
"modQueue.transferSuccess": "Переміщено у /trash/. Початковий допис тепер указує на /trash/.",
|
||||||
"transferred": "Перенесено",
|
"transferred": "Перенесено",
|
||||||
"modQueue.transferTitleWithNumber": "Перенести допис No.{{number}}",
|
"modQueue.transferTitleWithNumber": "Перемістити допис No.{{number}} у /trash/",
|
||||||
"modQueue.transferRecreateNotice": "Це не справжнє перенесення на рівні протоколу. 5chan заново створює допис на вибраній дошці та видаляє оригінал.",
|
"modQueue.transferRecreateNotice": "Це не справжнє перенесення на рівні протоколу. 5chan заново створює допис у /trash/ і видаляє оригінал.",
|
||||||
"modQueue.transferRepliesNotice": "Відповіді не переносяться. Їх буде видалено разом із початковим дописом.",
|
"modQueue.transferRepliesNotice": "Відповіді не переміщуються. Їх буде видалено разом із початковим дописом.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan створить новий тимчасовий акаунт лише для цього скопійованого допису, а після публікації видалить його."
|
"modQueue.transferTemporaryAccountNotice": "5chan створить новий тимчасовий акаунт лише для цього скопійованого допису, а після публікації видалить його.",
|
||||||
|
"trash": "Кошик"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "آپ کو ایک لنک کے ساتھ جواب دینا ہوگا۔",
|
"reply_link_required_alert": "آپ کو ایک لنک کے ساتھ جواب دینا ہوگا۔",
|
||||||
"reply_media_link_required_alert": "آپ کو تصویر یا ویڈیو کے لنک کے ساتھ جواب دینا ہوگا۔",
|
"reply_media_link_required_alert": "آپ کو تصویر یا ویڈیو کے لنک کے ساتھ جواب دینا ہوگا۔",
|
||||||
"reply_links_not_allowed_alert": "اس بورڈ پر جوابات میں لنکس کی اجازت نہیں ہے۔",
|
"reply_links_not_allowed_alert": "اس بورڈ پر جوابات میں لنکس کی اجازت نہیں ہے۔",
|
||||||
"transfer": "منتقل کریں",
|
"modQueue.transferTitle": "پوسٹ کو /trash/ میں منتقل کریں",
|
||||||
"modQueue.transferTitle": "پوسٹ منتقل کریں",
|
|
||||||
"modQueue.transferSource": "سے",
|
"modQueue.transferSource": "سے",
|
||||||
"modQueue.transferTarget": "بورڈ پر",
|
"modQueue.transferTarget": "طرف",
|
||||||
"modQueue.transferFields": "فیلڈز کاپی کریں",
|
"modQueue.transferFields": "فیلڈز کاپی کریں",
|
||||||
"modQueue.transferNoFields": "کاپی کرنے کے لیے کم از کم ایک فیلڈ منتخب کریں۔",
|
"modQueue.transferNoFields": "کاپی کرنے کے لیے کم از کم ایک فیلڈ منتخب کریں۔",
|
||||||
"modQueue.transferSuccess": "منتقل کر دیا گیا۔ اصل پوسٹ اب نئے بورڈ کی طرف اشارہ کرتی ہے۔",
|
"modQueue.transferSuccess": "/trash/ میں منتقل کر دیا گیا۔ اصل پوسٹ اب /trash/ کی طرف اشارہ کرتی ہے۔",
|
||||||
"transferred": "منتقل شدہ",
|
"transferred": "منتقل شدہ",
|
||||||
"modQueue.transferTitleWithNumber": "پوسٹ No.{{number}} منتقل کریں",
|
"modQueue.transferTitleWithNumber": "پوسٹ No.{{number}} کو /trash/ میں منتقل کریں",
|
||||||
"modQueue.transferRecreateNotice": "یہ حقیقی پروٹوکول ٹرانسفر نہیں ہے۔ 5chan منتخب بورڈ پر پوسٹ دوبارہ بناتا ہے اور اصل پوسٹ ہٹا دیتا ہے۔",
|
"modQueue.transferRecreateNotice": "یہ حقیقی پروٹوکول ٹرانسفر نہیں ہے۔ 5chan پوسٹ کو /trash/ میں دوبارہ بناتا ہے اور اصل پوسٹ ہٹا دیتا ہے۔",
|
||||||
"modQueue.transferRepliesNotice": "جوابات منتقل نہیں ہوں گے۔ وہ اصل پوسٹ کے ساتھ حذف ہو جائیں گے۔",
|
"modQueue.transferRepliesNotice": "جوابات منتقل نہیں ہوں گے۔ وہ اصل پوسٹ کے ساتھ حذف ہو جائیں گے۔",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan صرف اس کاپی شدہ پوسٹ کے لیے ایک نیا عارضی اکاؤنٹ بنائے گا، پھر شائع ہونے کے بعد اسے حذف کر دے گا۔"
|
"modQueue.transferTemporaryAccountNotice": "5chan صرف اس کاپی شدہ پوسٹ کے لیے ایک نیا عارضی اکاؤنٹ بنائے گا، پھر شائع ہونے کے بعد اسے حذف کر دے گا۔",
|
||||||
|
"trash": "ردی"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "Bạn phải trả lời bằng một liên kết.",
|
"reply_link_required_alert": "Bạn phải trả lời bằng một liên kết.",
|
||||||
"reply_media_link_required_alert": "Bạn phải trả lời bằng một liên kết hình ảnh hoặc video.",
|
"reply_media_link_required_alert": "Bạn phải trả lời bằng một liên kết hình ảnh hoặc video.",
|
||||||
"reply_links_not_allowed_alert": "Liên kết trong trả lời không được phép trên bảng này.",
|
"reply_links_not_allowed_alert": "Liên kết trong trả lời không được phép trên bảng này.",
|
||||||
"transfer": "Chuyển",
|
"modQueue.transferTitle": "Chuyển bài viết vào /trash/",
|
||||||
"modQueue.transferTitle": "Chuyển bài đăng",
|
|
||||||
"modQueue.transferSource": "Từ",
|
"modQueue.transferSource": "Từ",
|
||||||
"modQueue.transferTarget": "Đến diễn đàn",
|
"modQueue.transferTarget": "Đến",
|
||||||
"modQueue.transferFields": "Sao chép trường",
|
"modQueue.transferFields": "Sao chép trường",
|
||||||
"modQueue.transferNoFields": "Chọn ít nhất một trường để sao chép.",
|
"modQueue.transferNoFields": "Chọn ít nhất một trường để sao chép.",
|
||||||
"modQueue.transferSuccess": "Đã chuyển. Bài viết gốc hiện trỏ tới bảng mới.",
|
"modQueue.transferSuccess": "Đã chuyển vào /trash/. Bài viết gốc hiện trỏ tới /trash/.",
|
||||||
"transferred": "Đã chuyển",
|
"transferred": "Đã chuyển",
|
||||||
"modQueue.transferTitleWithNumber": "Chuyển bài viết No.{{number}}",
|
"modQueue.transferTitleWithNumber": "Chuyển bài viết No.{{number}} vào /trash/",
|
||||||
"modQueue.transferRecreateNotice": "Đây không phải là chuyển bài thật ở cấp giao thức. 5chan tạo lại bài viết trên bảng đã chọn và gỡ bài gốc.",
|
"modQueue.transferRecreateNotice": "Đây không phải là chuyển bài thật ở cấp giao thức. 5chan tạo lại bài viết trong /trash/ và gỡ bài gốc.",
|
||||||
"modQueue.transferRepliesNotice": "Các trả lời sẽ không được chuyển. Chúng sẽ bị xóa cùng với bài viết gốc.",
|
"modQueue.transferRepliesNotice": "Các trả lời sẽ không được chuyển. Chúng sẽ bị xóa cùng với bài viết gốc.",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan sẽ tạo một tài khoản tạm thời mới chỉ cho bài viết được sao chép này, rồi xóa tài khoản đó sau khi đăng."
|
"modQueue.transferTemporaryAccountNotice": "5chan sẽ tạo một tài khoản tạm thời mới chỉ cho bài viết được sao chép này, rồi xóa tài khoản đó sau khi đăng.",
|
||||||
|
"trash": "Thùng rác"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,16 +450,16 @@
|
|||||||
"reply_link_required_alert": "你必须使用链接回复。",
|
"reply_link_required_alert": "你必须使用链接回复。",
|
||||||
"reply_media_link_required_alert": "你必须使用图片或视频链接回复。",
|
"reply_media_link_required_alert": "你必须使用图片或视频链接回复。",
|
||||||
"reply_links_not_allowed_alert": "此版块不允许回复链接。",
|
"reply_links_not_allowed_alert": "此版块不允许回复链接。",
|
||||||
"transfer": "转移",
|
"modQueue.transferTitle": "将帖子移至 /trash/",
|
||||||
"modQueue.transferTitle": "转移帖子",
|
|
||||||
"modQueue.transferSource": "来源",
|
"modQueue.transferSource": "来源",
|
||||||
"modQueue.transferTarget": "转至论坛",
|
"modQueue.transferTarget": "至",
|
||||||
"modQueue.transferFields": "复制字段",
|
"modQueue.transferFields": "复制字段",
|
||||||
"modQueue.transferNoFields": "请至少选择一个要复制的字段。",
|
"modQueue.transferNoFields": "请至少选择一个要复制的字段。",
|
||||||
"modQueue.transferSuccess": "已转移。原帖现在指向新版块。",
|
"modQueue.transferSuccess": "已移至 /trash/。原帖现在指向 /trash/。",
|
||||||
"transferred": "已转移",
|
"transferred": "已转移",
|
||||||
"modQueue.transferTitleWithNumber": "转移帖子 No.{{number}}",
|
"modQueue.transferTitleWithNumber": "将帖子 No.{{number}} 移至 /trash/",
|
||||||
"modQueue.transferRecreateNotice": "这不是协议层面的真实转移。5chan 会在所选版块重新创建帖子,并移除原帖。",
|
"modQueue.transferRecreateNotice": "这不是协议层面的真实转移。5chan 会在 /trash/ 重新创建帖子,并移除原帖。",
|
||||||
"modQueue.transferRepliesNotice": "回复不会被转移。它们会随原帖一起删除。",
|
"modQueue.transferRepliesNotice": "回复不会被移动。它们会随原帖一起删除。",
|
||||||
"modQueue.transferTemporaryAccountNotice": "5chan 会专门为这个复制后的帖子创建一个新的临时账号,并在发布后删除它。"
|
"modQueue.transferTemporaryAccountNotice": "5chan 会专门为这个复制后的帖子创建一个新的临时账号,并在发布后删除它。",
|
||||||
|
"trash": "垃圾箱"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { createElement } from 'react';
|
|||||||
import { createRoot, type Root } from 'react-dom/client';
|
import { createRoot, type Root } from 'react-dom/client';
|
||||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
||||||
import EditMenu from '../edit-menu';
|
import EditMenu from '../edit-menu';
|
||||||
|
import { TRASH_BOARD_ADDRESS } from '../../../lib/special-boards';
|
||||||
|
|
||||||
(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true;
|
(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true;
|
||||||
const act = (React as { act?: (cb: () => void | Promise<void>) => void | Promise<void> }).act as (cb: () => void | Promise<void>) => void | Promise<void>;
|
const act = (React as { act?: (cb: () => void | Promise<void>) => void | Promise<void> }).act as (cb: () => void | Promise<void>) => void | Promise<void>;
|
||||||
@@ -435,7 +436,7 @@ describe('EditMenu', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('lets moderators transfer top-level published posts from the edit menu', async () => {
|
it('lets moderators move top-level published posts to trash from the edit menu', async () => {
|
||||||
testState.privileges = {
|
testState.privileges = {
|
||||||
isAccountCommentAuthor: false,
|
isAccountCommentAuthor: false,
|
||||||
isAccountMod: true,
|
isAccountMod: true,
|
||||||
@@ -444,7 +445,7 @@ describe('EditMenu', () => {
|
|||||||
|
|
||||||
await renderMenu(basePost);
|
await renderMenu(basePost);
|
||||||
await openMenu();
|
await openMenu();
|
||||||
await clickButton('transfer');
|
await clickButton('trash');
|
||||||
|
|
||||||
expect(container.querySelector('[data-testid="post-transfer-modal"]')?.getAttribute('data-cid')).toBe('comment-1');
|
expect(container.querySelector('[data-testid="post-transfer-modal"]')?.getAttribute('data-cid')).toBe('comment-1');
|
||||||
});
|
});
|
||||||
@@ -456,7 +457,8 @@ describe('EditMenu', () => {
|
|||||||
['purged', { commentModeration: { purged: true } }],
|
['purged', { commentModeration: { purged: true } }],
|
||||||
['archived', { archived: true }],
|
['archived', { archived: true }],
|
||||||
['moderation archived', { commentModeration: { archived: true } }],
|
['moderation archived', { commentModeration: { archived: true } }],
|
||||||
])('does not let moderators transfer %s posts from the edit menu', async (_label, postPatch) => {
|
['trash board', { communityAddress: TRASH_BOARD_ADDRESS }],
|
||||||
|
])('does not let moderators move %s posts to trash from the edit menu', async (_label, postPatch) => {
|
||||||
testState.privileges = {
|
testState.privileges = {
|
||||||
isAccountCommentAuthor: false,
|
isAccountCommentAuthor: false,
|
||||||
isAccountMod: true,
|
isAccountMod: true,
|
||||||
@@ -469,7 +471,7 @@ describe('EditMenu', () => {
|
|||||||
});
|
});
|
||||||
await openMenu();
|
await openMenu();
|
||||||
|
|
||||||
expect(hasButton('transfer')).toBe(false);
|
expect(hasButton('trash')).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('lets moderators clear an existing canonical author ban', async () => {
|
it('lets moderators clear an existing canonical author ban', async () => {
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import useIsMobile from '../../hooks/use-is-mobile';
|
|||||||
import useAuthorPrivileges from '../../hooks/use-author-privileges';
|
import useAuthorPrivileges from '../../hooks/use-author-privileges';
|
||||||
import { useBoardPseudonymityMode } from '../../hooks/use-board-pseudonymity-mode';
|
import { useBoardPseudonymityMode } from '../../hooks/use-board-pseudonymity-mode';
|
||||||
import { getCommentCommunityAddress, withResolvedCommentCommunityAddress } from '../../lib/utils/comment-utils';
|
import { getCommentCommunityAddress, withResolvedCommentCommunityAddress } from '../../lib/utils/comment-utils';
|
||||||
import { canTransferComment } from '../../lib/comment-transfer';
|
import { canMoveCommentToTrash } from '../../lib/comment-transfer';
|
||||||
import PostTransferModal from '../post-transfer-modal/post-transfer-modal';
|
import PostTransferModal from '../post-transfer-modal/post-transfer-modal';
|
||||||
|
|
||||||
const daysToTimestampInSeconds = (days: number) => {
|
const daysToTimestampInSeconds = (days: number) => {
|
||||||
@@ -90,7 +90,7 @@ const EditMenu = ({ post }: { post: Comment }) => {
|
|||||||
const canAttemptAuthorDelete = isAccountCommentAuthor || allowsPseudonymousDelete;
|
const canAttemptAuthorDelete = isAccountCommentAuthor || allowsPseudonymousDelete;
|
||||||
const canOpenEditMenu = isAccountMod || canAttemptAuthorDelete;
|
const canOpenEditMenu = isAccountMod || canAttemptAuthorDelete;
|
||||||
const canEditOwnModPost = isAccountMod && isAccountCommentAuthor;
|
const canEditOwnModPost = isAccountMod && isAccountCommentAuthor;
|
||||||
const canTransferPost = isAccountMod && canTransferComment(resolvedPost);
|
const canTransferPost = isAccountMod && canMoveCommentToTrash(resolvedPost);
|
||||||
const signer = isAccountCommentAuthor ? account?.signer : undefined;
|
const signer = isAccountCommentAuthor ? account?.signer : undefined;
|
||||||
const latestPostRef = useRef(resolvedPost);
|
const latestPostRef = useRef(resolvedPost);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -552,7 +552,7 @@ const EditMenu = ({ post }: { post: Comment }) => {
|
|||||||
<div className={styles.menuItem}>
|
<div className={styles.menuItem}>
|
||||||
[
|
[
|
||||||
<button type='button' className={styles.menuButton} onClick={openTransfer}>
|
<button type='button' className={styles.menuButton} onClick={openTransfer}>
|
||||||
{t('transfer')}
|
{t('trash')}
|
||||||
</button>
|
</button>
|
||||||
?]
|
?]
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -472,7 +472,7 @@ const PostInfo = ({
|
|||||||
<span className={styles.modQueueButtonWrapper}>
|
<span className={styles.modQueueButtonWrapper}>
|
||||||
[
|
[
|
||||||
<button type='button' className={styles.modQueueActionButton} onClick={onTransfer} disabled={isPublishing}>
|
<button type='button' className={styles.modQueueActionButton} onClick={onTransfer} disabled={isPublishing}>
|
||||||
{t('transfer')}
|
{t('trash')}
|
||||||
</button>
|
</button>
|
||||||
]
|
]
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -862,7 +862,7 @@ const PostMobile = ({
|
|||||||
</button>
|
</button>
|
||||||
{onTransfer && (
|
{onTransfer && (
|
||||||
<button type='button' className='button' onClick={onTransfer} disabled={isPublishing}>
|
<button type='button' className='button' onClick={onTransfer} disabled={isPublishing}>
|
||||||
{t('transfer')}
|
{t('trash')}
|
||||||
</button>
|
</button>
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -154,28 +154,20 @@ describe('PostTransferModal', () => {
|
|||||||
expect(modal?.style.transform).toBe('');
|
expect(modal?.style.transform).toBe('');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('offers the hidden trash board as a transfer target', async () => {
|
it('renders the hidden trash board as the fixed transfer target', async () => {
|
||||||
await renderTransferModal();
|
await renderTransferModal();
|
||||||
|
|
||||||
const options = Array.from(document.body.querySelectorAll<HTMLOptionElement>('select option')).map((option) => ({
|
expect(document.body.textContent).toContain(TRASH_BOARD_TITLE);
|
||||||
text: option.textContent,
|
expect(document.body.querySelector('select')).toBeNull();
|
||||||
value: option.value,
|
|
||||||
}));
|
|
||||||
|
|
||||||
expect(options).toContainEqual({ text: TRASH_BOARD_TITLE, value: TRASH_BOARD_ADDRESS });
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('resolves the hidden trash board when it is the transfer source', async () => {
|
it('disables submission when the hidden trash board is the transfer source', async () => {
|
||||||
await renderTransferModal({ ...baseComment, communityAddress: TRASH_BOARD_ADDRESS });
|
await renderTransferModal({ ...baseComment, communityAddress: TRASH_BOARD_ADDRESS });
|
||||||
|
|
||||||
expect(document.body.textContent).toContain(TRASH_BOARD_TITLE);
|
expect(document.body.textContent).toContain(TRASH_BOARD_TITLE);
|
||||||
|
expect(document.body.querySelector('select')).toBeNull();
|
||||||
const select = document.body.querySelector<HTMLSelectElement>('select');
|
const submitButton = Array.from(document.body.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.type === 'submit');
|
||||||
expect(select).not.toBeNull();
|
expect(submitButton?.disabled).toBe(true);
|
||||||
await act(async () => {
|
|
||||||
select!.value = 'random-nsfw.bso';
|
|
||||||
select!.dispatchEvent(new Event('change', { bubbles: true }));
|
|
||||||
});
|
|
||||||
|
|
||||||
const form = document.body.querySelector<HTMLFormElement>('form');
|
const form = document.body.querySelector<HTMLFormElement>('form');
|
||||||
expect(form).not.toBeNull();
|
expect(form).not.toBeNull();
|
||||||
@@ -183,29 +175,17 @@ describe('PostTransferModal', () => {
|
|||||||
form!.dispatchEvent(new Event('submit', { bubbles: true, cancelable: true }));
|
form!.dispatchEvent(new Event('submit', { bubbles: true, cancelable: true }));
|
||||||
});
|
});
|
||||||
|
|
||||||
const [publishOptions] = testState.publishCommentMock.mock.calls[0] as [Record<string, unknown>, string];
|
expect(testState.publishCommentMock).not.toHaveBeenCalled();
|
||||||
await act(async () => {
|
expect(testState.publishCommentModerationMock).not.toHaveBeenCalled();
|
||||||
await (publishOptions.onChallengeVerification as (verification: unknown, comment: unknown) => Promise<void>)(
|
|
||||||
{ challengeSuccess: true, commentUpdate: { cid: 'target-comment' } },
|
|
||||||
{ cid: 'challenge-comment' },
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
const [sourceModerationOptions] = testState.publishCommentModerationMock.mock.calls[1] as [{ commentModeration: { reason: string } }, string];
|
|
||||||
expect(sourceModerationOptions.commentModeration.reason).toContain('/trash/');
|
|
||||||
expect(sourceModerationOptions.commentModeration.reason).toContain('(the rules)');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('does not offer the hidden trash board target when the source uses its public key alias', async () => {
|
it('disables submission when the transfer source uses the trash public key alias', async () => {
|
||||||
await renderTransferModal({ ...baseComment, communityAddress: TRASH_BOARD_PUBLIC_KEY });
|
await renderTransferModal({ ...baseComment, communityAddress: TRASH_BOARD_PUBLIC_KEY });
|
||||||
|
|
||||||
const options = Array.from(document.body.querySelectorAll<HTMLOptionElement>('select option')).map((option) => ({
|
|
||||||
text: option.textContent,
|
|
||||||
value: option.value,
|
|
||||||
}));
|
|
||||||
|
|
||||||
expect(document.body.textContent).toContain(TRASH_BOARD_TITLE);
|
expect(document.body.textContent).toContain(TRASH_BOARD_TITLE);
|
||||||
expect(options).not.toContainEqual({ text: TRASH_BOARD_TITLE, value: TRASH_BOARD_ADDRESS });
|
expect(document.body.querySelector('select')).toBeNull();
|
||||||
|
const submitButton = Array.from(document.body.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.type === 'submit');
|
||||||
|
expect(submitButton?.disabled).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('reopens desktop transfer modals at the last dragged session position', async () => {
|
it('reopens desktop transfer modals at the last dragged session position', async () => {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import { alertChallengeVerificationFailed } from '../../lib/utils/challenge-util
|
|||||||
import { areSameBoardAddress } from '../../lib/utils/route-utils';
|
import { areSameBoardAddress } from '../../lib/utils/route-utils';
|
||||||
import { getCommentCommunityAddress } from '../../lib/utils/comment-utils';
|
import { getCommentCommunityAddress } from '../../lib/utils/comment-utils';
|
||||||
import capitalize from 'lodash/capitalize';
|
import capitalize from 'lodash/capitalize';
|
||||||
import { getSpecialBoardByAddress, SPECIAL_BOARDS } from '../../lib/special-boards';
|
import { getSpecialBoardByAddress, TRASH_BOARD_ADDRESS } from '../../lib/special-boards';
|
||||||
import styles from './post-transfer-modal.module.css';
|
import styles from './post-transfer-modal.module.css';
|
||||||
import {
|
import {
|
||||||
getAvailableTransferFields,
|
getAvailableTransferFields,
|
||||||
@@ -43,7 +43,6 @@ const TRANSFER_MODAL_VIEWPORT_GUTTER_PX = 20;
|
|||||||
const TRANSFER_MODAL_POSITION_SESSION_STORAGE_KEY = '5chan:transfer-modal-position';
|
const TRANSFER_MODAL_POSITION_SESSION_STORAGE_KEY = '5chan:transfer-modal-position';
|
||||||
|
|
||||||
interface TransferModalState {
|
interface TransferModalState {
|
||||||
targetBoardAddress: string;
|
|
||||||
selectedFields: PostTransferFields;
|
selectedFields: PostTransferFields;
|
||||||
transferState: PostTransferState;
|
transferState: PostTransferState;
|
||||||
transferError?: unknown;
|
transferError?: unknown;
|
||||||
@@ -51,7 +50,6 @@ interface TransferModalState {
|
|||||||
|
|
||||||
type TransferModalAction =
|
type TransferModalAction =
|
||||||
| { type: 'field'; field: PostTransferField; checked: boolean }
|
| { type: 'field'; field: PostTransferField; checked: boolean }
|
||||||
| { type: 'targetBoard'; value: string }
|
|
||||||
| { type: 'publishStarted' }
|
| { type: 'publishStarted' }
|
||||||
| { type: 'publishSucceeded' }
|
| { type: 'publishSucceeded' }
|
||||||
| { type: 'publishFinalizationFailed'; error: unknown }
|
| { type: 'publishFinalizationFailed'; error: unknown }
|
||||||
@@ -65,7 +63,6 @@ interface PostTransferModalProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const getInitialTransferModalState = (comment: Comment): TransferModalState => ({
|
const getInitialTransferModalState = (comment: Comment): TransferModalState => ({
|
||||||
targetBoardAddress: '',
|
|
||||||
selectedFields: getInitialTransferFields(comment),
|
selectedFields: getInitialTransferFields(comment),
|
||||||
transferState: 'idle',
|
transferState: 'idle',
|
||||||
});
|
});
|
||||||
@@ -80,10 +77,6 @@ const transferModalReducer = (state: TransferModalState, action: TransferModalAc
|
|||||||
if (isTerminalTransferState(state.transferState)) return state;
|
if (isTerminalTransferState(state.transferState)) return state;
|
||||||
return resetTransferResult({ ...state, selectedFields: { ...state.selectedFields, [action.field]: action.checked } });
|
return resetTransferResult({ ...state, selectedFields: { ...state.selectedFields, [action.field]: action.checked } });
|
||||||
}
|
}
|
||||||
if (action.type === 'targetBoard') {
|
|
||||||
if (isTerminalTransferState(state.transferState)) return state;
|
|
||||||
return resetTransferResult({ ...state, targetBoardAddress: action.value });
|
|
||||||
}
|
|
||||||
if (action.type === 'publishStarted') {
|
if (action.type === 'publishStarted') {
|
||||||
return { ...state, transferState: 'publishing', transferError: undefined };
|
return { ...state, transferState: 'publishing', transferError: undefined };
|
||||||
}
|
}
|
||||||
@@ -192,17 +185,13 @@ const PostTransferModal = ({ comment, onClose, onTransferStateChange, onTransfer
|
|||||||
const deleteAccount = useAccountsStore((state) => state.accountsActions.deleteAccount) as DeleteAccountAction;
|
const deleteAccount = useAccountsStore((state) => state.accountsActions.deleteAccount) as DeleteAccountAction;
|
||||||
const sourceCommunityAddress = getCommentCommunityAddress(comment);
|
const sourceCommunityAddress = getCommentCommunityAddress(comment);
|
||||||
const sourceCommentCid = comment.cid;
|
const sourceCommentCid = comment.cid;
|
||||||
const boardOptions = useMemo(() => {
|
const resolvedTargetBoardAddress = TRASH_BOARD_ADDRESS;
|
||||||
const transferTargets = [...directories, ...SPECIAL_BOARDS];
|
const resolvedTargetBoard = getSpecialBoardByAddress(TRASH_BOARD_ADDRESS);
|
||||||
return transferTargets
|
const targetBoardLabel = getTransferBoardLabel(resolvedTargetBoard ?? { address: TRASH_BOARD_ADDRESS });
|
||||||
.filter((community) => community.address && !isSameTransferBoard(community, sourceCommunityAddress))
|
const isSourceTargetBoard = isSameTransferBoard(resolvedTargetBoard ?? { address: TRASH_BOARD_ADDRESS }, sourceCommunityAddress);
|
||||||
.sort((left, right) => getTransferBoardLabel(left).localeCompare(getTransferBoardLabel(right), undefined, { sensitivity: 'base' }));
|
|
||||||
}, [directories, sourceCommunityAddress]);
|
|
||||||
const [modalState, dispatchModalState] = useReducer(transferModalReducer, comment, getInitialTransferModalState);
|
const [modalState, dispatchModalState] = useReducer(transferModalReducer, comment, getInitialTransferModalState);
|
||||||
const { targetBoardAddress, selectedFields, transferState, transferError } = modalState;
|
const { selectedFields, transferState, transferError } = modalState;
|
||||||
|
|
||||||
const resolvedTargetBoardAddress = targetBoardAddress;
|
|
||||||
const resolvedTargetBoard = boardOptions.find((community) => community.address === targetBoardAddress);
|
|
||||||
const availableFields = useMemo(() => getAvailableTransferFields(comment), [comment]);
|
const availableFields = useMemo(() => getAvailableTransferFields(comment), [comment]);
|
||||||
const sourceBoard = useMemo(() => {
|
const sourceBoard = useMemo(() => {
|
||||||
if (!sourceCommunityAddress) return undefined;
|
if (!sourceCommunityAddress) return undefined;
|
||||||
@@ -217,7 +206,7 @@ const PostTransferModal = ({ comment, onClose, onTransferStateChange, onTransfer
|
|||||||
const canSubmit =
|
const canSubmit =
|
||||||
!isPublishingTransfer &&
|
!isPublishingTransfer &&
|
||||||
!isTransferComplete &&
|
!isTransferComplete &&
|
||||||
Boolean(targetBoardAddress) &&
|
!isSourceTargetBoard &&
|
||||||
Boolean(sourceCommunityAddress) &&
|
Boolean(sourceCommunityAddress) &&
|
||||||
Boolean(sourceCommentCid) &&
|
Boolean(sourceCommentCid) &&
|
||||||
typeof createAccount === 'function' &&
|
typeof createAccount === 'function' &&
|
||||||
@@ -454,23 +443,10 @@ const PostTransferModal = ({ comment, onClose, onTransferStateChange, onTransfer
|
|||||||
<span className={styles.transferLabel}>{t('modQueue.transferSource')}</span>
|
<span className={styles.transferLabel}>{t('modQueue.transferSource')}</span>
|
||||||
<span>{sourceBoardLabel}</span>
|
<span>{sourceBoardLabel}</span>
|
||||||
</div>
|
</div>
|
||||||
<label className={styles.transferRow}>
|
<div className={styles.transferRow}>
|
||||||
<span className={styles.transferLabel}>{t('modQueue.transferTarget')}</span>
|
<span className={styles.transferLabel}>{t('modQueue.transferTarget')}</span>
|
||||||
<select
|
<span>{targetBoardLabel}</span>
|
||||||
value={targetBoardAddress}
|
</div>
|
||||||
onChange={(event) => dispatchModalState({ type: 'targetBoard', value: event.target.value })}
|
|
||||||
disabled={isPublishingTransfer || isTransferComplete}
|
|
||||||
>
|
|
||||||
<option value='' disabled>
|
|
||||||
{t('choose_one')}
|
|
||||||
</option>
|
|
||||||
{boardOptions.map((community) => (
|
|
||||||
<option key={community.address} value={community.address}>
|
|
||||||
{getTransferBoardLabel(community)}
|
|
||||||
</option>
|
|
||||||
))}
|
|
||||||
</select>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<fieldset className={styles.transferFields}>
|
<fieldset className={styles.transferFields}>
|
||||||
<legend>{t('modQueue.transferFields')}</legend>
|
<legend>{t('modQueue.transferFields')}</legend>
|
||||||
@@ -507,7 +483,7 @@ const PostTransferModal = ({ comment, onClose, onTransferStateChange, onTransfer
|
|||||||
{t('close')}
|
{t('close')}
|
||||||
</button>
|
</button>
|
||||||
<button type='submit' disabled={!canSubmit}>
|
<button type='submit' disabled={!canSubmit}>
|
||||||
{isPublishingTransfer ? t('publishing') : t('transfer')}
|
{isPublishingTransfer ? t('publishing') : t('trash')}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { describe, expect, it } from 'vitest';
|
import { describe, expect, it } from 'vitest';
|
||||||
import {
|
import {
|
||||||
|
canMoveCommentToTrash,
|
||||||
canTransferComment,
|
canTransferComment,
|
||||||
getTargetTransferModerationFlairs,
|
getTargetTransferModerationFlairs,
|
||||||
getTransferPublishPayload,
|
getTransferPublishPayload,
|
||||||
@@ -9,7 +10,7 @@ import {
|
|||||||
hasTransferredCommentMarker,
|
hasTransferredCommentMarker,
|
||||||
TRANSFERRED_COMMENT_FLAIR,
|
TRANSFERRED_COMMENT_FLAIR,
|
||||||
} from '../comment-transfer';
|
} from '../comment-transfer';
|
||||||
import { TRASH_BOARD_ADDRESS, TRASH_BOARD_CODE, TRASH_BOARD_TITLE } from '../special-boards';
|
import { TRASH_BOARD_ADDRESS, TRASH_BOARD_CODE, TRASH_BOARD_PUBLIC_KEY, TRASH_BOARD_TITLE } from '../special-boards';
|
||||||
|
|
||||||
describe('comment-transfer', () => {
|
describe('comment-transfer', () => {
|
||||||
const selectedFields = {
|
const selectedFields = {
|
||||||
@@ -33,6 +34,13 @@ describe('comment-transfer', () => {
|
|||||||
expect(canTransferComment({ cid: 'source', commentModeration: { archived: true } } as never)).toBe(false);
|
expect(canTransferComment({ cid: 'source', commentModeration: { archived: true } } as never)).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('only allows movable posts outside the trash board to move to trash', () => {
|
||||||
|
expect(canMoveCommentToTrash({ cid: 'source', communityAddress: 'music-posting.eth' } as never)).toBe(true);
|
||||||
|
expect(canMoveCommentToTrash({ cid: 'source', communityAddress: TRASH_BOARD_ADDRESS } as never)).toBe(false);
|
||||||
|
expect(canMoveCommentToTrash({ cid: 'source', communityAddress: TRASH_BOARD_PUBLIC_KEY } as never)).toBe(false);
|
||||||
|
expect(canMoveCommentToTrash({ cid: 'reply', parentCid: 'source', communityAddress: 'music-posting.eth' } as never)).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
it('copies selected post fields while excluding flag and transferred flairs', () => {
|
it('copies selected post fields while excluding flag and transferred flairs', () => {
|
||||||
const payload = getTransferPublishPayload(
|
const payload = getTransferPublishPayload(
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import type { Comment } from '@bitsocial/bitsocial-react-hooks';
|
import type { Comment } from '@bitsocial/bitsocial-react-hooks';
|
||||||
import { isCommentFlagFlair } from './comment-flags';
|
import { isCommentFlagFlair } from './comment-flags';
|
||||||
import { isSpecialBoardCode } from './special-boards';
|
import { getSpecialBoardByAddress, isSpecialBoardCode, TRASH_BOARD_CODE } from './special-boards';
|
||||||
import { isCommentArchived } from './utils/comment-moderation-utils';
|
import { isCommentArchived } from './utils/comment-moderation-utils';
|
||||||
|
import { getCommentCommunityAddress } from './utils/comment-utils';
|
||||||
import { normalizePublishURL } from './utils/url-utils';
|
import { normalizePublishURL } from './utils/url-utils';
|
||||||
|
|
||||||
export type PostTransferField = 'displayName' | 'title' | 'content' | 'link' | 'spoiler' | 'flairs';
|
export type PostTransferField = 'displayName' | 'title' | 'content' | 'link' | 'spoiler' | 'flairs';
|
||||||
@@ -47,6 +48,9 @@ export const canTransferComment = (comment: Comment | undefined): boolean => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const canMoveCommentToTrash = (comment: Comment | undefined): boolean =>
|
||||||
|
canTransferComment(comment) && getSpecialBoardByAddress(getCommentCommunityAddress(comment))?.directoryCode !== TRASH_BOARD_CODE;
|
||||||
|
|
||||||
export const getInitialTransferFields = (comment: Comment): PostTransferFields => ({
|
export const getInitialTransferFields = (comment: Comment): PostTransferFields => ({
|
||||||
displayName: false,
|
displayName: false,
|
||||||
title: Boolean(getTextField(comment.title)),
|
title: Boolean(getTextField(comment.title)),
|
||||||
|
|||||||
@@ -81,7 +81,11 @@ useModQueueStoreMock.getState = getModQueueState;
|
|||||||
|
|
||||||
vi.mock('react-i18next', () => ({
|
vi.mock('react-i18next', () => ({
|
||||||
useTranslation: () => ({
|
useTranslation: () => ({
|
||||||
t: (key: string, options?: Record<string, unknown>) => (key === 'modQueue.transferTitleWithNumber' ? `Transfer Post No.${options?.number}` : key),
|
t: (key: string, options?: Record<string, unknown>) => {
|
||||||
|
if (key === 'modQueue.transferTitleWithNumber') return `Move Post No.${options?.number} to /trash/`;
|
||||||
|
if (key === 'trash') return 'Trash';
|
||||||
|
return key;
|
||||||
|
},
|
||||||
}),
|
}),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
@@ -311,7 +315,7 @@ vi.mock('../../post/post', () => ({
|
|||||||
'data-testid': 'mod-queue-feed-post',
|
'data-testid': 'mod-queue-feed-post',
|
||||||
},
|
},
|
||||||
post?.cid ?? 'missing',
|
post?.cid ?? 'missing',
|
||||||
onTransfer ? createElement('button', { type: 'button', onClick: onTransfer }, 'transfer') : null,
|
onTransfer ? createElement('button', { type: 'button', onClick: onTransfer }, 'Trash') : null,
|
||||||
),
|
),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
@@ -580,7 +584,7 @@ describe('ModQueueView', () => {
|
|||||||
expect(previewPost?.getAttribute('data-show-replies')).toBe('false');
|
expect(previewPost?.getAttribute('data-show-replies')).toBe('false');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('transfers a queued post to another board with a temporary account', async () => {
|
it('moves a queued post to /trash/ with a temporary account', async () => {
|
||||||
testState.directories = [
|
testState.directories = [
|
||||||
{ address: 'music-posting.eth', directoryCode: 'mu', title: '/mu/ - Music' },
|
{ address: 'music-posting.eth', directoryCode: 'mu', title: '/mu/ - Music' },
|
||||||
{ address: 'tech-posting.eth', directoryCode: 'g', title: '/g/ - Technology' },
|
{ address: 'tech-posting.eth', directoryCode: 'g', title: '/g/ - Technology' },
|
||||||
@@ -604,7 +608,7 @@ describe('ModQueueView', () => {
|
|||||||
|
|
||||||
await renderModQueue();
|
await renderModQueue();
|
||||||
|
|
||||||
const transferButton = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.textContent === 'transfer');
|
const transferButton = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.textContent === 'Trash');
|
||||||
expect(transferButton).toBeTruthy();
|
expect(transferButton).toBeTruthy();
|
||||||
|
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
@@ -612,25 +616,18 @@ describe('ModQueueView', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const dialog = document.body.querySelector<HTMLElement>('[role="dialog"][aria-labelledby="post-transfer-title"]');
|
const dialog = document.body.querySelector<HTMLElement>('[role="dialog"][aria-labelledby="post-transfer-title"]');
|
||||||
expect(dialog?.textContent).toContain('Transfer Post No.8');
|
expect(dialog?.textContent).toContain('Move Post No.8 to /trash/');
|
||||||
expect(dialog?.textContent).toContain('/g/ - Technology');
|
expect(dialog?.textContent).toContain('/trash/ - Off-topic');
|
||||||
|
expect(dialog?.textContent).not.toContain('/g/ - Technology');
|
||||||
|
expect(dialog?.textContent).not.toContain('/a/ - Anime & Manga');
|
||||||
expect(dialog?.textContent).toContain('modQueue.transferRecreateNotice');
|
expect(dialog?.textContent).toContain('modQueue.transferRecreateNotice');
|
||||||
expect(dialog?.textContent).toContain('modQueue.transferRepliesNotice');
|
expect(dialog?.textContent).toContain('modQueue.transferRepliesNotice');
|
||||||
expect(dialog?.textContent).toContain('modQueue.transferTemporaryAccountNotice');
|
expect(dialog?.textContent).toContain('modQueue.transferTemporaryAccountNotice');
|
||||||
expect(dialog?.textContent).not.toContain('modQueue.transferAccount');
|
expect(dialog?.textContent).not.toContain('modQueue.transferAccount');
|
||||||
const targetSelect = dialog?.querySelector<HTMLSelectElement>('select');
|
expect(dialog?.querySelector('select')).toBeNull();
|
||||||
expect(Array.from(targetSelect?.options ?? []).map((option) => option.value)).toEqual(['', 'anime-posting.eth', 'tech-posting.eth', TRASH_BOARD_ADDRESS]);
|
|
||||||
const submitButton = Array.from(dialog?.querySelectorAll<HTMLButtonElement>('button') ?? []).find((button) => button.type === 'submit');
|
const submitButton = Array.from(dialog?.querySelectorAll<HTMLButtonElement>('button') ?? []).find((button) => button.type === 'submit');
|
||||||
expect(submitButton?.disabled).toBe(true);
|
|
||||||
|
|
||||||
await act(async () => {
|
|
||||||
if (targetSelect) {
|
|
||||||
targetSelect.value = 'tech-posting.eth';
|
|
||||||
targetSelect.dispatchEvent(new Event('change', { bubbles: true }));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(submitButton?.disabled).toBe(false);
|
expect(submitButton?.disabled).toBe(false);
|
||||||
|
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
submitButton?.click();
|
submitButton?.click();
|
||||||
await Promise.resolve();
|
await Promise.resolve();
|
||||||
@@ -643,7 +640,7 @@ describe('ModQueueView', () => {
|
|||||||
const [payload, accountName] = testState.publishCommentMock.mock.calls[0];
|
const [payload, accountName] = testState.publishCommentMock.mock.calls[0];
|
||||||
expect(accountName).toBe(temporaryAccountName);
|
expect(accountName).toBe(temporaryAccountName);
|
||||||
expect(payload).toMatchObject({
|
expect(payload).toMatchObject({
|
||||||
communityAddress: 'tech-posting.eth',
|
communityAddress: TRASH_BOARD_ADDRESS,
|
||||||
content: 'belongs on tech',
|
content: 'belongs on tech',
|
||||||
flairs: [{ text: 'flash:loop' }],
|
flairs: [{ text: 'flash:loop' }],
|
||||||
link: 'https://example.com/image.png',
|
link: 'https://example.com/image.png',
|
||||||
@@ -655,7 +652,7 @@ describe('ModQueueView', () => {
|
|||||||
|
|
||||||
const alertSpy = vi.spyOn(window, 'alert').mockImplementation(() => undefined);
|
const alertSpy = vi.spyOn(window, 'alert').mockImplementation(() => undefined);
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
await payload.onChallengeVerification({ challengeSuccess: false, reason: 'try again' }, { cid: 'retry-post', communityAddress: 'tech-posting.eth' });
|
await payload.onChallengeVerification({ challengeSuccess: false, reason: 'try again' }, { cid: 'retry-post', communityAddress: TRASH_BOARD_ADDRESS });
|
||||||
await Promise.resolve();
|
await Promise.resolve();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -673,7 +670,7 @@ describe('ModQueueView', () => {
|
|||||||
expect(testState.publishCommentModerationActionMock).toHaveBeenCalledTimes(2);
|
expect(testState.publishCommentModerationActionMock).toHaveBeenCalledTimes(2);
|
||||||
expect(testState.publishCommentModerationActionMock.mock.calls[0][0]).toMatchObject({
|
expect(testState.publishCommentModerationActionMock.mock.calls[0][0]).toMatchObject({
|
||||||
commentCid: 'transferred-post',
|
commentCid: 'transferred-post',
|
||||||
communityAddress: 'tech-posting.eth',
|
communityAddress: TRASH_BOARD_ADDRESS,
|
||||||
commentModeration: {
|
commentModeration: {
|
||||||
flairs: [{ text: 'flash:loop' }, { text: '5chan:transferred' }],
|
flairs: [{ text: 'flash:loop' }, { text: '5chan:transferred' }],
|
||||||
},
|
},
|
||||||
@@ -683,14 +680,13 @@ describe('ModQueueView', () => {
|
|||||||
communityAddress: 'music-posting.eth',
|
communityAddress: 'music-posting.eth',
|
||||||
commentModeration: {
|
commentModeration: {
|
||||||
approved: false,
|
approved: false,
|
||||||
reason: 'Moved to >>>/g/, this post did not belong to /mu/ ([rules](/rules#mu))',
|
reason: 'Moved to >>>/trash/, this post did not belong to /mu/ ([rules](/rules#mu))',
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
expect(testState.deleteAccountMock).toHaveBeenCalledWith(temporaryAccountName);
|
expect(testState.deleteAccountMock).toHaveBeenCalledWith(temporaryAccountName);
|
||||||
expect(dialog?.textContent).toContain('modQueue.transferSuccess');
|
expect(dialog?.textContent).toContain('modQueue.transferSuccess');
|
||||||
expect(dialog?.textContent).not.toContain('#12');
|
expect(dialog?.textContent).not.toContain('#12');
|
||||||
expect(submitButton?.disabled).toBe(true);
|
expect(submitButton?.disabled).toBe(true);
|
||||||
expect(targetSelect?.disabled).toBe(true);
|
|
||||||
expect(testState.rememberCommentsInQueueMock).toHaveBeenCalledWith([
|
expect(testState.rememberCommentsInQueueMock).toHaveBeenCalledWith([
|
||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
approved: false,
|
approved: false,
|
||||||
@@ -699,9 +695,9 @@ describe('ModQueueView', () => {
|
|||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
expect(container.textContent).toContain('rejected');
|
expect(container.textContent).toContain('rejected');
|
||||||
expect(
|
expect(Array.from(container.querySelectorAll<HTMLButtonElement>('button')).some((button) => ['approve', 'reject', 'Trash'].includes(button.textContent ?? ''))).toBe(
|
||||||
Array.from(container.querySelectorAll<HTMLButtonElement>('button')).some((button) => ['approve', 'reject', 'transfer'].includes(button.textContent ?? '')),
|
false,
|
||||||
).toBe(false);
|
);
|
||||||
|
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
submitButton?.click();
|
submitButton?.click();
|
||||||
@@ -732,19 +728,13 @@ describe('ModQueueView', () => {
|
|||||||
|
|
||||||
await renderModQueue();
|
await renderModQueue();
|
||||||
|
|
||||||
const transferButton = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.textContent === 'transfer');
|
const transferButton = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.textContent === 'Trash');
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
transferButton?.click();
|
transferButton?.click();
|
||||||
});
|
});
|
||||||
|
|
||||||
const dialog = document.body.querySelector<HTMLElement>('[role="dialog"][aria-labelledby="post-transfer-title"]');
|
const dialog = document.body.querySelector<HTMLElement>('[role="dialog"][aria-labelledby="post-transfer-title"]');
|
||||||
const targetSelect = dialog?.querySelector<HTMLSelectElement>('select');
|
expect(dialog?.querySelector('select')).toBeNull();
|
||||||
await act(async () => {
|
|
||||||
if (targetSelect) {
|
|
||||||
targetSelect.value = 'tech-posting.eth';
|
|
||||||
targetSelect.dispatchEvent(new Event('change', { bubbles: true }));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const submitButton = Array.from(dialog?.querySelectorAll<HTMLButtonElement>('button') ?? []).find((button) => button.type === 'submit');
|
const submitButton = Array.from(dialog?.querySelectorAll<HTMLButtonElement>('button') ?? []).find((button) => button.type === 'submit');
|
||||||
|
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
@@ -760,7 +750,6 @@ describe('ModQueueView', () => {
|
|||||||
|
|
||||||
expect(dialog?.querySelector('[data-testid="error-display"]')?.textContent).toBe('target marker failed');
|
expect(dialog?.querySelector('[data-testid="error-display"]')?.textContent).toBe('target marker failed');
|
||||||
expect(submitButton?.disabled).toBe(true);
|
expect(submitButton?.disabled).toBe(true);
|
||||||
expect(targetSelect?.disabled).toBe(true);
|
|
||||||
expect(testState.deleteAccountMock).toHaveBeenCalled();
|
expect(testState.deleteAccountMock).toHaveBeenCalled();
|
||||||
|
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
@@ -775,7 +764,7 @@ describe('ModQueueView', () => {
|
|||||||
closeButton?.click();
|
closeButton?.click();
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(Array.from(container.querySelectorAll<HTMLButtonElement>('button')).some((button) => button.textContent === 'transfer')).toBe(false);
|
expect(Array.from(container.querySelectorAll<HTMLButtonElement>('button')).some((button) => button.textContent === 'Trash')).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('awaits transfer publish rollback before enabling retry', async () => {
|
it('awaits transfer publish rollback before enabling retry', async () => {
|
||||||
@@ -803,19 +792,13 @@ describe('ModQueueView', () => {
|
|||||||
|
|
||||||
await renderModQueue();
|
await renderModQueue();
|
||||||
|
|
||||||
const transferButton = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.textContent === 'transfer');
|
const transferButton = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.textContent === 'Trash');
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
transferButton?.click();
|
transferButton?.click();
|
||||||
});
|
});
|
||||||
|
|
||||||
const dialog = document.body.querySelector<HTMLElement>('[role="dialog"][aria-labelledby="post-transfer-title"]');
|
const dialog = document.body.querySelector<HTMLElement>('[role="dialog"][aria-labelledby="post-transfer-title"]');
|
||||||
const targetSelect = dialog?.querySelector<HTMLSelectElement>('select');
|
expect(dialog?.querySelector('select')).toBeNull();
|
||||||
await act(async () => {
|
|
||||||
if (targetSelect) {
|
|
||||||
targetSelect.value = 'tech-posting.eth';
|
|
||||||
targetSelect.dispatchEvent(new Event('change', { bubbles: true }));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const submitButton = Array.from(dialog?.querySelectorAll<HTMLButtonElement>('button') ?? []).find((button) => button.type === 'submit');
|
const submitButton = Array.from(dialog?.querySelectorAll<HTMLButtonElement>('button') ?? []).find((button) => button.type === 'submit');
|
||||||
|
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
@@ -874,7 +857,7 @@ describe('ModQueueView', () => {
|
|||||||
|
|
||||||
await renderModQueue();
|
await renderModQueue();
|
||||||
|
|
||||||
let transferButtons = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).filter((button) => button.textContent === 'transfer');
|
let transferButtons = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).filter((button) => button.textContent === 'Trash');
|
||||||
expect(transferButtons).toHaveLength(2);
|
expect(transferButtons).toHaveLength(2);
|
||||||
|
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
@@ -882,7 +865,14 @@ describe('ModQueueView', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
expect(document.body.querySelectorAll('[role="dialog"][aria-labelledby="post-transfer-title"]')).toHaveLength(1);
|
expect(document.body.querySelectorAll('[role="dialog"][aria-labelledby="post-transfer-title"]')).toHaveLength(1);
|
||||||
expect(Array.from(container.querySelectorAll<HTMLButtonElement>('button')).filter((button) => button.textContent === 'transfer')).toHaveLength(0);
|
transferButtons = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).filter((button) => button.textContent === 'Trash');
|
||||||
|
expect(transferButtons).toHaveLength(1);
|
||||||
|
|
||||||
|
await act(async () => {
|
||||||
|
transferButtons[0]?.click();
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(document.body.querySelectorAll('[role="dialog"][aria-labelledby="post-transfer-title"]')).toHaveLength(1);
|
||||||
|
|
||||||
const dialog = document.body.querySelector<HTMLElement>('[role="dialog"][aria-labelledby="post-transfer-title"]');
|
const dialog = document.body.querySelector<HTMLElement>('[role="dialog"][aria-labelledby="post-transfer-title"]');
|
||||||
const closeButton = Array.from(dialog?.querySelectorAll<HTMLButtonElement>('button') ?? []).find((button) => button.textContent === 'close');
|
const closeButton = Array.from(dialog?.querySelectorAll<HTMLButtonElement>('button') ?? []).find((button) => button.textContent === 'close');
|
||||||
@@ -891,7 +881,7 @@ describe('ModQueueView', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
expect(document.body.querySelectorAll('[role="dialog"][aria-labelledby="post-transfer-title"]')).toHaveLength(0);
|
expect(document.body.querySelectorAll('[role="dialog"][aria-labelledby="post-transfer-title"]')).toHaveLength(0);
|
||||||
transferButtons = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).filter((button) => button.textContent === 'transfer');
|
transferButtons = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).filter((button) => button.textContent === 'Trash');
|
||||||
expect(transferButtons).toHaveLength(2);
|
expect(transferButtons).toHaveLength(2);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -920,20 +910,14 @@ describe('ModQueueView', () => {
|
|||||||
|
|
||||||
await renderModQueue();
|
await renderModQueue();
|
||||||
|
|
||||||
const transferButton = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.textContent === 'transfer');
|
const transferButton = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.textContent === 'Trash');
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
transferButton?.click();
|
transferButton?.click();
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(document.body.querySelectorAll('[role="dialog"][aria-labelledby="post-transfer-title"]')).toHaveLength(1);
|
expect(document.body.querySelectorAll('[role="dialog"][aria-labelledby="post-transfer-title"]')).toHaveLength(1);
|
||||||
const dialog = document.body.querySelector<HTMLElement>('[role="dialog"][aria-labelledby="post-transfer-title"]');
|
const dialog = document.body.querySelector<HTMLElement>('[role="dialog"][aria-labelledby="post-transfer-title"]');
|
||||||
const targetSelect = dialog?.querySelector<HTMLSelectElement>('select');
|
expect(dialog?.querySelector('select')).toBeNull();
|
||||||
await act(async () => {
|
|
||||||
if (targetSelect) {
|
|
||||||
targetSelect.value = 'tech-posting.eth';
|
|
||||||
targetSelect.dispatchEvent(new Event('change', { bubbles: true }));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const submitButton = Array.from(dialog?.querySelectorAll<HTMLButtonElement>('button') ?? []).find((button) => button.type === 'submit');
|
const submitButton = Array.from(dialog?.querySelectorAll<HTMLButtonElement>('button') ?? []).find((button) => button.type === 'submit');
|
||||||
|
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
@@ -946,14 +930,14 @@ describe('ModQueueView', () => {
|
|||||||
await renderModQueue();
|
await renderModQueue();
|
||||||
|
|
||||||
expect(document.body.querySelectorAll('[role="dialog"][aria-labelledby="post-transfer-title"]')).toHaveLength(0);
|
expect(document.body.querySelectorAll('[role="dialog"][aria-labelledby="post-transfer-title"]')).toHaveLength(0);
|
||||||
expect(Array.from(container.querySelectorAll<HTMLButtonElement>('button')).filter((button) => button.textContent === 'transfer')).toHaveLength(0);
|
expect(Array.from(container.querySelectorAll<HTMLButtonElement>('button')).filter((button) => button.textContent === 'Trash')).toHaveLength(0);
|
||||||
|
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
await payload.onChallengeVerification({ challengeSuccess: true, commentUpdate: { cid: 'transferred-post' } }, { cid: 'transferred-post' });
|
await payload.onChallengeVerification({ challengeSuccess: true, commentUpdate: { cid: 'transferred-post' } }, { cid: 'transferred-post' });
|
||||||
await Promise.resolve();
|
await Promise.resolve();
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(Array.from(container.querySelectorAll<HTMLButtonElement>('button')).filter((button) => button.textContent === 'transfer')).toHaveLength(1);
|
expect(Array.from(container.querySelectorAll<HTMLButtonElement>('button')).filter((button) => button.textContent === 'Trash')).toHaveLength(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('does not show transfer for queued replies', async () => {
|
it('does not show transfer for queued replies', async () => {
|
||||||
@@ -971,7 +955,7 @@ describe('ModQueueView', () => {
|
|||||||
|
|
||||||
await renderModQueue();
|
await renderModQueue();
|
||||||
|
|
||||||
expect(Array.from(container.querySelectorAll<HTMLButtonElement>('button')).some((button) => button.textContent === 'transfer')).toBe(false);
|
expect(Array.from(container.querySelectorAll<HTMLButtonElement>('button')).some((button) => button.textContent === 'Trash')).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
it.each([
|
it.each([
|
||||||
@@ -981,6 +965,7 @@ describe('ModQueueView', () => {
|
|||||||
['purged', { commentModeration: { purged: true } }],
|
['purged', { commentModeration: { purged: true } }],
|
||||||
['archived', { archived: true }],
|
['archived', { archived: true }],
|
||||||
['moderation archived', { commentModeration: { archived: true } }],
|
['moderation archived', { commentModeration: { archived: true } }],
|
||||||
|
['trash board', { communityAddress: TRASH_BOARD_ADDRESS }],
|
||||||
])('does not show transfer for %s queued posts', async (_label, commentPatch) => {
|
])('does not show transfer for %s queued posts', async (_label, commentPatch) => {
|
||||||
testState.feed = [
|
testState.feed = [
|
||||||
{
|
{
|
||||||
@@ -996,7 +981,7 @@ describe('ModQueueView', () => {
|
|||||||
|
|
||||||
await renderModQueue();
|
await renderModQueue();
|
||||||
|
|
||||||
expect(Array.from(container.querySelectorAll<HTMLButtonElement>('button')).some((button) => button.textContent === 'transfer')).toBe(false);
|
expect(Array.from(container.querySelectorAll<HTMLButtonElement>('button')).some((button) => button.textContent === 'Trash')).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('cleans up the temporary account and unlocks the transfer modal when the challenge is abandoned', async () => {
|
it('cleans up the temporary account and unlocks the transfer modal when the challenge is abandoned', async () => {
|
||||||
@@ -1017,19 +1002,13 @@ describe('ModQueueView', () => {
|
|||||||
|
|
||||||
await renderModQueue();
|
await renderModQueue();
|
||||||
|
|
||||||
const transferButton = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.textContent === 'transfer');
|
const transferButton = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.textContent === 'Trash');
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
transferButton?.click();
|
transferButton?.click();
|
||||||
});
|
});
|
||||||
|
|
||||||
const dialog = document.body.querySelector<HTMLElement>('[role="dialog"][aria-labelledby="post-transfer-title"]');
|
const dialog = document.body.querySelector<HTMLElement>('[role="dialog"][aria-labelledby="post-transfer-title"]');
|
||||||
const targetSelect = dialog?.querySelector<HTMLSelectElement>('select');
|
expect(dialog?.querySelector('select')).toBeNull();
|
||||||
await act(async () => {
|
|
||||||
if (targetSelect) {
|
|
||||||
targetSelect.value = 'tech-posting.eth';
|
|
||||||
targetSelect.dispatchEvent(new Event('change', { bubbles: true }));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const submitButton = Array.from(dialog?.querySelectorAll<HTMLButtonElement>('button') ?? []).find((button) => button.type === 'submit');
|
const submitButton = Array.from(dialog?.querySelectorAll<HTMLButtonElement>('button') ?? []).find((button) => button.type === 'submit');
|
||||||
|
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
@@ -1037,9 +1016,9 @@ describe('ModQueueView', () => {
|
|||||||
await Promise.resolve();
|
await Promise.resolve();
|
||||||
});
|
});
|
||||||
expect(container.textContent).toContain('publishing');
|
expect(container.textContent).toContain('publishing');
|
||||||
expect(
|
expect(Array.from(container.querySelectorAll<HTMLButtonElement>('button')).some((button) => ['approve', 'reject', 'Trash'].includes(button.textContent ?? ''))).toBe(
|
||||||
Array.from(container.querySelectorAll<HTMLButtonElement>('button')).some((button) => ['approve', 'reject', 'transfer'].includes(button.textContent ?? '')),
|
false,
|
||||||
).toBe(false);
|
);
|
||||||
|
|
||||||
const temporaryAccountName = testState.createAccountMock.mock.calls[0][0];
|
const temporaryAccountName = testState.createAccountMock.mock.calls[0][0];
|
||||||
const [payload] = testState.publishCommentMock.mock.calls[0];
|
const [payload] = testState.publishCommentMock.mock.calls[0];
|
||||||
@@ -1084,13 +1063,13 @@ describe('ModQueueView', () => {
|
|||||||
await renderModQueue();
|
await renderModQueue();
|
||||||
|
|
||||||
expect(container.querySelector('[data-testid="mod-queue-feed-post"]')?.getAttribute('data-cid')).toBe('wrong-board-post');
|
expect(container.querySelector('[data-testid="mod-queue-feed-post"]')?.getAttribute('data-cid')).toBe('wrong-board-post');
|
||||||
const transferButton = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.textContent === 'transfer');
|
const transferButton = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.textContent === 'Trash');
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
transferButton?.click();
|
transferButton?.click();
|
||||||
});
|
});
|
||||||
|
|
||||||
const dialog = document.body.querySelector<HTMLElement>('[role="dialog"][aria-labelledby="post-transfer-title"]');
|
const dialog = document.body.querySelector<HTMLElement>('[role="dialog"][aria-labelledby="post-transfer-title"]');
|
||||||
expect(dialog?.textContent).toContain('Transfer Post No.8');
|
expect(dialog?.textContent).toContain('Move Post No.8 to /trash/');
|
||||||
|
|
||||||
const closeButton = Array.from(dialog?.querySelectorAll<HTMLButtonElement>('button') ?? []).find((button) => button.textContent === 'close');
|
const closeButton = Array.from(dialog?.querySelectorAll<HTMLButtonElement>('button') ?? []).find((button) => button.textContent === 'close');
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
@@ -1120,19 +1099,13 @@ describe('ModQueueView', () => {
|
|||||||
await renderModQueue();
|
await renderModQueue();
|
||||||
|
|
||||||
const feedPost = container.querySelector('[data-testid="mod-queue-feed-post"]');
|
const feedPost = container.querySelector('[data-testid="mod-queue-feed-post"]');
|
||||||
const transferButton = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.textContent === 'transfer');
|
const transferButton = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.textContent === 'Trash');
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
transferButton?.click();
|
transferButton?.click();
|
||||||
});
|
});
|
||||||
|
|
||||||
const dialog = document.body.querySelector<HTMLElement>('[role="dialog"][aria-labelledby="post-transfer-title"]');
|
const dialog = document.body.querySelector<HTMLElement>('[role="dialog"][aria-labelledby="post-transfer-title"]');
|
||||||
const targetSelect = dialog?.querySelector<HTMLSelectElement>('select');
|
expect(dialog?.querySelector('select')).toBeNull();
|
||||||
await act(async () => {
|
|
||||||
if (targetSelect) {
|
|
||||||
targetSelect.value = 'tech-posting.eth';
|
|
||||||
targetSelect.dispatchEvent(new Event('change', { bubbles: true }));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const submitButton = Array.from(dialog?.querySelectorAll<HTMLButtonElement>('button') ?? []).find((button) => button.type === 'submit');
|
const submitButton = Array.from(dialog?.querySelectorAll<HTMLButtonElement>('button') ?? []).find((button) => button.type === 'submit');
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
@@ -1150,7 +1123,7 @@ describe('ModQueueView', () => {
|
|||||||
|
|
||||||
expect(feedPost?.getAttribute('data-is-publishing')).toBe('false');
|
expect(feedPost?.getAttribute('data-is-publishing')).toBe('false');
|
||||||
expect(feedPost?.getAttribute('data-mod-queue-status')).toBe('rejected');
|
expect(feedPost?.getAttribute('data-mod-queue-status')).toBe('rejected');
|
||||||
expect(Array.from(container.querySelectorAll<HTMLButtonElement>('button')).some((button) => button.textContent === 'transfer')).toBe(false);
|
expect(Array.from(container.querySelectorAll<HTMLButtonElement>('button')).some((button) => button.textContent === 'Trash')).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('keeps the transfer modal non-blocking and closes it with Escape', async () => {
|
it('keeps the transfer modal non-blocking and closes it with Escape', async () => {
|
||||||
@@ -1171,13 +1144,13 @@ describe('ModQueueView', () => {
|
|||||||
|
|
||||||
await renderModQueue();
|
await renderModQueue();
|
||||||
|
|
||||||
const transferButton = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.textContent === 'transfer');
|
const transferButton = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.textContent === 'Trash');
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
transferButton?.click();
|
transferButton?.click();
|
||||||
});
|
});
|
||||||
|
|
||||||
const dialog = document.body.querySelector<HTMLElement>('[role="dialog"][aria-labelledby="post-transfer-title"]');
|
const dialog = document.body.querySelector<HTMLElement>('[role="dialog"][aria-labelledby="post-transfer-title"]');
|
||||||
expect(dialog?.textContent).toContain('Transfer Post No.8');
|
expect(dialog?.textContent).toContain('Move Post No.8 to /trash/');
|
||||||
|
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
dialog?.querySelector('form')?.dispatchEvent(new MouseEvent('click', { bubbles: true }));
|
dialog?.querySelector('form')?.dispatchEvent(new MouseEvent('click', { bubbles: true }));
|
||||||
@@ -1218,7 +1191,7 @@ describe('ModQueueView', () => {
|
|||||||
try {
|
try {
|
||||||
await renderModQueue();
|
await renderModQueue();
|
||||||
|
|
||||||
const transferButton = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.textContent === 'transfer');
|
const transferButton = Array.from(container.querySelectorAll<HTMLButtonElement>('button')).find((button) => button.textContent === 'Trash');
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
transferButton?.click();
|
transferButton?.click();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ import { PageFooterDesktop, PageFooterMobile, StyleOnlyFooterFirstRow } from '..
|
|||||||
import footerStyles from '../../components/footer/footer.module.css';
|
import footerStyles from '../../components/footer/footer.module.css';
|
||||||
import { useModeratedCommunityAddressInputs, useModeratedCommunityAddressesForInputs } from '../../hooks/use-moderated-community-addresses';
|
import { useModeratedCommunityAddressInputs, useModeratedCommunityAddressesForInputs } from '../../hooks/use-moderated-community-addresses';
|
||||||
import PostTransferModal, { type PostTransferState } from '../../components/post-transfer-modal/post-transfer-modal';
|
import PostTransferModal, { type PostTransferState } from '../../components/post-transfer-modal/post-transfer-modal';
|
||||||
import { canTransferComment } from '../../lib/comment-transfer';
|
import { canMoveCommentToTrash } from '../../lib/comment-transfer';
|
||||||
|
|
||||||
/** Path for display: directory code, or full address if has TLD, or shortened for long IPNS keys (no dot) */
|
/** Path for display: directory code, or full address if has TLD, or shortened for long IPNS keys (no dot) */
|
||||||
const getBoardDisplayPath = (address: string, path: string): string => {
|
const getBoardDisplayPath = (address: string, path: string): string => {
|
||||||
@@ -282,12 +282,13 @@ const useModQueueTransfer = (comment: Comment, transferControls: ModQueueTransfe
|
|||||||
const rememberCommentsInQueue = useModQueueStore((state) => state.rememberCommentsInQueue);
|
const rememberCommentsInQueue = useModQueueStore((state) => state.rememberCommentsInQueue);
|
||||||
const { activeTransferCommentCid, setActiveTransferCommentCid } = transferControls;
|
const { activeTransferCommentCid, setActiveTransferCommentCid } = transferControls;
|
||||||
const transferCommentCid = comment.cid;
|
const transferCommentCid = comment.cid;
|
||||||
const canTransfer = canTransferComment(comment);
|
const canTransfer = canMoveCommentToTrash(comment);
|
||||||
const isTransferOpen = Boolean(transferCommentCid && activeTransferCommentCid === transferCommentCid);
|
const isTransferOpen = Boolean(transferCommentCid && activeTransferCommentCid === transferCommentCid);
|
||||||
const isTransferPublishing = transferState === 'publishing';
|
const isTransferPublishing = transferState === 'publishing';
|
||||||
const isTransferSucceeded = transferState === 'succeeded';
|
const isTransferSucceeded = transferState === 'succeeded';
|
||||||
const isTransferTerminal = isTransferSucceeded || transferState === 'finalizationFailed';
|
const isTransferTerminal = isTransferSucceeded || transferState === 'finalizationFailed';
|
||||||
const canOpenTransfer = canTransfer && !isTransferTerminal && !activeTransferCommentCid && Boolean(transferCommentCid);
|
const canOpenTransfer = canTransfer && !isTransferTerminal && !activeTransferCommentCid && Boolean(transferCommentCid);
|
||||||
|
const canShowTransfer = canTransfer && !isTransferTerminal && Boolean(transferCommentCid) && (!activeTransferCommentCid || isTransferOpen);
|
||||||
const handleTransfer = useCallback(() => {
|
const handleTransfer = useCallback(() => {
|
||||||
if (canOpenTransfer && transferCommentCid) {
|
if (canOpenTransfer && transferCommentCid) {
|
||||||
setActiveTransferCommentCid(transferCommentCid);
|
setActiveTransferCommentCid(transferCommentCid);
|
||||||
@@ -327,7 +328,7 @@ const useModQueueTransfer = (comment: Comment, transferControls: ModQueueTransfe
|
|||||||
}, [handleCloseTransfer]);
|
}, [handleCloseTransfer]);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
handleTransfer: canOpenTransfer ? handleTransfer : undefined,
|
handleTransfer: canShowTransfer ? handleTransfer : undefined,
|
||||||
isTransferPublishing,
|
isTransferPublishing,
|
||||||
isTransferSucceeded,
|
isTransferSucceeded,
|
||||||
transferModal:
|
transferModal:
|
||||||
@@ -421,7 +422,7 @@ const ModQueueActions = ({ status, error, errorMessage, isPublishing, handleAppr
|
|||||||
<span className={styles.buttonWrapper}>
|
<span className={styles.buttonWrapper}>
|
||||||
[
|
[
|
||||||
<button type='button' className={styles.button} onClick={handleTransfer} disabled={isPublishing}>
|
<button type='button' className={styles.button} onClick={handleTransfer} disabled={isPublishing}>
|
||||||
{t('transfer')}
|
{t('trash')}
|
||||||
</button>
|
</button>
|
||||||
]
|
]
|
||||||
</span>
|
</span>
|
||||||
@@ -437,7 +438,7 @@ const ModQueueActions = ({ status, error, errorMessage, isPublishing, handleAppr
|
|||||||
</button>
|
</button>
|
||||||
{handleTransfer && (
|
{handleTransfer && (
|
||||||
<button type='button' className='button' onClick={handleTransfer} disabled={isPublishing}>
|
<button type='button' className='button' onClick={handleTransfer} disabled={isPublishing}>
|
||||||
{t('transfer')}
|
{t('trash')}
|
||||||
</button>
|
</button>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user