diff --git a/package.json b/package.json
index 29f48a1eea..a0ba7381d7 100644
--- a/package.json
+++ b/package.json
@@ -61,8 +61,8 @@
"nodebb-plugin-spam-be-gone": "0.4.10",
"nodebb-rewards-essentials": "0.0.9",
"nodebb-theme-lavender": "3.0.14",
- "nodebb-theme-persona": "4.1.45",
- "nodebb-theme-vanilla": "5.1.29",
+ "nodebb-theme-persona": "4.1.50",
+ "nodebb-theme-vanilla": "5.1.33",
"nodebb-widget-essentials": "2.0.11",
"nodemailer": "2.0.0",
"nodemailer-sendmail-transport": "1.0.0",
@@ -123,4 +123,4 @@
"url": "https://github.com/barisusakli"
}
]
-}
\ No newline at end of file
+}
diff --git a/public/language/ar/global.json b/public/language/ar/global.json
index 4c86069873..fdfd1362f8 100644
--- a/public/language/ar/global.json
+++ b/public/language/ar/global.json
@@ -96,5 +96,6 @@
"upload": "ارفع",
"allowed-file-types": "صيغ الملفات المدعومة هي 1%",
"unsaved-changes": "لديك تغييرات لم تحفظ. هل أنت متأكد من تغيير الصفحة؟",
- "reconnecting-message": "يبدو أن اتصالك لـ %1 قد فقد. رجاءًا أنتظر ثم حاول الإتصال مرة اخرى."
+ "reconnecting-message": "يبدو أن اتصالك لـ %1 قد فقد. رجاءًا أنتظر ثم حاول الإتصال مرة اخرى.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/ar/user.json b/public/language/ar/user.json
index 1e20b5b6cf..dbee05cfab 100644
--- a/public/language/ar/user.json
+++ b/public/language/ar/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/bg/global.json b/public/language/bg/global.json
index d4ffed8334..06eb4b3e59 100644
--- a/public/language/bg/global.json
+++ b/public/language/bg/global.json
@@ -96,5 +96,6 @@
"upload": "Качване",
"allowed-file-types": "Разрешените файлови типове са: %1",
"unsaved-changes": "Имате незапазени промени. Наистина ли искате да напуснете тази страница?",
- "reconnecting-message": "Изглежда връзката Ви към %1 беше прекъсната. Моля, изчакайте докато се опитаме да Ви свържем отново."
+ "reconnecting-message": "Изглежда връзката Ви към %1 беше прекъсната. Моля, изчакайте докато се опитаме да Ви свържем отново.",
+ "play": "Пускане"
}
\ No newline at end of file
diff --git a/public/language/bg/user.json b/public/language/bg/user.json
index 52c196ef97..2bac3f837e 100644
--- a/public/language/bg/user.json
+++ b/public/language/bg/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Блокиран до %1",
"info.banned-permanently": "Блокиран за постоянно",
"info.banned-reason-label": "Причина",
- "info.banned-no-reason": "Няма посочена причина."
+ "info.banned-no-reason": "Няма посочена причина.",
+ "info.username-history": "История на потребителските имена",
+ "info.email-history": "Историята на е-пощите"
}
\ No newline at end of file
diff --git a/public/language/bn/global.json b/public/language/bn/global.json
index 545020267d..35c002b5c3 100644
--- a/public/language/bn/global.json
+++ b/public/language/bn/global.json
@@ -96,5 +96,6 @@
"upload": "Upload",
"allowed-file-types": "Allowed file types are %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/bn/user.json b/public/language/bn/user.json
index 6e099a4896..59811361ce 100644
--- a/public/language/bn/user.json
+++ b/public/language/bn/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/cs/global.json b/public/language/cs/global.json
index e822b289c3..9043a00952 100644
--- a/public/language/cs/global.json
+++ b/public/language/cs/global.json
@@ -96,5 +96,6 @@
"upload": "Nahrát",
"allowed-file-types": "Povolené typy souborů jsou %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/cs/user.json b/public/language/cs/user.json
index 51ff8ce91c..5694a135f0 100644
--- a/public/language/cs/user.json
+++ b/public/language/cs/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/da/global.json b/public/language/da/global.json
index 5ef9da2842..0d07e841e8 100644
--- a/public/language/da/global.json
+++ b/public/language/da/global.json
@@ -96,5 +96,6 @@
"upload": "Upload",
"allowed-file-types": "Tilladte filtyper er %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/da/user.json b/public/language/da/user.json
index 4d82a665fb..11a2dd8a92 100644
--- a/public/language/da/user.json
+++ b/public/language/da/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/de/global.json b/public/language/de/global.json
index 2793fc58cf..99a92d3cf5 100644
--- a/public/language/de/global.json
+++ b/public/language/de/global.json
@@ -96,5 +96,6 @@
"upload": "Hochladen",
"allowed-file-types": "Erlaubte Dateitypen sind %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/de/user.json b/public/language/de/user.json
index 125580cfab..63a7e1a2e1 100644
--- a/public/language/de/user.json
+++ b/public/language/de/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Grund",
- "info.banned-no-reason": "Kein Grund angegeben."
+ "info.banned-no-reason": "Kein Grund angegeben.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/el/global.json b/public/language/el/global.json
index 34df3b45bf..a88c6acf22 100644
--- a/public/language/el/global.json
+++ b/public/language/el/global.json
@@ -96,5 +96,6 @@
"upload": "Upload",
"allowed-file-types": "Allowed file types are %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/el/user.json b/public/language/el/user.json
index 4753cfbe6d..c83190a479 100644
--- a/public/language/el/user.json
+++ b/public/language/el/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/en@pirate/global.json b/public/language/en@pirate/global.json
index aa50d9d08a..2b231e6687 100644
--- a/public/language/en@pirate/global.json
+++ b/public/language/en@pirate/global.json
@@ -96,5 +96,6 @@
"upload": "Upload",
"allowed-file-types": "Allowed file types are %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/en@pirate/user.json b/public/language/en@pirate/user.json
index 9b8a875035..9c67a66c10 100644
--- a/public/language/en@pirate/user.json
+++ b/public/language/en@pirate/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/en_GB/global.json b/public/language/en_GB/global.json
index e2785de2f5..1881b53acb 100644
--- a/public/language/en_GB/global.json
+++ b/public/language/en_GB/global.json
@@ -23,6 +23,7 @@
"you_have_successfully_logged_in": "You have successfully logged in",
"save_changes": "Save Changes",
+ "save": "Save",
"close": "Close",
"pagination": "Pagination",
diff --git a/public/language/en_GB/groups.json b/public/language/en_GB/groups.json
index 8d129fe376..2efc9a69fc 100644
--- a/public/language/en_GB/groups.json
+++ b/public/language/en_GB/groups.json
@@ -59,5 +59,7 @@
"membership.reject": "Reject",
"new-group.group_name": "Group Name:",
- "upload-group-cover": "Upload group cover"
+ "upload-group-cover": "Upload group cover",
+ "bulk-invite-instructions": "Enter a list of comma separated usernames to invite to this group",
+ "bulk-invite": "Bulk Invite"
}
\ No newline at end of file
diff --git a/public/language/en_GB/user.json b/public/language/en_GB/user.json
index 4dfd450cff..10a21ff03e 100644
--- a/public/language/en_GB/user.json
+++ b/public/language/en_GB/user.json
@@ -142,5 +142,7 @@
"info.banned-reason-label": "Reason",
"info.banned-no-reason": "No reason given.",
"info.username-history": "Username History",
- "info.email-history": "Email History"
+ "info.email-history": "Email History",
+ "info.moderation-note": "Moderation Note",
+ "info.moderation-note.success": "Moderation note saved"
}
diff --git a/public/language/en_US/global.json b/public/language/en_US/global.json
index 383516d05c..d2a0e03fa3 100644
--- a/public/language/en_US/global.json
+++ b/public/language/en_US/global.json
@@ -96,5 +96,6 @@
"upload": "Upload",
"allowed-file-types": "Allowed file types are %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/en_US/user.json b/public/language/en_US/user.json
index 057433ae31..00a3201eb2 100644
--- a/public/language/en_US/user.json
+++ b/public/language/en_US/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/es/global.json b/public/language/es/global.json
index 42a7109f6a..ba5f1ee95b 100644
--- a/public/language/es/global.json
+++ b/public/language/es/global.json
@@ -96,5 +96,6 @@
"upload": "Subir",
"allowed-file-types": "Los tipos de archivos permitidos son: %1",
"unsaved-changes": "Tienes cambios sin guardar. Seguro que quieres salir?",
- "reconnecting-message": "Has perdido la conexión. Reconectando a %1."
+ "reconnecting-message": "Has perdido la conexión. Reconectando a %1.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/es/user.json b/public/language/es/user.json
index f8a4a800e0..508ffdae32 100644
--- a/public/language/es/user.json
+++ b/public/language/es/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Baneado hasta %1",
"info.banned-permanently": "Baneado permanentemente",
"info.banned-reason-label": "Motivo",
- "info.banned-no-reason": "Motivo no especificado"
+ "info.banned-no-reason": "Motivo no especificado",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/et/global.json b/public/language/et/global.json
index 67ae319e61..12c77773ba 100644
--- a/public/language/et/global.json
+++ b/public/language/et/global.json
@@ -96,5 +96,6 @@
"upload": "Lae üles",
"allowed-file-types": "Lubatud faili formaadid on %1",
"unsaved-changes": "Sul on salvestamata muudatusi. Oled kindel, et soovid lahkuda?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/et/user.json b/public/language/et/user.json
index e0b9078d8f..1d356f8229 100644
--- a/public/language/et/user.json
+++ b/public/language/et/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Keelustatud kuni %1",
"info.banned-permanently": "Igavesti keelustatud",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/fa_IR/error.json b/public/language/fa_IR/error.json
index 4426710bc8..497dcd049a 100644
--- a/public/language/fa_IR/error.json
+++ b/public/language/fa_IR/error.json
@@ -1,9 +1,9 @@
{
"invalid-data": "داده(های) نامعتبر",
- "not-logged-in": "وارد حساب کاربری نشده اید.",
+ "not-logged-in": "وارد حساب کاربری نشدهاید.",
"account-locked": "حساب کاربری شما موقتاً مسدود شده است.",
- "search-requires-login": "استفاده از جستجو نیازمند ورود با نام کاربری و رمز عبور است. لطفا ابتدا وارد شوید.",
- "invalid-cid": "شناسه دسته نامعتبر است.",
+ "search-requires-login": "استفاده از جستجو نیازمند ورود با نامکاربری و رمزعبور است. لطفا ابتدا وارد شوید.",
+ "invalid-cid": "آیدی دستهبندی نامعتبر است.",
"invalid-tid": "شناسه موضوع نامعتبر است.",
"invalid-pid": "شناسه پست نامعتبر است.",
"invalid-uid": "شناسه کاربر نامعتبر است.",
diff --git a/public/language/fa_IR/global.json b/public/language/fa_IR/global.json
index 386c069b39..476d95651f 100644
--- a/public/language/fa_IR/global.json
+++ b/public/language/fa_IR/global.json
@@ -96,5 +96,6 @@
"upload": "بارگذاری",
"allowed-file-types": "فایل قابل قبول اینها هستند %1",
"unsaved-changes": "تغییرات شما ذخیره نشده. شما مطمئن هستید که میخواهید از اینجا دور شوید؟",
- "reconnecting-message": "اتصال شما به %1 به نظر میرسد از دست رفته. لطفا صبر کنید ما سعی میکنیم که دوباره شما را متصل کنیم."
+ "reconnecting-message": "اتصال شما به %1 به نظر میرسد از دست رفته. لطفا صبر کنید ما سعی میکنیم که دوباره شما را متصل کنیم.",
+ "play": "پخش"
}
\ No newline at end of file
diff --git a/public/language/fa_IR/user.json b/public/language/fa_IR/user.json
index 71224d0abe..6e0fd1416a 100644
--- a/public/language/fa_IR/user.json
+++ b/public/language/fa_IR/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "مسدود شده تا %1",
"info.banned-permanently": "مسدود شده به طور دائم",
"info.banned-reason-label": "دلیل",
- "info.banned-no-reason": "هیچ دلیلی ارایه نشد."
+ "info.banned-no-reason": "هیچ دلیلی ارایه نشد.",
+ "info.username-history": "تاریخچه نام کاربری",
+ "info.email-history": "تاریخچه رایانامه"
}
\ No newline at end of file
diff --git a/public/language/fa_IR/users.json b/public/language/fa_IR/users.json
index 81b664bbb1..0e470d9fef 100644
--- a/public/language/fa_IR/users.json
+++ b/public/language/fa_IR/users.json
@@ -1,7 +1,7 @@
{
"latest_users": "آخرین کاربران",
"top_posters": "برترین فرستندهها",
- "most_reputation": "بیشترین اعتبار",
+ "most_reputation": "بیشترین اعتبار",
"most_flags": "بیشترین پرچمها",
"search": "جستجو",
"enter_username": "یک نام کاربری برای جستجو وارد کنید",
@@ -10,12 +10,12 @@
"filter-by": "فیلتر با",
"online-only": "فقط آنلاین",
"invite": "دعوت",
- "invitation-email-sent": "ایمیل دعوتنامه برای %1 ارسال شد",
+ "invitation-email-sent": "رایانامه دعوتنامه برای %1 ارسال شد",
"user_list": "فهرست کاربران",
"recent_topics": "موضوعهای اخیر",
"popular_topics": "موضوعهای پربازدید",
"unread_topics": "موضوعهای خوانده نشده",
- "categories": "دستهها",
+ "categories": "دستهبندیها",
"tags": "برچسبها",
"no-users-found": "کاربری پیدا نشد!"
}
\ No newline at end of file
diff --git a/public/language/fi/global.json b/public/language/fi/global.json
index 434aece0f3..a56b79e888 100644
--- a/public/language/fi/global.json
+++ b/public/language/fi/global.json
@@ -96,5 +96,6 @@
"upload": "Upload",
"allowed-file-types": "Allowed file types are %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/fi/user.json b/public/language/fi/user.json
index bc44655d7d..ad20653c29 100644
--- a/public/language/fi/user.json
+++ b/public/language/fi/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/fr/global.json b/public/language/fr/global.json
index a37d6fa925..84d20f4319 100644
--- a/public/language/fr/global.json
+++ b/public/language/fr/global.json
@@ -96,5 +96,6 @@
"upload": "Envoyer",
"allowed-file-types": "Les types de fichiers autorisés sont : %1",
"unsaved-changes": "Vous avez des modifications non sauvegardées. Êtes-vous sûr de vouloir naviguer tout de même ?",
- "reconnecting-message": "Il semble que votre connexion ait été perdue, veuillez patienter pendant que nous vous re-connectons."
+ "reconnecting-message": "Il semble que votre connexion ait été perdue, veuillez patienter pendant que nous vous re-connectons.",
+ "play": "Lire"
}
\ No newline at end of file
diff --git a/public/language/fr/user.json b/public/language/fr/user.json
index 66d9fd4267..c6633441f3 100644
--- a/public/language/fr/user.json
+++ b/public/language/fr/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banni jusqu'au %1",
"info.banned-permanently": "Banni de façon permanente",
"info.banned-reason-label": "Raison",
- "info.banned-no-reason": "Aucune raison donnée"
+ "info.banned-no-reason": "Aucune raison donnée",
+ "info.username-history": "Historique des noms d'utilisateur",
+ "info.email-history": "Historique des adresses email"
}
\ No newline at end of file
diff --git a/public/language/gl/global.json b/public/language/gl/global.json
index 0f8663d96f..f2aa29ee3d 100644
--- a/public/language/gl/global.json
+++ b/public/language/gl/global.json
@@ -96,5 +96,6 @@
"upload": "Subir",
"allowed-file-types": "Os tipos de arquivos permitidos son: %1",
"unsaved-changes": "Non gardaches tódolos cambios. Queres continuar e saír da páxina?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/gl/user.json b/public/language/gl/user.json
index 075c2d5c51..3fd472308b 100644
--- a/public/language/gl/user.json
+++ b/public/language/gl/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Baneado hasta 1%",
"info.banned-permanently": "Baneado permanentemente",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/he/global.json b/public/language/he/global.json
index 8f2c2347b2..a5dc920333 100644
--- a/public/language/he/global.json
+++ b/public/language/he/global.json
@@ -96,5 +96,6 @@
"upload": "העלה",
"allowed-file-types": "פורמטי הקבצים המורשים הם %1",
"unsaved-changes": "יש לך שינויים שאינם נשמרו. האם הנך בטוח שברצונך להמשיך?",
- "reconnecting-message": "נראה שההתחברות שלך אל %1 אבדה, אנא המתן בזמן שהמערכת מנסה לחבר אותך מחדש"
+ "reconnecting-message": "נראה שההתחברות שלך אל %1 אבדה, אנא המתן בזמן שהמערכת מנסה לחבר אותך מחדש",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/he/user.json b/public/language/he/user.json
index e16b685fee..7373c8c74c 100644
--- a/public/language/he/user.json
+++ b/public/language/he/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/hu/global.json b/public/language/hu/global.json
index 1aae7c960b..fbca98ab9f 100644
--- a/public/language/hu/global.json
+++ b/public/language/hu/global.json
@@ -96,5 +96,6 @@
"upload": "Upload",
"allowed-file-types": "Allowed file types are %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/hu/user.json b/public/language/hu/user.json
index b852439d9e..40710b2266 100644
--- a/public/language/hu/user.json
+++ b/public/language/hu/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/id/global.json b/public/language/id/global.json
index 313a120729..9d596c7d6e 100644
--- a/public/language/id/global.json
+++ b/public/language/id/global.json
@@ -96,5 +96,6 @@
"upload": "Upload",
"allowed-file-types": "Allowed file types are %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/id/user.json b/public/language/id/user.json
index 666ba89276..d0c0032195 100644
--- a/public/language/id/user.json
+++ b/public/language/id/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/it/global.json b/public/language/it/global.json
index 8aa3659f7d..57bbaa0164 100644
--- a/public/language/it/global.json
+++ b/public/language/it/global.json
@@ -96,5 +96,6 @@
"upload": "Carica",
"allowed-file-types": "Le estensioni permesse dei file sono %1",
"unsaved-changes": "Hai delle modifiche non salvate. Sei sicuro che vuoi lasciare la pagina?",
- "reconnecting-message": "Sembra che la tua connessione a %1 sia stata persa, per favore attenti mentre proviamo a riconnetterti."
+ "reconnecting-message": "Sembra che la tua connessione a %1 sia stata persa, per favore attenti mentre proviamo a riconnetterti.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/it/user.json b/public/language/it/user.json
index 3cc0daa921..0042f1ba9f 100644
--- a/public/language/it/user.json
+++ b/public/language/it/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Bannato fino %1",
"info.banned-permanently": "Bannato permanentemente",
"info.banned-reason-label": "Motivo",
- "info.banned-no-reason": "Non è stata data nessuna motivazione."
+ "info.banned-no-reason": "Non è stata data nessuna motivazione.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/ja/global.json b/public/language/ja/global.json
index 107ae13ee7..e38ea7315b 100644
--- a/public/language/ja/global.json
+++ b/public/language/ja/global.json
@@ -96,5 +96,6 @@
"upload": "Upload",
"allowed-file-types": "Allowed file types are %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/ja/user.json b/public/language/ja/user.json
index 613332cdb2..9379383b8a 100644
--- a/public/language/ja/user.json
+++ b/public/language/ja/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/ko/global.json b/public/language/ko/global.json
index 6e9b7b3a93..9fd5fa47ef 100644
--- a/public/language/ko/global.json
+++ b/public/language/ko/global.json
@@ -96,5 +96,6 @@
"upload": "업로드",
"allowed-file-types": "사용가능한 파일 유형: %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/ko/user.json b/public/language/ko/user.json
index 8937d90611..b58a7d9480 100644
--- a/public/language/ko/user.json
+++ b/public/language/ko/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/lt/global.json b/public/language/lt/global.json
index 1ffeb7040a..1a6070a82c 100644
--- a/public/language/lt/global.json
+++ b/public/language/lt/global.json
@@ -96,5 +96,6 @@
"upload": "Upload",
"allowed-file-types": "Allowed file types are %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/lt/user.json b/public/language/lt/user.json
index 3046cca2e8..2b52a624bd 100644
--- a/public/language/lt/user.json
+++ b/public/language/lt/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Užblokuotas iki %1",
"info.banned-permanently": "Užblokuotas visam laikui",
"info.banned-reason-label": "Priežastis",
- "info.banned-no-reason": "Be priežasties"
+ "info.banned-no-reason": "Be priežasties",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/ms/global.json b/public/language/ms/global.json
index 40d6209ba9..e651a3fdf1 100644
--- a/public/language/ms/global.json
+++ b/public/language/ms/global.json
@@ -96,5 +96,6 @@
"upload": "Upload",
"allowed-file-types": "Allowed file types are %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/ms/user.json b/public/language/ms/user.json
index 3cbbcf1e26..3d9402845d 100644
--- a/public/language/ms/user.json
+++ b/public/language/ms/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/nb/global.json b/public/language/nb/global.json
index 020fe6aa62..03ab9adf9f 100644
--- a/public/language/nb/global.json
+++ b/public/language/nb/global.json
@@ -96,5 +96,6 @@
"upload": "Upload",
"allowed-file-types": "Allowed file types are %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/nb/user.json b/public/language/nb/user.json
index 75c3a35287..0fed01f667 100644
--- a/public/language/nb/user.json
+++ b/public/language/nb/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/nl/global.json b/public/language/nl/global.json
index bf94e340b2..2cf9f0d6f6 100644
--- a/public/language/nl/global.json
+++ b/public/language/nl/global.json
@@ -96,5 +96,6 @@
"upload": "Upload",
"allowed-file-types": "Toegestane bestandstypen zijn %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/nl/user.json b/public/language/nl/user.json
index f8c51f1d35..a06c32c5cb 100644
--- a/public/language/nl/user.json
+++ b/public/language/nl/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Verbannen tot %1",
"info.banned-permanently": "Voor altijd verbannen",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/pl/error.json b/public/language/pl/error.json
index 9e2e24f64d..b865879460 100644
--- a/public/language/pl/error.json
+++ b/public/language/pl/error.json
@@ -29,7 +29,7 @@
"username-too-long": "Zbyt długa nazwa użytkownika",
"password-too-long": "Hasło jest za długie",
"user-banned": "Użytkownik zbanowany",
- "user-banned-reason": "User banned (Reason: %1)",
+ "user-banned-reason": "Użytkownik zbanowany (powód: %1)",
"user-too-new": "Przepraszamy, musisz odczekać %1 sekund(y) przed utworzeniem pierwszego posta",
"blacklisted-ip": "Twój adres IP został zablokowany na tej społeczności. Jeśli uważasz to za błąd, zgłoś to administratorowi",
"ban-expiry-missing": "Wprowadź datę końca blokady",
diff --git a/public/language/pl/global.json b/public/language/pl/global.json
index b3e8819172..cccd6705d6 100644
--- a/public/language/pl/global.json
+++ b/public/language/pl/global.json
@@ -96,5 +96,6 @@
"upload": "Załaduj",
"allowed-file-types": "Dozwolone typy plików %1",
"unsaved-changes": "Posiadasz niezapisane zmiany. Jesteś pewien, że chcesz opuścić stronę?",
- "reconnecting-message": "Wygląda na to, że Twoje połączenie z %1 zostało przerwane. Proszę czekać gdy staramy się je odnowić."
+ "reconnecting-message": "Wygląda na to, że Twoje połączenie z %1 zostało przerwane. Proszę czekać gdy staramy się je odnowić.",
+ "play": "Odtwórz"
}
\ No newline at end of file
diff --git a/public/language/pl/topic.json b/public/language/pl/topic.json
index dc5ec1e37c..cf2c18fbe3 100644
--- a/public/language/pl/topic.json
+++ b/public/language/pl/topic.json
@@ -51,7 +51,7 @@
"not-watching.description": "Nie informuj mnie o nowych odpowiedziach
Pokaż temat w nieprzeczytanych, jeśli kategoria nie jest ignorowana.",
"ignoring.description": "Nie informuj mnie o nowych odpowiedziach
Nie pokazuj tematu w nieprzeczytanych.",
"thread_tools.title": "Narzędzia Tematu",
- "thread_tools.markAsUnreadForAll": "Mark unread for all",
+ "thread_tools.markAsUnreadForAll": "Zaznacz wszystkie jako nieprzeczytane",
"thread_tools.pin": "Przypnij Temat",
"thread_tools.unpin": "Odepnij Temat",
"thread_tools.lock": "Zablokuj Temat",
diff --git a/public/language/pl/user.json b/public/language/pl/user.json
index 10d7b78316..0fc4ba0af9 100644
--- a/public/language/pl/user.json
+++ b/public/language/pl/user.json
@@ -93,7 +93,7 @@
"incoming-message-sound": "Dźwięk przychodzącej wiadomości",
"outgoing-message-sound": "Dźwięk wychodzącej wiadomości",
"notification-sound": "Dźwięk powiadomienia",
- "no-sound": "No sound",
+ "no-sound": "Bez dźwięku",
"browsing": "Ustawienia szukania",
"open_links_in_new_tab": "Otwieraj linki wychodzące w nowej karcie",
"enable_topic_searching": "Odblokuj szukanie w temacie",
@@ -121,5 +121,7 @@
"info.banned-until": "Zbanowany do %1",
"info.banned-permanently": "Zbanowany permanentnie",
"info.banned-reason-label": "Powód",
- "info.banned-no-reason": "Nie podano powodu."
+ "info.banned-no-reason": "Nie podano powodu.",
+ "info.username-history": "Historia nazwy użytkownika",
+ "info.email-history": "Historia adresu e-mail"
}
\ No newline at end of file
diff --git a/public/language/pt_BR/error.json b/public/language/pt_BR/error.json
index b99b1bada0..38571fe60d 100644
--- a/public/language/pt_BR/error.json
+++ b/public/language/pt_BR/error.json
@@ -29,7 +29,7 @@
"username-too-long": "Nome de usuário muito longo",
"password-too-long": "A senha é muito grande",
"user-banned": "Usuário banido",
- "user-banned-reason": "User banned (Reason: %1)",
+ "user-banned-reason": "Usuário banido (Motivo: %1)",
"user-too-new": "Desculpe, é necessário que você aguarde %1 segundo(s) antes de fazer o seu primeiro post.",
"blacklisted-ip": "Desculpe, o seu endereço IP foi banido desta comunidade. Se você acha que isso é um engano, por favor contate um administrador.",
"ban-expiry-missing": "Por favor forneça uma data para o fim deste banimento",
diff --git a/public/language/pt_BR/global.json b/public/language/pt_BR/global.json
index 3b9cb20fea..7e3b515eed 100644
--- a/public/language/pt_BR/global.json
+++ b/public/language/pt_BR/global.json
@@ -96,5 +96,6 @@
"upload": "Upload",
"allowed-file-types": "Os tipos de arquivo permitidos são %1",
"unsaved-changes": "Você tem alterações não salvas. Tem certeza que você deseja sair da página?",
- "reconnecting-message": "Parece que sua conexão com %1 caiu, por favor aguarde enquanto tentamos reconectar."
+ "reconnecting-message": "Parece que sua conexão com %1 caiu, por favor aguarde enquanto tentamos reconectar.",
+ "play": "Executar"
}
\ No newline at end of file
diff --git a/public/language/pt_BR/topic.json b/public/language/pt_BR/topic.json
index 2b74650131..3d7531fadd 100644
--- a/public/language/pt_BR/topic.json
+++ b/public/language/pt_BR/topic.json
@@ -51,7 +51,7 @@
"not-watching.description": "Não me notificar de novas respostas.
Mostrar tópico em não-lido se a categoria não estiver sendo ignorada.",
"ignoring.description": "Não me notificar de novas respostas.
Não mostrar tópico em não-lido.",
"thread_tools.title": "Ferramentas de Tópico",
- "thread_tools.markAsUnreadForAll": "Mark unread for all",
+ "thread_tools.markAsUnreadForAll": "Marcar como não-lido para todos",
"thread_tools.pin": "Fixar Tópico",
"thread_tools.unpin": "Desfixar Tópico",
"thread_tools.lock": "Trancar Tópico",
diff --git a/public/language/pt_BR/user.json b/public/language/pt_BR/user.json
index e1a090a9b9..2d306417f6 100644
--- a/public/language/pt_BR/user.json
+++ b/public/language/pt_BR/user.json
@@ -93,7 +93,7 @@
"incoming-message-sound": "Som de recebimento de mensagem",
"outgoing-message-sound": "Som de envio de mensagem",
"notification-sound": "Som de notificação",
- "no-sound": "No sound",
+ "no-sound": "Sem som",
"browsing": "Configurações de Navegação",
"open_links_in_new_tab": "Abrir links externos em nova aba",
"enable_topic_searching": "Habilitar Pesquisa dentro de Tópico",
@@ -121,5 +121,7 @@
"info.banned-until": "Banido até %1",
"info.banned-permanently": "Banido permanentemente",
"info.banned-reason-label": "Motivo",
- "info.banned-no-reason": "Sem motivo escolhido."
+ "info.banned-no-reason": "Sem motivo escolhido.",
+ "info.username-history": "Histórico do Nome de Usuário",
+ "info.email-history": "Histórico do Email"
}
\ No newline at end of file
diff --git a/public/language/ro/global.json b/public/language/ro/global.json
index c634e3a1c8..f8b346044f 100644
--- a/public/language/ro/global.json
+++ b/public/language/ro/global.json
@@ -96,5 +96,6 @@
"upload": "Încărcați",
"allowed-file-types": "Tipuri de fișiere permise sunt %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/ro/user.json b/public/language/ro/user.json
index fa33cfde6b..9ed9377725 100644
--- a/public/language/ro/user.json
+++ b/public/language/ro/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/ru/global.json b/public/language/ru/global.json
index f2b3f3d8c5..9c584431ed 100644
--- a/public/language/ru/global.json
+++ b/public/language/ru/global.json
@@ -96,5 +96,6 @@
"upload": "Загрузить",
"allowed-file-types": "Разрешенные форматы файлов %1",
"unsaved-changes": "У вас есть несохраненные изменения. Вы уверены, что хотите уйти?",
- "reconnecting-message": "Похоже, подключение к %1 было разорвано, подождите, пока мы пытаемся восстановить соединение."
+ "reconnecting-message": "Похоже, подключение к %1 было разорвано, подождите, пока мы пытаемся восстановить соединение.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/ru/user.json b/public/language/ru/user.json
index 2e2fe18957..ab372b0d1a 100644
--- a/public/language/ru/user.json
+++ b/public/language/ru/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Заблокирован до %1",
"info.banned-permanently": "Заблокирован навсегда",
"info.banned-reason-label": "Причина",
- "info.banned-no-reason": "Без объяснения причин."
+ "info.banned-no-reason": "Без объяснения причин.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/rw/global.json b/public/language/rw/global.json
index bb0164820c..f0922ae9ac 100644
--- a/public/language/rw/global.json
+++ b/public/language/rw/global.json
@@ -96,5 +96,6 @@
"upload": "Pakira",
"allowed-file-types": "Ubwoko bw'amafayilo bwemewe ni %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/rw/user.json b/public/language/rw/user.json
index 5b65837c81..ab2f435f54 100644
--- a/public/language/rw/user.json
+++ b/public/language/rw/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/sc/global.json b/public/language/sc/global.json
index a5b6a3e20f..159188e8c2 100644
--- a/public/language/sc/global.json
+++ b/public/language/sc/global.json
@@ -96,5 +96,6 @@
"upload": "Upload",
"allowed-file-types": "Allowed file types are %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/sc/user.json b/public/language/sc/user.json
index 23f54011e1..90746c1fe8 100644
--- a/public/language/sc/user.json
+++ b/public/language/sc/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/sk/global.json b/public/language/sk/global.json
index 7a2ac8cbaa..f184a5f15a 100644
--- a/public/language/sk/global.json
+++ b/public/language/sk/global.json
@@ -96,5 +96,6 @@
"upload": "Upload",
"allowed-file-types": "Allowed file types are %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/sk/user.json b/public/language/sk/user.json
index 1b0005c625..a98ec25207 100644
--- a/public/language/sk/user.json
+++ b/public/language/sk/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/sl/global.json b/public/language/sl/global.json
index 14ae52986b..e1bd5970e0 100644
--- a/public/language/sl/global.json
+++ b/public/language/sl/global.json
@@ -51,7 +51,7 @@
"users": "Uporabniki",
"topics": "Teme",
"posts": "Objave",
- "best": "Najbolše",
+ "best": "Najboljše",
"upvoters": "Glasovalcev za",
"upvoted": "Glasov za",
"downvoters": "Glasovalcev proti",
@@ -96,5 +96,6 @@
"upload": "Prenos",
"allowed-file-types": "Dovoljene vrste datotek so %1",
"unsaved-changes": "Imate neshranjene spremembe. A res želite stran?",
- "reconnecting-message": "Kot kaže je bila povezava do %1 prekinjena. Počakajte, ponovno poskušamo vzpostaviti povezavo."
+ "reconnecting-message": "Kot kaže je bila povezava do %1 prekinjena. Počakajte, ponovno poskušamo vzpostaviti povezavo.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/sl/tags.json b/public/language/sl/tags.json
index df2187edd8..90d0a74dc2 100644
--- a/public/language/sl/tags.json
+++ b/public/language/sl/tags.json
@@ -1,7 +1,7 @@
{
"no_tag_topics": "Ni novih tem s to oznako.",
"tags": "Oznake",
- "enter_tags_here": "Tu vpišite oznake. Dovoljeno število znakov: najmaj %1 in največ 2%.",
+ "enter_tags_here": "Tu vpišite oznake. Dovoljeno število znakov: najmaj %1 in največ %2.",
"enter_tags_here_short": "Vpišite oznake...",
"no_tags": "Oznak še ni."
}
\ No newline at end of file
diff --git a/public/language/sl/user.json b/public/language/sl/user.json
index 26d2040d4b..fedcef19fc 100644
--- a/public/language/sl/user.json
+++ b/public/language/sl/user.json
@@ -62,7 +62,7 @@
"upload_a_picture": "Naloži fotografijo",
"remove_uploaded_picture": "Odstrani preneseno sliko ",
"upload_cover_picture": "Prenesi fotografijo naslovnice",
- "settings": "Nastavitve.",
+ "settings": "Nastavitve",
"show_email": "Pokaži moj e-poštni naslov.",
"show_fullname": "Pokaži moj ime in priimek.",
"restrict_chats": "Dovoli klepet samo z osebami, ki jim sledim.",
@@ -89,11 +89,11 @@
"topics_per_page": "Število tem na stran",
"posts_per_page": "Število objav na stran",
"notification_sounds": "Zvočno me opozori, ko prejmem obvestilo",
- "notifications_and_sounds": "Notifications & Sounds",
- "incoming-message-sound": "Incoming message sound",
- "outgoing-message-sound": "Outgoing message sound",
- "notification-sound": "Notification sound",
- "no-sound": "No sound",
+ "notifications_and_sounds": "Obvestila in zvoki",
+ "incoming-message-sound": "Zvok za prejeto sporočilo",
+ "outgoing-message-sound": "Zvok za poslano sporočilo",
+ "notification-sound": "Zvok obvestila",
+ "no-sound": "Ni zvoka",
"browsing": "Preglej nastavitve",
"open_links_in_new_tab": "Zunanje povezave odpri v novem zavihku",
"enable_topic_searching": "Omogoči iskanje znotraj teme",
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/sr/global.json b/public/language/sr/global.json
index 8af7ca5b1d..57615dd8df 100644
--- a/public/language/sr/global.json
+++ b/public/language/sr/global.json
@@ -96,5 +96,6 @@
"upload": "Upload",
"allowed-file-types": "Allowed file types are %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/sr/user.json b/public/language/sr/user.json
index c4f7639e10..824efb8cc5 100644
--- a/public/language/sr/user.json
+++ b/public/language/sr/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/sv/global.json b/public/language/sv/global.json
index 992f2a32fe..50e107b718 100644
--- a/public/language/sv/global.json
+++ b/public/language/sv/global.json
@@ -96,5 +96,6 @@
"upload": "Ladda upp",
"allowed-file-types": "Tillåtna filtyper är %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/sv/user.json b/public/language/sv/user.json
index 03ba94fc00..74baf42d74 100644
--- a/public/language/sv/user.json
+++ b/public/language/sv/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/th/global.json b/public/language/th/global.json
index 09e26d956a..94080b0922 100644
--- a/public/language/th/global.json
+++ b/public/language/th/global.json
@@ -96,5 +96,6 @@
"upload": "Upload",
"allowed-file-types": "Allowed file types are %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/th/user.json b/public/language/th/user.json
index af15ad9890..41048b8c6a 100644
--- a/public/language/th/user.json
+++ b/public/language/th/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/tr/error.json b/public/language/tr/error.json
index 65c8a3586f..7ae7eff012 100644
--- a/public/language/tr/error.json
+++ b/public/language/tr/error.json
@@ -29,7 +29,7 @@
"username-too-long": "Kullanıcı ismi çok uzun.",
"password-too-long": "Parola çok uzun",
"user-banned": "Kullanıcı Yasaklı",
- "user-banned-reason": "User banned (Reason: %1)",
+ "user-banned-reason": "Kullanıcı yasaklandı (Sebep: %1)",
"user-too-new": "Özür dileriz, ilk iletinizi yapmadan önce %1 saniye beklemeniz gerekiyor",
"blacklisted-ip": "Üzgünüz, IP adresiniz, bu toplulukta yasaklandı. Bunun bir hata olduğunu düşünüyorsanız, bir yönetici ile irtibata geçiniz.",
"ban-expiry-missing": "Bu yasak için bir bitiş tarihi girin",
diff --git a/public/language/tr/global.json b/public/language/tr/global.json
index 59c01ab819..98c65856b4 100644
--- a/public/language/tr/global.json
+++ b/public/language/tr/global.json
@@ -96,5 +96,6 @@
"upload": "Yükle",
"allowed-file-types": "İzin verilen dosya tipleri %1",
"unsaved-changes": "Kaydedilmemiş değişiklikler var. Çıkmak istediğinize emin misiniz?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Oynat"
}
\ No newline at end of file
diff --git a/public/language/tr/topic.json b/public/language/tr/topic.json
index d46d9dc0b5..56d3adc900 100644
--- a/public/language/tr/topic.json
+++ b/public/language/tr/topic.json
@@ -51,7 +51,7 @@
"not-watching.description": "Yeni bir ileti geldiğinde bildirme.
Kategori susturulmamışsa okunmamış olarak göster.",
"ignoring.description": "Yeni bir ileti geldiğinde bildirme.
Okunmamış olarak gösterme.",
"thread_tools.title": "Konu Ayaları",
- "thread_tools.markAsUnreadForAll": "Mark unread for all",
+ "thread_tools.markAsUnreadForAll": "Hepsini okundu işaretle",
"thread_tools.pin": "Başlığı İğnele",
"thread_tools.unpin": "Başlığı İğneleme",
"thread_tools.lock": "Başlığı Kitle",
diff --git a/public/language/tr/user.json b/public/language/tr/user.json
index 4922ec388f..1d7b966ecb 100644
--- a/public/language/tr/user.json
+++ b/public/language/tr/user.json
@@ -93,7 +93,7 @@
"incoming-message-sound": "Gelen mesaj sesi",
"outgoing-message-sound": "Giden ileti sesi",
"notification-sound": "Bildiri sesi",
- "no-sound": "No sound",
+ "no-sound": "Ses yok",
"browsing": "Tarayıcı Ayaları",
"open_links_in_new_tab": "Dışarı giden bağlantıları yeni sekmede aç",
"enable_topic_searching": "Konu içi aramayı aktive et",
@@ -121,5 +121,7 @@
"info.banned-until": "Yasaklama süresi %1",
"info.banned-permanently": "Kalıcı yasakla",
"info.banned-reason-label": "Gerekçe",
- "info.banned-no-reason": "Gerekçe belirtilmedi."
+ "info.banned-no-reason": "Gerekçe belirtilmedi.",
+ "info.username-history": "Kullanıcı Adı Geçmişi",
+ "info.email-history": "Email Geçmişi"
}
\ No newline at end of file
diff --git a/public/language/vi/global.json b/public/language/vi/global.json
index 01890dcd33..5d16408aae 100644
--- a/public/language/vi/global.json
+++ b/public/language/vi/global.json
@@ -96,5 +96,6 @@
"upload": "Tải lên",
"allowed-file-types": "Các định dạng file được cho phép là %1",
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
- "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect."
+ "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/vi/user.json b/public/language/vi/user.json
index 0d3666bbe7..55615761b0 100644
--- a/public/language/vi/user.json
+++ b/public/language/vi/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "Banned until %1",
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
- "info.banned-no-reason": "No reason given."
+ "info.banned-no-reason": "No reason given.",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/zh_CN/global.json b/public/language/zh_CN/global.json
index 23a31f52a6..67baf99e9d 100644
--- a/public/language/zh_CN/global.json
+++ b/public/language/zh_CN/global.json
@@ -96,5 +96,6 @@
"upload": "上传",
"allowed-file-types": "允许的文件类型有 %1",
"unsaved-changes": "您有未保存的更改,您确定您要离开么?",
- "reconnecting-message": "与 %1 的连接断开,我们正在尝试重连,请耐心等待"
+ "reconnecting-message": "与 %1 的连接断开,我们正在尝试重连,请耐心等待",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/zh_CN/user.json b/public/language/zh_CN/user.json
index 4f61238f56..fac99339d1 100644
--- a/public/language/zh_CN/user.json
+++ b/public/language/zh_CN/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "封禁到 %1",
"info.banned-permanently": "永久封禁",
"info.banned-reason-label": "原因",
- "info.banned-no-reason": "没有原因"
+ "info.banned-no-reason": "没有原因",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/language/zh_TW/global.json b/public/language/zh_TW/global.json
index 54a8ce2248..6c523cf698 100644
--- a/public/language/zh_TW/global.json
+++ b/public/language/zh_TW/global.json
@@ -96,5 +96,6 @@
"upload": "上傳",
"allowed-file-types": "允許的檔案類型是 %1",
"unsaved-changes": "你還沒有儲存更動。你確定想要離開這個頁面?",
- "reconnecting-message": "看起來你的連線到 %1 已經遺失,請稍等一下我們嘗試重新連線。"
+ "reconnecting-message": "看起來你的連線到 %1 已經遺失,請稍等一下我們嘗試重新連線。",
+ "play": "Play"
}
\ No newline at end of file
diff --git a/public/language/zh_TW/user.json b/public/language/zh_TW/user.json
index 99e3adca75..d25b5fc25b 100644
--- a/public/language/zh_TW/user.json
+++ b/public/language/zh_TW/user.json
@@ -121,5 +121,7 @@
"info.banned-until": "禁用至 %1",
"info.banned-permanently": "永久禁用",
"info.banned-reason-label": "理由",
- "info.banned-no-reason": "沒有給理由"
+ "info.banned-no-reason": "沒有給理由",
+ "info.username-history": "Username History",
+ "info.email-history": "Email History"
}
\ No newline at end of file
diff --git a/public/src/admin/admin.js b/public/src/admin/admin.js
index 5647f8b2d7..4351f4eae3 100644
--- a/public/src/admin/admin.js
+++ b/public/src/admin/admin.js
@@ -1,5 +1,5 @@
"use strict";
-/*global config, componentHandler, define, socket, app, ajaxify, utils, bootbox, Slideout, NProgress, RELATIVE_PATH*/
+/*global config, componentHandler, socket, app, bootbox, Slideout, NProgress*/
(function() {
var logoutTimer = 0;
@@ -31,7 +31,7 @@
function showCorrectNavTab() {
// show correct tab if url has #
if (window.location.hash) {
- $('.nav-pills a[href=' + window.location.hash + ']').tab('show');
+ $('.nav-pills a[href="' + window.location.hash + '"]').tab('show');
}
}
@@ -52,8 +52,6 @@
});
$(window).on('action:ajaxify.contentLoaded', function(ev, data) {
- var url = data.url;
-
selectMenuItem(data.url);
setupRestartLinks();
@@ -65,7 +63,7 @@
NProgress.set(0.7);
});
- $(window).on('action:ajaxify.end', function(ev, data) {
+ $(window).on('action:ajaxify.end', function() {
NProgress.done();
});
}
@@ -82,7 +80,7 @@
socket.emit('admin.restart');
});
- mousetrap.bind('/', function(event) {
+ mousetrap.bind('/', function() {
$('#acp-search input').focus();
return false;
diff --git a/public/src/client/account/info.js b/public/src/client/account/info.js
index b95f68b838..3e1a218827 100644
--- a/public/src/client/account/info.js
+++ b/public/src/client/account/info.js
@@ -1,13 +1,26 @@
'use strict';
-/* globals define */
+/* globals define, socket, ajaxify, app */
define('forum/account/info', ['forum/account/header'], function(header) {
var Info = {};
Info.init = function() {
header.init();
+ handleModerationNote();
};
+ function handleModerationNote() {
+ $('[component="account/save-moderation-note"]').on('click', function() {
+ var note = $('[component="account/moderation-note"]').val();
+ socket.emit('user.setModerationNote', {uid: ajaxify.data.uid, note: note}, function(err) {
+ if (err) {
+ return app.alertError(err.message);
+ }
+ app.alertSuccess('[[user:info.moderation-note.success]]');
+ });
+ });
+ }
+
return Info;
});
diff --git a/public/src/client/categoryTools.js b/public/src/client/categoryTools.js
index 970ab29d4a..8344ddf355 100644
--- a/public/src/client/categoryTools.js
+++ b/public/src/client/categoryTools.js
@@ -68,7 +68,9 @@ define('forum/categoryTools', ['forum/topic/move', 'topicSelect', 'components',
return app.alertError(err.message);
}
app.alertSuccess('[[topic:markAsUnreadForAll.success]]');
-
+ tids.forEach(function(tid) {
+ $('[component="category/topic"][data-tid="' + tid + '"]').addClass('unread');
+ });
onCommandComplete();
});
}
diff --git a/public/src/client/chats.js b/public/src/client/chats.js
index 619dbc9ec0..2435042289 100644
--- a/public/src/client/chats.js
+++ b/public/src/client/chats.js
@@ -81,6 +81,39 @@ define('forum/chats', [
Chats.addSinceHandler(ajaxify.data.roomId, $('.expanded-chat .chat-content'), $('.expanded-chat [data-since]'));
Chats.addRenameHandler(ajaxify.data.roomId, $('[component="chat/room/name"]'));
+ Chats.addScrollHandler(ajaxify.data.roomId, ajaxify.data.uid, $('.chat-content'));
+ };
+
+ Chats.addScrollHandler = function(roomId, uid, el) {
+ var loading = false;
+ el.off('scroll').on('scroll', function() {
+ if (loading) {
+ return;
+ }
+
+ var top = (el[0].scrollHeight - el.height()) * 0.1;
+ if (el.scrollTop() >= top) {
+ return;
+ }
+ loading = true;
+
+ socket.emit('modules.chats.getMessages', {roomId: roomId, uid: uid, start: $('.chat-content').children('[data-index]').first().attr('data-index')}, function(err, data) {
+ if (err) {
+ return app.alertError(err.message);
+ }
+
+ messages.parseMessage(data, function(html) {
+ var currentScrollTop = el.scrollTop();
+ var previousHeight = el[0].scrollHeight;
+ html = $(html);
+ el.prepend(html);
+ html.find('.timeago').timeago();
+ html.find('img:not(.not-responsive)').addClass('img-responsive');
+ el.scrollTop((el[0].scrollHeight - previousHeight) + currentScrollTop);
+ loading = false;
+ });
+ });
+ });
};
Chats.addEditDeleteHandler = function(element, roomId) {
@@ -265,7 +298,7 @@ define('forum/chats', [
};
Chats.switchChat = function(roomid) {
- ajaxify.go('chats/' + roomid);
+ ajaxify.go('user/' + ajaxify.data.userslug + '/chats/' + roomid);
};
Chats.loadChatSince = function(roomId, chatContentEl, since) {
diff --git a/public/src/client/chats/recent.js b/public/src/client/chats/recent.js
index 6905841269..9afc7ab76a 100644
--- a/public/src/client/chats/recent.js
+++ b/public/src/client/chats/recent.js
@@ -23,6 +23,7 @@ define('forum/chats/recent', function() {
}
recentChats.attr('loading', 1);
socket.emit('modules.chats.getRecentChats', {
+ uid: ajaxify.data.uid,
after: recentChats.attr('data-nextstart')
}, function(err, data) {
if (err) {
diff --git a/public/src/client/groups/details.js b/public/src/client/groups/details.js
index f71b37886e..d2f1cfbd8d 100644
--- a/public/src/client/groups/details.js
+++ b/public/src/client/groups/details.js
@@ -1,5 +1,5 @@
"use strict";
-/* globals define, socket, ajaxify, app, bootbox, utils, RELATIVE_PATH */
+/* globals define, socket, ajaxify, app, bootbox, utils, config */
define('forum/groups/details', [
'forum/groups/memberlist',
@@ -227,23 +227,41 @@ define('forum/groups/details', [
};
function handleMemberInvitations() {
- if (ajaxify.data.group.isOwner) {
- var searchInput = $('[component="groups/members/invite"]');
- require(['autocomplete'], function(autocomplete) {
- autocomplete.user(searchInput, function(event, selected) {
- socket.emit('groups.issueInvite', {
- toUid: selected.item.user.uid,
- groupName: ajaxify.data.group.name
- }, function(err) {
- if (!err) {
- ajaxify.refresh();
- } else {
- app.alertError(err.message);
- }
- });
+ if (!ajaxify.data.group.isOwner) {
+ return;
+ }
+
+ var searchInput = $('[component="groups/members/invite"]');
+ require(['autocomplete'], function(autocomplete) {
+ autocomplete.user(searchInput, function(event, selected) {
+ socket.emit('groups.issueInvite', {
+ toUid: selected.item.user.uid,
+ groupName: ajaxify.data.group.name
+ }, function(err) {
+ if (err) {
+ return app.alertError(err.message);
+ }
+ ajaxify.refresh();
});
});
- }
+ });
+
+ $('[component="groups/members/bulk-invite-button"]').on('click', function() {
+ var usernames = $('[component="groups/members/bulk-invite"]').val();
+ if (!usernames) {
+ return false;
+ }
+ socket.emit('groups.issueMassInvite', {
+ usernames: usernames,
+ groupName: ajaxify.data.group.name
+ }, function(err) {
+ if (err) {
+ return app.alertError(err.message);
+ }
+ ajaxify.refresh();
+ });
+ return false;
+ });
}
function removeCover() {
diff --git a/public/src/client/search.js b/public/src/client/search.js
index b9632513bc..91839ff880 100644
--- a/public/src/client/search.js
+++ b/public/src/client/search.js
@@ -63,49 +63,49 @@ define('forum/search', ['search', 'autocomplete'], function(searchModule, autoco
function fillOutForm() {
var params = utils.params();
var searchData = searchModule.getSearchPreferences();
- params = utils.merge(searchData, params);
+ var formData = utils.merge(searchData, params);
- if (params) {
+ if (formData) {
if (params.term) {
$('#search-input').val(params.term);
}
- if (params.in) {
- $('#search-in').val(params.in);
- updateFormItemVisiblity(params.in);
+ if (formData.in) {
+ $('#search-in').val(formData.in);
+ updateFormItemVisiblity(formData.in);
}
- if (params.by) {
- $('#posted-by-user').val(params.by);
+ if (formData.by) {
+ $('#posted-by-user').val(formData.by);
}
- if (params.categories) {
- $('#posted-in-categories').val(params.categories);
+ if (formData.categories) {
+ $('#posted-in-categories').val(formData.categories);
}
- if (params.searchChildren) {
+ if (formData.searchChildren) {
$('#search-children').prop('checked', true);
}
- if (params.replies) {
- $('#reply-count').val(params.replies);
- $('#reply-count-filter').val(params.repliesFilter);
+ if (formData.replies) {
+ $('#reply-count').val(formData.replies);
+ $('#reply-count-filter').val(formData.repliesFilter);
}
- if (params.timeRange) {
- $('#post-time-range').val(params.timeRange);
- $('#post-time-filter').val(params.timeFilter);
+ if (formData.timeRange) {
+ $('#post-time-range').val(formData.timeRange);
+ $('#post-time-filter').val(formData.timeFilter);
}
- if (params.sortBy) {
- $('#post-sort-by').val(params.sortBy);
- $('#post-sort-direction').val(params.sortDirection);
+ if (formData.sortBy) {
+ $('#post-sort-by').val(formData.sortBy);
+ $('#post-sort-direction').val(formData.sortDirection);
}
- if (params.showAs) {
- var isTopic = params.showAs === 'topics';
- var isPost = params.showAs === 'posts';
+ if (formData.showAs) {
+ var isTopic = formData.showAs === 'topics';
+ var isPost = formData.showAs === 'posts';
$('#show-as-topics').prop('checked', isTopic).parent().toggleClass('active', isTopic);
$('#show-as-posts').prop('checked', isPost).parent().toggleClass('active', isPost);
}
diff --git a/public/src/client/topic/delete-posts.js b/public/src/client/topic/delete-posts.js
index a40ef3dbc5..8c114679c4 100644
--- a/public/src/client/topic/delete-posts.js
+++ b/public/src/client/topic/delete-posts.js
@@ -1,31 +1,33 @@
'use strict';
-/* globals define, app, ajaxify, socket, templates */
+/* globals define, app, ajaxify, socket */
-define('forum/topic/delete-posts', ['components', 'postSelect', 'translator'], function(components, postSelect, translator) {
+define('forum/topic/delete-posts', ['components', 'postSelect'], function(components, postSelect) {
- var DeletePosts = {},
- modal,
- deleteBtn,
- purgeBtn;
+ var DeletePosts = {};
+ var modal;
+ var deleteBtn;
+ var purgeBtn;
DeletePosts.init = function() {
$('.topic').on('click', '[component="topic/delete/posts"]', onDeletePostsClicked);
+ $(window).on('action:ajaxify.start', onAjaxifyStart);
};
- function onDeletePostsClicked() {
- parseModal(function(html) {
- modal = $(html);
+ function onAjaxifyStart() {
+ closeModal();
+ $(window).off('action:ajaxify.start', onAjaxifyStart);
+ }
- modal.on('hidden.bs.modal', function() {
- modal.remove();
- });
+ function onDeletePostsClicked() {
+ app.parseAndTranslate('partials/delete_posts_modal', {}, function(html) {
+ modal = html;
+
+ $('body').append(modal);
deleteBtn = modal.find('#delete_posts_confirm');
purgeBtn = modal.find('#purge_posts_confirm');
- showModal();
-
modal.find('.close,#delete_posts_cancel').on('click', closeModal);
postSelect.init(function() {
@@ -43,20 +45,6 @@ define('forum/topic/delete-posts', ['components', 'postSelect', 'translator'], f
});
}
- function parseModal(callback) {
- templates.parse('partials/delete_posts_modal', {}, function(html) {
- translator.translate(html, callback);
- });
- }
-
- function showModal() {
- modal.modal({backdrop: false, show: true})
- .css('position', 'fixed')
- .css('left', Math.max(0, (($(window).width() - modal.outerWidth()) / 2) + $(window).scrollLeft()) + 'px')
- .css('top', '0px')
- .css('z-index', '2000');
- }
-
function deletePosts(btn, command) {
btn.attr('disabled', true);
socket.emit(command, {
@@ -74,7 +62,7 @@ define('forum/topic/delete-posts', ['components', 'postSelect', 'translator'], f
function showPostsSelected() {
if (postSelect.pids.length) {
- modal.find('#pids').text(postSelect.pids.join(', '));
+ modal.find('#pids').translateHtml('[[topic:fork_pid_count, ' + postSelect.pids.length + ']]');
} else {
modal.find('#pids').translateHtml('[[topic:fork_no_pids]]');
}
@@ -92,10 +80,13 @@ define('forum/topic/delete-posts', ['components', 'postSelect', 'translator'], f
function closeModal() {
postSelect.pids.forEach(function(pid) {
- components.get('post', 'pid', pid).css('opacity', 1);
+ components.get('post', 'pid', pid).toggleClass('bg-success', false);
});
- modal.modal('hide');
+ if (modal) {
+ modal.remove();
+ modal = null;
+ }
components.get('topic').off('click', '[data-pid]');
postSelect.enableClicksOnPosts();
diff --git a/public/src/client/topic/events.js b/public/src/client/topic/events.js
index 68a864198e..4d8434adb8 100644
--- a/public/src/client/topic/events.js
+++ b/public/src/client/topic/events.js
@@ -220,7 +220,7 @@ define('forum/topic/events', [
function onNewNotification(data) {
var tid = ajaxify.data.tid;
if (data && data.tid && parseInt(data.tid, 10) === parseInt(tid, 10)) {
- socket.emit('topics.markTopicNotificationsRead', tid);
+ socket.emit('topics.markTopicNotificationsRead', [tid]);
}
}
diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js
index 8e0b435434..7b87b6e376 100644
--- a/public/src/modules/chat.js
+++ b/public/src/modules/chat.js
@@ -31,7 +31,7 @@ define('chat', [
if (!ajaxify.currentPage.match(/^chats\//)) {
app.openChat(roomId);
} else {
- ajaxify.go('chats/' + roomId);
+ ajaxify.go('user/' + app.user.userslug + '/chats/' + roomId);
}
});
@@ -104,7 +104,7 @@ define('chat', [
};
module.loadChatsDropdown = function(chatsListEl) {
- socket.emit('modules.chats.getRecentChats', {after: 0}, function(err, data) {
+ socket.emit('modules.chats.getRecentChats', {uid: app.user.uid, after: 0}, function(err, data) {
if (err) {
return app.alertError(err.message);
}
@@ -214,7 +214,7 @@ define('chat', [
components.get('chat/input').val(text);
});
- ajaxify.go('chats/' + chatModal.attr('roomId'));
+ ajaxify.go('user/' + app.user.userslug + '/chats/' + chatModal.attr('roomId'));
module.close(chatModal);
}
@@ -261,6 +261,8 @@ define('chat', [
Chats.loadChatSince(chatModal.attr('roomId'), chatModal.find('.chat-content'), 'recent');
+ Chats.addScrollHandler(chatModal.attr('roomId'), app.user.uid, chatModal.find('.chat-content'));
+
checkStatus(chatModal);
taskbar.push('chat', chatModal.attr('UUID'), {
diff --git a/public/src/modules/translator.js b/public/src/modules/translator.js
index a031efdd0f..f0fc980666 100644
--- a/public/src/modules/translator.js
+++ b/public/src/modules/translator.js
@@ -183,6 +183,10 @@
var namespace = result[0];
var key = result[1];
+ if (namespace && !key) {
+ return Promise.resolve('[[' + namespace + ']]');
+ }
+
var translation = this.getTranslation(namespace, key);
var argsToTranslate = args.map(function (arg) {
return string(arg).collapseWhitespace().decodeHTMLEntities().escapeHTML().s;
@@ -298,7 +302,7 @@
Translator.create(lang).translate(text).then(function (output) {
return cb(output);
}).catch(function (err) {
- console.error('Translation failed: ' + err.message);
+ console.error('Translation failed: ' + err.stack);
});
},
diff --git a/src/categories/recentreplies.js b/src/categories/recentreplies.js
index d9393c7c08..e7a1d0ba4e 100644
--- a/src/categories/recentreplies.js
+++ b/src/categories/recentreplies.js
@@ -32,6 +32,39 @@ module.exports = function(Categories) {
], callback);
};
+ Categories.updateRecentTid = function(cid, tid, callback) {
+ async.parallel({
+ count: function(next) {
+ db.sortedSetCard('cid:' + cid + ':recent_tids', next);
+ },
+ numRecentReplies: function(next) {
+ db.getObjectField('category:' + cid, 'numRecentReplies', next);
+ }
+ }, function(err, results) {
+ if (err) {
+ return callback(err);
+ }
+
+ if (results.count < results.numRecentReplies) {
+ return db.sortedSetAdd('cid:' + cid + ':recent_tids', Date.now(), tid, callback);
+ }
+ async.waterfall([
+ function(next) {
+ db.getSortedSetRangeWithScores('cid:' + cid + ':recent_tids', 0, results.count - results.numRecentReplies, next);
+ },
+ function(data, next) {
+ if (!data.length) {
+ return next();
+ }
+ db.sortedSetsRemoveRangeByScore(['cid:' + cid + ':recent_tids'], '-inf', data[data.length - 1].score, next);
+ },
+ function(next) {
+ db.sortedSetAdd('cid:' + cid + ':recent_tids', Date.now(), tid, next);
+ }
+ ], callback);
+ });
+ };
+
Categories.getRecentTopicReplies = function(categoryData, uid, callback) {
if (!Array.isArray(categoryData) || !categoryData.length) {
return callback();
@@ -39,7 +72,10 @@ module.exports = function(Categories) {
async.waterfall([
function(next) {
- async.map(categoryData, getRecentTopicTids, next);
+ var keys = categoryData.map(function(category) {
+ return 'cid:' + category.cid + ':recent_tids';
+ });
+ db.getSortedSetsMembers(keys, next);
},
function(results, next) {
var tids = _.flatten(results);
@@ -62,45 +98,6 @@ module.exports = function(Categories) {
], callback);
};
- function getRecentTopicTids(category, callback) {
- var count = parseInt(category.numRecentReplies, 10);
- if (!count) {
- return callback(null, []);
- }
-
- if (count === 1) {
- async.waterfall([
- function (next) {
- db.getSortedSetRevRange('cid:' + category.cid + ':pids', 0, 0, next);
- },
- function (pid, next) {
- posts.getPostField(pid, 'tid', next);
- },
- function (tid, next) {
- next(null, [tid]);
- }
- ], callback);
- return;
- }
-
- async.parallel({
- pinnedTids: function(next) {
- db.getSortedSetRevRangeByScore('cid:' + category.cid + ':tids', 0, -1, '+inf', Date.now(), next);
- },
- tids: function(next) {
- db.getSortedSetRevRangeByScore('cid:' + category.cid + ':tids', 0, Math.max(1, count), Date.now(), '-inf', next);
- }
- }, function(err, results) {
- if (err) {
- return callback(err);
- }
-
- results.tids = results.tids.concat(results.pinnedTids);
-
- callback(null, results.tids);
- });
- }
-
function getTopics(tids, callback) {
var topicData;
async.waterfall([
diff --git a/src/categories/topics.js b/src/categories/topics.js
index 05b20668cf..b1a0bfae54 100644
--- a/src/categories/topics.js
+++ b/src/categories/topics.js
@@ -89,6 +89,9 @@ module.exports = function(Categories) {
db.sortedSetAdd('cid:' + cid + ':tids', postData.timestamp, postData.tid, next);
}
},
+ function(next){
+ Categories.updateRecentTid(cid, postData.tid, next);
+ },
function(next) {
db.sortedSetIncrBy('cid:' + cid + ':tids:posts', 1, postData.tid, next);
}
diff --git a/src/controllers/accounts/chats.js b/src/controllers/accounts/chats.js
index 4af94c5521..7ff867134c 100644
--- a/src/controllers/accounts/chats.js
+++ b/src/controllers/accounts/chats.js
@@ -4,74 +4,111 @@ var async = require('async');
var messaging = require('../../messaging');
var meta = require('../../meta');
+var user = require('../../user');
var helpers = require('../helpers');
-
var chatsController = {};
chatsController.get = function(req, res, callback) {
if (parseInt(meta.config.disableChat, 10) === 1) {
return callback();
}
+ var uid;
+ var username;
+ var recentChats;
- messaging.getRecentChats(req.uid, 0, 19, function(err, recentChats) {
+ async.waterfall([
+ function(next) {
+ async.parallel({
+ uid: async.apply(user.getUidByUserslug, req.params.userslug),
+ username: async.apply(user.getUsernameByUserslug, req.params.userslug)
+ }, next);
+ },
+ function(results, next) {
+ uid = results.uid;
+ username = results.username;
+ if (!uid) {
+ return callback();
+ }
+ messaging.getRecentChats(uid, 0, 19, next);
+ },
+ function(_recentChats, next) {
+ recentChats = _recentChats;
+ if (!req.params.roomid) {
+ return res.render('chats', {
+ rooms: recentChats.rooms,
+ uid: uid,
+ userslug: req.params.userslug,
+ nextStart: recentChats.nextStart,
+ allowed: true,
+ title: '[[pages:chats]]',
+ breadcrumbs: helpers.buildBreadcrumbs([{text: username, url: '/user/' + req.params.userslug}, {text: '[[pages:chats]]'}])
+ });
+ }
+ messaging.isUserInRoom(req.uid, req.params.roomid, next);
+ },
+ function(inRoom, next) {
+ if (!inRoom && parseInt(req.uid, 10) === parseInt(uid, 10)) {
+ return callback();
+ }
+ async.parallel({
+ users: async.apply(messaging.getUsersInRoom, req.params.roomid, 0, -1),
+ messages: async.apply(messaging.getMessages, {
+ uid: uid,
+ roomId: req.params.roomid,
+ since: 'recent',
+ isNew: false
+ }),
+ room: async.apply(messaging.getRoomData, req.params.roomid)
+ }, next);
+ }
+ ], function(err, data) {
if (err) {
return callback(err);
}
+ var room = data.room;
+ room.messages = data.messages;
- if (!req.params.roomid) {
- return res.render('chats', {
- rooms: recentChats.rooms,
- nextStart: recentChats.nextStart,
- allowed: true,
- title: '[[pages:chats]]',
- breadcrumbs: helpers.buildBreadcrumbs([{text: '[[pages:chats]]'}])
- });
- }
-
- async.waterfall([
- function (next) {
- messaging.isUserInRoom(req.uid, req.params.roomid, next);
- },
- function (inRoom, next) {
- if (!inRoom) {
- return callback();
- }
-
- async.parallel({
- users: async.apply(messaging.getUsersInRoom, req.params.roomid, 0, -1),
- messages: async.apply(messaging.getMessages, {
- uid: req.uid,
- roomId: req.params.roomid,
- since: 'recent',
- isNew: false
- }),
- room: async.apply(messaging.getRoomData, req.params.roomid)
- }, next);
- }
- ], function(err, data) {
- if (err) {
- return callback(err);
- }
- var room = data.room;
- room.messages = data.messages;
-
- room.isOwner = parseInt(room.owner, 10) === parseInt(req.uid, 10);
- room.users = data.users.filter(function(user) {
- return user && parseInt(user.uid, 10) && parseInt(user.uid, 10) !== req.uid;
- });
-
- room.rooms = recentChats.rooms;
- room.nextStart = recentChats.nextStart;
- room.title = room.roomName;
- room.breadcrumbs = helpers.buildBreadcrumbs([{text: '[[pages:chats]]', url: '/chats'}, {text: room.roomName}]);
- room.maximumUsersInChatRoom = parseInt(meta.config.maximumUsersInChatRoom, 10) || 0;
- room.maximumChatMessageLength = parseInt(meta.config.maximumChatMessageLength, 10) || 1000;
- room.showUserInput = !room.maximumUsersInChatRoom || room.maximumUsersInChatRoom > 2;
-
- res.render('chats', room);
+ room.isOwner = parseInt(room.owner, 10) === parseInt(req.uid, 10);
+ room.users = data.users.filter(function(user) {
+ return user && parseInt(user.uid, 10) && parseInt(user.uid, 10) !== req.uid;
});
+
+ room.rooms = recentChats.rooms;
+ room.uid = uid;
+ room.userslug = req.params.userslug;
+ room.nextStart = recentChats.nextStart;
+ room.title = room.roomName;
+ room.breadcrumbs = helpers.buildBreadcrumbs([
+ {text: username, url: '/user/' + req.params.userslug},
+ {text: '[[pages:chats]]', url: '/user/' + req.params.userslug + '/chats'},
+ {text: room.roomName}
+ ]);
+ room.maximumUsersInChatRoom = parseInt(meta.config.maximumUsersInChatRoom, 10) || 0;
+ room.maximumChatMessageLength = parseInt(meta.config.maximumChatMessageLength, 10) || 1000;
+ room.showUserInput = !room.maximumUsersInChatRoom || room.maximumUsersInChatRoom > 2;
+
+ res.render('chats', room);
});
};
+chatsController.redirectToChat = function(req, res, next) {
+ var roomid = parseInt(req.params.roomid, 10);
+ if (!req.uid) {
+ return next();
+ }
+ user.getUserField(req.uid, 'userslug', function(err, userslug) {
+ if (err || !userslug) {
+ return next(err);
+ }
+
+ if (!roomid) {
+ return helpers.redirect(res, '/user/' + userslug + '/chats');
+ }
+ helpers.redirect(res, '/user/' + userslug + '/chats/' + roomid);
+ });
+};
+
+
+
module.exports = chatsController;
\ No newline at end of file
diff --git a/src/controllers/accounts/helpers.js b/src/controllers/accounts/helpers.js
index 29bcb1d851..3d9b2a9a1e 100644
--- a/src/controllers/accounts/helpers.js
+++ b/src/controllers/accounts/helpers.js
@@ -92,6 +92,7 @@ helpers.getUserDataByUserSlug = function(userslug, callerUID, callback) {
userData.theirid = userData.uid;
userData.isAdmin = isAdmin;
userData.isGlobalModerator = isGlobalModerator;
+ userData.isAdminOrGlobalModerator = isAdmin || isGlobalModerator;
userData.canBan = isAdmin || isGlobalModerator;
userData.canChangePassword = isAdmin || (isSelf && parseInt(meta.config['password:disableEdit'], 10) !== 1);
userData.isSelf = isSelf;
@@ -118,6 +119,7 @@ helpers.getUserDataByUserSlug = function(userslug, callerUID, callback) {
userData.location = validator.escape(String(userData.location || ''));
userData.signature = validator.escape(String(userData.signature || ''));
userData.aboutme = validator.escape(String(userData.aboutme || ''));
+ userData.birthday = validator.escape(String(userData.birthday || ''));
userData['cover:url'] = userData['cover:url'] || require('../../coverPhoto').getDefaultProfileCover(userData.uid);
userData['cover:position'] = userData['cover:position'] || '50% 50%';
diff --git a/src/controllers/admin/flags.js b/src/controllers/admin/flags.js
index 75a82d1e55..bed5c57767 100644
--- a/src/controllers/admin/flags.js
+++ b/src/controllers/admin/flags.js
@@ -1,6 +1,8 @@
"use strict";
var async = require('async');
+var validator = require('validator');
+
var posts = require('../../posts');
var user = require('../../user');
var categories = require('../../categories');
@@ -54,7 +56,7 @@ flagsController.get = function(req, res, next) {
assignees: results.assignees,
analytics: results.analytics,
categories: results.categories,
- byUsername: byUsername,
+ byUsername: validator(String(byUsername)),
sortByCount: sortBy === 'count',
sortByTime: sortBy === 'time',
pagination: pagination.create(page, pageCount, req.query),
diff --git a/src/controllers/authentication.js b/src/controllers/authentication.js
index ce2c652b6a..43707bfccd 100644
--- a/src/controllers/authentication.js
+++ b/src/controllers/authentication.js
@@ -322,6 +322,9 @@ authenticationController.onSuccessfulLogin = function(req, uid, callback) {
},
function (next) {
db.setObjectField('uid:' + uid + 'sessionUUID:sessionId', uuid, req.sessionID, next);
+ },
+ function (next) {
+ user.updateLastOnlineTime(uid, next);
}
], function(err) {
if (err) {
diff --git a/src/controllers/topics.js b/src/controllers/topics.js
index 9d106a85f2..d017f1d5c8 100644
--- a/src/controllers/topics.js
+++ b/src/controllers/topics.js
@@ -283,7 +283,7 @@ topicsController.get = function(req, res, callback) {
}
if (markedRead) {
topics.pushUnreadCount(req.uid);
- topics.markTopicNotificationsRead(tid, req.uid);
+ topics.markTopicNotificationsRead([tid], req.uid);
}
});
}
diff --git a/src/controllers/unread.js b/src/controllers/unread.js
index c610b91723..8860f541d9 100644
--- a/src/controllers/unread.js
+++ b/src/controllers/unread.js
@@ -3,6 +3,7 @@
var async = require('async');
var querystring = require('querystring');
+var validator = require('validator');
var categories = require('../categories');
var privileges = require('../privileges');
@@ -85,7 +86,7 @@ unreadController.get = function(req, res, next) {
return filter && filter.selected;
})[0];
- data.querystring = req.query.cid ? ('?cid=' + req.query.cid) : '';
+ data.querystring = cid ? ('?cid=' + validator.escape(String(cid))) : '';
res.render('unread', data);
});
diff --git a/src/database/mongo/hash.js b/src/database/mongo/hash.js
index dbf294119e..585abea8b6 100644
--- a/src/database/mongo/hash.js
+++ b/src/database/mongo/hash.js
@@ -231,9 +231,11 @@ module.exports = function(db, module) {
module.incrObjectFieldBy = function(key, field, value, callback) {
callback = callback || helpers.noop;
- if (!key) {
+ value = parseInt(value, 10);
+ if (!key || isNaN(value)) {
return callback();
}
+
var data = {};
field = helpers.fieldToString(field);
data[field] = value;
diff --git a/src/messaging.js b/src/messaging.js
index b17bea6ec2..2fe69e50fe 100644
--- a/src/messaging.js
+++ b/src/messaging.js
@@ -49,21 +49,22 @@ var async = require('async'),
};
Messaging.getMessages = function(params, callback) {
- var uid = params.uid,
- roomId = params.roomId,
- since = params.since,
- isNew = params.isNew,
- count = params.count || 250,
- markRead = params.markRead || true;
+ var uid = params.uid;
+ var roomId = params.roomId;
+ var since = params.since;
+ var isNew = params.isNew;
+ var start = params.hasOwnProperty('start') ? params.start : 0;
+ var count = params.count || 250;
+ var markRead = params.markRead || true;
var min = params.count ? 0 : Date.now() - (terms[since] || terms.day);
if (since === 'recent') {
- count = 49;
+ count = 50;
min = 0;
}
- db.getSortedSetRevRangeByScore('uid:' + uid + ':chat:room:' + roomId + ':mids', 0, count, '+inf', min, function(err, mids) {
+ db.getSortedSetRevRangeByScore('uid:' + uid + ':chat:room:' + roomId + ':mids', start, count, '+inf', min, function(err, mids) {
if (err) {
return callback(err);
}
@@ -71,10 +72,24 @@ var async = require('async'),
if (!Array.isArray(mids) || !mids.length) {
return callback(null, []);
}
+ var indices = {};
+ mids.forEach(function(mid, index) {
+ indices[mid] = start + index;
+ });
mids.reverse();
- Messaging.getMessagesData(mids, uid, roomId, isNew, callback);
+ Messaging.getMessagesData(mids, uid, roomId, isNew, function(err, messageData) {
+ if (err) {
+ return callback(err);
+ }
+
+ for(var i=0; i