feat(mod-queue): add number column, improve time display, and use edited comments

- Add 'No.' column displaying post number
- Change 'waiting' to 'submitted' column with formatted date + ago format
- Show blinking relative time in parentheses for items awaiting approval
- Use useEditedComment hook to display pending edits
- Make time column width auto to fit content
- Remove unused translation keys (waiting, mod_queue_alert_threshold_tip, view)
- Add 'submitted' translation key in all languages
This commit is contained in:
plebeius
2026-01-11 12:28:21 +01:00
parent a23f5bc238
commit a33b2e5a9a
37 changed files with 105 additions and 148 deletions
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "قائمة الانتظار فارغة", "queue_is_empty": "قائمة الانتظار فارغة",
"approve": "الموافقة", "approve": "الموافقة",
"reject": "الرفض", "reject": "الرفض",
"waiting": "في الانتظار",
"filter_by_board": "تصفية حسب اللوحة", "filter_by_board": "تصفية حسب اللوحة",
"mod_queue_alert_threshold": "عتبة تنبيه قائمة انتظار الإشراف", "mod_queue_alert_threshold": "عتبة تنبيه قائمة انتظار الإشراف",
"mod_queue_alert_threshold_tip": "إظهار مؤشر أحمر وامض عندما تكون العناصر في الانتظار لأكثر من هذا الوقت",
"no_content": "لا يوجد محتوى", "no_content": "لا يوجد محتوى",
"view": "عرض",
"excerpt": "مقتطف", "excerpt": "مقتطف",
"publishing": "نشر", "publishing": "نشر",
"approved": "موافق عليه", "approved": "موافق عليه",
"rejected": "مرفوض" "rejected": "مرفوض",
"submitted": "تم الإرسال"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "সারি খালি", "queue_is_empty": "সারি খালি",
"approve": "অনুমোদন করুন", "approve": "অনুমোদন করুন",
"reject": "প্রত্যাখ্যান করুন", "reject": "প্রত্যাখ্যান করুন",
"waiting": "অপেক্ষা করছে",
"filter_by_board": "বোর্ড অনুযায়ী ফিল্টার করুন", "filter_by_board": "বোর্ড অনুযায়ী ফিল্টার করুন",
"mod_queue_alert_threshold": "মডারেশন সারি সতর্কতা থ্রেশহোল্ড", "mod_queue_alert_threshold": "মডারেশন সারি সতর্কতা থ্রেশহোল্ড",
"mod_queue_alert_threshold_tip": "আইটেমগুলি এই সময়ের চেয়ে বেশি অপেক্ষা করলে একটি ঝলমলে লাল সূচক দেখান",
"no_content": "কোনো বিষয়বস্তু নেই", "no_content": "কোনো বিষয়বস্তু নেই",
"view": "দেখুন",
"excerpt": "উদ্ধৃতি", "excerpt": "উদ্ধৃতি",
"publishing": "প্রকাশনা", "publishing": "প্রকাশনা",
"approved": "অনুমোদিত", "approved": "অনুমোদিত",
"rejected": "প্রত্যাখ্যান" "rejected": "প্রত্যাখ্যান",
"submitted": "জমা দেওয়া হয়েছে"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Fronta je prázdná", "queue_is_empty": "Fronta je prázdná",
"approve": "Schválit", "approve": "Schválit",
"reject": "Odmítnout", "reject": "Odmítnout",
"waiting": "Čeká",
"filter_by_board": "Filtrovat podle desky", "filter_by_board": "Filtrovat podle desky",
"mod_queue_alert_threshold": "Práh upozornění fronty moderování", "mod_queue_alert_threshold": "Práh upozornění fronty moderování",
"mod_queue_alert_threshold_tip": "Zobrazit blikající červený indikátor, když položky čekají déle než tento čas",
"no_content": "Žádný obsah", "no_content": "Žádný obsah",
"view": "Zobrazit",
"excerpt": "Výňatek", "excerpt": "Výňatek",
"publishing": "Publikování", "publishing": "Publikování",
"approved": "Schváleno", "approved": "Schváleno",
"rejected": "Zamítnuto" "rejected": "Zamítnuto",
"submitted": "Odesláno"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Køen er tom", "queue_is_empty": "Køen er tom",
"approve": "Godkend", "approve": "Godkend",
"reject": "Afvis", "reject": "Afvis",
"waiting": "Venter",
"filter_by_board": "Filtrer efter tavle", "filter_by_board": "Filtrer efter tavle",
"mod_queue_alert_threshold": "Tærskel for moderationskø-alarm", "mod_queue_alert_threshold": "Tærskel for moderationskø-alarm",
"mod_queue_alert_threshold_tip": "Vis en blinkende rød indikator, når elementer venter længere end denne tid",
"no_content": "Intet indhold", "no_content": "Intet indhold",
"view": "Vis",
"excerpt": "Uddrag", "excerpt": "Uddrag",
"publishing": "Udgivelse", "publishing": "Udgivelse",
"approved": "Godkendt", "approved": "Godkendt",
"rejected": "Afvist" "rejected": "Afvist",
"submitted": "Indsendt"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Warteschlange ist leer", "queue_is_empty": "Warteschlange ist leer",
"approve": "Genehmigen", "approve": "Genehmigen",
"reject": "Ablehnen", "reject": "Ablehnen",
"waiting": "Wartend",
"filter_by_board": "Nach Forum filtern", "filter_by_board": "Nach Forum filtern",
"mod_queue_alert_threshold": "Schwellenwert für Moderations-Warteschlangen-Alarm", "mod_queue_alert_threshold": "Schwellenwert für Moderations-Warteschlangen-Alarm",
"mod_queue_alert_threshold_tip": "Einen blinkenden roten Indikator anzeigen, wenn Elemente länger als diese Zeit warten",
"no_content": "Kein Inhalt", "no_content": "Kein Inhalt",
"view": "Anzeigen",
"excerpt": "Auszug", "excerpt": "Auszug",
"publishing": "Veröffentlichung", "publishing": "Veröffentlichung",
"approved": "Genehmigt", "approved": "Genehmigt",
"rejected": "Abgelehnt" "rejected": "Abgelehnt",
"submitted": "Eingereicht"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Η ουρά είναι άδεια", "queue_is_empty": "Η ουρά είναι άδεια",
"approve": "Έγκριση", "approve": "Έγκριση",
"reject": "Απόρριψη", "reject": "Απόρριψη",
"waiting": "Αναμονή",
"filter_by_board": "Φίλτρο ανά σανίδα", "filter_by_board": "Φίλτρο ανά σανίδα",
"mod_queue_alert_threshold": "Όριο ειδοποίησης ουράς συντονισμού", "mod_queue_alert_threshold": "Όριο ειδοποίησης ουράς συντονισμού",
"mod_queue_alert_threshold_tip": "Εμφάνιση αναβοσβήνοντος κόκκινου δείκτη όταν τα στοιχεία περιμένουν περισσότερο από αυτόν τον χρόνο",
"no_content": "Χωρίς περιεχόμενο", "no_content": "Χωρίς περιεχόμενο",
"view": "Προβολή",
"excerpt": "Απόσπασμα", "excerpt": "Απόσπασμα",
"publishing": "Δημοσίευση", "publishing": "Δημοσίευση",
"approved": "Εγκεκριμένο", "approved": "Εγκεκριμένο",
"rejected": "Απορρίφθηκε" "rejected": "Απορρίφθηκε",
"submitted": "Υποβλήθηκε"
} }
+2 -4
View File
@@ -259,14 +259,12 @@
"queue_is_empty": "Queue is empty", "queue_is_empty": "Queue is empty",
"approve": "Approve", "approve": "Approve",
"reject": "Reject", "reject": "Reject",
"waiting": "Waiting",
"filter_by_board": "Filter by board", "filter_by_board": "Filter by board",
"mod_queue_alert_threshold": "Mod queue alert threshold", "mod_queue_alert_threshold": "Mod queue alert threshold",
"mod_queue_alert_threshold_tip": "Show a blinking red indicator when items are waiting for longer than this time",
"no_content": "No content", "no_content": "No content",
"view": "View",
"excerpt": "Excerpt", "excerpt": "Excerpt",
"publishing": "Publishing", "publishing": "Publishing",
"approved": "Approved", "approved": "Approved",
"rejected": "Rejected" "rejected": "Rejected",
"submitted": "Submitted"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "La cola está vacía", "queue_is_empty": "La cola está vacía",
"approve": "Aprobar", "approve": "Aprobar",
"reject": "Rechazar", "reject": "Rechazar",
"waiting": "Esperando",
"filter_by_board": "Filtrar por foro", "filter_by_board": "Filtrar por foro",
"mod_queue_alert_threshold": "Umbral de alerta de cola de moderación", "mod_queue_alert_threshold": "Umbral de alerta de cola de moderación",
"mod_queue_alert_threshold_tip": "Mostrar un indicador rojo parpadeante cuando los elementos están esperando más de este tiempo",
"no_content": "Sin contenido", "no_content": "Sin contenido",
"view": "Ver",
"excerpt": "Extracto", "excerpt": "Extracto",
"publishing": "Publicando", "publishing": "Publicando",
"approved": "Aprobado", "approved": "Aprobado",
"rejected": "Rechazado" "rejected": "Rechazado",
"submitted": "Enviado"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "صف خالی است", "queue_is_empty": "صف خالی است",
"approve": "تایید", "approve": "تایید",
"reject": "رد", "reject": "رد",
"waiting": "در انتظار",
"filter_by_board": "فیلتر بر اساس تابلو", "filter_by_board": "فیلتر بر اساس تابلو",
"mod_queue_alert_threshold": "آستانه هشدار صف انتظار نظارت", "mod_queue_alert_threshold": "آستانه هشدار صف انتظار نظارت",
"mod_queue_alert_threshold_tip": "نمایش نشانگر قرمز چشمک‌زن زمانی که موارد بیش از این زمان در انتظار هستند",
"no_content": "بدون محتوا", "no_content": "بدون محتوا",
"view": "مشاهده",
"excerpt": "گزیده", "excerpt": "گزیده",
"publishing": "در حال انتشار", "publishing": "در حال انتشار",
"approved": "تایید شده", "approved": "تایید شده",
"rejected": "رد شده" "rejected": "رد شده",
"submitted": "ارسال شده"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Jono on tyhjä", "queue_is_empty": "Jono on tyhjä",
"approve": "Hyväksy", "approve": "Hyväksy",
"reject": "Hylkää", "reject": "Hylkää",
"waiting": "Odottaa",
"filter_by_board": "Suodata taulun mukaan", "filter_by_board": "Suodata taulun mukaan",
"mod_queue_alert_threshold": "Moderaatiojonon hälytyskynnys", "mod_queue_alert_threshold": "Moderaatiojonon hälytyskynnys",
"mod_queue_alert_threshold_tip": "Näytä vilkkuva punainen indikaattori, kun kohteet odottavat pidempään kuin tämä aika",
"no_content": "Ei sisältöä", "no_content": "Ei sisältöä",
"view": "Näytä",
"excerpt": "Ote", "excerpt": "Ote",
"publishing": "Julkaiseminen", "publishing": "Julkaiseminen",
"approved": "Hyväksytty", "approved": "Hyväksytty",
"rejected": "Hylätty" "rejected": "Hylätty",
"submitted": "Lähetetty"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Walang laman ang queue", "queue_is_empty": "Walang laman ang queue",
"approve": "Aprubahan", "approve": "Aprubahan",
"reject": "Tanggihan", "reject": "Tanggihan",
"waiting": "Naghihintay",
"filter_by_board": "I-filter ayon sa board", "filter_by_board": "I-filter ayon sa board",
"mod_queue_alert_threshold": "Moderasyon queue alert threshold", "mod_queue_alert_threshold": "Moderasyon queue alert threshold",
"mod_queue_alert_threshold_tip": "Magpakita ng kumikislap na pulang indicator kapag ang mga item ay naghihintay nang mas mahaba kaysa sa oras na ito",
"no_content": "Walang nilalaman", "no_content": "Walang nilalaman",
"view": "Tingnan",
"excerpt": "Sipi", "excerpt": "Sipi",
"publishing": "Pag-publish", "publishing": "Pag-publish",
"approved": "Naaprubado", "approved": "Naaprubado",
"rejected": "Tinanggihan" "rejected": "Tinanggihan",
"submitted": "Isinumite"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "La file est vide", "queue_is_empty": "La file est vide",
"approve": "Approuver", "approve": "Approuver",
"reject": "Rejeter", "reject": "Rejeter",
"waiting": "En attente",
"filter_by_board": "Filtrer par forum", "filter_by_board": "Filtrer par forum",
"mod_queue_alert_threshold": "Seuil d'alerte de la file de modération", "mod_queue_alert_threshold": "Seuil d'alerte de la file de modération",
"mod_queue_alert_threshold_tip": "Afficher un indicateur rouge clignotant lorsque les éléments attendent plus longtemps que ce temps",
"no_content": "Aucun contenu", "no_content": "Aucun contenu",
"view": "Voir",
"excerpt": "Extrait", "excerpt": "Extrait",
"publishing": "Publication", "publishing": "Publication",
"approved": "Approuvé", "approved": "Approuvé",
"rejected": "Rejeté" "rejected": "Rejeté",
"submitted": "Soumis"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "התור ריק", "queue_is_empty": "התור ריק",
"approve": "אשר", "approve": "אשר",
"reject": "דחה", "reject": "דחה",
"waiting": "ממתין",
"filter_by_board": "סנן לפי לוח", "filter_by_board": "סנן לפי לוח",
"mod_queue_alert_threshold": "סף התרעה של תור ניהול", "mod_queue_alert_threshold": "סף התרעה של תור ניהול",
"mod_queue_alert_threshold_tip": "הצג אינדיקטור אדום מהבהב כאשר פריטים ממתינים יותר מזמן זה",
"no_content": "אין תוכן", "no_content": "אין תוכן",
"view": "הצג",
"excerpt": "תקציר", "excerpt": "תקציר",
"publishing": "מפרסם", "publishing": "מפרסם",
"approved": "אושר", "approved": "אושר",
"rejected": "נדחה" "rejected": "נדחה",
"submitted": "נשלח"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "कतार खाली है", "queue_is_empty": "कतार खाली है",
"approve": "अनुमोदन करें", "approve": "अनुमोदन करें",
"reject": "अस्वीकार करें", "reject": "अस्वीकार करें",
"waiting": "प्रतीक्षा कर रहा है",
"filter_by_board": "बोर्ड के अनुसार फ़िल्टर करें", "filter_by_board": "बोर्ड के अनुसार फ़िल्टर करें",
"mod_queue_alert_threshold": "मॉडरेटर कतार सतर्कता सीमा", "mod_queue_alert_threshold": "मॉडरेटर कतार सतर्कता सीमा",
"mod_queue_alert_threshold_tip": "जब आइटम इस समय से अधिक समय तक प्रतीक्षा कर रहे हों तो एक चमकता हुआ लाल संकेतक दिखाएं",
"no_content": "कोई सामग्री नहीं", "no_content": "कोई सामग्री नहीं",
"view": "देखें",
"excerpt": "अंश", "excerpt": "अंश",
"publishing": "प्रकाशन", "publishing": "प्रकाशन",
"approved": "अनुमोदित", "approved": "अनुमोदित",
"rejected": "अस्वीकृत" "rejected": "अस्वीकृत",
"submitted": "सबमिट किया गया"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "A sor üres", "queue_is_empty": "A sor üres",
"approve": "Jóváhagyás", "approve": "Jóváhagyás",
"reject": "Elutasítás", "reject": "Elutasítás",
"waiting": "Várakozás",
"filter_by_board": "Szűrés tábla szerint", "filter_by_board": "Szűrés tábla szerint",
"mod_queue_alert_threshold": "Moderációs sor riasztási küszöb", "mod_queue_alert_threshold": "Moderációs sor riasztási küszöb",
"mod_queue_alert_threshold_tip": "Villogó piros jelző megjelenítése, amikor az elemek ennél hosszabb ideig várakoznak",
"no_content": "Nincs tartalom", "no_content": "Nincs tartalom",
"view": "Megtekintés",
"excerpt": "Kivonat", "excerpt": "Kivonat",
"publishing": "Közzététel", "publishing": "Közzététel",
"approved": "Jóváhagyva", "approved": "Jóváhagyva",
"rejected": "Elutasítva" "rejected": "Elutasítva",
"submitted": "Beküldve"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Antrian kosong", "queue_is_empty": "Antrian kosong",
"approve": "Setujui", "approve": "Setujui",
"reject": "Tolak", "reject": "Tolak",
"waiting": "Menunggu",
"filter_by_board": "Filter berdasarkan papan", "filter_by_board": "Filter berdasarkan papan",
"mod_queue_alert_threshold": "Ambang peringatan antrian moderasi", "mod_queue_alert_threshold": "Ambang peringatan antrian moderasi",
"mod_queue_alert_threshold_tip": "Tampilkan indikator merah berkedip ketika item menunggu lebih lama dari waktu ini",
"no_content": "Tidak ada konten", "no_content": "Tidak ada konten",
"view": "Lihat",
"excerpt": "Kutipan", "excerpt": "Kutipan",
"publishing": "Menerbitkan", "publishing": "Menerbitkan",
"approved": "Disetujui", "approved": "Disetujui",
"rejected": "Ditolak" "rejected": "Ditolak",
"submitted": "Dikirim"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "La coda è vuota", "queue_is_empty": "La coda è vuota",
"approve": "Approva", "approve": "Approva",
"reject": "Rifiuta", "reject": "Rifiuta",
"waiting": "In attesa",
"filter_by_board": "Filtra per board", "filter_by_board": "Filtra per board",
"mod_queue_alert_threshold": "Soglia di allerta coda moderazione", "mod_queue_alert_threshold": "Soglia di allerta coda moderazione",
"mod_queue_alert_threshold_tip": "Mostra un indicatore rosso lampeggiante quando gli elementi attendono più di questo tempo",
"no_content": "Nessun contenuto", "no_content": "Nessun contenuto",
"view": "Visualizza",
"excerpt": "Estratto", "excerpt": "Estratto",
"publishing": "Pubblicazione", "publishing": "Pubblicazione",
"approved": "Approvato", "approved": "Approvato",
"rejected": "Rifiutato" "rejected": "Rifiutato",
"submitted": "Inviato"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "キューは空です", "queue_is_empty": "キューは空です",
"approve": "承認", "approve": "承認",
"reject": "拒否", "reject": "拒否",
"waiting": "待機中",
"filter_by_board": "ボードでフィルター", "filter_by_board": "ボードでフィルター",
"mod_queue_alert_threshold": "モデレーションキューのアラート閾値", "mod_queue_alert_threshold": "モデレーションキューのアラート閾値",
"mod_queue_alert_threshold_tip": "アイテムがこの時間より長く待機している場合、点滅する赤いインジケーターを表示",
"no_content": "コンテンツなし", "no_content": "コンテンツなし",
"view": "表示",
"excerpt": "抜粋", "excerpt": "抜粋",
"publishing": "公開中", "publishing": "公開中",
"approved": "承認済み", "approved": "承認済み",
"rejected": "却下" "rejected": "却下",
"submitted": "送信済み"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "대기열이 비어 있습니다", "queue_is_empty": "대기열이 비어 있습니다",
"approve": "승인", "approve": "승인",
"reject": "거부", "reject": "거부",
"waiting": "대기 중",
"filter_by_board": "게시판별 필터", "filter_by_board": "게시판별 필터",
"mod_queue_alert_threshold": "관리자 대기열 알림 임계값", "mod_queue_alert_threshold": "관리자 대기열 알림 임계값",
"mod_queue_alert_threshold_tip": "항목이 이 시간보다 오래 대기 중일 때 깜빡이는 빨간색 표시기 표시",
"no_content": "콘텐츠 없음", "no_content": "콘텐츠 없음",
"view": "보기",
"excerpt": "요약", "excerpt": "요약",
"publishing": "게시 중", "publishing": "게시 중",
"approved": "승인됨", "approved": "승인됨",
"rejected": "거부됨" "rejected": "거부됨",
"submitted": "제출됨"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "रांग रिकामी आहे", "queue_is_empty": "रांग रिकामी आहे",
"approve": "मंजूर करा", "approve": "मंजूर करा",
"reject": "नकार द्या", "reject": "नकार द्या",
"waiting": "प्रतीक्षा करत आहे",
"filter_by_board": "बोर्डनुसार फिल्टर करा", "filter_by_board": "बोर्डनुसार फिल्टर करा",
"mod_queue_alert_threshold": "मॉडरेशन रांग सतर्कता मर्यादा", "mod_queue_alert_threshold": "मॉडरेशन रांग सतर्कता मर्यादा",
"mod_queue_alert_threshold_tip": "जेव्हा आयटम या वेळेपेक्षा जास्त वेळ प्रतीक्षा करत असतात तेव्हा एक चमकणारा लाल सूचक दाखवा",
"no_content": "सामग्री नाही", "no_content": "सामग्री नाही",
"view": "पहा",
"excerpt": "उतारा", "excerpt": "उतारा",
"publishing": "प्रकाशन करत आहे", "publishing": "प्रकाशन करत आहे",
"approved": "मंजूर", "approved": "मंजूर",
"rejected": "नाकारले" "rejected": "नाकारले",
"submitted": "सबमिट केले"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Wachtrij is leeg", "queue_is_empty": "Wachtrij is leeg",
"approve": "Goedkeuren", "approve": "Goedkeuren",
"reject": "Afwijzen", "reject": "Afwijzen",
"waiting": "Wachten",
"filter_by_board": "Filteren op bord", "filter_by_board": "Filteren op bord",
"mod_queue_alert_threshold": "Drempelwaarde voor moderatiewachtrijwaarschuwing", "mod_queue_alert_threshold": "Drempelwaarde voor moderatiewachtrijwaarschuwing",
"mod_queue_alert_threshold_tip": "Toon een knipperende rode indicator wanneer items langer dan deze tijd wachten",
"no_content": "Geen inhoud", "no_content": "Geen inhoud",
"view": "Bekijken",
"excerpt": "Uittreksel", "excerpt": "Uittreksel",
"publishing": "Publiceren", "publishing": "Publiceren",
"approved": "Goedgekeurd", "approved": "Goedgekeurd",
"rejected": "Afgewezen" "rejected": "Afgewezen",
"submitted": "Ingediend"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Køen er tom", "queue_is_empty": "Køen er tom",
"approve": "Godkjenn", "approve": "Godkjenn",
"reject": "Avvis", "reject": "Avvis",
"waiting": "Venter",
"filter_by_board": "Filtrer etter tavle", "filter_by_board": "Filtrer etter tavle",
"mod_queue_alert_threshold": "Terskel for modereringskø-varsel", "mod_queue_alert_threshold": "Terskel for modereringskø-varsel",
"mod_queue_alert_threshold_tip": "Vis en blinkende rød indikator når elementer venter lenger enn denne tiden",
"no_content": "Ingen innhold", "no_content": "Ingen innhold",
"view": "Vis",
"excerpt": "Utdrag", "excerpt": "Utdrag",
"publishing": "Publisering", "publishing": "Publisering",
"approved": "Godkjent", "approved": "Godkjent",
"rejected": "Avslått" "rejected": "Avslått",
"submitted": "Sendt inn"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Kolejka jest pusta", "queue_is_empty": "Kolejka jest pusta",
"approve": "Zatwierdź", "approve": "Zatwierdź",
"reject": "Odrzuć", "reject": "Odrzuć",
"waiting": "Oczekiwanie",
"filter_by_board": "Filtruj według tablicy", "filter_by_board": "Filtruj według tablicy",
"mod_queue_alert_threshold": "Próg alertu kolejki moderacji", "mod_queue_alert_threshold": "Próg alertu kolejki moderacji",
"mod_queue_alert_threshold_tip": "Pokaż migający czerwony wskaźnik, gdy elementy czekają dłużej niż ten czas",
"no_content": "Brak zawartości", "no_content": "Brak zawartości",
"view": "Zobacz",
"excerpt": "Fragment", "excerpt": "Fragment",
"publishing": "Publikowanie", "publishing": "Publikowanie",
"approved": "Zatwierdzone", "approved": "Zatwierdzone",
"rejected": "Odrzucone" "rejected": "Odrzucone",
"submitted": "Przesłane"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "A fila está vazia", "queue_is_empty": "A fila está vazia",
"approve": "Aprovar", "approve": "Aprovar",
"reject": "Rejeitar", "reject": "Rejeitar",
"waiting": "Aguardando",
"filter_by_board": "Filtrar por quadro", "filter_by_board": "Filtrar por quadro",
"mod_queue_alert_threshold": "Limite de alerta da fila de moderação", "mod_queue_alert_threshold": "Limite de alerta da fila de moderação",
"mod_queue_alert_threshold_tip": "Mostrar um indicador vermelho piscante quando os itens estão aguardando por mais tempo que este tempo",
"no_content": "Sem conteúdo", "no_content": "Sem conteúdo",
"view": "Ver",
"excerpt": "Trecho", "excerpt": "Trecho",
"publishing": "Publicando", "publishing": "Publicando",
"approved": "Aprovado", "approved": "Aprovado",
"rejected": "Rejeitado" "rejected": "Rejeitado",
"submitted": "Enviado"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Coada este goală", "queue_is_empty": "Coada este goală",
"approve": "Aprobă", "approve": "Aprobă",
"reject": "Respinge", "reject": "Respinge",
"waiting": "Așteaptă",
"filter_by_board": "Filtrează după panou", "filter_by_board": "Filtrează după panou",
"mod_queue_alert_threshold": "Prag de alertă pentru coada de moderare", "mod_queue_alert_threshold": "Prag de alertă pentru coada de moderare",
"mod_queue_alert_threshold_tip": "Afișează un indicator roșu intermitent când elementele așteaptă mai mult decât acest timp",
"no_content": "Fără conținut", "no_content": "Fără conținut",
"view": "Vizualizează",
"excerpt": "Fragment", "excerpt": "Fragment",
"publishing": "Publicare", "publishing": "Publicare",
"approved": "Aprobat", "approved": "Aprobat",
"rejected": "Respins" "rejected": "Respins",
"submitted": "Trimis"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Очередь пуста", "queue_is_empty": "Очередь пуста",
"approve": "Одобрить", "approve": "Одобрить",
"reject": "Отклонить", "reject": "Отклонить",
"waiting": "Ожидание",
"filter_by_board": "Фильтр по доске", "filter_by_board": "Фильтр по доске",
"mod_queue_alert_threshold": "Порог предупреждения очереди модерации", "mod_queue_alert_threshold": "Порог предупреждения очереди модерации",
"mod_queue_alert_threshold_tip": "Показывать мигающий красный индикатор, когда элементы ждут дольше этого времени",
"no_content": "Нет содержимого", "no_content": "Нет содержимого",
"view": "Просмотр",
"excerpt": "Выдержка", "excerpt": "Выдержка",
"publishing": "Публикация", "publishing": "Публикация",
"approved": "Одобрено", "approved": "Одобрено",
"rejected": "Отклонено" "rejected": "Отклонено",
"submitted": "Отправлено"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Radha është e zbrazët", "queue_is_empty": "Radha është e zbrazët",
"approve": "Aprovo", "approve": "Aprovo",
"reject": "Refuzo", "reject": "Refuzo",
"waiting": "Duke pritur",
"filter_by_board": "Filtro sipas tabelës", "filter_by_board": "Filtro sipas tabelës",
"mod_queue_alert_threshold": "Pragu i alarmit të radhës së moderimit", "mod_queue_alert_threshold": "Pragu i alarmit të radhës së moderimit",
"mod_queue_alert_threshold_tip": "Shfaq një tregues të kuq që blinkon kur elementët po presin më shumë se kjo kohë",
"no_content": "Pa përmbajtje", "no_content": "Pa përmbajtje",
"view": "Shiko",
"excerpt": "Fragment", "excerpt": "Fragment",
"publishing": "Publikimi", "publishing": "Publikimi",
"approved": "Aprovuar", "approved": "Aprovuar",
"rejected": "Refuzuar" "rejected": "Refuzuar",
"submitted": "Dërguar"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Kön är tom", "queue_is_empty": "Kön är tom",
"approve": "Godkänn", "approve": "Godkänn",
"reject": "Avvisa", "reject": "Avvisa",
"waiting": "Väntar",
"filter_by_board": "Filtrera efter tavla", "filter_by_board": "Filtrera efter tavla",
"mod_queue_alert_threshold": "Tröskelvärde för modereringskö-varning", "mod_queue_alert_threshold": "Tröskelvärde för modereringskö-varning",
"mod_queue_alert_threshold_tip": "Visa en blinkande röd indikator när objekt väntar längre än denna tid",
"no_content": "Inget innehåll", "no_content": "Inget innehåll",
"view": "Visa",
"excerpt": "Utdrag", "excerpt": "Utdrag",
"publishing": "Publicerar", "publishing": "Publicerar",
"approved": "Godkänd", "approved": "Godkänd",
"rejected": "Avvisad" "rejected": "Avvisad",
"submitted": "Inskickat"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "క్యూ ఖాళీగా ఉంది", "queue_is_empty": "క్యూ ఖాళీగా ఉంది",
"approve": "ఆమోదించు", "approve": "ఆమోదించు",
"reject": "తిరస్కరించు", "reject": "తిరస్కరించు",
"waiting": "వేచి ఉంది",
"filter_by_board": "బోర్డ్ ద్వారా ఫిల్టర్ చేయి", "filter_by_board": "బోర్డ్ ద్వారా ఫిల్టర్ చేయి",
"mod_queue_alert_threshold": "మోడరేషన్ క్యూ హెచ్చరిక థ్రెషోల్డ్", "mod_queue_alert_threshold": "మోడరేషన్ క్యూ హెచ్చరిక థ్రెషోల్డ్",
"mod_queue_alert_threshold_tip": "అంశాలు ఈ సమయం కంటే ఎక్కువ సమయం వేచి ఉన్నప్పుడు మెరిసే ఎరుపు సూచికను చూపించు",
"no_content": "కంటెంట్ లేదు", "no_content": "కంటెంట్ లేదు",
"view": "చూడు",
"excerpt": "ఎక్సెర్ప్ట్", "excerpt": "ఎక్సెర్ప్ట్",
"publishing": "ప్రచురించడం", "publishing": "ప్రచురించడం",
"approved": "అనుమోదించబడింది", "approved": "అనుమోదించబడింది",
"rejected": "తిరస్కరించబడింది" "rejected": "తిరస్కరించబడింది",
"submitted": "సమర్పించబడింది"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "คิวว่างเปล่า", "queue_is_empty": "คิวว่างเปล่า",
"approve": "อนุมัติ", "approve": "อนุมัติ",
"reject": "ปฏิเสธ", "reject": "ปฏิเสธ",
"waiting": "กำลังรอ",
"filter_by_board": "กรองตามบอร์ด", "filter_by_board": "กรองตามบอร์ด",
"mod_queue_alert_threshold": "เกณฑ์การแจ้งเตือนคิวผู้ดูแล", "mod_queue_alert_threshold": "เกณฑ์การแจ้งเตือนคิวผู้ดูแล",
"mod_queue_alert_threshold_tip": "แสดงตัวบ่งชี้สีแดงกะพริบเมื่อรายการรอเกินเวลานี้",
"no_content": "ไม่มีเนื้อหา", "no_content": "ไม่มีเนื้อหา",
"view": "ดู",
"excerpt": "ข้อความย่อ", "excerpt": "ข้อความย่อ",
"publishing": "กำลังเผยแพร่", "publishing": "กำลังเผยแพร่",
"approved": "อนุมัติแล้ว", "approved": "อนุมัติแล้ว",
"rejected": "ปฏิเสธ" "rejected": "ปฏิเสธ",
"submitted": "ส่งแล้ว"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Kuyruk boş", "queue_is_empty": "Kuyruk boş",
"approve": "Onayla", "approve": "Onayla",
"reject": "Reddet", "reject": "Reddet",
"waiting": "Bekliyor",
"filter_by_board": "Panoya göre filtrele", "filter_by_board": "Panoya göre filtrele",
"mod_queue_alert_threshold": "Moderasyon kuyruğu uyarı eşiği", "mod_queue_alert_threshold": "Moderasyon kuyruğu uyarı eşiği",
"mod_queue_alert_threshold_tip": "Öğeler bu süreden daha uzun süre beklediğinde yanıp sönen kırmızı bir gösterge göster",
"no_content": "İçerik yok", "no_content": "İçerik yok",
"view": "Görüntüle",
"excerpt": "Alıntı", "excerpt": "Alıntı",
"publishing": "Yayınlama", "publishing": "Yayınlama",
"approved": "Onaylandı", "approved": "Onaylandı",
"rejected": "Reddedildi" "rejected": "Reddedildi",
"submitted": "Gönderildi"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Черга порожня", "queue_is_empty": "Черга порожня",
"approve": "Схвалити", "approve": "Схвалити",
"reject": "Відхилити", "reject": "Відхилити",
"waiting": "Очікування",
"filter_by_board": "Фільтр за дошкою", "filter_by_board": "Фільтр за дошкою",
"mod_queue_alert_threshold": "Поріг попередження черги модерації", "mod_queue_alert_threshold": "Поріг попередження черги модерації",
"mod_queue_alert_threshold_tip": "Показувати мигаючий червоний індикатор, коли елементи чекають довше цього часу",
"no_content": "Немає вмісту", "no_content": "Немає вмісту",
"view": "Перегляд",
"excerpt": "Витяг", "excerpt": "Витяг",
"publishing": "Публікація", "publishing": "Публікація",
"approved": "Схвалено", "approved": "Схвалено",
"rejected": "Відхилено" "rejected": "Відхилено",
"submitted": "Відправлено"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "قطار خالی ہے", "queue_is_empty": "قطار خالی ہے",
"approve": "منظور کریں", "approve": "منظور کریں",
"reject": "مسترد کریں", "reject": "مسترد کریں",
"waiting": "انتظار کر رہا ہے",
"filter_by_board": "بورڈ کے لحاظ سے فلٹر کریں", "filter_by_board": "بورڈ کے لحاظ سے فلٹر کریں",
"mod_queue_alert_threshold": "نگرانی کی قطار کی انتباہ کی حد", "mod_queue_alert_threshold": "نگرانی کی قطار کی انتباہ کی حد",
"mod_queue_alert_threshold_tip": "جب آئٹمز اس وقت سے زیادہ انتظار کر رہے ہوں تو ایک ٹمٹمانے والا سرخ اشارہ دکھائیں",
"no_content": "کوئی مواد نہیں", "no_content": "کوئی مواد نہیں",
"view": "دیکھیں",
"excerpt": "اقتباس", "excerpt": "اقتباس",
"publishing": "اشاعت", "publishing": "اشاعت",
"approved": "منظور شدہ", "approved": "منظور شدہ",
"rejected": "مسترد" "rejected": "مسترد",
"submitted": "جمع کرایا گیا"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Hàng đợi trống", "queue_is_empty": "Hàng đợi trống",
"approve": "Phê duyệt", "approve": "Phê duyệt",
"reject": "Từ chối", "reject": "Từ chối",
"waiting": "Đang chờ",
"filter_by_board": "Lọc theo bảng", "filter_by_board": "Lọc theo bảng",
"mod_queue_alert_threshold": "Ngưỡng cảnh báo hàng đợi kiểm duyệt", "mod_queue_alert_threshold": "Ngưỡng cảnh báo hàng đợi kiểm duyệt",
"mod_queue_alert_threshold_tip": "Hiển thị chỉ báo màu đỏ nhấp nháy khi các mục đang chờ lâu hơn thời gian này",
"no_content": "Không có nội dung", "no_content": "Không có nội dung",
"view": "Xem",
"excerpt": "Trích đoạn", "excerpt": "Trích đoạn",
"publishing": "Đang xuất bản", "publishing": "Đang xuất bản",
"approved": "Đã phê duyệt", "approved": "Đã phê duyệt",
"rejected": "Đã từ chối" "rejected": "Đã từ chối",
"submitted": "Đã gửi"
} }
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "队列为空", "queue_is_empty": "队列为空",
"approve": "批准", "approve": "批准",
"reject": "拒绝", "reject": "拒绝",
"waiting": "等待中",
"filter_by_board": "按板块筛选", "filter_by_board": "按板块筛选",
"mod_queue_alert_threshold": "审核队列警报阈值", "mod_queue_alert_threshold": "审核队列警报阈值",
"mod_queue_alert_threshold_tip": "当项目等待时间超过此时长时显示闪烁的红色指示器",
"no_content": "无内容", "no_content": "无内容",
"view": "查看",
"excerpt": "摘要", "excerpt": "摘要",
"publishing": "发布中", "publishing": "发布中",
"approved": "已批准", "approved": "已批准",
"rejected": "已拒绝" "rejected": "已拒绝",
"submitted": "已提交"
} }
+16 -2
View File
@@ -50,6 +50,12 @@
background: var(--mod-queue-header-background-color); background: var(--mod-queue-header-background-color);
font-weight: bold; font-weight: bold;
font-size: 13px; font-size: 13px;
text-transform: capitalize;
}
.numberHeader {
width: 60px;
flex-shrink: 0;
} }
.boardHeader { .boardHeader {
@@ -62,9 +68,10 @@
} }
.timeHeader { .timeHeader {
width: 80px; width: auto;
text-align: right; text-align: right;
flex-shrink: 0; flex-shrink: 0;
white-space: nowrap;
} }
.actionsHeader { .actionsHeader {
@@ -98,6 +105,12 @@
background-color: var(--mod-queue-row-hover-background-color); background-color: var(--mod-queue-row-hover-background-color);
} }
.number {
width: 60px;
flex-shrink: 0;
font-weight: bold;
}
.board { .board {
width: 50px; width: 50px;
flex-shrink: 0; flex-shrink: 0;
@@ -123,10 +136,11 @@
} }
.time { .time {
width: 80px; width: auto;
flex-shrink: 0; flex-shrink: 0;
text-align: right; text-align: right;
color: var(--mod-queue-time-color); color: var(--mod-queue-time-color);
white-space: nowrap;
} }
.time .alert { .time .alert {
+18 -5
View File
@@ -1,7 +1,7 @@
import React, { useMemo, useState, useEffect } from 'react'; import React, { useMemo, useState, useEffect } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useParams, Link } from 'react-router-dom'; import { useParams, Link } from 'react-router-dom';
import { useAccountSubplebbits, useFeed, Comment, usePublishCommentModeration } from '@plebbit/plebbit-react-hooks'; import { useAccountSubplebbits, useFeed, Comment, usePublishCommentModeration, useEditedComment } from '@plebbit/plebbit-react-hooks';
import { Virtuoso } from 'react-virtuoso'; import { Virtuoso } from 'react-virtuoso';
import { formatDistanceToNow } from 'date-fns'; import { formatDistanceToNow } from 'date-fns';
import styles from './mod-queue.module.css'; import styles from './mod-queue.module.css';
@@ -13,6 +13,7 @@ import { getSubplebbitAddress, getBoardPath } from '../../lib/utils/route-utils'
import { useDefaultSubplebbits, MultisubSubplebbit } from '../../hooks/use-default-subplebbits'; import { useDefaultSubplebbits, MultisubSubplebbit } from '../../hooks/use-default-subplebbits';
import { useBoardPath } from '../../hooks/use-resolved-subplebbit-address'; import { useBoardPath } from '../../hooks/use-resolved-subplebbit-address';
import { getHasThumbnail, getCommentMediaInfo } from '../../lib/utils/media-utils'; import { getHasThumbnail, getCommentMediaInfo } from '../../lib/utils/media-utils';
import { getFormattedDate, getFormattedTimeAgo } from '../../lib/utils/time-utils';
import useFeedResetStore from '../../stores/use-feed-reset-store'; import useFeedResetStore from '../../stores/use-feed-reset-store';
import useChallengesStore from '../../stores/use-challenges-store'; import useChallengesStore from '../../stores/use-challenges-store';
import { alertChallengeVerificationFailed } from '../../lib/utils/challenge-utils'; import { alertChallengeVerificationFailed } from '../../lib/utils/challenge-utils';
@@ -50,7 +51,11 @@ const ModQueueRow = ({ comment, showBoardColumn = false }: ModQueueRowProps) =>
const { alertThresholdHours } = useModQueueStore(); const { alertThresholdHours } = useModQueueStore();
const [initiatedAction, setInitiatedAction] = useState<ModerationAction>(null); const [initiatedAction, setInitiatedAction] = useState<ModerationAction>(null);
const { content, title, timestamp, subplebbitAddress, cid, threadCid, link, thumbnailUrl, linkWidth, linkHeight, removed, approved } = comment; // handle pending mod or author edit
const { editedComment } = useEditedComment({ comment });
const displayComment = editedComment || comment;
const { content, title, timestamp, subplebbitAddress, cid, threadCid, link, thumbnailUrl, linkWidth, linkHeight, removed, approved, number } = displayComment;
// Check if already moderated (from previous session or API update) // Check if already moderated (from previous session or API update)
// Note: `approved` and `removed` are direct fields on the comment from CommentUpdate, // Note: `approved` and `removed` are direct fields on the comment from CommentUpdate,
@@ -180,6 +185,7 @@ const ModQueueRow = ({ comment, showBoardColumn = false }: ModQueueRowProps) =>
return ( return (
<div className={styles.row}> <div className={styles.row}>
<div className={styles.number}>{number ?? '—'}</div>
{showBoardColumn && <div className={styles.board}>{boardPath ? <Link to={`/${boardPath}`}>/{boardPath}/</Link> : <span></span>}</div>} {showBoardColumn && <div className={styles.board}>{boardPath ? <Link to={`/${boardPath}`}>/{boardPath}/</Link> : <span></span>}</div>}
<div className={styles.excerpt}> <div className={styles.excerpt}>
{postUrl ? ( {postUrl ? (
@@ -190,8 +196,14 @@ const ModQueueRow = ({ comment, showBoardColumn = false }: ModQueueRowProps) =>
<span title={excerpt}>{excerpt}</span> <span title={excerpt}>{excerpt}</span>
)} )}
</div> </div>
<div className={`${styles.time} ${isOverThreshold && isAwaitingApproval && !approveSucceeded && !rejectSucceeded ? styles.alert : ''}`}> <div className={styles.time}>
{formatDistanceToNow(timestamp * 1000, { addSuffix: false })} {isAwaitingApproval ? (
<>
{getFormattedDate(timestamp)} (<span className={`${isOverThreshold ? styles.alert : ''}`}>{getFormattedTimeAgo(timestamp)}</span>)
</>
) : (
getFormattedDate(timestamp)
)}
</div> </div>
<div className={styles.actions}>{renderActions()}</div> <div className={styles.actions}>{renderActions()}</div>
</div> </div>
@@ -443,9 +455,10 @@ export const ModQueueView = ({ boardIdentifier: propBoardIdentifier }: ModQueueV
) : ( ) : (
<> <>
<div className={styles.tableHeader}> <div className={styles.tableHeader}>
<div className={styles.numberHeader}>No.</div>
{showBoardColumn && <div className={styles.boardHeader}>{t('board')}</div>} {showBoardColumn && <div className={styles.boardHeader}>{t('board')}</div>}
<div className={styles.excerptHeader}>{t('excerpt')}</div> <div className={styles.excerptHeader}>{t('excerpt')}</div>
<div className={styles.timeHeader}>{t('waiting')}</div> <div className={styles.timeHeader}>{t('submitted')}</div>
<div className={styles.actionsHeader}>{t('actions')}</div> <div className={styles.actionsHeader}>{t('actions')}</div>
</div> </div>