Browse Source

Rebuild frontend and sync translations

rafalp 5 years ago
parent
commit
6e9164e418

+ 236 - 61
misago/locale/en/LC_MESSAGES/django.po

@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-09-01 14:10+0000\n"
+"POT-Creation-Date: 2019-09-29 00:51+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -190,7 +190,8 @@ msgstr ""
 msgid "Optional description explaining category intented purpose."
 msgstr ""
 
-#: categories/admin/forms.py:55 templates/misago/admin/categories/list.html:18
+#: categories/admin/forms.py:55 menus/admin/forms.py:20
+#: templates/misago/admin/categories/list.html:18
 #: templates/misago/admin/ranks/list.html:20 users/admin/forms.py:419
 msgid "CSS class"
 msgstr ""
@@ -1135,21 +1136,21 @@ msgstr ""
 msgid "Uploaded image is not a square."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:32
+#: graphql/admin/versioncheck.py:27
 msgid "The site is running using unreleased version of Misago."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:34
+#: graphql/admin/versioncheck.py:29
 msgid ""
 "Unreleased versions of Misago can lack security features and there is no "
 "supported way to upgrade them to release versions later."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:47
+#: graphql/admin/versioncheck.py:42
 msgid "Failed to connect to pypi.org API. Try again later."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:49
+#: graphql/admin/versioncheck.py:44
 #: templates/misago/admin/dashboard/checks.html:17
 #: templates/misago/admin/dashboard/index.html:33
 msgid ""
@@ -1157,20 +1158,20 @@ msgid ""
 "(pypi.org) API to retrieve latest Misago release version."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:67
+#: graphql/admin/versioncheck.py:70
 msgid "The site is running updated version of Misago."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:68
+#: graphql/admin/versioncheck.py:71
 #, python-format
 msgid "Misago %(version)s is latest release."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:74
+#: graphql/admin/versioncheck.py:77
 msgid "The site is running outdated version of Misago."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:76
+#: graphql/admin/versioncheck.py:79
 #, python-format
 msgid ""
 "The site is running Misago version %(version)s while version %(latest)s is "
@@ -1226,7 +1227,8 @@ msgstr ""
 msgid "Type"
 msgstr ""
 
-#: legal/admin/forms.py:13 templates/misago/admin/ranks/list.html:19
+#: legal/admin/forms.py:13 menus/admin/forms.py:10
+#: templates/misago/admin/ranks/list.html:19
 msgid "Title"
 msgstr ""
 
@@ -1275,13 +1277,13 @@ msgstr ""
 
 #: legal/admin/views.py:29 threads/admin/views/attachments.py:26
 #: users/admin/views/bans.py:24 users/admin/views/datadownloads.py:22
-#: users/admin/views/users.py:62
+#: users/admin/views/users.py:63
 msgid "From newest"
 msgstr ""
 
 #: legal/admin/views.py:29 threads/admin/views/attachments.py:27
 #: users/admin/views/bans.py:25 users/admin/views/datadownloads.py:22
-#: users/admin/views/users.py:63
+#: users/admin/views/users.py:64
 msgid "From oldest"
 msgstr ""
 
@@ -1338,11 +1340,11 @@ msgstr ""
 msgid "You need to submit a valid choice."
 msgstr ""
 
-#: legal/models.py:42 templates/misago/footer.html:22
+#: legal/models.py:42 templates/misago/footer.html:29
 msgid "Terms of service"
 msgstr ""
 
-#: legal/models.py:43 templates/misago/footer.html:27
+#: legal/models.py:43 templates/misago/footer.html:34
 msgid "Privacy policy"
 msgstr ""
 
@@ -1368,6 +1370,105 @@ msgstr ""
 msgid "Reveal spoiler"
 msgstr ""
 
+#: menus/admin/__init__.py:31
+msgid "Menu items"
+msgstr ""
+
+#: menus/admin/__init__.py:33
+msgid "Use those options to add custom items to the navbar and footer menus."
+msgstr ""
+
+#: menus/admin/forms.py:12
+msgid "URL"
+msgstr ""
+
+#: menus/admin/forms.py:12
+msgid "URL where this item will point to."
+msgstr ""
+
+#: menus/admin/forms.py:15
+msgid "Menu"
+msgstr ""
+
+#: menus/admin/forms.py:17
+msgid "Menu in which this item will be displayed."
+msgstr ""
+
+#: menus/admin/forms.py:21
+msgid "If you want to set custom value for link's \"class\"."
+msgstr ""
+
+#: menus/admin/forms.py:25
+msgid "Open this link in new window"
+msgstr ""
+
+#: menus/admin/forms.py:27
+msgid ""
+"Enabling this option will result in the target=\"_blank\" attribute being "
+"added to this link's HTML element."
+msgstr ""
+
+#: menus/admin/forms.py:33
+msgid "Rel attribute"
+msgstr ""
+
+#: menus/admin/forms.py:35
+msgid "Optional \"rel\" attribute that this item will use (ex. \"nofollow\")."
+msgstr ""
+
+#: menus/admin/views.py:16
+msgid "Requested menu item does not exist."
+msgstr ""
+
+#: menus/admin/views.py:30
+msgid "Delete items"
+msgstr ""
+
+#: menus/admin/views.py:31
+msgid "Are you sure you want to delete those menu items?"
+msgstr ""
+
+#: menus/admin/views.py:38
+msgid "Selected menu items have been deleted."
+msgstr ""
+
+#: menus/admin/views.py:42
+#, python-format
+msgid "New menu item %(item)s has been saved."
+msgstr ""
+
+#: menus/admin/views.py:52
+#, python-format
+msgid "Menu item %(item)s has been edited."
+msgstr ""
+
+#: menus/admin/views.py:64
+#, python-format
+msgid "Menu item %(item)s has been deleted."
+msgstr ""
+
+#: menus/admin/views.py:82
+#, python-format
+msgid "Menu item %(item)s has been moved after %(other)s."
+msgstr ""
+
+#: menus/admin/views.py:101
+#, python-format
+msgid "Menu item %(item)s has been moved before %(other)s."
+msgstr ""
+
+#: menus/models.py:10
+msgid "Navbar and footer"
+msgstr ""
+
+#: menus/models.py:11 templates/misago/admin/menuitems/list.html:41
+msgid "Navbar"
+msgstr ""
+
+#: menus/models.py:12 templates/misago/admin/menuitems/list.html:46
+msgid "Footer"
+msgstr ""
+
 #: search/api.py:17 search/views.py:12 search/views.py:21
 msgid "You don't have permission to search site."
 msgstr ""
@@ -1597,6 +1698,7 @@ msgstr ""
 #: templates/misago/admin/agreements/form.html:48
 #: templates/misago/admin/categoryroles/form.html:36
 #: templates/misago/admin/conf/captcha_settings.html:8
+#: templates/misago/admin/menuitems/form.html:41
 #: templates/misago/admin/roles/form.html:36
 msgid "Basic settings"
 msgstr ""
@@ -1770,6 +1872,7 @@ msgstr ""
 
 #: templates/misago/admin/attachmenttypes/list.html:57
 #: templates/misago/admin/categories/list.html:45
+#: templates/misago/admin/menuitems/list.html:54
 #: templates/misago/admin/ranks/list.html:59
 #: templates/misago/admin/ranks/list.html:66
 msgid "Not set"
@@ -1912,7 +2015,7 @@ msgid "Category"
 msgstr ""
 
 #: templates/misago/admin/categories/list.html:20
-#: templates/misago/admin/dashboard/index.html:44
+#: templates/misago/admin/dashboard/index.html:45
 #: templates/misago/admin/dashboard/totals.html:31
 #: templates/misago/admin/users/list.html:21
 #: templates/misago/profile/posts.html:5 templates/misago/profile/posts.html:8
@@ -1921,6 +2024,7 @@ msgid "Posts"
 msgstr ""
 
 #: templates/misago/admin/categories/list.html:58
+#: templates/misago/admin/menuitems/list.html:72
 #: templates/misago/admin/ranks/list.html:74
 #: templates/misago/admin/socialauth/list.html:32
 #: templates/misago/admin/themes/assets/css.html:68
@@ -1929,6 +2033,7 @@ msgid "Move down"
 msgstr ""
 
 #: templates/misago/admin/categories/list.html:72
+#: templates/misago/admin/menuitems/list.html:86
 #: templates/misago/admin/ranks/list.html:88
 #: templates/misago/admin/socialauth/list.html:46
 #: templates/misago/admin/themes/assets/css.html:73
@@ -2211,18 +2316,22 @@ msgid "User registrations"
 msgstr ""
 
 #: templates/misago/admin/dashboard/index.html:43
+msgid "User deletions"
+msgstr ""
+
+#: templates/misago/admin/dashboard/index.html:44
 msgid "Threads started"
 msgstr ""
 
-#: templates/misago/admin/dashboard/index.html:45
+#: templates/misago/admin/dashboard/index.html:46
 msgid "Attachments uploaded"
 msgstr ""
 
-#: templates/misago/admin/dashboard/index.html:46
+#: templates/misago/admin/dashboard/index.html:47
 msgid "Data download requests"
 msgstr ""
 
-#: templates/misago/admin/dashboard/index.html:48
+#: templates/misago/admin/dashboard/index.html:49
 msgid "Site analytics are currently unavailable due to an error."
 msgstr ""
 
@@ -2510,6 +2619,60 @@ msgstr ""
 msgid "Return to site"
 msgstr ""
 
+#: templates/misago/admin/menuitems/form.html:9
+#: templates/misago/admin/menuitems/form.html:33
+#: templates/misago/admin/menuitems/list.html:9
+msgid "New menu item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/form.html:31
+msgid "Edit menu item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/form.html:50
+msgid "Behavior and appearance"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:16
+msgid "Item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:18
+msgid "CSS Class"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:19
+msgid "Target"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:20
+msgid "Rel"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:40
+msgid "Is displayed on the forum navbar."
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:45
+msgid "Is displayed on the forum footer."
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:103
+msgid "Edit item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:108
+msgid "Remove item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:119
+msgid "No menu items are set."
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:129
+msgid "Are you sure you want to remove this menu item?"
+msgstr ""
+
 #: templates/misago/admin/navbar.html:12
 msgid "GitHub"
 msgstr ""
@@ -2829,7 +2992,7 @@ msgid ""
 msgstr ""
 
 #: templates/misago/admin/users/ban.html:6
-#: templates/misago/admin/users/ban.html:82 users/admin/views/users.py:73
+#: templates/misago/admin/users/ban.html:82 users/admin/views/users.py:74
 msgid "Ban users"
 msgstr ""
 
@@ -4564,12 +4727,12 @@ msgid "Requested attachment could not be found."
 msgstr ""
 
 #: threads/admin/views/attachments.py:28 users/admin/views/bans.py:26
-#: users/admin/views/users.py:64
+#: users/admin/views/users.py:65
 msgid "A to z"
 msgstr ""
 
 #: threads/admin/views/attachments.py:29 users/admin/views/bans.py:27
-#: users/admin/views/users.py:65
+#: users/admin/views/users.py:66
 msgid "Z to a"
 msgstr ""
 
@@ -6929,99 +7092,99 @@ msgstr ""
 msgid "Rank \"%(name)s\" has been made default."
 msgstr ""
 
-#: users/admin/views/users.py:66
+#: users/admin/views/users.py:67
 msgid "Biggest posters"
 msgstr ""
 
-#: users/admin/views/users.py:67
+#: users/admin/views/users.py:68
 msgid "Smallest posters"
 msgstr ""
 
-#: users/admin/views/users.py:69
+#: users/admin/views/users.py:70
 msgid "With users: 0"
 msgstr ""
 
-#: users/admin/views/users.py:70
+#: users/admin/views/users.py:71
 msgid "Select users"
 msgstr ""
 
-#: users/admin/views/users.py:72
+#: users/admin/views/users.py:73
 msgid "Activate accounts"
 msgstr ""
 
-#: users/admin/views/users.py:74
+#: users/admin/views/users.py:75
 msgid "Request data download"
 msgstr ""
 
-#: users/admin/views/users.py:77
+#: users/admin/views/users.py:78
 msgid "Delete accounts"
 msgstr ""
 
-#: users/admin/views/users.py:78
+#: users/admin/views/users.py:79
 msgid "Are you sure you want to delete selected users?"
 msgstr ""
 
-#: users/admin/views/users.py:82
+#: users/admin/views/users.py:83
 msgid "Delete with content"
 msgstr ""
 
-#: users/admin/views/users.py:84
+#: users/admin/views/users.py:85
 msgid ""
 "Are you sure you want to delete selected users? This will also delete all "
 "content associated with their accounts."
 msgstr ""
 
-#: users/admin/views/users.py:105
+#: users/admin/views/users.py:106
 msgid "You have to select inactive users."
 msgstr ""
 
-#: users/admin/views/users.py:112
+#: users/admin/views/users.py:113
 #, python-format
 msgid "Your account on %(forum_name)s forums has been activated"
 msgstr ""
 
-#: users/admin/views/users.py:122
+#: users/admin/views/users.py:123
 msgid "Selected users accounts have been activated."
 msgstr ""
 
-#: users/admin/views/users.py:130
+#: users/admin/views/users.py:131
 #, python-format
 msgid "%(user)s is super admin and can't be banned."
 msgstr ""
 
-#: users/admin/views/users.py:192
+#: users/admin/views/users.py:193
 msgid "Selected users have been banned."
 msgstr ""
 
-#: users/admin/views/users.py:207
+#: users/admin/views/users.py:208
 msgid "Data download requests have been placed for selected users."
 msgstr ""
 
-#: users/admin/views/users.py:213 users/admin/views/users.py:228
+#: users/admin/views/users.py:214 users/admin/views/users.py:230
 msgid "You can't delete yourself."
 msgstr ""
 
-#: users/admin/views/users.py:215 users/admin/views/users.py:230
+#: users/admin/views/users.py:216 users/admin/views/users.py:232
 #, python-format
 msgid "%(user)s is admin and can't be deleted."
 msgstr ""
 
-#: users/admin/views/users.py:223
+#: users/admin/views/users.py:225
 msgid "Selected users have been deleted."
 msgstr ""
 
-#: users/admin/views/users.py:244
+#: users/admin/views/users.py:246
 msgid ""
 "Selected users have been disabled and queued for deletion together with "
 "their content."
 msgstr ""
 
-#: users/admin/views/users.py:253
+#: users/admin/views/users.py:255
 #, python-format
 msgid "New user \"%(user)s\" has been registered."
 msgstr ""
 
-#: users/admin/views/users.py:285
+#: users/admin/views/users.py:287
 #, python-format
 msgid "User \"%(user)s\" has been edited."
 msgstr ""
@@ -7144,71 +7307,71 @@ msgstr ""
 msgid "You don't have permission to see other users name history."
 msgstr ""
 
-#: users/api/users.py:63
+#: users/api/users.py:64
 msgid "You have to sign in to perform this action."
 msgstr ""
 
-#: users/api/users.py:89
+#: users/api/users.py:90
 msgid "Please use the 3rd party site to register."
 msgstr ""
 
-#: users/api/users.py:112
+#: users/api/users.py:113
 msgid "You can't change other users avatars."
 msgstr ""
 
-#: users/api/users.py:124
+#: users/api/users.py:125
 msgid "You can't change other users options."
 msgstr ""
 
-#: users/api/users.py:129
+#: users/api/users.py:130
 msgid "Your forum options have been changed."
 msgstr ""
 
-#: users/api/users.py:136
+#: users/api/users.py:137
 msgid "Please use the 3rd party site to change your username."
 msgstr ""
 
-#: users/api/users.py:140
+#: users/api/users.py:141
 msgid "You can't change other users names."
 msgstr ""
 
-#: users/api/users.py:147
+#: users/api/users.py:148
 msgid "You can't change other users signatures."
 msgstr ""
 
-#: users/api/users.py:160
+#: users/api/users.py:161
 msgid "Please use the 3rd party site to change your password."
 msgstr ""
 
-#: users/api/users.py:164
+#: users/api/users.py:165
 msgid "You can't change other users passwords."
 msgstr ""
 
-#: users/api/users.py:174
+#: users/api/users.py:175
 msgid "Please use the 3rd party site to change your e-mail."
 msgstr ""
 
-#: users/api/users.py:179
+#: users/api/users.py:180
 msgid "You can't change other users e-mail addresses."
 msgstr ""
 
-#: users/api/users.py:210
+#: users/api/users.py:211
 msgid "Please use the 3rd party site to delete account."
 msgstr ""
 
-#: users/api/users.py:291
+#: users/api/users.py:292
 msgid "You can't request data downloads for other users."
 msgstr ""
 
-#: users/api/users.py:295
+#: users/api/users.py:296
 msgid "You can't download your data."
 msgstr ""
 
-#: users/api/users.py:300
+#: users/api/users.py:301
 msgid "You can't have more than one data download request at a single time."
 msgstr ""
 
-#: users/api/users.py:356
+#: users/api/users.py:358
 msgid "You can't see other users data downloads."
 msgstr ""
 
@@ -7368,6 +7531,18 @@ msgstr ""
 msgid "Ready"
 msgstr ""
 
+#: users/models/deleteduser.py:12
+msgid "By self"
+msgstr ""
+
+#: users/models/deleteduser.py:13
+msgid "By staff"
+msgstr ""
+
+#: users/models/deleteduser.py:14
+msgid "By system"
+msgstr ""
+
 #: users/models/user.py:106
 msgid "Notify"
 msgstr ""

+ 5 - 1
misago/locale/en/LC_MESSAGES/djangojs.po

@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-09-01 14:10+0000\n"
+"POT-Creation-Date: 2019-09-29 00:51+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1007,6 +1007,10 @@ msgstr ""
 msgid "See previous change"
 msgstr ""
 
+#: static/misago/js/misago.js:7
+msgid "See next change"
+msgstr ""
+
 #: static/misago/js/misago.js:8
 msgid "By %(edited_by)s %(edited_on)s."
 msgstr ""

+ 236 - 61
misago/locale/es/LC_MESSAGES/django.po

@@ -13,7 +13,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-09-01 14:10+0000\n"
+"POT-Creation-Date: 2019-09-29 00:51+0000\n"
 "PO-Revision-Date: 2017-01-16 00:04+0000\n"
 "Last-Translator: Rafał Pitoń <kontakt@rpiton.com>, 2017\n"
 "Language-Team: Spanish (https://www.transifex.com/misago/teams/65369/es/)\n"
@@ -195,7 +195,8 @@ msgstr "Descripción"
 msgid "Optional description explaining category intented purpose."
 msgstr "Descripción opcional que explica el propósito de la categoría."
 
-#: categories/admin/forms.py:55 templates/misago/admin/categories/list.html:18
+#: categories/admin/forms.py:55 menus/admin/forms.py:20
+#: templates/misago/admin/categories/list.html:18
 #: templates/misago/admin/ranks/list.html:20 users/admin/forms.py:419
 msgid "CSS class"
 msgstr "Clase CSS"
@@ -1168,21 +1169,21 @@ msgstr "El valor es demasiado largo."
 msgid "Uploaded image is not a square."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:32
+#: graphql/admin/versioncheck.py:27
 msgid "The site is running using unreleased version of Misago."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:34
+#: graphql/admin/versioncheck.py:29
 msgid ""
 "Unreleased versions of Misago can lack security features and there is no "
 "supported way to upgrade them to release versions later."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:47
+#: graphql/admin/versioncheck.py:42
 msgid "Failed to connect to pypi.org API. Try again later."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:49
+#: graphql/admin/versioncheck.py:44
 #: templates/misago/admin/dashboard/checks.html:17
 #: templates/misago/admin/dashboard/index.html:33
 msgid ""
@@ -1190,20 +1191,20 @@ msgid ""
 " (pypi.org) API to retrieve latest Misago release version."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:67
+#: graphql/admin/versioncheck.py:70
 msgid "The site is running updated version of Misago."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:68
+#: graphql/admin/versioncheck.py:71
 #, python-format
 msgid "Misago %(version)s is latest release."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:74
+#: graphql/admin/versioncheck.py:77
 msgid "The site is running outdated version of Misago."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:76
+#: graphql/admin/versioncheck.py:79
 #, python-format
 msgid ""
 "The site is running Misago version %(version)s while version %(latest)s is "
@@ -1259,7 +1260,8 @@ msgstr ""
 msgid "Type"
 msgstr "Tipo"
 
-#: legal/admin/forms.py:13 templates/misago/admin/ranks/list.html:19
+#: legal/admin/forms.py:13 menus/admin/forms.py:10
+#: templates/misago/admin/ranks/list.html:19
 msgid "Title"
 msgstr "Título"
 
@@ -1308,13 +1310,13 @@ msgstr ""
 
 #: legal/admin/views.py:29 threads/admin/views/attachments.py:26
 #: users/admin/views/bans.py:24 users/admin/views/datadownloads.py:22
-#: users/admin/views/users.py:62
+#: users/admin/views/users.py:63
 msgid "From newest"
 msgstr "Desde el más nuevo"
 
 #: legal/admin/views.py:29 threads/admin/views/attachments.py:27
 #: users/admin/views/bans.py:25 users/admin/views/datadownloads.py:22
-#: users/admin/views/users.py:63
+#: users/admin/views/users.py:64
 msgid "From oldest"
 msgstr "Desde el más antiguo"
 
@@ -1371,11 +1373,11 @@ msgstr ""
 msgid "You need to submit a valid choice."
 msgstr ""
 
-#: legal/models.py:42 templates/misago/footer.html:22
+#: legal/models.py:42 templates/misago/footer.html:29
 msgid "Terms of service"
 msgstr "Términos del servicio"
 
-#: legal/models.py:43 templates/misago/footer.html:27
+#: legal/models.py:43 templates/misago/footer.html:34
 msgid "Privacy policy"
 msgstr "Política de privacidad"
 
@@ -1401,6 +1403,105 @@ msgstr ""
 msgid "Reveal spoiler"
 msgstr ""
 
+#: menus/admin/__init__.py:31
+msgid "Menu items"
+msgstr ""
+
+#: menus/admin/__init__.py:33
+msgid "Use those options to add custom items to the navbar and footer menus."
+msgstr ""
+
+#: menus/admin/forms.py:12
+msgid "URL"
+msgstr ""
+
+#: menus/admin/forms.py:12
+msgid "URL where this item will point to."
+msgstr ""
+
+#: menus/admin/forms.py:15
+msgid "Menu"
+msgstr ""
+
+#: menus/admin/forms.py:17
+msgid "Menu in which this item will be displayed."
+msgstr ""
+
+#: menus/admin/forms.py:21
+msgid "If you want to set custom value for link's \"class\"."
+msgstr ""
+
+#: menus/admin/forms.py:25
+msgid "Open this link in new window"
+msgstr ""
+
+#: menus/admin/forms.py:27
+msgid ""
+"Enabling this option will result in the target=\"_blank\" attribute being "
+"added to this link's HTML element."
+msgstr ""
+
+#: menus/admin/forms.py:33
+msgid "Rel attribute"
+msgstr ""
+
+#: menus/admin/forms.py:35
+msgid "Optional \"rel\" attribute that this item will use (ex. \"nofollow\")."
+msgstr ""
+
+#: menus/admin/views.py:16
+msgid "Requested menu item does not exist."
+msgstr ""
+
+#: menus/admin/views.py:30
+msgid "Delete items"
+msgstr ""
+
+#: menus/admin/views.py:31
+msgid "Are you sure you want to delete those menu items?"
+msgstr ""
+
+#: menus/admin/views.py:38
+msgid "Selected menu items have been deleted."
+msgstr ""
+
+#: menus/admin/views.py:42
+#, python-format
+msgid "New menu item %(item)s has been saved."
+msgstr ""
+
+#: menus/admin/views.py:52
+#, python-format
+msgid "Menu item %(item)s has been edited."
+msgstr ""
+
+#: menus/admin/views.py:64
+#, python-format
+msgid "Menu item %(item)s has been deleted."
+msgstr ""
+
+#: menus/admin/views.py:82
+#, python-format
+msgid "Menu item %(item)s has been moved after %(other)s."
+msgstr ""
+
+#: menus/admin/views.py:101
+#, python-format
+msgid "Menu item %(item)s has been moved before %(other)s."
+msgstr ""
+
+#: menus/models.py:10
+msgid "Navbar and footer"
+msgstr ""
+
+#: menus/models.py:11 templates/misago/admin/menuitems/list.html:41
+msgid "Navbar"
+msgstr ""
+
+#: menus/models.py:12 templates/misago/admin/menuitems/list.html:46
+msgid "Footer"
+msgstr ""
+
 #: search/api.py:17 search/views.py:12 search/views.py:21
 msgid "You don't have permission to search site."
 msgstr "No tienes permiso para buscar en el sitio."
@@ -1640,6 +1741,7 @@ msgstr ""
 #: templates/misago/admin/agreements/form.html:48
 #: templates/misago/admin/categoryroles/form.html:36
 #: templates/misago/admin/conf/captcha_settings.html:8
+#: templates/misago/admin/menuitems/form.html:41
 #: templates/misago/admin/roles/form.html:36
 msgid "Basic settings"
 msgstr "Configuración básica"
@@ -1813,6 +1915,7 @@ msgstr ""
 
 #: templates/misago/admin/attachmenttypes/list.html:57
 #: templates/misago/admin/categories/list.html:45
+#: templates/misago/admin/menuitems/list.html:54
 #: templates/misago/admin/ranks/list.html:59
 #: templates/misago/admin/ranks/list.html:66
 msgid "Not set"
@@ -1955,7 +2058,7 @@ msgid "Category"
 msgstr "Categoría"
 
 #: templates/misago/admin/categories/list.html:20
-#: templates/misago/admin/dashboard/index.html:44
+#: templates/misago/admin/dashboard/index.html:45
 #: templates/misago/admin/dashboard/totals.html:31
 #: templates/misago/admin/users/list.html:21
 #: templates/misago/profile/posts.html:5 templates/misago/profile/posts.html:8
@@ -1964,6 +2067,7 @@ msgid "Posts"
 msgstr "Mensajes"
 
 #: templates/misago/admin/categories/list.html:58
+#: templates/misago/admin/menuitems/list.html:72
 #: templates/misago/admin/ranks/list.html:74
 #: templates/misago/admin/socialauth/list.html:32
 #: templates/misago/admin/themes/assets/css.html:68
@@ -1972,6 +2076,7 @@ msgid "Move down"
 msgstr "Mover hacia abajo"
 
 #: templates/misago/admin/categories/list.html:72
+#: templates/misago/admin/menuitems/list.html:86
 #: templates/misago/admin/ranks/list.html:88
 #: templates/misago/admin/socialauth/list.html:46
 #: templates/misago/admin/themes/assets/css.html:73
@@ -2254,18 +2359,22 @@ msgid "User registrations"
 msgstr ""
 
 #: templates/misago/admin/dashboard/index.html:43
+msgid "User deletions"
+msgstr ""
+
+#: templates/misago/admin/dashboard/index.html:44
 msgid "Threads started"
 msgstr ""
 
-#: templates/misago/admin/dashboard/index.html:45
+#: templates/misago/admin/dashboard/index.html:46
 msgid "Attachments uploaded"
 msgstr ""
 
-#: templates/misago/admin/dashboard/index.html:46
+#: templates/misago/admin/dashboard/index.html:47
 msgid "Data download requests"
 msgstr ""
 
-#: templates/misago/admin/dashboard/index.html:48
+#: templates/misago/admin/dashboard/index.html:49
 msgid "Site analytics are currently unavailable due to an error."
 msgstr ""
 
@@ -2556,6 +2665,60 @@ msgstr "Iniciar sesión"
 msgid "Return to site"
 msgstr ""
 
+#: templates/misago/admin/menuitems/form.html:9
+#: templates/misago/admin/menuitems/form.html:33
+#: templates/misago/admin/menuitems/list.html:9
+msgid "New menu item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/form.html:31
+msgid "Edit menu item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/form.html:50
+msgid "Behavior and appearance"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:16
+msgid "Item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:18
+msgid "CSS Class"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:19
+msgid "Target"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:20
+msgid "Rel"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:40
+msgid "Is displayed on the forum navbar."
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:45
+msgid "Is displayed on the forum footer."
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:103
+msgid "Edit item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:108
+msgid "Remove item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:119
+msgid "No menu items are set."
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:129
+msgid "Are you sure you want to remove this menu item?"
+msgstr ""
+
 #: templates/misago/admin/navbar.html:12
 msgid "GitHub"
 msgstr ""
@@ -2876,7 +3039,7 @@ msgid ""
 msgstr ""
 
 #: templates/misago/admin/users/ban.html:6
-#: templates/misago/admin/users/ban.html:82 users/admin/views/users.py:73
+#: templates/misago/admin/users/ban.html:82 users/admin/views/users.py:74
 msgid "Ban users"
 msgstr "Usuarios de prohibición"
 
@@ -4677,12 +4840,12 @@ msgid "Requested attachment could not be found."
 msgstr "No se pudo encontrar el archivo adjunto solicitado."
 
 #: threads/admin/views/attachments.py:28 users/admin/views/bans.py:26
-#: users/admin/views/users.py:64
+#: users/admin/views/users.py:65
 msgid "A to z"
 msgstr "De la A a la Z"
 
 #: threads/admin/views/attachments.py:29 users/admin/views/bans.py:27
-#: users/admin/views/users.py:65
+#: users/admin/views/users.py:66
 msgid "Z to a"
 msgstr "Z a a"
 
@@ -7184,43 +7347,43 @@ msgstr "El rango \"%(name)s\" ya está predeterminado."
 msgid "Rank \"%(name)s\" has been made default."
 msgstr "El rango \"%(name)s\" se ha establecido de manera predeterminada."
 
-#: users/admin/views/users.py:66
+#: users/admin/views/users.py:67
 msgid "Biggest posters"
 msgstr "Los carteles más grandes"
 
-#: users/admin/views/users.py:67
+#: users/admin/views/users.py:68
 msgid "Smallest posters"
 msgstr "Los carteles más pequeños"
 
-#: users/admin/views/users.py:69
+#: users/admin/views/users.py:70
 msgid "With users: 0"
 msgstr "Con los usuarios: 0"
 
-#: users/admin/views/users.py:70
+#: users/admin/views/users.py:71
 msgid "Select users"
 msgstr "Seleccionar usuarios"
 
-#: users/admin/views/users.py:72
+#: users/admin/views/users.py:73
 msgid "Activate accounts"
 msgstr "Activar cuentas"
 
-#: users/admin/views/users.py:74
+#: users/admin/views/users.py:75
 msgid "Request data download"
 msgstr ""
 
-#: users/admin/views/users.py:77
+#: users/admin/views/users.py:78
 msgid "Delete accounts"
 msgstr "Eliminar cuentas"
 
-#: users/admin/views/users.py:78
+#: users/admin/views/users.py:79
 msgid "Are you sure you want to delete selected users?"
 msgstr "¿Seguro que quieres eliminar los usuarios seleccionados?"
 
-#: users/admin/views/users.py:82
+#: users/admin/views/users.py:83
 msgid "Delete with content"
 msgstr ""
 
-#: users/admin/views/users.py:84
+#: users/admin/views/users.py:85
 msgid ""
 "Are you sure you want to delete selected users? This will also delete all "
 "content associated with their accounts."
@@ -7228,57 +7391,57 @@ msgstr ""
 "¿Seguro que quieres eliminar los usuarios seleccionados? Esto también "
 "eliminará todo el contenido asociado a sus cuentas."
 
-#: users/admin/views/users.py:105
+#: users/admin/views/users.py:106
 msgid "You have to select inactive users."
 msgstr "Debes seleccionar usuarios inactivos."
 
-#: users/admin/views/users.py:112
+#: users/admin/views/users.py:113
 #, python-format
 msgid "Your account on %(forum_name)s forums has been activated"
 msgstr "Tu cuenta en %(forum_name)s ha sido activada"
 
-#: users/admin/views/users.py:122
+#: users/admin/views/users.py:123
 msgid "Selected users accounts have been activated."
 msgstr "Las cuentas de los usuarios seleccionados se han activado."
 
-#: users/admin/views/users.py:130
+#: users/admin/views/users.py:131
 #, python-format
 msgid "%(user)s is super admin and can't be banned."
 msgstr "%(user)s es super administrador y no puede ser baneado."
 
-#: users/admin/views/users.py:192
+#: users/admin/views/users.py:193
 msgid "Selected users have been banned."
 msgstr "Los usuarios seleccionados han sido baneados."
 
-#: users/admin/views/users.py:207
+#: users/admin/views/users.py:208
 msgid "Data download requests have been placed for selected users."
 msgstr ""
 
-#: users/admin/views/users.py:213 users/admin/views/users.py:228
+#: users/admin/views/users.py:214 users/admin/views/users.py:230
 msgid "You can't delete yourself."
 msgstr "No puedes borrarte a ti mismo."
 
-#: users/admin/views/users.py:215 users/admin/views/users.py:230
+#: users/admin/views/users.py:216 users/admin/views/users.py:232
 #, python-format
 msgid "%(user)s is admin and can't be deleted."
 msgstr "%(user)s es admin y no se puede eliminar."
 
-#: users/admin/views/users.py:223
+#: users/admin/views/users.py:225
 msgid "Selected users have been deleted."
 msgstr "Los usuarios seleccionados han sido eliminados."
 
-#: users/admin/views/users.py:244
+#: users/admin/views/users.py:246
 msgid ""
 "Selected users have been disabled and queued for deletion together with "
 "their content."
 msgstr ""
 
-#: users/admin/views/users.py:253
+#: users/admin/views/users.py:255
 #, python-format
 msgid "New user \"%(user)s\" has been registered."
 msgstr "Nuevo usuario \"%(user)s\" ha sido registrado."
 
-#: users/admin/views/users.py:285
+#: users/admin/views/users.py:287
 #, python-format
 msgid "User \"%(user)s\" has been edited."
 msgstr "Usuario \"%(user)s\" ha sido editado."
@@ -7405,72 +7568,72 @@ msgstr "Error al cambiar el nombre de usuario. Por favor inténtalo de nuevo"
 msgid "You don't have permission to see other users name history."
 msgstr "No tienes permiso para ver el historial de nombres de otros usuarios."
 
-#: users/api/users.py:63
+#: users/api/users.py:64
 msgid "You have to sign in to perform this action."
 msgstr "Debes iniciar sesión para realizar esta acción."
 
-#: users/api/users.py:89
+#: users/api/users.py:90
 msgid "Please use the 3rd party site to register."
 msgstr ""
 
-#: users/api/users.py:112
+#: users/api/users.py:113
 msgid "You can't change other users avatars."
 msgstr "No puedes cambiar avatares de otros usuarios."
 
-#: users/api/users.py:124
+#: users/api/users.py:125
 msgid "You can't change other users options."
 msgstr "No puede cambiar opciones de otros usuarios."
 
-#: users/api/users.py:129
+#: users/api/users.py:130
 msgid "Your forum options have been changed."
 msgstr "Tus opciones de foro han sido cambiadas."
 
-#: users/api/users.py:136
+#: users/api/users.py:137
 msgid "Please use the 3rd party site to change your username."
 msgstr ""
 
-#: users/api/users.py:140
+#: users/api/users.py:141
 msgid "You can't change other users names."
 msgstr "No puedes cambiar otros nombres de usuarios."
 
-#: users/api/users.py:147
+#: users/api/users.py:148
 msgid "You can't change other users signatures."
 msgstr "No puedes cambiar las firmas de otros usuarios."
 
-#: users/api/users.py:160
+#: users/api/users.py:161
 msgid "Please use the 3rd party site to change your password."
 msgstr ""
 
-#: users/api/users.py:164
+#: users/api/users.py:165
 msgid "You can't change other users passwords."
 msgstr "No puedes cambiar las contraseñas de otros usuarios."
 
-#: users/api/users.py:174
+#: users/api/users.py:175
 msgid "Please use the 3rd party site to change your e-mail."
 msgstr ""
 
-#: users/api/users.py:179
+#: users/api/users.py:180
 msgid "You can't change other users e-mail addresses."
 msgstr ""
 "No puedes cambiar las direcciones de correo electrónico de otros usuarios."
 
-#: users/api/users.py:210
+#: users/api/users.py:211
 msgid "Please use the 3rd party site to delete account."
 msgstr ""
 
-#: users/api/users.py:291
+#: users/api/users.py:292
 msgid "You can't request data downloads for other users."
 msgstr ""
 
-#: users/api/users.py:295
+#: users/api/users.py:296
 msgid "You can't download your data."
 msgstr ""
 
-#: users/api/users.py:300
+#: users/api/users.py:301
 msgid "You can't have more than one data download request at a single time."
 msgstr ""
 
-#: users/api/users.py:356
+#: users/api/users.py:358
 msgid "You can't see other users data downloads."
 msgstr ""
 
@@ -7634,6 +7797,18 @@ msgstr ""
 msgid "Ready"
 msgstr ""
 
+#: users/models/deleteduser.py:12
+msgid "By self"
+msgstr ""
+
+#: users/models/deleteduser.py:13
+msgid "By staff"
+msgstr ""
+
+#: users/models/deleteduser.py:14
+msgid "By system"
+msgstr ""
+
 #: users/models/user.py:106
 msgid "Notify"
 msgstr "Notificar"

+ 5 - 1
misago/locale/es/LC_MESSAGES/djangojs.po

@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-09-01 14:10+0000\n"
+"POT-Creation-Date: 2019-09-29 00:51+0000\n"
 "PO-Revision-Date: 2017-01-16 00:04+0000\n"
 "Last-Translator: Javier Lorenzo <javichio@gmail.com>, 2017\n"
 "Language-Team: Spanish (https://www.transifex.com/misago/teams/65369/es/)\n"
@@ -1034,6 +1034,10 @@ msgstr "El mensaje ha sido revertido al estado anterior."
 msgid "See previous change"
 msgstr "Ver cambio anterior"
 
+#: static/misago/js/misago.js:7
+msgid "See next change"
+msgstr ""
+
 #: static/misago/js/misago.js:8
 msgid "By %(edited_by)s %(edited_on)s."
 msgstr "Por %(edited_by)s %(edited_on)s."

BIN
misago/locale/fr/LC_MESSAGES/django.mo


+ 238 - 63
misago/locale/fr/LC_MESSAGES/django.po

@@ -11,16 +11,16 @@
 # carine hejl <carinelg@yahoo.fr>, 2017
 # Olivier Cortès <olive@deep-ocean.net>, 2018
 # Palimpseste, 2018
-# Jimmy RUNDSTADLER, 2019
+# Jorg722, 2019
 # 
 #, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-09-01 14:10+0000\n"
+"POT-Creation-Date: 2019-09-29 00:51+0000\n"
 "PO-Revision-Date: 2017-01-16 00:04+0000\n"
-"Last-Translator: Jimmy RUNDSTADLER, 2019\n"
+"Last-Translator: Jorg722, 2019\n"
 "Language-Team: French (https://www.transifex.com/misago/teams/65369/fr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -201,7 +201,8 @@ msgstr "Description"
 msgid "Optional description explaining category intented purpose."
 msgstr "Description facultative expliquant l'objectif de la catégorie."
 
-#: categories/admin/forms.py:55 templates/misago/admin/categories/list.html:18
+#: categories/admin/forms.py:55 menus/admin/forms.py:20
+#: templates/misago/admin/categories/list.html:18
 #: templates/misago/admin/ranks/list.html:20 users/admin/forms.py:419
 msgid "CSS class"
 msgstr "Classe CSS"
@@ -1177,21 +1178,21 @@ msgstr "La valeur est trop longue."
 msgid "Uploaded image is not a square."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:32
+#: graphql/admin/versioncheck.py:27
 msgid "The site is running using unreleased version of Misago."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:34
+#: graphql/admin/versioncheck.py:29
 msgid ""
 "Unreleased versions of Misago can lack security features and there is no "
 "supported way to upgrade them to release versions later."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:47
+#: graphql/admin/versioncheck.py:42
 msgid "Failed to connect to pypi.org API. Try again later."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:49
+#: graphql/admin/versioncheck.py:44
 #: templates/misago/admin/dashboard/checks.html:17
 #: templates/misago/admin/dashboard/index.html:33
 msgid ""
@@ -1199,20 +1200,20 @@ msgid ""
 " (pypi.org) API to retrieve latest Misago release version."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:67
+#: graphql/admin/versioncheck.py:70
 msgid "The site is running updated version of Misago."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:68
+#: graphql/admin/versioncheck.py:71
 #, python-format
 msgid "Misago %(version)s is latest release."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:74
+#: graphql/admin/versioncheck.py:77
 msgid "The site is running outdated version of Misago."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:76
+#: graphql/admin/versioncheck.py:79
 #, python-format
 msgid ""
 "The site is running Misago version %(version)s while version %(latest)s is "
@@ -1268,7 +1269,8 @@ msgstr ""
 msgid "Type"
 msgstr "Type"
 
-#: legal/admin/forms.py:13 templates/misago/admin/ranks/list.html:19
+#: legal/admin/forms.py:13 menus/admin/forms.py:10
+#: templates/misago/admin/ranks/list.html:19
 msgid "Title"
 msgstr "Titre"
 
@@ -1317,13 +1319,13 @@ msgstr ""
 
 #: legal/admin/views.py:29 threads/admin/views/attachments.py:26
 #: users/admin/views/bans.py:24 users/admin/views/datadownloads.py:22
-#: users/admin/views/users.py:62
+#: users/admin/views/users.py:63
 msgid "From newest"
 msgstr "Du plus récent"
 
 #: legal/admin/views.py:29 threads/admin/views/attachments.py:27
 #: users/admin/views/bans.py:25 users/admin/views/datadownloads.py:22
-#: users/admin/views/users.py:63
+#: users/admin/views/users.py:64
 msgid "From oldest"
 msgstr "Du plus ancien"
 
@@ -1380,11 +1382,11 @@ msgstr ""
 msgid "You need to submit a valid choice."
 msgstr ""
 
-#: legal/models.py:42 templates/misago/footer.html:22
+#: legal/models.py:42 templates/misago/footer.html:29
 msgid "Terms of service"
 msgstr "Termes de service"
 
-#: legal/models.py:43 templates/misago/footer.html:27
+#: legal/models.py:43 templates/misago/footer.html:34
 msgid "Privacy policy"
 msgstr "Politique de confidentialite"
 
@@ -1410,6 +1412,105 @@ msgstr ""
 msgid "Reveal spoiler"
 msgstr ""
 
+#: menus/admin/__init__.py:31
+msgid "Menu items"
+msgstr ""
+
+#: menus/admin/__init__.py:33
+msgid "Use those options to add custom items to the navbar and footer menus."
+msgstr ""
+
+#: menus/admin/forms.py:12
+msgid "URL"
+msgstr ""
+
+#: menus/admin/forms.py:12
+msgid "URL where this item will point to."
+msgstr ""
+
+#: menus/admin/forms.py:15
+msgid "Menu"
+msgstr ""
+
+#: menus/admin/forms.py:17
+msgid "Menu in which this item will be displayed."
+msgstr ""
+
+#: menus/admin/forms.py:21
+msgid "If you want to set custom value for link's \"class\"."
+msgstr ""
+
+#: menus/admin/forms.py:25
+msgid "Open this link in new window"
+msgstr ""
+
+#: menus/admin/forms.py:27
+msgid ""
+"Enabling this option will result in the target=\"_blank\" attribute being "
+"added to this link's HTML element."
+msgstr ""
+
+#: menus/admin/forms.py:33
+msgid "Rel attribute"
+msgstr ""
+
+#: menus/admin/forms.py:35
+msgid "Optional \"rel\" attribute that this item will use (ex. \"nofollow\")."
+msgstr ""
+
+#: menus/admin/views.py:16
+msgid "Requested menu item does not exist."
+msgstr ""
+
+#: menus/admin/views.py:30
+msgid "Delete items"
+msgstr ""
+
+#: menus/admin/views.py:31
+msgid "Are you sure you want to delete those menu items?"
+msgstr ""
+
+#: menus/admin/views.py:38
+msgid "Selected menu items have been deleted."
+msgstr ""
+
+#: menus/admin/views.py:42
+#, python-format
+msgid "New menu item %(item)s has been saved."
+msgstr ""
+
+#: menus/admin/views.py:52
+#, python-format
+msgid "Menu item %(item)s has been edited."
+msgstr ""
+
+#: menus/admin/views.py:64
+#, python-format
+msgid "Menu item %(item)s has been deleted."
+msgstr ""
+
+#: menus/admin/views.py:82
+#, python-format
+msgid "Menu item %(item)s has been moved after %(other)s."
+msgstr ""
+
+#: menus/admin/views.py:101
+#, python-format
+msgid "Menu item %(item)s has been moved before %(other)s."
+msgstr ""
+
+#: menus/models.py:10
+msgid "Navbar and footer"
+msgstr ""
+
+#: menus/models.py:11 templates/misago/admin/menuitems/list.html:41
+msgid "Navbar"
+msgstr ""
+
+#: menus/models.py:12 templates/misago/admin/menuitems/list.html:46
+msgid "Footer"
+msgstr ""
+
 #: search/api.py:17 search/views.py:12 search/views.py:21
 msgid "You don't have permission to search site."
 msgstr "Vous n'avez pas le permission de parcourir le contenu du site."
@@ -1651,6 +1752,7 @@ msgstr ""
 #: templates/misago/admin/agreements/form.html:48
 #: templates/misago/admin/categoryroles/form.html:36
 #: templates/misago/admin/conf/captcha_settings.html:8
+#: templates/misago/admin/menuitems/form.html:41
 #: templates/misago/admin/roles/form.html:36
 msgid "Basic settings"
 msgstr "Parametres par defaut"
@@ -1824,6 +1926,7 @@ msgstr ""
 
 #: templates/misago/admin/attachmenttypes/list.html:57
 #: templates/misago/admin/categories/list.html:45
+#: templates/misago/admin/menuitems/list.html:54
 #: templates/misago/admin/ranks/list.html:59
 #: templates/misago/admin/ranks/list.html:66
 msgid "Not set"
@@ -1966,7 +2069,7 @@ msgid "Category"
 msgstr "Catégorie"
 
 #: templates/misago/admin/categories/list.html:20
-#: templates/misago/admin/dashboard/index.html:44
+#: templates/misago/admin/dashboard/index.html:45
 #: templates/misago/admin/dashboard/totals.html:31
 #: templates/misago/admin/users/list.html:21
 #: templates/misago/profile/posts.html:5 templates/misago/profile/posts.html:8
@@ -1975,6 +2078,7 @@ msgid "Posts"
 msgstr "Messages"
 
 #: templates/misago/admin/categories/list.html:58
+#: templates/misago/admin/menuitems/list.html:72
 #: templates/misago/admin/ranks/list.html:74
 #: templates/misago/admin/socialauth/list.html:32
 #: templates/misago/admin/themes/assets/css.html:68
@@ -1983,6 +2087,7 @@ msgid "Move down"
 msgstr "Descendre"
 
 #: templates/misago/admin/categories/list.html:72
+#: templates/misago/admin/menuitems/list.html:86
 #: templates/misago/admin/ranks/list.html:88
 #: templates/misago/admin/socialauth/list.html:46
 #: templates/misago/admin/themes/assets/css.html:73
@@ -2265,18 +2370,22 @@ msgid "User registrations"
 msgstr ""
 
 #: templates/misago/admin/dashboard/index.html:43
+msgid "User deletions"
+msgstr ""
+
+#: templates/misago/admin/dashboard/index.html:44
 msgid "Threads started"
 msgstr ""
 
-#: templates/misago/admin/dashboard/index.html:45
+#: templates/misago/admin/dashboard/index.html:46
 msgid "Attachments uploaded"
 msgstr ""
 
-#: templates/misago/admin/dashboard/index.html:46
+#: templates/misago/admin/dashboard/index.html:47
 msgid "Data download requests"
 msgstr ""
 
-#: templates/misago/admin/dashboard/index.html:48
+#: templates/misago/admin/dashboard/index.html:49
 msgid "Site analytics are currently unavailable due to an error."
 msgstr ""
 
@@ -2567,6 +2676,60 @@ msgstr "S'enregistrer"
 msgid "Return to site"
 msgstr ""
 
+#: templates/misago/admin/menuitems/form.html:9
+#: templates/misago/admin/menuitems/form.html:33
+#: templates/misago/admin/menuitems/list.html:9
+msgid "New menu item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/form.html:31
+msgid "Edit menu item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/form.html:50
+msgid "Behavior and appearance"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:16
+msgid "Item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:18
+msgid "CSS Class"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:19
+msgid "Target"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:20
+msgid "Rel"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:40
+msgid "Is displayed on the forum navbar."
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:45
+msgid "Is displayed on the forum footer."
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:103
+msgid "Edit item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:108
+msgid "Remove item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:119
+msgid "No menu items are set."
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:129
+msgid "Are you sure you want to remove this menu item?"
+msgstr ""
+
 #: templates/misago/admin/navbar.html:12
 msgid "GitHub"
 msgstr ""
@@ -2887,7 +3050,7 @@ msgid ""
 msgstr ""
 
 #: templates/misago/admin/users/ban.html:6
-#: templates/misago/admin/users/ban.html:82 users/admin/views/users.py:73
+#: templates/misago/admin/users/ban.html:82 users/admin/views/users.py:74
 msgid "Ban users"
 msgstr "Utilisateurs bannis"
 
@@ -4720,12 +4883,12 @@ msgid "Requested attachment could not be found."
 msgstr "La pièce jointe requise n'a pu être trouvée"
 
 #: threads/admin/views/attachments.py:28 users/admin/views/bans.py:26
-#: users/admin/views/users.py:64
+#: users/admin/views/users.py:65
 msgid "A to z"
 msgstr "A à Z"
 
 #: threads/admin/views/attachments.py:29 users/admin/views/bans.py:27
-#: users/admin/views/users.py:65
+#: users/admin/views/users.py:66
 msgid "Z to a"
 msgstr "Z à A"
 
@@ -7423,43 +7586,43 @@ msgstr "Le rang « %(name)s » est déjà le rang par défaut."
 msgid "Rank \"%(name)s\" has been made default."
 msgstr "Le rang « %(name)s » a été défini comme rang par défaut."
 
-#: users/admin/views/users.py:66
+#: users/admin/views/users.py:67
 msgid "Biggest posters"
 msgstr "Intervenants les plus actifs"
 
-#: users/admin/views/users.py:67
+#: users/admin/views/users.py:68
 msgid "Smallest posters"
 msgstr "intervenants les moins actifs"
 
-#: users/admin/views/users.py:69
+#: users/admin/views/users.py:70
 msgid "With users: 0"
 msgstr "Avec des utilisateurs : 0"
 
-#: users/admin/views/users.py:70
+#: users/admin/views/users.py:71
 msgid "Select users"
 msgstr "Sélectionner des utilisateurs "
 
-#: users/admin/views/users.py:72
+#: users/admin/views/users.py:73
 msgid "Activate accounts"
 msgstr "Activer des comptes"
 
-#: users/admin/views/users.py:74
+#: users/admin/views/users.py:75
 msgid "Request data download"
 msgstr ""
 
-#: users/admin/views/users.py:77
+#: users/admin/views/users.py:78
 msgid "Delete accounts"
 msgstr "Supprimer des comptes"
 
-#: users/admin/views/users.py:78
+#: users/admin/views/users.py:79
 msgid "Are you sure you want to delete selected users?"
 msgstr "Etes vous certain de supprimer les utilisateurs sélectionnés ?"
 
-#: users/admin/views/users.py:82
+#: users/admin/views/users.py:83
 msgid "Delete with content"
 msgstr ""
 
-#: users/admin/views/users.py:84
+#: users/admin/views/users.py:85
 msgid ""
 "Are you sure you want to delete selected users? This will also delete all "
 "content associated with their accounts."
@@ -7467,57 +7630,57 @@ msgstr ""
 "Etes vous certain de vouloir supprimer les utilisateurs sélectionnés ? Cela "
 "supprimera également tous les contenus associés à leurs comptes."
 
-#: users/admin/views/users.py:105
+#: users/admin/views/users.py:106
 msgid "You have to select inactive users."
 msgstr "Vous devez sélectionner des utilisateurs inactifs."
 
-#: users/admin/views/users.py:112
+#: users/admin/views/users.py:113
 #, python-format
 msgid "Your account on %(forum_name)s forums has been activated"
 msgstr "Votre compte sur le forum %(forum_name)s a été activé."
 
-#: users/admin/views/users.py:122
+#: users/admin/views/users.py:123
 msgid "Selected users accounts have been activated."
 msgstr "Les comptes des utilisateurs sélectionnés ont été activés."
 
-#: users/admin/views/users.py:130
+#: users/admin/views/users.py:131
 #, python-format
 msgid "%(user)s is super admin and can't be banned."
 msgstr "%(user)s est un super administrateur et ne peut être banni."
 
-#: users/admin/views/users.py:192
+#: users/admin/views/users.py:193
 msgid "Selected users have been banned."
 msgstr "Les utilisateurs sélectionnés ont été bannis."
 
-#: users/admin/views/users.py:207
+#: users/admin/views/users.py:208
 msgid "Data download requests have been placed for selected users."
 msgstr ""
 
-#: users/admin/views/users.py:213 users/admin/views/users.py:228
+#: users/admin/views/users.py:214 users/admin/views/users.py:230
 msgid "You can't delete yourself."
 msgstr "Vous ne pouvez supprimer votre compte."
 
-#: users/admin/views/users.py:215 users/admin/views/users.py:230
+#: users/admin/views/users.py:216 users/admin/views/users.py:232
 #, python-format
 msgid "%(user)s is admin and can't be deleted."
 msgstr "%(user)s est administrateur et ne peut être supprimé."
 
-#: users/admin/views/users.py:223
+#: users/admin/views/users.py:225
 msgid "Selected users have been deleted."
 msgstr "Les utilisateurs sélectionnés ont été supprimés."
 
-#: users/admin/views/users.py:244
+#: users/admin/views/users.py:246
 msgid ""
 "Selected users have been disabled and queued for deletion together with "
 "their content."
 msgstr ""
 
-#: users/admin/views/users.py:253
+#: users/admin/views/users.py:255
 #, python-format
 msgid "New user \"%(user)s\" has been registered."
 msgstr "Le nouvel utilisateur « %(user)s » a été enregistré."
 
-#: users/admin/views/users.py:285
+#: users/admin/views/users.py:287
 #, python-format
 msgid "User \"%(user)s\" has been edited."
 msgstr "L'utilisateur « %(user)s » a été modifié."
@@ -7649,71 +7812,71 @@ msgid "You don't have permission to see other users name history."
 msgstr ""
 "Vous n'avez pas le droit d'accéder à l'historique des autres utilisateurs."
 
-#: users/api/users.py:63
+#: users/api/users.py:64
 msgid "You have to sign in to perform this action."
 msgstr "Vous devez vous identifier pour réaliser cette action."
 
-#: users/api/users.py:89
+#: users/api/users.py:90
 msgid "Please use the 3rd party site to register."
 msgstr ""
 
-#: users/api/users.py:112
+#: users/api/users.py:113
 msgid "You can't change other users avatars."
 msgstr "Vous ne pouvez modifier les avatars des autres utilisateurs."
 
-#: users/api/users.py:124
+#: users/api/users.py:125
 msgid "You can't change other users options."
 msgstr "Vous ne pouvez modifier les options des autres utilisateurs."
 
-#: users/api/users.py:129
+#: users/api/users.py:130
 msgid "Your forum options have been changed."
 msgstr "Les options de votre forum ont été modifiées."
 
-#: users/api/users.py:136
+#: users/api/users.py:137
 msgid "Please use the 3rd party site to change your username."
 msgstr ""
 
-#: users/api/users.py:140
+#: users/api/users.py:141
 msgid "You can't change other users names."
 msgstr "Vous ne pouvez modifier les noms des autres utilisateurs."
 
-#: users/api/users.py:147
+#: users/api/users.py:148
 msgid "You can't change other users signatures."
 msgstr "Vous ne pouvez modifier les identifiants des autres utilisateurs."
 
-#: users/api/users.py:160
+#: users/api/users.py:161
 msgid "Please use the 3rd party site to change your password."
 msgstr ""
 
-#: users/api/users.py:164
+#: users/api/users.py:165
 msgid "You can't change other users passwords."
 msgstr "Vous ne pouvez modifier les mots de passe des autres utilisateurs."
 
-#: users/api/users.py:174
+#: users/api/users.py:175
 msgid "Please use the 3rd party site to change your e-mail."
 msgstr ""
 
-#: users/api/users.py:179
+#: users/api/users.py:180
 msgid "You can't change other users e-mail addresses."
 msgstr "Vous ne pouvez modifier les courriels des autres utilisateurs."
 
-#: users/api/users.py:210
+#: users/api/users.py:211
 msgid "Please use the 3rd party site to delete account."
 msgstr ""
 
-#: users/api/users.py:291
+#: users/api/users.py:292
 msgid "You can't request data downloads for other users."
 msgstr ""
 
-#: users/api/users.py:295
+#: users/api/users.py:296
 msgid "You can't download your data."
 msgstr ""
 
-#: users/api/users.py:300
+#: users/api/users.py:301
 msgid "You can't have more than one data download request at a single time."
 msgstr ""
 
-#: users/api/users.py:356
+#: users/api/users.py:358
 msgid "You can't see other users data downloads."
 msgstr ""
 
@@ -7881,6 +8044,18 @@ msgstr ""
 msgid "Ready"
 msgstr "Prêt"
 
+#: users/models/deleteduser.py:12
+msgid "By self"
+msgstr ""
+
+#: users/models/deleteduser.py:13
+msgid "By staff"
+msgstr ""
+
+#: users/models/deleteduser.py:14
+msgid "By system"
+msgstr ""
+
 #: users/models/user.py:106
 msgid "Notify"
 msgstr "Notifier"

BIN
misago/locale/fr/LC_MESSAGES/djangojs.mo


+ 7 - 3
misago/locale/fr/LC_MESSAGES/djangojs.po

@@ -7,16 +7,16 @@
 # Amandine G <amandyfriendly@msn.com>, 2017
 # Olivier Cortès <olive@deep-ocean.net>, 2018
 # Palimpseste, 2018
-# Jimmy RUNDSTADLER, 2019
+# Jorg722, 2019
 # 
 #, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-09-01 14:10+0000\n"
+"POT-Creation-Date: 2019-09-29 00:51+0000\n"
 "PO-Revision-Date: 2017-01-16 00:04+0000\n"
-"Last-Translator: Jimmy RUNDSTADLER, 2019\n"
+"Last-Translator: Jorg722, 2019\n"
 "Language-Team: French (https://www.transifex.com/misago/teams/65369/fr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -1048,6 +1048,10 @@ msgstr "La version précédente de la publication a été rétablie."
 msgid "See previous change"
 msgstr "Voir le changement précédent"
 
+#: static/misago/js/misago.js:7
+msgid "See next change"
+msgstr ""
+
 #: static/misago/js/misago.js:8
 msgid "By %(edited_by)s %(edited_on)s."
 msgstr "Par %(edited_by)s le %(edited_on)s."

+ 236 - 61
misago/locale/ru/LC_MESSAGES/django.po

@@ -15,7 +15,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-09-01 14:10+0000\n"
+"POT-Creation-Date: 2019-09-29 00:51+0000\n"
 "PO-Revision-Date: 2017-01-16 00:04+0000\n"
 "Last-Translator: alff0x1f <alff3one@gmail.com>, 2018\n"
 "Language-Team: Russian (https://www.transifex.com/misago/teams/65369/ru/)\n"
@@ -197,7 +197,8 @@ msgstr "Описание"
 msgid "Optional description explaining category intented purpose."
 msgstr "Необязательное описание, объясняющее назначение категории."
 
-#: categories/admin/forms.py:55 templates/misago/admin/categories/list.html:18
+#: categories/admin/forms.py:55 menus/admin/forms.py:20
+#: templates/misago/admin/categories/list.html:18
 #: templates/misago/admin/ranks/list.html:20 users/admin/forms.py:419
 msgid "CSS class"
 msgstr "CSS класс"
@@ -1162,21 +1163,21 @@ msgstr "Значение слишком длинное."
 msgid "Uploaded image is not a square."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:32
+#: graphql/admin/versioncheck.py:27
 msgid "The site is running using unreleased version of Misago."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:34
+#: graphql/admin/versioncheck.py:29
 msgid ""
 "Unreleased versions of Misago can lack security features and there is no "
 "supported way to upgrade them to release versions later."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:47
+#: graphql/admin/versioncheck.py:42
 msgid "Failed to connect to pypi.org API. Try again later."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:49
+#: graphql/admin/versioncheck.py:44
 #: templates/misago/admin/dashboard/checks.html:17
 #: templates/misago/admin/dashboard/index.html:33
 msgid ""
@@ -1184,20 +1185,20 @@ msgid ""
 " (pypi.org) API to retrieve latest Misago release version."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:67
+#: graphql/admin/versioncheck.py:70
 msgid "The site is running updated version of Misago."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:68
+#: graphql/admin/versioncheck.py:71
 #, python-format
 msgid "Misago %(version)s is latest release."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:74
+#: graphql/admin/versioncheck.py:77
 msgid "The site is running outdated version of Misago."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:76
+#: graphql/admin/versioncheck.py:79
 #, python-format
 msgid ""
 "The site is running Misago version %(version)s while version %(latest)s is "
@@ -1253,7 +1254,8 @@ msgstr ""
 msgid "Type"
 msgstr "Тип"
 
-#: legal/admin/forms.py:13 templates/misago/admin/ranks/list.html:19
+#: legal/admin/forms.py:13 menus/admin/forms.py:10
+#: templates/misago/admin/ranks/list.html:19
 msgid "Title"
 msgstr "Заголовок"
 
@@ -1302,13 +1304,13 @@ msgstr ""
 
 #: legal/admin/views.py:29 threads/admin/views/attachments.py:26
 #: users/admin/views/bans.py:24 users/admin/views/datadownloads.py:22
-#: users/admin/views/users.py:62
+#: users/admin/views/users.py:63
 msgid "From newest"
 msgstr "От новейшего"
 
 #: legal/admin/views.py:29 threads/admin/views/attachments.py:27
 #: users/admin/views/bans.py:25 users/admin/views/datadownloads.py:22
-#: users/admin/views/users.py:63
+#: users/admin/views/users.py:64
 msgid "From oldest"
 msgstr "От старого"
 
@@ -1365,11 +1367,11 @@ msgstr ""
 msgid "You need to submit a valid choice."
 msgstr ""
 
-#: legal/models.py:42 templates/misago/footer.html:22
+#: legal/models.py:42 templates/misago/footer.html:29
 msgid "Terms of service"
 msgstr "Условия использования"
 
-#: legal/models.py:43 templates/misago/footer.html:27
+#: legal/models.py:43 templates/misago/footer.html:34
 msgid "Privacy policy"
 msgstr "Политика конфиденциальности"
 
@@ -1395,6 +1397,105 @@ msgstr ""
 msgid "Reveal spoiler"
 msgstr ""
 
+#: menus/admin/__init__.py:31
+msgid "Menu items"
+msgstr ""
+
+#: menus/admin/__init__.py:33
+msgid "Use those options to add custom items to the navbar and footer menus."
+msgstr ""
+
+#: menus/admin/forms.py:12
+msgid "URL"
+msgstr ""
+
+#: menus/admin/forms.py:12
+msgid "URL where this item will point to."
+msgstr ""
+
+#: menus/admin/forms.py:15
+msgid "Menu"
+msgstr ""
+
+#: menus/admin/forms.py:17
+msgid "Menu in which this item will be displayed."
+msgstr ""
+
+#: menus/admin/forms.py:21
+msgid "If you want to set custom value for link's \"class\"."
+msgstr ""
+
+#: menus/admin/forms.py:25
+msgid "Open this link in new window"
+msgstr ""
+
+#: menus/admin/forms.py:27
+msgid ""
+"Enabling this option will result in the target=\"_blank\" attribute being "
+"added to this link's HTML element."
+msgstr ""
+
+#: menus/admin/forms.py:33
+msgid "Rel attribute"
+msgstr ""
+
+#: menus/admin/forms.py:35
+msgid "Optional \"rel\" attribute that this item will use (ex. \"nofollow\")."
+msgstr ""
+
+#: menus/admin/views.py:16
+msgid "Requested menu item does not exist."
+msgstr ""
+
+#: menus/admin/views.py:30
+msgid "Delete items"
+msgstr ""
+
+#: menus/admin/views.py:31
+msgid "Are you sure you want to delete those menu items?"
+msgstr ""
+
+#: menus/admin/views.py:38
+msgid "Selected menu items have been deleted."
+msgstr ""
+
+#: menus/admin/views.py:42
+#, python-format
+msgid "New menu item %(item)s has been saved."
+msgstr ""
+
+#: menus/admin/views.py:52
+#, python-format
+msgid "Menu item %(item)s has been edited."
+msgstr ""
+
+#: menus/admin/views.py:64
+#, python-format
+msgid "Menu item %(item)s has been deleted."
+msgstr ""
+
+#: menus/admin/views.py:82
+#, python-format
+msgid "Menu item %(item)s has been moved after %(other)s."
+msgstr ""
+
+#: menus/admin/views.py:101
+#, python-format
+msgid "Menu item %(item)s has been moved before %(other)s."
+msgstr ""
+
+#: menus/models.py:10
+msgid "Navbar and footer"
+msgstr ""
+
+#: menus/models.py:11 templates/misago/admin/menuitems/list.html:41
+msgid "Navbar"
+msgstr ""
+
+#: menus/models.py:12 templates/misago/admin/menuitems/list.html:46
+msgid "Footer"
+msgstr ""
+
 #: search/api.py:17 search/views.py:12 search/views.py:21
 msgid "You don't have permission to search site."
 msgstr "У вас нет разрешения искать по сайту."
@@ -1634,6 +1735,7 @@ msgstr ""
 #: templates/misago/admin/agreements/form.html:48
 #: templates/misago/admin/categoryroles/form.html:36
 #: templates/misago/admin/conf/captcha_settings.html:8
+#: templates/misago/admin/menuitems/form.html:41
 #: templates/misago/admin/roles/form.html:36
 msgid "Basic settings"
 msgstr "Базовые настройки"
@@ -1807,6 +1909,7 @@ msgstr ""
 
 #: templates/misago/admin/attachmenttypes/list.html:57
 #: templates/misago/admin/categories/list.html:45
+#: templates/misago/admin/menuitems/list.html:54
 #: templates/misago/admin/ranks/list.html:59
 #: templates/misago/admin/ranks/list.html:66
 msgid "Not set"
@@ -1949,7 +2052,7 @@ msgid "Category"
 msgstr "Категория"
 
 #: templates/misago/admin/categories/list.html:20
-#: templates/misago/admin/dashboard/index.html:44
+#: templates/misago/admin/dashboard/index.html:45
 #: templates/misago/admin/dashboard/totals.html:31
 #: templates/misago/admin/users/list.html:21
 #: templates/misago/profile/posts.html:5 templates/misago/profile/posts.html:8
@@ -1958,6 +2061,7 @@ msgid "Posts"
 msgstr "Сообщения"
 
 #: templates/misago/admin/categories/list.html:58
+#: templates/misago/admin/menuitems/list.html:72
 #: templates/misago/admin/ranks/list.html:74
 #: templates/misago/admin/socialauth/list.html:32
 #: templates/misago/admin/themes/assets/css.html:68
@@ -1966,6 +2070,7 @@ msgid "Move down"
 msgstr "Опустить"
 
 #: templates/misago/admin/categories/list.html:72
+#: templates/misago/admin/menuitems/list.html:86
 #: templates/misago/admin/ranks/list.html:88
 #: templates/misago/admin/socialauth/list.html:46
 #: templates/misago/admin/themes/assets/css.html:73
@@ -2252,18 +2357,22 @@ msgid "User registrations"
 msgstr ""
 
 #: templates/misago/admin/dashboard/index.html:43
+msgid "User deletions"
+msgstr ""
+
+#: templates/misago/admin/dashboard/index.html:44
 msgid "Threads started"
 msgstr ""
 
-#: templates/misago/admin/dashboard/index.html:45
+#: templates/misago/admin/dashboard/index.html:46
 msgid "Attachments uploaded"
 msgstr ""
 
-#: templates/misago/admin/dashboard/index.html:46
+#: templates/misago/admin/dashboard/index.html:47
 msgid "Data download requests"
 msgstr ""
 
-#: templates/misago/admin/dashboard/index.html:48
+#: templates/misago/admin/dashboard/index.html:49
 msgid "Site analytics are currently unavailable due to an error."
 msgstr ""
 
@@ -2554,6 +2663,60 @@ msgstr "Регистрация"
 msgid "Return to site"
 msgstr ""
 
+#: templates/misago/admin/menuitems/form.html:9
+#: templates/misago/admin/menuitems/form.html:33
+#: templates/misago/admin/menuitems/list.html:9
+msgid "New menu item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/form.html:31
+msgid "Edit menu item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/form.html:50
+msgid "Behavior and appearance"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:16
+msgid "Item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:18
+msgid "CSS Class"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:19
+msgid "Target"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:20
+msgid "Rel"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:40
+msgid "Is displayed on the forum navbar."
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:45
+msgid "Is displayed on the forum footer."
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:103
+msgid "Edit item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:108
+msgid "Remove item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:119
+msgid "No menu items are set."
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:129
+msgid "Are you sure you want to remove this menu item?"
+msgstr ""
+
 #: templates/misago/admin/navbar.html:12
 msgid "GitHub"
 msgstr ""
@@ -2874,7 +3037,7 @@ msgid ""
 msgstr ""
 
 #: templates/misago/admin/users/ban.html:6
-#: templates/misago/admin/users/ban.html:82 users/admin/views/users.py:73
+#: templates/misago/admin/users/ban.html:82 users/admin/views/users.py:74
 msgid "Ban users"
 msgstr "Блокировать пользователей"
 
@@ -4734,12 +4897,12 @@ msgid "Requested attachment could not be found."
 msgstr "Запрошенное вложение не может быть найдено."
 
 #: threads/admin/views/attachments.py:28 users/admin/views/bans.py:26
-#: users/admin/views/users.py:64
+#: users/admin/views/users.py:65
 msgid "A to z"
 msgstr "От А до я"
 
 #: threads/admin/views/attachments.py:29 users/admin/views/bans.py:27
-#: users/admin/views/users.py:65
+#: users/admin/views/users.py:66
 msgid "Z to a"
 msgstr "От Я до а"
 
@@ -7344,43 +7507,43 @@ msgstr "Ранг \"%(name)s\" уже является рангом по умол
 msgid "Rank \"%(name)s\" has been made default."
 msgstr "Ранг \"%(name)s\" был назначен рангом по умолчанию."
 
-#: users/admin/views/users.py:66
+#: users/admin/views/users.py:67
 msgid "Biggest posters"
 msgstr "Наибольшие постеры"
 
-#: users/admin/views/users.py:67
+#: users/admin/views/users.py:68
 msgid "Smallest posters"
 msgstr "Наименьшие постеры"
 
-#: users/admin/views/users.py:69
+#: users/admin/views/users.py:70
 msgid "With users: 0"
 msgstr "С пользователями: 0"
 
-#: users/admin/views/users.py:70
+#: users/admin/views/users.py:71
 msgid "Select users"
 msgstr "Выбрать пользователей"
 
-#: users/admin/views/users.py:72
+#: users/admin/views/users.py:73
 msgid "Activate accounts"
 msgstr "Активировать аккаунты"
 
-#: users/admin/views/users.py:74
+#: users/admin/views/users.py:75
 msgid "Request data download"
 msgstr ""
 
-#: users/admin/views/users.py:77
+#: users/admin/views/users.py:78
 msgid "Delete accounts"
 msgstr "Удалить аккаунты"
 
-#: users/admin/views/users.py:78
+#: users/admin/views/users.py:79
 msgid "Are you sure you want to delete selected users?"
 msgstr "Вы уверены что хотите удалить выбранных пользователей?"
 
-#: users/admin/views/users.py:82
+#: users/admin/views/users.py:83
 msgid "Delete with content"
 msgstr ""
 
-#: users/admin/views/users.py:84
+#: users/admin/views/users.py:85
 msgid ""
 "Are you sure you want to delete selected users? This will also delete all "
 "content associated with their accounts."
@@ -7388,57 +7551,57 @@ msgstr ""
 "Вы уверены что хотите удалить выбранных пользователей? Это также удалит все "
 "данные, связанные с этими аккаунтами."
 
-#: users/admin/views/users.py:105
+#: users/admin/views/users.py:106
 msgid "You have to select inactive users."
 msgstr "Вы должны выбрать неактивных пользователей."
 
-#: users/admin/views/users.py:112
+#: users/admin/views/users.py:113
 #, python-format
 msgid "Your account on %(forum_name)s forums has been activated"
 msgstr "Ваш аккаунт на форуме %(forum_name)s был активирован"
 
-#: users/admin/views/users.py:122
+#: users/admin/views/users.py:123
 msgid "Selected users accounts have been activated."
 msgstr "Выбранные аккаунты пользователей были активированы."
 
-#: users/admin/views/users.py:130
+#: users/admin/views/users.py:131
 #, python-format
 msgid "%(user)s is super admin and can't be banned."
 msgstr "%(user)s - суперадминистратор и не может быть заблокирован."
 
-#: users/admin/views/users.py:192
+#: users/admin/views/users.py:193
 msgid "Selected users have been banned."
 msgstr "Выбранные пользователи были заблокированы."
 
-#: users/admin/views/users.py:207
+#: users/admin/views/users.py:208
 msgid "Data download requests have been placed for selected users."
 msgstr ""
 
-#: users/admin/views/users.py:213 users/admin/views/users.py:228
+#: users/admin/views/users.py:214 users/admin/views/users.py:230
 msgid "You can't delete yourself."
 msgstr "Вы не можете удалить себя."
 
-#: users/admin/views/users.py:215 users/admin/views/users.py:230
+#: users/admin/views/users.py:216 users/admin/views/users.py:232
 #, python-format
 msgid "%(user)s is admin and can't be deleted."
 msgstr "%(user)s - администратор и не может быть удален."
 
-#: users/admin/views/users.py:223
+#: users/admin/views/users.py:225
 msgid "Selected users have been deleted."
 msgstr "Выбранные пользователи были удалены."
 
-#: users/admin/views/users.py:244
+#: users/admin/views/users.py:246
 msgid ""
 "Selected users have been disabled and queued for deletion together with "
 "their content."
 msgstr ""
 
-#: users/admin/views/users.py:253
+#: users/admin/views/users.py:255
 #, python-format
 msgid "New user \"%(user)s\" has been registered."
 msgstr "Новый пользователь \"%(user)s\" был зарегистрирован."
 
-#: users/admin/views/users.py:285
+#: users/admin/views/users.py:287
 #, python-format
 msgid "User \"%(user)s\" has been edited."
 msgstr "Пользователь \"%(user)s\" был отредактирован."
@@ -7561,71 +7724,71 @@ msgstr "Ошибка изменения имени пользователя. П
 msgid "You don't have permission to see other users name history."
 msgstr "У вас нет разрешения просматривать историю имён других пользователей."
 
-#: users/api/users.py:63
+#: users/api/users.py:64
 msgid "You have to sign in to perform this action."
 msgstr "Вы должны войти, чтобы выполнить это действие."
 
-#: users/api/users.py:89
+#: users/api/users.py:90
 msgid "Please use the 3rd party site to register."
 msgstr ""
 
-#: users/api/users.py:112
+#: users/api/users.py:113
 msgid "You can't change other users avatars."
 msgstr "Вы не можете изменять аватары других пользователей."
 
-#: users/api/users.py:124
+#: users/api/users.py:125
 msgid "You can't change other users options."
 msgstr "Вы не можете изменять настройки других пользователей."
 
-#: users/api/users.py:129
+#: users/api/users.py:130
 msgid "Your forum options have been changed."
 msgstr "Ваши настройки форума были изменены."
 
-#: users/api/users.py:136
+#: users/api/users.py:137
 msgid "Please use the 3rd party site to change your username."
 msgstr ""
 
-#: users/api/users.py:140
+#: users/api/users.py:141
 msgid "You can't change other users names."
 msgstr "Вы не можете менять имена других пользователей."
 
-#: users/api/users.py:147
+#: users/api/users.py:148
 msgid "You can't change other users signatures."
 msgstr "Вы не можете менять подписи других пользователей."
 
-#: users/api/users.py:160
+#: users/api/users.py:161
 msgid "Please use the 3rd party site to change your password."
 msgstr ""
 
-#: users/api/users.py:164
+#: users/api/users.py:165
 msgid "You can't change other users passwords."
 msgstr "Вы не можете менять пароли других пользователей."
 
-#: users/api/users.py:174
+#: users/api/users.py:175
 msgid "Please use the 3rd party site to change your e-mail."
 msgstr ""
 
-#: users/api/users.py:179
+#: users/api/users.py:180
 msgid "You can't change other users e-mail addresses."
 msgstr "Вы не можете менять e-mail адреса других пользователей."
 
-#: users/api/users.py:210
+#: users/api/users.py:211
 msgid "Please use the 3rd party site to delete account."
 msgstr ""
 
-#: users/api/users.py:291
+#: users/api/users.py:292
 msgid "You can't request data downloads for other users."
 msgstr ""
 
-#: users/api/users.py:295
+#: users/api/users.py:296
 msgid "You can't download your data."
 msgstr ""
 
-#: users/api/users.py:300
+#: users/api/users.py:301
 msgid "You can't have more than one data download request at a single time."
 msgstr ""
 
-#: users/api/users.py:356
+#: users/api/users.py:358
 msgid "You can't see other users data downloads."
 msgstr ""
 
@@ -7791,6 +7954,18 @@ msgstr ""
 msgid "Ready"
 msgstr ""
 
+#: users/models/deleteduser.py:12
+msgid "By self"
+msgstr ""
+
+#: users/models/deleteduser.py:13
+msgid "By staff"
+msgstr ""
+
+#: users/models/deleteduser.py:14
+msgid "By system"
+msgstr ""
+
 #: users/models/user.py:106
 msgid "Notify"
 msgstr "Уведомлять"

+ 5 - 1
misago/locale/ru/LC_MESSAGES/djangojs.po

@@ -17,7 +17,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-09-01 14:10+0000\n"
+"POT-Creation-Date: 2019-09-29 00:51+0000\n"
 "PO-Revision-Date: 2017-01-16 00:04+0000\n"
 "Last-Translator: Katrin Kutepova <blackkatelv@gmail.com>, 2018\n"
 "Language-Team: Russian (https://www.transifex.com/misago/teams/65369/ru/)\n"
@@ -1056,6 +1056,10 @@ msgstr "Сообщение было возвращено в предыдущее
 msgid "See previous change"
 msgstr "Посмотреть предыдущее изменение"
 
+#: static/misago/js/misago.js:7
+msgid "See next change"
+msgstr ""
+
 #: static/misago/js/misago.js:8
 msgid "By %(edited_by)s %(edited_on)s."
 msgstr "Опубликовал  %(poster)s  %(posted_on)s."

+ 236 - 61
misago/locale/tr/LC_MESSAGES/django.po

@@ -15,7 +15,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-09-01 14:10+0000\n"
+"POT-Creation-Date: 2019-09-29 00:51+0000\n"
 "PO-Revision-Date: 2017-01-16 00:04+0000\n"
 "Last-Translator: bedirhan doğan yılmaz <bedirhandoganyilmaz@gmail.com>, 2018\n"
 "Language-Team: Turkish (Turkey) (https://www.transifex.com/misago/teams/65369/tr_TR/)\n"
@@ -197,7 +197,8 @@ msgstr "Açıklama"
 msgid "Optional description explaining category intented purpose."
 msgstr "bölüm beyan edilen isteğe bağlı açıklama."
 
-#: categories/admin/forms.py:55 templates/misago/admin/categories/list.html:18
+#: categories/admin/forms.py:55 menus/admin/forms.py:20
+#: templates/misago/admin/categories/list.html:18
 #: templates/misago/admin/ranks/list.html:20 users/admin/forms.py:419
 msgid "CSS class"
 msgstr "CSS sınıfı"
@@ -1161,21 +1162,21 @@ msgstr "Veri çok uzun."
 msgid "Uploaded image is not a square."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:32
+#: graphql/admin/versioncheck.py:27
 msgid "The site is running using unreleased version of Misago."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:34
+#: graphql/admin/versioncheck.py:29
 msgid ""
 "Unreleased versions of Misago can lack security features and there is no "
 "supported way to upgrade them to release versions later."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:47
+#: graphql/admin/versioncheck.py:42
 msgid "Failed to connect to pypi.org API. Try again later."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:49
+#: graphql/admin/versioncheck.py:44
 #: templates/misago/admin/dashboard/checks.html:17
 #: templates/misago/admin/dashboard/index.html:33
 msgid ""
@@ -1183,20 +1184,20 @@ msgid ""
 " (pypi.org) API to retrieve latest Misago release version."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:67
+#: graphql/admin/versioncheck.py:70
 msgid "The site is running updated version of Misago."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:68
+#: graphql/admin/versioncheck.py:71
 #, python-format
 msgid "Misago %(version)s is latest release."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:74
+#: graphql/admin/versioncheck.py:77
 msgid "The site is running outdated version of Misago."
 msgstr ""
 
-#: graphql/admin/versioncheck.py:76
+#: graphql/admin/versioncheck.py:79
 #, python-format
 msgid ""
 "The site is running Misago version %(version)s while version %(latest)s is "
@@ -1252,7 +1253,8 @@ msgstr ""
 msgid "Type"
 msgstr "Tür"
 
-#: legal/admin/forms.py:13 templates/misago/admin/ranks/list.html:19
+#: legal/admin/forms.py:13 menus/admin/forms.py:10
+#: templates/misago/admin/ranks/list.html:19
 msgid "Title"
 msgstr "Başlık"
 
@@ -1301,13 +1303,13 @@ msgstr ""
 
 #: legal/admin/views.py:29 threads/admin/views/attachments.py:26
 #: users/admin/views/bans.py:24 users/admin/views/datadownloads.py:22
-#: users/admin/views/users.py:62
+#: users/admin/views/users.py:63
 msgid "From newest"
 msgstr "En yeni gelen"
 
 #: legal/admin/views.py:29 threads/admin/views/attachments.py:27
 #: users/admin/views/bans.py:25 users/admin/views/datadownloads.py:22
-#: users/admin/views/users.py:63
+#: users/admin/views/users.py:64
 msgid "From oldest"
 msgstr "Eskilerden"
 
@@ -1364,11 +1366,11 @@ msgstr ""
 msgid "You need to submit a valid choice."
 msgstr ""
 
-#: legal/models.py:42 templates/misago/footer.html:22
+#: legal/models.py:42 templates/misago/footer.html:29
 msgid "Terms of service"
 msgstr "Servis koşullari"
 
-#: legal/models.py:43 templates/misago/footer.html:27
+#: legal/models.py:43 templates/misago/footer.html:34
 msgid "Privacy policy"
 msgstr "Gizlilik ilke"
 
@@ -1394,6 +1396,105 @@ msgstr ""
 msgid "Reveal spoiler"
 msgstr ""
 
+#: menus/admin/__init__.py:31
+msgid "Menu items"
+msgstr ""
+
+#: menus/admin/__init__.py:33
+msgid "Use those options to add custom items to the navbar and footer menus."
+msgstr ""
+
+#: menus/admin/forms.py:12
+msgid "URL"
+msgstr ""
+
+#: menus/admin/forms.py:12
+msgid "URL where this item will point to."
+msgstr ""
+
+#: menus/admin/forms.py:15
+msgid "Menu"
+msgstr ""
+
+#: menus/admin/forms.py:17
+msgid "Menu in which this item will be displayed."
+msgstr ""
+
+#: menus/admin/forms.py:21
+msgid "If you want to set custom value for link's \"class\"."
+msgstr ""
+
+#: menus/admin/forms.py:25
+msgid "Open this link in new window"
+msgstr ""
+
+#: menus/admin/forms.py:27
+msgid ""
+"Enabling this option will result in the target=\"_blank\" attribute being "
+"added to this link's HTML element."
+msgstr ""
+
+#: menus/admin/forms.py:33
+msgid "Rel attribute"
+msgstr ""
+
+#: menus/admin/forms.py:35
+msgid "Optional \"rel\" attribute that this item will use (ex. \"nofollow\")."
+msgstr ""
+
+#: menus/admin/views.py:16
+msgid "Requested menu item does not exist."
+msgstr ""
+
+#: menus/admin/views.py:30
+msgid "Delete items"
+msgstr ""
+
+#: menus/admin/views.py:31
+msgid "Are you sure you want to delete those menu items?"
+msgstr ""
+
+#: menus/admin/views.py:38
+msgid "Selected menu items have been deleted."
+msgstr ""
+
+#: menus/admin/views.py:42
+#, python-format
+msgid "New menu item %(item)s has been saved."
+msgstr ""
+
+#: menus/admin/views.py:52
+#, python-format
+msgid "Menu item %(item)s has been edited."
+msgstr ""
+
+#: menus/admin/views.py:64
+#, python-format
+msgid "Menu item %(item)s has been deleted."
+msgstr ""
+
+#: menus/admin/views.py:82
+#, python-format
+msgid "Menu item %(item)s has been moved after %(other)s."
+msgstr ""
+
+#: menus/admin/views.py:101
+#, python-format
+msgid "Menu item %(item)s has been moved before %(other)s."
+msgstr ""
+
+#: menus/models.py:10
+msgid "Navbar and footer"
+msgstr ""
+
+#: menus/models.py:11 templates/misago/admin/menuitems/list.html:41
+msgid "Navbar"
+msgstr ""
+
+#: menus/models.py:12 templates/misago/admin/menuitems/list.html:46
+msgid "Footer"
+msgstr ""
+
 #: search/api.py:17 search/views.py:12 search/views.py:21
 msgid "You don't have permission to search site."
 msgstr "Sitede arama iznin yok"
@@ -1633,6 +1734,7 @@ msgstr ""
 #: templates/misago/admin/agreements/form.html:48
 #: templates/misago/admin/categoryroles/form.html:36
 #: templates/misago/admin/conf/captcha_settings.html:8
+#: templates/misago/admin/menuitems/form.html:41
 #: templates/misago/admin/roles/form.html:36
 msgid "Basic settings"
 msgstr "Temel ayarlar"
@@ -1806,6 +1908,7 @@ msgstr ""
 
 #: templates/misago/admin/attachmenttypes/list.html:57
 #: templates/misago/admin/categories/list.html:45
+#: templates/misago/admin/menuitems/list.html:54
 #: templates/misago/admin/ranks/list.html:59
 #: templates/misago/admin/ranks/list.html:66
 msgid "Not set"
@@ -1948,7 +2051,7 @@ msgid "Category"
 msgstr "bölüm"
 
 #: templates/misago/admin/categories/list.html:20
-#: templates/misago/admin/dashboard/index.html:44
+#: templates/misago/admin/dashboard/index.html:45
 #: templates/misago/admin/dashboard/totals.html:31
 #: templates/misago/admin/users/list.html:21
 #: templates/misago/profile/posts.html:5 templates/misago/profile/posts.html:8
@@ -1957,6 +2060,7 @@ msgid "Posts"
 msgstr "iletiler"
 
 #: templates/misago/admin/categories/list.html:58
+#: templates/misago/admin/menuitems/list.html:72
 #: templates/misago/admin/ranks/list.html:74
 #: templates/misago/admin/socialauth/list.html:32
 #: templates/misago/admin/themes/assets/css.html:68
@@ -1965,6 +2069,7 @@ msgid "Move down"
 msgstr "Aşağı in"
 
 #: templates/misago/admin/categories/list.html:72
+#: templates/misago/admin/menuitems/list.html:86
 #: templates/misago/admin/ranks/list.html:88
 #: templates/misago/admin/socialauth/list.html:46
 #: templates/misago/admin/themes/assets/css.html:73
@@ -2247,18 +2352,22 @@ msgid "User registrations"
 msgstr ""
 
 #: templates/misago/admin/dashboard/index.html:43
+msgid "User deletions"
+msgstr ""
+
+#: templates/misago/admin/dashboard/index.html:44
 msgid "Threads started"
 msgstr ""
 
-#: templates/misago/admin/dashboard/index.html:45
+#: templates/misago/admin/dashboard/index.html:46
 msgid "Attachments uploaded"
 msgstr ""
 
-#: templates/misago/admin/dashboard/index.html:46
+#: templates/misago/admin/dashboard/index.html:47
 msgid "Data download requests"
 msgstr ""
 
-#: templates/misago/admin/dashboard/index.html:48
+#: templates/misago/admin/dashboard/index.html:49
 msgid "Site analytics are currently unavailable due to an error."
 msgstr ""
 
@@ -2547,6 +2656,60 @@ msgstr "Kayıt ol"
 msgid "Return to site"
 msgstr ""
 
+#: templates/misago/admin/menuitems/form.html:9
+#: templates/misago/admin/menuitems/form.html:33
+#: templates/misago/admin/menuitems/list.html:9
+msgid "New menu item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/form.html:31
+msgid "Edit menu item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/form.html:50
+msgid "Behavior and appearance"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:16
+msgid "Item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:18
+msgid "CSS Class"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:19
+msgid "Target"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:20
+msgid "Rel"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:40
+msgid "Is displayed on the forum navbar."
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:45
+msgid "Is displayed on the forum footer."
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:103
+msgid "Edit item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:108
+msgid "Remove item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:119
+msgid "No menu items are set."
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:129
+msgid "Are you sure you want to remove this menu item?"
+msgstr ""
+
 #: templates/misago/admin/navbar.html:12
 msgid "GitHub"
 msgstr ""
@@ -2867,7 +3030,7 @@ msgid ""
 msgstr ""
 
 #: templates/misago/admin/users/ban.html:6
-#: templates/misago/admin/users/ban.html:82 users/admin/views/users.py:73
+#: templates/misago/admin/users/ban.html:82 users/admin/views/users.py:74
 msgid "Ban users"
 msgstr "Yasaklamak  kullanicilar"
 
@@ -4668,12 +4831,12 @@ msgid "Requested attachment could not be found."
 msgstr "İstenen ek bulunamadı."
 
 #: threads/admin/views/attachments.py:28 users/admin/views/bans.py:26
-#: users/admin/views/users.py:64
+#: users/admin/views/users.py:65
 msgid "A to z"
 msgstr "A'dan Z'ye"
 
 #: threads/admin/views/attachments.py:29 users/admin/views/bans.py:27
-#: users/admin/views/users.py:65
+#: users/admin/views/users.py:66
 msgid "Z to a"
 msgstr "Z'den A'ya"
 
@@ -7149,43 +7312,43 @@ msgstr "Sıra \"%(name)s\" zaten varsayılanıdır."
 msgid "Rank \"%(name)s\" has been made default."
 msgstr "Sıra \"%(name)s\" varsayılan olarak ayarlandı."
 
-#: users/admin/views/users.py:66
+#: users/admin/views/users.py:67
 msgid "Biggest posters"
 msgstr "En büyük posterler"
 
-#: users/admin/views/users.py:67
+#: users/admin/views/users.py:68
 msgid "Smallest posters"
 msgstr "En küçük posterler"
 
-#: users/admin/views/users.py:69
+#: users/admin/views/users.py:70
 msgid "With users: 0"
 msgstr "Kullanıcılar: 0"
 
-#: users/admin/views/users.py:70
+#: users/admin/views/users.py:71
 msgid "Select users"
 msgstr "Kullanıcıları seç"
 
-#: users/admin/views/users.py:72
+#: users/admin/views/users.py:73
 msgid "Activate accounts"
 msgstr "Hesapları etkinleştir"
 
-#: users/admin/views/users.py:74
+#: users/admin/views/users.py:75
 msgid "Request data download"
 msgstr ""
 
-#: users/admin/views/users.py:77
+#: users/admin/views/users.py:78
 msgid "Delete accounts"
 msgstr "Hesapları sil"
 
-#: users/admin/views/users.py:78
+#: users/admin/views/users.py:79
 msgid "Are you sure you want to delete selected users?"
 msgstr "Seçilen kullanıcıları silmek istediğinizden emin misiniz?"
 
-#: users/admin/views/users.py:82
+#: users/admin/views/users.py:83
 msgid "Delete with content"
 msgstr ""
 
-#: users/admin/views/users.py:84
+#: users/admin/views/users.py:85
 msgid ""
 "Are you sure you want to delete selected users? This will also delete all "
 "content associated with their accounts."
@@ -7193,57 +7356,57 @@ msgstr ""
 "Seçilen kullanıcıları silmek istediğinizden emin misiniz? Bu aynı zamanda "
 "hesaplarıyla ilişkili tüm içeriği de silecektir."
 
-#: users/admin/views/users.py:105
+#: users/admin/views/users.py:106
 msgid "You have to select inactive users."
 msgstr "Etkin olmayan kullanıcıları seçmelisiniz."
 
-#: users/admin/views/users.py:112
+#: users/admin/views/users.py:113
 #, python-format
 msgid "Your account on %(forum_name)s forums has been activated"
 msgstr "%(forum_name)s forumlarındaki hesabınız etkinleştirildi"
 
-#: users/admin/views/users.py:122
+#: users/admin/views/users.py:123
 msgid "Selected users accounts have been activated."
 msgstr "Seçilen kullanıcı hesapları etkinleştirildi."
 
-#: users/admin/views/users.py:130
+#: users/admin/views/users.py:131
 #, python-format
 msgid "%(user)s is super admin and can't be banned."
 msgstr "%(user)ssüper yönetici ve yasaklanamaz."
 
-#: users/admin/views/users.py:192
+#: users/admin/views/users.py:193
 msgid "Selected users have been banned."
 msgstr "Seçilen kullanıcılar yasaklandı."
 
-#: users/admin/views/users.py:207
+#: users/admin/views/users.py:208
 msgid "Data download requests have been placed for selected users."
 msgstr ""
 
-#: users/admin/views/users.py:213 users/admin/views/users.py:228
+#: users/admin/views/users.py:214 users/admin/views/users.py:230
 msgid "You can't delete yourself."
 msgstr "Kendini silemezsin."
 
-#: users/admin/views/users.py:215 users/admin/views/users.py:230
+#: users/admin/views/users.py:216 users/admin/views/users.py:232
 #, python-format
 msgid "%(user)s is admin and can't be deleted."
 msgstr "%(user)s admin ve silinemiyor."
 
-#: users/admin/views/users.py:223
+#: users/admin/views/users.py:225
 msgid "Selected users have been deleted."
 msgstr "Seçilen kullanıcılar silindi."
 
-#: users/admin/views/users.py:244
+#: users/admin/views/users.py:246
 msgid ""
 "Selected users have been disabled and queued for deletion together with "
 "their content."
 msgstr ""
 
-#: users/admin/views/users.py:253
+#: users/admin/views/users.py:255
 #, python-format
 msgid "New user \"%(user)s\" has been registered."
 msgstr "Yeni kullanıcı \"%(user)s\" kaydedildi."
 
-#: users/admin/views/users.py:285
+#: users/admin/views/users.py:287
 #, python-format
 msgid "User \"%(user)s\" has been edited."
 msgstr "Kullanıcı \"%(user)s\" düzenlendi."
@@ -7366,71 +7529,71 @@ msgstr "Kullanıcı adı değiştirilirken hata oluştu. Lütfen tekrar deneyin.
 msgid "You don't have permission to see other users name history."
 msgstr "Diğer kullanıcıların ad geçmişini izlemek için izniniz yok."
 
-#: users/api/users.py:63
+#: users/api/users.py:64
 msgid "You have to sign in to perform this action."
 msgstr "Bu işlemi gerçekleştirmek için oturum açmanız gerekir."
 
-#: users/api/users.py:89
+#: users/api/users.py:90
 msgid "Please use the 3rd party site to register."
 msgstr ""
 
-#: users/api/users.py:112
+#: users/api/users.py:113
 msgid "You can't change other users avatars."
 msgstr "Diğer avatarları değiştiremezsiniz."
 
-#: users/api/users.py:124
+#: users/api/users.py:125
 msgid "You can't change other users options."
 msgstr "Diğer kullanıcı seçeneklerini değiştiremezsiniz."
 
-#: users/api/users.py:129
+#: users/api/users.py:130
 msgid "Your forum options have been changed."
 msgstr "Forum seçenekleriniz değiştirildi."
 
-#: users/api/users.py:136
+#: users/api/users.py:137
 msgid "Please use the 3rd party site to change your username."
 msgstr ""
 
-#: users/api/users.py:140
+#: users/api/users.py:141
 msgid "You can't change other users names."
 msgstr "Diğer kullanıcı adlarını değiştiremezsiniz."
 
-#: users/api/users.py:147
+#: users/api/users.py:148
 msgid "You can't change other users signatures."
 msgstr "Diğer kullanıcı imzalarını değiştiremezsiniz."
 
-#: users/api/users.py:160
+#: users/api/users.py:161
 msgid "Please use the 3rd party site to change your password."
 msgstr ""
 
-#: users/api/users.py:164
+#: users/api/users.py:165
 msgid "You can't change other users passwords."
 msgstr "Diğer kullanıcıların şifrelerini değiştiremezsiniz."
 
-#: users/api/users.py:174
+#: users/api/users.py:175
 msgid "Please use the 3rd party site to change your e-mail."
 msgstr ""
 
-#: users/api/users.py:179
+#: users/api/users.py:180
 msgid "You can't change other users e-mail addresses."
 msgstr "Diğer kullanıcıların e-posta adreslerini değiştiremezsiniz."
 
-#: users/api/users.py:210
+#: users/api/users.py:211
 msgid "Please use the 3rd party site to delete account."
 msgstr ""
 
-#: users/api/users.py:291
+#: users/api/users.py:292
 msgid "You can't request data downloads for other users."
 msgstr ""
 
-#: users/api/users.py:295
+#: users/api/users.py:296
 msgid "You can't download your data."
 msgstr ""
 
-#: users/api/users.py:300
+#: users/api/users.py:301
 msgid "You can't have more than one data download request at a single time."
 msgstr ""
 
-#: users/api/users.py:356
+#: users/api/users.py:358
 msgid "You can't see other users data downloads."
 msgstr ""
 
@@ -7590,6 +7753,18 @@ msgstr ""
 msgid "Ready"
 msgstr ""
 
+#: users/models/deleteduser.py:12
+msgid "By self"
+msgstr ""
+
+#: users/models/deleteduser.py:13
+msgid "By staff"
+msgstr ""
+
+#: users/models/deleteduser.py:14
+msgid "By system"
+msgstr ""
+
 #: users/models/user.py:106
 msgid "Notify"
 msgstr "bildirmek"

+ 5 - 1
misago/locale/tr/LC_MESSAGES/djangojs.po

@@ -19,7 +19,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-09-01 14:10+0000\n"
+"POT-Creation-Date: 2019-09-29 00:51+0000\n"
 "PO-Revision-Date: 2017-01-16 00:04+0000\n"
 "Last-Translator: gülce abatay <gulceabatay@gmail.com>, 2018\n"
 "Language-Team: Turkish (Turkey) (https://www.transifex.com/misago/teams/65369/tr_TR/)\n"
@@ -1043,6 +1043,10 @@ msgstr "İleti önceki duruma döndü."
 msgid "See previous change"
 msgstr "Önceki değişikliği gör"
 
+#: static/misago/js/misago.js:7
+msgid "See next change"
+msgstr ""
+
 #: static/misago/js/misago.js:8
 msgid "By %(edited_by)s %(edited_on)s."
 msgstr "%(edited_by)s tarafından %(edited_on)s tarihinde düzenlendi."

+ 236 - 61
misago/locale/zh_Hans/LC_MESSAGES/django.po

@@ -17,7 +17,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-09-01 14:10+0000\n"
+"POT-Creation-Date: 2019-09-29 00:51+0000\n"
 "PO-Revision-Date: 2017-01-16 00:04+0000\n"
 "Last-Translator: 蚂蚁先生 <pzf_karl@hotmail.com>, 2019\n"
 "Language-Team: Chinese (China) (https://www.transifex.com/misago/teams/65369/zh_CN/)\n"
@@ -199,7 +199,8 @@ msgstr "描述"
 msgid "Optional description explaining category intented purpose."
 msgstr "解释此版块的主要内容。(可选)。"
 
-#: categories/admin/forms.py:55 templates/misago/admin/categories/list.html:18
+#: categories/admin/forms.py:55 menus/admin/forms.py:20
+#: templates/misago/admin/categories/list.html:18
 #: templates/misago/admin/ranks/list.html:20 users/admin/forms.py:419
 msgid "CSS class"
 msgstr "CSS class"
@@ -1150,21 +1151,21 @@ msgstr "过长。"
 msgid "Uploaded image is not a square."
 msgstr "上传的图片不是正方形。"
 
-#: graphql/admin/versioncheck.py:32
+#: graphql/admin/versioncheck.py:27
 msgid "The site is running using unreleased version of Misago."
 msgstr "该网站正在使用未发布的 Misago 版本。"
 
-#: graphql/admin/versioncheck.py:34
+#: graphql/admin/versioncheck.py:29
 msgid ""
 "Unreleased versions of Misago can lack security features and there is no "
 "supported way to upgrade them to release versions later."
 msgstr "未发布 Misago 版本可能包含安全隐患,并且无法保证可以升级到正式版本。"
 
-#: graphql/admin/versioncheck.py:47
+#: graphql/admin/versioncheck.py:42
 msgid "Failed to connect to pypi.org API. Try again later."
 msgstr "访问 pypi.org API 失败,请稍候尝试。"
 
-#: graphql/admin/versioncheck.py:49
+#: graphql/admin/versioncheck.py:44
 #: templates/misago/admin/dashboard/checks.html:17
 #: templates/misago/admin/dashboard/index.html:33
 msgid ""
@@ -1172,20 +1173,20 @@ msgid ""
 " (pypi.org) API to retrieve latest Misago release version."
 msgstr "版本检查功能依赖于由 Python 包索引 (pypi. org) 的 API 来检索最新的 Misago 版本。"
 
-#: graphql/admin/versioncheck.py:67
+#: graphql/admin/versioncheck.py:70
 msgid "The site is running updated version of Misago."
 msgstr "该网站正在运行 Misago 的最新版本。"
 
-#: graphql/admin/versioncheck.py:68
+#: graphql/admin/versioncheck.py:71
 #, python-format
 msgid "Misago %(version)s is latest release."
 msgstr "Misago %(version)s 是最新版本。"
 
-#: graphql/admin/versioncheck.py:74
+#: graphql/admin/versioncheck.py:77
 msgid "The site is running outdated version of Misago."
 msgstr "该网站正在运行旧版本的 Misago。"
 
-#: graphql/admin/versioncheck.py:76
+#: graphql/admin/versioncheck.py:79
 #, python-format
 msgid ""
 "The site is running Misago version %(version)s while version %(latest)s is "
@@ -1241,7 +1242,8 @@ msgstr "设置服务条款和隐私政策内容。"
 msgid "Type"
 msgstr "类型"
 
-#: legal/admin/forms.py:13 templates/misago/admin/ranks/list.html:19
+#: legal/admin/forms.py:13 menus/admin/forms.py:10
+#: templates/misago/admin/ranks/list.html:19
 msgid "Title"
 msgstr "标题"
 
@@ -1290,13 +1292,13 @@ msgstr "请求的协议不存在。"
 
 #: legal/admin/views.py:29 threads/admin/views/attachments.py:26
 #: users/admin/views/bans.py:24 users/admin/views/datadownloads.py:22
-#: users/admin/views/users.py:62
+#: users/admin/views/users.py:63
 msgid "From newest"
 msgstr "从最新"
 
 #: legal/admin/views.py:29 threads/admin/views/attachments.py:27
 #: users/admin/views/bans.py:25 users/admin/views/datadownloads.py:22
-#: users/admin/views/users.py:63
+#: users/admin/views/users.py:64
 msgid "From oldest"
 msgstr "从最早"
 
@@ -1353,11 +1355,11 @@ msgstr "你已经接受了这个协议。"
 msgid "You need to submit a valid choice."
 msgstr "你需要提交有效的选择。"
 
-#: legal/models.py:42 templates/misago/footer.html:22
+#: legal/models.py:42 templates/misago/footer.html:29
 msgid "Terms of service"
 msgstr "服务条款"
 
-#: legal/models.py:43 templates/misago/footer.html:27
+#: legal/models.py:43 templates/misago/footer.html:34
 msgid "Privacy policy"
 msgstr "隐私政策"
 
@@ -1383,6 +1385,105 @@ msgstr ""
 msgid "Reveal spoiler"
 msgstr ""
 
+#: menus/admin/__init__.py:31
+msgid "Menu items"
+msgstr ""
+
+#: menus/admin/__init__.py:33
+msgid "Use those options to add custom items to the navbar and footer menus."
+msgstr ""
+
+#: menus/admin/forms.py:12
+msgid "URL"
+msgstr ""
+
+#: menus/admin/forms.py:12
+msgid "URL where this item will point to."
+msgstr ""
+
+#: menus/admin/forms.py:15
+msgid "Menu"
+msgstr ""
+
+#: menus/admin/forms.py:17
+msgid "Menu in which this item will be displayed."
+msgstr ""
+
+#: menus/admin/forms.py:21
+msgid "If you want to set custom value for link's \"class\"."
+msgstr ""
+
+#: menus/admin/forms.py:25
+msgid "Open this link in new window"
+msgstr ""
+
+#: menus/admin/forms.py:27
+msgid ""
+"Enabling this option will result in the target=\"_blank\" attribute being "
+"added to this link's HTML element."
+msgstr ""
+
+#: menus/admin/forms.py:33
+msgid "Rel attribute"
+msgstr ""
+
+#: menus/admin/forms.py:35
+msgid "Optional \"rel\" attribute that this item will use (ex. \"nofollow\")."
+msgstr ""
+
+#: menus/admin/views.py:16
+msgid "Requested menu item does not exist."
+msgstr ""
+
+#: menus/admin/views.py:30
+msgid "Delete items"
+msgstr ""
+
+#: menus/admin/views.py:31
+msgid "Are you sure you want to delete those menu items?"
+msgstr ""
+
+#: menus/admin/views.py:38
+msgid "Selected menu items have been deleted."
+msgstr ""
+
+#: menus/admin/views.py:42
+#, python-format
+msgid "New menu item %(item)s has been saved."
+msgstr ""
+
+#: menus/admin/views.py:52
+#, python-format
+msgid "Menu item %(item)s has been edited."
+msgstr ""
+
+#: menus/admin/views.py:64
+#, python-format
+msgid "Menu item %(item)s has been deleted."
+msgstr ""
+
+#: menus/admin/views.py:82
+#, python-format
+msgid "Menu item %(item)s has been moved after %(other)s."
+msgstr ""
+
+#: menus/admin/views.py:101
+#, python-format
+msgid "Menu item %(item)s has been moved before %(other)s."
+msgstr ""
+
+#: menus/models.py:10
+msgid "Navbar and footer"
+msgstr ""
+
+#: menus/models.py:11 templates/misago/admin/menuitems/list.html:41
+msgid "Navbar"
+msgstr ""
+
+#: menus/models.py:12 templates/misago/admin/menuitems/list.html:46
+msgid "Footer"
+msgstr ""
+
 #: search/api.py:17 search/views.py:12 search/views.py:21
 msgid "You don't have permission to search site."
 msgstr "你没有搜索全站的权限。"
@@ -1615,6 +1716,7 @@ msgstr "编辑协议"
 #: templates/misago/admin/agreements/form.html:48
 #: templates/misago/admin/categoryroles/form.html:36
 #: templates/misago/admin/conf/captcha_settings.html:8
+#: templates/misago/admin/menuitems/form.html:41
 #: templates/misago/admin/roles/form.html:36
 msgid "Basic settings"
 msgstr "基本设置"
@@ -1788,6 +1890,7 @@ msgstr "已禁用"
 
 #: templates/misago/admin/attachmenttypes/list.html:57
 #: templates/misago/admin/categories/list.html:45
+#: templates/misago/admin/menuitems/list.html:54
 #: templates/misago/admin/ranks/list.html:59
 #: templates/misago/admin/ranks/list.html:66
 msgid "Not set"
@@ -1930,7 +2033,7 @@ msgid "Category"
 msgstr "版块"
 
 #: templates/misago/admin/categories/list.html:20
-#: templates/misago/admin/dashboard/index.html:44
+#: templates/misago/admin/dashboard/index.html:45
 #: templates/misago/admin/dashboard/totals.html:31
 #: templates/misago/admin/users/list.html:21
 #: templates/misago/profile/posts.html:5 templates/misago/profile/posts.html:8
@@ -1939,6 +2042,7 @@ msgid "Posts"
 msgstr "帖子"
 
 #: templates/misago/admin/categories/list.html:58
+#: templates/misago/admin/menuitems/list.html:72
 #: templates/misago/admin/ranks/list.html:74
 #: templates/misago/admin/socialauth/list.html:32
 #: templates/misago/admin/themes/assets/css.html:68
@@ -1947,6 +2051,7 @@ msgid "Move down"
 msgstr "向下移动"
 
 #: templates/misago/admin/categories/list.html:72
+#: templates/misago/admin/menuitems/list.html:86
 #: templates/misago/admin/ranks/list.html:88
 #: templates/misago/admin/socialauth/list.html:46
 #: templates/misago/admin/themes/assets/css.html:73
@@ -2227,18 +2332,22 @@ msgid "User registrations"
 msgstr "用户注册"
 
 #: templates/misago/admin/dashboard/index.html:43
+msgid "User deletions"
+msgstr ""
+
+#: templates/misago/admin/dashboard/index.html:44
 msgid "Threads started"
 msgstr "发起的话题"
 
-#: templates/misago/admin/dashboard/index.html:45
+#: templates/misago/admin/dashboard/index.html:46
 msgid "Attachments uploaded"
 msgstr "已上传的附件"
 
-#: templates/misago/admin/dashboard/index.html:46
+#: templates/misago/admin/dashboard/index.html:47
 msgid "Data download requests"
 msgstr "数据下载请求"
 
-#: templates/misago/admin/dashboard/index.html:48
+#: templates/misago/admin/dashboard/index.html:49
 msgid "Site analytics are currently unavailable due to an error."
 msgstr "由于出现错误,站点分析当前不可用。"
 
@@ -2527,6 +2636,60 @@ msgstr "登录"
 msgid "Return to site"
 msgstr "返回到网站"
 
+#: templates/misago/admin/menuitems/form.html:9
+#: templates/misago/admin/menuitems/form.html:33
+#: templates/misago/admin/menuitems/list.html:9
+msgid "New menu item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/form.html:31
+msgid "Edit menu item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/form.html:50
+msgid "Behavior and appearance"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:16
+msgid "Item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:18
+msgid "CSS Class"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:19
+msgid "Target"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:20
+msgid "Rel"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:40
+msgid "Is displayed on the forum navbar."
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:45
+msgid "Is displayed on the forum footer."
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:103
+msgid "Edit item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:108
+msgid "Remove item"
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:119
+msgid "No menu items are set."
+msgstr ""
+
+#: templates/misago/admin/menuitems/list.html:129
+msgid "Are you sure you want to remove this menu item?"
+msgstr ""
+
 #: templates/misago/admin/navbar.html:12
 msgid "GitHub"
 msgstr "GitHub"
@@ -2847,7 +3010,7 @@ msgid ""
 msgstr "你确定要删除选定的主题吗?删除该主题将同时子主题。"
 
 #: templates/misago/admin/users/ban.html:6
-#: templates/misago/admin/users/ban.html:82 users/admin/views/users.py:73
+#: templates/misago/admin/users/ban.html:82 users/admin/views/users.py:74
 msgid "Ban users"
 msgstr "封禁用户"
 
@@ -4559,12 +4722,12 @@ msgid "Requested attachment could not be found."
 msgstr "无法找到请求的附件。"
 
 #: threads/admin/views/attachments.py:28 users/admin/views/bans.py:26
-#: users/admin/views/users.py:64
+#: users/admin/views/users.py:65
 msgid "A to z"
 msgstr "A到z"
 
 #: threads/admin/views/attachments.py:29 users/admin/views/bans.py:27
-#: users/admin/views/users.py:65
+#: users/admin/views/users.py:66
 msgid "Z to a"
 msgstr "Z到a"
 
@@ -6901,99 +7064,99 @@ msgstr "“%(name)s\" 级别已经是默认等级。"
 msgid "Rank \"%(name)s\" has been made default."
 msgstr "“%(name)s” 级别已设为默认级别。"
 
-#: users/admin/views/users.py:66
+#: users/admin/views/users.py:67
 msgid "Biggest posters"
 msgstr "最多发帖"
 
-#: users/admin/views/users.py:67
+#: users/admin/views/users.py:68
 msgid "Smallest posters"
 msgstr "最少发帖"
 
-#: users/admin/views/users.py:69
+#: users/admin/views/users.py:70
 msgid "With users: 0"
 msgstr "已选用户:0"
 
-#: users/admin/views/users.py:70
+#: users/admin/views/users.py:71
 msgid "Select users"
 msgstr "选择用户"
 
-#: users/admin/views/users.py:72
+#: users/admin/views/users.py:73
 msgid "Activate accounts"
 msgstr "激活账号"
 
-#: users/admin/views/users.py:74
+#: users/admin/views/users.py:75
 msgid "Request data download"
 msgstr "请求数据下载"
 
-#: users/admin/views/users.py:77
+#: users/admin/views/users.py:78
 msgid "Delete accounts"
 msgstr "删除账号"
 
-#: users/admin/views/users.py:78
+#: users/admin/views/users.py:79
 msgid "Are you sure you want to delete selected users?"
 msgstr "你确定要删除选定的用户吗?"
 
-#: users/admin/views/users.py:82
+#: users/admin/views/users.py:83
 msgid "Delete with content"
 msgstr "同时删除内容"
 
-#: users/admin/views/users.py:84
+#: users/admin/views/users.py:85
 msgid ""
 "Are you sure you want to delete selected users? This will also delete all "
 "content associated with their accounts."
 msgstr "你确定要删除选定的用户吗?将同时删除选定用户的所有内容。"
 
-#: users/admin/views/users.py:105
+#: users/admin/views/users.py:106
 msgid "You have to select inactive users."
 msgstr "你必须选择未激活的用户。"
 
-#: users/admin/views/users.py:112
+#: users/admin/views/users.py:113
 #, python-format
 msgid "Your account on %(forum_name)s forums has been activated"
 msgstr "你在 %(forum_name)s 论坛上的账号已经被激活"
 
-#: users/admin/views/users.py:122
+#: users/admin/views/users.py:123
 msgid "Selected users accounts have been activated."
 msgstr "选中的用户已经被激活。"
 
-#: users/admin/views/users.py:130
+#: users/admin/views/users.py:131
 #, python-format
 msgid "%(user)s is super admin and can't be banned."
 msgstr "%(user)s是超级管理员,不能被封禁。"
 
-#: users/admin/views/users.py:192
+#: users/admin/views/users.py:193
 msgid "Selected users have been banned."
 msgstr "选中的用户已经被封禁。"
 
-#: users/admin/views/users.py:207
+#: users/admin/views/users.py:208
 msgid "Data download requests have been placed for selected users."
 msgstr "已为选定用户请求了数据下载。"
 
-#: users/admin/views/users.py:213 users/admin/views/users.py:228
+#: users/admin/views/users.py:214 users/admin/views/users.py:230
 msgid "You can't delete yourself."
 msgstr "你不能删除自己。"
 
-#: users/admin/views/users.py:215 users/admin/views/users.py:230
+#: users/admin/views/users.py:216 users/admin/views/users.py:232
 #, python-format
 msgid "%(user)s is admin and can't be deleted."
 msgstr "%(user)s是管理员,不能被删除。"
 
-#: users/admin/views/users.py:223
+#: users/admin/views/users.py:225
 msgid "Selected users have been deleted."
 msgstr "已删除选中的用户。"
 
-#: users/admin/views/users.py:244
+#: users/admin/views/users.py:246
 msgid ""
 "Selected users have been disabled and queued for deletion together with "
 "their content."
 msgstr "已禁用所选用户并与其内容一起放入了待删除队列。"
 
-#: users/admin/views/users.py:253
+#: users/admin/views/users.py:255
 #, python-format
 msgid "New user \"%(user)s\" has been registered."
 msgstr "新用户 \"%(user)s\" 已成功注册。"
 
-#: users/admin/views/users.py:285
+#: users/admin/views/users.py:287
 #, python-format
 msgid "User \"%(user)s\" has been edited."
 msgstr "已编辑用户 “%(user)s”。"
@@ -7116,71 +7279,71 @@ msgstr "修改用户名时出错,请再试一次。"
 msgid "You don't have permission to see other users name history."
 msgstr "你无法查看其他用户名称的历史记录。"
 
-#: users/api/users.py:63
+#: users/api/users.py:64
 msgid "You have to sign in to perform this action."
 msgstr "你必须登录才能执行此操作。"
 
-#: users/api/users.py:89
+#: users/api/users.py:90
 msgid "Please use the 3rd party site to register."
 msgstr ""
 
-#: users/api/users.py:112
+#: users/api/users.py:113
 msgid "You can't change other users avatars."
 msgstr "你无法修改其他用户的头像。"
 
-#: users/api/users.py:124
+#: users/api/users.py:125
 msgid "You can't change other users options."
 msgstr "你不能更改其他用户选项。"
 
-#: users/api/users.py:129
+#: users/api/users.py:130
 msgid "Your forum options have been changed."
 msgstr "你的论坛设置已修改。"
 
-#: users/api/users.py:136
+#: users/api/users.py:137
 msgid "Please use the 3rd party site to change your username."
 msgstr ""
 
-#: users/api/users.py:140
+#: users/api/users.py:141
 msgid "You can't change other users names."
 msgstr "你不能修改其他用户的名称。"
 
-#: users/api/users.py:147
+#: users/api/users.py:148
 msgid "You can't change other users signatures."
 msgstr "你不能修改其他用户的签名。"
 
-#: users/api/users.py:160
+#: users/api/users.py:161
 msgid "Please use the 3rd party site to change your password."
 msgstr ""
 
-#: users/api/users.py:164
+#: users/api/users.py:165
 msgid "You can't change other users passwords."
 msgstr "你不能修改其他用户的密码。"
 
-#: users/api/users.py:174
+#: users/api/users.py:175
 msgid "Please use the 3rd party site to change your e-mail."
 msgstr ""
 
-#: users/api/users.py:179
+#: users/api/users.py:180
 msgid "You can't change other users e-mail addresses."
 msgstr "你不能修改其他用户的电子邮件地址。"
 
-#: users/api/users.py:210
+#: users/api/users.py:211
 msgid "Please use the 3rd party site to delete account."
 msgstr ""
 
-#: users/api/users.py:291
+#: users/api/users.py:292
 msgid "You can't request data downloads for other users."
 msgstr "你不能为其他用户请求数据下载。"
 
-#: users/api/users.py:295
+#: users/api/users.py:296
 msgid "You can't download your data."
 msgstr "你不能下载你的数据。"
 
-#: users/api/users.py:300
+#: users/api/users.py:301
 msgid "You can't have more than one data download request at a single time."
 msgstr "你不能一次请求多个数据下载。"
 
-#: users/api/users.py:356
+#: users/api/users.py:358
 msgid "You can't see other users data downloads."
 msgstr "你无法看到其他用户的数据下载。"
 
@@ -7340,6 +7503,18 @@ msgstr "处理中"
 msgid "Ready"
 msgstr "已完成"
 
+#: users/models/deleteduser.py:12
+msgid "By self"
+msgstr ""
+
+#: users/models/deleteduser.py:13
+msgid "By staff"
+msgstr ""
+
+#: users/models/deleteduser.py:14
+msgid "By system"
+msgstr ""
+
 #: users/models/user.py:106
 msgid "Notify"
 msgstr "站点通知"

+ 5 - 1
misago/locale/zh_Hans/LC_MESSAGES/djangojs.po

@@ -15,7 +15,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-09-01 14:10+0000\n"
+"POT-Creation-Date: 2019-09-29 00:51+0000\n"
 "PO-Revision-Date: 2017-01-16 00:04+0000\n"
 "Last-Translator: 蚂蚁先生 <pzf_karl@hotmail.com>, 2019\n"
 "Language-Team: Chinese (China) (https://www.transifex.com/misago/teams/65369/zh_CN/)\n"
@@ -1007,6 +1007,10 @@ msgstr "帖子已还原到上一次编辑的状态。"
 msgid "See previous change"
 msgstr "查看上一次修改"
 
+#: static/misago/js/misago.js:7
+msgid "See next change"
+msgstr ""
+
 #: static/misago/js/misago.js:8
 msgid "By %(edited_by)s %(edited_on)s."
 msgstr "%(edited_by)s 编辑于 %(edited_on)s。"

+ 1 - 1
misago/static/misago/js/misago.js

@@ -4,7 +4,7 @@
 value:!0});var i=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),u=e("react"),c=n(u),d=e("../utils/validators"),f=e("../services/snackbar"),p=n(f),m=(0,d.required)(),h=function(e){function t(){var e,a,n,s;o(this,t);for(var i=arguments.length,u=Array(i),c=0;c<i;c++)u[c]=arguments[c];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),n.bindInput=function(e){return function(t){n.changeValue(e,t.target.value)}},n.changeValue=function(e,t){var a=r({},e,t),o=n.state.errors||{};o[e]=n.validateField(e,a[e]),a.errors=o,n.setState(a)},n.handleSubmit=function(e){if(e&&e.preventDefault(),!n.state.isLoading&&n.clean()){n.setState({isLoading:!0});var t=n.send();t?t.then(function(e){n.setState({isLoading:!1}),n.handleSuccess(e)},function(e){n.setState({isLoading:!1}),n.handleError(e)}):n.setState({isLoading:!1})}},s=a,l(n,s)}return s(t,e),i(t,[{key:"validate",value:function(){var e={};if(!this.state.validators)return e;var t={required:this.state.validators.required||this.state.validators,optional:this.state.validators.optional||{}},a=[];for(var n in t.required)t.required.hasOwnProperty(n)&&t.required[n]&&a.push(n);for(var r in t.optional)t.optional.hasOwnProperty(r)&&t.optional[r]&&a.push(r);for(var o in a){var l=a[o],s=this.validateField(l,this.state[l]);null===s?e[l]=null:s&&(e[l]=s)}return e}},{key:"isValid",value:function(){var e=this.validate();for(var t in e)if(e.hasOwnProperty(t)&&null!==e[t])return!1;return!0}},{key:"validateField",value:function(e,t){var a=[];if(!this.state.validators)return a;var n={required:(this.state.validators.required||this.state.validators)[e],optional:(this.state.validators.optional||{})[e]},r=m(t)||!1;if(n.required){if(r)a=[r];else for(var o in n.required){var l=n.required[o](t);l&&a.push(l)}return a.length?a:null}if(r===!1&&n.optional){for(var s in n.optional){var i=n.optional[s](t);i&&a.push(i)}return a.length?a:null}return!1}},{key:"clean",value:function(){return!0}},{key:"send",value:function(){return null}},{key:"handleSuccess",value:function(e){}},{key:"handleError",value:function(e){p["default"].apiError(e)}}]),t}(c["default"].Component);a["default"]=h},{"../services/snackbar":376,"../utils/validators":393,react:"react"}],57:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=function(e){function t(){return r(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return l(t,e),s(t,[{key:"isActive",value:function(){return this.props.isControlled?this.props.isActive:!!this.props.path&&0===document.location.pathname.indexOf(this.props.path)}},{key:"getClassName",value:function(){return this.isActive()?(this.props.className||"")+" "+(this.props.activeClassName||"active"):this.props.className||""}},{key:"render",value:function(){return u["default"].createElement("li",{className:this.getClassName()},this.props.children)}}]),t}(u["default"].Component);a["default"]=c},{react:"react"}],58:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return o["default"].createElement("div",{className:e.className||"loader"},o["default"].createElement("div",{className:"loader-spinning-wheel"}))};var r=e("react"),o=n(r)},{react:"react"}],59:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(e){var t=e.choices,a=e.onChange,n=e.value;return t?d["default"].createElement(v["default"],{label:gettext("Best answer"),helpText:gettext("Please select the best answer for your newly merged thread. No posts will be deleted during the merge."),"for":"id_best_answer"},d["default"].createElement("select",{className:"form-control",id:"id_best_answer",onChange:a,value:n},t.map(function(e){return d["default"].createElement("option",{value:e[0],key:e[0]},e[1])}))):null}function i(e){var t=e.choices,a=e.onChange,n=e.value;return t?d["default"].createElement(v["default"],{label:gettext("Poll"),helpText:gettext("Please select the poll for your newly merged thread. Rejected polls will be permanently deleted and cannot be recovered."),"for":"id_poll"},d["default"].createElement("select",{className:"form-control",id:"id_poll",onChange:a,value:n},t.map(function(e){return d["default"].createElement("option",{value:e[0],key:e[0]},e[1])}))):null}Object.defineProperty(a,"__esModule",{value:!0});var u=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();a.BestAnswerSelect=s,a.PollSelect=i;var c=e("react"),d=n(c),f=e("./button"),p=n(f),m=e("./form"),h=n(m),b=e("./form-group"),v=n(b),_=e("../services/ajax"),g=n(_),y=e("../services/modal"),E=n(y),w=function(e){function t(e){r(this,t);var a=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.handleSuccess=function(e){a.props.onSuccess(e),E["default"].hide()},a.handleError=function(e){a.props.onError(e)},a.onBestAnswerChange=function(e){a.changeValue("bestAnswer",e.target.value)},a.onPollChange=function(e){a.changeValue("poll",e.target.value)},a.state={isLoading:!1,bestAnswer:"0",poll:"0"},a}return l(t,e),u(t,[{key:"clean",value:function(){if(this.props.polls&&"0"===this.state.poll){var e=confirm(gettext("Are you sure you want to delete all polls?"));return e}return!0}},{key:"send",value:function(){var e=Object.assign({},this.props.data,{best_answer:this.state.bestAnswer,poll:this.state.poll});return g["default"].post(this.props.api,e)}},{key:"render",value:function(){return d["default"].createElement("div",{className:"modal-dialog",role:"document"},d["default"].createElement("div",{className:"modal-content"},d["default"].createElement("div",{className:"modal-header"},d["default"].createElement("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},d["default"].createElement("span",{"aria-hidden":"true"},"×")),d["default"].createElement("h4",{className:"modal-title"},gettext("Merge threads"))),d["default"].createElement("form",{onSubmit:this.handleSubmit},d["default"].createElement("div",{className:"modal-body"},d["default"].createElement(s,{choices:this.props.bestAnswers,onChange:this.onBestAnswerChange,value:this.state.bestAnswer}),d["default"].createElement(i,{choices:this.props.polls,onChange:this.onPollChange,value:this.state.poll})),d["default"].createElement("div",{className:"modal-footer"},d["default"].createElement("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},gettext("Cancel")),d["default"].createElement(p["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Merge threads"))))))}}]),t}(h["default"]);a["default"]=w},{"../services/ajax":365,"../services/modal":371,"./button":8,"./form":56,"./form-group":55,react:"react"}],60:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(e){var t=e.target;$(t).parent().parent().addClass("revealed")}Object.defineProperty(a,"__esModule",{value:!0});var i=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),u=e("react"),c=n(u),d=e("../services/one-box"),f=n(d),p=function(e){function t(){return r(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return l(t,e),i(t,[{key:"componentDidMount",value:function(){f["default"].render(this.documentNode),$(this.documentNode).find(".spoiler-reveal").click(s)}},{key:"componentDidUpdate",value:function(e,t){f["default"].render(this.documentNode),$(this.documentNode).find(".spoiler-reveal").click(s)}},{key:"shouldComponentUpdate",value:function(e,t){return e.markup!==this.props.markup}},{key:"render",value:function(){var e=this;return c["default"].createElement("article",{className:"misago-markup",dangerouslySetInnerHTML:{__html:this.props.markup},ref:function(t){e.documentNode=t}})}}]),t}(c["default"].Component);a["default"]=p},{"../services/one-box":372,react:"react"}],61:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=e("./loader"),d=n(c),f=function(e){function t(){return r(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return l(t,e),s(t,[{key:"render",value:function(){return u["default"].createElement("div",{className:"modal-body modal-loader"},u["default"].createElement(d["default"],null))}}]),t}(u["default"].Component);a["default"]=f},{"./loader":58,react:"react"}],62:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=e("./panel-message"),d=n(c),f=function(e){function t(){return r(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return l(t,e),s(t,[{key:"getHelpText",value:function(){return this.props.helpText?u["default"].createElement("p",{className:"help-block"},this.props.helpText):null}},{key:"render",value:function(){return u["default"].createElement("div",{className:"modal-body"},u["default"].createElement("div",{className:"message-icon"},u["default"].createElement("span",{className:"material-icon"},this.props.icon||"info_outline")),u["default"].createElement("div",{className:"message-body"},u["default"].createElement("p",{className:"lead"},this.props.message),this.getHelpText(),u["default"].createElement("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},gettext("Ok"))))}}]),t}(d["default"]);a["default"]=f},{"./panel-message":94,react:"react"}],63:[function(e,t,a){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.filter(function(e){return e.results.count>0});return t.map(function(e){return Object.assign({},e,{count:e.results.count,results:e.results.results.slice(0,n)})})};var n=5},{}],64:[function(e,t,a){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.HEADER="HEADER",a.RESULT="RESULT",a.FOOTER="FOOTER"},{}],65:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.children,a=e.onChange,n=e.query;return o["default"].createElement("ul",{className:"dropdown-menu dropdown-search-results",role:"menu"},o["default"].createElement("li",{className:"form-group"},o["default"].createElement(s["default"],{value:n,onChange:a})),t)};var r=e("react"),o=n(r),l=e("./input"),s=n(l)},{"./input":69,react:"react"}],66:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(){return o["default"].createElement("li",{className:"dropdown-search-message"},gettext("Search returned no results."))};var r=e("react"),o=n(r)},{react:"react"}],67:[function(e,t,a){"use strict";function n(e,t){for(var a=e.length,n=0;n<a;n++){var l=e[n];t.push({provider:l,type:o.HEADER}),r(l,t)}}function r(e,t){for(var a=e.results.length,n=0;n<a;n++){var r=e.results[n];t.push({provider:e,result:r,type:o.RESULT})}t.push({provider:e,type:o.FOOTER})}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=[];return n(e,t),t};var o=e("./constants")},{"./constants":64}],68:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e};a["default"]=function(e){var t=e.isLoading,a=e.onChange,n=e.results,o=e.query;if(!o.trim().length)return l["default"].createElement(u["default"],{onChange:a,query:o});if(n.length){var i=(0,v["default"])(n);return l["default"].createElement(u["default"],{onChange:a,query:o},i.map(function(e){var t=e.type,a=e.provider,n=e.result;return t===s.RESULT?l["default"].createElement(h["default"],r({key:[a.id,t,n.id].join("_")},e)):l["default"].createElement(h["default"],r({key:[a.id,t].join("_"),query:o},e))}))}return t?l["default"].createElement(u["default"],{onChange:a,query:o},l["default"].createElement(p["default"],null)):l["default"].createElement(u["default"],{onChange:a,query:o},l["default"].createElement(d["default"],null))};var o=e("react"),l=n(o),s=e("./constants"),i=e("./dropdown-menu"),u=n(i),c=e("./empty"),d=n(c),f=e("./loader"),p=n(f),m=e("./result"),h=n(m),b=e("./flatten-results"),v=n(b)},{"./constants":64,"./dropdown-menu":65,"./empty":66,"./flatten-results":67,"./loader":70,"./result":73,react:"react"}],69:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.value,a=e.onChange;return o["default"].createElement("input",{"aria-haspopup":"true","aria-expanded":"false",autoComplete:"off",className:"form-control",value:t,onChange:a,placeholder:gettext("Search"),role:"combobox",type:"text"})};var r=e("react"),o=n(r)},{react:"react"}],70:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){e.message;return o["default"].createElement("li",{className:"dropdown-search-loader"},o["default"].createElement(s["default"],null))};var r=e("react"),o=n(r),l=e("../../loader"),s=n(l)},{"../../loader":58,react:"react"}],71:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.provider,a=e.query,n=t.url+"?q="+encodeURI(a),r=ngettext('See full "%(provider)s" results page with %(count)s result.','See full "%(provider)s" results page with %(count)s results.',t.count);return o["default"].createElement("li",{className:"dropdown-search-footer"},o["default"].createElement("a",{href:n},interpolate(r,{count:t.count,provider:t.name},!0)))};var r=e("react"),o=n(r)},{react:"react"}],72:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.provider;return o["default"].createElement("li",{className:"dropdown-search-header"},t.name)};var r=e("react"),o=n(r)},{react:"react"}],73:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.provider,a=e.result,n=e.type,r=e.query;return n===l.HEADER?o["default"].createElement(c["default"],{provider:t}):n===l.FOOTER?o["default"].createElement(i["default"],{provider:t,query:r}):o["default"].createElement(f["default"],{provider:t,result:a})};var r=e("react"),o=n(r),l=e("../constants"),s=e("./footer"),i=n(s),u=e("./header"),c=n(u),d=e("./result"),f=n(d)},{"../constants":64,"./footer":71,"./header":72,"./result":74,react:"react"}],74:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.provider,a=e.result;return"threads"===t.id?o["default"].createElement(s["default"],{result:a}):o["default"].createElement(u["default"],{result:a})};var r=e("react"),o=n(r),l=e("./thread"),s=n(l),i=e("./user"),u=n(i)},{"./thread":75,"./user":76,react:"react"}],75:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.result,a=(t.poster,t.thread),n=gettext("Posted by %(poster)s on %(posted_on)s in %(category)s.");return s["default"].createElement("li",null,s["default"].createElement("a",{href:t.url.index,className:"dropdown-search-thread"},s["default"].createElement("h5",null,a.title),s["default"].createElement("small",{className:"dropdown-search-post-content"},$(t.content).text()),s["default"].createElement("small",{className:"dropdown-search-post-footer"},interpolate(n,{category:t.category.name,posted_on:(0,o["default"])(t.posted_on).format("LL"),poster:t.poster_name},!0))))};var r=e("moment"),o=n(r),l=e("react"),s=n(l)},{moment:"moment",react:"react"}],76:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.result,a=t.rank,n=gettext("%(title)s, joined on %(joined_on)s"),r=t.title||a.title||a.name;return s["default"].createElement("li",null,s["default"].createElement("a",{href:t.url,className:"dropdown-search-user"},s["default"].createElement("div",{className:"media"},s["default"].createElement("div",{className:"media-left"},s["default"].createElement(u["default"],{size:38,user:t})),s["default"].createElement("div",{className:"media-body"},s["default"].createElement("h5",{className:"media-heading"},t.username),s["default"].createElement("small",null,interpolate(n,{title:r,joined_on:(0,o["default"])(t.joined_on).format("LL")},!0))))))};var r=e("moment"),o=n(r),l=e("react"),s=n(l),i=e("../../../avatar"),u=n(i)},{"../../../avatar":6,moment:"moment",react:"react"}],77:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=e("../../services/ajax"),d=n(c),f=e("../../services/snackbar"),p=n(f),m=e("../.."),h=n(m),b=e("./clean-results"),v=n(b),_=e("./dropdown"),g=n(_),y=function(e){function t(){r(this,t);var e=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return e.onToggle=function(t){e.setState(function(t,a){return t.isOpen||window.setTimeout(function(){e.container.querySelector("input").focus()},100),{isOpen:!t.isOpen}})},e.onDocumentMouseDown=function(t){for(var a=!0,n=t.target;null!==n&&n!==document;){if(n===e.container)return void(a=!1);n=n.parentNode}a&&e.setState({isOpen:!1})},e.onEscape=function(t){"Escape"===t.key&&e.setState({isOpen:!1})},e.onChange=function(t){var a=t.target.value;e.setState({query:a}),e.loadResults(a.trim())},e.state={isLoading:!1,isOpen:!1,query:"",results:[]},e.intervalId=null,e}return l(t,e),s(t,[{key:"componentDidMount",value:function(){document.addEventListener("mousedown",this.onDocumentMouseDown),document.addEventListener("keydown",this.onEscape)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.onDocumentMouseDown),document.removeEventListener("keydown",this.onEscape)}},{key:"loadResults",value:function(e){var t=this;if(e.length){var a=300+300*Math.random();this.intervalId&&window.clearTimeout(this.intervalId),this.setState({isLoading:!0}),this.intervalId=window.setTimeout(function(){d["default"].get(h["default"].get("SEARCH_API"),{q:e}).then(function(e){t.setState({intervalId:null,isLoading:!1,results:(0,v["default"])(e)})},function(e){p["default"].apiError(e),t.setState({intervalId:null,isLoading:!1,results:[]})})},a)}}},{key:"render",value:function(){var e=this,t="navbar-search dropdown";return this.state.isOpen&&(t+=" open"),u["default"].createElement("div",{className:t,ref:function(t){return e.container=t}},u["default"].createElement("a",{"aria-haspopup":"true","aria-expanded":"false",className:"navbar-icon","data-toggle":"dropdown",href:h["default"].get("SEARCH_URL"),onClick:this.onToggle},u["default"].createElement("i",{className:"material-icon"},"search")),u["default"].createElement(g["default"],{isLoading:this.state.isLoading,onChange:this.onChange,results:this.state.results,query:this.state.query}))}}]),t}(u["default"].Component);a["default"]=y},{"../..":302,"../../services/ajax":365,"../../services/snackbar":376,"./clean-results":63,"./dropdown":68,react:"react"}],78:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(){return o["default"].createElement("div",{className:"panel panel-default panel-form"},o["default"].createElement("div",{className:"panel-heading"},o["default"].createElement("h3",{className:"panel-title"},gettext("Change username"))),o["default"].createElement(s["default"],null))};var r=e("react"),o=n(r),l=e("../../panel-loader"),s=n(l)},{"../../panel-loader":93,react:"react"}],79:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=e("../../panel-message"),d=n(c),f=function(e){function t(){return r(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return l(t,e),s(t,[{key:"getHelpText",value:function(){return this.props.options.next_on?interpolate(gettext("You will be able to change your username %(next_change)s."),{next_change:this.props.options.next_on.fromNow()},!0):gettext("You have used up available name changes.")}},{key:"render",value:function(){return u["default"].createElement("div",{className:"panel panel-default panel-form"},u["default"].createElement("div",{className:"panel-heading"},u["default"].createElement("h3",{className:"panel-title"},gettext("Change username"))),u["default"].createElement(d["default"],{helpText:this.getHelpText(),message:gettext("You can't change your username at the moment.")}))}}]),t}(u["default"].Component);a["default"]=f},{"../../panel-message":94,react:"react"}],80:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var i=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),u=e("react"),c=r(u),d=e("../../button"),f=r(d),p=e("../../form"),m=r(p),h=e("../../form-group"),b=r(h),v=e("../../../services/ajax"),_=r(v),g=e("../../../services/snackbar"),y=r(g),E=e("../../../utils/validators"),w=n(E),O=function(e){function t(e){o(this,t);var a=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.state={username:"",validators:{username:[w.usernameContent(),w.usernameMinLength(e.options.length_min),w.usernameMaxLength(e.options.length_max)]},isLoading:!1},a}return s(t,e),i(t,[{key:"getHelpText",value:function(){var e=[];if(this.props.options.changes_left>0){var t=ngettext("You can change your username %(changes_left)s more time.","You can change your username %(changes_left)s more times.",this.props.options.changes_left);e.push(interpolate(t,{changes_left:this.props.options.changes_left},!0))}if(this.props.user.acl.name_changes_expire>0){var a=ngettext("Used changes become available again after %(name_changes_expire)s day.","Used changes become available again after %(name_changes_expire)s days.",this.props.user.acl.name_changes_expire);e.push(interpolate(a,{name_changes_expire:this.props.user.acl.name_changes_expire},!0))}return e.length?e.join(" "):null}},{key:"clean",value:function(){var e=this.validate();return e.username?(y["default"].error(e.username[0]),!1):this.state.username.trim()!==this.props.user.username||(y["default"].info(gettext("Your new username is same as current one.")),!1)}},{key:"send",value:function(){return _["default"].post(this.props.user.api.username,{username:this.state.username})}},{key:"handleSuccess",value:function(e){this.setState({username:""}),this.props.complete(e.username,e.slug,e.options)}},{key:"handleError",value:function(e){y["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement("form",{onSubmit:this.handleSubmit},c["default"].createElement("div",{className:"panel panel-default panel-form"},c["default"].createElement("div",{className:"panel-heading"},c["default"].createElement("h3",{className:"panel-title"},gettext("Change username"))),c["default"].createElement("div",{className:"panel-body"},c["default"].createElement(b["default"],{label:gettext("New username"),"for":"id_username",helpText:this.getHelpText()},c["default"].createElement("input",{type:"text",id:"id_username",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("username"),value:this.state.username}))),c["default"].createElement("div",{className:"panel-footer"},c["default"].createElement(f["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Change username")))))}}]),t}(m["default"]);a["default"]=O},{"../../../services/ajax":365,"../../../services/snackbar":376,"../../../utils/validators":393,"../../button":8,"../../form":56,"../../form-group":55,react:"react"}],81:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("moment"),u=n(i),c=e("react"),d=n(c),f=e("./form-loading"),p=n(f),m=e("./form-locked"),h=n(m),b=e("./form"),v=n(b),_=e("../../username-history/root"),g=n(_),y=e("../../../index"),E=n(y),w=e("../../../reducers/username-history"),O=e("../../../reducers/users"),k=e("../../../services/ajax"),N=n(k),x=e("../../../services/page-title"),P=n(x),j=e("../../../services/snackbar"),C=n(j),S=e("../../../services/store"),M=n(S),T=function(e){
 function t(e){r(this,t);var a=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.onComplete=function(e,t,n){a.setState({options:n}),M["default"].dispatch((0,w.addNameChange)({username:e,slug:t},a.props.user,a.props.user)),M["default"].dispatch((0,O.updateUsername)(a.props.user,e,t)),C["default"].success(gettext("Your username has been changed successfully."))},a.state={isLoaded:!1,options:null},a}return l(t,e),s(t,[{key:"componentDidMount",value:function(){var e=this;P["default"].set({title:gettext("Change username"),parent:gettext("Change your options")}),Promise.all([N["default"].get(this.props.user.api.username),N["default"].get(E["default"].get("USERNAME_CHANGES_API"),{user:this.props.user.id})]).then(function(t){M["default"].dispatch((0,w.hydrate)(t[1].results)),e.setState({isLoaded:!0,options:{changes_left:t[0].changes_left,length_min:t[0].length_min,length_max:t[0].length_max,next_on:t[0].next_on?(0,u["default"])(t[0].next_on):null}})})}},{key:"getChangeForm",value:function(){return this.state.isLoaded?0===this.state.options.changes_left?d["default"].createElement(h["default"],{options:this.state.options}):d["default"].createElement(v["default"],{complete:this.onComplete,options:this.state.options,user:this.props.user}):d["default"].createElement(p["default"],null)}},{key:"render",value:function(){return d["default"].createElement("div",null,this.getChangeForm(),d["default"].createElement(g["default"],{changes:this.props["username-history"],isLoaded:this.state.isLoaded}))}}]),t}(d["default"].Component);a["default"]=T},{"../../../index":302,"../../../reducers/username-history":363,"../../../reducers/users":364,"../../../services/ajax":365,"../../../services/page-title":373,"../../../services/snackbar":376,"../../../services/store":377,"../../username-history/root":280,"./form":80,"./form-loading":78,"./form-locked":79,moment:"moment",react:"react"}],82:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=e("../button"),d=n(c),f=e("../../services/ajax"),p=n(f),m=e("../../services/page-title"),h=n(m),b=e("../../services/snackbar"),v=n(b),_=e("../../services/store"),g=(n(_),e("../..")),y=n(g),E=function(e){function t(e){r(this,t);var a=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.onPasswordChange=function(e){a.setState({password:e.target.value})},a.handleSubmit=function(e){e.preventDefault();var t=a.state,n=t.isLoading,r=t.password,o=a.props.user;return 0==r.length?(v["default"].error(gettext("Enter your password to confirm account deletion.")),!1):!n&&(a.setState({isLoading:!0}),void p["default"].post(o.api["delete"],{password:r}).then(function(e){window.location.href=y["default"].get("MISAGO_PATH")},function(e){a.setState({isLoading:!1}),e.password?v["default"].error(e.password[0]):v["default"].apiError(e)}))},a.state={isLoading:!1,password:""},a}return l(t,e),s(t,[{key:"componentDidMount",value:function(){h["default"].set({title:gettext("Delete account"),parent:gettext("Change your options")})}},{key:"render",value:function(){return u["default"].createElement("form",{onSubmit:this.handleSubmit},u["default"].createElement("div",{className:"panel panel-danger panel-form"},u["default"].createElement("div",{className:"panel-heading"},u["default"].createElement("h3",{className:"panel-title"},gettext("Delete account"))),u["default"].createElement("div",{className:"panel-body"},u["default"].createElement("p",{className:"lead"},gettext("You are going to delete your account. This action is nonreversible, and will result in following data being deleted:")),u["default"].createElement("p",null,"-"," ",gettext("Stored IP addresses associated with content that you have posted will be deleted.")),u["default"].createElement("p",null,"-"," ",gettext("Your username will become available for other user to rename to or for new user to register their account with.")),u["default"].createElement("p",null,"-"," ",gettext("Your e-mail will become available for use in new account registration.")),u["default"].createElement("hr",null),u["default"].createElement("p",null,gettext("All your posted content will NOT be deleted, but username associated with it will be changed to one shared by all deleted accounts."))),u["default"].createElement("div",{className:"panel-footer"},u["default"].createElement("div",{className:"input-group"},u["default"].createElement("input",{className:"form-control",disabled:this.state.isLoading,name:"password-confirmation",type:"password",placeholder:gettext("Enter your password to confirm account deletion."),value:this.state.password,onChange:this.onPasswordChange}),u["default"].createElement("span",{className:"input-group-btn"},u["default"].createElement(d["default"],{className:"btn-danger",loading:this.state.isLoading},gettext("Delete my account")))))))}}]),t}(u["default"].Component);a["default"]=E},{"../..":302,"../../services/ajax":365,"../../services/page-title":373,"../../services/snackbar":376,"../../services/store":377,"../button":8,react:"react"}],83:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=e("moment"),d=n(c),f=e("../button"),p=n(f),m=e("../../services/ajax"),h=n(m),b=e("../../services/page-title"),v=n(b),_=e("../../services/snackbar"),g=n(_),y=function(e){function t(e){r(this,t);var a=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.handleLoadDownloads=function(){h["default"].get(a.props.user.api.data_downloads).then(function(e){a.setState({isLoading:!1,downloads:e})},function(e){g["default"].apiError(e)})},a.handleRequestDataDownload=function(){a.setState({isSubmiting:!0}),h["default"].post(a.props.user.api.request_data_download).then(function(){a.handleLoadDownloads(),g["default"].success(gettext("Your request for data download has been registered.")),a.setState({isSubmiting:!1})},function(e){console.log(e),g["default"].apiError(e),a.setState({isSubmiting:!1})})},a.state={isLoading:!1,isSubmiting:!1,downloads:[]},a}return l(t,e),s(t,[{key:"componentDidMount",value:function(){v["default"].set({title:gettext("Download your data"),parent:gettext("Change your options")}),this.handleLoadDownloads()}},{key:"render",value:function(){return u["default"].createElement("div",null,u["default"].createElement("div",{className:"panel panel-default panel-form"},u["default"].createElement("div",{className:"panel-heading"},u["default"].createElement("h3",{className:"panel-title"},gettext("Download your data"))),u["default"].createElement("div",{className:"panel-body"},u["default"].createElement("p",null,gettext('To download your data from the site, click the "Request data download" button. Depending on amount of data to be archived and number of users wanting to download their data at same time it may take up to few days for your download to be prepared. An e-mail with notification will be sent to you when your data is ready to be downloaded.')),u["default"].createElement("p",null,gettext("The download will only be available for limited amount of time, after which it will be deleted from the site and marked as expired."))),u["default"].createElement("table",{className:"table"},u["default"].createElement("thead",null,u["default"].createElement("tr",null,u["default"].createElement("th",null,gettext("Requested on")),u["default"].createElement("th",{className:"col-md-4"},gettext("Download")))),u["default"].createElement("tbody",null,this.state.downloads.map(function(e){return u["default"].createElement("tr",{key:e.id},u["default"].createElement("td",{style:E},(0,d["default"])(e.requested_on).fromNow()),u["default"].createElement("td",null,u["default"].createElement(k,{exportFile:e.file,status:e.status})))}),0==this.state.downloads.length?u["default"].createElement("tr",null,u["default"].createElement("td",{colSpan:"2"},gettext("You have no data downloads."))):null)),u["default"].createElement("div",{className:"panel-footer text-right"},u["default"].createElement(p["default"],{className:"btn-primary",loading:this.state.isSubmiting,type:"button",onClick:this.handleRequestDataDownload},gettext("Request data download")))))}}]),t}(u["default"].Component);a["default"]=y;var E={verticalAlign:"middle"},w=0,O=1,k=function(e){var t=e.exportFile,a=e.status;return a===w||a===O?u["default"].createElement(p["default"],{className:"btn-info btn-sm btn-block",disabled:!0,type:"button"},gettext("Download is being prepared")):t?u["default"].createElement("a",{className:"btn btn-success btn-sm btn-block",href:t},gettext("Download your data")):u["default"].createElement(p["default"],{className:"btn-default btn-sm btn-block",disabled:!0,type:"button"},gettext("Download is expired"))}},{"../../services/ajax":365,"../../services/page-title":373,"../../services/snackbar":376,"../button":8,moment:"moment",react:"react"}],84:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=e("../edit-details"),d=n(c),f=e("../../services/page-title"),p=n(f),m=e("../../services/snackbar"),h=n(m),b=function(e){function t(){var e,a,n,l;r(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=o(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onSuccess=function(){h["default"].info(gettext("Your details have been updated."))},l=a,o(n,l)}return l(t,e),s(t,[{key:"componentDidMount",value:function(){p["default"].set({title:gettext("Edit details"),parent:gettext("Change your options")})}},{key:"render",value:function(){return u["default"].createElement(d["default"],{api:this.props.user.api.edit_details,onSuccess:this.onSuccess})}}]),t}(u["default"].Component);a["default"]=b},{"../../services/page-title":373,"../../services/snackbar":376,"../edit-details":32,react:"react"}],85:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=e("../button"),d=n(c),f=e("../form"),p=n(f),m=e("../form-group"),h=n(m),b=e("../select"),v=n(b),_=e("../yes-no-switch"),g=n(_),y=e("../../reducers/auth"),E=e("../../services/ajax"),w=n(E),O=e("../../services/page-title"),k=n(O),N=e("../../services/snackbar"),x=n(N),P=e("../../services/store"),j=n(P),C=function(e){function t(e){r(this,t);var a=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.state={isLoading:!1,is_hiding_presence:e.user.is_hiding_presence,limits_private_thread_invites_to:e.user.limits_private_thread_invites_to,subscribe_to_started_threads:e.user.subscribe_to_started_threads,subscribe_to_replied_threads:e.user.subscribe_to_replied_threads,errors:{}},a.privateThreadInvitesChoices=[{value:0,icon:"help_outline",label:gettext("Everybody")},{value:1,icon:"done_all",label:gettext("Users I follow")},{value:2,icon:"highlight_off",label:gettext("Nobody")}],a.subscribeToChoices=[{value:0,icon:"star_border",label:gettext("No")},{value:1,icon:"star_half",label:gettext("Notify")},{value:2,icon:"star",label:gettext("Notify with e-mail")}],a}return l(t,e),s(t,[{key:"send",value:function(){return w["default"].post(this.props.user.api.options,{is_hiding_presence:this.state.is_hiding_presence,limits_private_thread_invites_to:this.state.limits_private_thread_invites_to,subscribe_to_started_threads:this.state.subscribe_to_started_threads,subscribe_to_replied_threads:this.state.subscribe_to_replied_threads})}},{key:"handleSuccess",value:function(){j["default"].dispatch((0,y.patch)({is_hiding_presence:this.state.is_hiding_presence,limits_private_thread_invites_to:this.state.limits_private_thread_invites_to,subscribe_to_started_threads:this.state.subscribe_to_started_threads,subscribe_to_replied_threads:this.state.subscribe_to_replied_threads})),x["default"].success(gettext("Your forum options have been changed."))}},{key:"handleError",value:function(e){400===e.status?x["default"].error(gettext("Please reload page and try again.")):x["default"].apiError(e)}},{key:"componentDidMount",value:function(){k["default"].set({title:gettext("Forum options"),parent:gettext("Change your options")})}},{key:"render",value:function(){return u["default"].createElement("form",{onSubmit:this.handleSubmit},u["default"].createElement("div",{className:"panel panel-default panel-form"},u["default"].createElement("div",{className:"panel-heading"},u["default"].createElement("h3",{className:"panel-title"},gettext("Change forum options"))),u["default"].createElement("div",{className:"panel-body"},u["default"].createElement("fieldset",null,u["default"].createElement("legend",null,gettext("Privacy settings")),u["default"].createElement(h["default"],{label:gettext("Hide my presence"),helpText:gettext("If you hide your presence, only members with permission to see hidden users will see when you are online."),"for":"id_is_hiding_presence"},u["default"].createElement(g["default"],{id:"id_is_hiding_presence",disabled:this.state.isLoading,iconOn:"visibility_off",iconOff:"visibility",labelOn:gettext("Hide my presence from other users"),labelOff:gettext("Show my presence to other users"),onChange:this.bindInput("is_hiding_presence"),value:this.state.is_hiding_presence})),u["default"].createElement(h["default"],{label:gettext("Private thread invitations"),"for":"id_limits_private_thread_invites_to"},u["default"].createElement(v["default"],{id:"id_limits_private_thread_invites_to",disabled:this.state.isLoading,onChange:this.bindInput("limits_private_thread_invites_to"),value:this.state.limits_private_thread_invites_to,choices:this.privateThreadInvitesChoices}))),u["default"].createElement("fieldset",null,u["default"].createElement("legend",null,gettext("Automatic subscriptions")),u["default"].createElement(h["default"],{label:gettext("Threads I start"),"for":"id_subscribe_to_started_threads"},u["default"].createElement(v["default"],{id:"id_subscribe_to_started_threads",disabled:this.state.isLoading,onChange:this.bindInput("subscribe_to_started_threads"),value:this.state.subscribe_to_started_threads,choices:this.subscribeToChoices})),u["default"].createElement(h["default"],{label:gettext("Threads I reply to"),"for":"id_subscribe_to_replied_threads"},u["default"].createElement(v["default"],{id:"id_subscribe_to_replied_threads",disabled:this.state.isLoading,onChange:this.bindInput("subscribe_to_replied_threads"),value:this.state.subscribe_to_replied_threads,choices:this.subscribeToChoices})))),u["default"].createElement("div",{className:"panel-footer"},u["default"].createElement(d["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Save changes")))))}}]),t}(p["default"]);a["default"]=C},{"../../reducers/auth":350,"../../services/ajax":365,"../../services/page-title":373,"../../services/snackbar":376,"../../services/store":377,"../button":8,"../form":56,"../form-group":55,"../select":210,"../yes-no-switch":300,react:"react"}],86:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){return s["default"].createElement("div",{className:"list-group nav-side"},e.options.map(function(t){return s["default"].createElement(i.Link,{to:e.baseUrl+t.component+"/",className:"list-group-item",activeClassName:"active",key:t.component},s["default"].createElement("span",{className:"material-icon"},t.icon),t.name)}))}function o(e){return s["default"].createElement("ul",{className:e.className||"dropdown-menu stick-to-bottom",role:"menu"},e.options.map(function(t){return s["default"].createElement(c["default"],{path:e.baseUrl+t.component+"/",key:t.component},s["default"].createElement(i.Link,{to:e.baseUrl+t.component+"/",onClick:e.hideNav},s["default"].createElement("span",{className:"material-icon hidden-sm"},t.icon),t.name))}))}Object.defineProperty(a,"__esModule",{value:!0}),a.SideNav=r,a.CompactNav=o;var l=e("react"),s=n(l),i=e("react-router"),u=e("../li"),c=n(u),d=e("../../index");n(d)},{"../../index":302,"../li":57,react:"react","react-router":"react-router"}],87:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(e){return{tick:e.tick.tick,user:e.auth.user,"username-history":e["username-history"]}}function i(){var e=S["default"].get("SETTINGS").enable_sso,t=[{path:S["default"].get("USERCP_URL")+"forum-options/",component:(0,f.connect)(s)(w["default"])},{path:S["default"].get("USERCP_URL")+"edit-details/",component:(0,f.connect)(s)(_["default"])}];return e||(t.push({path:S["default"].get("USERCP_URL")+"change-username/",component:(0,f.connect)(s)(k["default"])}),t.push({path:S["default"].get("USERCP_URL")+"sign-in-credentials/",component:(0,f.connect)(s)(x["default"])})),S["default"].get("ENABLE_DOWNLOAD_OWN_DATA")&&t.push({path:S["default"].get("USERCP_URL")+"download-data/",component:(0,f.connect)(s)(y["default"])}),!e&&S["default"].get("ENABLE_DELETE_OWN_ACCOUNT")&&t.push({path:S["default"].get("USERCP_URL")+"delete-account/",component:(0,f.connect)(s)(b["default"])}),t}Object.defineProperty(a,"__esModule",{value:!0});var u=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();a.select=s,a.paths=i;var c=e("react"),d=n(c),f=e("react-redux"),p=e("../dropdown-toggle"),m=(n(p),e("./navs")),h=e("./delete-account"),b=n(h),v=e("./edit-details"),_=n(v),g=e("./download-data"),y=n(g),E=e("./forum-options"),w=n(E),O=e("./change-username/root"),k=n(O),N=e("./sign-in-credentials/root"),x=n(N),P=e("../with-dropdown"),j=n(P),C=e("../../index"),S=n(C),M=function(e){function t(){return r(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return l(t,e),u(t,[{key:"render",value:function(){return d["default"].createElement("div",{className:"page page-options"},d["default"].createElement("div",{className:"page-header-bg"},d["default"].createElement("div",{className:"page-header"},d["default"].createElement("div",{className:"container"},d["default"].createElement("h1",null,gettext("Change your options"))),d["default"].createElement("div",{className:"page-tabs visible-xs-block visible-sm-block"},d["default"].createElement("div",{className:"container"},d["default"].createElement(m.CompactNav,{className:"nav nav-pills",baseUrl:S["default"].get("USERCP_URL"),options:S["default"].get("USER_OPTIONS")}))))),d["default"].createElement("div",{className:"container"},d["default"].createElement("div",{className:"row"},d["default"].createElement("div",{className:"col-md-3 hidden-xs hidden-sm"},d["default"].createElement(m.SideNav,{baseUrl:S["default"].get("USERCP_URL"),options:S["default"].get("USER_OPTIONS")})),d["default"].createElement("div",{className:"col-md-9"},this.props.children))))}}]),t}(j["default"]);a["default"]=M},{"../../index":302,"../dropdown-toggle":27,"../with-dropdown":299,"./change-username/root":81,"./delete-account":82,"./download-data":83,"./edit-details":84,"./forum-options":85,"./navs":86,"./sign-in-credentials/root":91,react:"react","react-redux":"react-redux"}],88:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0});var r=e("react"),o=n(r),l=e("../../../index"),s=n(l),i=function(){return o["default"].createElement("div",{className:"panel panel-default panel-form"},o["default"].createElement("div",{className:"panel-heading"},o["default"].createElement("h3",{className:"panel-title"},gettext("Change email or password"))),o["default"].createElement("div",{className:"panel-body panel-message-body"},o["default"].createElement("div",{className:"message-icon"},o["default"].createElement("span",{className:"material-icon"},"info_outline")),o["default"].createElement("div",{className:"message-body"},o["default"].createElement("p",{className:"lead"},gettext("You need to set a password for your account to be able to change your username or email.")),o["default"].createElement("p",{className:"help-block"},o["default"].createElement("a",{className:"btn btn-primary",href:s["default"].get("FORGOTTEN_PASSWORD_URL")},gettext("Set password"))))))};a["default"]=i},{"../../../index":302,react:"react"}],89:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var i=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),u=e("react"),c=r(u),d=e("../../button"),f=r(d),p=e("../../form"),m=r(p),h=e("../../form-group"),b=r(h),v=e("../../../services/ajax"),_=r(v),g=e("../../../services/snackbar"),y=r(g),E=e("../../../utils/validators"),w=n(E),O=function(e){function t(e){o(this,t);var a=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.state={new_email:"",password:"",validators:{new_email:[w.email()],password:[]},isLoading:!1},a}return s(t,e),i(t,[{key:"clean",value:function(){var e=this.validate(),t=[this.state.new_email.trim().length,this.state.password.trim().length];return t.indexOf(0)!==-1?(y["default"].error(gettext("Fill out all fields.")),!1):!e.new_email||(y["default"].error(e.new_email[0]),!1)}},{key:"send",value:function(){return _["default"].post(this.props.user.api.change_email,{new_email:this.state.new_email,password:this.state.password})}},{key:"handleSuccess",value:function(e){this.setState({new_email:"",password:""}),y["default"].success(e.detail)}},{key:"handleError",value:function(e){400===e.status?e.new_email?y["default"].error(e.new_email):y["default"].error(e.password):y["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement("form",{onSubmit:this.handleSubmit},c["default"].createElement("input",{type:"type",style:{display:"none"}}),c["default"].createElement("input",{type:"password",style:{display:"none"}}),c["default"].createElement("div",{className:"panel panel-default panel-form"},c["default"].createElement("div",{className:"panel-heading"},c["default"].createElement("h3",{className:"panel-title"},gettext("Change e-mail address"))),c["default"].createElement("div",{className:"panel-body"},c["default"].createElement(b["default"],{label:gettext("New e-mail"),"for":"id_new_email"},c["default"].createElement("input",{type:"text",id:"id_new_email",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("new_email"),value:this.state.new_email})),c["default"].createElement("hr",null),c["default"].createElement(b["default"],{label:gettext("Your current password"),"for":"id_confirm_email"},c["default"].createElement("input",{type:"password",id:"id_confirm_email",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),c["default"].createElement("div",{className:"panel-footer"},c["default"].createElement(f["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Change e-mail")))))}}]),t}(m["default"]);a["default"]=O},{"../../../services/ajax":365,"../../../services/snackbar":376,"../../../utils/validators":393,"../../button":8,"../../form":56,"../../form-group":55,react:"react"}],90:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=e("../../button"),d=n(c),f=e("../../form"),p=n(f),m=e("../../form-group"),h=n(m),b=e("../../../services/ajax"),v=n(b),_=e("../../../services/snackbar"),g=n(_),y=function(e){function t(e){r(this,t);var a=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.state={new_password:"",repeat_password:"",password:"",validators:{new_password:[],repeat_password:[],password:[]},isLoading:!1},a}return l(t,e),s(t,[{key:"clean",value:function(){var e=this.validate(),t=[this.state.new_password.trim().length,this.state.repeat_password.trim().length,this.state.password.trim().length];return t.indexOf(0)!==-1?(g["default"].error(gettext("Fill out all fields.")),!1):e.new_password?(g["default"].error(e.new_password[0]),!1):this.state.new_password===this.state.repeat_password||(g["default"].error(gettext("New passwords are different.")),!1)}},{key:"send",value:function(){return v["default"].post(this.props.user.api.change_password,{new_password:this.state.new_password,password:this.state.password})}},{key:"handleSuccess",value:function(e){this.setState({new_password:"",repeat_password:"",password:""}),g["default"].success(e.detail)}},{key:"handleError",value:function(e){400===e.status?e.new_password?g["default"].error(e.new_password):g["default"].error(e.password):g["default"].apiError(e)}},{key:"render",value:function(){return u["default"].createElement("form",{onSubmit:this.handleSubmit},u["default"].createElement("input",{type:"type",style:{display:"none"}}),u["default"].createElement("input",{type:"password",style:{display:"none"}}),u["default"].createElement("div",{className:"panel panel-default panel-form"},u["default"].createElement("div",{className:"panel-heading"},u["default"].createElement("h3",{className:"panel-title"},gettext("Change password"))),u["default"].createElement("div",{className:"panel-body"},u["default"].createElement(h["default"],{label:gettext("New password"),"for":"id_new_password"},u["default"].createElement("input",{type:"password",id:"id_new_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("new_password"),value:this.state.new_password})),u["default"].createElement(h["default"],{label:gettext("Repeat password"),"for":"id_repeat_password"},u["default"].createElement("input",{type:"password",id:"id_repeat_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("repeat_password"),value:this.state.repeat_password})),u["default"].createElement("hr",null),u["default"].createElement(h["default"],{label:gettext("Your current password"),"for":"id_confirm_password"},u["default"].createElement("input",{type:"password",id:"id_confirm_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),u["default"].createElement("div",{className:"panel-footer"},u["default"].createElement(d["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Change password")))))}}]),t}(p["default"]);a["default"]=y},{"../../../services/ajax":365,"../../../services/snackbar":376,
 "../../button":8,"../../form":56,"../../form-group":55,react:"react"}],91:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=e("./change-email"),d=n(c),f=e("./change-password"),p=n(f),m=e("../../../index"),h=n(m),b=e("../../../services/page-title"),v=n(b),_=e("./UnusablePasswordMessage"),g=n(_),y=function(e){function t(){return r(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return l(t,e),s(t,[{key:"componentDidMount",value:function(){v["default"].set({title:gettext("Change email or password"),parent:gettext("Change your options")})}},{key:"render",value:function(){return this.props.user.has_usable_password?u["default"].createElement("div",null,u["default"].createElement(d["default"],{user:this.props.user}),u["default"].createElement(p["default"],{user:this.props.user}),u["default"].createElement("p",{className:"message-line"},u["default"].createElement("span",{className:"material-icon"},"warning"),u["default"].createElement("a",{href:h["default"].get("FORGOTTEN_PASSWORD_URL")},gettext("Change forgotten password")))):u["default"].createElement(g["default"],null)}}]),t}(u["default"].Component);a["default"]=y},{"../../../index":302,"../../../services/page-title":373,"./UnusablePasswordMessage":88,"./change-email":89,"./change-password":90,react:"react"}],92:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=e("../utils/string-count"),d=n(c),f=function(e){function t(){return r(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return l(t,e),s(t,[{key:"getClassName",value:function(){return this.props.copy&&this.props.copy.length&&1===(0,d["default"])(this.props.copy,"<p")&&this.props.copy.indexOf("<br")===-1?"page-lead lead":"page-lead"}},{key:"render",value:function(){return this.props.copy&&this.props.copy.length?u["default"].createElement("div",{className:this.getClassName(),dangerouslySetInnerHTML:{__html:this.props.copy}}):null}}]),t}(u["default"].Component);a["default"]=f},{"../utils/string-count":392,react:"react"}],93:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=e("./loader"),d=n(c),f=function(e){function t(){return r(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return l(t,e),s(t,[{key:"render",value:function(){return u["default"].createElement("div",{className:"panel-body panel-body-loading"},u["default"].createElement(d["default"],{className:"loader loader-spaced"}))}}]),t}(u["default"].Component);a["default"]=f},{"./loader":58,react:"react"}],94:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=function(e){function t(){return r(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return l(t,e),s(t,[{key:"getHelpText",value:function(){return this.props.helpText?u["default"].createElement("p",{className:"help-block"},this.props.helpText):null}},{key:"render",value:function(){return u["default"].createElement("div",{className:"panel-body panel-message-body"},u["default"].createElement("div",{className:"message-icon"},u["default"].createElement("span",{className:"material-icon"},this.props.icon||"info_outline")),u["default"].createElement("div",{className:"message-body"},u["default"].createElement("p",{className:"lead"},this.props.message),this.getHelpText()))}}]),t}(u["default"].Component);a["default"]=c},{react:"react"}],95:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=e("../add-participant"),d=n(c),f=e("../../services/modal"),p=n(f),m=function(e){function t(){var e,a,n,l;r(this,t);for(var s=arguments.length,i=Array(s),c=0;c<s;c++)i[c]=arguments[c];return a=n=o(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){p["default"].show(u["default"].createElement(d["default"],{thread:n.props.thread}))},l=a,o(n,l)}return l(t,e),s(t,[{key:"render",value:function(){return this.props.thread.acl.can_add_participants?u["default"].createElement("div",{className:"col-xs-12 col-sm-3"},u["default"].createElement("button",{className:"btn btn-default btn-block",onClick:this.onClick,type:"button"},u["default"].createElement("span",{className:"material-icon"},"person_add"),gettext("Add participant"))):null}}]),t}(u["default"].Component);a["default"]=m},{"../../services/modal":371,"../add-participant":4,react:"react"}],96:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function o(e,t){m["default"].patch(e.api.index,[{op:"remove",path:"participants",value:t.id}]).then(function(){b["default"].success(gettext("You have left this thread.")),window.setTimeout(function(){window.location=f["default"].get("PRIVATE_THREADS_URL")},3e3)},function(e){b["default"].apiError(e)})}function l(e,t){m["default"].patch(e.api.index,[{op:"remove",path:"participants",value:t.id},{op:"add",path:"acl",value:1}]).then(function(e){_["default"].dispatch((0,c.updateAcl)(e)),_["default"].dispatch(u.replace(e.participants));var a=gettext("%(user)s has been removed from this thread.");b["default"].success(interpolate(a,{user:t.username},!0))},function(e){b["default"].apiError(e)})}function s(e,t){m["default"].patch(e.api.index,[{op:"replace",path:"owner",value:t.id},{op:"add",path:"acl",value:1}]).then(function(e){_["default"].dispatch((0,c.updateAcl)(e)),_["default"].dispatch(u.replace(e.participants));var a=gettext("%(user)s has been made new thread owner.");b["default"].success(interpolate(a,{user:t.username},!0))},function(e){b["default"].apiError(e)})}Object.defineProperty(a,"__esModule",{value:!0}),a.leave=o,a.remove=l,a.changeOwner=s;var i=e("../../../reducers/participants"),u=r(i),c=e("../../../reducers/thread"),d=e("../../.."),f=n(d),p=e("../../../services/ajax"),m=n(p),h=e("../../../services/snackbar"),b=n(h),v=e("../../../services/store"),_=n(v)},{"../../..":302,"../../../reducers/participants":351,"../../../reducers/thread":360,"../../../services/ajax":365,"../../../services/snackbar":376,"../../../services/store":377}],97:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){var t=e.isOwner;return t?l["default"].createElement("li",{className:"dropdown-header dropdown-header-owner"},l["default"].createElement("span",{className:"material-icon"},"start"),l["default"].createElement("span",{className:"icon-text"},gettext("Thread owner"))):null}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.participant,a="btn btn-default";return t.is_owner&&(a="btn btn-primary"),a+=" btn-user btn-block",l["default"].createElement("div",{className:"col-xs-12 col-sm-3 col-md-2 participant-card"},l["default"].createElement("div",{className:"dropdown"},l["default"].createElement("button",{"aria-haspopup":"true","aria-expanded":"false",className:a,"data-toggle":"dropdown",type:"button"},l["default"].createElement(f["default"],{size:"34",user:t}),l["default"].createElement("span",{className:"btn-text"},t.username)),l["default"].createElement("ul",{className:"dropdown-menu stick-to-bottom"},l["default"].createElement(r,{isOwner:t.is_owner}),l["default"].createElement("li",{className:"dropdown-header"}),l["default"].createElement("li",null,l["default"].createElement("a",{href:t.url},gettext("See profile"))),l["default"].createElement("li",{role:"separator",className:"divider"}),l["default"].createElement(i["default"],e),l["default"].createElement(c["default"],e))))},a.UserStatus=r;var o=e("react"),l=n(o),s=e("./make-owner"),i=n(s),u=e("./remove"),c=n(u),d=e("../../avatar"),f=n(d)},{"../../avatar":6,"./make-owner":99,"./remove":100,react:"react"}],98:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.participants,a=e.thread,n=e.user,r=e.userIsOwner;return o["default"].createElement("div",{className:"participants-cards"},o["default"].createElement("div",{className:"row"},t.map(function(e){return o["default"].createElement(s["default"],{key:e.id,participant:e,thread:a,user:n,userIsOwner:r})})))};var r=e("react"),o=n(r),l=e("./card"),s=n(l)},{"./card":97,react:"react"}],99:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=e("./actions"),d=function(e){function t(e){r(this,t);var a=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.onClick=function(){var e=!1;if(a.isUser)e=confirm(gettext("Are you sure you want to take over this thread?"));else{var t=gettext("Are you sure you want to change thread owner to %(user)s?");e=confirm(interpolate(t,{user:a.props.participant.username},!0))}e&&(0,c.changeOwner)(a.props.thread,a.props.participant)},a.isUser=e.participant.id===e.user.id,a}return l(t,e),s(t,[{key:"render",value:function(){return this.props.participant.is_owner?null:this.props.thread.acl.can_change_owner?u["default"].createElement("li",null,u["default"].createElement("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},gettext("Make owner"))):null}}]),t}(u["default"].Component);a["default"]=d},{"./actions":96,react:"react"}],100:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=e("./actions"),d=function(e){function t(e){r(this,t);var a=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.onClick=function(){var e=!1;if(a.isUser)e=confirm(gettext("Are you sure you want to leave this thread?"));else{var t=gettext("Are you sure you want to remove %(user)s from this thread?");e=confirm(interpolate(t,{user:a.props.participant.username},!0))}e&&(a.isUser?(0,c.leave)(a.props.thread,a.props.participant):(0,c.remove)(a.props.thread,a.props.participant))},a.isUser=e.participant.id===e.user.id,a}return l(t,e),s(t,[{key:"render",value:function(){var e=this.props.user.acl.can_moderate_private_threads;return this.props.userIsOwner||this.isUser||e?u["default"].createElement("li",null,u["default"].createElement("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},this.isUser?gettext("Leave thread"):gettext("Remove"))):null}}]),t}(u["default"].Component);a["default"]=d},{"./actions":96,react:"react"}],101:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){return t[0].id===e.id}Object.defineProperty(a,"__esModule",{value:!0});var l=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e};a["default"]=function(e){return e.participants.length?i["default"].createElement("div",{className:"panel panel-default panel-participants"},i["default"].createElement("div",{className:"panel-body"},i["default"].createElement(f["default"],l({userIsOwner:o(e.user,e.participants)},e)),i["default"].createElement("div",{className:"row"},i["default"].createElement(c["default"],{thread:e.thread}),i["default"].createElement("div",{className:"col-xs-12 col-sm-9"},i["default"].createElement("p",null,m.getParticipantsCopy(e.participants)))))):null},a.getUserIsOwner=o;var s=e("react"),i=r(s),u=e("./add-participant"),c=r(u),d=e("./cards-list"),f=r(d),p=e("./utils"),m=n(p)},{"./add-participant":95,"./cards-list":98,"./utils":102,react:"react"}],102:[function(e,t,a){"use strict";function n(e){var t=e.length,a=ngettext("This thread has %(users)s participant.","This thread has %(users)s participants.",t);return interpolate(a,{users:t},!0)}Object.defineProperty(a,"__esModule",{value:!0}),a.getParticipantsCopy=n},{}],103:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0}),a.LABELS=a.STYLES=void 0;var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=e("../services/zxcvbn"),d=n(c),f=a.STYLES=["progress-bar-danger","progress-bar-warning","progress-bar-warning","progress-bar-primary","progress-bar-success"],p=a.LABELS=[gettext("Entered password is very weak."),gettext("Entered password is weak."),gettext("Entered password is average."),gettext("Entered password is strong."),gettext("Entered password is very strong.")],m=function(e){function t(e){r(this,t);var a=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a._score=0,a._password=null,a._inputs=[],a.state={loaded:!1},a}return l(t,e),s(t,[{key:"componentDidMount",value:function(){var e=this;d["default"].load().then(function(){e.setState({loaded:!0})})}},{key:"getScore",value:function(e,t){var a=this,n=!1;return e!==this._password&&(n=!0),t.length!==this._inputs.length?n=!0:t.map(function(e,t){e.trim()!==a._inputs[t]&&(n=!0)}),n&&(this._score=d["default"].scorePassword(e,t),this._password=e,this._inputs=t.map(function(e){return e.trim()})),this._score}},{key:"render",value:function(){if(!this.state.loaded)return null;var e=this.getScore(this.props.password,this.props.inputs);return u["default"].createElement("div",{className:"help-block password-strength"},u["default"].createElement("div",{className:"progress"},u["default"].createElement("div",{className:"progress-bar "+f[e],style:{width:20+20*e+"%"},role:"progress-bar","aria-valuenow":e,"aria-valuemin":"0","aria-valuemax":"4"},u["default"].createElement("span",{className:"sr-only"},p[e]))),u["default"].createElement("p",{className:"text-small"},p[e]))}}]),t}(u["default"].Component);a["default"]=m},{"../services/zxcvbn":378,react:"react"}],104:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(){for(var e="";12!=e.length;)e=Math.random().toString(36).replace(/[^a-zA-Z0-9]+/g,"").substr(1,12);return e}Object.defineProperty(a,"__esModule",{value:!0}),a.PollChoice=void 0;var i=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();a.generateRandomHash=s;var u=e("react"),c=n(u),d=function(e){function t(){var e,a,n,l;r(this,t);for(var i=arguments.length,u=Array(i),c=0;c<i;c++)u[c]=arguments[c];return a=n=o(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),n.onAdd=function(){var e=n.props.choices.slice();e.push({hash:s(),label:""}),n.props.setChoices(e)},n.onChange=function(e,t){var a=n.props.choices.map(function(a){return a.hash===e&&(a.label=t),a});n.props.setChoices(a)},n.onDelete=function(e){var t=n.props.choices.filter(function(t){return t.hash!==e});n.props.setChoices(t)},l=a,o(n,l)}return l(t,e),i(t,[{key:"render",value:function(){var e=this;return c["default"].createElement("div",{className:"poll-choices-control"},c["default"].createElement("ul",{className:"list-group"},this.props.choices.map(function(t){return c["default"].createElement(f,{canDelete:e.props.choices.length>2,choice:t,disabled:e.props.disabled,key:t.hash,onChange:e.onChange,onDelete:e.onDelete})})),c["default"].createElement("button",{className:"btn btn-default btn-sm",disabled:this.props.disabled,onClick:this.onAdd,type:"button"},gettext("Add choice")))}}]),t}(c["default"].Component);a["default"]=d;var f=a.PollChoice=function(e){function t(){var e,a,n,l;r(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=o(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onChange=function(e){n.props.onChange(n.props.choice.hash,e.target.value)},n.onDelete=function(){var e=confirm(gettext("Are you sure you want to delete this choice?"));e&&n.props.onDelete(n.props.choice.hash)},l=a,o(n,l)}return l(t,e),i(t,[{key:"render",value:function(){return c["default"].createElement("li",{className:"list-group-item"},c["default"].createElement("button",{className:"btn",disabled:!this.props.canDelete||this.props.disabled,onClick:this.onDelete,title:gettext("Delete this choice"),type:"button"},c["default"].createElement("span",{className:"material-icon"},"close")),c["default"].createElement("input",{disabled:this.props.disabled,maxLength:"255",placeholder:gettext("choice label"),type:"text",onChange:this.onChange,value:this.props.choice.label}))}}]),t}(c["default"].Component)},{react:"react"}],105:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return e.isEdit?null:d["default"].createElement("div",{className:"col-xs-12 col-sm-6"},d["default"].createElement(g["default"],{label:gettext("Make voting public"),helpText:gettext("Making voting public will allow everyone to access detailed list of votes, showing which users voted for which choices and at which times. This option can't be changed after poll's creation. Moderators may see voting details for all polls."),"for":"id_is_public"},d["default"].createElement(E["default"],{id:"id_is_public",disabled:e.disabled,iconOn:"visibility",iconOff:"visibility_off",labelOn:gettext("Votes are public"),labelOff:gettext("Votes are hidden"),onChange:e.bindInput("is_public"),value:e.value})))}Object.defineProperty(a,"__esModule",{value:!0});var u=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();a.PollPublicSwitch=i;var c=e("react"),d=r(c),f=e("./choices-control"),p=r(f),m=e("../../button"),h=r(m),b=e("../../form"),v=r(b),_=e("../../form-group"),g=r(_),y=e("../../yes-no-switch"),E=r(y),w=e("../../../reducers/poll"),O=n(w),k=e("../../../services/ajax"),N=r(k),x=e("../../../services/posting"),P=r(x),j=e("../../../services/snackbar"),C=r(j),S=e("../../../services/store"),M=r(S),T=function(e){function t(e){o(this,t);var a=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));a.setChoices=function(e){var t=Object.assign({},t,{choices:null});a.setState({choices:e,errors:t})},a.onCancel=function(){var e=confirm(gettext("Are you sure you want to discard poll?"));e&&P["default"].close()};var n=e.poll||{question:"",choices:[{hash:"choice-10000",label:""},{hash:"choice-20000",label:""}],length:0,allowed_choices:1,allow_revotes:0,is_public:0};return a.state={isLoading:!1,isEdit:!!n.question,question:n.question,choices:n.choices,length:n.length,allowed_choices:n.allowed_choices,allow_revotes:n.allow_revotes,is_public:n.is_public,validators:{question:[],choices:[],length:[],allowed_choices:[]},errors:{}},a}return s(t,e),u(t,[{key:"send",value:function(){var e={question:this.state.question,choices:this.state.choices,length:this.state.length,allowed_choices:this.state.allowed_choices,allow_revotes:this.state.allow_revotes,is_public:this.state.is_public};return this.state.isEdit?N["default"].put(this.props.poll.api.index,e):N["default"].post(this.props.thread.api.poll,e)}},{key:"handleSuccess",value:function(e){M["default"].dispatch(O.replace(e)),this.state.isEdit?C["default"].success(gettext("Poll has been edited.")):C["default"].success(gettext("Poll has been posted.")),P["default"].close()}},{key:"handleError",value:function(e){400===e.status?(e.non_field_errors&&(e.allowed_choices=e.non_field_errors),this.setState({errors:Object.assign({},e)}),C["default"].error(gettext("Form contains errors."))):C["default"].apiError(e)}},{key:"render",value:function(){return d["default"].createElement("div",{className:"poll-form"},d["default"].createElement("div",{className:"container"},d["default"].createElement("form",{onSubmit:this.handleSubmit},d["default"].createElement("div",{className:"panel panel-default panel-form"},d["default"].createElement("div",{className:"panel-body"},d["default"].createElement("fieldset",null,d["default"].createElement("legend",null,gettext("Question and choices")),d["default"].createElement(g["default"],{label:gettext("Poll question"),"for":"id_questions",validation:this.state.errors.question},d["default"].createElement("input",{className:"form-control",disabled:this.state.isLoading,id:"id_questions",onChange:this.bindInput("question"),type:"text",maxLength:"255",value:this.state.question})),d["default"].createElement(g["default"],{label:gettext("Available choices"),validation:this.state.errors.choices},d["default"].createElement(p["default"],{choices:this.state.choices,disabled:this.state.isLoading,setChoices:this.setChoices}))),d["default"].createElement("fieldset",null,d["default"].createElement("legend",null,gettext("Voting")),d["default"].createElement("div",{className:"row"},d["default"].createElement("div",{className:"col-xs-12 col-sm-6"},d["default"].createElement(g["default"],{label:gettext("Poll length"),helpText:gettext("Enter number of days for which voting in this poll should be possible or zero to run this poll indefinitely."),"for":"id_length",validation:this.state.errors.length},d["default"].createElement("input",{className:"form-control",disabled:this.state.isLoading,id:"id_length",onChange:this.bindInput("length"),type:"text",value:this.state.length}))),d["default"].createElement("div",{className:"col-xs-12 col-sm-6"},d["default"].createElement(g["default"],{label:gettext("Allowed choices"),"for":"id_allowed_choices",validation:this.state.errors.allowed_choices},d["default"].createElement("input",{className:"form-control",disabled:this.state.isLoading,id:"id_allowed_choices",onChange:this.bindInput("allowed_choices"),type:"text",maxLength:"255",value:this.state.allowed_choices})))),d["default"].createElement("div",{className:"row"},d["default"].createElement(i,{bindInput:this.bindInput,disabled:this.state.isLoading,isEdit:this.state.isEdit,value:this.state.is_public}),d["default"].createElement("div",{className:"col-xs-12 col-sm-6"},d["default"].createElement(g["default"],{label:gettext("Allow vote changes"),"for":"id_allow_revotes"},d["default"].createElement(E["default"],{id:"id_allow_revotes",disabled:this.state.isLoading,iconOn:"check",iconOff:"close",labelOn:gettext("Allow participants to change their vote"),labelOff:gettext("Don't allow participants to change their vote"),onChange:this.bindInput("allow_revotes"),value:this.state.allow_revotes})))))),d["default"].createElement("div",{className:"panel-footer text-right"},d["default"].createElement("button",{className:"btn btn-default",disabled:this.state.isLoading,onClick:this.onCancel,type:"button"},gettext("Cancel"))," ",d["default"].createElement(h["default"],{className:"btn-primary",loading:this.state.isLoading},this.state.isEdit?gettext("Save changes"):gettext("Post poll")))))))}}]),t}(v["default"]);a["default"]=T},{"../../../reducers/poll":352,"../../../services/ajax":365,"../../../services/posting":375,"../../../services/snackbar":376,"../../../services/store":377,"../../button":8,"../../form":56,"../../form-group":55,"../../yes-no-switch":300,"./choices-control":104,react:"react"}],106:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a.PollForm=a.Poll=void 0;var r=e("./poll"),o=n(r),l=e("./form"),s=n(l);a.Poll=o["default"],a.PollForm=s["default"]},{"./form":105,"./poll":108}],107:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){var t=interpolate((0,m["default"])(gettext("Posted by %(poster)s %(posted_on)s.")),{poster:o(e.poll),posted_on:l(e.poll)},!0);return f["default"].createElement("li",{className:"poll-info-creation",dangerouslySetInnerHTML:{
-__html:t}})}function o(e){return e.url.poster?interpolate(v,{url:(0,m["default"])(e.url.poster),user:(0,m["default"])(e.poster_name)},!0):interpolate(b,{user:(0,m["default"])(e.poster_name)},!0)}function l(e){return interpolate(h,{absolute:(0,m["default"])(e.posted_on.format("LLL")),relative:(0,m["default"])(e.posted_on.fromNow())},!0)}function s(e){if(!e.poll.length)return null;var t=interpolate((0,m["default"])(gettext("Voting ends %(ends_on)s.")),{ends_on:i(e.poll)},!0);return f["default"].createElement("li",{className:"poll-info-ends-on",dangerouslySetInnerHTML:{__html:t}})}function i(e){return interpolate(h,{absolute:(0,m["default"])(e.endsOn.format("LLL")),relative:(0,m["default"])(e.endsOn.fromNow())},!0)}function u(e){var t=ngettext("%(votes)s vote.","%(votes)s votes.",e.votes),a=interpolate(t,{votes:e.votes},!0);return f["default"].createElement("li",{className:"poll-info-votes"},a)}function c(e){return e.poll.is_public?f["default"].createElement("li",{className:"poll-info-public"},gettext("Votes are public.")):null}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return f["default"].createElement("ul",{className:"list-unstyled list-inline poll-details"},f["default"].createElement(u,{votes:e.poll.votes}),f["default"].createElement(s,{poll:e.poll}),f["default"].createElement(c,{poll:e.poll}),f["default"].createElement(r,{poll:e.poll}))},a.PollCreation=r,a.getPoster=o,a.getPostedOn=l,a.PollLength=s,a.getEndsOn=i,a.PollVotes=u,a.PollIsPublic=c;var d=e("react"),f=n(d),p=e("../../utils/escape-html"),m=n(p),h='<abbr title="%(absolute)s">%(relative)s</abbr>',b='<span class="item-title">%(user)s</span>',v='<a href="%(url)s" class="item-title">%(user)s</a>'},{"../../utils/escape-html":383,react:"react"}],108:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(e){return!!e.length&&(0,p["default"])().isAfter(e.endsOn)}Object.defineProperty(a,"__esModule",{value:!0});var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},u=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();a.getIsPollOver=s;var c=e("react"),d=n(c),f=e("moment"),p=n(f),m=e("./results"),h=n(m),b=e("./voting"),v=n(b),_=function(e){function t(e){r(this,t);var a=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));a.showResults=function(){a.setState({showResults:!0})},a.showVoting=function(){a.setState({showResults:!1})};var n=!0;return e.user.id&&!e.poll.hasSelectedChoices&&(n=!1),a.state={showResults:n},a}return l(t,e),u(t,[{key:"render",value:function(){if(!this.props.thread.poll)return null;var e=s(this.props.poll);return e||!this.props.poll.acl.can_vote||this.state.showResults?d["default"].createElement(h["default"],i({isPollOver:e,showVoting:this.showVoting},this.props)):d["default"].createElement(v["default"],i({showResults:this.showResults},this.props))}}]),t}(d["default"].Component);a["default"]=_},{"./results":110,"./voting":114,moment:"moment",react:"react"}],109:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){var t=0;return e.choice.votes&&e.poll.votes&&(t=Math.ceil(100*e.choice.votes/e.poll.votes)),u["default"].createElement("dl",{className:"dl-horizontal"},u["default"].createElement("dt",null,e.choice.label),u["default"].createElement("dd",null,u["default"].createElement("div",{className:"progress"},u["default"].createElement("div",{className:"progress-bar",role:"progressbar","aria-valuenow":t,"aria-valuemin":"0","aria-valuemax":"100",style:{width:t+"%"}},u["default"].createElement("span",{className:"sr-only"},l(e.votes,e.proc)))),u["default"].createElement("ul",{className:"list-unstyled list-inline poll-chart"},u["default"].createElement(o,{proc:t,votes:e.choice.votes}),u["default"].createElement(s,{selected:e.choice.selected}))))}function o(e){return u["default"].createElement("li",{className:"poll-chart-votes"},l(e.votes,e.proc))}function l(e,t){var a=ngettext("%(votes)s vote, %(proc)s% of total.","%(votes)s votes, %(proc)s% of total.",e);return interpolate(a,{votes:e,proc:t},!0)}function s(e){return e.selected?u["default"].createElement("li",{className:"poll-chart-selected"},u["default"].createElement("span",{className:"material-icon"},"check_box"),gettext("Your choice.")):null}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return u["default"].createElement("div",{className:"poll-choices-bars"},e.poll.choices.map(function(t){return u["default"].createElement(r,{choice:t,key:t.hash,poll:e.poll})}))},a.PollChoice=r,a.ChoiceVotes=o,a.getVotesLabel=l,a.UserChoice=s;var i=e("react"),u=n(i)},{react:"react"}],110:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return o["default"].createElement("div",{className:"panel panel-default panel-poll"},o["default"].createElement("div",{className:"panel-body"},o["default"].createElement("h2",null,e.poll.question),o["default"].createElement(d["default"],{poll:e.poll}),o["default"].createElement(s["default"],{poll:e.poll}),o["default"].createElement(u["default"],{isPollOver:e.isPollOver,poll:e.poll,showVoting:e.showVoting,thread:e.thread})))};var r=e("react"),o=n(r),l=e("./chart"),s=n(l),i=e("./options"),u=n(i),c=e("../info"),d=n(c)},{"../info":107,"./chart":109,"./options":112,react:"react"}],111:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(e){return e.isLoading?v["default"].createElement(O["default"],null):e.error?v["default"].createElement(E["default"],{icon:"error_outline",message:e.error}):v["default"].createElement(i,{data:e.data})}function i(e){return v["default"].createElement("div",{className:"modal-body modal-poll-votes"},v["default"].createElement("ul",{className:"list-unstyled votes-details"},e.data.map(function(e){return v["default"].createElement(u,m({key:e.hash},e))})))}function u(e){return v["default"].createElement("li",null,v["default"].createElement("h4",null,e.label),v["default"].createElement(c,{votes:e.votes}),v["default"].createElement(d,{voters:e.voters}),v["default"].createElement("hr",null))}function c(e){var t=ngettext("%(votes)s user has voted for this choice.","%(votes)s users have voted for this choice.",e.votes),a=interpolate(t,{votes:e.votes},!0);return v["default"].createElement("p",null,a)}function d(e){return e.voters.length?v["default"].createElement("ul",{className:"list-unstyled"},e.voters.map(function(e){return v["default"].createElement(f,m({key:e.username},e))})):null}function f(e){return e.url?v["default"].createElement("li",null,v["default"].createElement("a",{className:"item-title",href:e.url},e.username)," ",v["default"].createElement(p,{voted_on:e.voted_on})):v["default"].createElement("li",null,v["default"].createElement("strong",null,e.username)," ",v["default"].createElement(p,{voted_on:e.voted_on}))}function p(e){return v["default"].createElement("abbr",{className:"text-muted",title:e.voted_on.format("LLL")},e.voted_on.fromNow())}Object.defineProperty(a,"__esModule",{value:!0});var m=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},h=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();a.ModalBody=s,a.ChoicesList=i,a.ChoiceDetails=u,a.VotesCount=c,a.VotesList=d,a.Voter=f,a.VoteDate=p;var b=e("react"),v=n(b),_=e("moment"),g=n(_),y=e("../../modal-message"),E=n(y),w=e("../../modal-loader"),O=n(w),k=e("../../../services/ajax"),N=n(k),x=function(e){function t(e){r(this,t);var a=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.state={isLoading:!0,error:null,data:[]},a}return l(t,e),h(t,[{key:"componentDidMount",value:function(){var e=this;N["default"].get(this.props.poll.api.votes).then(function(t){var a=t.map(function(e){return Object.assign({},e,{voters:e.voters.map(function(e){return Object.assign({},e,{voted_on:(0,g["default"])(e.voted_on)})})})});e.setState({isLoading:!1,data:a})},function(t){e.setState({isLoading:!1,error:t.detail})})}},{key:"render",value:function(){return v["default"].createElement("div",{className:"modal-dialog"+(this.state.error?" modal-message":" modal-sm"),role:"document"},v["default"].createElement("div",{className:"modal-content"},v["default"].createElement("div",{className:"modal-header"},v["default"].createElement("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},v["default"].createElement("span",{"aria-hidden":"true"},"×")),v["default"].createElement("h4",{className:"modal-title"},gettext("Poll votes"))),v["default"].createElement(s,{data:this.state.data,error:this.state.error,isLoading:this.state.isLoading})))}}]),t}(v["default"].Component);a["default"]=x},{"../../../services/ajax":365,"../../modal-loader":61,"../../modal-message":62,moment:"moment",react:"react"}],112:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e,t,a){return a.is_public||t.can_delete||t.can_edit||t.can_see_votes||t.can_vote&&!e&&(!a.hasSelectedChoices||a.allow_revotes)}function u(e,t){var a="col-xs-6";return 1===e.length&&(a="col-xs-12"),3===e.length&&e[0]===t&&(a="col-xs-12"),a+" col-sm-3 col-md-2"}function c(e){var t=e.poll.acl.can_vote,a=!e.poll.hasSelectedChoices||e.poll.allow_revotes;return t&&a?p["default"].createElement("div",{className:u(e.controls,0)},p["default"].createElement("button",{className:"btn btn-default btn-block btn-sm",disabled:e.poll.isBusy,onClick:e.showVoting,type:"button"},gettext("Vote"))):null}Object.defineProperty(a,"__esModule",{value:!0}),a.Delete=a.Edit=a.SeeVotes=void 0;var d=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();a["default"]=function(e){var t=e.isPollOver,a=e.poll,n=e.showVoting,r=e.thread;if(!i(t,a.acl,a))return null;var o=[],l=a.acl.can_vote,s=!a.hasSelectedChoices||a.allow_revotes;return l&&s&&o.push(0),(a.is_public||a.acl.can_see_votes)&&o.push(1),a.acl.can_edit&&o.push(2),a.acl.can_delete&&o.push(3),p["default"].createElement("div",{className:"row poll-options"},p["default"].createElement(c,{controls:o,isPollOver:t,poll:a,showVoting:n}),p["default"].createElement(S,{controls:o,poll:a}),p["default"].createElement(M,{controls:o,poll:a,thread:r}),p["default"].createElement(T,{controls:o,poll:a}))},a.isVisible=i,a.getClassName=u,a.ChangeVote=c;var f=e("react"),p=r(f),m=e("./modal"),h=r(m),b=e("../../../reducers/poll"),v=n(b),_=e("../../../reducers/thread"),g=n(_),y=e("../../../services/ajax"),E=r(y),w=e("../../../services/modal"),O=r(w),k=e("../../../services/posting"),N=r(k),x=e("../../../services/snackbar"),P=r(x),j=e("../../../services/store"),C=r(j),S=a.SeeVotes=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){O["default"].show(p["default"].createElement(h["default"],{poll:n.props.poll}))},r=a,l(n,r)}return s(t,e),d(t,[{key:"render",value:function(){var e=this.props.poll.is_public||this.props.poll.acl.can_see_votes;return e?p["default"].createElement("div",{className:u(this.props.controls,1)},p["default"].createElement("button",{className:"btn btn-default btn-block btn-sm",disabled:this.props.poll.isBusy,onClick:this.onClick,type:"button"},gettext("See votes"))):null}}]),t}(p["default"].Component),M=a.Edit=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){N["default"].open({submit:n.props.poll.api.index,thread:n.props.thread,poll:n.props.poll,mode:"POLL"})},r=a,l(n,r)}return s(t,e),d(t,[{key:"render",value:function(){return this.props.poll.acl.can_edit?p["default"].createElement("div",{className:u(this.props.controls,2)},p["default"].createElement("button",{className:"btn btn-default btn-block btn-sm",disabled:this.props.poll.isBusy,onClick:this.onClick,type:"button"},gettext("Edit"))):null}}]),t}(p["default"].Component),T=a.Delete=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){var e=confirm(gettext("Are you sure you want to delete this poll? This action is not reversible."));return!!e&&(C["default"].dispatch(v.busy()),void E["default"]["delete"](n.props.poll.api.index).then(n.handleSuccess,n.handleError))},n.handleSuccess=function(e){P["default"].success("Poll has been deleted"),C["default"].dispatch(v.remove()),C["default"].dispatch(g.updateAcl(e))},n.handleError=function(e){P["default"].apiError(e),C["default"].dispatch(v.release())},r=a,l(n,r)}return s(t,e),d(t,[{key:"render",value:function(){return this.props.poll.acl.can_delete?p["default"].createElement("div",{className:u(this.props.controls,3)},p["default"].createElement("button",{className:"btn btn-default btn-block btn-sm",disabled:this.props.poll.isBusy,onClick:this.onClick,type:"button"},gettext("Delete"))):null}}]),t}(p["default"].Component)},{"../../../reducers/poll":352,"../../../reducers/thread":360,"../../../services/ajax":365,"../../../services/modal":371,"../../../services/posting":375,"../../../services/snackbar":376,"../../../services/store":377,"./modal":111,react:"react"}],113:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){var t=e.choicesLeft;if(0===t)return s["default"].createElement("li",{className:"poll-help-choices-left"},gettext("You can't select any more choices."));var a=ngettext("You can select %(choices)s more choice.","You can select %(choices)s more choices.",t),n=interpolate(a,{choices:t},!0);return s["default"].createElement("li",{className:"poll-help-choices-left"},n)}function o(e){return e.poll.allow_revotes?s["default"].createElement("li",{className:"poll-help-allow-revotes"},gettext("You can change your vote later.")):s["default"].createElement("li",{className:"poll-help-no-revotes"},gettext("Votes are final."))}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return s["default"].createElement("ul",{className:"list-unstyled list-inline poll-help"},s["default"].createElement(r,{choicesLeft:e.choicesLeft}),s["default"].createElement(o,{poll:e.poll}))},a.PollChoicesLeft=r,a.PollAllowRevote=o;var l=e("react"),s=n(l),i=e("../../../utils/escape-html");n(i)},{"../../../utils/escape-html":383,react:"react"}],114:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var i=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),u=e("react"),c=r(u),d=e("./help"),f=r(d),p=e("./select"),m=r(p),h=e("./utils"),b=e("../info"),v=r(b),_=e("../results/options"),g=e("../../button"),y=r(g),E=e("../../form"),w=r(E),O=e("../../../reducers/poll"),k=n(O),N=e("../../../services/ajax"),x=r(N),P=e("../../../services/snackbar"),j=r(P),C=e("../../../services/store"),S=r(C),M=function(e){function t(e){o(this,t);var a=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.toggleChoice=function(e){var t=(0,h.getChoiceFromHash)(a.state.choices,e),n=null;n=t.selected?a.deselectChoice(t,e):a.selectChoice(t,e),a.setState({choices:n,choicesLeft:(0,h.getChoicesLeft)(a.props.poll,n)})},a.selectChoice=function(e,t){var n=(0,h.getChoicesLeft)(a.props.poll,a.state.choices);if(!n)for(var r in a.state.choices.slice()){var o=a.state.choices[r];if(o.selected&&o.hash!=t){o.selected=!1;break}}return a.state.choices.map(function(e){return Object.assign({},e,{selected:e.hash==t||e.selected})})},a.deselectChoice=function(e,t){return a.state.choices.map(function(e){return Object.assign({},e,{selected:e.hash!=t&&e.selected})})},a.state={isLoading:!1,choices:e.poll.choices,choicesLeft:(0,h.getChoicesLeft)(e.poll,e.poll.choices)},a}return s(t,e),i(t,[{key:"clean",value:function(){return this.state.choicesLeft!==this.props.poll.allowed_choices||(j["default"].error(gettext("You need to select at least one choice")),!1)}},{key:"send",value:function(){var e=[];for(var t in this.state.choices.slice()){var a=this.state.choices[t];a.selected&&e.push(a.hash)}return x["default"].post(this.props.poll.api.votes,e)}},{key:"handleSuccess",value:function(e){S["default"].dispatch(k.replace(e)),j["default"].success(gettext("Your vote has been saved.")),this.props.showResults()}},{key:"handleError",value:function(e){400===e.status?j["default"].error(e.detail):j["default"].apiError(e)}},{key:"render",value:function(){var e=[];return this.props.poll.acl.can_vote&&e.push(0),(this.props.poll.is_public||this.props.poll.acl.can_see_votes)&&e.push(1),this.props.poll.acl.can_edit&&e.push(2),this.props.poll.acl.can_delete&&e.push(3),c["default"].createElement("div",{className:"panel panel-default panel-poll"},c["default"].createElement("form",{onSubmit:this.handleSubmit},c["default"].createElement("div",{className:"panel-body"},c["default"].createElement("h2",null,this.props.poll.question),c["default"].createElement(v["default"],{poll:this.props.poll}),c["default"].createElement(m["default"],{choices:this.state.choices,toggleChoice:this.toggleChoice}),c["default"].createElement(f["default"],{choicesLeft:this.state.choicesLeft,poll:this.props.poll})),c["default"].createElement("div",{className:"panel-footer"},c["default"].createElement("div",{className:"row"},c["default"].createElement("div",{className:(0,_.getClassName)(e,0)},c["default"].createElement(y["default"],{className:"btn-primary btn-block btn-sm",loading:this.state.isLoading},gettext("Save your vote"))),c["default"].createElement("div",{className:(0,_.getClassName)(e,1)},c["default"].createElement("button",{className:"btn btn-default btn-block btn-sm",disabled:this.state.isLoading,onClick:this.props.showResults,type:"button"},gettext("See results"))),c["default"].createElement(_.Edit,{controls:e,poll:this.props.poll,thread:this.props.thread}),c["default"].createElement(_.Delete,{controls:e,poll:this.props.poll})))))}}]),t}(w["default"]);a["default"]=M},{"../../../reducers/poll":352,"../../../services/ajax":365,"../../../services/snackbar":376,"../../../services/store":377,"../../button":8,"../../form":56,"../info":107,"../results/options":112,"./help":113,"./select":115,"./utils":116,react:"react"}],115:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0}),a.ChoiceSelect=void 0;var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();a["default"]=function(e){return u["default"].createElement("ul",{className:"list-unstyled poll-select-choices"},e.choices.map(function(t){return u["default"].createElement(c,{choice:t,key:t.hash,toggleChoice:e.toggleChoice})}))};var i=e("react"),u=n(i),c=a.ChoiceSelect=function(e){function t(){var e,a,n,l;r(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=o(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){n.props.toggleChoice(n.props.choice.hash)},l=a,o(n,l)}return l(t,e),s(t,[{key:"render",value:function(){return u["default"].createElement("li",{className:"poll-select-choice"},u["default"].createElement("button",{className:this.props.choice.selected?"btn btn-selected":"btn",onClick:this.onClick,type:"button"},u["default"].createElement("span",{className:"material-icon"},this.props.choice.selected?"check_box":"check_box_outline_blank"),u["default"].createElement("strong",null,this.props.choice.label)))}}]),t}(u["default"].Component)},{react:"react"}],116:[function(e,t,a){"use strict";function n(e,t){for(var a in e){var n=e[a];if(n.hash===t)return n}return null}function r(e,t){var a=[];for(var n in t){var r=t[n];r.selected&&a.push(r)}return e.allowed_choices-a.length}Object.defineProperty(a,"__esModule",{value:!0}),a.getChoiceFromHash=n,a.getChoicesLeft=r},{}],117:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){return"?"===e.item[0]?null:i["default"].createElement("li",{className:o(e.item)},l(e.item))}function o(e){var t="diff-item";return"-"===e[0]?t+=" diff-item-sub":"+"===e[0]&&(t+=" diff-item-add"),t}function l(e){return e.substr(2)}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return i["default"].createElement("div",{className:"modal-body post-changelog-diff"},i["default"].createElement("ul",{className:"list-unstyled"},e.diff.map(function(e,t){return i["default"].createElement(r,{item:e,key:t})})))},a.DiffItem=r,a.getItemClassName=o,a.cleanItem=l;var s=e("react"),i=n(s)},{react:"react"}],118:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=e("../button"),d=n(c),f=function(e){function t(){var e,a,n,l;r(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=o(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){n.props.revertEdit(n.props.edit.id)},l=a,o(n,l)}return l(t,e),s(t,[{key:"render",value:function(){return this.props.canRevert?u["default"].createElement("div",{className:"modal-footer visible-xs-block"},u["default"].createElement(d["default"],{className:"btn-default btn-sm btn-block",disabled:this.props.disabled,onClick:this.onClick,title:gettext("Revert post to state from before this edit.")},gettext("Revert"))):null}}]),t}(u["default"].Component);a["default"]=f},{"../button":8,react:"react"}],119:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return d["default"].createElement("div",{className:e.className||"modal-dialog",role:"document"},d["default"].createElement("div",{className:"modal-content"},d["default"].createElement("div",{className:"modal-header"},d["default"].createElement("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},d["default"].createElement("span",{"aria-hidden":"true"},"×")),d["default"].createElement("h4",{className:"modal-title"},gettext("Post edits history"))),e.children))}Object.defineProperty(a,"__esModule",{value:!0});var u=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();a.ModalDialog=i;var c=e("react"),d=r(c),f=e("./diff"),p=r(f),m=e("./footer"),h=r(m),b=e("./toolbar"),v=r(b),_=e("./utils"),g=e("../modal-message"),y=r(g),E=e("../modal-loader"),w=r(E),O=e("../../reducers/post"),k=n(O),N=e("../../services/ajax"),x=r(N),P=e("../../services/modal"),j=r(P),C=e("../../services/snackbar"),S=r(C),M=e("../../services/store"),T=r(M),L=function(e){function t(e){o(this,t);var a=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.goToEdit=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;a.setState({isBusy:!0});var t=a.props.post.api.edits;null!==e&&(t+="?edit="+e),x["default"].get(t).then(function(e){a.setState({isReady:!0,isBusy:!1,edit:(0,_.hydrateEdit)(e)})},function(e){a.setState({isReady:!0,isBusy:!1,error:e.detail})})},a.revertEdit=function(e){if(!a.state.isBusy){var t=confirm(gettext("Are you sure you with to revert this post to the state from before this edit?"));if(t){a.setState({isBusy:!0});var n=a.props.post.api.edits+"?edit="+e;x["default"].post(n).then(function(e){var t=k.hydrate(e);T["default"].dispatch(k.patch(e,t)),S["default"].success(gettext("Post has been reverted to previous state.")),j["default"].hide()},function(e){S["default"].apiError(e),a.setState({isBusy:!1})})}}},a.state={isReady:!1,isBusy:!0,canRevert:e.post.acl.can_edit,error:null,edit:null},a}return s(t,e),u(t,[{key:"componentDidMount",value:function(){this.goToEdit()}},{key:"render",value:function(){return this.state.error?d["default"].createElement(i,{className:"modal-dialog modal-message"},d["default"].createElement(y["default"],{message:this.state.error})):this.state.isReady?d["default"].createElement(i,null,d["default"].createElement(v["default"],{canRevert:this.state.canRevert,disabled:this.state.isBusy,edit:this.state.edit,goToEdit:this.goToEdit,revertEdit:this.revertEdit}),d["default"].createElement(p["default"],{diff:this.state.edit.diff}),d["default"].createElement(h["default"],{canRevert:this.state.canRevert,disabled:this.state.isBusy,edit:this.state.edit,revertEdit:this.revertEdit})):d["default"].createElement(i,null,d["default"].createElement(w["default"],null))}}]),t}(d["default"].Component);a["default"]=L},{"../../reducers/post":353,"../../services/ajax":365,"../../services/modal":371,"../../services/snackbar":376,"../../services/store":377,"../modal-loader":61,"../modal-message":62,"./diff":117,"./footer":118,"./toolbar":120,"./utils":121,react:"react"}],120:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(e){return m["default"].createElement(b["default"],{className:"btn-default btn-block btn-icon btn-sm",disabled:e.disabled||!e.edit.previous,onClick:e.onClick,title:gettext("See previous change")},m["default"].createElement("span",{className:"material-icon"},"chevron_left"))}function i(e){return m["default"].createElement(b["default"],{className:"btn-default btn-block btn-icon btn-sm",disabled:e.disabled||!e.edit.next,onClick:e.onClick,title:gettext("See previous change")},m["default"].createElement("span",{className:"material-icon"
+__html:t}})}function o(e){return e.url.poster?interpolate(v,{url:(0,m["default"])(e.url.poster),user:(0,m["default"])(e.poster_name)},!0):interpolate(b,{user:(0,m["default"])(e.poster_name)},!0)}function l(e){return interpolate(h,{absolute:(0,m["default"])(e.posted_on.format("LLL")),relative:(0,m["default"])(e.posted_on.fromNow())},!0)}function s(e){if(!e.poll.length)return null;var t=interpolate((0,m["default"])(gettext("Voting ends %(ends_on)s.")),{ends_on:i(e.poll)},!0);return f["default"].createElement("li",{className:"poll-info-ends-on",dangerouslySetInnerHTML:{__html:t}})}function i(e){return interpolate(h,{absolute:(0,m["default"])(e.endsOn.format("LLL")),relative:(0,m["default"])(e.endsOn.fromNow())},!0)}function u(e){var t=ngettext("%(votes)s vote.","%(votes)s votes.",e.votes),a=interpolate(t,{votes:e.votes},!0);return f["default"].createElement("li",{className:"poll-info-votes"},a)}function c(e){return e.poll.is_public?f["default"].createElement("li",{className:"poll-info-public"},gettext("Votes are public.")):null}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return f["default"].createElement("ul",{className:"list-unstyled list-inline poll-details"},f["default"].createElement(u,{votes:e.poll.votes}),f["default"].createElement(s,{poll:e.poll}),f["default"].createElement(c,{poll:e.poll}),f["default"].createElement(r,{poll:e.poll}))},a.PollCreation=r,a.getPoster=o,a.getPostedOn=l,a.PollLength=s,a.getEndsOn=i,a.PollVotes=u,a.PollIsPublic=c;var d=e("react"),f=n(d),p=e("../../utils/escape-html"),m=n(p),h='<abbr title="%(absolute)s">%(relative)s</abbr>',b='<span class="item-title">%(user)s</span>',v='<a href="%(url)s" class="item-title">%(user)s</a>'},{"../../utils/escape-html":383,react:"react"}],108:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(e){return!!e.length&&(0,p["default"])().isAfter(e.endsOn)}Object.defineProperty(a,"__esModule",{value:!0});var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},u=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();a.getIsPollOver=s;var c=e("react"),d=n(c),f=e("moment"),p=n(f),m=e("./results"),h=n(m),b=e("./voting"),v=n(b),_=function(e){function t(e){r(this,t);var a=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));a.showResults=function(){a.setState({showResults:!0})},a.showVoting=function(){a.setState({showResults:!1})};var n=!0;return e.user.id&&!e.poll.hasSelectedChoices&&(n=!1),a.state={showResults:n},a}return l(t,e),u(t,[{key:"render",value:function(){if(!this.props.thread.poll)return null;var e=s(this.props.poll);return e||!this.props.poll.acl.can_vote||this.state.showResults?d["default"].createElement(h["default"],i({isPollOver:e,showVoting:this.showVoting},this.props)):d["default"].createElement(v["default"],i({showResults:this.showResults},this.props))}}]),t}(d["default"].Component);a["default"]=_},{"./results":110,"./voting":114,moment:"moment",react:"react"}],109:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){var t=0;return e.choice.votes&&e.poll.votes&&(t=Math.ceil(100*e.choice.votes/e.poll.votes)),u["default"].createElement("dl",{className:"dl-horizontal"},u["default"].createElement("dt",null,e.choice.label),u["default"].createElement("dd",null,u["default"].createElement("div",{className:"progress"},u["default"].createElement("div",{className:"progress-bar",role:"progressbar","aria-valuenow":t,"aria-valuemin":"0","aria-valuemax":"100",style:{width:t+"%"}},u["default"].createElement("span",{className:"sr-only"},l(e.votes,e.proc)))),u["default"].createElement("ul",{className:"list-unstyled list-inline poll-chart"},u["default"].createElement(o,{proc:t,votes:e.choice.votes}),u["default"].createElement(s,{selected:e.choice.selected}))))}function o(e){return u["default"].createElement("li",{className:"poll-chart-votes"},l(e.votes,e.proc))}function l(e,t){var a=ngettext("%(votes)s vote, %(proc)s% of total.","%(votes)s votes, %(proc)s% of total.",e);return interpolate(a,{votes:e,proc:t},!0)}function s(e){return e.selected?u["default"].createElement("li",{className:"poll-chart-selected"},u["default"].createElement("span",{className:"material-icon"},"check_box"),gettext("Your choice.")):null}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return u["default"].createElement("div",{className:"poll-choices-bars"},e.poll.choices.map(function(t){return u["default"].createElement(r,{choice:t,key:t.hash,poll:e.poll})}))},a.PollChoice=r,a.ChoiceVotes=o,a.getVotesLabel=l,a.UserChoice=s;var i=e("react"),u=n(i)},{react:"react"}],110:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return o["default"].createElement("div",{className:"panel panel-default panel-poll"},o["default"].createElement("div",{className:"panel-body"},o["default"].createElement("h2",null,e.poll.question),o["default"].createElement(d["default"],{poll:e.poll}),o["default"].createElement(s["default"],{poll:e.poll}),o["default"].createElement(u["default"],{isPollOver:e.isPollOver,poll:e.poll,showVoting:e.showVoting,thread:e.thread})))};var r=e("react"),o=n(r),l=e("./chart"),s=n(l),i=e("./options"),u=n(i),c=e("../info"),d=n(c)},{"../info":107,"./chart":109,"./options":112,react:"react"}],111:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(e){return e.isLoading?v["default"].createElement(O["default"],null):e.error?v["default"].createElement(E["default"],{icon:"error_outline",message:e.error}):v["default"].createElement(i,{data:e.data})}function i(e){return v["default"].createElement("div",{className:"modal-body modal-poll-votes"},v["default"].createElement("ul",{className:"list-unstyled votes-details"},e.data.map(function(e){return v["default"].createElement(u,m({key:e.hash},e))})))}function u(e){return v["default"].createElement("li",null,v["default"].createElement("h4",null,e.label),v["default"].createElement(c,{votes:e.votes}),v["default"].createElement(d,{voters:e.voters}),v["default"].createElement("hr",null))}function c(e){var t=ngettext("%(votes)s user has voted for this choice.","%(votes)s users have voted for this choice.",e.votes),a=interpolate(t,{votes:e.votes},!0);return v["default"].createElement("p",null,a)}function d(e){return e.voters.length?v["default"].createElement("ul",{className:"list-unstyled"},e.voters.map(function(e){return v["default"].createElement(f,m({key:e.username},e))})):null}function f(e){return e.url?v["default"].createElement("li",null,v["default"].createElement("a",{className:"item-title",href:e.url},e.username)," ",v["default"].createElement(p,{voted_on:e.voted_on})):v["default"].createElement("li",null,v["default"].createElement("strong",null,e.username)," ",v["default"].createElement(p,{voted_on:e.voted_on}))}function p(e){return v["default"].createElement("abbr",{className:"text-muted",title:e.voted_on.format("LLL")},e.voted_on.fromNow())}Object.defineProperty(a,"__esModule",{value:!0});var m=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},h=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();a.ModalBody=s,a.ChoicesList=i,a.ChoiceDetails=u,a.VotesCount=c,a.VotesList=d,a.Voter=f,a.VoteDate=p;var b=e("react"),v=n(b),_=e("moment"),g=n(_),y=e("../../modal-message"),E=n(y),w=e("../../modal-loader"),O=n(w),k=e("../../../services/ajax"),N=n(k),x=function(e){function t(e){r(this,t);var a=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.state={isLoading:!0,error:null,data:[]},a}return l(t,e),h(t,[{key:"componentDidMount",value:function(){var e=this;N["default"].get(this.props.poll.api.votes).then(function(t){var a=t.map(function(e){return Object.assign({},e,{voters:e.voters.map(function(e){return Object.assign({},e,{voted_on:(0,g["default"])(e.voted_on)})})})});e.setState({isLoading:!1,data:a})},function(t){e.setState({isLoading:!1,error:t.detail})})}},{key:"render",value:function(){return v["default"].createElement("div",{className:"modal-dialog"+(this.state.error?" modal-message":" modal-sm"),role:"document"},v["default"].createElement("div",{className:"modal-content"},v["default"].createElement("div",{className:"modal-header"},v["default"].createElement("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},v["default"].createElement("span",{"aria-hidden":"true"},"×")),v["default"].createElement("h4",{className:"modal-title"},gettext("Poll votes"))),v["default"].createElement(s,{data:this.state.data,error:this.state.error,isLoading:this.state.isLoading})))}}]),t}(v["default"].Component);a["default"]=x},{"../../../services/ajax":365,"../../modal-loader":61,"../../modal-message":62,moment:"moment",react:"react"}],112:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e,t,a){return a.is_public||t.can_delete||t.can_edit||t.can_see_votes||t.can_vote&&!e&&(!a.hasSelectedChoices||a.allow_revotes)}function u(e,t){var a="col-xs-6";return 1===e.length&&(a="col-xs-12"),3===e.length&&e[0]===t&&(a="col-xs-12"),a+" col-sm-3 col-md-2"}function c(e){var t=e.poll.acl.can_vote,a=!e.poll.hasSelectedChoices||e.poll.allow_revotes;return t&&a?p["default"].createElement("div",{className:u(e.controls,0)},p["default"].createElement("button",{className:"btn btn-default btn-block btn-sm",disabled:e.poll.isBusy,onClick:e.showVoting,type:"button"},gettext("Vote"))):null}Object.defineProperty(a,"__esModule",{value:!0}),a.Delete=a.Edit=a.SeeVotes=void 0;var d=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();a["default"]=function(e){var t=e.isPollOver,a=e.poll,n=e.showVoting,r=e.thread;if(!i(t,a.acl,a))return null;var o=[],l=a.acl.can_vote,s=!a.hasSelectedChoices||a.allow_revotes;return l&&s&&o.push(0),(a.is_public||a.acl.can_see_votes)&&o.push(1),a.acl.can_edit&&o.push(2),a.acl.can_delete&&o.push(3),p["default"].createElement("div",{className:"row poll-options"},p["default"].createElement(c,{controls:o,isPollOver:t,poll:a,showVoting:n}),p["default"].createElement(S,{controls:o,poll:a}),p["default"].createElement(M,{controls:o,poll:a,thread:r}),p["default"].createElement(T,{controls:o,poll:a}))},a.isVisible=i,a.getClassName=u,a.ChangeVote=c;var f=e("react"),p=r(f),m=e("./modal"),h=r(m),b=e("../../../reducers/poll"),v=n(b),_=e("../../../reducers/thread"),g=n(_),y=e("../../../services/ajax"),E=r(y),w=e("../../../services/modal"),O=r(w),k=e("../../../services/posting"),N=r(k),x=e("../../../services/snackbar"),P=r(x),j=e("../../../services/store"),C=r(j),S=a.SeeVotes=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){O["default"].show(p["default"].createElement(h["default"],{poll:n.props.poll}))},r=a,l(n,r)}return s(t,e),d(t,[{key:"render",value:function(){var e=this.props.poll.is_public||this.props.poll.acl.can_see_votes;return e?p["default"].createElement("div",{className:u(this.props.controls,1)},p["default"].createElement("button",{className:"btn btn-default btn-block btn-sm",disabled:this.props.poll.isBusy,onClick:this.onClick,type:"button"},gettext("See votes"))):null}}]),t}(p["default"].Component),M=a.Edit=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){N["default"].open({submit:n.props.poll.api.index,thread:n.props.thread,poll:n.props.poll,mode:"POLL"})},r=a,l(n,r)}return s(t,e),d(t,[{key:"render",value:function(){return this.props.poll.acl.can_edit?p["default"].createElement("div",{className:u(this.props.controls,2)},p["default"].createElement("button",{className:"btn btn-default btn-block btn-sm",disabled:this.props.poll.isBusy,onClick:this.onClick,type:"button"},gettext("Edit"))):null}}]),t}(p["default"].Component),T=a.Delete=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){var e=confirm(gettext("Are you sure you want to delete this poll? This action is not reversible."));return!!e&&(C["default"].dispatch(v.busy()),void E["default"]["delete"](n.props.poll.api.index).then(n.handleSuccess,n.handleError))},n.handleSuccess=function(e){P["default"].success("Poll has been deleted"),C["default"].dispatch(v.remove()),C["default"].dispatch(g.updateAcl(e))},n.handleError=function(e){P["default"].apiError(e),C["default"].dispatch(v.release())},r=a,l(n,r)}return s(t,e),d(t,[{key:"render",value:function(){return this.props.poll.acl.can_delete?p["default"].createElement("div",{className:u(this.props.controls,3)},p["default"].createElement("button",{className:"btn btn-default btn-block btn-sm",disabled:this.props.poll.isBusy,onClick:this.onClick,type:"button"},gettext("Delete"))):null}}]),t}(p["default"].Component)},{"../../../reducers/poll":352,"../../../reducers/thread":360,"../../../services/ajax":365,"../../../services/modal":371,"../../../services/posting":375,"../../../services/snackbar":376,"../../../services/store":377,"./modal":111,react:"react"}],113:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){var t=e.choicesLeft;if(0===t)return s["default"].createElement("li",{className:"poll-help-choices-left"},gettext("You can't select any more choices."));var a=ngettext("You can select %(choices)s more choice.","You can select %(choices)s more choices.",t),n=interpolate(a,{choices:t},!0);return s["default"].createElement("li",{className:"poll-help-choices-left"},n)}function o(e){return e.poll.allow_revotes?s["default"].createElement("li",{className:"poll-help-allow-revotes"},gettext("You can change your vote later.")):s["default"].createElement("li",{className:"poll-help-no-revotes"},gettext("Votes are final."))}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return s["default"].createElement("ul",{className:"list-unstyled list-inline poll-help"},s["default"].createElement(r,{choicesLeft:e.choicesLeft}),s["default"].createElement(o,{poll:e.poll}))},a.PollChoicesLeft=r,a.PollAllowRevote=o;var l=e("react"),s=n(l),i=e("../../../utils/escape-html");n(i)},{"../../../utils/escape-html":383,react:"react"}],114:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var i=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),u=e("react"),c=r(u),d=e("./help"),f=r(d),p=e("./select"),m=r(p),h=e("./utils"),b=e("../info"),v=r(b),_=e("../results/options"),g=e("../../button"),y=r(g),E=e("../../form"),w=r(E),O=e("../../../reducers/poll"),k=n(O),N=e("../../../services/ajax"),x=r(N),P=e("../../../services/snackbar"),j=r(P),C=e("../../../services/store"),S=r(C),M=function(e){function t(e){o(this,t);var a=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.toggleChoice=function(e){var t=(0,h.getChoiceFromHash)(a.state.choices,e),n=null;n=t.selected?a.deselectChoice(t,e):a.selectChoice(t,e),a.setState({choices:n,choicesLeft:(0,h.getChoicesLeft)(a.props.poll,n)})},a.selectChoice=function(e,t){var n=(0,h.getChoicesLeft)(a.props.poll,a.state.choices);if(!n)for(var r in a.state.choices.slice()){var o=a.state.choices[r];if(o.selected&&o.hash!=t){o.selected=!1;break}}return a.state.choices.map(function(e){return Object.assign({},e,{selected:e.hash==t||e.selected})})},a.deselectChoice=function(e,t){return a.state.choices.map(function(e){return Object.assign({},e,{selected:e.hash!=t&&e.selected})})},a.state={isLoading:!1,choices:e.poll.choices,choicesLeft:(0,h.getChoicesLeft)(e.poll,e.poll.choices)},a}return s(t,e),i(t,[{key:"clean",value:function(){return this.state.choicesLeft!==this.props.poll.allowed_choices||(j["default"].error(gettext("You need to select at least one choice")),!1)}},{key:"send",value:function(){var e=[];for(var t in this.state.choices.slice()){var a=this.state.choices[t];a.selected&&e.push(a.hash)}return x["default"].post(this.props.poll.api.votes,e)}},{key:"handleSuccess",value:function(e){S["default"].dispatch(k.replace(e)),j["default"].success(gettext("Your vote has been saved.")),this.props.showResults()}},{key:"handleError",value:function(e){400===e.status?j["default"].error(e.detail):j["default"].apiError(e)}},{key:"render",value:function(){var e=[];return this.props.poll.acl.can_vote&&e.push(0),(this.props.poll.is_public||this.props.poll.acl.can_see_votes)&&e.push(1),this.props.poll.acl.can_edit&&e.push(2),this.props.poll.acl.can_delete&&e.push(3),c["default"].createElement("div",{className:"panel panel-default panel-poll"},c["default"].createElement("form",{onSubmit:this.handleSubmit},c["default"].createElement("div",{className:"panel-body"},c["default"].createElement("h2",null,this.props.poll.question),c["default"].createElement(v["default"],{poll:this.props.poll}),c["default"].createElement(m["default"],{choices:this.state.choices,toggleChoice:this.toggleChoice}),c["default"].createElement(f["default"],{choicesLeft:this.state.choicesLeft,poll:this.props.poll})),c["default"].createElement("div",{className:"panel-footer"},c["default"].createElement("div",{className:"row"},c["default"].createElement("div",{className:(0,_.getClassName)(e,0)},c["default"].createElement(y["default"],{className:"btn-primary btn-block btn-sm",loading:this.state.isLoading},gettext("Save your vote"))),c["default"].createElement("div",{className:(0,_.getClassName)(e,1)},c["default"].createElement("button",{className:"btn btn-default btn-block btn-sm",disabled:this.state.isLoading,onClick:this.props.showResults,type:"button"},gettext("See results"))),c["default"].createElement(_.Edit,{controls:e,poll:this.props.poll,thread:this.props.thread}),c["default"].createElement(_.Delete,{controls:e,poll:this.props.poll})))))}}]),t}(w["default"]);a["default"]=M},{"../../../reducers/poll":352,"../../../services/ajax":365,"../../../services/snackbar":376,"../../../services/store":377,"../../button":8,"../../form":56,"../info":107,"../results/options":112,"./help":113,"./select":115,"./utils":116,react:"react"}],115:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0}),a.ChoiceSelect=void 0;var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();a["default"]=function(e){return u["default"].createElement("ul",{className:"list-unstyled poll-select-choices"},e.choices.map(function(t){return u["default"].createElement(c,{choice:t,key:t.hash,toggleChoice:e.toggleChoice})}))};var i=e("react"),u=n(i),c=a.ChoiceSelect=function(e){function t(){var e,a,n,l;r(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=o(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){n.props.toggleChoice(n.props.choice.hash)},l=a,o(n,l)}return l(t,e),s(t,[{key:"render",value:function(){return u["default"].createElement("li",{className:"poll-select-choice"},u["default"].createElement("button",{className:this.props.choice.selected?"btn btn-selected":"btn",onClick:this.onClick,type:"button"},u["default"].createElement("span",{className:"material-icon"},this.props.choice.selected?"check_box":"check_box_outline_blank"),u["default"].createElement("strong",null,this.props.choice.label)))}}]),t}(u["default"].Component)},{react:"react"}],116:[function(e,t,a){"use strict";function n(e,t){for(var a in e){var n=e[a];if(n.hash===t)return n}return null}function r(e,t){var a=[];for(var n in t){var r=t[n];r.selected&&a.push(r)}return e.allowed_choices-a.length}Object.defineProperty(a,"__esModule",{value:!0}),a.getChoiceFromHash=n,a.getChoicesLeft=r},{}],117:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){return"?"===e.item[0]?null:i["default"].createElement("li",{className:o(e.item)},l(e.item))}function o(e){var t="diff-item";return"-"===e[0]?t+=" diff-item-sub":"+"===e[0]&&(t+=" diff-item-add"),t}function l(e){return e.substr(2)}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return i["default"].createElement("div",{className:"modal-body post-changelog-diff"},i["default"].createElement("ul",{className:"list-unstyled"},e.diff.map(function(e,t){return i["default"].createElement(r,{item:e,key:t})})))},a.DiffItem=r,a.getItemClassName=o,a.cleanItem=l;var s=e("react"),i=n(s)},{react:"react"}],118:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var s=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),i=e("react"),u=n(i),c=e("../button"),d=n(c),f=function(e){function t(){var e,a,n,l;r(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=o(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){n.props.revertEdit(n.props.edit.id)},l=a,o(n,l)}return l(t,e),s(t,[{key:"render",value:function(){return this.props.canRevert?u["default"].createElement("div",{className:"modal-footer visible-xs-block"},u["default"].createElement(d["default"],{className:"btn-default btn-sm btn-block",disabled:this.props.disabled,onClick:this.onClick,title:gettext("Revert post to state from before this edit.")},gettext("Revert"))):null}}]),t}(u["default"].Component);a["default"]=f},{"../button":8,react:"react"}],119:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return d["default"].createElement("div",{className:e.className||"modal-dialog",role:"document"},d["default"].createElement("div",{className:"modal-content"},d["default"].createElement("div",{className:"modal-header"},d["default"].createElement("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},d["default"].createElement("span",{"aria-hidden":"true"},"×")),d["default"].createElement("h4",{className:"modal-title"},gettext("Post edits history"))),e.children))}Object.defineProperty(a,"__esModule",{value:!0});var u=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();a.ModalDialog=i;var c=e("react"),d=r(c),f=e("./diff"),p=r(f),m=e("./footer"),h=r(m),b=e("./toolbar"),v=r(b),_=e("./utils"),g=e("../modal-message"),y=r(g),E=e("../modal-loader"),w=r(E),O=e("../../reducers/post"),k=n(O),N=e("../../services/ajax"),x=r(N),P=e("../../services/modal"),j=r(P),C=e("../../services/snackbar"),S=r(C),M=e("../../services/store"),T=r(M),L=function(e){function t(e){o(this,t);var a=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.goToEdit=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;a.setState({isBusy:!0});var t=a.props.post.api.edits;null!==e&&(t+="?edit="+e),x["default"].get(t).then(function(e){a.setState({isReady:!0,isBusy:!1,edit:(0,_.hydrateEdit)(e)})},function(e){a.setState({isReady:!0,isBusy:!1,error:e.detail})})},a.revertEdit=function(e){if(!a.state.isBusy){var t=confirm(gettext("Are you sure you with to revert this post to the state from before this edit?"));if(t){a.setState({isBusy:!0});var n=a.props.post.api.edits+"?edit="+e;x["default"].post(n).then(function(e){var t=k.hydrate(e);T["default"].dispatch(k.patch(e,t)),S["default"].success(gettext("Post has been reverted to previous state.")),j["default"].hide()},function(e){S["default"].apiError(e),a.setState({isBusy:!1})})}}},a.state={isReady:!1,isBusy:!0,canRevert:e.post.acl.can_edit,error:null,edit:null},a}return s(t,e),u(t,[{key:"componentDidMount",value:function(){this.goToEdit()}},{key:"render",value:function(){return this.state.error?d["default"].createElement(i,{className:"modal-dialog modal-message"},d["default"].createElement(y["default"],{message:this.state.error})):this.state.isReady?d["default"].createElement(i,null,d["default"].createElement(v["default"],{canRevert:this.state.canRevert,disabled:this.state.isBusy,edit:this.state.edit,goToEdit:this.goToEdit,revertEdit:this.revertEdit}),d["default"].createElement(p["default"],{diff:this.state.edit.diff}),d["default"].createElement(h["default"],{canRevert:this.state.canRevert,disabled:this.state.isBusy,edit:this.state.edit,revertEdit:this.revertEdit})):d["default"].createElement(i,null,d["default"].createElement(w["default"],null))}}]),t}(d["default"].Component);a["default"]=L},{"../../reducers/post":353,"../../services/ajax":365,"../../services/modal":371,"../../services/snackbar":376,"../../services/store":377,"../modal-loader":61,"../modal-message":62,"./diff":117,"./footer":118,"./toolbar":120,"./utils":121,react:"react"}],120:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(e){return m["default"].createElement(b["default"],{className:"btn-default btn-block btn-icon btn-sm",disabled:e.disabled||!e.edit.previous,onClick:e.onClick,title:gettext("See previous change")},m["default"].createElement("span",{className:"material-icon"},"chevron_left"))}function i(e){return m["default"].createElement(b["default"],{className:"btn-default btn-block btn-icon btn-sm",disabled:e.disabled||!e.edit.next,onClick:e.onClick,title:gettext("See next change")},m["default"].createElement("span",{className:"material-icon"
 },"chevron_right"))}function u(e){return m["default"].createElement(b["default"],{className:"btn-default btn-block btn-icon btn-sm",disabled:e.disabled||!e.edit.next,onClick:e.onClick,title:gettext("See previous change")},m["default"].createElement("span",{className:"material-icon"},"last_page"))}function c(e){return e.canRevert?m["default"].createElement("div",{className:"col-sm-3 hidden-xs"},m["default"].createElement(b["default"],{className:"btn-default btn-sm btn-block",disabled:e.disabled,onClick:e.onClick,title:gettext("Revert post to state from before this edit.")},gettext("Revert"))):null}function d(e){var t=null;t=e.edit.url.editor?interpolate(E,{url:(0,_["default"])(e.edit.url.editor),user:(0,_["default"])(e.edit.editor_name)},!0):interpolate(y,{user:(0,_["default"])(e.edit.editor_name)},!0);var a=interpolate(g,{absolute:(0,_["default"])(e.edit.edited_on.format("LLL")),relative:(0,_["default"])(e.edit.edited_on.fromNow())},!0),n=interpolate((0,_["default"])(gettext("By %(edited_by)s %(edited_on)s.")),{edited_by:t,edited_on:a},!0);return m["default"].createElement("p",{dangerouslySetInnerHTML:{__html:n}})}Object.defineProperty(a,"__esModule",{value:!0});var f=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();a.GoBackBtn=s,a.GoForwardBtn=i,a.GoLastBtn=u,a.RevertBtn=c,a.Label=d;var p=e("react"),m=n(p),h=e("../button"),b=n(h),v=e("../../utils/escape-html"),_=n(v),g='<abbr title="%(absolute)s">%(relative)s</abbr>',y='<span class="item-title">%(user)s</span>',E='<a href="%(url)s" class="item-title">%(user)s</a>',w=function(e){function t(){var e,a,n,l;r(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=o(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.goLast=function(){n.props.goToEdit()},n.goForward=function(){n.props.goToEdit(n.props.edit.next)},n.goBack=function(){n.props.goToEdit(n.props.edit.previous)},n.revertEdit=function(){n.props.revertEdit(n.props.edit.id)},l=a,o(n,l)}return l(t,e),f(t,[{key:"render",value:function(){return m["default"].createElement("div",{className:"modal-toolbar post-changelog-toolbar"},m["default"].createElement("div",{className:"row"},m["default"].createElement("div",{className:"col-xs-12 col-sm-4"},m["default"].createElement("div",{className:"row"},m["default"].createElement("div",{className:"col-xs-4"},m["default"].createElement(s,{disabled:this.props.disabled,edit:this.props.edit,onClick:this.goBack})),m["default"].createElement("div",{className:"col-xs-4"},m["default"].createElement(i,{disabled:this.props.disabled,edit:this.props.edit,onClick:this.goForward})),m["default"].createElement("div",{className:"col-xs-4"},m["default"].createElement(u,{disabled:this.props.disabled,edit:this.props.edit,onClick:this.goLast})))),m["default"].createElement("div",{className:"col-xs-12 col-sm-5 xs-margin-top-half post-change-label"},m["default"].createElement(d,{edit:this.props.edit})),m["default"].createElement(c,{canRevert:this.props.canRevert,disabled:this.props.disabled,onClick:this.revertEdit})))}}]),t}(m["default"].Component);a["default"]=w},{"../../utils/escape-html":383,"../button":8,react:"react"}],121:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){return Object.assign({},e,{edited_on:(0,l["default"])(e.edited_on)})}Object.defineProperty(a,"__esModule",{value:!0}),a.hydrateEdit=r;var o=e("moment"),l=n(o)},{moment:"moment"}],122:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.isReady,a=e.posts,n=e.poster;return t?o["default"].createElement("ul",{className:"posts-list post-feed ui-ready"},a.map(function(e){return o["default"].createElement(s["default"],{key:e.id,post:e,poster:n})})):o["default"].createElement(u["default"],null)};var r=e("react"),o=n(r),l=e("./post"),s=n(l),i=e("./preview"),u=n(i)},{"./post":125,"./preview":131,react:"react"}],123:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){return s["default"].createElement("div",{className:"post-body"},s["default"].createElement(u["default"],{markup:e.post.content}))}function o(e){return s["default"].createElement("div",{className:"post-body post-body-invalid"},s["default"].createElement("p",{className:"lead"},gettext("This post's contents cannot be displayed.")),s["default"].createElement("p",{className:"text-muted"},gettext("This error is caused by invalid post content manipulation.")))}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return e.post.content?s["default"].createElement(r,e):s["default"].createElement(o,e)},a.Default=r,a.Invalid=o;var l=e("react"),s=n(l),i=e("../../misago-markup"),u=n(i),c=e("../../../utils/escape-html");n(c)},{"../../../utils/escape-html":383,"../../misago-markup":60,react:"react"}],124:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.post,a=t.category,n=t.thread,r=interpolate(gettext("posted %(posted_on)s"),{posted_on:t.posted_on.format("LL, LT")},!0);return o["default"].createElement("div",{className:"post-heading"},o["default"].createElement("a",{className:"btn btn-link item-title",href:n.url},n.title),o["default"].createElement("a",{className:"btn btn-link post-category",href:a.url.index},a.name),o["default"].createElement("a",{href:t.url.index,className:"btn btn-link posted-on",title:r},t.posted_on.fromNow()))};var r=e("react"),o=n(r)},{react:"react"}],125:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.post,a=e.poster,n=a||t.poster,r="post";return n&&n.rank.css_class&&(r+=" post-"+n.rank.css_class),o["default"].createElement("li",{className:r,id:"post-"+t.id},o["default"].createElement("div",{className:"panel panel-default panel-post"},o["default"].createElement("div",{className:"panel-body"},o["default"].createElement(d["default"],{post:t,poster:n}),o["default"].createElement(u["default"],{post:t}),o["default"].createElement(s["default"],{post:t}))))};var r=e("react"),o=n(r),l=e("./body"),s=n(l),i=e("./header"),u=n(i),c=e("./post-side"),d=n(c)},{"./body":123,"./header":124,"./post-side":128,react:"react"}],126:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.post;return o["default"].createElement("div",{className:"post-side post-side-anonymous"},o["default"].createElement(u["default"],{post:t}),o["default"].createElement("div",{className:"media"},o["default"].createElement("div",{className:"media-left"},o["default"].createElement("span",null,o["default"].createElement(s["default"],{className:"poster-avatar",size:50}))),o["default"].createElement("div",{className:"media-body"},o["default"].createElement("div",{className:"media-heading"},o["default"].createElement("span",{className:"item-title"},t.poster_name)),o["default"].createElement("span",{className:"user-title user-title-anonymous"},gettext("Removed user")))))};var r=e("react"),o=n(r),l=e("../../../avatar"),s=n(l),i=e("./button"),u=n(i)},{"../../../avatar":6,"./button":127,react:"react"}],127:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.post;return o["default"].createElement("a",{className:"btn btn-default btn-icon pull-right",href:t.url.index},o["default"].createElement("span",{className:"btn-text-left hidden-xs"},gettext("See post")),o["default"].createElement("span",{className:"material-icon"},"chevron_right"))};var r=e("react"),o=n(r)},{react:"react"}],128:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.post,a=e.poster;return a.id?o["default"].createElement(u["default"],{post:t,poster:a}):o["default"].createElement(s["default"],{post:t})};var r=e("react"),o=n(r),l=e("./anonymous"),s=n(l),i=e("./registered"),u=n(i)},{"./anonymous":126,"./registered":129,react:"react"}],129:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.post,a=e.poster;return o["default"].createElement("div",{className:"post-side post-side-registered"},o["default"].createElement(u["default"],{post:t}),o["default"].createElement("div",{className:"media"},o["default"].createElement("div",{className:"media-left"},o["default"].createElement("a",{href:a.url},o["default"].createElement(s["default"],{className:"poster-avatar",size:50,user:a}))),o["default"].createElement("div",{className:"media-body"},o["default"].createElement("div",{className:"media-heading"},o["default"].createElement("a",{className:"item-title",href:a.url},a.username)),o["default"].createElement(d["default"],{title:a.title,rank:a.rank}))))};var r=e("react"),o=n(r),l=e("../../../avatar"),s=n(l),i=e("./button"),u=n(i),c=e("./user-title"),d=n(c)},{"../../../avatar":6,"./button":127,"./user-title":130,react:"react"}],130:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.rank,a=e.title,n=a||t.title||t.name,r="user-title";return t.css_class&&(r+=" user-title-"+t.css_class),t.is_tab?o["default"].createElement("a",{className:r,href:t.url},n):o["default"].createElement("span",{className:r},n)};var r=e("react"),o=n(r)},{react:"react"}],131:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(){return l["default"].createElement("ul",{className:"posts-list post-feed ui-preview"},l["default"].createElement("li",{className:"post"},l["default"].createElement("div",{className:"panel panel-default panel-post"},l["default"].createElement("div",{className:"panel-body"},l["default"].createElement("div",{className:"post-side post-side-anonymous"},l["default"].createElement("div",{className:"media"},l["default"].createElement("div",{className:"media-left"},l["default"].createElement("span",null,l["default"].createElement(i["default"],{className:"poster-avatar",size:50}))),l["default"].createElement("div",{className:"media-body"},l["default"].createElement("div",{className:"media-heading"},l["default"].createElement("span",{className:"item-title"},l["default"].createElement("span",{className:"ui-preview-text",style:{width:c["int"](30,200)+"px"}}," "))),l["default"].createElement("span",{className:"user-title user-title-anonymous"},l["default"].createElement("span",{className:"ui-preview-text",style:{width:c["int"](30,200)+"px"}}," "))))),l["default"].createElement("div",{className:"post-heading"},l["default"].createElement("span",{className:"ui-preview-text",style:{width:c["int"](30,200)+"px"}}," ")),l["default"].createElement("div",{className:"post-body"},l["default"].createElement("article",{className:"misago-markup"},l["default"].createElement("p",null,l["default"].createElement("span",{className:"ui-preview-text",style:{width:c["int"](30,200)+"px"}}," ")," ",l["default"].createElement("span",{className:"ui-preview-text",style:{width:c["int"](30,200)+"px"}}," ")," ",l["default"].createElement("span",{className:"ui-preview-text",style:{width:c["int"](30,200)+"px"}}," "))))))))};var o=e("react"),l=r(o),s=e("../avatar"),i=r(s),u=e("../../utils/random"),c=n(u)},{"../../utils/random":388,"../avatar":6,react:"react"}],132:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(e){return Object.assign({},e,{liked_on:(0,v["default"])(e.liked_on)})}function i(e){var t=e.className,a=e.children,n=e.likes,r=gettext("Post Likes");if(n){var o=n.length,l=ngettext("%(likes)s like","%(likes)s likes",o);r=interpolate(l,{likes:o},!0)}return h["default"].createElement("div",{className:"modal-dialog "+(t||""),role:"document"},h["default"].createElement("div",{className:"modal-content"},h["default"].createElement("div",{className:"modal-header"},h["default"].createElement("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},h["default"].createElement("span",{"aria-hidden":"true"},"×")),h["default"].createElement("h4",{className:"modal-title"},r)),a))}function u(e){return h["default"].createElement("div",{className:"modal-body modal-post-likers"},h["default"].createElement("ul",{className:"media-list"},e.likes.map(function(e){return h["default"].createElement(c,f({key:e.id},e))})))}function c(e){if(e.url){var t={id:e.liker_id,avatars:e.avatars};return h["default"].createElement("li",{className:"media"},h["default"].createElement("div",{className:"media-left"},h["default"].createElement("a",{className:"user-avatar",href:e.url},h["default"].createElement(g["default"],{size:"50",user:t}))),h["default"].createElement("div",{className:"media-body"},h["default"].createElement("a",{className:"item-title",href:e.url},e.username)," ",h["default"].createElement(d,{likedOn:e.liked_on})))}return h["default"].createElement("li",{className:"media"},h["default"].createElement("div",{className:"media-left"},h["default"].createElement("span",{className:"user-avatar"},h["default"].createElement(g["default"],{size:"50"}))),h["default"].createElement("div",{className:"media-body"},h["default"].createElement("strong",null,e.username)," ",h["default"].createElement(d,{likedOn:e.liked_on})))}function d(e){return h["default"].createElement("span",{className:"text-muted",title:e.likedOn.format("LLL")},e.likedOn.fromNow())}Object.defineProperty(a,"__esModule",{value:!0});var f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},p=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();a.hydrateLike=s,a.ModalDialog=i,a.LikesList=u,a.LikeDetails=c,a.LikeDate=d;var m=e("react"),h=n(m),b=e("moment"),v=n(b),_=e("./avatar"),g=n(_),y=e("./modal-message"),E=n(y),w=e("./modal-loader"),O=n(w),k=e("../services/ajax"),N=n(k),x=function(e){function t(e){r(this,t);var a=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.state={isReady:!1,error:null,likes:[]},a}return l(t,e),p(t,[{key:"componentDidMount",value:function(){var e=this;N["default"].get(this.props.post.api.likes).then(function(t){e.setState({isReady:!0,likes:t.map(s)})},function(t){e.setState({isReady:!0,error:t.detail})})}},{key:"render",value:function(){return this.state.error?h["default"].createElement(i,{className:"modal-message"},h["default"].createElement(E["default"],{message:this.state.error})):this.state.isReady?this.state.likes.length?h["default"].createElement(i,{className:"modal-sm",likes:this.state.likes},h["default"].createElement(u,{likes:this.state.likes})):h["default"].createElement(i,{className:"modal-message"},h["default"].createElement(E["default"],{message:gettext("No users have liked this post.")})):h["default"].createElement(i,{className:"modal-sm"},h["default"].createElement(O["default"],null))}}]),t}(h["default"].Component);a["default"]=x},{"../services/ajax":365,"./avatar":6,"./modal-loader":61,"./modal-message":62,moment:"moment",react:"react"}],133:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var i=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),u=e("react"),c=r(u),d=e("../editor"),f=r(d),p=e("../form"),m=r(p),h=e("./utils/container"),b=r(h),v=e("./utils/loader"),_=r(v),g=e("./utils/message"),y=r(g),E=e("./utils/attachments"),w=n(E),O=e("./utils/validators"),k=e("../../services/ajax"),N=r(k),x=e("../../services/posting"),P=r(x),j=e("../../services/snackbar"),C=r(j),S=function(e){function t(e){o(this,t);var a=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.loadSuccess=function(e){a.setState({isReady:!0,post:e.post,attachments:w.hydrate(e.attachments),protect:e.is_protected,canProtect:e.can_protect})},a.loadError=function(e){a.setState({isErrored:e.detail})},a.onCancel=function(){var e=confirm(gettext("Are you sure you want to discard changes?"));e&&P["default"].close()},a.onProtect=function(){a.setState({protect:!0})},a.onUnprotect=function(){a.setState({protect:!1})},a.onPostChange=function(e){a.changeValue("post",e.target.value)},a.onAttachmentsChange=function(e){a.setState({attachments:e})},a.state={isReady:!1,isLoading:!1,isErrored:!1,post:"",attachments:[],protect:!1,canProtect:!1,validators:{post:(0,O.getPostValidators)()},errors:{}},a}return s(t,e),i(t,[{key:"componentDidMount",value:function(){N["default"].get(this.props.config).then(this.loadSuccess,this.loadError)}},{key:"clean",value:function(){if(!this.state.post.trim().length)return C["default"].error(gettext("You have to enter a message.")),!1;var e=this.validate();return!e.post||(C["default"].error(e.post[0]),!1)}},{key:"send",value:function(){return N["default"].put(this.props.submit,{post:this.state.post,attachments:w.clean(this.state.attachments),protect:this.state.protect})}},{key:"handleSuccess",value:function(e){C["default"].success(gettext("Reply has been edited.")),window.location=e.url.index,this.setState({isLoading:!0})}},{key:"handleError",value:function(e){if(400===e.status){var t=[].concat(e.non_field_errors||[],e.category||[],e.title||[],e.post||[],e.attachments||[]);C["default"].error(t[0])}else C["default"].apiError(e)}},{key:"render",value:function(){return this.state.isReady?c["default"].createElement(b["default"],{className:"posting-form"},c["default"].createElement("form",{onSubmit:this.handleSubmit,method:"POST"},c["default"].createElement("div",{className:"row"},c["default"].createElement("div",{className:"col-md-12"},c["default"].createElement(f["default"],{attachments:this.state.attachments,canProtect:this.state.canProtect,loading:this.state.isLoading,onAttachmentsChange:this.onAttachmentsChange,onCancel:this.onCancel,onChange:this.onPostChange,onProtect:this.onProtect,onUnprotect:this.onUnprotect,protect:this.state.protect,submitLabel:gettext("Edit reply"),value:this.state.post}))))):this.state.isErrored?c["default"].createElement(y["default"],{message:this.state.isErrored}):c["default"].createElement(_["default"],null)}}]),t}(m["default"]);a["default"]=S},{"../../services/ajax":365,"../../services/posting":375,"../../services/snackbar":376,"../editor":52,"../form":56,"./utils/attachments":138,"./utils/container":139,"./utils/loader":140,"./utils/message":141,"./utils/validators":144,react:"react"}],134:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return"START"===e.mode?o["default"].createElement(s["default"],e):"START_PRIVATE"===e.mode?o["default"].createElement(u["default"],e):"REPLY"===e.mode?o["default"].createElement(d["default"],e):"EDIT"===e.mode?o["default"].createElement(p["default"],e):null};var r=e("react"),o=n(r),l=e("./start"),s=n(l),i=e("./start-private"),u=n(i),c=e("./reply"),d=n(c),f=e("./edit"),p=n(f)},{"./edit":133,"./reply":135,"./start":137,"./start-private":136,react:"react"}],135:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var i=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),u=e("react"),c=r(u),d=e("../editor"),f=r(d),p=e("../form"),m=r(p),h=e("./utils/container"),b=r(h),v=e("./utils/loader"),_=r(v),g=e("./utils/message"),y=r(g),E=e("./utils/attachments"),w=n(E),O=e("./utils/validators"),k=e("../../services/ajax"),N=r(k),x=e("../../services/posting"),P=r(x),j=e("../../services/snackbar"),C=r(j),S=function(e){function t(e){o(this,t);var a=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.loadSuccess=function(e){a.setState({isReady:!0,post:e.post?'[quote="@'+e.poster+'"]\n'+e.post+"\n[/quote]":""})},a.loadError=function(e){a.setState({isErrored:e.detail})},a.appendData=function(e){var t=e.post?'[quote="@'+e.poster+'"]\n'+e.post+"\n[/quote]\n\n":"";a.setState(function(e,a){return e.post.length>0?{post:e.post+"\n\n"+t}:{post:t}})},a.onCancel=function(){var e=confirm(gettext("Are you sure you want to discard your reply?"));e&&P["default"].close()},a.onPostChange=function(e){a.changeValue("post",e.target.value)},a.onAttachmentsChange=function(e){a.setState({attachments:e})},a.state={isReady:!1,isLoading:!1,isErrored:!1,post:"",attachments:[],validators:{post:(0,O.getPostValidators)()},errors:{}},a}return s(t,e),i(t,[{key:"componentDidMount",value:function(){N["default"].get(this.props.config,this.props.context||null).then(this.loadSuccess,this.loadError)}},{key:"componentWillReceiveProps",value:function(e){var t=this.props.context,a=e.context;t&&a&&t.reply===a.reply||N["default"].get(e.config,e.context||null).then(this.appendData,C["default"].apiError)}},{key:"clean",value:function(){if(!this.state.post.trim().length)return C["default"].error(gettext("You have to enter a message.")),!1;var e=this.validate();return!e.post||(C["default"].error(e.post[0]),!1)}},{key:"send",value:function(){return N["default"].post(this.props.submit,{post:this.state.post,attachments:w.clean(this.state.attachments)})}},{key:"handleSuccess",value:function(e){C["default"].success(gettext("Your reply has been posted.")),window.location=e.url.index,this.setState({isLoading:!0})}},{key:"handleError",value:function(e){if(400===e.status){var t=[].concat(e.non_field_errors||[],e.post||[],e.attachments||[]);C["default"].error(t[0])}else C["default"].apiError(e)}},{key:"render",value:function(){return this.state.isReady?c["default"].createElement(b["default"],{className:"posting-form"},c["default"].createElement("form",{onSubmit:this.handleSubmit,method:"POST"},c["default"].createElement("div",{className:"row"},c["default"].createElement("div",{className:"col-md-12"},c["default"].createElement(f["default"],{attachments:this.state.attachments,loading:this.state.isLoading,onAttachmentsChange:this.onAttachmentsChange,onCancel:this.onCancel,onChange:this.onPostChange,submitLabel:gettext("Post reply"),value:this.state.post}))))):this.state.isErrored?c["default"].createElement(y["default"],{message:this.state.isErrored}):c["default"].createElement(_["default"],null)}}]),t}(m["default"]);a["default"]=S},{"../../services/ajax":365,"../../services/posting":375,"../../services/snackbar":376,"../editor":52,"../form":56,"./utils/attachments":138,"./utils/container":139,"./utils/loader":140,"./utils/message":141,"./utils/validators":144,react:"react"}],136:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var i=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),u=e("react"),c=r(u),d=e("../editor"),f=r(d),p=e("../form"),m=r(p),h=e("./utils/container"),b=r(h),v=e("./utils/message"),_=(r(v),e("./utils/attachments")),g=n(_),y=e("./utils/usernames"),E=r(y),w=e("./utils/validators"),O=e("../../services/ajax"),k=r(O),N=e("../../services/posting"),x=r(N),P=e("../../services/snackbar"),j=r(P),C=function(e){function t(e){o(this,t);var a=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));a.onCancel=function(){var e=confirm(gettext("Are you sure you want to discard private thread?"));e&&x["default"].close()},a.onToChange=function(e){a.changeValue("to",e.target.value)},a.onTitleChange=function(e){a.changeValue("title",e.target.value)},a.onPostChange=function(e){a.changeValue("post",e.target.value)},a.onAttachmentsChange=function(e){a.setState({attachments:e})};var n=(e.to||[]).map(function(e){return e.username}).join(", ");return a.state={isLoading:!1,to:n,title:"",post:"",attachments:[],validators:{title:(0,w.getTitleValidators)(),post:(0,w.getPostValidators)()},errors:{}},a}return s(t,e),i(t,[{key:"clean",value:function(){if(!(0,E["default"])(this.state.to).length)return j["default"].error(gettext("You have to enter at least one recipient.")),!1;if(!this.state.title.trim().length)return j["default"].error(gettext("You have to enter thread title.")),!1;if(!this.state.post.trim().length)return j["default"].error(gettext("You have to enter a message.")),!1;var e=this.validate();return e.title?(j["default"].error(e.title[0]),!1):!e.post||(j["default"].error(e.post[0]),!1)}},{key:"send",value:function(){return k["default"].post(this.props.submit,{to:(0,E["default"])(this.state.to),title:this.state.title,post:this.state.post,attachments:g.clean(this.state.attachments)})}},{key:"handleSuccess",value:function(e){j["default"].success(gettext("Your thread has been posted.")),window.location=e.url,this.setState({isLoading:!0})}},{key:"handleError",value:function(e){if(400===e.status){var t=[].concat(e.non_field_errors||[],e.to||[],e.title||[],e.post||[],e.attachments||[]);j["default"].error(t[0])}else j["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement(b["default"],{className:"posting-form",withFirstRow:!0},c["default"].createElement("form",{onSubmit:this.handleSubmit},c["default"].createElement("div",{className:"row first-row"},c["default"].createElement("div",{className:"col-xs-12"},c["default"].createElement("input",{className:"form-control",disabled:this.state.isLoading,onChange:this.onToChange,placeholder:gettext("Comma separated list of user names, eg.: Danny, Lisa"),type:"text",value:this.state.to}))),c["default"].createElement("div",{className:"row first-row"},c["default"].createElement("div",{className:"col-xs-12"},c["default"].createElement("input",{className:"form-control",disabled:this.state.isLoading,onChange:this.onTitleChange,placeholder:gettext("Thread title"),type:"text",value:this.state.title}))),c["default"].createElement("div",{className:"row"},c["default"].createElement("div",{className:"col-xs-12"},c["default"].createElement(f["default"],{attachments:this.state.attachments,loading:this.state.isLoading,onAttachmentsChange:this.onAttachmentsChange,onCancel:this.onCancel,onChange:this.onPostChange,submitLabel:gettext("Post thread"),value:this.state.post})))))}}]),t}(m["default"]);a["default"]=C},{"../../services/ajax":365,"../../services/posting":375,"../../services/snackbar":376,"../editor":52,"../form":56,"./utils/attachments":138,"./utils/container":139,"./utils/message":141,"./utils/usernames":143,"./utils/validators":144,react:"react"}],137:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0});var i=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),u=e("react"),c=r(u),d=e("../category-select"),f=r(d),p=e("../editor"),m=r(p),h=e("../form"),b=r(h),v=e("./utils/container"),_=r(v),g=e("./utils/loader"),y=r(g),E=e("./utils/message"),w=r(E),O=e("./utils/options"),k=r(O),N=e("./utils/attachments"),x=n(N),P=e("./utils/validators"),j=e("../../services/ajax"),C=r(j),S=e("../../services/posting"),M=r(S),T=e("../../services/snackbar"),L=r(T),A=function(e){function t(e){
 o(this,t);var a=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.loadSuccess=function(e){var t=null,n=!1,r=null,o=e.map(function(e){return e.post===!1||t&&e.id!=a.state.category||(t=e.id,r=e.post),e.post&&(e.post.close||e.post.hide||e.post.pin)&&(n=!0),Object.assign(e,{disabled:e.post===!1,label:e.name,value:e.id})});a.setState({isReady:!0,showOptions:n,categories:o,category:t,categoryOptions:r})},a.loadError=function(e){a.setState({isErrored:e.detail})},a.onCancel=function(){var e=confirm(gettext("Are you sure you want to discard thread?"));e&&M["default"].close()},a.onTitleChange=function(e){a.changeValue("title",e.target.value)},a.onCategoryChange=function(e){var t=a.state.categories.find(function(t){return e.target.value==t.value}),n=a.state.pin;t.post.pin&&t.post.pin<n&&(n=t.post.pin),a.setState({category:t.id,categoryOptions:t.post,pin:n})},a.onPostChange=function(e){a.changeValue("post",e.target.value)},a.onAttachmentsChange=function(e){a.setState({attachments:e})},a.onClose=function(){a.changeValue("close",!0)},a.onOpen=function(){a.changeValue("close",!1)},a.onPinGlobally=function(){a.changeValue("pin",2)},a.onPinLocally=function(){a.changeValue("pin",1)},a.onUnpin=function(){a.changeValue("pin",0)},a.onHide=function(){a.changeValue("hide",!0)},a.onUnhide=function(){a.changeValue("hide",!1)},a.state={isReady:!1,isLoading:!1,isErrored:!1,showOptions:!1,categoryOptions:null,title:"",category:e.category||null,categories:[],post:"",attachments:[],close:!1,hide:!1,pin:0,validators:{title:(0,P.getTitleValidators)(),post:(0,P.getPostValidators)()},errors:{}},a}return s(t,e),i(t,[{key:"componentDidMount",value:function(){C["default"].get(this.props.config).then(this.loadSuccess,this.loadError)}},{key:"clean",value:function(){if(!this.state.title.trim().length)return L["default"].error(gettext("You have to enter thread title.")),!1;if(!this.state.post.trim().length)return L["default"].error(gettext("You have to enter a message.")),!1;var e=this.validate();return e.title?(L["default"].error(e.title[0]),!1):!e.post||(L["default"].error(e.post[0]),!1)}},{key:"send",value:function(){return C["default"].post(this.props.submit,{title:this.state.title,category:this.state.category,post:this.state.post,attachments:x.clean(this.state.attachments),close:this.state.close,hide:this.state.hide,pin:this.state.pin})}},{key:"handleSuccess",value:function(e){L["default"].success(gettext("Your thread has been posted.")),window.location=e.url,this.setState({isLoading:!0})}},{key:"handleError",value:function(e){if(400===e.status){var t=[].concat(e.non_field_errors||[],e.category||[],e.title||[],e.post||[],e.attachments||[]);L["default"].error(t[0])}else L["default"].apiError(e)}},{key:"render",value:function(){if(this.state.isErrored)return c["default"].createElement(w["default"],{message:this.state.isErrored});if(!this.state.isReady)return c["default"].createElement(y["default"],null);var e=0;this.state.categoryOptions.close&&(e+=1),this.state.categoryOptions.hide&&(e+=1),this.state.categoryOptions.pin&&(e+=1);var t=null;return t=1===e?"col-sm-6":"col-sm-8",t+=3===e?" col-md-6":e?" col-md-7":" col-md-9",c["default"].createElement(_["default"],{className:"posting-form",withFirstRow:!0},c["default"].createElement("form",{onSubmit:this.handleSubmit},c["default"].createElement("div",{className:"row first-row"},c["default"].createElement("div",{className:t},c["default"].createElement("input",{className:"form-control",disabled:this.state.isLoading,onChange:this.onTitleChange,placeholder:gettext("Thread title"),type:"text",value:this.state.title})),c["default"].createElement("div",{className:"col-xs-12 col-sm-4 col-md-3 xs-margin-top"},c["default"].createElement(f["default"],{choices:this.state.categories,disabled:this.state.isLoading,onChange:this.onCategoryChange,value:this.state.category})),c["default"].createElement(k["default"],{close:this.state.close,columns:e,disabled:this.state.isLoading,hide:this.state.hide,onClose:this.onClose,onHide:this.onHide,onOpen:this.onOpen,onPinGlobally:this.onPinGlobally,onPinLocally:this.onPinLocally,onUnhide:this.onUnhide,onUnpin:this.onUnpin,options:this.state.categoryOptions,pin:this.state.pin,showOptions:this.state.showOptions})),c["default"].createElement("div",{className:"row"},c["default"].createElement("div",{className:"col-md-12"},c["default"].createElement(m["default"],{attachments:this.state.attachments,loading:this.state.isLoading,onAttachmentsChange:this.onAttachmentsChange,onCancel:this.onCancel,onChange:this.onPostChange,submitLabel:gettext("Post thread"),value:this.state.post})))))}}]),t}(b["default"]);a["default"]=A},{"../../services/ajax":365,"../../services/posting":375,"../../services/snackbar":376,"../category-select":21,"../editor":52,"../form":56,"./utils/attachments":138,"./utils/container":139,"./utils/loader":140,"./utils/message":141,"./utils/options":142,"./utils/validators":144,react:"react"}],138:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){var t=e.filter(function(e){return e.id&&!e.isRemoved});return t.map(function(e){return e.id})}function o(e){return e.map(function(e){return Object.assign({},e,{uploaded_on:(0,s["default"])(e.uploaded_on)})})}Object.defineProperty(a,"__esModule",{value:!0}),a.clean=r,a.hydrate=o;var l=e("moment"),s=n(l)},{moment:"moment"}],139:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return o["default"].createElement("div",{className:e.className},o["default"].createElement("div",{className:"container"},e.children))};var r=e("react"),o=n(r)},{react:"react"}],140:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return o["default"].createElement(s["default"],{className:"posting-loader"},o["default"].createElement(u["default"],null))};var r=e("react"),o=n(r),l=e("./container"),s=n(l),i=e("../../loader"),u=n(i)},{"../../loader":58,"./container":139,react:"react"}],141:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return o["default"].createElement(s["default"],{className:"posting-message"},o["default"].createElement("div",{className:"message-body"},o["default"].createElement("p",null,o["default"].createElement("span",{className:"material-icon"},"error_outline"),e.message),o["default"].createElement("button",{type:"button",className:"btn btn-default",onClick:u["default"].close},gettext("Dismiss"))))};var r=e("react"),o=n(r),l=e("./container"),s=n(l),i=e("../../../services/posting"),u=n(i)},{"../../../services/posting":375,"./container":139,react:"react"}],142:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){if(!e.show)return null;var t=e.close?gettext("Closed"):gettext("Open");return i["default"].createElement("div",{className:e.className},i["default"].createElement("button",{className:"btn btn-default btn-block",disabled:e.disabled,onClick:e.close?e.onOpen:e.onClose,title:t,type:"button"},i["default"].createElement("span",{className:"material-icon"},e.close?"lock":"lock_outline"),i["default"].createElement("span",{className:e.textClassName},t)))}function o(e){if(!e.show)return null;var t=e.hide?gettext("Hidden"):gettext("Not hidden");return i["default"].createElement("div",{className:e.className},i["default"].createElement("button",{className:"btn btn-default btn-block",disabled:e.disabled,onClick:e.hide?e.onUnhide:e.onHide,title:t,type:"button"},i["default"].createElement("span",{className:"material-icon"},e.hide?"visibility_off":"visibility"),i["default"].createElement("span",{className:e.textClassName},t)))}function l(e){if(!e.show)return null;var t=null,a=null,n=null;switch(e.pin){case 0:t="radio_button_unchecked",a=e.onPinLocally,n=gettext("Unpinned");break;case 1:t="bookmark_outline",a=e.onPinGlobally,n=gettext("Pinned locally"),a=2==e.show?e.onPinGlobally:e.onUnpin;break;case 2:t="bookmark",a=e.onUnpin,n=gettext("Pinned globally")}return i["default"].createElement("div",{className:e.className},i["default"].createElement("button",{className:"btn btn-default btn-block",disabled:e.disabled,onClick:a,title:n,type:"button"},i["default"].createElement("span",{className:"material-icon"},t),i["default"].createElement("span",{className:e.textClassName},n)))}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){if(!e.showOptions)return null;var t=e.columns,a="col-xs-12 xs-margin-top";a+=1===t?" col-sm-2":" sm-margin-top",a+=3===t?" col-md-3":" col-md-2",a+=" posting-options";var n="col-xs-"+12/t,s="btn-text";return s+=3===t?" visible-sm-inline-block":2===t?" hidden-md hidden-lg":" hidden-sm",i["default"].createElement("div",{className:a},i["default"].createElement("div",{className:"row"},i["default"].createElement(l,{className:n,disabled:e.disabled,onPinGlobally:e.onPinGlobally,onPinLocally:e.onPinLocally,onUnpin:e.onUnpin,pin:e.pin,show:e.options.pin,textClassName:s}),i["default"].createElement(o,{className:n,disabled:e.disabled,hide:e.hide,onHide:e.onHide,onUnhide:e.onUnhide,show:e.options.hide,textClassName:s}),i["default"].createElement(r,{className:n,close:e.close,disabled:e.disabled,onClose:e.onClose,onOpen:e.onOpen,show:e.options.close,textClassName:s})))},a.CloseOptions=r,a.HideOptions=o,a.PinOptions=l;var s=e("react"),i=n(s)},{react:"react"}],143:[function(e,t,a){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.split(",").map(function(e){return e.trim().toLowerCase()}),a=t.filter(function(e){return e.length>0}),n=a.filter(function(e,t){return a.indexOf(e)==t});return n}},{}],144:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(){return[l(),s()]}function o(){return f["default"].get("SETTINGS").post_length_max?[i(),u()]:[i()]}function l(){return(0,c.minLength)(f["default"].get("SETTINGS").thread_title_length_min,function(e,t){var a=ngettext("Thread title should be at least %(limit_value)s character long (it has %(show_value)s).","Thread title should be at least %(limit_value)s characters long (it has %(show_value)s).",e);return interpolate(a,{limit_value:e,show_value:t},!0)})}function s(){return(0,c.maxLength)(f["default"].get("SETTINGS").thread_title_length_max,function(e,t){var a=ngettext("Thread title cannot be longer than %(limit_value)s character (it has %(show_value)s).","Thread title cannot be longer than %(limit_value)s characters (it has %(show_value)s).",e);return interpolate(a,{limit_value:e,show_value:t},!0)})}function i(){return(0,c.minLength)(f["default"].get("SETTINGS").post_length_min,function(e,t){var a=ngettext("Posted message should be at least %(limit_value)s character long (it has %(show_value)s).","Posted message should be at least %(limit_value)s characters long (it has %(show_value)s).",e);return interpolate(a,{limit_value:e,show_value:t},!0)})}function u(){return(0,c.maxLength)(f["default"].get("SETTINGS").post_length_max||1e6,function(e,t){var a=ngettext("Posted message cannot be longer than %(limit_value)s character (it has %(show_value)s).","Posted message cannot be longer than %(limit_value)s characters (it has %(show_value)s).",e);return interpolate(a,{limit_value:e,show_value:t},!0)})}Object.defineProperty(a,"__esModule",{value:!0}),a.getTitleValidators=r,a.getPostValidators=o,a.getTitleLengthMin=l,a.getTitleLengthMax=s,a.validatePostLengthMin=i,a.validatePostLengthMax=u;var c=e("../../../utils/validators"),d=e("../../.."),f=n(d)},{"../../..":302,"../../../utils/validators":393}],145:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return e.can_hide}Object.defineProperty(a,"__esModule",{value:!0}),a.Delete=a.Unhide=a.Hide=void 0;var u=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();a["default"]=function(e){return i(e.post.acl)?d["default"].createElement("li",{className:"event-controls"},d["default"].createElement(w,e),d["default"].createElement(O,e),d["default"].createElement(k,e)):null},a.isVisible=i;var c=e("react"),d=r(c),f=e("moment"),p=r(f),m=e("../../../reducers/post"),h=n(m),b=e("../../../services/ajax"),v=r(b),_=e("../../../services/snackbar"),g=r(_),y=e("../../../services/store"),E=r(y),w=a.Hide=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){E["default"].dispatch(h.patch(n.props.post,{is_hidden:!0,hidden_on:(0,p["default"])(),hidden_by_name:n.props.user.username,url:Object.assign(n.props.post.url,{hidden_by:n.props.user.url})}));var e={op:"replace",path:"is-hidden",value:!0};v["default"].patch(n.props.post.api.index,[e]).then(function(e){E["default"].dispatch(h.patch(n.props.post,e))},function(e){400===e.status?g["default"].error(e.detail[0]):g["default"].apiError(e),E["default"].dispatch(h.patch(n.props.post,{is_hidden:!1}))})},r=a,l(n,r)}return s(t,e),u(t,[{key:"render",value:function(){return this.props.post.is_hidden?null:d["default"].createElement("button",{type:"button",className:"btn btn-link",onClick:this.onClick},gettext("Hide"))}}]),t}(d["default"].Component),O=a.Unhide=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){E["default"].dispatch(h.patch(n.props.post,{is_hidden:!1}));var e={op:"replace",path:"is-hidden",value:!1};v["default"].patch(n.props.post.api.index,[e]).then(function(e){E["default"].dispatch(h.patch(n.props.post,e))},function(e){400===e.status?g["default"].error(e.detail[0]):g["default"].apiError(e),E["default"].dispatch(h.patch(n.props.post,{is_hidden:!0}))})},r=a,l(n,r)}return s(t,e),u(t,[{key:"render",value:function(){return this.props.post.is_hidden?d["default"].createElement("button",{type:"button",className:"btn btn-link",onClick:this.onClick},gettext("Unhide")):null}}]),t}(d["default"].Component),k=a.Delete=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){var e=confirm(gettext("Are you sure you wish to delete this event? This action is not reversible!"));e&&n["delete"]()},n["delete"]=function(){E["default"].dispatch(h.patch(n.props.post,{isDeleted:!0})),v["default"]["delete"](n.props.post.api.index).then(function(){g["default"].success(gettext("Event has been deleted."))},function(e){400===e.status?g["default"].error(e.detail[0]):g["default"].apiError(e),E["default"].dispatch(h.patch(n.props.post,{isDeleted:!1}))})},r=a,l(n,r)}return s(t,e),u(t,[{key:"render",value:function(){return d["default"].createElement("button",{type:"button",className:"btn btn-link",onClick:this.onClick},gettext("Delete"))}}]),t}(d["default"].Component)},{"../../../reducers/post":353,"../../../services/ajax":365,"../../../services/snackbar":376,"../../../services/store":377,moment:"moment",react:"react"}],146:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return o["default"].createElement("div",{className:"post-avatar"},o["default"].createElement("span",{className:"material-icon"},l[e.post.event_type]))};var r=e("react"),o=n(r),l={changed_title:"edit",pinned_globally:"bookmark",pinned_locally:"bookmark_border",unpinned:"panorama_fish_eye",moved:"arrow_forward",merged:"call_merge",approved:"done",opened:"lock_open",closed:"lock_outline",unhid:"visibility",hid:"visibility_off",changed_owner:"grade",tookover:"grade",added_participant:"person_add",owner_left:"person_outline",participant_left:"person_outline",removed_participant:"remove_circle_outline"}},{react:"react"}],147:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t="event";return e.post.isDeleted?t="hide":e.post.is_hidden&&(t="event post-hidden"),o["default"].createElement("li",{id:"post-"+e.post.id,className:t},o["default"].createElement(p["default"],{post:e.post}),o["default"].createElement("div",{className:"row"},o["default"].createElement("div",{className:"col-xs-2 col-sm-3 text-right"},o["default"].createElement(s["default"],e)),o["default"].createElement("div",{className:"col-xs-10 col-sm-9 text-left"},o["default"].createElement(h["default"],{post:e.post},o["default"].createElement(d["default"],e),o["default"].createElement(u["default"],e)))))};var r=e("react"),o=n(r),l=e("./icon"),s=n(l),i=e("./info"),u=n(i),c=e("./message"),d=n(c),f=e("./unread-label"),p=n(f),m=e("../waypoint"),h=n(m)},{"../waypoint":173,"./icon":146,"./info":148,"./message":149,"./unread-label":150,react:"react"}],148:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){if(e.post.is_hidden){var t=null;t=e.post.url.hidden_by?interpolate(h,{url:(0,u["default"])(e.post.url.hidden_by),user:(0,u["default"])(e.post.hidden_by_name)},!0):interpolate(m,{user:(0,u["default"])(e.post.hidden_by_name)},!0);var a=interpolate(f,{absolute:(0,u["default"])(e.post.hidden_on.format("LLL")),relative:(0,u["default"])(e.post.hidden_on.fromNow())},!0),n=interpolate((0,u["default"])(gettext("Hidden by %(event_by)s %(event_on)s.")),{event_by:t,event_on:a},!0);return s["default"].createElement("li",{className:"event-hidden-message",dangerouslySetInnerHTML:{__html:n}})}return null}function o(e){var t=null;t=e.post.poster?interpolate(h,{url:(0,u["default"])(e.post.poster.url),user:(0,u["default"])(e.post.poster_name)},!0):interpolate(m,{user:(0,u["default"])(e.post.poster_name)},!0);var a=interpolate(p,{url:(0,u["default"])(e.post.url.index),absolute:(0,u["default"])(e.post.posted_on.format("LLL")),relative:(0,u["default"])(e.post.posted_on.fromNow())},!0),n=interpolate((0,u["default"])(gettext("By %(event_by)s %(event_on)s.")),{event_by:t,event_on:a},!0);return s["default"].createElement("li",{className:"event-posters",dangerouslySetInnerHTML:{__html:n}})}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return s["default"].createElement("ul",{className:"list-inline event-info"},s["default"].createElement(r,e),s["default"].createElement(o,e),s["default"].createElement(d["default"],e))},a.Hidden=r,a.Poster=o;var l=e("react"),s=n(l),i=e("../../../utils/escape-html"),u=n(i),c=e("./controls"),d=n(c),f='<abbr title="%(absolute)s">%(relative)s</abbr>',p='<a href="%(url)s" title="%(absolute)s">%(relative)s</a>',m='<span class="item-title">%(user)s</span>',h='<a href="%(url)s" class="item-title">%(user)s</a>'},{"../../../utils/escape-html":383,"./controls":145,react:"react"}],149:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){var t=(0,p["default"])(gettext("Thread title has been changed from %(old_title)s.")),a=interpolate(b,{name:(0,p["default"])(e.post.event_context.old_title)},!0),n=interpolate(t,{old_title:a},!0);return d["default"].createElement("p",{className:"event-message",dangerouslySetInnerHTML:{__html:n}})}function o(e){var t=(0,p["default"])(gettext("Thread has been moved from %(from_category)s.")),a=interpolate(h,{url:(0,p["default"])(e.post.event_context.from_category.url),name:(0,p["default"])(e.post.event_context.from_category.name)},!0),n=interpolate(t,{from_category:a},!0);return d["default"].createElement("p",{className:"event-message",dangerouslySetInnerHTML:{__html:n}})}function l(e){var t=(0,p["default"])(gettext("The %(merged_thread)s thread has been merged into this thread.")),a=interpolate(b,{name:(0,p["default"])(e.post.event_context.merged_thread)},!0),n=interpolate(t,{merged_thread:a},!0);return d["default"].createElement("p",{className:"event-message",dangerouslySetInnerHTML:{__html:n}})}function s(e){var t=(0,p["default"])(gettext("Changed thread owner to %(user)s.")),a=interpolate(h,{url:(0,p["default"])(e.post.event_context.user.url),name:(0,p["default"])(e.post.event_context.user.username)},!0),n=interpolate(t,{user:a},!0);return d["default"].createElement("p",{className:"event-message",dangerouslySetInnerHTML:{__html:n}})}function i(e){var t=(0,p["default"])(gettext("Added %(user)s to thread.")),a=interpolate(h,{url:(0,p["default"])(e.post.event_context.user.url),name:(0,p["default"])(e.post.event_context.user.username)},!0),n=interpolate(t,{user:a},!0);return d["default"].createElement("p",{className:"event-message",dangerouslySetInnerHTML:{__html:n}})}function u(e){var t=(0,p["default"])(gettext("Removed %(user)s from thread.")),a=interpolate(h,{url:(0,p["default"])(e.post.event_context.user.url),name:(0,p["default"])(e.post.event_context.user.username)},!0),n=interpolate(t,{user:a},!0);return d["default"].createElement("p",{className:"event-message",dangerouslySetInnerHTML:{__html:n}})}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return m[e.post.event_type]?d["default"].createElement("p",{className:"event-message"},m[e.post.event_type]):"changed_title"===e.post.event_type?d["default"].createElement(r,e):"moved"===e.post.event_type?d["default"].createElement(o,e):"merged"===e.post.event_type?d["default"].createElement(l,e):"changed_owner"===e.post.event_type?d["default"].createElement(s,e):"added_participant"===e.post.event_type?d["default"].createElement(i,e):"removed_participant"===e.post.event_type?d["default"].createElement(u,e):null},a.ChangedTitle=r,a.Moved=o,a.Merged=l,a.ChangedOwner=s,a.AddedParticipant=i,a.RemovedParticipant=u;var c=e("react"),d=n(c),f=e("../../../utils/escape-html"),p=n(f),m={pinned_globally:gettext("Thread has been pinned globally."),pinned_locally:gettext("Thread has been pinned locally."),unpinned:gettext("Thread has been unpinned."),approved:gettext("Thread has been approved."),opened:gettext("Thread has been opened."),closed:gettext("Thread has been closed."),unhid:gettext("Thread has been revealed."),hid:gettext("Thread has been made hidden."),tookover:gettext("Took thread over."),owner_left:gettext("Owner has left thread. This thread is now closed."),participant_left:gettext("Participant has left thread.")},h='<a href="%(url)s" class="item-title">%(name)s</a>',b='<span class="item-title">%(name)s</span>'},{"../../../utils/escape-html":383,react:"react"}],150:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){var t=e.post;return t.is_read?null:o["default"].createElement("div",{className:"row"},o["default"].createElement("div",{className:"col-xs-10 col-xs-offset-2 col-sm-9 col-sm-offset-3 text-left"},o["default"].createElement("div",{className:"event-label"},o["default"].createElement("span",{className:"label label-unread"},gettext("New event")))))};var r=e("react"),o=n(r)},{react:"react"}],151:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){return e.post.is_event?s["default"].createElement(u["default"],e):s["default"].createElement(d["default"],e)}Object.defineProperty(a,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e};a["default"]=function(e){return e.posts.isLoaded?s["default"].createElement("ul",{className:"posts-list ui-ready"},e.posts.results.map(function(t){return s["default"].createElement(r,o({key:t.id,post:t},e))})):s["default"].createElement("ul",{className:"posts-list ui-preview"},s["default"].createElement(p["default"],null))},a.ListItem=r;var l=e("react"),s=n(l),i=e("./event"),u=n(i),c=e("./post"),d=n(c),f=e("./post/preview"),p=n(f)},{"./event":147,"./post":163,"./post/preview":171,react:"react"}],152:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){return e.attachment.is_image?u["default"].createElement("div",{className:"post-attachment-preview"},u["default"].createElement(l,e)):u["default"].createElement("div",{className:"post-attachment-preview"},u["default"].createElement(o,e))}function o(e){return u["default"].createElement("a",{href:e.attachment.url.index,className:"material-icon"},"insert_drive_file")}function l(e){var t=e.attachment.url.thumb||e.attachment.url.index;return u["default"].createElement("a",{className:"post-thumbnail",href:e.attachment.url.index,style:{backgroundImage:'url("'+(0,f["default"])(t)+'")'}})}function s(e){var t=null;t=e.attachment.url.uploader?interpolate(v,{url:(0,f["default"])(e.attachment.url.uploader),user:(0,f["default"])(e.attachment.uploader_name)},!0):interpolate(b,{user:(0,f["default"])(e.attachment.uploader_name)},!0);var a=interpolate(h,{absolute:(0,f["default"])(e.attachment.uploaded_on.format("LLL")),relative:(0,f["default"])(e.attachment.uploaded_on.fromNow())},!0),n=interpolate((0,f["default"])(gettext("%(filetype)s, %(size)s, uploaded by %(uploader)s %(uploaded_on)s.")),{filetype:e.attachment.filetype,size:(0,m["default"])(e.attachment.size),uploader:t,uploaded_on:a},!0);return u["default"].createElement("p",{className:"post-attachment-description",dangerouslySetInnerHTML:{__html:n}})}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return u["default"].createElement("div",{className:"col-xs-12 col-md-6"},u["default"].createElement(r,e),u["default"].createElement("div",{className:"post-attachment"},u["default"].createElement("a",{href:e.attachment.url.index,className:"attachment-name item-title"},e.attachment.filename),u["default"].createElement(s,e)))},a.AttachmentPreview=r,a.AttachmentIcon=o,a.AttachmentThumbnail=l,a.AttachmentDetails=s;var i=e("react"),u=n(i),c=e("../../../.."),d=(n(c),e("../../../../utils/escape-html")),f=n(d),p=e("../../../../utils/file-size"),m=n(p),h='<abbr title="%(absolute)s">%(relative)s</abbr>',b='<span class="item-title">%(user)s</span>',v='<a href="%(url)s" class="item-title">%(user)s</a>'},{"../../../..":302,"../../../../utils/escape-html":383,"../../../../utils/file-size":384,react:"react"}],153:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){return(!e.is_hidden||e.acl.can_see_hidden)&&e.attachments}function o(e){return s["default"].createElement("div",{className:"row"},e.row.map(function(e){return s["default"].createElement(d["default"],{attachment:e,key:e?e.id:0})}))}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return r(e.post)?s["default"].createElement("div",{className:"post-attachments"},(0,u["default"])(e.post.attachments,2).map(function(e){var t=e.map(function(e){return e?e.id:0}).join("_");return s["default"].createElement(o,{key:t,row:e})})):null},a.isVisible=r,a.Row=o;var l=e("react"),s=n(l),i=e("../../../../utils/batch"),u=n(i),c=e("./attachment"),d=n(c)},{"../../../../utils/batch":380,"./attachment":152,react:"react"}],154:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){return i["default"].createElement(c["default"],{className:"post-body",post:e.post},i["default"].createElement(f["default"],{markup:e.post.content}))}function o(e){var t=null;t=e.post.hidden_by?interpolate(h,{url:(0,m["default"])(e.post.url.hidden_by),user:(0,m["default"])(e.post.hidden_by_name)},!0):interpolate(b,{user:(0,m["default"])(e.post.hidden_by_name)},!0);var a=interpolate(v,{absolute:(0,m["default"])(e.post.hidden_on.format("LLL")),relative:(0,m["default"])(e.post.hidden_on.fromNow())},!0),n=interpolate((0,m["default"])(gettext("Hidden by %(hidden_by)s %(hidden_on)s.")),{hidden_by:t,hidden_on:a},!0);return i["default"].createElement(c["default"],{className:"post-body post-body-hidden",post:e.post},i["default"].createElement("p",{className:"lead"},gettext("This post is hidden. You cannot see its contents.")),i["default"].createElement("p",{className:"text-muted",dangerouslySetInnerHTML:{__html:n}}))}function l(e){return i["default"].createElement(c["default"],{className:"post-body post-body-invalid",post:e.post},i["default"].createElement("p",{className:"lead"},gettext("This post's contents cannot be displayed.")),i["default"].createElement("p",{className:"text-muted"},gettext("This error is caused by invalid post content manipulation.")))}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return e.post.is_hidden&&!e.post.acl.can_see_hidden?i["default"].createElement(o,e):e.post.content?i["default"].createElement(r,e):i["default"].createElement(l,e)},a.Default=r,a.Hidden=o,a.Invalid=l;var s=e("react"),i=n(s),u=e("../waypoint"),c=n(u),d=e("../../misago-markup"),f=n(d),p=e("../../../utils/escape-html"),m=n(p),h='<a href="%(url)s" class="item-title">%(user)s</a>',b='<span class="item-title">%(user)s</span>',v='<abbr class="last-title" title="%(absolute)s">%(relative)s</abbr>'},{"../../../utils/escape-html":383,"../../misago-markup":60,"../waypoint":173,react:"react"}],155:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e){j["default"].dispatch(w.patch(e.post,{is_unapproved:!1}));var t=[{op:"replace",path:"is-unapproved",value:!1}],a={is_unapproved:e.post.is_unapproved};f(e,t,a)}function l(e){j["default"].dispatch(w.patch(e.post,{is_protected:!0}));var t=[{op:"replace",path:"is-protected",value:!0}],a={is_protected:e.post.is_protected};f(e,t,a)}function s(e){j["default"].dispatch(w.patch(e.post,{is_protected:!1}));var t=[{op:"replace",path:"is-protected",value:!1}],a={is_protected:e.post.is_protected};f(e,t,a)}function i(e){j["default"].dispatch(w.patch(e.post,{is_hidden:!0,hidden_on:(0,_["default"])(),hidden_by_name:e.user.username,url:Object.assign(e.post.url,{hidden_by:e.user.url})}));var t=[{op:"replace",path:"is-hidden",value:!0}],a={is_hidden:e.post.is_hidden,hidden_on:e.post.hidden_on,hidden_by_name:e.post.hidden_by_name,url:e.post.url};f(e,t,a)}function u(e){j["default"].dispatch(w.patch(e.post,{is_hidden:!1}));var t=[{op:"replace",path:"is-hidden",value:!1}],a={is_hidden:e.post.is_hidden};f(e,t,a)}function c(e){var t=e.post.last_likes||[],a=[e.user].concat(t),n=a.length>3?a.slice(0,-1):a;j["default"].dispatch(w.patch(e.post,{is_liked:!0,likes:e.post.likes+1,last_likes:n}));var r=[{op:"replace",path:"is-liked",value:!0}],o={is_liked:e.post.is_liked,likes:e.post.likes,last_likes:e.post.last_likes};f(e,r,o)}function d(e){j["default"].dispatch(w.patch(e.post,{is_liked:!1,likes:e.post.likes-1,last_likes:e.post.last_likes.filter(function(t){return!t.id||t.id!==e.user.id})}));var t=[{op:"replace",path:"is-liked",value:!1}],a={is_liked:e.post.is_liked,
 likes:e.post.likes,last_likes:e.post.last_likes};f(e,t,a)}function f(e,t,a){k["default"].patch(e.post.api.index,t).then(function(t){j["default"].dispatch(w.patch(e.post,t))},function(t){400===t.status?x["default"].error(t.detail[0]):x["default"].apiError(t),j["default"].dispatch(w.patch(e.post,a))})}function p(e){var t=confirm(gettext("Are you sure you want to delete this post? This action is not reversible!"));t&&(j["default"].dispatch(w.patch(e.post,{isDeleted:!0})),k["default"]["delete"](e.post.api.index).then(function(){x["default"].success(gettext("Post has been deleted."))},function(t){400===t.status?x["default"].error(t.detail):x["default"].apiError(t),j["default"].dispatch(w.patch(e.post,{isDeleted:!1}))}))}function m(e){var t=e.post,a=e.user;j["default"].dispatch(y.update({best_answer:t.id,best_answer_is_protected:t.is_protected,best_answer_marked_on:(0,_["default"])(),best_answer_marked_by:a.id,best_answer_marked_by_name:a.username,best_answer_marked_by_slug:a.slug}));var n=[{op:"replace",path:"best-answer",value:t.id},{op:"add",path:"acl",value:!0}],r={best_answer:e.thread.best_answer,best_answer_is_protected:e.thread.best_answer_is_protected,best_answer_marked_on:e.thread.best_answer_marked_on,best_answer_marked_by:e.thread.best_answer_marked_by,best_answer_marked_by_name:e.thread.best_answer_marked_by_name,best_answer_marked_by_slug:e.thread.best_answer_marked_by_slug};b(e,n,r)}function h(e){var t=e.post;j["default"].dispatch(y.update({best_answer:null,best_answer_is_protected:!1,best_answer_marked_on:null,best_answer_marked_by:null,best_answer_marked_by_name:null,best_answer_marked_by_slug:null}));var a=[{op:"remove",path:"best-answer",value:t.id},{op:"add",path:"acl",value:!0}],n={best_answer:e.thread.best_answer,best_answer_is_protected:e.thread.best_answer_is_protected,best_answer_marked_on:e.thread.best_answer_marked_on,best_answer_marked_by:e.thread.best_answer_marked_by,best_answer_marked_by_name:e.thread.best_answer_marked_by_name,best_answer_marked_by_slug:e.thread.best_answer_marked_by_slug};b(e,a,n)}function b(e,t,a){k["default"].patch(e.thread.api.index,t).then(function(e){e.best_answer_marked_on&&(e.best_answer_marked_on=(0,_["default"])(e.best_answer_marked_on)),j["default"].dispatch(y.update(e))},function(e){400===e.status?x["default"].error(e.detail[0]):x["default"].apiError(e),j["default"].dispatch(y.update(a))})}Object.defineProperty(a,"__esModule",{value:!0}),a.approve=o,a.protect=l,a.unprotect=s,a.hide=i,a.unhide=u,a.like=c,a.unlike=d,a.patch=f,a.remove=p,a.markAsBestAnswer=m,a.unmarkBestAnswer=h,a.patchThread=b;var v=e("moment"),_=r(v),g=e("../../../../reducers/thread"),y=n(g),E=e("../../../../reducers/post"),w=n(E),O=e("../../../../services/ajax"),k=r(O),N=e("../../../../services/snackbar"),x=r(N),P=e("../../../../services/store"),j=r(P)},{"../../../../reducers/post":353,"../../../../reducers/thread":360,"../../../../services/ajax":365,"../../../../services/snackbar":376,"../../../../services/store":377,moment:"moment"}],156:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(a,"__esModule",{value:!0}),a.Delete=a.Unhide=a.Hide=a.Unprotect=a.Protect=a.Split=a.Move=a.Approve=a.PostEdits=a.UnmarkMarkBestAnswer=a.MarkAsBestAnswer=a.Edit=a.Permalink=void 0;var i=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();a["default"]=function(e){return c["default"].createElement("ul",{className:"dropdown-menu dropdown-menu-right stick-to-bottom"},c["default"].createElement(O,e),c["default"].createElement(k,e),c["default"].createElement(N,e),c["default"].createElement(x,e),c["default"].createElement(P,e),c["default"].createElement(j,e),c["default"].createElement(C,e),c["default"].createElement(S,e),c["default"].createElement(M,e),c["default"].createElement(T,e),c["default"].createElement(L,e),c["default"].createElement(A,e),c["default"].createElement(R,e))};var u=e("react"),c=r(u),d=e("../../../../services/modal"),f=r(d),p=e("../../../../services/posting"),m=r(p),h=e("./actions"),b=n(h),v=e("./move"),_=r(v),g=e("../../../post-changelog"),y=r(g),E=e("./split"),w=r(E),O=a.Permalink=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){var e=window.location.protocol+"//";e+=window.location.host,e+=n.props.post.url.index,prompt(gettext("Permament link to this post:"),e)},r=a,l(n,r)}return s(t,e),i(t,[{key:"render",value:function(){return c["default"].createElement("li",null,c["default"].createElement("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},c["default"].createElement("span",{className:"material-icon"},"link"),gettext("Permament link")))}}]),t}(c["default"].Component),k=a.Edit=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){m["default"].open({mode:"EDIT",config:n.props.post.api.editor,submit:n.props.post.api.index})},r=a,l(n,r)}return s(t,e),i(t,[{key:"render",value:function(){return this.props.post.acl.can_edit?c["default"].createElement("li",null,c["default"].createElement("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},c["default"].createElement("span",{className:"material-icon"},"edit"),gettext("Edit"))):null}}]),t}(c["default"].Component),N=a.MarkAsBestAnswer=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){b.markAsBestAnswer(n.props)},r=a,l(n,r)}return s(t,e),i(t,[{key:"render",value:function(){var e=this.props,t=e.post,a=e.thread;return a.acl.can_mark_best_answer&&t.acl.can_mark_as_best_answer?t.id===a.best_answer?null:a.best_answer&&!a.acl.can_change_best_answer?null:c["default"].createElement("li",null,c["default"].createElement("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},c["default"].createElement("span",{className:"material-icon"},"check_box"),gettext("Mark as best answer"))):null}}]),t}(c["default"].Component),x=a.UnmarkMarkBestAnswer=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){b.unmarkBestAnswer(n.props)},r=a,l(n,r)}return s(t,e),i(t,[{key:"render",value:function(){var e=this.props,t=e.post,a=e.thread;return t.id!==a.best_answer?null:a.acl.can_unmark_best_answer?c["default"].createElement("li",null,c["default"].createElement("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},c["default"].createElement("span",{className:"material-icon"},"check_box_outline_blank"),gettext("Unmark best answer"))):null}}]),t}(c["default"].Component),P=a.PostEdits=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){f["default"].show(c["default"].createElement(y["default"],{post:n.props.post}))},r=a,l(n,r)}return s(t,e),i(t,[{key:"render",value:function(){var e=this.props.post.is_hidden&&!this.props.post.acl.can_see_hidden,t=0===this.props.post.edits;if(e||t)return null;var a=ngettext("This post was edited %(edits)s time.","This post was edited %(edits)s times.",this.props.post.edits);interpolate(a,{edits:this.props.post.edits},!0);return c["default"].createElement("li",null,c["default"].createElement("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},c["default"].createElement("span",{className:"material-icon"},"edit"),gettext("Changes history")))}}]),t}(c["default"].Component),j=a.Approve=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){b.approve(n.props)},r=a,l(n,r)}return s(t,e),i(t,[{key:"render",value:function(){return this.props.post.acl.can_approve&&this.props.post.is_unapproved?c["default"].createElement("li",null,c["default"].createElement("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},c["default"].createElement("span",{className:"material-icon"},"done"),gettext("Approve"))):null}}]),t}(c["default"].Component),C=a.Move=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){f["default"].show(c["default"].createElement(_["default"],n.props))},r=a,l(n,r)}return s(t,e),i(t,[{key:"render",value:function(){return this.props.post.acl.can_move?c["default"].createElement("li",null,c["default"].createElement("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},c["default"].createElement("span",{className:"material-icon"},"arrow_forward"),gettext("Move"))):null}}]),t}(c["default"].Component),S=a.Split=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){f["default"].show(c["default"].createElement(w["default"],n.props))},r=a,l(n,r)}return s(t,e),i(t,[{key:"render",value:function(){return this.props.post.acl.can_move?c["default"].createElement("li",null,c["default"].createElement("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},c["default"].createElement("span",{className:"material-icon"},"call_split"),gettext("Split"))):null}}]),t}(c["default"].Component),M=a.Protect=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){b.protect(n.props)},r=a,l(n,r)}return s(t,e),i(t,[{key:"render",value:function(){return this.props.post.acl.can_protect?this.props.post.is_protected?null:c["default"].createElement("li",null,c["default"].createElement("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},c["default"].createElement("span",{className:"material-icon"},"lock_outline"),gettext("Protect"))):null}}]),t}(c["default"].Component),T=a.Unprotect=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){b.unprotect(n.props)},r=a,l(n,r)}return s(t,e),i(t,[{key:"render",value:function(){return this.props.post.acl.can_protect&&this.props.post.is_protected?c["default"].createElement("li",null,c["default"].createElement("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},c["default"].createElement("span",{className:"material-icon"},"lock_open"),gettext("Remove protection"))):null}}]),t}(c["default"].Component),L=a.Hide=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){b.hide(n.props)},r=a,l(n,r)}return s(t,e),i(t,[{key:"render",value:function(){var e=this.props,t=e.post,a=e.thread;return t.id===a.best_answer?null:t.acl.can_hide?t.is_hidden?null:c["default"].createElement("li",null,c["default"].createElement("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},c["default"].createElement("span",{className:"material-icon"},"visibility_off"),gettext("Hide"))):null}}]),t}(c["default"].Component),A=a.Unhide=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){b.unhide(n.props)},r=a,l(n,r)}return s(t,e),i(t,[{key:"render",value:function(){return this.props.post.acl.can_unhide&&this.props.post.is_hidden?c["default"].createElement("li",null,c["default"].createElement("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},c["default"].createElement("span",{className:"material-icon"},"visibility"),gettext("Unhide"))):null}}]),t}(c["default"].Component),R=a.Delete=function(e){function t(){var e,a,n,r;o(this,t);for(var s=arguments.length,i=Array(s),u=0;u<s;u++)i[u]=arguments[u];return a=n=l(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),n.onClick=function(){b.remove(n.props)},r=a,l(n,r)}return s(t,e),i(t,[{key:"render",value:function(){var e=this.props,t=e.post,a=e.thread;return t.id===a.best_answer?null:t.acl.can_delete?c["default"].createElement("li",null,c["default"].createElement("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},c["default"].createElement("span",{className:"material-icon"},"clear"),gettext("Delete"))):null}}]),t}(c["default"].Component)},{"../../../../services/modal":371,"../../../../services/posting":375,"../../../post-changelog":119,"./actions":155,"./move":158,"./split":159,react:"react"}],157:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0}),a["default"]=function(e){return o["default"].createElement("div",{className:"pull-right dropdown"},o["default"].createElement("button",{"aria-expanded":"true","aria-haspopup":"true",className:"btn btn-default btn-icon dropdown-toggle","data-toggle":"dropdown",type:"button"},o["default"].createElement("span",{className:"material-icon"},"expand_more")),o["default"].createElement(s["default"],e))};var r=e("react"),o=n(r),l=e("./dropdown"),s=n(l)},{"./dropdown":156,react:"react"}],158:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return d["default"].createElement("div",{className:"modal-header"},d["default"].createElement("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},d["default"].createElement("span",{"aria-hidden":"true"},"×")),d["default"].createElement("h4",{className:"modal-title"},gettext("Move post")))}Object.defineProperty(a,"__esModule",{value:!0});var u=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();a.ModalHeader=i;var c=e("react"),d=r(c),f=e("../../../button"),p=(r(f),e("../../../form")),m=r(p),h=e("../../../form-group"),b=r(h),v=e("../../../../reducers/post"),_=n(v),g=e("../../../../services/ajax"),y=r(g),E=e("../../../../services/modal"),w=r(E),O=e("../../../../services/snackbar"),k=r(O),N=e("../../../../services/store"),x=r(N),P=function(e){function t(e){o(this,t);var a=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.onUrlChange=function(e){a.changeValue("url",e.target.value)},a.state={isLoading:!1,url:"",validators:{url:[]},errors:{}},a}return s(t,e),u(t,[{key:"clean",value:function(){return!!this.state.url.trim().length||(k["default"].error(gettext("You have to enter link to the other thread.")),!1)}},{key:"send",value:function(){return y["default"].post(this.props.thread.api.posts.move,{new_thread:this.state.url,posts:[this.props.post.id]})}},{key:"handleSuccess",value:function(e){x["default"].dispatch(_.patch(this.props.post,{isDeleted:!0})),w["default"].hide(),k["default"].success(gettext("Selected post was moved to the other thread."))}},{key:"handleError",value:function(e){400===e.status?k["default"].error(e.detail):k["default"].apiError(e)}},{key:"render",value:function(){return d["default"].createElement("div",{className:"modal-dialog",role:"document"},d["default"].createElement("form",{onSubmit:this.handleSubmit},d["default"].createElement("div",{className:"modal-content"},d["default"].createElement(i,null),d["default"].createElement("div",{className:"modal-body"},d["default"].createElement(b["default"],{"for":"id_url",label:gettext("Link to thread you want to move post to")},d["default"].createElement("input",{className:"form-control",disabled:this.state.isLoading,id:"id_url",onChange:this.onUrlChange,value:this.state.url}))),d["default"].createElement("div",{className:"modal-footer"},d["default"].createElement("button",{className:"btn btn-primary",loading:this.state.isLoading},gettext("Move post"))))))}}]),t}(m["default"]);a["default"]=P},{"../../../../reducers/post":353,"../../../../services/ajax":365,"../../../../services/modal":371,"../../../../services/snackbar":376,"../../../../services/store":377,"../../../button":8,"../../../form":56,"../../../form-group":55,react:"react"}],159:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(){return m["default"].createElement(c,{className:"modal-dialog"},m["default"].createElement(k["default"],null))}function u(e){return m["default"].createElement(c,{className:"modal-dialog modal-message"},m["default"].createElement("div",{className:"message-icon"},m["default"].createElement("span",{className:"material-icon"},"info_outline")),m["default"].createElement("div",{className:"message-body"},m["default"].createElement("p",{className:"lead"},gettext("You can't move this post at the moment.")),m["default"].createElement("p",null,e.message)))}function c(e){return m["default"].createElement("div",{className:e.className,role:"document"},m["default"].createElement("div",{className:"modal-content"},m["default"].createElement("div",{className:"modal-header"},m["default"].createElement("button",{"aria-label":gettext("Close"),className:"close","data-dismiss":"modal",type:"button"},m["default"].createElement("span",{"aria-hidden":"true"},"×")),m["default"].createElement("h4",{className:"modal-title"},gettext("Split post into new thread"))),e.children))}Object.defineProperty(a,"__esModule",{value:!0}),a.ModerationForm=a.PostingConfig=void 0;var d=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e};a["default"]=function(e){return m["default"].createElement(B,f({},e,{Form:H}))},a.Loader=i,a.Error=u,a.Modal=c;var p=e("react"),m=r(p),h=e("../../../button"),b=r(h),v=e("../../../form"),_=r(v),g=e("../../../form-group"),y=r(g),E=e("../../../category-select"),w=r(E),O=e("../../../modal-loader"),k=r(O),N=e("../../../select"),x=r(N),P=e("../../../../reducers/post"),j=n(P),C=e("../../../../services/ajax"),S=r(C),M=e("../../../../services/modal"),T=r(M),L=e("../../../../services/snackbar"),A=r(L),R=e("../../../../services/store"),I=r(R),D=e("../../../../utils/validators"),U=n(D),B=a.PostingConfig=function(e){function t(e){o(this,t);var a=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.state={isLoaded:!1,isError:!1,categories:[]},a}return s(t,e),d(t,[{key:"componentDidMount",value:function(){var e=this;S["default"].get(misago.get("THREAD_EDITOR_API")).then(function(t){var a=t.map(function(e){return Object.assign(e,{disabled:e.post===!1,label:e.name,value:e.id,post:e.post})});e.setState({isLoaded:!0,categories:a})},function(t){e.setState({isError:t.detail})})}},{key:"render",value:function(){return this.state.isError?m["default"].createElement(u,{message:this.state.isError}):this.state.isLoaded?m["default"].createElement(H,f({},this.props,{categories:this.state.categories})):m["default"].createElement(i,null)}}]),t}(m["default"].Component),H=a.ModerationForm=function(e){function t(e){o(this,t);var a=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return a.onCategoryChange=function(e){var t=e.target.value,n={category:t};a.acl[t].can_pin_threads<n.weight&&(n.weight=0),a.acl[t].can_hide_threads||(n.is_hidden=0),a.acl[t].can_close_threads||(n.is_closed=!1),a.setState(n)},a.state={isLoading:!1,title:"",category:null,categories:e.categories,weight:0,is_hidden:0,is_closed:!1,validators:{title:[U.required()]},errors:{}},a.isHiddenChoices=[{value:0,icon:"visibility",label:gettext("No")},{value:1,icon:"visibility_off",label:gettext("Yes")}],a.isClosedChoices=[{value:!1,icon:"lock_outline",label:gettext("No")},{value:!0,icon:"lock",label:gettext("Yes")}],a.acl={},a.props.categories.forEach(function(e){e.post&&(a.state.category||(a.state.category=e.id),a.acl[e.id]={can_pin_threads:e.post.pin,can_close_threads:e.post.close,can_hide_threads:e.post.hide})}),a}return s(t,e),d(t,[{key:"clean",value:function(){return!!this.isValid()||(A["default"].error(gettext("Form contains errors.")),this.setState({errors:this.validate()}),!1)}},{key:"send",value:function(){return S["default"].post(this.props.thread.api.posts.split,{title:this.state.title,category:this.state.category,weight:this.state.weight,is_hidden:this.state.is_hidden,is_closed:this.state.is_closed,posts:[this.props.post.id]})}},{key:"handleSuccess",value:function(e){I["default"].dispatch(j.patch(this.props.post,{isDeleted:!0})),T["default"].hide(),A["default"].success(gettext("Selected post was split into new thread."))}},{key:"handleError",value:function(e){400===e.status?(this.setState({errors:Object.assign({},this.state.errors,e)}),A["default"].error(gettext("Form contains errors."))):403===e.status&&Array.isArray(e)?T["default"].show(m["default"].createElement(ErrorsModal,{errors:e})):A["default"].apiError(e)}},{key:"getWeightChoices",value:function(){var e=[{value:0,icon:"remove",label:gettext("Not pinned")},{value:1,icon:"bookmark_border",label:gettext("Pinned locally")}];return 2==this.acl[this.state.category].can_pin_threads&&e.push({value:2,icon:"bookmark",label:gettext("Pinned globally")}),e}},{key:"renderWeightField",value:function(){return this.acl[this.state.category].can_pin_threads?m["default"].createElement(y["default"],{label:gettext("Thread weight"),"for":"id_weight",labelClass:"col-sm-4",controlClass:"col-sm-8"},m["default"].createElement(x["default"],{id:"id_weight",onChange:this.bindInput("weight"),value:this.state.weight,choices:this.getWeightChoices()})):null}},{key:"renderHiddenField",value:function(){return this.acl[this.state.category].can_hide_threads?m["default"].createElement(y["default"],{label:gettext("Hide thread"),"for":"id_is_hidden",labelClass:"col-sm-4",controlClass:"col-sm-8"},m["default"].createElement(x["default"],{id:"id_is_closed",onChange:this.bindInput("is_hidden"),value:this.state.is_hidden,choices:this.isHiddenChoices})):null}},{key:"renderClosedField",value:function(){return this.acl[this.state.category].can_close_threads?m["default"].createElement(y["default"],{label:gettext("Close thread"),"for":"id_is_closed",labelClass:"col-sm-4",controlClass:"col-sm-8"},m["default"].createElement(x["default"],{id:"id_is_closed",onChange:this.bindInput("is_closed"),value:this.state.is_closed,choices:this.isClosedChoices})):null}},{key:"render",value:function(){return m["default"].createElement(c,{className:"modal-dialog"},m["default"].createElement("form",{onSubmit:this.handleSubmit},m["default"].createElement("div",{className:"modal-body"},m["default"].createElement(y["default"],{label:gettext("Thread title"),"for":"id_title",labelClass:"col-sm-4",controlClass:"col-sm-8",validation:this.state.errors.title},m["default"].createElement("input",{id:"id_title",className:"form-control",type:"text",onChange:this.bindInput("title"),value:this.state.title})),m["default"].createElement("div",{className:"clearfix"}),m["default"].createElement(y["default"],{label:gettext("Category"),"for":"id_category",labelClass:"col-sm-4",controlClass:"col-sm-8",validation:this.state.errors.category},m["default"].createElement(w["default"],{id:"id_category",onChange:this.onCategoryChange,value:this.state.category,choices:this.state.categories})),m["default"].createElement("div",{className:"clearfix"}),this.renderWeightField(),this.renderHiddenField(),this.renderClosedField()),m["default"].createElement("div",{className:"modal-footer"},m["default"].createElement(b["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Split post")))))}}]),t}(_["default"])},{"../../../../reducers/post":353,"../../../../services/ajax":365,"../../../../services/modal":371,"../../../../services/snackbar":376,"../../../../services/store":377,"../../../../utils/validators":393,"../../../button":8,"../../../category-select":21,"../../../form":56,"../../../form-group":55,"../../../modal-loader":61,"../../../select":210,react:"react"}],160:[function(e,t,a){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){var t=e.post,a=e.thread,n=e.user;if(!i(t)||t.id!==a.best_answer)return null;var r=null;return r=n.id&&a.best_answer_marked_by===n.id?interpolate(gettext("Marked as best answer by you %(marked_on)s."),{marked_on:a.best_answer_marked_on.fromNow()},!0):interpolate(gettext("Marked as best answer by %(marked_by)s %(marked_on)s."),{marked_by:a.best_answer_marked_by_name,marked_on:a.best_answer_marked_on.fromNow()},!0),c["default"].createElement("div",{className:"post-status-message post-status-best-answer"},c["default"].createElement("span",{className:"material-icon"},"check_box"),c["default"].createElement("p",null,r))}function o(e){return i(e.post)&&e.post.is_hidden?c["default"].createElement("div",{className:"post-status-message post-status-hidden"},c["default"].createElement("span",{className:"material-icon"},"visibility_off"),c["default"].createElement("p",null,gettext("This post is hidden. Only users with permission may see its contents."))):null}function l(e){return i(e.post)&&e.post.is_unapproved?c["default"].createElement("div",{className:"post-status-message post-status-unapproved"},c["default"].createElement("span",{className:"material-icon"},"remove_circle_outline"),c["default"].createElement("p",null,gettext("This post is unapproved. Only users with permission to approve posts and its author may see its contents."))):null}function s(e){return i(e.post)&&e.post.is_protected?c["default"].createElement("div",{className:"post-status-message post-status-protected visible-xs-block"},c["default"].createElement("span",{className:"material-icon"},"lock_outline"),c["default"].createElement("p",null,gettext("This post is protected. Only moderators may change it."))):null}function i(e){return!e.is_hidden||e.acl.can_see_hidden}Object.defineProperty(a,"__esModule",{value:!0}),a.FlagBestAnswer=r,a.FlagHidden=o,a.FlagUnapproved=l,a.FlagProtected=s,a.isVisible=i;var u=e("react"),c=n(u)},{react:"react"}],161:[function(e,t,a){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return(!e.is_hidden||e.acl.can_see_hidden)&&(e.acl.can_reply||e.acl.can_edit||e.acl.can_see_likes&&(e.last_likes||[]).length||e.acl.can_like)}function u(e,t){var a=t.slice(0,3).map(function(e){return e.username});if(1==a.length)return interpolate(gettext("%(user)s likes this."),{user:a[0]},!0);var n=e-a.length,r=a.slice(0,-1).join(", "),o=a.slice(-1)[0],l=interpolate(gettext("%(users)s and %(last_user)s"),{users:r,last_user:o},!0);if(0===n)return interpolate(gettext("%(users)s like this."),{users:l},!0);var s=ngettext("%(users)s and %(likes)s other user like this.","%(users)s and %(likes)s other users like this.",n);return interpolate(s,{users:a.join(", "),likes:n},!0)}Object.defineProperty(a,"__esModule",{value:!0}),a.Edit=a.Reply=a.LikesCompact=a.Likes=a.Like=a.MarkAsBestAnswerCompact=a.MarkAsBestAnswer=void 0;var c=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),d=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e};a["default"]=function(e){return i(e.post)?p["default"].createElement("div",{className:"post-footer"},p["default"].createElement(w,e),p["default"].createElement(O,e),p["default"].createElement(k,e),p["default"].createElement(N,d({lastLikes:e.post.last_likes,likes:e.post.likes},e)),p["default"].createElement(x,d({likes:e.post.likes},e)),p["default"].createElement(P,e),p["default"].createElement(j,e)):null},a.isVisible=i,a.getLikesMessage=u;var f=e("react"),p=r(f),m=e("./controls/actions"),h=n(m),b=e("../../post-likes"),v=r(b),_=e("../../../services/modal"),g=r(_),y=e("../../../services/posting"),E=r(y),w=a.MarkAsBestAnswer=function(e){

File diff suppressed because it is too large
+ 0 - 0
misago/static/misago/js/misago.js.map


Some files were not shown because too many files changed in this diff