Forráskód Böngészése

Add info icon in room header and show room details in modal

JC Brand 7 éve
szülő
commit
78d6d493d6

+ 22 - 19
css/converse.css

@@ -6938,6 +6938,8 @@ body.reset {
     min-height: 0; }
     min-height: 0; }
   #conversejs strong {
   #conversejs strong {
     font-weight: 700; }
     font-weight: 700; }
+  #conversejs em {
+    font-style: italic; }
   #conversejs ol, #conversejs ul {
   #conversejs ol, #conversejs ul {
     list-style: none; }
     list-style: none; }
   #conversejs li {
   #conversejs li {
@@ -8443,6 +8445,26 @@ body.reset {
 #conversejs .add-chatroom input[type="submit"],
 #conversejs .add-chatroom input[type="submit"],
 #conversejs .add-chatroom input[type="button"] {
 #conversejs .add-chatroom input[type="button"] {
   margin: 0.3em 0; }
   margin: 0.3em 0; }
+#conversejs.converse-embedded #room-details-modal .features-list,
+#conversejs #room-details-modal .features-list {
+  margin-left: 1em; }
+#conversejs.converse-embedded .chatroom-features,
+#conversejs .chatroom-features {
+  width: 100%; }
+  #conversejs.converse-embedded .chatroom-features .features-list,
+  #conversejs .chatroom-features .features-list {
+    padding-top: 0; }
+    #conversejs.converse-embedded .chatroom-features .features-list .feature,
+    #conversejs .chatroom-features .features-list .feature {
+      width: 100%;
+      margin-right: 0.5em;
+      padding-right: 0;
+      font-size: 1em;
+      cursor: help; }
+      #conversejs.converse-embedded .chatroom-features .features-list .feature .fa,
+      #conversejs .chatroom-features .features-list .feature .fa {
+        margin-right: 0.5em;
+        color: #666; }
 #conversejs.converse-embedded .chat-head-chatroom,
 #conversejs.converse-embedded .chat-head-chatroom,
 #conversejs .chat-head-chatroom {
 #conversejs .chat-head-chatroom {
   background-color: #E77051; }
   background-color: #E77051; }
@@ -8567,16 +8589,6 @@ body.reset {
           #conversejs .chatroom .box-flyout .chatroom-body .occupants .occupants-header .occupants-heading {
           #conversejs .chatroom .box-flyout .chatroom-body .occupants .occupants-header .occupants-heading {
             font-family: "Century Gothic", futura, "URW Gothic L", Verdana, sans-serif;
             font-family: "Century Gothic", futura, "URW Gothic L", Verdana, sans-serif;
             padding: 0.3em 0; }
             padding: 0.3em 0; }
-        #conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .chatroom-features,
-        #conversejs .chatroom .box-flyout .chatroom-body .occupants .chatroom-features {
-          width: 100%; }
-          #conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .chatroom-features .feature,
-          #conversejs .chatroom .box-flyout .chatroom-body .occupants .chatroom-features .feature {
-            float: left;
-            margin-right: 0.5em;
-            padding-right: 0;
-            font-size: 1em;
-            cursor: help; }
         #conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .awesomplete ul,
         #conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .awesomplete ul,
         #conversejs .chatroom .box-flyout .chatroom-body .occupants .awesomplete ul {
         #conversejs .chatroom .box-flyout .chatroom-body .occupants .awesomplete ul {
           padding: 0; }
           padding: 0; }
@@ -8596,15 +8608,6 @@ body.reset {
             flex-basis: 0;
             flex-basis: 0;
             flex-grow: 1;
             flex-grow: 1;
             border-bottom: 1px solid lightgrey; }
             border-bottom: 1px solid lightgrey; }
-          #conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul.features-list,
-          #conversejs .chatroom .box-flyout .chatroom-body .occupants ul.features-list {
-            padding-top: 0; }
-            #conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul.features-list .feature,
-            #conversejs .chatroom .box-flyout .chatroom-body .occupants ul.features-list .feature {
-              width: 100%; }
-              #conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul.features-list .feature .fa,
-              #conversejs .chatroom .box-flyout .chatroom-body .occupants ul.features-list .feature .fa {
-                color: #666; }
           #conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li,
           #conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li,
           #conversejs .chatroom .box-flyout .chatroom-body .occupants ul li {
           #conversejs .chatroom .box-flyout .chatroom-body .occupants ul li {
             cursor: default;
             cursor: default;

+ 2 - 2
dev.html

@@ -32,8 +32,8 @@
         notify_all_room_messages: [
         notify_all_room_messages: [
             'discuss@conference.conversejs.org'
             'discuss@conference.conversejs.org'
         ],
         ],
-        // bosh_service_url: 'http://chat.example.org:5280/http-bind/',
-        bosh_service_url: 'https://conversejs.org/http-bind/', // Please use this connection manager only for testing purposes
+        bosh_service_url: 'http://chat.example.org:5280/http-bind/',
+        // bosh_service_url: 'https://conversejs.org/http-bind/', // Please use this connection manager only for testing purposes
         message_archiving: 'always',
         message_archiving: 'always',
         debug: true
         debug: true
     });
     });

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 190 - 225
dist/converse-no-dependencies.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 2 - 0
dist/converse.js


+ 602 - 737
locale/converse.pot

@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: Converse.js 3.3.4\n"
 "Project-Id-Version: Converse.js 3.3.4\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-05-17 11:19+0200\n"
+"POT-Creation-Date: 2018-06-04 18:44+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,688 +17,402 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Content-Transfer-Encoding: 8bit\n"
 
 
-#: dist/converse-no-dependencies.js:9853 dist/converse-no-dependencies.js:9882
-msgid "Download"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:9872
-#, javascript-format
-msgid "Download: \"%1$s"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:9895
-msgid "Download video file"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:9908
-msgid "Download audio file"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:11229
-msgid "The connection has dropped, attempting to reconnect."
-msgstr ""
-
-#: dist/converse-no-dependencies.js:11327
-msgid "An error occurred while connecting to the chat server."
-msgstr ""
-
-#: dist/converse-no-dependencies.js:11334
-msgid "Your Jabber ID and/or password is incorrect. Please try again."
-msgstr ""
-
-#: dist/converse-no-dependencies.js:11346
-#, javascript-format
-msgid "Sorry, we could not connect to the XMPP host with domain: %1$s"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:11348
-msgid "The XMPP server did not offer a supported authentication mechanism"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:16016
-#, javascript-format
-msgid "%1$s has invited you to join a chat room: %2$s"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:16018
-#, javascript-format
-msgid ""
-"%1$s has invited you to join a chat room: %2$s, and left the following "
-"reason: \"%3$s\""
-msgstr ""
-
-#: dist/converse-no-dependencies.js:16379
-#: dist/converse-no-dependencies.js:16464
-#: dist/converse-no-dependencies.js:33114
+#: dist/converse-no-dependencies.js:34242
+#: dist/converse-no-dependencies.js:34327
+#: dist/converse-no-dependencies.js:46646
 msgid "Bookmark this room"
 msgid "Bookmark this room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:16465
+#: dist/converse-no-dependencies.js:34328
 msgid "The name for this bookmark:"
 msgid "The name for this bookmark:"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:16466
+#: dist/converse-no-dependencies.js:34329
 msgid "Would you like this room to be automatically joined upon startup?"
 msgid "Would you like this room to be automatically joined upon startup?"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:16467
+#: dist/converse-no-dependencies.js:34330
 msgid "What should your nickname for this room be?"
 msgid "What should your nickname for this room be?"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:16469
-#: dist/converse-no-dependencies.js:25296
-#: dist/converse-no-dependencies.js:25380
+#: dist/converse-no-dependencies.js:34332
+#: dist/converse-no-dependencies.js:42768
+#: dist/converse-no-dependencies.js:45592
+#: dist/converse-no-dependencies.js:45677
 msgid "Save"
 msgid "Save"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:16470
-#: dist/converse-no-dependencies.js:25376
-#: dist/converse-no-dependencies.js:32190
+#: dist/converse-no-dependencies.js:34333
+#: dist/converse-no-dependencies.js:42769
+#: dist/converse-no-dependencies.js:45673
+#: dist/converse-no-dependencies.js:51631
 msgid "Cancel"
 msgid "Cancel"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:16543
+#: dist/converse-no-dependencies.js:34406
 #, javascript-format
 #, javascript-format
 msgid "Are you sure you want to remove the bookmark \"%1$s\"?"
 msgid "Are you sure you want to remove the bookmark \"%1$s\"?"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:16659
+#: dist/converse-no-dependencies.js:34522
 msgid "Sorry, something went wrong while trying to save your bookmark."
 msgid "Sorry, something went wrong while trying to save your bookmark."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:16738
-#: dist/converse-no-dependencies.js:33112
+#: dist/converse-no-dependencies.js:34601
+#: dist/converse-no-dependencies.js:46644
 msgid "Leave this room"
 msgid "Leave this room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:16739
+#: dist/converse-no-dependencies.js:34602
 msgid "Remove this bookmark"
 msgid "Remove this bookmark"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:16740
-#: dist/converse-no-dependencies.js:33113
+#: dist/converse-no-dependencies.js:34603
+#: dist/converse-no-dependencies.js:46645
 msgid "Unbookmark this room"
 msgid "Unbookmark this room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:16741
-#: dist/converse-no-dependencies.js:28819
-#: dist/converse-no-dependencies.js:33115
+#: dist/converse-no-dependencies.js:34604
+#: dist/converse-no-dependencies.js:42041
+#: dist/converse-no-dependencies.js:46647
 msgid "Show more information on this room"
 msgid "Show more information on this room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:16744
-#: dist/converse-no-dependencies.js:28818
-#: dist/converse-no-dependencies.js:33117
+#: dist/converse-no-dependencies.js:34607
+#: dist/converse-no-dependencies.js:42040
+#: dist/converse-no-dependencies.js:46649
 msgid "Click to open this room"
 msgid "Click to open this room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:16780
+#: dist/converse-no-dependencies.js:34643
 msgid "Click to toggle the bookmarks list"
 msgid "Click to toggle the bookmarks list"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:16781
+#: dist/converse-no-dependencies.js:34644
 msgid "Bookmarks"
 msgid "Bookmarks"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:21217
+#: dist/converse-no-dependencies.js:35089
 msgid "Sorry, could not determine file upload URL."
 msgid "Sorry, could not determine file upload URL."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:21225
+#: dist/converse-no-dependencies.js:35097
 msgid "Sorry, could not determine upload URL."
 msgid "Sorry, could not determine upload URL."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:21257
+#: dist/converse-no-dependencies.js:35129
 msgid "Sorry, could not succesfully upload your file."
 msgid "Sorry, could not succesfully upload your file."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:21260
+#: dist/converse-no-dependencies.js:35132
 #, javascript-format
 #, javascript-format
 msgid "Your server's response: \"%1$s\""
 msgid "Your server's response: \"%1$s\""
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:21442
+#: dist/converse-no-dependencies.js:35306
 msgid "Sorry, looks like file upload is not supported by your server."
 msgid "Sorry, looks like file upload is not supported by your server."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:21452
+#: dist/converse-no-dependencies.js:35316
 #, javascript-format
 #, javascript-format
 msgid ""
 msgid ""
 "The size of your file, %1$s, exceeds the maximum allowed by your server, "
 "The size of your file, %1$s, exceeds the maximum allowed by your server, "
 "which is %2$s."
 "which is %2$s."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22197
-msgid "Show more"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:22248
-msgid "Typing from another device"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:22250
-msgid "is typing"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:22254
-msgid "Stopped typing on the other device"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:22256
-msgid "has stopped typing"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:22259
-#: dist/converse-no-dependencies.js:23256
-#: dist/converse-no-dependencies.js:30521
-msgid "has gone away"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:22488
+#: dist/converse-no-dependencies.js:36039
 msgid "Close this chat box"
 msgid "Close this chat box"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22516
+#: dist/converse-no-dependencies.js:36067
 msgid "The User's Profile Image"
 msgid "The User's Profile Image"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22519
-#: dist/converse-no-dependencies.js:25289
-#: dist/converse-no-dependencies.js:25374
+#: dist/converse-no-dependencies.js:36070
+#: dist/converse-no-dependencies.js:45585
+#: dist/converse-no-dependencies.js:45671
 msgid "Close"
 msgid "Close"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22520
-#: dist/converse-no-dependencies.js:25290
+#: dist/converse-no-dependencies.js:36071
+#: dist/converse-no-dependencies.js:45586
 msgid "Email"
 msgid "Email"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22521
-#: dist/converse-no-dependencies.js:25291
+#: dist/converse-no-dependencies.js:36072
+#: dist/converse-no-dependencies.js:45587
 msgid "Full Name"
 msgid "Full Name"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22522
+#: dist/converse-no-dependencies.js:36073
 msgid "Jabber ID"
 msgid "Jabber ID"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22523
-#: dist/converse-no-dependencies.js:25292
-#: dist/converse-no-dependencies.js:29617
+#: dist/converse-no-dependencies.js:36074
+#: dist/converse-no-dependencies.js:42924
+#: dist/converse-no-dependencies.js:45588
 msgid "Nickname"
 msgid "Nickname"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22524
+#: dist/converse-no-dependencies.js:36075
 msgid "Remove as contact"
 msgid "Remove as contact"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22525
+#: dist/converse-no-dependencies.js:36076
 msgid "Refresh"
 msgid "Refresh"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22526
-#: dist/converse-no-dependencies.js:25294
+#: dist/converse-no-dependencies.js:36077
+#: dist/converse-no-dependencies.js:45590
 msgid "Role"
 msgid "Role"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22527
-#: dist/converse-no-dependencies.js:25297
+#: dist/converse-no-dependencies.js:36078
+#: dist/converse-no-dependencies.js:45593
 msgid "URL"
 msgid "URL"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22566
-#: dist/converse-no-dependencies.js:24293
+#: dist/converse-no-dependencies.js:36117
+#: dist/converse-no-dependencies.js:48307
 msgid "Are you sure you want to remove this contact?"
 msgid "Are you sure you want to remove this contact?"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22575
-#: dist/converse-no-dependencies.js:25325
+#: dist/converse-no-dependencies.js:36126
+#: dist/converse-no-dependencies.js:45621
 msgid "Error"
 msgid "Error"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22575
-#: dist/converse-no-dependencies.js:24301
+#: dist/converse-no-dependencies.js:36126
+#: dist/converse-no-dependencies.js:48315
 #, javascript-format
 #, javascript-format
 msgid "Sorry, there was an error while trying to remove %1$s as a contact."
 msgid "Sorry, there was an error while trying to remove %1$s as a contact."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22629
-#: dist/converse-no-dependencies.js:22667
-#: dist/converse-no-dependencies.js:29029
+#: dist/converse-no-dependencies.js:36180
+#: dist/converse-no-dependencies.js:36218
+#: dist/converse-no-dependencies.js:42291
 msgid "You have unread messages"
 msgid "You have unread messages"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22653
+#: dist/converse-no-dependencies.js:36204
 msgid "Hidden message"
 msgid "Hidden message"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22655
+#: dist/converse-no-dependencies.js:36206
 msgid "Personal message"
 msgid "Personal message"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22662
-#: dist/converse-no-dependencies.js:29026
+#: dist/converse-no-dependencies.js:36213
+#: dist/converse-no-dependencies.js:42288
 msgid "Send"
 msgid "Send"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22663
+#: dist/converse-no-dependencies.js:36214
 msgid "Optional hint"
 msgid "Optional hint"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22692
+#: dist/converse-no-dependencies.js:36252
 msgid "Choose a file to send"
 msgid "Choose a file to send"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22748
+#: dist/converse-no-dependencies.js:36308
 msgid "Click to write as a normal (non-spoiler) message"
 msgid "Click to write as a normal (non-spoiler) message"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22750
+#: dist/converse-no-dependencies.js:36310
 msgid "Click to write your message as a spoiler"
 msgid "Click to write your message as a spoiler"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22754
+#: dist/converse-no-dependencies.js:36314
 msgid "Clear all messages"
 msgid "Clear all messages"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22755
+#: dist/converse-no-dependencies.js:36315
 msgid "Insert emojis"
 msgid "Insert emojis"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:22756
+#: dist/converse-no-dependencies.js:36316
 msgid "Start a call"
 msgid "Start a call"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:23069
-#: dist/converse-no-dependencies.js:29265
+#: dist/converse-no-dependencies.js:36629
+#: dist/converse-no-dependencies.js:42567
 msgid "Remove messages"
 msgid "Remove messages"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:23069
+#: dist/converse-no-dependencies.js:36629
 msgid "Write in the third person"
 msgid "Write in the third person"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:23069
-#: dist/converse-no-dependencies.js:29267
+#: dist/converse-no-dependencies.js:36629
+#: dist/converse-no-dependencies.js:42567
 msgid "Show this menu"
 msgid "Show this menu"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:23164
+#: dist/converse-no-dependencies.js:36728
 msgid "Are you sure you want to clear the messages from this conversation?"
 msgid "Are you sure you want to clear the messages from this conversation?"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:23254
-#: dist/converse-no-dependencies.js:30519
+#: dist/converse-no-dependencies.js:36817
+#: dist/converse-no-dependencies.js:45285
 msgid "has gone offline"
 msgid "has gone offline"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:23258
-#: dist/converse-no-dependencies.js:30523
-msgid "is busy"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:23260
-msgid "is online"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:23501
-msgid "XMPP Username:"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:23507
-msgid "Password:"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:23509
-msgid "password"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:23513
-#: dist/converse-no-dependencies.js:29643
-msgid "Submit"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:23519
-msgid "Click here to log in anonymously"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:23864
-msgid "This contact is busy"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:23865
-msgid "This contact is online"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:23866
-msgid "This contact is offline"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:23867
-msgid "This contact is unavailable"
+#: dist/converse-no-dependencies.js:36819
+#: dist/converse-no-dependencies.js:41017
+#: dist/converse-no-dependencies.js:45287
+msgid "has gone away"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:23868
-msgid "This contact is away for an extended period"
+#: dist/converse-no-dependencies.js:36821
+#: dist/converse-no-dependencies.js:45289
+msgid "is busy"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:23869
-msgid "This contact is away"
+#: dist/converse-no-dependencies.js:36823
+msgid "is online"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:23872
-#: dist/converse-no-dependencies.js:24584
-#: dist/converse-no-dependencies.js:25680
+#: dist/converse-no-dependencies.js:37209
+#: dist/converse-no-dependencies.js:47885
+#: dist/converse-no-dependencies.js:48606
 msgid "Contacts"
 msgid "Contacts"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:23874
-msgid "Groups"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:23876
-msgid "My contacts"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:23878
-msgid "Pending contacts"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:23880
-msgid "Contact requests"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:23882
-msgid "Ungrouped"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:23925
-msgid "Contact name"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:23925
-#: dist/converse-no-dependencies.js:28905
-msgid "Optional nickname"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:23928
-msgid "Add a Contact"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:23929
-msgid "XMPP Address"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:23931
-msgid "name@example.org"
+#: dist/converse-no-dependencies.js:37447
+msgid "Username"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:23932
-msgid "Add"
+#: dist/converse-no-dependencies.js:37447
+msgid "user@domain"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:24003
-#: dist/converse-no-dependencies.js:25917
+#: dist/converse-no-dependencies.js:37455
+#: dist/converse-no-dependencies.js:48016
 msgid "Please enter a valid XMPP address"
 msgid "Please enter a valid XMPP address"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:24040
-msgid "Filter"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:24041
-msgid "Filter by contact name"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:24042
-msgid "Filter by group name"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:24043
-msgid "Filter by status"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:24044
-msgid "Any"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:24045
-msgid "Unread"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:24046
-#: dist/converse-no-dependencies.js:25379
-msgid "Online"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:24047
-msgid "Chatty"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:24048
-#: dist/converse-no-dependencies.js:25375
-msgid "Busy"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:24049
-#: dist/converse-no-dependencies.js:25373
-msgid "Away"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:24050
-msgid "Extended Away"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:24051
-#: dist/converse-no-dependencies.js:25378
-msgid "Offline"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:24205
-#: dist/converse-no-dependencies.js:24247
-#, javascript-format
-msgid "Click to remove %1$s as a contact"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:24214
-#, javascript-format
-msgid "Click to accept the contact request from %1$s"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:24215
-#, javascript-format
-msgid "Click to decline the contact request from %1$s"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:24246
-#, javascript-format
-msgid "Click to chat with %1$s (JID: %2$s)"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:24323
-msgid "Are you sure you want to decline this contact request?"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:24585
-msgid "Add a contact"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:25288
-msgid "Your Profile"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:25293
-msgid "XMPP Address (JID)"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:25295
-msgid ""
-"Use commas to separate multiple roles. Your roles are shown next to your "
-"name on your chat messages."
-msgstr ""
-
-#: dist/converse-no-dependencies.js:25298
-msgid "Your avatar image"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:25325
-msgid "Sorry, an error happened while trying to save your profile data."
-msgstr ""
-
-#: dist/converse-no-dependencies.js:25325
-msgid "You can check your browser's developer console for any error output."
+#: dist/converse-no-dependencies.js:37544
+msgid "Chat Contacts"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:25377
-msgid "Custom status"
+#: dist/converse-no-dependencies.js:37544
+msgid "Toggle chat"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:25381
-msgid "Away for long"
+#: dist/converse-no-dependencies.js:38122
+msgid "The connection has dropped, attempting to reconnect."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:25382
-msgid "Change chat status"
+#: dist/converse-no-dependencies.js:38220
+msgid "An error occurred while connecting to the chat server."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:25383
-msgid "Personal status message"
+#: dist/converse-no-dependencies.js:38227
+msgid "Your Jabber ID and/or password is incorrect. Please try again."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:25427
+#: dist/converse-no-dependencies.js:38239
 #, javascript-format
 #, javascript-format
-msgid "I am %1$s"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:25430
-msgid "Change settings"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:25431
-msgid "Click to change your chat status"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:25432
-msgid "Log out"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:25433
-msgid "Your profile"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:25456
-msgid "Are you sure you want to log out?"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:25464
-#: dist/converse-no-dependencies.js:25474
-msgid "online"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:25466
-msgid "busy"
-msgstr ""
-
-#: dist/converse-no-dependencies.js:25468
-msgid "away for long"
+msgid "Sorry, we could not connect to the XMPP host with domain: %1$s"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:25470
-msgid "away"
+#: dist/converse-no-dependencies.js:38241
+msgid "The XMPP server did not offer a supported authentication mechanism"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:25472
-msgid "offline"
+#: dist/converse-no-dependencies.js:40963
+msgid "Show more"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:25909
-msgid "Username"
+#: dist/converse-no-dependencies.js:41006
+msgid "Typing from another device"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:25909
-msgid "user@domain"
+#: dist/converse-no-dependencies.js:41008
+msgid "is typing"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:26003
-msgid "Chat Contacts"
+#: dist/converse-no-dependencies.js:41012
+msgid "Stopped typing on the other device"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:26003
-msgid "Toggle chat"
+#: dist/converse-no-dependencies.js:41014
+msgid "has stopped typing"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:27529
-#: dist/converse-no-dependencies.js:27572
+#: dist/converse-no-dependencies.js:41245
+#: dist/converse-no-dependencies.js:41288
 msgid "Minimize this chat box"
 msgid "Minimize this chat box"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:27705
+#: dist/converse-no-dependencies.js:41421
 msgid "Click to restore this chat"
 msgid "Click to restore this chat"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:27892
+#: dist/converse-no-dependencies.js:41608
 msgid "Minimized"
 msgid "Minimized"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28650
+#: dist/converse-no-dependencies.js:41937
 msgid "This room is not anonymous"
 msgid "This room is not anonymous"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28651
+#: dist/converse-no-dependencies.js:41938
 msgid "This room now shows unavailable members"
 msgid "This room now shows unavailable members"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28652
+#: dist/converse-no-dependencies.js:41939
 msgid "This room does not show unavailable members"
 msgid "This room does not show unavailable members"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28653
+#: dist/converse-no-dependencies.js:41940
 msgid "The room configuration has changed"
 msgid "The room configuration has changed"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28654
+#: dist/converse-no-dependencies.js:41941
 msgid "Room logging is now enabled"
 msgid "Room logging is now enabled"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28655
+#: dist/converse-no-dependencies.js:41942
 msgid "Room logging is now disabled"
 msgid "Room logging is now disabled"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28656
+#: dist/converse-no-dependencies.js:41943
 msgid "This room is now no longer anonymous"
 msgid "This room is now no longer anonymous"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28657
+#: dist/converse-no-dependencies.js:41944
 msgid "This room is now semi-anonymous"
 msgid "This room is now semi-anonymous"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28658
+#: dist/converse-no-dependencies.js:41945
 msgid "This room is now fully-anonymous"
 msgid "This room is now fully-anonymous"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28659
+#: dist/converse-no-dependencies.js:41946
 msgid "A new room has been created"
 msgid "A new room has been created"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28663
+#: dist/converse-no-dependencies.js:41949
 msgid "You have been banned from this room"
 msgid "You have been banned from this room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28664
+#: dist/converse-no-dependencies.js:41950
 msgid "You have been kicked from this room"
 msgid "You have been kicked from this room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28665
+#: dist/converse-no-dependencies.js:41951
 msgid "You have been removed from this room because of an affiliation change"
 msgid "You have been removed from this room because of an affiliation change"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28666
+#: dist/converse-no-dependencies.js:41952
 msgid ""
 msgid ""
 "You have been removed from this room because the room has changed to members-"
 "You have been removed from this room because the room has changed to members-"
 "only and you're not a member"
 "only and you're not a member"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28667
+#: dist/converse-no-dependencies.js:41953
 msgid ""
 msgid ""
 "You have been removed from this room because the MUC (Multi-user chat) "
 "You have been removed from this room because the MUC (Multi-user chat) "
 "service is being shut down"
 "service is being shut down"
@@ -714,798 +428,949 @@ msgstr ""
 #. * can then at least tell gettext to scan for it so that these
 #. * can then at least tell gettext to scan for it so that these
 #. * strings are picked up by the translation machinery.
 #. * strings are picked up by the translation machinery.
 #.
 #.
-#: dist/converse-no-dependencies.js:28681
+#: dist/converse-no-dependencies.js:41966
 #, javascript-format
 #, javascript-format
 msgid "%1$s has been banned"
 msgid "%1$s has been banned"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28682
+#: dist/converse-no-dependencies.js:41967
 #, javascript-format
 #, javascript-format
 msgid "%1$s's nickname has changed"
 msgid "%1$s's nickname has changed"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28683
+#: dist/converse-no-dependencies.js:41968
 #, javascript-format
 #, javascript-format
 msgid "%1$s has been kicked out"
 msgid "%1$s has been kicked out"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28684
+#: dist/converse-no-dependencies.js:41969
 #, javascript-format
 #, javascript-format
 msgid "%1$s has been removed because of an affiliation change"
 msgid "%1$s has been removed because of an affiliation change"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28685
+#: dist/converse-no-dependencies.js:41970
 #, javascript-format
 #, javascript-format
 msgid "%1$s has been removed for not being a member"
 msgid "%1$s has been removed for not being a member"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28689
+#: dist/converse-no-dependencies.js:41973
 #, javascript-format
 #, javascript-format
 msgid "Your nickname has been automatically set to %1$s"
 msgid "Your nickname has been automatically set to %1$s"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28690
+#: dist/converse-no-dependencies.js:41974
 #, javascript-format
 #, javascript-format
 msgid "Your nickname has been changed to %1$s"
 msgid "Your nickname has been changed to %1$s"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28724
-msgid "Description:"
+#: dist/converse-no-dependencies.js:41992
+msgid "Query for Chatrooms"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28725
-msgid "Room Address (JID):"
+#: dist/converse-no-dependencies.js:41993
+msgid "Server address"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28726
-msgid "Occupants:"
+#: dist/converse-no-dependencies.js:41994
+msgid "Show rooms"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28727
-msgid "Features:"
+#: dist/converse-no-dependencies.js:41995
+msgid "conference.example.org"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28728
-msgid "Requires authentication"
+#: dist/converse-no-dependencies.js:42053
+msgid "No rooms found"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28729
-#: dist/converse-no-dependencies.js:30122
-msgid "Hidden"
+#: dist/converse-no-dependencies.js:42070
+msgid "Rooms found:"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28730
-msgid "Requires an invitation"
+#: dist/converse-no-dependencies.js:42122
+msgid "Enter a new Chatroom"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28731
-#: dist/converse-no-dependencies.js:30125
-msgid "Moderated"
+#: dist/converse-no-dependencies.js:42123
+msgid "Room address"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28732
-#: dist/converse-no-dependencies.js:30126
-msgid "Non-anonymous"
+#: dist/converse-no-dependencies.js:42124
+#: dist/converse-no-dependencies.js:47938
+msgid "Optional nickname"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28733
-msgid "Open room"
+#: dist/converse-no-dependencies.js:42125
+msgid "name@conference.example.org"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28734
-msgid "Permanent room"
+#: dist/converse-no-dependencies.js:42126
+msgid "Join"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28735
-#: dist/converse-no-dependencies.js:30130
-msgid "Public"
+#: dist/converse-no-dependencies.js:42169
+msgid "Description:"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28736
-#: dist/converse-no-dependencies.js:30131
-msgid "Semi-anonymous"
+#: dist/converse-no-dependencies.js:42170
+msgid "Features:"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28737
-msgid "Temporary room"
+#: dist/converse-no-dependencies.js:42171
+#: dist/converse-no-dependencies.js:43424
+msgid "Hidden"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28738
-#: dist/converse-no-dependencies.js:30133
-msgid "Unmoderated"
+#: dist/converse-no-dependencies.js:42172
+#: dist/converse-no-dependencies.js:43427
+msgid "Moderated"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28777
-msgid "Query for Chatrooms"
+#: dist/converse-no-dependencies.js:42173
+#: dist/converse-no-dependencies.js:43428
+msgid "Non-anonymous"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28778
-msgid "Server address"
+#: dist/converse-no-dependencies.js:42174
+msgid "Online users:"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28779
-msgid "Show rooms"
+#: dist/converse-no-dependencies.js:42175
+msgid "Open room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28780
-msgid "conference.example.org"
+#: dist/converse-no-dependencies.js:42176
+msgid "Permanent room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28833
-msgid "No rooms found"
+#: dist/converse-no-dependencies.js:42177
+#: dist/converse-no-dependencies.js:43432
+msgid "Public"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28850
-msgid "Rooms found:"
+#: dist/converse-no-dependencies.js:42178
+msgid "Requires authentication"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28903
-msgid "Enter a new Chatroom"
+#: dist/converse-no-dependencies.js:42179
+msgid "Requires an invitation"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28904
-msgid "Room address"
+#: dist/converse-no-dependencies.js:42180
+#: dist/converse-no-dependencies.js:43433
+msgid "Semi-anonymous"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28906
-msgid "name@conference.example.org"
+#: dist/converse-no-dependencies.js:42181
+msgid "Temporary room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:28907
-msgid "Join"
+#: dist/converse-no-dependencies.js:42182
+#: dist/converse-no-dependencies.js:43435
+msgid "Unmoderated"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29025
+#: dist/converse-no-dependencies.js:42287
 msgid "Message"
 msgid "Message"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29058
+#: dist/converse-no-dependencies.js:42322
 #, javascript-format
 #, javascript-format
 msgid "%1$s is no longer a moderator"
 msgid "%1$s is no longer a moderator"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29061
+#: dist/converse-no-dependencies.js:42326
 #, javascript-format
 #, javascript-format
 msgid "%1$s has been given a voice again"
 msgid "%1$s has been given a voice again"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29064
+#: dist/converse-no-dependencies.js:42330
 #, javascript-format
 #, javascript-format
 msgid "%1$s has been muted"
 msgid "%1$s has been muted"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29067
+#: dist/converse-no-dependencies.js:42334
 #, javascript-format
 #, javascript-format
 msgid "%1$s is now a moderator"
 msgid "%1$s is now a moderator"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29077
+#: dist/converse-no-dependencies.js:42342
 msgid "Close and leave this room"
 msgid "Close and leave this room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29078
+#: dist/converse-no-dependencies.js:42343
 msgid "Configure this room"
 msgid "Configure this room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29122
+#: dist/converse-no-dependencies.js:42383
 msgid "Hide the list of occupants"
 msgid "Hide the list of occupants"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29206
+#: dist/converse-no-dependencies.js:42499
 #, javascript-format
 #, javascript-format
 msgid ""
 msgid ""
 "Error: the \"%1$s\" command takes two arguments, the user's nickname and "
 "Error: the \"%1$s\" command takes two arguments, the user's nickname and "
 "optionally a reason."
 "optionally a reason."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29218
+#: dist/converse-no-dependencies.js:42508
 msgid ""
 msgid ""
 "Sorry, an error happened while running the command. Check your browser's "
 "Sorry, an error happened while running the command. Check your browser's "
 "developer console for details."
 "developer console for details."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29263
+#: dist/converse-no-dependencies.js:42567
 msgid "Change user's affiliation to admin"
 msgid "Change user's affiliation to admin"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29264
+#: dist/converse-no-dependencies.js:42567
 msgid "Ban user from room"
 msgid "Ban user from room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29266
+#: dist/converse-no-dependencies.js:42567
 msgid "Change user role to participant"
 msgid "Change user role to participant"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29268
+#: dist/converse-no-dependencies.js:42567
 msgid "Kick user from room"
 msgid "Kick user from room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29269
+#: dist/converse-no-dependencies.js:42567
 msgid "Write in 3rd person"
 msgid "Write in 3rd person"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29270
+#: dist/converse-no-dependencies.js:42567
 msgid "Grant membership to a user"
 msgid "Grant membership to a user"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29271
+#: dist/converse-no-dependencies.js:42567
 msgid "Remove user's ability to post messages"
 msgid "Remove user's ability to post messages"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29272
+#: dist/converse-no-dependencies.js:42567
 msgid "Change your nickname"
 msgid "Change your nickname"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29273
+#: dist/converse-no-dependencies.js:42567
 msgid "Grant moderator role to user"
 msgid "Grant moderator role to user"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29274
+#: dist/converse-no-dependencies.js:42567
 msgid "Grant ownership of this room"
 msgid "Grant ownership of this room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29275
+#: dist/converse-no-dependencies.js:42567
 msgid "Revoke user's membership"
 msgid "Revoke user's membership"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29276
+#: dist/converse-no-dependencies.js:42567
 msgid "Set room subject"
 msgid "Set room subject"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29277
+#: dist/converse-no-dependencies.js:42567
 msgid "Set room subject (alias for /subject)"
 msgid "Set room subject (alias for /subject)"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29278
+#: dist/converse-no-dependencies.js:42567
 msgid "Allow muted user to post messages"
 msgid "Allow muted user to post messages"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29590
+#: dist/converse-no-dependencies.js:42897
 msgid ""
 msgid ""
 "The nickname you chose is reserved or currently in use, please choose a "
 "The nickname you chose is reserved or currently in use, please choose a "
 "different one."
 "different one."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29616
+#: dist/converse-no-dependencies.js:42923
 msgid "Please choose your nickname"
 msgid "Please choose your nickname"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29618
+#: dist/converse-no-dependencies.js:42925
 msgid "Enter room"
 msgid "Enter room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29641
+#: dist/converse-no-dependencies.js:42946
 msgid "This chatroom requires a password"
 msgid "This chatroom requires a password"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29642
+#: dist/converse-no-dependencies.js:42947
 msgid "Password: "
 msgid "Password: "
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29740
+#: dist/converse-no-dependencies.js:42948
+msgid "Submit"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:43062
 #, javascript-format
 #, javascript-format
 msgid "This action was done by %1$s."
 msgid "This action was done by %1$s."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29743
-#: dist/converse-no-dependencies.js:29759
+#: dist/converse-no-dependencies.js:43066
+#: dist/converse-no-dependencies.js:43083
 #, javascript-format
 #, javascript-format
 msgid "The reason given is: \"%1$s\"."
 msgid "The reason given is: \"%1$s\"."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29781
+#: dist/converse-no-dependencies.js:43104
 #, javascript-format
 #, javascript-format
 msgid "%1$s has left and re-entered the room"
 msgid "%1$s has left and re-entered the room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29786
+#: dist/converse-no-dependencies.js:43110
 #, javascript-format
 #, javascript-format
 msgid "%1$s has entered the room"
 msgid "%1$s has entered the room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29788
+#: dist/converse-no-dependencies.js:43112
 #, javascript-format
 #, javascript-format
 msgid "%1$s has entered the room. \"%2$s\""
 msgid "%1$s has entered the room. \"%2$s\""
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29818
+#: dist/converse-no-dependencies.js:43143
 #, javascript-format
 #, javascript-format
 msgid "%1$s has entered and left the room"
 msgid "%1$s has entered and left the room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29820
+#: dist/converse-no-dependencies.js:43145
 #, javascript-format
 #, javascript-format
 msgid "%1$s has entered and left the room. \"%2$s\""
 msgid "%1$s has entered and left the room. \"%2$s\""
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29832
+#: dist/converse-no-dependencies.js:43158
 #, javascript-format
 #, javascript-format
 msgid "%1$s has left the room"
 msgid "%1$s has left the room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29834
+#: dist/converse-no-dependencies.js:43160
 #, javascript-format
 #, javascript-format
 msgid "%1$s has left the room. \"%2$s\""
 msgid "%1$s has left the room. \"%2$s\""
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29877
+#: dist/converse-no-dependencies.js:43206
 msgid "You are not on the member list of this room."
 msgid "You are not on the member list of this room."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29879
+#: dist/converse-no-dependencies.js:43208
 msgid "You have been banned from this room."
 msgid "You have been banned from this room."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29883
+#: dist/converse-no-dependencies.js:43212
 msgid "No nickname was specified."
 msgid "No nickname was specified."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29887
+#: dist/converse-no-dependencies.js:43216
 msgid "You are not allowed to create new rooms."
 msgid "You are not allowed to create new rooms."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29889
+#: dist/converse-no-dependencies.js:43218
 msgid "Your nickname doesn't conform to this room's policies."
 msgid "Your nickname doesn't conform to this room's policies."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29893
+#: dist/converse-no-dependencies.js:43222
 msgid "This room does not (yet) exist."
 msgid "This room does not (yet) exist."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29895
+#: dist/converse-no-dependencies.js:43224
 msgid "This room has reached its maximum number of occupants."
 msgid "This room has reached its maximum number of occupants."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29950
+#: dist/converse-no-dependencies.js:43274
 #, javascript-format
 #, javascript-format
 msgid "Topic set by %1$s"
 msgid "Topic set by %1$s"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29981
+#: dist/converse-no-dependencies.js:43297
 msgid "Chatrooms"
 msgid "Chatrooms"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29982
+#: dist/converse-no-dependencies.js:43298
 msgid "Add a new room"
 msgid "Add a new room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:29983
+#: dist/converse-no-dependencies.js:43299
 msgid "Query for rooms"
 msgid "Query for rooms"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30022
+#: dist/converse-no-dependencies.js:43337
 #, javascript-format
 #, javascript-format
 msgid "Click to mention %1$s in your message."
 msgid "Click to mention %1$s in your message."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30023
+#: dist/converse-no-dependencies.js:43338
 msgid "This user is a moderator."
 msgid "This user is a moderator."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30024
+#: dist/converse-no-dependencies.js:43339
 msgid "This user can send messages in this room."
 msgid "This user can send messages in this room."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30025
+#: dist/converse-no-dependencies.js:43340
 msgid "This user can NOT send messages in this room."
 msgid "This user can NOT send messages in this room."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30026
+#: dist/converse-no-dependencies.js:43341
 msgid "Moderator"
 msgid "Moderator"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30027
+#: dist/converse-no-dependencies.js:43342
 msgid "Visitor"
 msgid "Visitor"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30028
+#: dist/converse-no-dependencies.js:43343
 msgid "Owner"
 msgid "Owner"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30029
+#: dist/converse-no-dependencies.js:43344
 msgid "Member"
 msgid "Member"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30030
+#: dist/converse-no-dependencies.js:43345
 msgid "Admin"
 msgid "Admin"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30082
+#: dist/converse-no-dependencies.js:43387
 msgid "Occupants"
 msgid "Occupants"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30102
-#: dist/converse-no-dependencies.js:30209
+#: dist/converse-no-dependencies.js:43404
+#: dist/converse-no-dependencies.js:43511
 msgid "Invite"
 msgid "Invite"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30121
+#: dist/converse-no-dependencies.js:43423
 msgid "Features"
 msgid "Features"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30123
+#: dist/converse-no-dependencies.js:43425
 msgid "Message archiving"
 msgid "Message archiving"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30124
+#: dist/converse-no-dependencies.js:43426
 msgid "Members only"
 msgid "Members only"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30127
+#: dist/converse-no-dependencies.js:43429
 msgid "Open"
 msgid "Open"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30128
+#: dist/converse-no-dependencies.js:43430
 msgid "Password protected"
 msgid "Password protected"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30129
+#: dist/converse-no-dependencies.js:43431
 msgid "Persistent"
 msgid "Persistent"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30132
+#: dist/converse-no-dependencies.js:43434
 msgid "Temporary"
 msgid "Temporary"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30134
+#: dist/converse-no-dependencies.js:43436
 msgid "No password"
 msgid "No password"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30135
+#: dist/converse-no-dependencies.js:43437
 msgid "This room is not publicly searchable"
 msgid "This room is not publicly searchable"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30136
+#: dist/converse-no-dependencies.js:43438
 msgid "Messages are archived on the server"
 msgid "Messages are archived on the server"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30137
+#: dist/converse-no-dependencies.js:43439
 msgid "This room is restricted to members only"
 msgid "This room is restricted to members only"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30138
+#: dist/converse-no-dependencies.js:43440
 msgid "This room is being moderated"
 msgid "This room is being moderated"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30139
+#: dist/converse-no-dependencies.js:43441
 msgid "All other room occupants can see your XMPP username"
 msgid "All other room occupants can see your XMPP username"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30140
+#: dist/converse-no-dependencies.js:43442
 msgid "Anyone can join this room"
 msgid "Anyone can join this room"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30141
+#: dist/converse-no-dependencies.js:43443
 msgid "This room requires a password before entry"
 msgid "This room requires a password before entry"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30142
+#: dist/converse-no-dependencies.js:43444
 msgid "This room persists even if it's unoccupied"
 msgid "This room persists even if it's unoccupied"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30143
+#: dist/converse-no-dependencies.js:43445
 msgid "This room is publicly searchable"
 msgid "This room is publicly searchable"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30144
+#: dist/converse-no-dependencies.js:43446
 msgid "Only moderators can see your XMPP username"
 msgid "Only moderators can see your XMPP username"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30145
+#: dist/converse-no-dependencies.js:43447
 msgid "This room will disappear once the last person leaves"
 msgid "This room will disappear once the last person leaves"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30146
+#: dist/converse-no-dependencies.js:43448
 msgid "This room is not being moderated"
 msgid "This room is not being moderated"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30147
+#: dist/converse-no-dependencies.js:43449
 msgid "This room does not require a password upon entry"
 msgid "This room does not require a password upon entry"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30187
+#: dist/converse-no-dependencies.js:43488
 #, javascript-format
 #, javascript-format
 msgid ""
 msgid ""
 "You are about to invite %1$s to the chat room \"%2$s\". You may optionally "
 "You are about to invite %1$s to the chat room \"%2$s\". You may optionally "
 "include a message, explaining the reason for the invitation."
 "include a message, explaining the reason for the invitation."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30208
+#: dist/converse-no-dependencies.js:43510
 msgid "Please enter a valid XMPP username"
 msgid "Please enter a valid XMPP username"
 msgstr ""
 msgstr ""
 
 
+#: dist/converse-no-dependencies.js:44865
+#, javascript-format
+msgid "%1$s has invited you to join a chat room: %2$s"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:44867
+#, javascript-format
+msgid ""
+"%1$s has invited you to join a chat room: %2$s, and left the following "
+"reason: \"%3$s\""
+msgstr ""
+
 #. workaround for Prosody which doesn't give type "headline"
 #. workaround for Prosody which doesn't give type "headline"
-#: dist/converse-no-dependencies.js:30469
-#: dist/converse-no-dependencies.js:30475
+#: dist/converse-no-dependencies.js:45235
+#: dist/converse-no-dependencies.js:45241
 #, javascript-format
 #, javascript-format
 msgid "Notification from %1$s"
 msgid "Notification from %1$s"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30477
-#: dist/converse-no-dependencies.js:30488
-#: dist/converse-no-dependencies.js:30491
+#: dist/converse-no-dependencies.js:45243
+#: dist/converse-no-dependencies.js:45254
+#: dist/converse-no-dependencies.js:45257
 #, javascript-format
 #, javascript-format
 msgid "%1$s says"
 msgid "%1$s says"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30525
+#: dist/converse-no-dependencies.js:45291
 msgid "has come online"
 msgid "has come online"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30542
+#: dist/converse-no-dependencies.js:45308
 msgid "wants to be your contact"
 msgid "wants to be your contact"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30824
-msgid "Re-establishing encrypted session"
+#: dist/converse-no-dependencies.js:45584
+msgid "Your Profile"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:45589
+msgid "XMPP Address (JID)"
 msgstr ""
 msgstr ""
 
 
-#. We need to generate a new key and instance tag
-#: dist/converse-no-dependencies.js:30835
-msgid "Generating private key."
+#: dist/converse-no-dependencies.js:45591
+msgid ""
+"Use commas to separate multiple roles. Your roles are shown next to your "
+"name on your chat messages."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30835
-msgid "Your browser might become unresponsive."
+#: dist/converse-no-dependencies.js:45594
+msgid "Your avatar image"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30878
-#, javascript-format
-msgid ""
-"Authentication request from %1$s\n"
-"\n"
-"Your chat contact is attempting to verify your identity, by asking you the "
-"question below.\n"
-"\n"
-"%2$s"
+#: dist/converse-no-dependencies.js:45621
+msgid "Sorry, an error happened while trying to save your profile data."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30887
-msgid "Could not verify this user's identify."
+#: dist/converse-no-dependencies.js:45621
+msgid "You can check your browser's developer console for any error output."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:30941
-msgid "Exchanging private key with contact."
+#: dist/converse-no-dependencies.js:45670
+#: dist/converse-no-dependencies.js:48062
+msgid "Away"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31038
-msgid "Your messages are not encrypted anymore"
+#: dist/converse-no-dependencies.js:45672
+#: dist/converse-no-dependencies.js:48061
+msgid "Busy"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31040
-msgid ""
-"Your messages are now encrypted but your contact's identity has not been "
-"verified."
+#: dist/converse-no-dependencies.js:45674
+msgid "Custom status"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31042
-msgid "Your contact's identify has been verified."
+#: dist/converse-no-dependencies.js:45675
+#: dist/converse-no-dependencies.js:48064
+msgid "Offline"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31044
-msgid "Your contact has ended encryption on their end, you should do the same."
+#: dist/converse-no-dependencies.js:45676
+#: dist/converse-no-dependencies.js:48059
+msgid "Online"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31054
-msgid "Your message could not be sent"
+#: dist/converse-no-dependencies.js:45678
+msgid "Away for long"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31056
-msgid "We received an unencrypted message"
+#: dist/converse-no-dependencies.js:45679
+msgid "Change chat status"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31058
-msgid "We received an unreadable encrypted message"
+#: dist/converse-no-dependencies.js:45680
+msgid "Personal status message"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31084
+#: dist/converse-no-dependencies.js:45724
 #, javascript-format
 #, javascript-format
-msgid ""
-"Here are the fingerprints, please confirm them with %1$s, outside of this "
-"chat.\n"
-"\n"
-"Fingerprint for you, %2$s: %3$s\n"
-"\n"
-"Fingerprint for %1$s: %4$s\n"
-"\n"
-"If you have confirmed that the fingerprints match, click OK, otherwise click "
-"Cancel."
-msgstr ""
-
-#: dist/converse-no-dependencies.js:31096
-msgid ""
-"You will be prompted to provide a security question and then an answer to "
-"that question.\n"
-"\n"
-"Your contact will then be prompted the same question and if they type the "
-"exact same answer (case sensitive), their identity will be verified."
+msgid "I am %1$s"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31097
-msgid "What is your security question?"
+#: dist/converse-no-dependencies.js:45727
+msgid "Change settings"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31100
-msgid "What is the answer to the security question?"
+#: dist/converse-no-dependencies.js:45728
+msgid "Click to change your chat status"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31104
-msgid "Invalid authentication scheme provided"
+#: dist/converse-no-dependencies.js:45729
+msgid "Log out"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31121
-msgid "Your messages are not encrypted. Click here to enable OTR encryption."
+#: dist/converse-no-dependencies.js:45730
+msgid "Your profile"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31123
-msgid "Your messages are encrypted, but your contact has not been verified."
+#: dist/converse-no-dependencies.js:45753
+msgid "Are you sure you want to log out?"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31125
-msgid "Your messages are encrypted and your contact verified."
+#: dist/converse-no-dependencies.js:45761
+#: dist/converse-no-dependencies.js:45771
+msgid "online"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31127
-msgid ""
-"Your contact has closed their end of the private session, you should do the "
-"same"
+#: dist/converse-no-dependencies.js:45763
+msgid "busy"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:45765
+msgid "away for long"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:45767
+msgid "away"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:45769
+msgid "offline"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:45923
+msgid " e.g. conversejs.org"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:45970
+msgid "Fetch registration form"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:45971
+msgid "Tip: A list of public XMPP providers is available"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31141
-msgid "End encrypted conversation"
+#: dist/converse-no-dependencies.js:45972
+msgid "here"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31142
-msgid "Refresh encrypted conversation"
+#: dist/converse-no-dependencies.js:46020
+msgid "Sorry, we're unable to connect to your chosen provider."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31143
-msgid "Start encrypted conversation"
+#: dist/converse-no-dependencies.js:46036
+msgid ""
+"Sorry, the given provider does not support in band account registration. "
+"Please try with a different provider."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31144
-msgid "Verify with fingerprints"
+#: dist/converse-no-dependencies.js:46060
+#, javascript-format
+msgid ""
+"Something went wrong while establishing a connection with \"%1$s\". Are you "
+"sure it exists?"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31145
-msgid "Verify with SMP"
+#: dist/converse-no-dependencies.js:46223
+msgid "Now logging you in"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31146
-msgid "What's this?"
+#: dist/converse-no-dependencies.js:46227
+msgid "Registered successfully"
 msgstr ""
 msgstr ""
 
 
-#. Translation aware constants
-#. ---------------------------
-#. We can only call the __ translation method *after* converse.js
-#. has been initialized and with it the i18n machinery. That's why
-#. we do it here in the "initialize" method and not at the top of
-#. the module.
-#: dist/converse-no-dependencies.js:31189
-msgid "unencrypted"
+#: dist/converse-no-dependencies.js:46336
+msgid ""
+"The provider rejected your registration attempt. Please check the values you "
+"entered for correctness."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31190
-msgid "unverified"
+#: dist/converse-no-dependencies.js:46705
+msgid "Click to toggle the rooms list"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31191
-msgid "verified"
+#: dist/converse-no-dependencies.js:46706
+msgid "Open Rooms"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31192
-msgid "finished"
+#: dist/converse-no-dependencies.js:46750
+#, javascript-format
+msgid "Are you sure you want to leave the room %1$s?"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31788
+#: dist/converse-no-dependencies.js:47359
 #, javascript-format
 #, javascript-format
 msgid "Sorry, there was an error while trying to add %1$s as a contact."
 msgid "Sorry, there was an error while trying to add %1$s as a contact."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:31936
+#: dist/converse-no-dependencies.js:47570
 msgid "This client does not allow presence subscriptions"
 msgid "This client does not allow presence subscriptions"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32028
+#: dist/converse-no-dependencies.js:47678
 msgid "Click to hide these contacts"
 msgid "Click to hide these contacts"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32112
-msgid "Don't have a chat account?"
+#: dist/converse-no-dependencies.js:47877
+msgid "This contact is busy"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32114
-msgid "Create an account"
+#: dist/converse-no-dependencies.js:47878
+msgid "This contact is online"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32126
-msgid "Create your account"
+#: dist/converse-no-dependencies.js:47879
+msgid "This contact is offline"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32128
-msgid "Please enter the XMPP provider to register with:"
+#: dist/converse-no-dependencies.js:47880
+msgid "This contact is unavailable"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32148
-msgid "Already have a chat account?"
+#: dist/converse-no-dependencies.js:47881
+msgid "This contact is away for an extended period"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32150
-msgid "Log in here"
+#: dist/converse-no-dependencies.js:47882
+msgid "This contact is away"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32162
-msgid "Account Registration:"
+#: dist/converse-no-dependencies.js:47887
+msgid "Groups"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32170
-msgid "Register"
+#: dist/converse-no-dependencies.js:47889
+msgid "My contacts"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32174
-msgid "Choose a different provider"
+#: dist/converse-no-dependencies.js:47891
+msgid "Pending contacts"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32186
-msgid "Hold tight, we're fetching the registration form…"
+#: dist/converse-no-dependencies.js:47893
+msgid "Contact requests"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32321
-msgid " e.g. conversejs.org"
+#: dist/converse-no-dependencies.js:47895
+msgid "Ungrouped"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32367
-msgid "Fetch registration form"
+#: dist/converse-no-dependencies.js:47938
+msgid "Contact name"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32368
-msgid "Tip: A list of public XMPP providers is available"
+#: dist/converse-no-dependencies.js:47941
+msgid "Add a Contact"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32369
-msgid "here"
+#: dist/converse-no-dependencies.js:47942
+msgid "XMPP Address"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32417
-msgid "Sorry, we're unable to connect to your chosen provider."
+#: dist/converse-no-dependencies.js:47944
+msgid "name@example.org"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32433
-msgid ""
-"Sorry, the given provider does not support in band account registration. "
-"Please try with a different provider."
+#: dist/converse-no-dependencies.js:47945
+msgid "Add"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:48053
+msgid "Filter"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:48054
+msgid "Filter by contact name"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:48055
+msgid "Filter by group name"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:48056
+msgid "Filter by status"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:48057
+msgid "Any"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:48058
+msgid "Unread"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:48060
+msgid "Chatty"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:48063
+msgid "Extended Away"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32457
+#: dist/converse-no-dependencies.js:48219
+#: dist/converse-no-dependencies.js:48261
 #, javascript-format
 #, javascript-format
-msgid ""
-"Something went wrong while establishing a connection with \"%1$s\". Are you "
-"sure it exists?"
+msgid "Click to remove %1$s as a contact"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32620
-msgid "Now logging you in"
+#: dist/converse-no-dependencies.js:48228
+#, javascript-format
+msgid "Click to accept the contact request from %1$s"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32624
-msgid "Registered successfully"
+#: dist/converse-no-dependencies.js:48229
+#, javascript-format
+msgid "Click to decline the contact request from %1$s"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:48260
+#, javascript-format
+msgid "Click to chat with %1$s (JID: %2$s)"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:48337
+msgid "Are you sure you want to decline this contact request?"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:48607
+msgid "Add a contact"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:50080
+msgid "Room Address (JID)"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:50084
+msgid "Title"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:50088
+msgid "Description"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:51158
+msgid "XMPP Username:"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:51164
+msgid "Password:"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:51166
+msgid "password"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:32733
+#: dist/converse-no-dependencies.js:51174
+msgid "This is a trusted device"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:51176
 msgid ""
 msgid ""
-"The provider rejected your registration attempt. Please check the values you "
-"entered for correctness."
+"To improve performance, we cache your data in this browser. Uncheck this box "
+"if this is a public computer or if you want your data to be deleted when you "
+"log out. It's important that you explicitly log out, otherwise not all "
+"cached data might be deleted."
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:33149
-msgid "Click to toggle the rooms list"
+#: dist/converse-no-dependencies.js:51178
+msgid "Log in"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:33150
-msgid "Open Rooms"
+#: dist/converse-no-dependencies.js:51184
+msgid "Click here to log in anonymously"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:51526
+msgid "Don't have a chat account?"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:51528
+msgid "Create an account"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:51549
+msgid "Create your account"
 msgstr ""
 msgstr ""
 
 
-#: dist/converse-no-dependencies.js:33194
+#: dist/converse-no-dependencies.js:51551
+msgid "Please enter the XMPP provider to register with:"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:51571
+msgid "Already have a chat account?"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:51573
+msgid "Log in here"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:51594
+msgid "Account Registration:"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:51602
+msgid "Register"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:51606
+msgid "Choose a different provider"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:51627
+msgid "Hold tight, we're fetching the registration form…"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:52762
+#: dist/converse-no-dependencies.js:52791
+msgid "Download"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:52781
 #, javascript-format
 #, javascript-format
-msgid "Are you sure you want to leave the room %1$s?"
+msgid "Download: \"%1$s"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:52804
+msgid "Download video file"
+msgstr ""
+
+#: dist/converse-no-dependencies.js:52817
+msgid "Download audio file"
 msgstr ""
 msgstr ""

+ 25 - 19
sass/_chatrooms.scss

@@ -7,6 +7,31 @@
         }
         }
     }
     }
 
 
+    #room-details-modal {
+        .features-list {
+            margin-left: 1em;
+        }
+    }
+
+    .chatroom-features {
+        width: 100%;
+        .features-list {
+            padding-top: 0;
+            .feature {
+                width: 100%;
+                margin-right: 0.5em;
+                padding-right: 0;
+                font-size: 1em;
+                cursor: help;
+                .fa {
+                    margin-right: 0.5em;
+                    color: $text-color;
+                }
+            }
+        }
+    }
+
+
     .chat-head-chatroom {
     .chat-head-chatroom {
         background-color: $chatroom-head-color;
         background-color: $chatroom-head-color;
 
 
@@ -133,16 +158,6 @@
                         }
                         }
                     }
                     }
 
 
-                    .chatroom-features {
-                        width: 100%;
-                        .feature {
-                            float: left;
-                            margin-right: 0.5em;
-                            padding-right: 0;
-                            font-size: 1em;
-                            cursor: help;
-                        }
-                    }
                     .awesomplete {
                     .awesomplete {
                         ul {
                         ul {
                             padding: 0;
                             padding: 0;
@@ -164,15 +179,6 @@
                             flex-grow: 1;
                             flex-grow: 1;
                             border-bottom: 1px solid lightgrey;
                             border-bottom: 1px solid lightgrey;
                         }
                         }
-                        &.features-list {
-                            padding-top: 0;
-                            .feature {
-                                width: 100%;
-                                .fa {
-                                    color: $text-color;
-                                }
-                            }
-                        }
                         li {
                         li {
                             cursor: default;
                             cursor: default;
                             display: block;
                             display: block;

+ 4 - 0
sass/_core.scss

@@ -159,6 +159,10 @@ body.reset {
         font-weight: 700;
         font-weight: 700;
     }
     }
 
 
+    em {
+        font-style: italic;
+    }
+
     ol, ul {
     ol, ul {
         list-style: none;
         list-style: none;
     }
     }

+ 3 - 4
spec/chatroom.js

@@ -814,9 +814,8 @@
                             .c('field', {'type':'text-single', 'var':'muc#roominfo_occupants', 'label':'Number of occupants'})
                             .c('field', {'type':'text-single', 'var':'muc#roominfo_occupants', 'label':'Number of occupants'})
                                 .c('value').t(0);
                                 .c('value').t(0);
                 _converse.connection._dataRecv(test_utils.createRequest(features_stanza));
                 _converse.connection._dataRecv(test_utils.createRequest(features_stanza));
-                test_utils.waitUntil(function () {
-                    return _.get(view.el.querySelector('.chatroom-description'), 'textContent');
-                }).then(function () {
+                test_utils.waitUntil(() => _.get(view.el.querySelector('.chatroom-description'), 'textContent'))
+                .then(function () {
                     expect($(view.el.querySelector('.chatroom-description')).text()).toBe('This is the description');
                     expect($(view.el.querySelector('.chatroom-description')).text()).toBe('This is the description');
                     done();
                     done();
                 });
                 });
@@ -1842,7 +1841,7 @@
                 _converse.connection._dataRecv(test_utils.createRequest(features_stanza));
                 _converse.connection._dataRecv(test_utils.createRequest(features_stanza));
 
 
                 var view = _converse.chatboxviews.get('coven@chat.shakespeare.lit');
                 var view = _converse.chatboxviews.get('coven@chat.shakespeare.lit');
-                expect(view.model.get('features_fetched')).toBe(true);
+                expect(view.model.get('features_fetched')).toBeTruthy();
                 expect(view.model.get('passwordprotected')).toBe(true);
                 expect(view.model.get('passwordprotected')).toBe(true);
                 expect(view.model.get('hidden')).toBe(true);
                 expect(view.model.get('hidden')).toBe(true);
                 expect(view.model.get('temporary')).toBe(true);
                 expect(view.model.get('temporary')).toBe(true);

+ 104 - 3
spec/roomslist.js

@@ -3,11 +3,15 @@
 } (this, function (jasmine, mock, test_utils) {
 } (this, function (jasmine, mock, test_utils) {
     var _ = converse.env._;
     var _ = converse.env._;
     var $msg = converse.env.$msg;
     var $msg = converse.env.$msg;
+    var $iq = converse.env.$iq;
+    var $pres = converse.env.$pres;
     var Promise = converse.env.Promise;
     var Promise = converse.env.Promise;
+    var Strophe = converse.env.Strophe;
+    var u = converse.env.utils;
 
 
-    describe("The converse-roomslist plugin", function () {
+    describe("A list of open rooms", function () {
 
 
-        it("is shown under a list of open rooms in the \"Rooms\" panel", mock.initConverseWithPromises(
+        it("is shown in the \"Rooms\" panel", mock.initConverseWithPromises(
             null, ['rosterGroupsFetched'],
             null, ['rosterGroupsFetched'],
             { allow_bookmarks: false // Makes testing easier, otherwise we
             { allow_bookmarks: false // Makes testing easier, otherwise we
                                      // have to mock stanza traffic.
                                      // have to mock stanza traffic.
@@ -50,7 +54,104 @@
         ));
         ));
     });
     });
 
 
-    describe("An room shown in the rooms list", function () {
+    describe("A room shown in the rooms list", function () {
+
+        it("has an info icon which opens a details modal when clicked", mock.initConverseWithPromises(
+            null, ['rosterGroupsFetched'],
+            { whitelisted_plugins: ['converse-roomslist'],
+              allow_bookmarks: false // Makes testing easier, otherwise we
+                                     // have to mock stanza traffic.
+            }, function (done, _converse) {
+
+            test_utils.openControlBox();
+            _converse.api.rooms.open('coven@chat.shakespeare.lit', {'nick': 'some1'});
+            const view = _converse.chatboxviews.get('coven@chat.shakespeare.lit');
+            const last_stanza = _.last(_converse.connection.IQ_stanzas).nodeTree;
+            const IQ_id = last_stanza.getAttribute('id');
+            const features_stanza = $iq({
+                    'from': 'coven@chat.shakespeare.lit',
+                    'id': IQ_id,
+                    'to': 'dummy@localhost/desktop',
+                    'type': 'result'
+                })
+                .c('query', { 'xmlns': 'http://jabber.org/protocol/disco#info'})
+                    .c('identity', {
+                        'category': 'conference',
+                        'name': 'A Dark Cave',
+                        'type': 'text'
+                    }).up()
+                    .c('feature', {'var': 'http://jabber.org/protocol/muc'}).up()
+                    .c('feature', {'var': 'muc_passwordprotected'}).up()
+                    .c('feature', {'var': 'muc_hidden'}).up()
+                    .c('feature', {'var': 'muc_temporary'}).up()
+                    .c('feature', {'var': 'muc_open'}).up()
+                    .c('feature', {'var': 'muc_unmoderated'}).up()
+                    .c('feature', {'var': 'muc_nonanonymous'}).up()
+                    .c('feature', {'var': 'urn:xmpp:mam:0'}).up()
+                    .c('x', { 'xmlns':'jabber:x:data', 'type':'result'})
+                        .c('field', {'var':'FORM_TYPE', 'type':'hidden'})
+                            .c('value').t('http://jabber.org/protocol/muc#roominfo').up().up()
+                        .c('field', {'type':'text-single', 'var':'muc#roominfo_description', 'label':'Description'})
+                            .c('value').t('This is the description').up().up()
+                        .c('field', {'type':'text-single', 'var':'muc#roominfo_occupants', 'label':'Number of occupants'})
+                            .c('value').t(0);
+            _converse.connection._dataRecv(test_utils.createRequest(features_stanza));
+
+            test_utils.waitUntil(() => view.model.get('connection_status') === converse.ROOMSTATUS.CONNECTING)
+            .then(function () {
+                var presence = $pres({
+                        to: _converse.connection.jid,
+                        from: 'coven@chat.shakespeare.lit/some1',
+                        id: 'DC352437-C019-40EC-B590-AF29E879AF97'
+                }).c('x').attrs({xmlns:'http://jabber.org/protocol/muc#user'})
+                    .c('item').attrs({
+                        affiliation: 'member',
+                        jid: _converse.bare_jid,
+                        role: 'participant'
+                    }).up()
+                    .c('status').attrs({code:'110'});
+                _converse.connection._dataRecv(test_utils.createRequest(presence));
+
+                const room_els = _converse.rooms_list_view.el.querySelectorAll(".open-room");
+                expect(room_els.length).toBe(1);
+                var info_el = _converse.rooms_list_view.el.querySelector(".room-info");
+                info_el.click();
+
+                const modal = view.model.room_details_modal;
+                return test_utils.waitUntil(() => u.isVisible(modal.el), 2000);
+            }).then(() => {
+                const modal = view.model.room_details_modal;
+                let els = modal.el.querySelectorAll('p.room-info');
+                expect(els[0].textContent).toBe("Room address (JID): coven@chat.shakespeare.lit")
+                expect(els[1].textContent).toBe("Name: A Dark Cave")
+                expect(els[2].textContent).toBe("Description: This is the description")
+                expect(els[3].textContent).toBe("Online users: 1")
+                const features_list = modal.el.querySelector('.features-list');
+                expect(features_list.textContent.replace(/(\n|\s{2,})/g, '')).toBe(
+                    'Password protected - This room requires a password before entry'+
+                    'Hidden - This room is not publicly searchable'+
+                    'Open - Anyone can join this room'+
+                    'Temporary - This room will disappear once the last person leaves'+
+                    'Not anonymous - All other room occupants can see your XMPP username'+
+                    'Not moderated - This room is not being moderated'
+                );
+                const presence = $pres({
+                        to: 'dummy@localhost/_converse.js-29092160',
+                        from: 'coven@chat.shakespeare.lit/newguy'
+                    })
+                    .c('x', {xmlns: Strophe.NS.MUC_USER})
+                    .c('item', {
+                        'affiliation': 'none',
+                        'jid': 'newguy@localhost/_converse.js-290929789',
+                        'role': 'participant'
+                    });
+                _converse.connection._dataRecv(test_utils.createRequest(presence));
+
+                els = modal.el.querySelectorAll('p.room-info');
+                expect(els[3].textContent).toBe("Online users: 2")
+                done();
+            });
+        }));
 
 
         it("can be closed", mock.initConverseWithPromises(
         it("can be closed", mock.initConverseWithPromises(
             null, ['rosterGroupsFetched'],
             null, ['rosterGroupsFetched'],

+ 0 - 1
spec/spoilers.js

@@ -1,7 +1,6 @@
 (function (root, factory) {
 (function (root, factory) {
     define(["jasmine", "mock", "test-utils"], factory);
     define(["jasmine", "mock", "test-utils"], factory);
 } (this, function (jasmine, mock, test_utils) {
 } (this, function (jasmine, mock, test_utils) {
-
     var _ = converse.env._;
     var _ = converse.env._;
     var Strophe = converse.env.Strophe;
     var Strophe = converse.env.Strophe;
     var $msg = converse.env.$msg;
     var $msg = converse.env.$msg;

+ 1 - 0
src/converse-chatview.js

@@ -422,6 +422,7 @@
                 },
                 },
 
 
                 showUserDetailsModal (ev) {
                 showUserDetailsModal (ev) {
+                    ev.preventDefault();
                     if (_.isUndefined(this.user_details_modal)) {
                     if (_.isUndefined(this.user_details_modal)) {
                         this.user_details_modal = new _converse.UserDetailsModal({model: this.model});
                         this.user_details_modal = new _converse.UserDetailsModal({model: this.model});
                     }
                     }

+ 41 - 42
src/converse-muc-views.js

@@ -11,6 +11,7 @@
         "templates/add_chatroom_modal.html",
         "templates/add_chatroom_modal.html",
         "templates/chatarea.html",
         "templates/chatarea.html",
         "templates/chatroom.html",
         "templates/chatroom.html",
+        "templates/chatroom_details_modal.html",
         "templates/chatroom_disconnect.html",
         "templates/chatroom_disconnect.html",
         "templates/chatroom_features.html",
         "templates/chatroom_features.html",
         "templates/chatroom_form.html",
         "templates/chatroom_form.html",
@@ -37,6 +38,7 @@
     tpl_add_chatroom_modal,
     tpl_add_chatroom_modal,
     tpl_chatarea,
     tpl_chatarea,
     tpl_chatroom,
     tpl_chatroom,
+    tpl_chatroom_details_modal,
     tpl_chatroom_disconnect,
     tpl_chatroom_disconnect,
     tpl_chatroom_features,
     tpl_chatroom_features,
     tpl_chatroom_form,
     tpl_chatroom_form,
@@ -482,6 +484,26 @@
             });
             });
 
 
 
 
+            _converse.RoomDetailsModal = _converse.BootstrapModal.extend({
+
+                initialize () {
+                    _converse.BootstrapModal.prototype.initialize.apply(this, arguments);
+                    this.model.on('change', this.render, this);
+                    this.model.occupants.on('change', this.render, this);
+                },
+
+                toHTML () {
+                    return tpl_chatroom_details_modal(_.extend(
+                        this.model.toJSON(), {
+                            '__': __,
+                            'display_name': this.model.getDisplayName(),
+                            'num_occupants': this.model.occupants.length
+                        })
+                    );
+                }
+            });
+
+
             _converse.ChatRoomView = _converse.ChatBoxView.extend({
             _converse.ChatRoomView = _converse.ChatBoxView.extend({
                 /* Backbone.NativeView which renders a chat room, based upon the view
                 /* Backbone.NativeView which renders a chat room, based upon the view
                  * for normal one-on-one chat boxes.
                  * for normal one-on-one chat boxes.
@@ -495,6 +517,7 @@
                     'click .chatbox-navback': 'showControlBox',
                     'click .chatbox-navback': 'showControlBox',
                     'click .close-chatbox-button': 'close',
                     'click .close-chatbox-button': 'close',
                     'click .configure-chatroom-button': 'getAndRenderConfigurationForm',
                     'click .configure-chatroom-button': 'getAndRenderConfigurationForm',
+                    'click .show-room-details-modal': 'showRoomDetailsModal',
                     'click .hide-occupants': 'hideOccupants',
                     'click .hide-occupants': 'hideOccupants',
                     'click .new-msgs-indicator': 'viewUnreadMessages',
                     'click .new-msgs-indicator': 'viewUnreadMessages',
                     'click .occupant-nick': 'onOccupantClicked',
                     'click .occupant-nick': 'onOccupantClicked',
@@ -595,6 +618,14 @@
                     return this;
                     return this;
                 },
                 },
 
 
+                showRoomDetailsModal (ev) {
+                    ev.preventDefault();
+                    if (_.isUndefined(this.model.room_details_modal)) {
+                        this.model.room_details_modal = new _converse.RoomDetailsModal({'model': this.model});
+                    }
+                    this.model.room_details_modal.show(ev);
+                },
+
                 showChatStateNotification (message) {
                 showChatStateNotification (message) {
                     if (message.get('sender') === 'me') {
                     if (message.get('sender') === 'me') {
                         return;
                         return;
@@ -632,10 +663,11 @@
                      */
                      */
                     return tpl_chatroom_head(
                     return tpl_chatroom_head(
                         _.extend(this.model.toJSON(), {
                         _.extend(this.model.toJSON(), {
-                            Strophe: Strophe,
-                            info_close: __('Close and leave this room'),
-                            info_configure: __('Configure this room'),
-                            description: this.model.get('description') || ''
+                            'Strophe': Strophe,
+                            'info_close': __('Close and leave this room'),
+                            'info_configure': __('Configure this room'),
+                            'info_details': __('Show more details about this room'),
+                            'description': this.model.get('description') || ''
                     }));
                     }));
                 },
                 },
 
 
@@ -1035,7 +1067,8 @@
                         this.closeForm();
                         this.closeForm();
                     });
                     });
 
 
-                    form_el.addEventListener('submit', (ev) => {
+                    form_el.addEventListener('submit',
+                        (ev) => {
                             ev.preventDefault();
                             ev.preventDefault();
                             this.model.saveConfiguration(ev.target).then(
                             this.model.saveConfiguration(ev.target).then(
                                 this.model.getRoomFeatures.bind(this.model)
                                 this.model.getRoomFeatures.bind(this.model)
@@ -1547,16 +1580,13 @@
 
 
             _converse.RoomsPanel = Backbone.NativeView.extend({
             _converse.RoomsPanel = Backbone.NativeView.extend({
                 /* Backbone.NativeView which renders MUC section of the control box.
                 /* Backbone.NativeView which renders MUC section of the control box.
-                 *
-                 * Chat rooms can be listed, joined and new rooms can be created.
                  */
                  */
                 tagName: 'div',
                 tagName: 'div',
                 className: 'controlbox-section',
                 className: 'controlbox-section',
                 id: 'chatrooms',
                 id: 'chatrooms',
                 events: {
                 events: {
                     'click a.chatbox-btn.show-add-muc-modal': 'showAddRoomModal',
                     'click a.chatbox-btn.show-add-muc-modal': 'showAddRoomModal',
-                    'click a.chatbox-btn.show-list-muc-modal': 'showListRoomsModal',
-                    'click a.room-info': 'toggleRoomInfo'
+                    'click a.chatbox-btn.show-list-muc-modal': 'showListRoomsModal'
                 },
                 },
 
 
                 render () {
                 render () {
@@ -1568,11 +1598,6 @@
                     return this;
                     return this;
                 },
                 },
 
 
-                toggleRoomInfo (ev) {
-                    ev.preventDefault();
-                    toggleRoomInfo(ev);
-                },
-
                 showAddRoomModal (ev) {
                 showAddRoomModal (ev) {
                     if (_.isUndefined(this.add_room_modal)) {
                     if (_.isUndefined(this.add_room_modal)) {
                         this.add_room_modal = new _converse.AddChatRoomModal({'model': this.model});
                         this.add_room_modal = new _converse.AddChatRoomModal({'model': this.model});
@@ -1703,34 +1728,8 @@
 
 
                     el.innerHTML = tpl_chatroom_features(
                     el.innerHTML = tpl_chatroom_features(
                             _.extend(this.chatroomview.model.toJSON(), {
                             _.extend(this.chatroomview.model.toJSON(), {
-                                'has_features': _.reduce(_.values(picks), iteratee),
-                                'label_features': __('Features'),
-                                'label_hidden': __('Hidden'),
-                                'label_mam_enabled': __('Message archiving'),
-                                'label_membersonly': __('Members only'),
-                                'label_moderated': __('Moderated'),
-                                'label_nonanonymous': __('Non-anonymous'),
-                                'label_open': __('Open'),
-                                'label_passwordprotected': __('Password protected'),
-                                'label_persistent': __('Persistent'),
-                                'label_public': __('Public'),
-                                'label_semianonymous': __('Semi-anonymous'),
-                                'label_temporary': __('Temporary'),
-                                'label_unmoderated': __('Unmoderated'),
-                                'label_unsecured': __('No password'),
-                                'tt_hidden': __('This room is not publicly searchable'),
-                                'tt_mam_enabled': __('Messages are archived on the server'),
-                                'tt_membersonly': __('This room is restricted to members only'),
-                                'tt_moderated': __('This room is being moderated'),
-                                'tt_nonanonymous': __('All other room occupants can see your XMPP username'),
-                                'tt_open': __('Anyone can join this room'),
-                                'tt_passwordprotected': __('This room requires a password before entry'),
-                                'tt_persistent': __('This room persists even if it\'s unoccupied'),
-                                'tt_public': __('This room is publicly searchable'),
-                                'tt_semianonymous': __('Only moderators can see your XMPP username'),
-                                'tt_temporary': __('This room will disappear once the last person leaves'),
-                                'tt_unmoderated': __('This room is not being moderated'),
-                                'tt_unsecured': __('This room does not require a password upon entry')
+                                '__': __,
+                                'has_features': _.reduce(_.values(picks), iteratee)
                             }));
                             }));
                     this.setOccupantsHeight();
                     this.setOccupantsHeight();
                     return this;
                     return this;

+ 5 - 1
src/converse-muc.js

@@ -246,6 +246,10 @@
                     this.handlers[type][name] = callback;
                     this.handlers[type][name] = callback;
                 },
                 },
 
 
+                getDisplayName () {
+                    return this.get('name') || this.get('jid');
+                },
+
                 join (nick, password) {
                 join (nick, password) {
                     /* Join the chat room.
                     /* Join the chat room.
                      *
                      *
@@ -430,7 +434,7 @@
                      *  <feature var='urn:xmpp:mam:0'/>
                      *  <feature var='urn:xmpp:mam:0'/>
                      */
                      */
                     const features = {
                     const features = {
-                        'features_fetched': true,
+                        'features_fetched': moment().format(),
                         'name': iq.querySelector('identity').getAttribute('name')
                         'name': iq.querySelector('identity').getAttribute('name')
                     }
                     }
                     _.each(iq.querySelectorAll('feature'), function (field) {
                     _.each(iq.querySelectorAll('feature'), function (field) {

+ 24 - 9
src/converse-roomslist.js

@@ -45,6 +45,7 @@
 
 
 
 
             _converse.OpenRooms = Backbone.Collection.extend({
             _converse.OpenRooms = Backbone.Collection.extend({
+
                 comparator (room) {
                 comparator (room) {
                     if (room.get('bookmarked')) {
                     if (room.get('bookmarked')) {
                         const bookmark = _.head(_converse.bookmarksview.model.where({'jid': room.get('jid')}));
                         const bookmark = _.head(_converse.bookmarksview.model.where({'jid': room.get('jid')}));
@@ -97,6 +98,10 @@
             });
             });
 
 
             _converse.RoomsListElementView = Backbone.VDOMView.extend({
             _converse.RoomsListElementView = Backbone.VDOMView.extend({
+                events: {
+                    'click a.room-info': 'showRoomDetailsModal'
+                },
+
                 initialize () {
                 initialize () {
                     this.model.on('destroy', this.remove, this);
                     this.model.on('destroy', this.remove, this);
                     this.model.on('remove', this.remove, this);
                     this.model.on('remove', this.remove, this);
@@ -106,15 +111,6 @@
                     this.model.on('change:num_unread_general', this.render, this);
                     this.model.on('change:num_unread_general', this.render, this);
                 },
                 },
 
 
-                getRoomsListElementName () {
-                    if (this.model.get('bookmarked') && _converse.bookmarksview) {
-                        const bookmark = _.head(_converse.bookmarksview.model.where({'jid': this.model.get('jid')}));
-                        return bookmark.get('name');
-                    } else {
-                        return this.model.get('name');
-                    }
-                },
-
                 toHTML () {
                 toHTML () {
                     return tpl_rooms_list_item(
                     return tpl_rooms_list_item(
                         _.extend(this.model.toJSON(), {
                         _.extend(this.model.toJSON(), {
@@ -130,9 +126,28 @@
                             'name': this.getRoomsListElementName(),
                             'name': this.getRoomsListElementName(),
                             'open_title': __('Click to open this room')
                             'open_title': __('Click to open this room')
                         }));
                         }));
+                },
+
+                showRoomDetailsModal (ev) {
+                    const room = _converse.chatboxes.get(this.model.get('jid'));
+                    ev.preventDefault();
+                    if (_.isUndefined(room.room_details_modal)) {
+                        room.room_details_modal = new _converse.RoomDetailsModal({'model': room});
+                    }
+                    room.room_details_modal.show(ev);
+                },
+
+                getRoomsListElementName () {
+                    if (this.model.get('bookmarked') && _converse.bookmarksview) {
+                        const bookmark = _.head(_converse.bookmarksview.model.where({'jid': this.model.get('jid')}));
+                        return bookmark.get('name');
+                    } else {
+                        return this.model.get('name');
+                    }
                 }
                 }
             });
             });
 
 
+
             _converse.RoomsListView = Backbone.OrderedListView.extend({
             _converse.RoomsListView = Backbone.OrderedListView.extend({
                 tagName: 'div',
                 tagName: 'div',
                 className: 'open-rooms-list list-container rooms-list-container',
                 className: 'open-rooms-list list-container rooms-list-container',

+ 63 - 0
src/templates/chatroom_details_modal.html

@@ -0,0 +1,63 @@
+<div class="modal fade" id="room-details-modal" tabindex="-1" role="dialog" aria-labelledby="user-profile-modal-label" aria-hidden="true">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title" id="user-profile-modal-label">{{{o.display_name}}}</h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="{{{o.label_close}}}"><span aria-hidden="true">&times;</span></button>
+            </div>
+            <div class="modal-body">
+                <div class="room-info">
+                    <p class="room-info"><strong>{{{o.__('Room address (JID)')}}}</strong>: {{{o.jid}}}</p>
+                    <p class="room-info"><strong>{{{o.__('Name')}}}</strong>: {{{o.name}}}</p>
+                    <p class="room-info"><strong>{{{o.__('Description')}}}</strong>: {{{o.description}}}</p>
+                    <p class="room-info"><strong>{{{o.__('Online users')}}}</strong>: {{{o.num_occupants}}}</p>
+                    <p class="room-info"><strong>{{{o.__('Features')}}}</strong>:
+                        <div class="chatroom-features">
+                        <ul class="features-list">
+                        {[ if (o.passwordprotected) { ]}
+                        <li class="feature" ><span class="fa fa-lock"></span>{{{ o.__('Password protected') }}} - <em>{{{ o.__('This room requires a password before entry') }}}</em></li>
+                        {[ } ]}
+                        {[ if (o.unsecured) { ]}
+                        <li class="feature" ><span class="fa fa-unlock"></span>{{{ o.__('No password required') }}} - <em>{{{ o.__('This room does not require a password upon entry') }}}</em></li>
+                        {[ } ]}
+                        {[ if (o.hidden) { ]}
+                        <li class="feature" ><span class="fa fa-eye-slash"></span>{{{ o.__('Hidden') }}} - <em>{{{ o.__('This room is not publicly searchable') }}}</em></li>
+                        {[ } ]}
+                        {[ if (o.public_room) { ]}
+                        <li class="feature" ><span class="fa fa-eye"></span>{{{ o.__('Public') }}} - <em>{{{ o.__('This room is publicly searchable') }}}</em></li>
+                        {[ } ]}
+                        {[ if (o.membersonly) { ]}
+                        <li class="feature" ><span class="fa fa-address-book"></span>{{{ o.__('Members only') }}} - <em>{{{ o.__('this room is restricted to members only') }}}</em></li>
+                        {[ } ]}
+                        {[ if (o.open) { ]}
+                        <li class="feature" ><span class="fa fa-globe"></span>{{{ o.__('Open') }}} - <em>{{{ o.__('Anyone can join this room') }}}</em></li>
+                        {[ } ]}
+                        {[ if (o.persistent) { ]}
+                        <li class="feature" ><span class="fa fa-save"></span>{{{ o.__('Persistent') }}} - <em>{{{ o.__('This room persists even if it\'s unoccupied') }}}</em></li>
+                        {[ } ]}
+                        {[ if (o.temporary) { ]}
+                        <li class="feature" ><span class="fa fa-snowflake-o"></span>{{{ o.__('Temporary') }}} - <em>{{{ o.__('This room will disappear once the last person leaves') }}}</em></li>
+                        {[ } ]}
+                        {[ if (o.nonanonymous) { ]}
+                        <li class="feature" ><span class="fa fa-id-card"></span>{{{ o.__('Not anonymous') }}} - <em>{{{ o.__('All other room occupants can see your XMPP username') }}}</em></li>
+                        {[ } ]}
+                        {[ if (o.semianonymous) { ]}
+                        <li class="feature" ><span class="fa fa-user-secret"></span>{{{ o.__('Semi-anonymous') }}} - <em>{{{ o.__('Only moderators can see your XMPP username') }}}</em></li>
+                        {[ } ]}
+                        {[ if (o.moderated) { ]}
+                        <li class="feature" ><span class="fa fa-gavel"></span>{{{ o.__('Moderated') }}} - <em>{{{ o.__('This room is being moderated') }}}</em></li>
+                        {[ } ]}
+                        {[ if (o.unmoderated) { ]}
+                        <li class="feature" ><span class="fa fa-info-circle"></span>{{{ o.__('Not moderated') }}} - <em>{{{ o.__('This room is not being moderated') }}}</em></li>
+                        {[ } ]}
+                        {[ if (o.mam_enabled) { ]}
+                        <li class="feature" ><span class="fa fa-database"></span>{{{ o.__('Message archiving') }}} - <em>{{{ o.__('Messages are archived on the server') }}}</em></li>
+                        {[ } ]}
+                        </ul>
+                        </div>
+                    </p>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>

+ 14 - 14
src/templates/chatroom_features.html

@@ -1,44 +1,44 @@
 {[ if (o.has_features) { ]}
 {[ if (o.has_features) { ]}
-<p class="occupants-heading">{{{o.label_features}}}</p>
+<p class="occupants-heading">{{{o.__('Features')}}}</p>
 {[ } ]}
 {[ } ]}
 <ul class="features-list">
 <ul class="features-list">
 {[ if (o.passwordprotected) { ]}
 {[ if (o.passwordprotected) { ]}
-<li class="feature" title="{{{ o.tt_passwordprotected }}}"><span class="fa fa-lock"></span>{{{ o.label_passwordprotected }}}</li>
+<li class="feature" title="{{{ o.__('This room requires a password before entry') }}}"><span class="fa fa-lock"></span>{{{ o.__('Password protected') }}}</li>
 {[ } ]}
 {[ } ]}
 {[ if (o.unsecured) { ]}
 {[ if (o.unsecured) { ]}
-<li class="feature" title="{{{ o.tt_unsecured }}}"><span class="fa fa-unlock"></span>{{{ o.label_unsecured }}}</li>
+<li class="feature" title="{{{ o.__('This room does not require a password upon entry') }}}"><span class="fa fa-unlock"></span>{{{ o.__('No password') }}}</li>
 {[ } ]}
 {[ } ]}
 {[ if (o.hidden) { ]}
 {[ if (o.hidden) { ]}
-<li class="feature" title="{{{ o.tt_hidden }}}"><span class="fa fa-eye-slash"></span>{{{ o.label_hidden }}}</li>
+<li class="feature" title="{{{ o.__('This room is not publicly searchable') }}}"><span class="fa fa-eye-slash"></span>{{{ o.__('Hidden') }}}</li>
 {[ } ]}
 {[ } ]}
 {[ if (o.public_room) { ]}
 {[ if (o.public_room) { ]}
-<li class="feature" title="{{{ o.tt_public }}}"><span class="fa fa-eye"></span>{{{ o.label_public }}}</li>
+<li class="feature" title="{{{ o.__('This room is publicly searchable') }}}"><span class="fa fa-eye"></span>{{{ o.__('Public') }}}</li>
 {[ } ]}
 {[ } ]}
 {[ if (o.membersonly) { ]}
 {[ if (o.membersonly) { ]}
-<li class="feature" title="{{{ o.tt_membersonly }}}"><span class="fa fa-address-book"></span>{{{ o.label_membersonly }}}</li>
+<li class="feature" title="{{{ o.__('this room is restricted to members only') }}}"><span class="fa fa-address-book"></span>{{{ o.__('Members only') }}}</li>
 {[ } ]}
 {[ } ]}
 {[ if (o.open) { ]}
 {[ if (o.open) { ]}
-<li class="feature" title="{{{ o.tt_open }}}"><span class="fa fa-globe"></span>{{{ o.label_open }}}</li>
+<li class="feature" title="{{{ o.__('Anyone can join this room') }}}"><span class="fa fa-globe"></span>{{{ o.__('Open') }}}</li>
 {[ } ]}
 {[ } ]}
 {[ if (o.persistent) { ]}
 {[ if (o.persistent) { ]}
-<li class="feature" title="{{{ o.tt_persistent }}}"><span class="fa fa-save"></span>{{{ o.label_persistent }}}</li>
+<li class="feature" title="{{{ o.__('This room persists even if it\'s unoccupied') }}}"><span class="fa fa-save"></span>{{{ o.__('Persistent') }}}</li>
 {[ } ]}
 {[ } ]}
 {[ if (o.temporary) { ]}
 {[ if (o.temporary) { ]}
-<li class="feature" title="{{{ o.tt_temporary }}}"><span class="fa fa-snowflake-o"></span>{{{ o.label_temporary }}}</li>
+<li class="feature" title="{{{ o.__('This room will disappear once the last person leaves') }}}"><span class="fa fa-snowflake-o"></span>{{{ o.__('Temporary') }}}</li>
 {[ } ]}
 {[ } ]}
 {[ if (o.nonanonymous) { ]}
 {[ if (o.nonanonymous) { ]}
-<li class="feature" title="{{{ o.tt_nonanonymous }}}"><span class="fa fa-id-card"></span>{{{ o.label_nonanonymous }}}</li>
+<li class="feature" title="{{{ o.__('All other room occupants can see your XMPP username') }}}"><span class="fa fa-id-card"></span>{{{ o.__('Not anonymous') }}}</li>
 {[ } ]}
 {[ } ]}
 {[ if (o.semianonymous) { ]}
 {[ if (o.semianonymous) { ]}
-<li class="feature" title="{{{ o.tt_semianonymous }}}"><span class="fa fa-user-secret"></span>{{{ o.label_semianonymous }}}</li>
+<li class="feature" title="{{{ o.__('Only moderators can see your XMPP username') }}}"><span class="fa fa-user-secret"></span>{{{ o.__('Semi-anonymous') }}}</li>
 {[ } ]}
 {[ } ]}
 {[ if (o.moderated) { ]}
 {[ if (o.moderated) { ]}
-<li class="feature" title="{{{ o.tt_moderated }}}"><span class="fa fa-gavel"></span>{{{ o.label_moderated }}}</li>
+<li class="feature" title="{{{ o.__('This room is being moderated') }}}"><span class="fa fa-gavel"></span>{{{ o.__('Moderated') }}}</li>
 {[ } ]}
 {[ } ]}
 {[ if (o.unmoderated) { ]}
 {[ if (o.unmoderated) { ]}
-<li class="feature" title="{{{ o.tt_unmoderated }}}"><span class="fa fa-info-circle"></span>{{{ o.label_unmoderated }}}</li>
+<li class="feature" title="{{{ o.__('This room is not being moderated') }}}"><span class="fa fa-info-circle"></span>{{{ o.__('Not moderated') }}}</li>
 {[ } ]}
 {[ } ]}
 {[ if (o.mam_enabled) { ]}
 {[ if (o.mam_enabled) { ]}
-<li class="feature" title="{{{ o.tt_mam_enabled }}}"><span class="fa fa-database"></span>{{{ o.label_mam_enabled }}}</li>
+<li class="feature" title="{{{ o.__('Messages are archived on the server') }}}"><span class="fa fa-database"></span>{{{ o.__('Message archiving') }}}</li>
 {[ } ]}
 {[ } ]}
 </ul>
 </ul>

+ 1 - 0
src/templates/chatroom_head.html

@@ -14,4 +14,5 @@
     {[ if (o.affiliation == 'owner') { ]}
     {[ if (o.affiliation == 'owner') { ]}
     <a class="chatbox-btn configure-chatroom-button fa fa-wrench" title="{{{o.info_configure}}} "></a>
     <a class="chatbox-btn configure-chatroom-button fa fa-wrench" title="{{{o.info_configure}}} "></a>
     {[ } ]}
     {[ } ]}
+    <a class="chatbox-btn show-room-details-modal fa fa-info-circle" title="{{{o.info_details}}}"></a>
 </div>
 </div>

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott