mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-07 22:45:46 +01:00
closes #2751
This commit is contained in:
@@ -40,13 +40,13 @@
|
|||||||
"nconf": "~0.7.1",
|
"nconf": "~0.7.1",
|
||||||
"nodebb-plugin-dbsearch": "^0.1.0",
|
"nodebb-plugin-dbsearch": "^0.1.0",
|
||||||
"nodebb-plugin-emoji-extended": "^0.4.1-4",
|
"nodebb-plugin-emoji-extended": "^0.4.1-4",
|
||||||
"nodebb-plugin-markdown": "^0.8.0",
|
"nodebb-plugin-markdown": "^1.0.0",
|
||||||
"nodebb-plugin-mentions": "^0.9.0",
|
"nodebb-plugin-mentions": "^0.9.0",
|
||||||
"nodebb-plugin-soundpack-default": "~0.1.1",
|
"nodebb-plugin-soundpack-default": "~0.1.1",
|
||||||
"nodebb-plugin-spam-be-gone": "^0.4.0",
|
"nodebb-plugin-spam-be-gone": "^0.4.0",
|
||||||
"nodebb-theme-lavender": "^1.0.4",
|
"nodebb-theme-lavender": "^1.0.6",
|
||||||
"nodebb-theme-vanilla": "^1.0.5",
|
"nodebb-theme-vanilla": "^1.0.14",
|
||||||
"nodebb-widget-essentials": "~0.2.11",
|
"nodebb-widget-essentials": "~0.2.12",
|
||||||
"nodebb-rewards-essentials": "^0.0.1",
|
"nodebb-rewards-essentials": "^0.0.1",
|
||||||
"npm": "^2.1.4",
|
"npm": "^2.1.4",
|
||||||
"passport": "^0.2.1",
|
"passport": "^0.2.1",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "موضوع جديد",
|
"new_topic_button": "موضوع جديد",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>لا توجد مواضيع في هذه الفئة</strong>لم لا تحاول إنشاء موضوع؟<br />",
|
"no_topics": "<strong>لا توجد مواضيع في هذه الفئة</strong>لم لا تحاول إنشاء موضوع؟<br />",
|
||||||
"browsing": "تصفح",
|
"browsing": "تصفح",
|
||||||
"no_replies": "لم يرد أحد",
|
"no_replies": "لم يرد أحد",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "تلق تنبيهات بالردود الجديدة في هذا الموضوع",
|
"notify_me": "تلق تنبيهات بالردود الجديدة في هذا الموضوع",
|
||||||
"quote": "اقتبس",
|
"quote": "اقتبس",
|
||||||
"reply": "رد",
|
"reply": "رد",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "تعديل",
|
"edit": "تعديل",
|
||||||
"delete": "حذف",
|
"delete": "حذف",
|
||||||
"purge": "تطهير",
|
"purge": "تطهير",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "নতুন টপিক",
|
"new_topic_button": "নতুন টপিক",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>এই বিভাগে কোন টপিক নেই! </strong><br /> আপনি চাইলে একটি পোষ্ট করতে পারেন।",
|
"no_topics": "<strong>এই বিভাগে কোন টপিক নেই! </strong><br /> আপনি চাইলে একটি পোষ্ট করতে পারেন।",
|
||||||
"browsing": "ব্রাউজিং",
|
"browsing": "ব্রাউজিং",
|
||||||
"no_replies": "কোন রিপ্লাই নেই",
|
"no_replies": "কোন রিপ্লাই নেই",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "এই টপিকে নতুন উত্তর আসলে জানুন",
|
"notify_me": "এই টপিকে নতুন উত্তর আসলে জানুন",
|
||||||
"quote": "উদ্ধৃতি",
|
"quote": "উদ্ধৃতি",
|
||||||
"reply": "উত্তর",
|
"reply": "উত্তর",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "সম্পাদণা",
|
"edit": "সম্পাদণা",
|
||||||
"delete": "মুছে ফেলুন",
|
"delete": "মুছে ফেলুন",
|
||||||
"purge": "পার্জ",
|
"purge": "পার্জ",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Nové téma",
|
"new_topic_button": "Nové téma",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>V této kategorii zatím nejsou žádné příspěvky.</strong><br />Můžeš být první!",
|
"no_topics": "<strong>V této kategorii zatím nejsou žádné příspěvky.</strong><br />Můžeš být první!",
|
||||||
"browsing": "prohlíží",
|
"browsing": "prohlíží",
|
||||||
"no_replies": "Nikdo ještě neodpověděl",
|
"no_replies": "Nikdo ještě neodpověděl",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Sledovat toto téma",
|
"notify_me": "Sledovat toto téma",
|
||||||
"quote": "Citovat",
|
"quote": "Citovat",
|
||||||
"reply": "Odpovědět",
|
"reply": "Odpovědět",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Upravit",
|
"edit": "Upravit",
|
||||||
"delete": "Smazat",
|
"delete": "Smazat",
|
||||||
"purge": "Purge",
|
"purge": "Purge",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Neues Thema",
|
"new_topic_button": "Neues Thema",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>Es gibt noch keine Themen in dieser Kategorie.</strong><br />Warum beginnst du nicht eins?",
|
"no_topics": "<strong>Es gibt noch keine Themen in dieser Kategorie.</strong><br />Warum beginnst du nicht eins?",
|
||||||
"browsing": "Aktiv",
|
"browsing": "Aktiv",
|
||||||
"no_replies": "Niemand hat geantwortet",
|
"no_replies": "Niemand hat geantwortet",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Erhalte eine Benachrichtigung bei neuen Antworten zu diesem Thema.",
|
"notify_me": "Erhalte eine Benachrichtigung bei neuen Antworten zu diesem Thema.",
|
||||||
"quote": "zitieren",
|
"quote": "zitieren",
|
||||||
"reply": "antworten",
|
"reply": "antworten",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "bearbeiten",
|
"edit": "bearbeiten",
|
||||||
"delete": "löschen",
|
"delete": "löschen",
|
||||||
"purge": "bereinigen",
|
"purge": "bereinigen",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Νέο Θέμα",
|
"new_topic_button": "Νέο Θέμα",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>Δεν υπάρχουν θέματα σε αυτή την κατηγορία.</strong><br />Γιατί δεν δοκιμάζεις να δημοσιεύσεις ένα εσύ;",
|
"no_topics": "<strong>Δεν υπάρχουν θέματα σε αυτή την κατηγορία.</strong><br />Γιατί δεν δοκιμάζεις να δημοσιεύσεις ένα εσύ;",
|
||||||
"browsing": "περιηγούνται",
|
"browsing": "περιηγούνται",
|
||||||
"no_replies": "Κανείς δεν έχει απαντήσει",
|
"no_replies": "Κανείς δεν έχει απαντήσει",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Να ειδοποιούμαι για νέες απαντήσεις σε αυτό το θέμα",
|
"notify_me": "Να ειδοποιούμαι για νέες απαντήσεις σε αυτό το θέμα",
|
||||||
"quote": "Παράθεση",
|
"quote": "Παράθεση",
|
||||||
"reply": "Απάντηση",
|
"reply": "Απάντηση",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Επεξεργασία",
|
"edit": "Επεξεργασία",
|
||||||
"delete": "Διαγραφή",
|
"delete": "Διαγραφή",
|
||||||
"purge": "Εκκαθάριση",
|
"purge": "Εκκαθάριση",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "New Topic",
|
"new_topic_button": "New Topic",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>Thar be no topics in 'tis category.</strong><br />Why don't ye give a go' postin' one?",
|
"no_topics": "<strong>Thar be no topics in 'tis category.</strong><br />Why don't ye give a go' postin' one?",
|
||||||
"browsing": "browsin'",
|
"browsing": "browsin'",
|
||||||
"no_replies": "No one has replied to ye message",
|
"no_replies": "No one has replied to ye message",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Be notified of new replies in this topic",
|
"notify_me": "Be notified of new replies in this topic",
|
||||||
"quote": "Quote",
|
"quote": "Quote",
|
||||||
"reply": "Reply",
|
"reply": "Reply",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"purge": "Purge",
|
"purge": "Purge",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "New Topic",
|
"new_topic_button": "New Topic",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>There are no topics in this category.</strong><br />Why don't you try posting one?",
|
"no_topics": "<strong>There are no topics in this category.</strong><br />Why don't you try posting one?",
|
||||||
|
|
||||||
"browsing": "browsing",
|
"browsing": "browsing",
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
"notify_me": "Be notified of new replies in this topic",
|
"notify_me": "Be notified of new replies in this topic",
|
||||||
"quote": "Quote",
|
"quote": "Quote",
|
||||||
"reply": "Reply",
|
"reply": "Reply",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"purge": "Purge",
|
"purge": "Purge",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "New Topic",
|
"new_topic_button": "New Topic",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>There are no topics in this category.</strong><br />Why don't you try posting one?",
|
"no_topics": "<strong>There are no topics in this category.</strong><br />Why don't you try posting one?",
|
||||||
"browsing": "browsing",
|
"browsing": "browsing",
|
||||||
"no_replies": "No one has replied",
|
"no_replies": "No one has replied",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Be notified of new replies in this topic",
|
"notify_me": "Be notified of new replies in this topic",
|
||||||
"quote": "Quote",
|
"quote": "Quote",
|
||||||
"reply": "Reply",
|
"reply": "Reply",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"purge": "Purge",
|
"purge": "Purge",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Nuevo tema",
|
"new_topic_button": "Nuevo tema",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>No hay temas en esta categoría.</strong><br />¿Por que no te animas y publicas uno?",
|
"no_topics": "<strong>No hay temas en esta categoría.</strong><br />¿Por que no te animas y publicas uno?",
|
||||||
"browsing": "viendo ahora",
|
"browsing": "viendo ahora",
|
||||||
"no_replies": "Nadie ha respondido aún",
|
"no_replies": "Nadie ha respondido aún",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Serás notificado cuando haya nuevas respuestas en este tema",
|
"notify_me": "Serás notificado cuando haya nuevas respuestas en este tema",
|
||||||
"quote": "Citar",
|
"quote": "Citar",
|
||||||
"reply": "Responder",
|
"reply": "Responder",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Editar",
|
"edit": "Editar",
|
||||||
"delete": "Borrar",
|
"delete": "Borrar",
|
||||||
"purge": "Purgar",
|
"purge": "Purgar",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Uus teema",
|
"new_topic_button": "Uus teema",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>Kahjuks ei leidu siin kategoorias ühtegi teemat.</strong><br />Soovid postitada?",
|
"no_topics": "<strong>Kahjuks ei leidu siin kategoorias ühtegi teemat.</strong><br />Soovid postitada?",
|
||||||
"browsing": "vaatab",
|
"browsing": "vaatab",
|
||||||
"no_replies": "Keegi pole vastanud",
|
"no_replies": "Keegi pole vastanud",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Saa teateid uutest postitustest selles teemas",
|
"notify_me": "Saa teateid uutest postitustest selles teemas",
|
||||||
"quote": "Tsiteeri",
|
"quote": "Tsiteeri",
|
||||||
"reply": "Vasta",
|
"reply": "Vasta",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Muuda",
|
"edit": "Muuda",
|
||||||
"delete": "Kustuta",
|
"delete": "Kustuta",
|
||||||
"purge": "Kustuta",
|
"purge": "Kustuta",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "جستار تازه",
|
"new_topic_button": "جستار تازه",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>هیچ جستاری در این دسته نیست.</strong><br />چرا شما یکی نفرستید؟",
|
"no_topics": "<strong>هیچ جستاری در این دسته نیست.</strong><br />چرا شما یکی نفرستید؟",
|
||||||
"browsing": "بینندهها",
|
"browsing": "بینندهها",
|
||||||
"no_replies": "هیچ کسی پاسخ نداده است.",
|
"no_replies": "هیچ کسی پاسخ نداده است.",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "از پاسخهای تازه در جستار آگاه شوید",
|
"notify_me": "از پاسخهای تازه در جستار آگاه شوید",
|
||||||
"quote": "نقل قول",
|
"quote": "نقل قول",
|
||||||
"reply": "پاسخ",
|
"reply": "پاسخ",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "ویرایش",
|
"edit": "ویرایش",
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"purge": "پاک کردن",
|
"purge": "پاک کردن",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Uusi aihe",
|
"new_topic_button": "Uusi aihe",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>Tällä aihealueella ei ole yhtään aihetta.</strong><br />Miksi et aloittaisi uutta?",
|
"no_topics": "<strong>Tällä aihealueella ei ole yhtään aihetta.</strong><br />Miksi et aloittaisi uutta?",
|
||||||
"browsing": "selaamassa",
|
"browsing": "selaamassa",
|
||||||
"no_replies": "Kukaan ei ole vastannut",
|
"no_replies": "Kukaan ei ole vastannut",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Ilmoita, kun tähän keskusteluun tulee uusia viestejä",
|
"notify_me": "Ilmoita, kun tähän keskusteluun tulee uusia viestejä",
|
||||||
"quote": "Lainaa",
|
"quote": "Lainaa",
|
||||||
"reply": "Vastaa",
|
"reply": "Vastaa",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Muokkaa",
|
"edit": "Muokkaa",
|
||||||
"delete": "Poista",
|
"delete": "Poista",
|
||||||
"purge": "Purge",
|
"purge": "Purge",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Nouveau Sujet",
|
"new_topic_button": "Nouveau sujet",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>Il n'y a aucun sujet dans cette catégorie.</strong><br />Pourquoi ne pas en créer un ?",
|
"no_topics": "<strong>Il n'y a aucun sujet dans cette catégorie.</strong><br />Pourquoi ne pas en créer un ?",
|
||||||
"browsing": "parcouru par",
|
"browsing": "parcouru par",
|
||||||
"no_replies": "Personne n'a répondu",
|
"no_replies": "Personne n'a répondu",
|
||||||
|
|||||||
@@ -12,7 +12,8 @@
|
|||||||
"notify_me": "Être notifié des réponses dans ce sujet",
|
"notify_me": "Être notifié des réponses dans ce sujet",
|
||||||
"quote": "Citer",
|
"quote": "Citer",
|
||||||
"reply": "Répondre",
|
"reply": "Répondre",
|
||||||
"edit": "Editer",
|
"guest-login-reply": "Log in to reply",
|
||||||
|
"edit": "Éditer",
|
||||||
"delete": "Supprimer",
|
"delete": "Supprimer",
|
||||||
"purge": "Supprimer définitivement",
|
"purge": "Supprimer définitivement",
|
||||||
"restore": "Restaurer",
|
"restore": "Restaurer",
|
||||||
@@ -39,7 +40,7 @@
|
|||||||
"share_this_post": "Partager ce message",
|
"share_this_post": "Partager ce message",
|
||||||
"thread_tools.title": "Outils pour sujets",
|
"thread_tools.title": "Outils pour sujets",
|
||||||
"thread_tools.markAsUnreadForAll": "Marquer comme non lu",
|
"thread_tools.markAsUnreadForAll": "Marquer comme non lu",
|
||||||
"thread_tools.pin": "Epingler le sujet",
|
"thread_tools.pin": "Épingler le sujet",
|
||||||
"thread_tools.unpin": "Désépingler le sujet",
|
"thread_tools.unpin": "Désépingler le sujet",
|
||||||
"thread_tools.lock": "Verrouiller le sujet",
|
"thread_tools.lock": "Verrouiller le sujet",
|
||||||
"thread_tools.unlock": "Déverouiller le sujet",
|
"thread_tools.unlock": "Déverouiller le sujet",
|
||||||
@@ -60,9 +61,9 @@
|
|||||||
"disabled_categories_note": "Les catégories désactivées sont grisées",
|
"disabled_categories_note": "Les catégories désactivées sont grisées",
|
||||||
"confirm_move": "Déplacer",
|
"confirm_move": "Déplacer",
|
||||||
"confirm_fork": "Scinder",
|
"confirm_fork": "Scinder",
|
||||||
"favourite": "Favoris",
|
"favourite": "Favori",
|
||||||
"favourites": "Favoris",
|
"favourites": "Favoris",
|
||||||
"favourites.has_no_favourites": "Vous n'avez aucun favoris, mettez des messages en favoris pour les voir ici !",
|
"favourites.has_no_favourites": "Vous n'avez aucun favori, mettez des messages en favoris pour les voir ici !",
|
||||||
"loading_more_posts": "Charger plus de messages",
|
"loading_more_posts": "Charger plus de messages",
|
||||||
"move_topic": "Déplacer le sujet",
|
"move_topic": "Déplacer le sujet",
|
||||||
"move_topics": "Déplacer des sujets",
|
"move_topics": "Déplacer des sujets",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "נושא חדש",
|
"new_topic_button": "נושא חדש",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>קטגוריה זו ריקה מנושאים.</strong><br />למה שלא תנסה להוסיף נושא חדש?",
|
"no_topics": "<strong>קטגוריה זו ריקה מנושאים.</strong><br />למה שלא תנסה להוסיף נושא חדש?",
|
||||||
"browsing": "צופים בנושא זה כעת",
|
"browsing": "צופים בנושא זה כעת",
|
||||||
"no_replies": "אין תגובות",
|
"no_replies": "אין תגובות",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "קבל התראה כאשר יש תגובות חדשות בנושא זה",
|
"notify_me": "קבל התראה כאשר יש תגובות חדשות בנושא זה",
|
||||||
"quote": "ציטוט",
|
"quote": "ציטוט",
|
||||||
"reply": "תגובה",
|
"reply": "תגובה",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "עריכה",
|
"edit": "עריכה",
|
||||||
"delete": "מחק",
|
"delete": "מחק",
|
||||||
"purge": "מחק הכל",
|
"purge": "מחק הכל",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Új témakör",
|
"new_topic_button": "Új témakör",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>Nincs nyitva egy téma sem ebben a kategóriában.</strong>Hozzunk létre egyet.",
|
"no_topics": "<strong>Nincs nyitva egy téma sem ebben a kategóriában.</strong>Hozzunk létre egyet.",
|
||||||
"browsing": "böngészés",
|
"browsing": "böngészés",
|
||||||
"no_replies": "Nem érkezett válasz",
|
"no_replies": "Nem érkezett válasz",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Értesítést kérek az új hozzászólásokról ebben a topikban",
|
"notify_me": "Értesítést kérek az új hozzászólásokról ebben a topikban",
|
||||||
"quote": "Idéz",
|
"quote": "Idéz",
|
||||||
"reply": "Válasz",
|
"reply": "Válasz",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Szerkeszt",
|
"edit": "Szerkeszt",
|
||||||
"delete": "Töröl",
|
"delete": "Töröl",
|
||||||
"purge": "Purge",
|
"purge": "Purge",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Topik Baru",
|
"new_topic_button": "Topik Baru",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>Tidak ada topik dikategori ini</strong><br/> Mengapa anda tidak mencoba membuat yang baru?",
|
"no_topics": "<strong>Tidak ada topik dikategori ini</strong><br/> Mengapa anda tidak mencoba membuat yang baru?",
|
||||||
"browsing": "penjelajahan",
|
"browsing": "penjelajahan",
|
||||||
"no_replies": "Belum ada orang yang menjawab",
|
"no_replies": "Belum ada orang yang menjawab",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Beritahukan balasan baru untuk topik ini",
|
"notify_me": "Beritahukan balasan baru untuk topik ini",
|
||||||
"quote": "Kutip",
|
"quote": "Kutip",
|
||||||
"reply": "Balas",
|
"reply": "Balas",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Ubah",
|
"edit": "Ubah",
|
||||||
"delete": "Hapus",
|
"delete": "Hapus",
|
||||||
"purge": "Musnahkan",
|
"purge": "Musnahkan",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Nuova Discussione",
|
"new_topic_button": "Nuova Discussione",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>Non ci sono discussioni in questa categoria.</strong><br />Perché non ne inizi una?",
|
"no_topics": "<strong>Non ci sono discussioni in questa categoria.</strong><br />Perché non ne inizi una?",
|
||||||
"browsing": "visualizzando",
|
"browsing": "visualizzando",
|
||||||
"no_replies": "Nessuno ha risposto",
|
"no_replies": "Nessuno ha risposto",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Ricevi notifiche di nuove risposte in questa discussione",
|
"notify_me": "Ricevi notifiche di nuove risposte in questa discussione",
|
||||||
"quote": "Cita",
|
"quote": "Cita",
|
||||||
"reply": "Rispondi",
|
"reply": "Rispondi",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Modifica",
|
"edit": "Modifica",
|
||||||
"delete": "Cancella",
|
"delete": "Cancella",
|
||||||
"purge": "Svuota",
|
"purge": "Svuota",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "新規スレッド",
|
"new_topic_button": "新規スレッド",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>まだスレッドはありません.</strong><br />一番目のスレッドを書いてみないか?",
|
"no_topics": "<strong>まだスレッドはありません.</strong><br />一番目のスレッドを書いてみないか?",
|
||||||
"browsing": "閲覧中",
|
"browsing": "閲覧中",
|
||||||
"no_replies": "返事はまだありません",
|
"no_replies": "返事はまだありません",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "このスレッドに新しいポストが投稿された際に通知する",
|
"notify_me": "このスレッドに新しいポストが投稿された際に通知する",
|
||||||
"quote": "引用",
|
"quote": "引用",
|
||||||
"reply": "返答",
|
"reply": "返答",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "編集",
|
"edit": "編集",
|
||||||
"delete": "削除",
|
"delete": "削除",
|
||||||
"purge": "Purge",
|
"purge": "Purge",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "새 주제 생성",
|
"new_topic_button": "새 주제 생성",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>이 카테고리에는 생성된 주제가 없습니다.</strong><br />먼저 주제를 생성해 보세요.",
|
"no_topics": "<strong>이 카테고리에는 생성된 주제가 없습니다.</strong><br />먼저 주제를 생성해 보세요.",
|
||||||
"browsing": "이 주제를 읽고 있는 사용자",
|
"browsing": "이 주제를 읽고 있는 사용자",
|
||||||
"no_replies": "답글이 없습니다.",
|
"no_replies": "답글이 없습니다.",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "이 주제의 새 답글 알리기",
|
"notify_me": "이 주제의 새 답글 알리기",
|
||||||
"quote": "인용",
|
"quote": "인용",
|
||||||
"reply": "답글",
|
"reply": "답글",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "수정",
|
"edit": "수정",
|
||||||
"delete": "삭제",
|
"delete": "삭제",
|
||||||
"purge": "폐기",
|
"purge": "폐기",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Nauja tema",
|
"new_topic_button": "Nauja tema",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>Šioje kategorijoje temų nėra.</strong><br/>Kodėl gi jums nesukūrus naujos?",
|
"no_topics": "<strong>Šioje kategorijoje temų nėra.</strong><br/>Kodėl gi jums nesukūrus naujos?",
|
||||||
"browsing": "naršo",
|
"browsing": "naršo",
|
||||||
"no_replies": "Niekas dar neatsakė",
|
"no_replies": "Niekas dar neatsakė",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Gauti pranešimus apie naujus atsakymus šioje temoje",
|
"notify_me": "Gauti pranešimus apie naujus atsakymus šioje temoje",
|
||||||
"quote": "Cituoti",
|
"quote": "Cituoti",
|
||||||
"reply": "Atsakyti",
|
"reply": "Atsakyti",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Redaguoti",
|
"edit": "Redaguoti",
|
||||||
"delete": "Ištrinti",
|
"delete": "Ištrinti",
|
||||||
"purge": "Išvalyti",
|
"purge": "Išvalyti",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "\nTopik Baru",
|
"new_topic_button": "\nTopik Baru",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>Tiada topik dalam kategori ini.</strong><br />Cuba menghantar topik yang baru?",
|
"no_topics": "<strong>Tiada topik dalam kategori ini.</strong><br />Cuba menghantar topik yang baru?",
|
||||||
"browsing": "melihat",
|
"browsing": "melihat",
|
||||||
"no_replies": "Tiada jawapan",
|
"no_replies": "Tiada jawapan",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Kekal dimaklumkan berkenaan respon dalam topik ini",
|
"notify_me": "Kekal dimaklumkan berkenaan respon dalam topik ini",
|
||||||
"quote": "Petikan",
|
"quote": "Petikan",
|
||||||
"reply": "Balas",
|
"reply": "Balas",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
"delete": "Padamkan",
|
"delete": "Padamkan",
|
||||||
"purge": "Purge",
|
"purge": "Purge",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Nytt emne",
|
"new_topic_button": "Nytt emne",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>Det er ingen emner i denne kategorien</strong><br />Hvorfor ikke lage ett?",
|
"no_topics": "<strong>Det er ingen emner i denne kategorien</strong><br />Hvorfor ikke lage ett?",
|
||||||
"browsing": "leser",
|
"browsing": "leser",
|
||||||
"no_replies": "Ingen har svart",
|
"no_replies": "Ingen har svart",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Bli varslet om nye svar i dette emnet",
|
"notify_me": "Bli varslet om nye svar i dette emnet",
|
||||||
"quote": "Siter",
|
"quote": "Siter",
|
||||||
"reply": "Svar",
|
"reply": "Svar",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Endre",
|
"edit": "Endre",
|
||||||
"delete": "Slett",
|
"delete": "Slett",
|
||||||
"purge": "Tøm",
|
"purge": "Tøm",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Nieuw onderwerp",
|
"new_topic_button": "Nieuw onderwerp",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>Er zijn geen onderwerpen in deze categorie.</strong><br />Waarom maak je er niet een aan?",
|
"no_topics": "<strong>Er zijn geen onderwerpen in deze categorie.</strong><br />Waarom maak je er niet een aan?",
|
||||||
"browsing": "verkennen",
|
"browsing": "verkennen",
|
||||||
"no_replies": "Niemand heeft gereageerd",
|
"no_replies": "Niemand heeft gereageerd",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Krijg notificaties van nieuwe reacties op dit onderwerp",
|
"notify_me": "Krijg notificaties van nieuwe reacties op dit onderwerp",
|
||||||
"quote": "Citeren",
|
"quote": "Citeren",
|
||||||
"reply": "Reageren",
|
"reply": "Reageren",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Aanpassen",
|
"edit": "Aanpassen",
|
||||||
"delete": "Verwijderen",
|
"delete": "Verwijderen",
|
||||||
"purge": "weggooien",
|
"purge": "weggooien",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Nowy wątek",
|
"new_topic_button": "Nowy wątek",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>W tej kategorii nie ma jeszcze żadnych wątków.</strong><br />Dlaczego ty nie utworzysz jakiegoś?",
|
"no_topics": "<strong>W tej kategorii nie ma jeszcze żadnych wątków.</strong><br />Dlaczego ty nie utworzysz jakiegoś?",
|
||||||
"browsing": "przegląda",
|
"browsing": "przegląda",
|
||||||
"no_replies": "Nikt jeszcze nie odpowiedział",
|
"no_replies": "Nikt jeszcze nie odpowiedział",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Powiadamiaj mnie o nowych odpowiedziach w tym wątku",
|
"notify_me": "Powiadamiaj mnie o nowych odpowiedziach w tym wątku",
|
||||||
"quote": "Cytuj",
|
"quote": "Cytuj",
|
||||||
"reply": "Odpowiedz",
|
"reply": "Odpowiedz",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Edytuj",
|
"edit": "Edytuj",
|
||||||
"delete": "Usuń",
|
"delete": "Usuń",
|
||||||
"purge": "Wymaż",
|
"purge": "Wymaż",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Novo Tópico",
|
"new_topic_button": "Novo Tópico",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>Não tem nenhum tópico nesta categoria.</strong><br />Por que você não tenta postar o algum?",
|
"no_topics": "<strong>Não tem nenhum tópico nesta categoria.</strong><br />Por que você não tenta postar o algum?",
|
||||||
"browsing": "navegando",
|
"browsing": "navegando",
|
||||||
"no_replies": "Ninguém respondeu",
|
"no_replies": "Ninguém respondeu",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Seja notificado de novas respostas nesse tópico",
|
"notify_me": "Seja notificado de novas respostas nesse tópico",
|
||||||
"quote": "Citar",
|
"quote": "Citar",
|
||||||
"reply": "Responder",
|
"reply": "Responder",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Editar",
|
"edit": "Editar",
|
||||||
"delete": "Deletar",
|
"delete": "Deletar",
|
||||||
"purge": "Expurgar",
|
"purge": "Expurgar",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Subiect Nou",
|
"new_topic_button": "Subiect Nou",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>Nu există nici un subiect de discuție în această categorie.</strong><br />De ce nu încerci să postezi tu unul?",
|
"no_topics": "<strong>Nu există nici un subiect de discuție în această categorie.</strong><br />De ce nu încerci să postezi tu unul?",
|
||||||
"browsing": "navighează",
|
"browsing": "navighează",
|
||||||
"no_replies": "Nu a răspuns nimeni",
|
"no_replies": "Nu a răspuns nimeni",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Notică-mă de noi răspunsuri în acest subiect",
|
"notify_me": "Notică-mă de noi răspunsuri în acest subiect",
|
||||||
"quote": "Citează",
|
"quote": "Citează",
|
||||||
"reply": "Răspunde",
|
"reply": "Răspunde",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Editează",
|
"edit": "Editează",
|
||||||
"delete": "Șterge",
|
"delete": "Șterge",
|
||||||
"purge": "Curăță",
|
"purge": "Curăță",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Создать тему",
|
"new_topic_button": "Создать тему",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>В этой категории еще нет тем.</strong><br />Почему бы вам не создать первую?",
|
"no_topics": "<strong>В этой категории еще нет тем.</strong><br />Почему бы вам не создать первую?",
|
||||||
"browsing": "просматривают",
|
"browsing": "просматривают",
|
||||||
"no_replies": "Нет ответов",
|
"no_replies": "Нет ответов",
|
||||||
|
|||||||
@@ -7,11 +7,12 @@
|
|||||||
"post_is_deleted": "Этот пост удален!",
|
"post_is_deleted": "Этот пост удален!",
|
||||||
"profile": "Профиль",
|
"profile": "Профиль",
|
||||||
"posted_by": "Создано %1",
|
"posted_by": "Создано %1",
|
||||||
"posted_by_guest": "Опубликовано Гостем",
|
"posted_by_guest": "Опубликовано гостем",
|
||||||
"chat": "Чат",
|
"chat": "Чат",
|
||||||
"notify_me": "Сообщать мне об ответах в этой теме",
|
"notify_me": "Сообщать мне об ответах в этой теме",
|
||||||
"quote": "Цитировать",
|
"quote": "Цитировать",
|
||||||
"reply": "Ответить",
|
"reply": "Ответить",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Редактировать",
|
"edit": "Редактировать",
|
||||||
"delete": "Удалить",
|
"delete": "Удалить",
|
||||||
"purge": "Очистить",
|
"purge": "Очистить",
|
||||||
@@ -39,60 +40,60 @@
|
|||||||
"share_this_post": "Поделиться этим Постом",
|
"share_this_post": "Поделиться этим Постом",
|
||||||
"thread_tools.title": "Опции темы",
|
"thread_tools.title": "Опции темы",
|
||||||
"thread_tools.markAsUnreadForAll": "Отметить как непрочитанные",
|
"thread_tools.markAsUnreadForAll": "Отметить как непрочитанные",
|
||||||
"thread_tools.pin": "Прикрепить Тему",
|
"thread_tools.pin": "Прикрепить тему",
|
||||||
"thread_tools.unpin": "Открепить Тему",
|
"thread_tools.unpin": "Открепить тему",
|
||||||
"thread_tools.lock": "Закрыть Тему",
|
"thread_tools.lock": "Закрыть тему",
|
||||||
"thread_tools.unlock": "Открыть Тему",
|
"thread_tools.unlock": "Открыть тему",
|
||||||
"thread_tools.move": "Переместить Тему",
|
"thread_tools.move": "Переместить тему",
|
||||||
"thread_tools.move_all": "Переместить Все",
|
"thread_tools.move_all": "Переместить все",
|
||||||
"thread_tools.fork": "Ответвить Тему",
|
"thread_tools.fork": "Ответвить тему",
|
||||||
"thread_tools.delete": "Удалить Тему",
|
"thread_tools.delete": "Удалить тему",
|
||||||
"thread_tools.delete_confirm": "Вы уверены, что хотите удалить тему?",
|
"thread_tools.delete_confirm": "Вы уверены, что хотите удалить тему?",
|
||||||
"thread_tools.restore": "Восстановить Тему",
|
"thread_tools.restore": "Восстановить тему",
|
||||||
"thread_tools.restore_confirm": "Вы уверены, что хотите восстановить тему?",
|
"thread_tools.restore_confirm": "Вы уверены, что хотите восстановить тему?",
|
||||||
"thread_tools.purge": "Очистить Тему",
|
"thread_tools.purge": "Очистить тему",
|
||||||
"thread_tools.purge_confirm": "Вы уверены, что хотите очистить эту тему?",
|
"thread_tools.purge_confirm": "Вы уверены, что хотите очистить эту тему?",
|
||||||
"topic_move_success": "Эта тема успешно перемещена в %1",
|
"topic_move_success": "Эта тема успешно перемещена в %1",
|
||||||
"post_delete_confirm": "Вы уверены, что хотите удалить этот пост?",
|
"post_delete_confirm": "Вы уверены, что хотите удалить этот пост?",
|
||||||
"post_restore_confirm": "Вы уверены, что хотите восстановить этот пост?",
|
"post_restore_confirm": "Вы уверены, что хотите восстановить этот пост?",
|
||||||
"post_purge_confirm": "Вы уверены, что хотите очистить эту запись?",
|
"post_purge_confirm": "Вы уверены, что хотите очистить эту запись?",
|
||||||
"load_categories": "Загружаем Категории",
|
"load_categories": "Загружаем категории",
|
||||||
"disabled_categories_note": "Отключенные категории затемненны",
|
"disabled_categories_note": "Отключенные категории затемнены",
|
||||||
"confirm_move": "Перенести",
|
"confirm_move": "Перенести",
|
||||||
"confirm_fork": "Ответвление",
|
"confirm_fork": "Ответвление",
|
||||||
"favourite": "Избранное",
|
"favourite": "Избранное",
|
||||||
"favourites": "Избранные",
|
"favourites": "Избранные",
|
||||||
"favourites.has_no_favourites": "У вас нет избранного, добавьте несколько сообщений в избранное чтобы увидеть их здесь!",
|
"favourites.has_no_favourites": "У вас нет избранного, добавьте несколько сообщений в избранное, чтобы увидеть их здесь",
|
||||||
"loading_more_posts": "Загружаем еще сообщения",
|
"loading_more_posts": "Загружаем еще сообщения",
|
||||||
"move_topic": "Перенести тему",
|
"move_topic": "Перенести тему",
|
||||||
"move_topics": "Больше Тем",
|
"move_topics": "Перенести темы",
|
||||||
"move_post": "Перенести сообщение",
|
"move_post": "Перенести сообщение",
|
||||||
"post_moved": "Пост перемещен!",
|
"post_moved": "Пост перенесен",
|
||||||
"fork_topic": "Ответвить Тему",
|
"fork_topic": "Ответвить тему",
|
||||||
"topic_will_be_moved_to": "Эта тема будет перенесена в категорию",
|
"topic_will_be_moved_to": "Эта тема будет перенесена в категорию",
|
||||||
"fork_topic_instruction": "Отметьте сообщения для ответвления",
|
"fork_topic_instruction": "Отметьте сообщения для ответвления",
|
||||||
"fork_no_pids": "Сообщения не отмечены!",
|
"fork_no_pids": "Сообщения не отмечены!",
|
||||||
"fork_success": "Готово! Нажмите для перехода в отделённую тему.",
|
"fork_success": "Готово! Нажмите для перехода в отделённую тему.",
|
||||||
"composer.title_placeholder": "Введите название темы...",
|
"composer.title_placeholder": "Введите название темы...",
|
||||||
"composer.handle_placeholder": "Name",
|
"composer.handle_placeholder": "Название",
|
||||||
"composer.discard": "Отменить",
|
"composer.discard": "Отменить",
|
||||||
"composer.submit": "Подтвердить",
|
"composer.submit": "Подтвердить",
|
||||||
"composer.replying_to": "Ответ %1",
|
"composer.replying_to": "Ответ %1",
|
||||||
"composer.new_topic": "Создать Тему",
|
"composer.new_topic": "Создать тему",
|
||||||
"composer.uploading": "загрузка...",
|
"composer.uploading": "загрузка...",
|
||||||
"composer.thumb_url_label": "Вставьте URL картинки с иконкой темы.",
|
"composer.thumb_url_label": "Вставьте URL картинки с иконкой темы.",
|
||||||
"composer.thumb_title": "Добавить иконку к этой теме",
|
"composer.thumb_title": "Добавить иконку к этой теме",
|
||||||
"composer.thumb_url_placeholder": "http://example.com/thumb.png",
|
"composer.thumb_url_placeholder": "http://example.com/thumb.png",
|
||||||
"composer.thumb_file_label": "Или загрузите файл",
|
"composer.thumb_file_label": "Или загрузите файл",
|
||||||
"composer.thumb_remove": "Очистить поля",
|
"composer.thumb_remove": "Очистить поля",
|
||||||
"composer.drag_and_drop_images": "Перетащите Изображения Сюда",
|
"composer.drag_and_drop_images": "Перетащите изображения сюда",
|
||||||
"more_users_and_guests": "еще %1 пользователя(ей) и %2 гостя(ей)",
|
"more_users_and_guests": "еще %1 пользователя(ей) и %2 гостя(ей)",
|
||||||
"more_users": "еще %1 пользователя(ей)",
|
"more_users": "еще %1 пользователя(ей)",
|
||||||
"more_guests": "еще %1 гостя(ей)",
|
"more_guests": "еще %1 гостя(ей)",
|
||||||
"users_and_others": "%1 и %2 других",
|
"users_and_others": "%1 и %2 других",
|
||||||
"sort_by": "Сортировать",
|
"sort_by": "Сортировать",
|
||||||
"oldest_to_newest": "От Старых к Новым",
|
"oldest_to_newest": "От старых к новым",
|
||||||
"newest_to_oldest": "От Новых к Старым",
|
"newest_to_oldest": "От новых к старым",
|
||||||
"most_votes": "По голосам",
|
"most_votes": "По голосам",
|
||||||
"most_posts": "Most posts"
|
"most_posts": "По количеству ответов"
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Arresonada Noa",
|
"new_topic_button": "Arresonada Noa",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>Non bi sunt arresonadas in custa creze.</strong><br />Pro ite non nde pones una?",
|
"no_topics": "<strong>Non bi sunt arresonadas in custa creze.</strong><br />Pro ite non nde pones una?",
|
||||||
"browsing": "navighende",
|
"browsing": "navighende",
|
||||||
"no_replies": "Perunu at rispostu",
|
"no_replies": "Perunu at rispostu",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Imbia·mi notìficas pro is rispostas noas a custa arresonada",
|
"notify_me": "Imbia·mi notìficas pro is rispostas noas a custa arresonada",
|
||||||
"quote": "Mèntova",
|
"quote": "Mèntova",
|
||||||
"reply": "Risponde",
|
"reply": "Risponde",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Acontza",
|
"edit": "Acontza",
|
||||||
"delete": "Contzella",
|
"delete": "Contzella",
|
||||||
"purge": "Purge",
|
"purge": "Purge",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Nová téma",
|
"new_topic_button": "Nová téma",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>V tejto kategórií zatiaľ nie sú žiadne príspevky.</strong><br />Môžeš byť prvý!",
|
"no_topics": "<strong>V tejto kategórií zatiaľ nie sú žiadne príspevky.</strong><br />Môžeš byť prvý!",
|
||||||
"browsing": "prehliada",
|
"browsing": "prehliada",
|
||||||
"no_replies": "Nikdo ešte neodpovedal",
|
"no_replies": "Nikdo ešte neodpovedal",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Sledovať túto tému",
|
"notify_me": "Sledovať túto tému",
|
||||||
"quote": "Citovať",
|
"quote": "Citovať",
|
||||||
"reply": "Odpovedať",
|
"reply": "Odpovedať",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Upraviť",
|
"edit": "Upraviť",
|
||||||
"delete": "Zmazať",
|
"delete": "Zmazať",
|
||||||
"purge": "Purge",
|
"purge": "Purge",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Nytt ämne",
|
"new_topic_button": "Nytt ämne",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>Det finns inga ämnen i denna kategori.</strong><br />Varför skapar inte du ett ämne?",
|
"no_topics": "<strong>Det finns inga ämnen i denna kategori.</strong><br />Varför skapar inte du ett ämne?",
|
||||||
"browsing": "läser",
|
"browsing": "läser",
|
||||||
"no_replies": "Ingen har svarat",
|
"no_replies": "Ingen har svarat",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Få notiser om nya svar i detta ämne",
|
"notify_me": "Få notiser om nya svar i detta ämne",
|
||||||
"quote": "Citera",
|
"quote": "Citera",
|
||||||
"reply": "Svara",
|
"reply": "Svara",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Ändra",
|
"edit": "Ändra",
|
||||||
"delete": "Ta bort",
|
"delete": "Ta bort",
|
||||||
"purge": "Rensa",
|
"purge": "Rensa",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "กระทู้",
|
"new_topic_button": "กระทู้",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>ยังไม่มีกระทู้ในหมวดนี้</strong><br />โพสต์กระทู้แรก?",
|
"no_topics": "<strong>ยังไม่มีกระทู้ในหมวดนี้</strong><br />โพสต์กระทู้แรก?",
|
||||||
"browsing": "เรียกดู",
|
"browsing": "เรียกดู",
|
||||||
"no_replies": "ยังไม่มีใครตอบ",
|
"no_replies": "ยังไม่มีใครตอบ",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "แจ้งเตือนเมื่อการตอบใหม่ในกระทู้นี้",
|
"notify_me": "แจ้งเตือนเมื่อการตอบใหม่ในกระทู้นี้",
|
||||||
"quote": "คำอ้างอิง",
|
"quote": "คำอ้างอิง",
|
||||||
"reply": "ตอบ",
|
"reply": "ตอบ",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "แก้ไข",
|
"edit": "แก้ไข",
|
||||||
"delete": "ลบ",
|
"delete": "ลบ",
|
||||||
"purge": "Purge",
|
"purge": "Purge",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Yeni Başlık",
|
"new_topic_button": "Yeni Başlık",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong> Bu kategoride hiç konu yok. </strong> <br /> Yeni bir konu açmak istemez misiniz?",
|
"no_topics": "<strong> Bu kategoride hiç konu yok. </strong> <br /> Yeni bir konu açmak istemez misiniz?",
|
||||||
"browsing": "gözden geçiriliyor",
|
"browsing": "gözden geçiriliyor",
|
||||||
"no_replies": "Kimse yanıtlamadı",
|
"no_replies": "Kimse yanıtlamadı",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Bu konudaki cevaplardan haberdar ol",
|
"notify_me": "Bu konudaki cevaplardan haberdar ol",
|
||||||
"quote": "Alıntı",
|
"quote": "Alıntı",
|
||||||
"reply": "Cevap",
|
"reply": "Cevap",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Düzenle",
|
"edit": "Düzenle",
|
||||||
"delete": "Sil",
|
"delete": "Sil",
|
||||||
"purge": "Temizle",
|
"purge": "Temizle",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "Chủ đề mới",
|
"new_topic_button": "Chủ đề mới",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>Không có bài viết trong danh mục này.</strong><br />Hãy đăng một bài viết mới.",
|
"no_topics": "<strong>Không có bài viết trong danh mục này.</strong><br />Hãy đăng một bài viết mới.",
|
||||||
"browsing": "đang xem",
|
"browsing": "đang xem",
|
||||||
"no_replies": "Chưa có bình luận nào",
|
"no_replies": "Chưa có bình luận nào",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "Được thông báo khi có trả lời mới trong chủ đề này",
|
"notify_me": "Được thông báo khi có trả lời mới trong chủ đề này",
|
||||||
"quote": "Trích dẫn",
|
"quote": "Trích dẫn",
|
||||||
"reply": "Trả lời",
|
"reply": "Trả lời",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "Chỉnh sửa",
|
"edit": "Chỉnh sửa",
|
||||||
"delete": "Xóa",
|
"delete": "Xóa",
|
||||||
"purge": "Xóa hẳn",
|
"purge": "Xóa hẳn",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "新主题",
|
"new_topic_button": "新主题",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>此版块还没有任何内容。</strong><br />赶紧来发帖吧!",
|
"no_topics": "<strong>此版块还没有任何内容。</strong><br />赶紧来发帖吧!",
|
||||||
"browsing": "正在浏览",
|
"browsing": "正在浏览",
|
||||||
"no_replies": "尚无回复",
|
"no_replies": "尚无回复",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "此主题有新回复时通知我",
|
"notify_me": "此主题有新回复时通知我",
|
||||||
"quote": "引用",
|
"quote": "引用",
|
||||||
"reply": "回复",
|
"reply": "回复",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "编辑",
|
"edit": "编辑",
|
||||||
"delete": "删除",
|
"delete": "删除",
|
||||||
"purge": "清除",
|
"purge": "清除",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"new_topic_button": "新主題",
|
"new_topic_button": "新主題",
|
||||||
|
"guest-login-post": "Log in to post",
|
||||||
"no_topics": "<strong>這個版面還沒有任何內容。</strong><br />趕緊來發文章吧!",
|
"no_topics": "<strong>這個版面還沒有任何內容。</strong><br />趕緊來發文章吧!",
|
||||||
"browsing": "正在瀏覽",
|
"browsing": "正在瀏覽",
|
||||||
"no_replies": "還沒有回覆",
|
"no_replies": "還沒有回覆",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"notify_me": "該主題有新回覆時通知我",
|
"notify_me": "該主題有新回覆時通知我",
|
||||||
"quote": "引用",
|
"quote": "引用",
|
||||||
"reply": "回覆",
|
"reply": "回覆",
|
||||||
|
"guest-login-reply": "Log in to reply",
|
||||||
"edit": "編輯",
|
"edit": "編輯",
|
||||||
"delete": "刪除",
|
"delete": "刪除",
|
||||||
"purge": "清除",
|
"purge": "清除",
|
||||||
|
|||||||
@@ -184,14 +184,17 @@
|
|||||||
.box-header-font
|
.box-header-font
|
||||||
}
|
}
|
||||||
|
|
||||||
#user_dropdown {
|
#user_label {
|
||||||
padding: 6px;
|
a {
|
||||||
|
padding-top: 13px;
|
||||||
|
padding-bottom: 13px;
|
||||||
|
|
||||||
img {
|
img {
|
||||||
width: 30px;
|
width: 24px;
|
||||||
height: 30px;
|
height: 24px;
|
||||||
vertical-align: -88%;
|
border-radius: 50%;
|
||||||
margin-right: 5px;
|
border: 1px solid #454;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,23 +217,38 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar {
|
.navbar-static-top, .navbar-fixed-top {
|
||||||
padding: 0 5px;
|
box-shadow: 0px -3px 12px rgba(0, 0, 0, 0.5);
|
||||||
|
|
||||||
.nav-home a, .nav-home a:hover {
|
|
||||||
width: 30px;
|
|
||||||
height: 30px;
|
|
||||||
padding: 5px;
|
|
||||||
text-align: center;
|
|
||||||
margin-top: 10px;
|
|
||||||
background: #DDD;
|
|
||||||
|
|
||||||
i {
|
|
||||||
color: black;
|
|
||||||
font-size: 17px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.navbar-header > .navbar-toggle {
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-nav {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
|
||||||
|
>li {
|
||||||
|
>a {
|
||||||
|
padding-top: 15px;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
>a:hover, >a:focus {
|
||||||
|
color: @gray-dark;
|
||||||
|
background-color: @gray-light;
|
||||||
|
}
|
||||||
|
|
||||||
|
>#reconnect {
|
||||||
|
color: @gray-light;
|
||||||
|
}
|
||||||
|
|
||||||
|
>#reconnect:focus, >#reconnect:hover {
|
||||||
|
color: @gray-light;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#acp-search {
|
#acp-search {
|
||||||
|
|||||||
@@ -1,12 +1,21 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
/*global define, socket, app, admin, utils, bootbox, RELATIVE_PATH*/
|
/*global define, socket, app, admin, utils, bootbox, RELATIVE_PATH*/
|
||||||
|
|
||||||
define('admin/manage/flags', ['forum/infinitescroll', 'admin/modules/selectable'], function(infinitescroll, selectable) {
|
define('admin/manage/flags', [
|
||||||
|
'forum/infinitescroll',
|
||||||
|
'admin/modules/selectable',
|
||||||
|
'autocomplete'
|
||||||
|
], function(infinitescroll, selectable, autocomplete) {
|
||||||
|
|
||||||
var Flags = {};
|
var Flags = {};
|
||||||
|
|
||||||
Flags.init = function() {
|
Flags.init = function() {
|
||||||
$('.post-container .content img').addClass('img-responsive');
|
$('.post-container .content img').addClass('img-responsive');
|
||||||
|
|
||||||
|
var params = utils.params();
|
||||||
|
$('#flag-sort-by').val(params.sortBy);
|
||||||
|
autocomplete.user($('#byUsername'));
|
||||||
|
|
||||||
handleDismiss();
|
handleDismiss();
|
||||||
handleDismissAll();
|
handleDismissAll();
|
||||||
handleDelete();
|
handleDelete();
|
||||||
@@ -69,8 +78,15 @@ define('admin/manage/flags', ['forum/infinitescroll', 'admin/modules/selectable'
|
|||||||
if (direction < 0 && !$('.flags').length) {
|
if (direction < 0 && !$('.flags').length) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
var params = utils.params();
|
||||||
|
var sortBy = params.sortBy || 'count';
|
||||||
|
var byUsername = params.byUsername || '';
|
||||||
|
|
||||||
infinitescroll.loadMore('admin.getMoreFlags', $('[data-next]').attr('data-next'), function(data, done) {
|
infinitescroll.loadMore('admin.getMoreFlags', {
|
||||||
|
byUsername: byUsername,
|
||||||
|
sortBy: sortBy,
|
||||||
|
after: $('[data-next]').attr('data-next')
|
||||||
|
}, function(data, done) {
|
||||||
if (data.posts && data.posts.length) {
|
if (data.posts && data.posts.length) {
|
||||||
infinitescroll.parseAndTranslate('admin/manage/flags', 'posts', {posts: data.posts}, function(html) {
|
infinitescroll.parseAndTranslate('admin/manage/flags', 'posts', {posts: data.posts}, function(html) {
|
||||||
$('[data-next]').attr('data-next', data.next);
|
$('[data-next]').attr('data-next', data.next);
|
||||||
|
|||||||
@@ -214,7 +214,7 @@ define('admin/manage/users', ['admin/modules/selectable'], function(selectable)
|
|||||||
}
|
}
|
||||||
$('#create-modal').modal('hide');
|
$('#create-modal').modal('hide');
|
||||||
$('#create-modal').on('hidden.bs.modal', function() {
|
$('#create-modal').on('hidden.bs.modal', function() {
|
||||||
ajaxify.go('admin/users');
|
ajaxify.refresh();
|
||||||
});
|
});
|
||||||
app.alertSuccess('User created!');
|
app.alertSuccess('User created!');
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -339,7 +339,7 @@ define('forum/category', [
|
|||||||
infinitescroll.loadMore('categories.loadMore', {
|
infinitescroll.loadMore('categories.loadMore', {
|
||||||
cid: ajaxify.variables.get('category_id'),
|
cid: ajaxify.variables.get('category_id'),
|
||||||
after: after,
|
after: after,
|
||||||
author: utils.getQueryParams().author
|
author: utils.params().author
|
||||||
}, function (data, done) {
|
}, function (data, done) {
|
||||||
|
|
||||||
if (data.topics && data.topics.length) {
|
if (data.topics && data.topics.length) {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/* globals app, define, utils, socket*/
|
/* globals app, define, utils, socket*/
|
||||||
|
|
||||||
define('forum/search', ['search'], function(searchModule) {
|
define('forum/search', ['search', 'autocomplete'], function(searchModule, autocomplete) {
|
||||||
var Search = {};
|
var Search = {};
|
||||||
|
|
||||||
Search.init = function() {
|
Search.init = function() {
|
||||||
@@ -80,8 +80,8 @@ define('forum/search', ['search'], function(searchModule) {
|
|||||||
$('#posted-by-user').val(params.by);
|
$('#posted-by-user').val(params.by);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((params['categories[]'] || params.categories)) {
|
if (params.categories) {
|
||||||
$('#posted-in-categories').val(params['categories[]'] || params.categories);
|
$('#posted-in-categories').val(params.categories);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.searchChildren) {
|
if (params.searchChildren) {
|
||||||
@@ -156,25 +156,7 @@ define('forum/search', ['search'], function(searchModule) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function enableAutoComplete() {
|
function enableAutoComplete() {
|
||||||
var input = $('#posted-by-user');
|
autocomplete.user($('#posted-by-user'));
|
||||||
input.autocomplete({
|
|
||||||
delay: 100,
|
|
||||||
source: function(request, response) {
|
|
||||||
socket.emit('user.search', {query: request.term}, function(err, result) {
|
|
||||||
if (err) {
|
|
||||||
return app.alertError(err.message);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result && result.users) {
|
|
||||||
var names = result.users.map(function(user) {
|
|
||||||
return user && user.username;
|
|
||||||
});
|
|
||||||
response(names);
|
|
||||||
}
|
|
||||||
$('.ui-autocomplete a').attr('data-ajaxify', 'false');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Search;
|
return Search;
|
||||||
|
|||||||
31
public/src/modules/autocomplete.js
Normal file
31
public/src/modules/autocomplete.js
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/* globals define, socket, app */
|
||||||
|
|
||||||
|
define('autocomplete', function() {
|
||||||
|
var module = {};
|
||||||
|
|
||||||
|
module.user = function (input) {
|
||||||
|
input.autocomplete({
|
||||||
|
delay: 100,
|
||||||
|
source: function(request, response) {
|
||||||
|
socket.emit('user.search', {query: request.term}, function(err, result) {
|
||||||
|
if (err) {
|
||||||
|
return app.alertError(err.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result && result.users) {
|
||||||
|
var names = result.users.map(function(user) {
|
||||||
|
return user && user.username;
|
||||||
|
});
|
||||||
|
response(names);
|
||||||
|
}
|
||||||
|
$('.ui-autocomplete a').attr('data-ajaxify', 'false');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
return module;
|
||||||
|
});
|
||||||
@@ -16,11 +16,17 @@ define('composer', [
|
|||||||
var composer = {
|
var composer = {
|
||||||
active: undefined,
|
active: undefined,
|
||||||
posts: {},
|
posts: {},
|
||||||
bsEnvironment: undefined
|
bsEnvironment: undefined,
|
||||||
|
formatting: []
|
||||||
};
|
};
|
||||||
|
|
||||||
$(window).off('resize', onWindowResize).on('resize', onWindowResize);
|
$(window).off('resize', onWindowResize).on('resize', onWindowResize);
|
||||||
|
|
||||||
|
// Query server for formatting options
|
||||||
|
socket.emit('modules.composer.getFormattingOptions', function(err, options) {
|
||||||
|
composer.formatting = options;
|
||||||
|
});
|
||||||
|
|
||||||
function onWindowResize() {
|
function onWindowResize() {
|
||||||
if (composer.active !== undefined) {
|
if (composer.active !== undefined) {
|
||||||
resize.reposition($('#cmp-uuid-' + composer.active));
|
resize.reposition($('#cmp-uuid-' + composer.active));
|
||||||
@@ -232,7 +238,8 @@ define('composer', [
|
|||||||
maximumTagLength: config.maximumTagLength,
|
maximumTagLength: config.maximumTagLength,
|
||||||
isTopic: isTopic,
|
isTopic: isTopic,
|
||||||
showHandleInput: (app.user.uid === 0 || (isEditing && isGuestPost && app.user.isAdmin)) && config.allowGuestHandles,
|
showHandleInput: (app.user.uid === 0 || (isEditing && isGuestPost && app.user.isAdmin)) && config.allowGuestHandles,
|
||||||
handle: composer.posts[post_uuid] ? composer.posts[post_uuid].handle || '' : undefined
|
handle: composer.posts[post_uuid] ? composer.posts[post_uuid].handle || '' : undefined,
|
||||||
|
formatting: composer.formatting
|
||||||
};
|
};
|
||||||
|
|
||||||
parseAndTranslate(template, data, function(composerTemplate) {
|
parseAndTranslate(template, data, function(composerTemplate) {
|
||||||
|
|||||||
@@ -7,61 +7,15 @@ define('composer/formatting', ['composer/controls', 'composer/preview'], functio
|
|||||||
var formatting = {};
|
var formatting = {};
|
||||||
|
|
||||||
var formattingDispatchTable = {
|
var formattingDispatchTable = {
|
||||||
'fa fa-bold': function(textarea, selectionStart, selectionEnd){
|
'picture-o': function(){
|
||||||
if(selectionStart === selectionEnd){
|
|
||||||
controls.insertIntoTextarea(textarea, '**bolded text**');
|
|
||||||
controls.updateTextareaSelection(textarea, selectionStart + 2, selectionStart + 13);
|
|
||||||
} else {
|
|
||||||
controls.wrapSelectionInTextareaWith(textarea, '**');
|
|
||||||
controls.updateTextareaSelection(textarea, selectionStart + 2, selectionEnd + 2);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
'fa fa-italic': function(textarea, selectionStart, selectionEnd){
|
|
||||||
if(selectionStart === selectionEnd){
|
|
||||||
controls.insertIntoTextarea(textarea, "*italicised text*");
|
|
||||||
controls.updateTextareaSelection(textarea, selectionStart + 1, selectionStart + 16);
|
|
||||||
} else {
|
|
||||||
controls.wrapSelectionInTextareaWith(textarea, '*');
|
|
||||||
controls.updateTextareaSelection(textarea, selectionStart + 1, selectionEnd + 1);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
'fa fa-list': function(textarea, selectionStart, selectionEnd){
|
|
||||||
if(selectionStart === selectionEnd){
|
|
||||||
controls.insertIntoTextarea(textarea, "\n* list item");
|
|
||||||
|
|
||||||
// Highlight "list item"
|
|
||||||
controls.updateTextareaSelection(textarea, selectionStart + 3, selectionStart + 12);
|
|
||||||
} else {
|
|
||||||
controls.wrapSelectionInTextareaWith(textarea, '\n* ', '');
|
|
||||||
controls.updateTextareaSelection(textarea, selectionStart + 3, selectionEnd + 3);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
'fa fa-link': function(textarea, selectionStart, selectionEnd){
|
|
||||||
if(selectionStart === selectionEnd){
|
|
||||||
controls.insertIntoTextarea(textarea, "[link text](link url)");
|
|
||||||
|
|
||||||
// Highlight "link url"
|
|
||||||
controls.updateTextareaSelection(textarea, selectionStart + 12, selectionEnd + 20);
|
|
||||||
} else {
|
|
||||||
controls.wrapSelectionInTextareaWith(textarea, '[', '](link url)');
|
|
||||||
|
|
||||||
// Highlight "link url"
|
|
||||||
controls.updateTextareaSelection(textarea, selectionEnd + 3, selectionEnd + 11);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
'fa fa-picture-o': function(){
|
|
||||||
$('#files').click();
|
$('#files').click();
|
||||||
},
|
},
|
||||||
|
|
||||||
'fa fa-upload': function(){
|
upload: function(){
|
||||||
$('#files').click();
|
$('#files').click();
|
||||||
},
|
},
|
||||||
|
|
||||||
'fa fa-tags': function() {
|
tags: function() {
|
||||||
$('.tags-container').toggleClass('hidden');
|
$('.tags-container').toggleClass('hidden');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -69,27 +23,32 @@ define('composer/formatting', ['composer/controls', 'composer/preview'], functio
|
|||||||
var customButtons = [];
|
var customButtons = [];
|
||||||
|
|
||||||
formatting.addComposerButtons = function() {
|
formatting.addComposerButtons = function() {
|
||||||
for (var button in customButtons) {
|
for(var x=0,numButtons=customButtons.length;x<numButtons;x++) {
|
||||||
if (customButtons.hasOwnProperty(button)) {
|
$('.formatting-bar .btn-group form').before('<span class="btn btn-link" tabindex="-1" data-format="' + customButtons[x].name + '"><i class="' + customButtons[x].iconClass + '"></i></span>');
|
||||||
$('.formatting-bar .btn-group form').before('<span class="btn btn-link" tabindex="-1"><i class="' + customButtons[button].iconClass + '"></i></span>');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
formatting.addButton = function(iconClass, onClick) {
|
formatting.addButton = function(iconClass, onClick) {
|
||||||
formattingDispatchTable[iconClass] = onClick;
|
var name = iconClass.replace('fa fa-', '');
|
||||||
|
|
||||||
|
formattingDispatchTable[name] = onClick;
|
||||||
customButtons.push({
|
customButtons.push({
|
||||||
|
name: name,
|
||||||
iconClass: iconClass
|
iconClass: iconClass
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
|
formatting.addButtonDispatch = function(name, onClick) {
|
||||||
|
formattingDispatchTable[name] = onClick;
|
||||||
|
};
|
||||||
|
|
||||||
formatting.addHandler = function(postContainer) {
|
formatting.addHandler = function(postContainer) {
|
||||||
postContainer.on('click', '.formatting-bar span', function () {
|
postContainer.on('click', '.formatting-bar span', function () {
|
||||||
var iconClass = $(this).find('i').attr('class');
|
var format = $(this).attr('data-format'),
|
||||||
var textarea = $(this).parents('.composer').find('textarea')[0];
|
textarea = $(this).parents('.composer').find('textarea')[0];
|
||||||
|
|
||||||
if(formattingDispatchTable.hasOwnProperty(iconClass)){
|
if(formattingDispatchTable.hasOwnProperty(format)){
|
||||||
formattingDispatchTable[iconClass](textarea, textarea.selectionStart, textarea.selectionEnd);
|
formattingDispatchTable[format](textarea, textarea.selectionStart, textarea.selectionEnd);
|
||||||
preview.render(postContainer);
|
preview.render(postContainer);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -270,6 +270,9 @@
|
|||||||
value = options.skipToType[key] ? decodeURI(val[1]) : utils.toType(decodeURI(val[1]));
|
value = options.skipToType[key] ? decodeURI(val[1]) : utils.toType(decodeURI(val[1]));
|
||||||
|
|
||||||
if (key) {
|
if (key) {
|
||||||
|
if (key.substr(-2, 2) === '[]') {
|
||||||
|
key = key.slice(0, -2);
|
||||||
|
}
|
||||||
if (!hash[key]) {
|
if (!hash[key]) {
|
||||||
hash[key] = value;
|
hash[key] = value;
|
||||||
} else {
|
} else {
|
||||||
@@ -293,24 +296,6 @@
|
|||||||
return a;
|
return a;
|
||||||
},
|
},
|
||||||
|
|
||||||
getQueryParams: function() {
|
|
||||||
var search = window.location.search.slice(1),
|
|
||||||
data = {};
|
|
||||||
|
|
||||||
search = search.split('&');
|
|
||||||
for(var x=0,numParams=search.length,temp;x<numParams;x++) {
|
|
||||||
temp = search[x].split('=');
|
|
||||||
if (temp[0].substr(-2, 2) !== '[]') {
|
|
||||||
data[temp[0]] = temp[1];
|
|
||||||
} else {
|
|
||||||
data[temp[0].slice(0, -2)] = data[temp[0].slice(0, -2)] || [];
|
|
||||||
data[temp[0].slice(0, -2)].push(temp[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return data;
|
|
||||||
},
|
|
||||||
|
|
||||||
// return boolean if string 'true' or string 'false', or if a parsable string which is a number
|
// return boolean if string 'true' or string 'false', or if a parsable string which is a number
|
||||||
// also supports JSON object and/or arrays parsing
|
// also supports JSON object and/or arrays parsing
|
||||||
toType: function(str) {
|
toType: function(str) {
|
||||||
|
|||||||
@@ -163,14 +163,24 @@ adminController.tags.get = function(req, res, next) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
adminController.flags.get = function(req, res, next) {
|
adminController.flags.get = function(req, res, next) {
|
||||||
var uid = req.user ? parseInt(req.user.uid, 10) : 0;
|
function done(err, posts) {
|
||||||
posts.getFlags(uid, 0, 19, function(err, posts) {
|
|
||||||
if (err) {
|
if (err) {
|
||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
|
res.render('admin/manage/flags', {posts: posts, next: end + 1, byUsername: byUsername});
|
||||||
|
}
|
||||||
|
var uid = req.user ? parseInt(req.user.uid, 10) : 0;
|
||||||
|
var sortBy = req.query.sortBy || 'count';
|
||||||
|
var byUsername = req.query.byUsername || '';
|
||||||
|
var start = 0;
|
||||||
|
var end = 19;
|
||||||
|
|
||||||
res.render('admin/manage/flags', {posts: posts, next: 20});
|
if (byUsername) {
|
||||||
});
|
posts.getUserFlags(byUsername, sortBy, uid, start, end, done);
|
||||||
|
} else {
|
||||||
|
var set = sortBy === 'count' ? 'posts:flags:count' : 'posts:flagged';
|
||||||
|
posts.getFlags(set, uid, start, end, done);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
adminController.database.get = function(req, res, next) {
|
adminController.database.get = function(req, res, next) {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ var uploadsController = {},
|
|||||||
fs = require('fs'),
|
fs = require('fs'),
|
||||||
path = require('path'),
|
path = require('path'),
|
||||||
async = require('async'),
|
async = require('async'),
|
||||||
|
validator = require('validator'),
|
||||||
|
|
||||||
meta = require('../meta'),
|
meta = require('../meta'),
|
||||||
file = require('../file'),
|
file = require('../file'),
|
||||||
@@ -118,7 +119,9 @@ function uploadFile(uid, uploadedFile, callback) {
|
|||||||
return callback(new Error('[[error:file-too-big, ' + meta.config.maximumFileSize + ']]'));
|
return callback(new Error('[[error:file-too-big, ' + meta.config.maximumFileSize + ']]'));
|
||||||
}
|
}
|
||||||
|
|
||||||
var filename = 'upload-' + utils.generateUUID() + path.extname(uploadedFile.name);
|
var filename = uploadedFile.name || 'upload';
|
||||||
|
|
||||||
|
filename = Date.now() + '-' + validator.escape(filename).substr(0, 255);
|
||||||
file.saveFileToLocal(filename, 'files', uploadedFile.path, function(err, upload) {
|
file.saveFileToLocal(filename, 'files', uploadedFile.path, function(err, upload) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
|
|||||||
@@ -825,40 +825,58 @@ var async = require('async'),
|
|||||||
], callback);
|
], callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Groups.getGroupsData = function(groupNames, callback) {
|
||||||
|
if (!Array.isArray(groupNames) || !groupNames.length) {
|
||||||
|
return callback(null, []);
|
||||||
|
}
|
||||||
|
var keys = groupNames.map(function(groupName) {
|
||||||
|
return 'group:' + groupName;
|
||||||
|
});
|
||||||
|
|
||||||
|
db.getObjects(keys, function(err, groupData) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
groupData = groupData.map(function(group) {
|
||||||
|
if (group) {
|
||||||
|
group.labelColor = group.labelColor || '#000000';
|
||||||
|
group.createtimeISO = utils.toISOString(group.createtime);
|
||||||
|
group.hidden = parseInt(group.hidden, 10) === 1;
|
||||||
|
|
||||||
|
if (!group['cover:url']) {
|
||||||
|
group['cover:url'] = nconf.get('relative_path') + '/images/cover-default.png';
|
||||||
|
group['cover:position'] = '50% 50%';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return group;
|
||||||
|
});
|
||||||
|
|
||||||
|
plugins.fireHook('filter:groups.get', {groups: groupData}, function(err, data) {
|
||||||
|
callback(err, data ? data.groups : null);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
Groups.getUserGroups = function(uids, callback) {
|
Groups.getUserGroups = function(uids, callback) {
|
||||||
db.getSortedSetRevRange('groups:createtime', 0, -1, function(err, groupNames) {
|
db.getSortedSetRevRange('groups:createtime', 0, -1, function(err, groupNames) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
var groupKeys = groupNames.filter(function(groupName) {
|
groupNames = groupNames.filter(function(groupName) {
|
||||||
return groupName !== 'registered-users' && groupName.indexOf(':privileges:') === -1;
|
return groupName !== 'registered-users' && groupName.indexOf(':privileges:') === -1;
|
||||||
}).map(function(groupName) {
|
|
||||||
return 'group:' + groupName;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
db.getObjects(groupKeys, function(err, groupData) {
|
Groups.getGroupsData(groupNames, function(err, groupData) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
groupData = groupData.filter(function(group) {
|
groupData = groupData.filter(function(group) {
|
||||||
return parseInt(group.hidden, 10) !== 1 && !!group.userTitle;
|
return group && parseInt(group.hidden, 10) !== 1 && !!group.userTitle;
|
||||||
}).map(function(group) {
|
|
||||||
group.createtimeISO = utils.toISOString(group.createtime);
|
|
||||||
return group;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
var groupSets = groupData.map(function(group) {
|
var groupSets = groupData.map(function(group) {
|
||||||
group.labelColor = group.labelColor || '#000000';
|
|
||||||
group.createtimeISO = utils.toISOString(group.createtime);
|
|
||||||
|
|
||||||
if (!group['cover:url']) {
|
|
||||||
group['cover:url'] = nconf.get('relative_path') + '/images/cover-default.png';
|
|
||||||
group['cover:position'] = '50% 50%';
|
|
||||||
}
|
|
||||||
|
|
||||||
return 'group:' + group.name + ':members';
|
return 'group:' + group.name + ':members';
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -320,11 +320,13 @@ var db = require('./database'),
|
|||||||
};
|
};
|
||||||
|
|
||||||
function sendNotifications(fromuid, touid, messageObj, callback) {
|
function sendNotifications(fromuid, touid, messageObj, callback) {
|
||||||
if (!websockets.isUserOnline(touid)) {
|
if (websockets.isUserOnline(touid)) {
|
||||||
|
return callback();
|
||||||
|
}
|
||||||
|
|
||||||
notifications.create({
|
notifications.create({
|
||||||
bodyShort: '[[notifications:new_message_from, ' + messageObj.fromUser.username + ']]',
|
bodyShort: '[[notifications:new_message_from, ' + messageObj.fromUser.username + ']]',
|
||||||
bodyLong: messageObj.content,
|
bodyLong: messageObj.content,
|
||||||
path: nconf.get('relative_path') + '/chats/' + utils.slugify(messageObj.fromUser.username),
|
|
||||||
nid: 'chat_' + fromuid + '_' + touid,
|
nid: 'chat_' + fromuid + '_' + touid,
|
||||||
from: fromuid
|
from: fromuid
|
||||||
}, function(err, notification) {
|
}, function(err, notification) {
|
||||||
@@ -347,6 +349,5 @@ var db = require('./database'),
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}(exports));
|
}(exports));
|
||||||
|
|||||||
@@ -55,11 +55,12 @@ var async = require('async'),
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (notification.from && !notification.image) {
|
if (notification.from && !notification.image) {
|
||||||
User.getUserField(notification.from, 'picture', function(err, picture) {
|
User.getUserFields(notification.from, ['username', 'userslug', 'picture'], function(err, userData) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
notification.image = picture;
|
notification.image = userData.picture;
|
||||||
|
notification.user = userData;
|
||||||
next(null, notification);
|
next(null, notification);
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ module.exports = function(Posts) {
|
|||||||
removeFromCategoryRecentPosts(pid, postData.tid, next);
|
removeFromCategoryRecentPosts(pid, postData.tid, next);
|
||||||
},
|
},
|
||||||
function(next) {
|
function(next) {
|
||||||
db.sortedSetRemove('posts:flagged', pid, next);
|
Posts.dismissFlags(pid, next);
|
||||||
}
|
}
|
||||||
], function(err) {
|
], function(err) {
|
||||||
callback(err, postData);
|
callback(err, postData);
|
||||||
@@ -125,6 +125,9 @@ module.exports = function(Posts) {
|
|||||||
},
|
},
|
||||||
function(next) {
|
function(next) {
|
||||||
db.sortedSetsRemove(['posts:pid', 'posts:flagged'], pid, next);
|
db.sortedSetsRemove(['posts:pid', 'posts:flagged'], pid, next);
|
||||||
|
},
|
||||||
|
function(next) {
|
||||||
|
Posts.dismissFlags(pid, next);
|
||||||
}
|
}
|
||||||
], function(err) {
|
], function(err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|||||||
@@ -3,22 +3,52 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var async = require('async'),
|
var async = require('async'),
|
||||||
db = require('../database');
|
db = require('../database'),
|
||||||
|
user = require('../user');
|
||||||
|
|
||||||
|
|
||||||
module.exports = function(Posts) {
|
module.exports = function(Posts) {
|
||||||
Posts.flag = function(pid, callback) {
|
|
||||||
Posts.exists(pid, function(err, exists) {
|
Posts.flag = function(post, uid, callback) {
|
||||||
if (err || !exists) {
|
async.parallel({
|
||||||
|
hasFlagged: async.apply(hasFlagged, post.pid, uid),
|
||||||
|
exists: async.apply(Posts.exists, post.pid)
|
||||||
|
}, function(err, results) {
|
||||||
|
if (err || !results.exists) {
|
||||||
return callback(err || new Error('[[error:no-post]]'));
|
return callback(err || new Error('[[error:no-post]]'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (results.hasFlagged) {
|
||||||
|
return callback(new Error('[[error:already-flagged]]'));
|
||||||
|
}
|
||||||
|
var now = Date.now();
|
||||||
|
|
||||||
async.parallel([
|
async.parallel([
|
||||||
function(next) {
|
function(next) {
|
||||||
db.sortedSetAdd('posts:flagged', Date.now(), pid, next);
|
db.sortedSetAdd('posts:flagged', now, post.pid, next);
|
||||||
},
|
},
|
||||||
function(next) {
|
function(next) {
|
||||||
db.incrObjectField('post:' + pid, 'flags', next);
|
db.sortedSetIncrBy('posts:flags:count', 1, post.pid, next);
|
||||||
|
},
|
||||||
|
function(next) {
|
||||||
|
db.incrObjectField('post:' + post.pid, 'flags', next);
|
||||||
|
},
|
||||||
|
function(next) {
|
||||||
|
db.sortedSetAdd('pid:' + post.pid + ':flag:uids', now, uid, next);
|
||||||
|
},
|
||||||
|
function(next) {
|
||||||
|
if (parseInt(post.uid, 10)) {
|
||||||
|
db.sortedSetAdd('uid:' + post.uid + ':flag:pids', now, post.pid, next);
|
||||||
|
} else {
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
function(next) {
|
||||||
|
if (parseInt(post.uid, 10)) {
|
||||||
|
db.setAdd('uid:' + post.uid + ':flagged_by', uid, next);
|
||||||
|
} else {
|
||||||
|
next();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
], function(err, results) {
|
], function(err, results) {
|
||||||
callback(err);
|
callback(err);
|
||||||
@@ -26,13 +56,30 @@ module.exports = function(Posts) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function hasFlagged(pid, uid, callback) {
|
||||||
|
db.isSortedSetMember('pid:' + pid + ':flag:uids', uid, callback);
|
||||||
|
}
|
||||||
|
|
||||||
Posts.dismissFlag = function(pid, callback) {
|
Posts.dismissFlag = function(pid, callback) {
|
||||||
async.parallel([
|
async.parallel([
|
||||||
function(next) {
|
function(next) {
|
||||||
db.sortedSetRemove('posts:flagged', pid, next);
|
db.getObjectField('post:' + pid, 'uid', function(err, uid) {
|
||||||
|
if (err) {
|
||||||
|
return next(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
db.sortedSetsRemove([
|
||||||
|
'posts:flagged',
|
||||||
|
'posts:flags:count',
|
||||||
|
'uid:' + uid + ':flag:pids'
|
||||||
|
], pid, next);
|
||||||
|
});
|
||||||
},
|
},
|
||||||
function(next) {
|
function(next) {
|
||||||
db.deleteObjectField('post:' + pid, 'flags', next);
|
db.deleteObjectField('post:' + pid, 'flags', next);
|
||||||
|
},
|
||||||
|
function(next) {
|
||||||
|
db.delete('pid:' + pid + ':flag:uids', next);
|
||||||
}
|
}
|
||||||
], function(err, results) {
|
], function(err, results) {
|
||||||
callback(err);
|
callback(err);
|
||||||
@@ -43,8 +90,8 @@ module.exports = function(Posts) {
|
|||||||
db.delete('posts:flagged', callback);
|
db.delete('posts:flagged', callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
Posts.getFlags = function(uid, start, end, callback) {
|
Posts.getFlags = function(set, uid, start, end, callback) {
|
||||||
db.getSortedSetRevRange('posts:flagged', start, end, function(err, pids) {
|
db.getSortedSetRevRange(set, start, end, function(err, pids) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
@@ -52,4 +99,29 @@ module.exports = function(Posts) {
|
|||||||
Posts.getPostSummaryByPids(pids, uid, {stripTags: false, extraFields: ['flags']}, callback);
|
Posts.getPostSummaryByPids(pids, uid, {stripTags: false, extraFields: ['flags']}, callback);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Posts.getUserFlags = function(byUsername, sortBy, callerUID, start, end, callback) {
|
||||||
|
async.waterfall([
|
||||||
|
function(next) {
|
||||||
|
user.getUidByUsername(byUsername, next);
|
||||||
|
},
|
||||||
|
function(uid, next) {
|
||||||
|
if (!uid) {
|
||||||
|
return next(null, []);
|
||||||
|
}
|
||||||
|
db.getSortedSetRevRange('uid:' + uid + ':flag:pids', 0, -1, next);
|
||||||
|
},
|
||||||
|
function(pids, next) {
|
||||||
|
Posts.getPostSummaryByPids(pids, callerUID, {stripTags: false, extraFields: ['flags']}, next);
|
||||||
|
},
|
||||||
|
function(posts, next) {
|
||||||
|
if (sortBy === 'count') {
|
||||||
|
posts.sort(function(a, b) {
|
||||||
|
return b.flags - a.flags;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
next(null, posts.slice(start, end));
|
||||||
|
}
|
||||||
|
], callback);
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -365,45 +365,29 @@ function sortPosts(posts, data) {
|
|||||||
|
|
||||||
if (isNumeric) {
|
if (isNumeric) {
|
||||||
if (data.sortDirection === 'desc') {
|
if (data.sortDirection === 'desc') {
|
||||||
sortDescendingNumeric(posts, fields);
|
|
||||||
} else {
|
|
||||||
sortAscendingNumeric(posts, fields);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (data.sortDirection === 'desc') {
|
|
||||||
sortDescendingAlpha(posts, fields);
|
|
||||||
} else {
|
|
||||||
sortAscendingAlpha(posts, fields);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function sortAscendingNumeric(posts, fields) {
|
|
||||||
posts.sort(function(p1, p2) {
|
|
||||||
return p1[fields[0]][fields[1]] - p2[fields[0]][fields[1]];
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function sortDescendingNumeric(posts, fields) {
|
|
||||||
posts.sort(function(p1, p2) {
|
posts.sort(function(p1, p2) {
|
||||||
return p2[fields[0]][fields[1]] - p1[fields[0]][fields[1]];
|
return p2[fields[0]][fields[1]] - p1[fields[0]][fields[1]];
|
||||||
});
|
});
|
||||||
}
|
} else {
|
||||||
|
|
||||||
function sortAscendingAlpha(posts, fields) {
|
|
||||||
posts.sort(function(p1, p2) {
|
posts.sort(function(p1, p2) {
|
||||||
if (p1[fields[0]][fields[1]] > p2[fields[0]][fields[1]]) return -1;
|
return p1[fields[0]][fields[1]] - p2[fields[0]][fields[1]];
|
||||||
if (p1[fields[0]][fields[1]] < p2[fields[0]][fields[1]]) return 1;
|
|
||||||
return 0;
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
function sortDescendingAlpha(posts, fields) {
|
if (data.sortDirection === 'desc') {
|
||||||
posts.sort(function(p1, p2) {
|
posts.sort(function(p1, p2) {
|
||||||
if (p1[fields[0]][fields[1]] < p2[fields[0]][fields[1]]) return -1;
|
if (p1[fields[0]][fields[1]] < p2[fields[0]][fields[1]]) return -1;
|
||||||
if (p1[fields[0]][fields[1]] > p2[fields[0]][fields[1]]) return 1;
|
if (p1[fields[0]][fields[1]] > p2[fields[0]][fields[1]]) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
posts.sort(function(p1, p2) {
|
||||||
|
if (p1[fields[0]][fields[1]] > p2[fields[0]][fields[1]]) return -1;
|
||||||
|
if (p1[fields[0]][fields[1]] < p2[fields[0]][fields[1]]) return 1;
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSearchCategories(data, callback) {
|
function getSearchCategories(data, callback) {
|
||||||
|
|||||||
@@ -312,14 +312,24 @@ SocketAdmin.dismissAllFlags = function(socket, data, callback) {
|
|||||||
posts.dismissAllFlags(callback);
|
posts.dismissAllFlags(callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
SocketAdmin.getMoreFlags = function(socket, after, callback) {
|
SocketAdmin.getMoreFlags = function(socket, data, callback) {
|
||||||
if (!parseInt(after, 10)) {
|
if (!data || !parseInt(data.after, 10)) {
|
||||||
return callback('[[error:invalid-data]]');
|
return callback('[[error:invalid-data]]');
|
||||||
}
|
}
|
||||||
after = parseInt(after, 10);
|
var sortBy = data.sortBy || 'count';
|
||||||
posts.getFlags(socket.uid, after, after + 19, function(err, posts) {
|
var byUsername = data.byUsername || '';
|
||||||
callback(err, {posts: posts, next: after + 20});
|
var start = parseInt(data.after, 10);
|
||||||
|
var end = start + 19;
|
||||||
|
if (byUsername) {
|
||||||
|
posts.getUserFlags(byUsername, sortBy, socket.uid, start, end, function(err, posts) {
|
||||||
|
callback(err, {posts: posts, next: end + 1});
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
var set = sortBy === 'count' ? 'posts:flags:count' : 'posts:flagged';
|
||||||
|
posts.getFlags(set, socket.uid, start, end, function(err, posts) {
|
||||||
|
callback(err, {posts: posts, next: end + 1});
|
||||||
|
});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
SocketAdmin.takeHeapSnapshot = function(socket, data, callback) {
|
SocketAdmin.takeHeapSnapshot = function(socket, data, callback) {
|
||||||
|
|||||||
@@ -114,6 +114,16 @@ SocketModules.composer.stopNotifyTyping = function(socket, data) {
|
|||||||
server.in('topic_' + data.tid).emit('event:topic.stopNotifyTyping', data);
|
server.in('topic_' + data.tid).emit('event:topic.stopNotifyTyping', data);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
SocketModules.composer.getFormattingOptions = function(socket, data, callback) {
|
||||||
|
plugins.fireHook('filter:composer.formatting', {
|
||||||
|
options: [
|
||||||
|
// { className: 'fa fa-bold' } Just an example of what needs to be set via plugins
|
||||||
|
]
|
||||||
|
}, function(err, payload) {
|
||||||
|
callback(err, payload.options);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
/* Chat */
|
/* Chat */
|
||||||
|
|
||||||
SocketModules.chats.get = function(socket, data, callback) {
|
SocketModules.chats.get = function(socket, data, callback) {
|
||||||
|
|||||||
@@ -422,14 +422,14 @@ SocketPosts.flag = function(socket, pid, callback) {
|
|||||||
return next(new Error('[[error:not-enough-reputation-to-flag]]'));
|
return next(new Error('[[error:not-enough-reputation-to-flag]]'));
|
||||||
}
|
}
|
||||||
userName = userData.username;
|
userName = userData.username;
|
||||||
posts.getPostFields(pid, ['tid', 'uid', 'content', 'deleted'], next);
|
posts.getPostFields(pid, ['pid', 'tid', 'uid', 'content', 'deleted'], next);
|
||||||
},
|
},
|
||||||
function(postData, next) {
|
function(postData, next) {
|
||||||
if (parseInt(postData.deleted, 10) === 1) {
|
if (parseInt(postData.deleted, 10) === 1) {
|
||||||
return next(new Error('[[error:post-deleted]]'));
|
return next(new Error('[[error:post-deleted]]'));
|
||||||
}
|
}
|
||||||
post = postData;
|
post = postData;
|
||||||
posts.flag(pid, next);
|
posts.flag(post, socket.uid, next);
|
||||||
},
|
},
|
||||||
function(next) {
|
function(next) {
|
||||||
topics.getTopicFields(post.tid, ['title', 'cid'], next);
|
topics.getTopicFields(post.tid, ['title', 'cid'], next);
|
||||||
@@ -462,13 +462,6 @@ SocketPosts.flag = function(socket, pid, callback) {
|
|||||||
}
|
}
|
||||||
notifications.push(notification, results.admins.concat(results.moderators), next);
|
notifications.push(notification, results.admins.concat(results.moderators), next);
|
||||||
});
|
});
|
||||||
},
|
|
||||||
function(next) {
|
|
||||||
if (!parseInt(post.uid, 10)) {
|
|
||||||
return next();
|
|
||||||
}
|
|
||||||
|
|
||||||
db.setAdd('uid:' + post.uid + ':flagged_by', socket.uid, next);
|
|
||||||
}
|
}
|
||||||
], callback);
|
], callback);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -294,7 +294,6 @@ SocketUser.follow = function(socket, data, callback) {
|
|||||||
|
|
||||||
notifications.create({
|
notifications.create({
|
||||||
bodyShort: '[[notifications:user_started_following_you, ' + userData.username + ']]',
|
bodyShort: '[[notifications:user_started_following_you, ' + userData.username + ']]',
|
||||||
path: nconf.get('relative_path') + '/user/' + userData.userslug,
|
|
||||||
nid: 'follow:' + data.uid + ':uid:' + socket.uid,
|
nid: 'follow:' + data.uid + ':uid:' + socket.uid,
|
||||||
from: socket.uid
|
from: socket.uid
|
||||||
}, function(err, notification) {
|
}, function(err, notification) {
|
||||||
|
|||||||
@@ -250,11 +250,24 @@ Upgrade.upgrade = function(callback) {
|
|||||||
}, next);
|
}, next);
|
||||||
}
|
}
|
||||||
|
|
||||||
Groups.list({showSystemGroups: true}, function(err, groups) {
|
async.waterfall([
|
||||||
|
async.apply(db.getSetMembers, 'groups'),
|
||||||
|
function(groups, next) {
|
||||||
|
async.filter(groups, function(group, next) {
|
||||||
|
db.getObjectField('group:' + group, 'hidden', function(err, hidden) {
|
||||||
|
next(!parseInt(hidden, 10));
|
||||||
|
}, next);
|
||||||
|
}, function(groups) {
|
||||||
|
next(null, groups);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
], function(err, groups) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
groups.push('administrators', 'registered-users');
|
||||||
|
|
||||||
async.eachLimit(cids, 50, function(cid, next) {
|
async.eachLimit(cids, 50, function(cid, next) {
|
||||||
upgradePrivileges(cid, groups, next);
|
upgradePrivileges(cid, groups, next);
|
||||||
}, next);
|
}, next);
|
||||||
@@ -445,7 +458,7 @@ Upgrade.upgrade = function(callback) {
|
|||||||
if (setting.dailyDigestFreq !== 'off') {
|
if (setting.dailyDigestFreq !== 'off') {
|
||||||
db.sortedSetAdd('digest:' + setting.dailyDigestFreq + ':uids', now, setting.uid, next);
|
db.sortedSetAdd('digest:' + setting.dailyDigestFreq + ':uids', now, setting.uid, next);
|
||||||
} else {
|
} else {
|
||||||
next(false);
|
setImmediate(next);
|
||||||
}
|
}
|
||||||
}, function(err) {
|
}, function(err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ module.exports = function(User) {
|
|||||||
'uid:' + uid + ':topics', 'uid:' + uid + ':posts',
|
'uid:' + uid + ':topics', 'uid:' + uid + ':posts',
|
||||||
'uid:' + uid + ':chats', 'uid:' + uid + ':chats:unread',
|
'uid:' + uid + ':chats', 'uid:' + uid + ':chats:unread',
|
||||||
'uid:' + uid + ':upvote', 'uid:' + uid + ':downvote',
|
'uid:' + uid + ':upvote', 'uid:' + uid + ':downvote',
|
||||||
'uid:' + uid + ':ignored:cids'
|
'uid:' + uid + ':ignored:cids', 'uid:' + uid + ':flag:pids'
|
||||||
];
|
];
|
||||||
db.deleteAll(keys, next);
|
db.deleteAll(keys, next);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -124,6 +124,13 @@ var async = require('async'),
|
|||||||
}
|
}
|
||||||
|
|
||||||
notification.path = pidToPaths[notification.pid] || notification.path || '';
|
notification.path = pidToPaths[notification.pid] || notification.path || '';
|
||||||
|
|
||||||
|
if (notification.nid.startsWith('chat')) {
|
||||||
|
notification.path = nconf.get('relative_path') + '/chats/' + notification.user.userslug;
|
||||||
|
} else if (notification.nid.startsWith('follow')) {
|
||||||
|
notification.path = nconf.get('relative_path') + '/user/' + notification.user.userslug;
|
||||||
|
}
|
||||||
|
|
||||||
notification.datetimeISO = utils.toISOString(notification.datetime);
|
notification.datetimeISO = utils.toISOString(notification.datetime);
|
||||||
return notification;
|
return notification;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -56,19 +56,25 @@
|
|||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="admin">
|
<body class="admin">
|
||||||
<div class="navbar navbar-inverse navbar-fixed-top header">
|
<nav class="navbar navbar-inverse navbar-fixed-top header">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="navbar-header">
|
<div class="navbar-header">
|
||||||
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
<a class="navbar-brand nodebb-logo" href="{relative_path}/admin/general/dashboard"><img src="{relative_path}/images/logo.png" alt="NodeBB ACP" /> Admin Control Panel <span id="breadcrumbs" class="hidden-xs"></span></a>
|
<a class="navbar-brand nodebb-logo" href="{relative_path}/admin/general/dashboard"><img src="{relative_path}/images/logo.png" alt="NodeBB ACP" /> Admin Control Panel <span id="breadcrumbs" class="hidden-xs"></span></a>
|
||||||
</div>
|
<ul class="nav navbar-nav pull-left">
|
||||||
<ul class="nav navbar-nav">
|
|
||||||
<li>
|
<li>
|
||||||
<a href="#" id="reconnect"></a>
|
<a href="#" id="reconnect"></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
</div>
|
||||||
<ul id="logged-in-menu" class="nav navbar-nav navbar-right">
|
<div class="navbar-collapse collapse">
|
||||||
<form class="navbar-form navbar-left hidden-xs" role="search">
|
<ul id="logged-in-menu" class="navbar-nav nav navbar-right pull-right">
|
||||||
|
<li style="float:left;">
|
||||||
|
<form class="navbar-form hidden-xs" role="search">
|
||||||
<div class="form-group" id="acp-search" >
|
<div class="form-group" id="acp-search" >
|
||||||
<div class="dropdown" >
|
<div class="dropdown" >
|
||||||
<input type="text" data-toggle="dropdown" class="form-control" placeholder="/">
|
<input type="text" data-toggle="dropdown" class="form-control" placeholder="/">
|
||||||
@@ -76,11 +82,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<li class="nav-home">
|
|
||||||
<a href="{relative_path}/" target="_blank" title="Open forum homepage"><i class="fa fa-home"></i></a>
|
|
||||||
</li>
|
</li>
|
||||||
|
<li id="user_label" class="dropdown pull-right">
|
||||||
<li id="user_label" class="dropdown">
|
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#" id="user_dropdown">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#" id="user_dropdown">
|
||||||
<img src="{userpicture}"/>
|
<img src="{userpicture}"/>
|
||||||
</a>
|
</a>
|
||||||
@@ -93,9 +96,15 @@
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="nav-home pull-right">
|
||||||
|
<a href="{relative_path}/" target="_blank" title="Open forum homepage" data-original-title="Open forum homepage">
|
||||||
|
<i class="fa fa-home fa-fw"></i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<div id="main-menu" class="nano">
|
<div id="main-menu" class="nano">
|
||||||
|
|||||||
@@ -2,8 +2,34 @@
|
|||||||
<div class="col-lg-9">
|
<div class="col-lg-9">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading"><i class="fa fa-flag"></i> Flags</div>
|
<div class="panel-heading"><i class="fa fa-flag"></i> Flags</div>
|
||||||
<div class="panel-body post-container" data-next="{next}">
|
<div class="panel-body" data-next="{next}">
|
||||||
|
<form id="flag-search" method="GET" action="flags">
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label>Flags by user</label>
|
||||||
|
<input type="text" class="form-control" id="byUsername" placeholder="Search flagged posts by username" name="byUsername" value="{byUsername}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Sort By</label>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<select id="flag-sort-by" class="form-control" name="sortBy">
|
||||||
|
<option value="count">Most Flags</option>
|
||||||
|
<option value="time">Most Recent</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="submit" class="btn btn-default">[[global:search]]</button>
|
||||||
|
</form>
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div class="post-container" data-next="{next}">
|
||||||
<!-- IF !posts.length -->
|
<!-- IF !posts.length -->
|
||||||
No flagged posts!
|
No flagged posts!
|
||||||
<!-- ENDIF !posts.length-->
|
<!-- ENDIF !posts.length-->
|
||||||
@@ -41,6 +67,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
<div class="col-lg-3 acp-sidebar">
|
<div class="col-lg-3 acp-sidebar">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">Flags Control Panel</div>
|
<div class="panel-heading">Flags Control Panel</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user