Commit 78d6d493 authored by JC Brand's avatar JC Brand

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

parent f7c3351e
......@@ -6938,6 +6938,8 @@ body.reset {
min-height: 0; }
#conversejs strong {
font-weight: 700; }
#conversejs em {
font-style: italic; }
#conversejs ol, #conversejs ul {
list-style: none; }
#conversejs li {
......@@ -8443,6 +8445,26 @@ body.reset {
#conversejs .add-chatroom input[type="submit"],
#conversejs .add-chatroom input[type="button"] {
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 .chat-head-chatroom {
background-color: #E77051; }
......@@ -8567,16 +8589,6 @@ body.reset {
#conversejs .chatroom .box-flyout .chatroom-body .occupants .occupants-header .occupants-heading {
font-family: "Century Gothic", futura, "URW Gothic L", Verdana, sans-serif;
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 .chatroom .box-flyout .chatroom-body .occupants .awesomplete ul {
padding: 0; }
......@@ -8596,15 +8608,6 @@ body.reset {
flex-basis: 0;
flex-grow: 1;
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 .chatroom .box-flyout .chatroom-body .occupants ul li {
cursor: default;
......
......@@ -32,8 +32,8 @@
notify_all_room_messages: [
'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',
debug: true
});
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -63421,6 +63421,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
},
showUserDetailsModal(ev) {
ev.preventDefault();
if (_.isUndefined(this.user_details_modal)) {
this.user_details_modal = new _converse.UserDetailsModal({
model: this.model
......@@ -69169,11 +69171,11 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
// Copyright (c) 2012-2018, the Converse.js developers
// Licensed under the Mozilla Public License (MPLv2)
(function (root, factory) {
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! converse-core */ "./src/converse-core.js"), __webpack_require__(/*! muc-utils */ "./src/utils/muc.js"), __webpack_require__(/*! templates/add_chatroom_modal.html */ "./src/templates/add_chatroom_modal.html"), __webpack_require__(/*! templates/chatarea.html */ "./src/templates/chatarea.html"), __webpack_require__(/*! templates/chatroom.html */ "./src/templates/chatroom.html"), __webpack_require__(/*! templates/chatroom_disconnect.html */ "./src/templates/chatroom_disconnect.html"), __webpack_require__(/*! templates/chatroom_features.html */ "./src/templates/chatroom_features.html"), __webpack_require__(/*! templates/chatroom_form.html */ "./src/templates/chatroom_form.html"), __webpack_require__(/*! templates/chatroom_head.html */ "./src/templates/chatroom_head.html"), __webpack_require__(/*! templates/chatroom_invite.html */ "./src/templates/chatroom_invite.html"), __webpack_require__(/*! templates/chatroom_nickname_form.html */ "./src/templates/chatroom_nickname_form.html"), __webpack_require__(/*! templates/chatroom_password_form.html */ "./src/templates/chatroom_password_form.html"), __webpack_require__(/*! templates/chatroom_sidebar.html */ "./src/templates/chatroom_sidebar.html"), __webpack_require__(/*! templates/chatroom_toolbar.html */ "./src/templates/chatroom_toolbar.html"), __webpack_require__(/*! templates/info.html */ "./src/templates/info.html"), __webpack_require__(/*! templates/list_chatrooms_modal.html */ "./src/templates/list_chatrooms_modal.html"), __webpack_require__(/*! templates/occupant.html */ "./src/templates/occupant.html"), __webpack_require__(/*! templates/room_description.html */ "./src/templates/room_description.html"), __webpack_require__(/*! templates/room_item.html */ "./src/templates/room_item.html"), __webpack_require__(/*! templates/room_panel.html */ "./src/templates/room_panel.html"), __webpack_require__(/*! templates/rooms_results.html */ "./src/templates/rooms_results.html"), __webpack_require__(/*! templates/spinner.html */ "./src/templates/spinner.html"), __webpack_require__(/*! awesomplete */ "./node_modules/awesomplete-avoid-xss/awesomplete.js"), __webpack_require__(/*! converse-modal */ "./src/converse-modal.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! converse-core */ "./src/converse-core.js"), __webpack_require__(/*! muc-utils */ "./src/utils/muc.js"), __webpack_require__(/*! templates/add_chatroom_modal.html */ "./src/templates/add_chatroom_modal.html"), __webpack_require__(/*! templates/chatarea.html */ "./src/templates/chatarea.html"), __webpack_require__(/*! templates/chatroom.html */ "./src/templates/chatroom.html"), __webpack_require__(/*! templates/chatroom_details_modal.html */ "./src/templates/chatroom_details_modal.html"), __webpack_require__(/*! templates/chatroom_disconnect.html */ "./src/templates/chatroom_disconnect.html"), __webpack_require__(/*! templates/chatroom_features.html */ "./src/templates/chatroom_features.html"), __webpack_require__(/*! templates/chatroom_form.html */ "./src/templates/chatroom_form.html"), __webpack_require__(/*! templates/chatroom_head.html */ "./src/templates/chatroom_head.html"), __webpack_require__(/*! templates/chatroom_invite.html */ "./src/templates/chatroom_invite.html"), __webpack_require__(/*! templates/chatroom_nickname_form.html */ "./src/templates/chatroom_nickname_form.html"), __webpack_require__(/*! templates/chatroom_password_form.html */ "./src/templates/chatroom_password_form.html"), __webpack_require__(/*! templates/chatroom_sidebar.html */ "./src/templates/chatroom_sidebar.html"), __webpack_require__(/*! templates/chatroom_toolbar.html */ "./src/templates/chatroom_toolbar.html"), __webpack_require__(/*! templates/info.html */ "./src/templates/info.html"), __webpack_require__(/*! templates/list_chatrooms_modal.html */ "./src/templates/list_chatrooms_modal.html"), __webpack_require__(/*! templates/occupant.html */ "./src/templates/occupant.html"), __webpack_require__(/*! templates/room_description.html */ "./src/templates/room_description.html"), __webpack_require__(/*! templates/room_item.html */ "./src/templates/room_item.html"), __webpack_require__(/*! templates/room_panel.html */ "./src/templates/room_panel.html"), __webpack_require__(/*! templates/rooms_results.html */ "./src/templates/rooms_results.html"), __webpack_require__(/*! templates/spinner.html */ "./src/templates/spinner.html"), __webpack_require__(/*! awesomplete */ "./node_modules/awesomplete-avoid-xss/awesomplete.js"), __webpack_require__(/*! converse-modal */ "./src/converse-modal.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
})(void 0, function (converse, muc_utils, tpl_add_chatroom_modal, tpl_chatarea, tpl_chatroom, tpl_chatroom_disconnect, tpl_chatroom_features, tpl_chatroom_form, tpl_chatroom_head, tpl_chatroom_invite, tpl_chatroom_nickname_form, tpl_chatroom_password_form, tpl_chatroom_sidebar, tpl_chatroom_toolbar, tpl_info, tpl_list_chatrooms_modal, tpl_occupant, tpl_room_description, tpl_room_item, tpl_room_panel, tpl_rooms_results, tpl_spinner, Awesomplete) {
})(void 0, function (converse, muc_utils, tpl_add_chatroom_modal, tpl_chatarea, tpl_chatroom, tpl_chatroom_details_modal, tpl_chatroom_disconnect, tpl_chatroom_features, tpl_chatroom_form, tpl_chatroom_head, tpl_chatroom_invite, tpl_chatroom_nickname_form, tpl_chatroom_password_form, tpl_chatroom_sidebar, tpl_chatroom_toolbar, tpl_info, tpl_list_chatrooms_modal, tpl_occupant, tpl_room_description, tpl_room_item, tpl_room_panel, tpl_rooms_results, tpl_spinner, Awesomplete) {
"use strict";
const _converse$env = converse.env,
......@@ -69607,6 +69609,23 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
ev.target.reset();
}
});
_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({
/* Backbone.NativeView which renders a chat room, based upon the view
......@@ -69621,6 +69640,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
'click .chatbox-navback': 'showControlBox',
'click .close-chatbox-button': 'close',
'click .configure-chatroom-button': 'getAndRenderConfigurationForm',
'click .show-room-details-modal': 'showRoomDetailsModal',
'click .hide-occupants': 'hideOccupants',
'click .new-msgs-indicator': 'viewUnreadMessages',
'click .occupant-nick': 'onOccupantClicked',
......@@ -69725,6 +69745,18 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
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) {
if (message.get('sender') === 'me') {
return;
......@@ -69768,10 +69800,11 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
/* Returns the heading HTML to be rendered.
*/
return tpl_chatroom_head(_.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') || ''
}));
},
......@@ -70729,16 +70762,13 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
});
_converse.RoomsPanel = Backbone.NativeView.extend({
/* Backbone.NativeView which renders MUC section of the control box.
*
* Chat rooms can be listed, joined and new rooms can be created.
*/
tagName: 'div',
className: 'controlbox-section',
id: 'chatrooms',
events: {
'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() {
......@@ -70750,11 +70780,6 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
return this;
},
toggleRoomInfo(ev) {
ev.preventDefault();
toggleRoomInfo(ev);
},
showAddRoomModal(ev) {
if (_.isUndefined(this.add_room_modal)) {
this.add_room_modal = new _converse.AddChatRoomModal({
......@@ -70882,34 +70907,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
el = this.el.querySelector('.chatroom-features');
el.innerHTML = tpl_chatroom_features(_.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();
return this;
......@@ -71359,6 +71358,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
this.handlers[type][name] = callback;
},
getDisplayName() {
return this.get('name') || this.get('jid');
},
join(nick, password) {
/* Join the chat room.
*
......@@ -71579,7 +71582,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
* <feature var='urn:xmpp:mam:0'/>
*/
const features = {
'features_fetched': true,
'features_fetched': moment().format(),
'name': iq.querySelector('identity').getAttribute('name')
};
......@@ -74144,6 +74147,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
}
});
_converse.RoomsListElementView = Backbone.VDOMView.extend({
events: {
'click a.room-info': 'showRoomDetailsModal'
},
initialize() {
this.model.on('destroy', this.remove, this);
this.model.on('remove', this.remove, this);
......@@ -74153,18 +74160,6 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
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() {
return tpl_rooms_list_item(_.extend(this.model.toJSON(), {
// XXX: By the time this renders, the _converse.bookmarks
......@@ -74179,6 +74174,32 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
'name': this.getRoomsListElementName(),
'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');
}
}
});
......@@ -77666,6 +77687,149 @@ return __p
/***/ }),
/***/ "./src/templates/chatroom_details_modal.html":
/*!***************************************************!*\
!*** ./src/templates/chatroom_details_modal.html ***!
\***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
var _ = {escape:__webpack_require__(/*! ./node_modules/lodash/escape.js */ "./node_modules/lodash/escape.js")};
module.exports = function(o) {
var __t, __p = '', __e = _.escape, __j = Array.prototype.join;
function print() { __p += __j.call(arguments, '') }
__p += '<!-- src/templates/chatroom_details_modal.html -->\n<div class="modal fade" id="room-details-modal" tabindex="-1" role="dialog" aria-labelledby="user-profile-modal-label" aria-hidden="true">\n <div class="modal-dialog" role="document">\n <div class="modal-content">\n <div class="modal-header">\n <h5 class="modal-title" id="user-profile-modal-label">' +
__e(o.display_name) +
'</h5>\n <button type="button" class="close" data-dismiss="modal" aria-label="' +
__e(o.label_close) +
'"><span aria-hidden="true">&times;</span></button>\n </div>\n <div class="modal-body">\n <div class="room-info">\n <p class="room-info"><strong>' +
__e(o.__('Room address (JID)')) +
'</strong>: ' +
__e(o.jid) +
'</p>\n <p class="room-info"><strong>' +
__e(o.__('Name')) +
'</strong>: ' +
__e(o.name) +
'</p>\n <p class="room-info"><strong>' +
__e(o.__('Description')) +
'</strong>: ' +
__e(o.description) +
'</p>\n <p class="room-info"><strong>' +
__e(o.__('Online users')) +
'</strong>: ' +
__e(o.num_occupants) +
'</p>\n <p class="room-info"><strong>' +
__e(o.__('Features')) +
'</strong>:\n <div class="chatroom-features">\n <ul class="features-list">\n ';
if (o.passwordprotected) { ;
__p += '\n <li class="feature" ><span class="fa fa-lock"></span>' +
__e( o.__('Password protected') ) +
' - <em>' +
__e( o.__('This room requires a password before entry') ) +
'</em></li>\n ';
} ;
__p += '\n ';
if (o.unsecured) { ;
__p += '\n <li class="feature" ><span class="fa fa-unlock"></span>' +
__e( o.__('No password required') ) +
' - <em>' +
__e( o.__('This room does not require a password upon entry') ) +
'</em></li>\n ';
} ;
__p += '\n ';
if (o.hidden) { ;
__p += '\n <li class="feature" ><span class="fa fa-eye-slash"></span>' +
__e( o.__('Hidden') ) +
' - <em>' +
__e( o.__('This room is not publicly searchable') ) +
'</em></li>\n ';
} ;
__p += '\n ';
if (o.public_room) { ;
__p += '\n <li class="feature" ><span class="fa fa-eye"></span>' +
__e( o.__('Public') ) +
' - <em>' +
__e( o.__('This room is publicly searchable') ) +
'</em></li>\n ';
} ;
__p += '\n ';
if (o.membersonly) { ;
__p += '\n <li class="feature" ><span class="fa fa-address-book"></span>' +
__e( o.__('Members only') ) +
' - <em>' +
__e( o.__('this room is restricted to members only') ) +
'</em></li>\n ';
} ;
__p += '\n ';
if (o.open) { ;
__p += '\n <li class="feature" ><span class="fa fa-globe"></span>' +
__e( o.__('Open') ) +
' - <em>' +
__e( o.__('Anyone can join this room') ) +
'</em></li>\n ';
} ;
__p += '\n ';
if (o.persistent) { ;
__p += '\n <li class="feature" ><span class="fa fa-save"></span>' +
__e( o.__('Persistent') ) +
' - <em>' +
__e( o.__('This room persists even if it\'s unoccupied') ) +
'</em></li>\n ';
} ;
__p += '\n ';
if (o.temporary) { ;
__p += '\n <li class="feature" ><span class="fa fa-snowflake-o"></span>' +
__e( o.__('Temporary') ) +
' - <em>' +
__e( o.__('This room will disappear once the last person leaves') ) +
'</em></li>\n ';
} ;
__p += '\n ';
if (o.nonanonymous) { ;
__p += '\n <li class="feature" ><span class="fa fa-id-card"></span>' +
__e( o.__('Not anonymous') ) +
' - <em>' +
__e( o.__('All other room occupants can see your XMPP username') ) +
'</em></li>\n ';
} ;
__p += '\n ';
if (o.semianonymous) { ;
__p += '\n <li class="feature" ><span class="fa fa-user-secret"></span>' +
__e( o.__('Semi-anonymous') ) +
' - <em>' +
__e( o.__('Only moderators can see your XMPP username') ) +
'</em></li>\n ';
} ;
__p += '\n ';
if (o.moderated) { ;
__p += '\n <li class="feature" ><span class="fa fa-gavel"></span>' +
__e( o.__('Moderated') ) +
' - <em>' +
__e( o.__('This room is being moderated') ) +
'</em></li>\n ';
} ;
__p += '\n ';
if (o.unmoderated) { ;
__p += '\n <li class="feature" ><span class="fa fa-info-circle"></span>' +
__e( o.__('Not moderated') ) +
' - <em>' +
__e( o.__('This room is not being moderated') ) +
'</em></li>\n ';
} ;
__p += '\n ';
if (o.mam_enabled) { ;
__p += '\n <li class="feature" ><span class="fa fa-database"></span>' +
__e( o.__('Message archiving') ) +
' - <em>' +
__e( o.__('Messages are archived on the server') ) +
'</em></li>\n ';
} ;
__p += '\n </ul>\n </div>\n </p>\n </div>\n </div>\n </div>\n </div>\n</div>\n';
return __p
};
/***/ }),
/***/ "./src/templates/chatroom_disconnect.html":
/*!************************************************!*\
!*** ./src/templates/chatroom_disconnect.html ***!
......@@ -77698,111 +77862,111 @@ function print() { __p += __j.call(arguments, '') }
__p += '<!-- src/templates/chatroom_features.html -->\n';
if (o.has_features) { ;
__p += '\n<p class="occupants-heading">' +
__e(o.label_features) +
__e(o.__('Features')) +
'</p>\n';
} ;
__p += '\n<ul class="features-list">\n';
if (o.passwordprotected) { ;
__p += '\n<li class="feature" title="' +
__e( o.tt_passwordprotected ) +
__e( o.__('This room requires a password before entry') ) +
'"><span class="fa fa-lock"></span>' +
__e( o.label_passwordprotected ) +
__e( o.__('Password protected') ) +
'</li>\n';
} ;
__p += '\n';
if (o.unsecured) { ;
__p += '\n<li class="feature" title="' +
__e( o.tt_unsecured ) +
__e( o.__('This room does not require a password upon entry') ) +
'"><span class="fa fa-unlock"></span>' +
__e( o.label_unsecured ) +
__e( o.__('No password') ) +
'</li>\n';
} ;
__p += '\n';
if (o.hidden) { ;
__p += '\n<li class="feature" title="' +
__e( o.tt_hidden ) +
__e( o.__('This room is not publicly searchable') ) +
'"><span class="fa fa-eye-slash"></span>' +
__e( o.label_hidden ) +
__e( o.__('Hidden') ) +
'</li>\n';
} ;
__p += '\n';
if (o.public_room) { ;
__p += '\n<li class="feature" title="' +
__e( o.tt_public ) +
__e( o.__('This room is publicly searchable') ) +
'"><span class="fa fa-eye"></span>' +
__e( o.label_public ) +
__e( o.__('Public') ) +
'</li>\n';
} ;
__p += '\n';
if (o.membersonly) { ;
__p += '\n<li class="feature" title="' +
__e( o.tt_membersonly ) +
__e( o.__('this room is restricted to members only') ) +
'"><span class="fa fa-address-book"></span>' +
__e( o.label_membersonly ) +
__e( o.__('Members only') ) +
'</li>\n';
} ;
__p += '\n';
if (o.open) { ;
__p += '\n<li class="feature" title="' +
__e( o.tt_open ) +
__e( o.__('Anyone can join this room') ) +
'"><span class="fa fa-globe"></span>' +
__e( o.label_open ) +
__e( o.__('Open') ) +
'</li>\n';
} ;
__p += '\n';
if (o.persistent) { ;
__p += '\n<li class="feature" title="' +
__e( o.tt_persistent ) +
__e( o.__('This room persists even if it\'s unoccupied') ) +
'"><span class="fa fa-save"></span>' +
__e( o.label_persistent ) +
__e( o.__('Persistent') ) +
'</li>\n';
} ;
__p += '\n';
if (o.temporary) { ;
__p += '\n<li class="feature" title="' +
__e( o.tt_temporary ) +
__e( o.__('This room will disappear once the last person leaves') ) +
'"><span class="fa fa-snowflake-o"></span>' +
__e( o.label_temporary ) +
__e( o.__('Temporary') ) +
'</li>\n';
} ;
__p += '\n';
if (o.nonanonymous) { ;
__p += '\n<li class="feature" title="' +
__e( o.tt_nonanonymous ) +
__e( o.__('All other room occupants can see your XMPP username') ) +
'"><span class="fa fa-id-card"></span>' +
__e( o.label_nonanonymous ) +
__e( o.__('Not anonymous') ) +
'</li>\n';
} ;
__p += '\n';
if (o.semianonymous) { ;
__p += '\n<li class="feature" title="' +
__e( o.tt_semianonymous ) +
__e( o.__('Only moderators can see your XMPP username') ) +
'"><span class="fa fa-user-secret"></span>' +
__e( o.label_semianonymous ) +
__e( o.__('Semi-anonymous') ) +
'</li>\n';
} ;
__p += '\n';
if (o.moderated) { ;
__p += '\n<li class="feature" title="' +
__e( o.tt_moderated ) +
__e( o.__('This room is being moderated') ) +
'"><span class="fa fa-gavel"></span>' +
__e( o.label_moderated ) +
__e( o.__('Moderated') ) +
'</li>\n';
} ;
__p += '\n';
if (o.unmoderated) { ;
__p += '\n<li class="feature" title="' +
__e( o.tt_unmoderated ) +
__e( o.__('This room is not being moderated') ) +
'"><span class="fa fa-info-circle"></span>' +
__e( o.label_unmoderated ) +
__e( o.__('Not moderated') ) +
'</li>\n';
} ;
__p += '\n';
if (o.mam_enabled) { ;
__p += '\n<li class="feature" title="' +
__e( o.tt_mam_enabled ) +
__e( o.__('Messages are archived on the server') ) +
'"><span class="fa fa-database"></span>' +
__e( o.label_mam_enabled ) +
__e( o.__('Message archiving') ) +
'</li>\n';
} ;
__p += '\n</ul>\n';
......@@ -77862,7 +78026,9 @@ __p += '\n <a class="chatbox-btn configure-chatroom-button fa fa-wrench" titl
__e(o.info_configure) +
' "></a>\n ';
} ;
__p += '\n</div>\n';
__p += '\n <a class="chatbox-btn show-room-details-modal fa fa-info-circle" title="' +
__e(o.info_details) +
'"></a>\n</div>\n';
return __p
};
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Converse.js 3.3.4\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
......@@ -17,688 +17,402 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\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"
msgstr ""
#: dist/converse-no-dependencies.js:16465
#: dist/converse-no-dependencies.js:34328
msgid "The name for this bookmark:"
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?"
msgstr ""
#: dist/converse-no-dependencies.js:16467
#: dist/converse-no-dependencies.js:34330
msgid "What should your nickname for this room be?"
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"
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"
msgstr ""
#: dist/converse-no-dependencies.js:16543
#: dist/converse-no-dependencies.js:34406
#, javascript-format
msgid "Are you sure you want to remove the bookmark \"%1$s\"?"
msgstr ""
#: dist/converse-no-dependencies.js:16659
#: dist/converse-no-dependencies.js:34522
msgid "Sorry, something went wrong while trying to save your bookmark."
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"
msgstr ""
#: dist/converse-no-dependencies.js:16739
#: dist/converse-no-dependencies.js:34602
msgid "Remove this bookmark"
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"
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"
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"
msgstr ""
#: dist/converse-no-dependencies.js:16780
#: dist/converse-no-dependencies.js:34643
msgid "Click to toggle the bookmarks list"
msgstr ""
#: dist/converse-no-dependencies.js:16781
#: dist/converse-no-dependencies.js:34644
msgid "Bookmarks"
msgstr ""
#: dist/converse-no-dependencies.js:21217
#: dist/converse-no-dependencies.js:35089
msgid "Sorry, could not determine file upload URL."
msgstr ""
#: dist/converse-no-dependencies.js:21225
#: dist/converse-no-dependencies.js:35097
msgid "Sorry, could not determine upload URL."
msgstr ""
#: dist/converse-no-dependencies.js:21257
#: dist/converse-no-dependencies.js:35129
msgid "Sorry, could not succesfully upload your file."
msgstr ""
#: dist/converse-no-dependencies.js:21260
#: dist/converse-no-dependencies.js:35132
#, javascript-format
msgid "Your server's response: \"%1$s\""
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."
msgstr ""
#: dist/converse-no-dependencies.js:21452
#: dist/converse-no-dependencies.js:35316
#, javascript-format
msgid ""
"The size of your file, %1$s, exceeds the maximum allowed by your server, "
"which is %2$s."
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"
msgstr ""
#: dist/converse-no-dependencies.js:22516
#: dist/converse-no-dependencies.js:36067
msgid "The User's Profile Image"
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"
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"
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"
msgstr ""
#: dist/converse-no-dependencies.js:22522
#: dist/converse-no-dependencies.js:36073
msgid "Jabber ID"
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"
msgstr ""
#: dist/converse-no-dependencies.js:22524
#: dist/converse-no-dependencies.js:36075
msgid "Remove as contact"
msgstr ""
#: dist/converse-no-dependencies.js:22525
#: dist/converse-no-dependencies.js:36076
msgid "Refresh"
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"
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"
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?"
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"
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
msgid "Sorry, there was an error while trying to remove %1$s as a contact."
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"
msgstr ""
#: dist/converse-no-dependencies.js:22653
#: dist/converse-no-dependencies.js:36204
msgid "Hidden message"
msgstr ""
#: dist/converse-no-dependencies.js:22655
#: dist/converse-no-dependencies.js:36206
msgid "Personal message"
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"
msgstr ""
#: dist/converse-no-dependencies.js:22663
#: dist/converse-no-dependencies.js:36214
msgid "Optional hint"
msgstr ""
#: dist/converse-no-dependencies.js:22692
#: dist/converse-no-dependencies.js:36252
msgid "Choose a file to send"
msgstr ""
#: dist/converse-no-dependencies.js:22748
#: dist/converse-no-dependencies.js:36308
msgid "Click to write as a normal (non-spoiler) message"
msgstr ""
#: dist/converse-no-dependencies.js:22750
#: dist/converse-no-dependencies.js:36310
msgid "Click to write your message as a spoiler"
msgstr ""
#: dist/converse-no-dependencies.js:22754
#: dist/converse-no-dependencies.js:36314
msgid "Clear all messages"
msgstr ""
#: dist/converse-no-dependencies.js:22755
#: dist/converse-no-dependencies.js:36315
msgid "Insert emojis"
msgstr ""
#: dist/converse-no-dependencies.js:22756
#: dist/converse-no-dependencies.js:36316
msgid "Start a call"
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"
msgstr ""
#: dist/converse-no-dependencies.js:23069
#: dist/converse-no-dependencies.js:36629
msgid "Write in the third person"
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"
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?"
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"
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 ""
#: 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 ""
#: dist/converse-no-dependencies.js:23869
msgid "This contact is away"
#: dist/converse-no-dependencies.js:36823
msgid "is online"
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"
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 ""
#: dist/converse-no-dependencies.js:23932
msgid "Add"
#: dist/converse-no-dependencies.js:37447
msgid "user@domain"
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"
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 ""
#: dist/converse-no-dependencies.js:25377
msgid "Custom status"
#: dist/converse-no-dependencies.js:37544
msgid "Toggle chat"
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 ""
#: 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 ""
#: 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 ""
#: dist/converse-no-dependencies.js:25427
#: dist/converse-no-dependencies.js:38239
#, 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 ""
#: 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 ""
#: dist/converse-no-dependencies.js:25472
msgid "offline"
#: dist/converse-no-dependencies.js:40963
msgid "Show more"
msgstr ""
#: dist/converse-no-dependencies.js:25909
msgid "Username"
#: dist/converse-no-dependencies.js:41006
msgid "Typing from another device"
msgstr ""
#: dist/converse-no-dependencies.js:25909
msgid "user@domain"
#: dist/converse-no-dependencies.js:41008
msgid "is typing"
msgstr ""
#: dist/converse-no-dependencies.js:26003
msgid "Chat Contacts"
#: dist/converse-no-dependencies.js:41012
msgid "Stopped typing on the other device"
msgstr ""
#: dist/converse-no-dependencies.js:26003
msgid "Toggle chat"
#: dist/converse-no-dependencies.js:41014
msgid "has stopped typing"
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"
msgstr ""
#: dist/converse-no-dependencies.js:27705
#: dist/converse-no-dependencies.js:41421
msgid "Click to restore this chat"
msgstr ""
#: dist/converse-no-dependencies.js:27892
#: dist/converse-no-dependencies.js:41608
msgid "Minimized"
msgstr ""
#: dist/converse-no-dependencies.js:28650
#: dist/converse-no-dependencies.js:41937
msgid "This room is not anonymous"
msgstr ""
#: dist/converse-no-dependencies.js:28651
#: dist/converse-no-dependencies.js:41938
msgid "This room now shows unavailable members"
msgstr ""
#: dist/converse-no-dependencies.js:28652
#: dist/converse-no-dependencies.js:41939
msgid "This room does not show unavailable members"
msgstr ""
#: dist/converse-no-dependencies.js:28653
#: dist/converse-no-dependencies.js:41940
msgid "The room configuration has changed"
msgstr ""
#: dist/converse-no-dependencies.js:28654
#: dist/converse-no-dependencies.js:41941
msgid "Room logging is now enabled"
msgstr ""
#: dist/converse-no-dependencies.js:28655
#: dist/converse-no-dependencies.js:41942
msgid "Room logging is now disabled"
msgstr ""
#: dist/converse-no-dependencies.js:28656
#: dist/converse-no-dependencies.js:41943
msgid "This room is now no longer anonymous"
msgstr ""
#: dist/converse-no-dependencies.js:28657
#: dist/converse-no-dependencies.js:41944
msgid "This room is now semi-anonymous"
msgstr ""
#: dist/converse-no-dependencies.js:28658
#: dist/converse-no-dependencies.js:41945
msgid "This room is now fully-anonymous"
msgstr ""
#: dist/converse-no-dependencies.js:28659
#: dist/converse-no-dependencies.js:41946
msgid "A new room has been created"
msgstr ""
#: dist/converse-no-dependencies.js:28663
#: dist/converse-no-dependencies.js:41949
msgid "You have been banned from this room"
msgstr ""
#: dist/converse-no-dependencies.js:28664
#: dist/converse-no-dependencies.js:41950
msgid "You have been kicked from this room"
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"
msgstr ""
#: dist/converse-no-dependencies.js:28666
#: dist/converse-no-dependencies.js:41952
msgid ""
"You have been removed from this room because the room has changed to members-"
"only and you're not a member"
msgstr ""
#: dist/converse-no-dependencies.js:28667
#: dist/converse-no-dependencies.js:41953
msgid ""
"You have been removed from this room because the MUC (Multi-user chat) "
"service is being shut down"
......@@ -714,798 +428,949 @@ msgstr ""
#. * can then at least tell gettext to scan for it so that these
#. * strings are picked up by the translation machinery.
#.
#: dist/converse-no-dependencies.js:28681
#: dist/converse-no-dependencies.js:41966
#, javascript-format
msgid "%1$s has been banned"
msgstr ""
#: dist/converse-no-dependencies.js:28682
#: dist/converse-no-dependencies.js:41967
#, javascript-format
msgid "%1$s's nickname has changed"
msgstr ""
#: dist/converse-no-dependencies.js:28683
#: dist/converse-no-dependencies.js:41968
#, javascript-format
msgid "%1$s has been kicked out"
msgstr ""
#: dist/converse-no-dependencies.js:28684
#: dist/converse-no-dependencies.js:41969
#, javascript-format
msgid "%1$s has been removed because of an affiliation change"
msgstr ""
#: dist/converse-no-dependencies.js:28685
#: dist/converse-no-dependencies.js:41970
#, javascript-format
msgid "%1$s has been removed for not being a member"
msgstr ""
#: dist/converse-no-dependencies.js:28689
#: dist/converse-no-dependencies.js:41973
#, javascript-format
msgid "Your nickname has been automatically set to %1$s"
msgstr ""
#: dist/converse-no-dependencies.js:28690
#: dist/converse-no-dependencies.js:41974
#, javascript-format
msgid "Your nickname has been changed to %1$s"
msgstr ""
#: dist/converse-no-dependencies.js:28724
msgid "Description:"
#: dist/converse-no-dependencies.js:41992
msgid "Query for Chatrooms"
msgstr ""
#: dist/converse-no-dependencies.js:28725
msgid "Room Address (JID):"
#: dist/converse-no-dependencies.js:41993
msgid "Server address"
msgstr ""
#: dist/converse-no-dependencies.js:28726
msgid "Occupants:"
#: dist/converse-no-dependencies.js:41994
msgid "Show rooms"
msgstr ""
#: dist/converse-no-dependencies.js:28727
msgid "Features:"
#: dist/converse-no-dependencies.js:41995
msgid "conference.example.org"
msgstr ""
#: dist/converse-no-dependencies.js:28728
msgid "Requires authentication"
#: dist/converse-no-dependencies.js:42053
msgid "No rooms found"
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 ""
#: dist/converse-no-dependencies.js:28730
msgid "Requires an invitation"
#: dist/converse-no-dependencies.js:42122
msgid "Enter a new Chatroom"
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 ""
#: 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 ""
#: dist/converse-no-dependencies.js:28733
msgid "Open room"
#: dist/converse-no-dependencies.js:42125
msgid "name@conference.example.org"
msgstr ""
#: dist/converse-no-dependencies.js:28734
msgid "Permanent room"
#: dist/converse-no-dependencies.js:42126
msgid "Join"
msgstr ""
#: dist/converse-no-dependencies.js:28735
#: dist/converse-no-dependencies.js:30130
msgid "Public"
#: dist/converse-no-dependencies.js:42169
msgid "Description:"
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 ""
#: dist/converse-no-dependencies.js:28737
msgid "Temporary room"
#: dist/converse-no-dependencies.js:42171
#: dist/converse-no-dependencies.js:43424
msgid "Hidden"
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 ""
#: 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 ""
#: dist/converse-no-dependencies.js:28778
msgid "Server address"
#: dist/converse-no-dependencies.js:42174
msgid "Online users:"
msgstr ""
#: dist/converse-no-dependencies.js:28779
msgid "Show rooms"
#: dist/converse-no-dependencies.js:42175
msgid "Open room"
msgstr ""
#: dist/converse-no-dependencies.js:28780
msgid "conference.example.org"
#: dist/converse-no-dependencies.js:42176
msgid "Permanent room"
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 ""
#: dist/converse-no-dependencies.js:28850
msgid "Rooms found:"
#: dist/converse-no-dependencies.js:42178
msgid "Requires authentication"
msgstr ""
#: dist/converse-no-dependencies.js:28903
msgid "Enter a new Chatroom"
#: dist/converse-no-dependencies.js:42179
msgid "Requires an invitation"
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 ""
#: dist/converse-no-dependencies.js:28906
msgid "name@conference.example.org"
#: dist/converse-no-dependencies.js:42181
msgid "Temporary room"
msgstr ""
#: dist/converse-no-dependencies.js:28907
msgid "Join"
#: dist/converse-no-dependencies.js:42182
#: dist/converse-no-dependencies.js:43435
msgid "Unmoderated"
msgstr ""
#: dist/converse-no-dependencies.js:29025
#: dist/converse-no-dependencies.js:42287
msgid "Message"
msgstr ""
#: dist/converse-no-dependencies.js:29058
#: dist/converse-no-dependencies.js:42322
#, javascript-format
msgid "%1$s is no longer a moderator"
msgstr ""
#: dist/converse-no-dependencies.js:29061
#: dist/converse-no-dependencies.js:42326
#, javascript-format
msgid "%1$s has been given a voice again"
msgstr ""
#: dist/converse-no-dependencies.js:29064
#: dist/converse-no-dependencies.js:42330
#, javascript-format
msgid "%1$s has been muted"
msgstr ""
#: dist/converse-no-dependencies.js:29067
#: dist/converse-no-dependencies.js:42334
#, javascript-format
msgid "%1$s is now a moderator"
msgstr ""
#: dist/converse-no-dependencies.js:29077
#: dist/converse-no-dependencies.js:42342
msgid "Close and leave this room"
msgstr ""
#: dist/converse-no-dependencies.js:29078
#: dist/converse-no-dependencies.js:42343
msgid "Configure this room"
msgstr ""
#: dist/converse-no-dependencies.js:29122
#: dist/converse-no-dependencies.js:42383
msgid "Hide the list of occupants"
msgstr ""
#: dist/converse-no-dependencies.js:29206
#: dist/converse-no-dependencies.js:42499
#, javascript-format
msgid ""
"Error: the \"%1$s\" command takes two arguments, the user's nickname and "
"optionally a reason."
msgstr ""
#: dist/converse-no-dependencies.js:29218
#: dist/converse-no-dependencies.js:42508
msgid ""
"Sorry, an error happened while running the command. Check your browser's "
"developer console for details."
msgstr ""
#: dist/converse-no-dependencies.js:29263
#: dist/converse-no-dependencies.js:42567
msgid "Change user's affiliation to admin"
msgstr ""
#: dist/converse-no-dependencies.js:29264
#: dist/converse-no-dependencies.js:42567
msgid "Ban user from room"
msgstr ""
#: dist/converse-no-dependencies.js:29266
#: dist/converse-no-dependencies.js:42567
msgid "Change user role to participant"
msgstr ""
#: dist/converse-no-dependencies.js:29268
#: dist/converse-no-dependencies.js:42567
msgid "Kick user from room"
msgstr ""
#: dist/converse-no-dependencies.js:29269
#: dist/converse-no-dependencies.js:42567
msgid "Write in 3rd person"
msgstr ""
#: dist/converse-no-dependencies.js:29270
#: dist/converse-no-dependencies.js:42567
msgid "Grant membership to a user"
msgstr ""
#: dist/converse-no-dependencies.js:29271
#: dist/converse-no-dependencies.js:42567
msgid "Remove user's ability to post messages"
msgstr ""
#: dist/converse-no-dependencies.js:29272
#: dist/converse-no-dependencies.js:42567
msgid "Change your nickname"
msgstr ""
#: dist/converse-no-dependencies.js:29273
#: dist/converse-no-dependencies.js:42567
msgid "Grant moderator role to user"
msgstr ""
#: dist/converse-no-dependencies.js:29274
#: dist/converse-no-dependencies.js:42567
msgid "Grant ownership of this room"
msgstr ""
#: dist/converse-no-dependencies.js:29275
#: dist/converse-no-dependencies.js:42567
msgid "Revoke user's membership"
msgstr ""
#: dist/converse-no-dependencies.js:29276
#: dist/converse-no-dependencies.js:42567
msgid "Set room subject"
msgstr ""
#: dist/converse-no-dependencies.js:29277
#: dist/converse-no-dependencies.js:42567
msgid "Set room subject (alias for /subject)"
msgstr ""
#: dist/converse-no-dependencies.js:29278
#: dist/converse-no-dependencies.js:42567
msgid "Allow muted user to post messages"
msgstr ""
#: dist/converse-no-dependencies.js:29590
#: dist/converse-no-dependencies.js:42897
msgid ""
"The nickname you chose is reserved or currently in use, please choose a "
"different one."
msgstr ""
#: dist/converse-no-dependencies.js:29616
#: dist/converse-no-dependencies.js:42923
msgid "Please choose your nickname"
msgstr ""
#: dist/converse-no-dependencies.js:29618
#: dist/converse-no-dependencies.js:42925
msgid "Enter room"
msgstr ""
#: dist/converse-no-dependencies.js:29641
#: dist/converse-no-dependencies.js:42946
msgid "This chatroom requires a password"
msgstr ""
#: dist/converse-no-dependencies.js:29642
#: dist/converse-no-dependencies.js:42947
msgid "Password: "
msgstr ""
#: dist/converse-no-dependencies.js:29740
#: dist/converse-no-dependencies.js:42948
msgid "Submit"
msgstr ""
#: dist/converse-no-dependencies.js:43062
#, javascript-format
msgid "This action was done by %1$s."
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
msgid "The reason given is: \"%1$s\"."
msgstr ""
#: dist/converse-no-dependencies.js:29781
#: dist/converse-no-dependencies.js:43104
#, javascript-format
msgid "%1$s has left and re-entered the room"
msgstr ""
#: dist/converse-no-dependencies.js:29786
#: dist/converse-no-dependencies.js:43110
#, javascript-format
msgid "%1$s has entered the room"
msgstr ""
#: dist/converse-no-dependencies.js:29788
#: dist/converse-no-dependencies.js:43112
#, javascript-format
msgid "%1$s has entered the room. \"%2$s\""
msgstr ""
#: dist/converse-no-dependencies.js:29818
#: dist/converse-no-dependencies.js:43143
#, javascript-format
msgid "%1$s has entered and left the room"
msgstr ""
#: dist/converse-no-dependencies.js:29820
#: dist/converse-no-dependencies.js:43145
#, javascript-format
msgid "%1$s has entered and left the room. \"%2$s\""
msgstr ""
#: dist/converse-no-dependencies.js:29832
#: dist/converse-no-dependencies.js:43158
#, javascript-format
msgid "%1$s has left the room"
msgstr ""
#: dist/converse-no-dependencies.js:29834
#: dist/converse-no-dependencies.js:43160
#, javascript-format
msgid "%1$s has left the room. \"%2$s\""
msgstr ""
#: dist/converse-no-dependencies.js:29877
#: dist/converse-no-dependencies.js:43206
msgid "You are not on the member list of this room."
msgstr ""
#: dist/converse-no-dependencies.js:29879
#: dist/converse-no-dependencies.js:43208
msgid "You have been banned from this room."
msgstr ""
#: dist/converse-no-dependencies.js:29883
#: dist/converse-no-dependencies.js:43212
msgid "No nickname was specified."
msgstr ""
#: dist/converse-no-dependencies.js:29887
#: dist/converse-no-dependencies.js:43216
msgid "You are not allowed to create new rooms."
msgstr ""
#: dist/converse-no-dependencies.js:29889
#: dist/converse-no-dependencies.js:43218
msgid "Your nickname doesn't conform to this room's policies."
msgstr ""
#: dist/converse-no-dependencies.js:29893
#: dist/converse-no-dependencies.js:43222
msgid "This room does not (yet) exist."
msgstr ""
#: dist/converse-no-dependencies.js:29895
#: dist/converse-no-dependencies.js:43224
msgid "This room has reached its maximum number of occupants."
msgstr ""
#: dist/converse-no-dependencies.js:29950
#: dist/converse-no-dependencies.js:43274
#, javascript-format
msgid "Topic set by %1$s"
msgstr ""
#: dist/converse-no-dependencies.js:29981
#: dist/converse-no-dependencies.js:43297
msgid "Chatrooms"
msgstr ""
#: dist/converse-no-dependencies.js:29982
#: dist/converse-no-dependencies.js:43298
msgid "Add a new room"
msgstr ""
#: dist/converse-no-dependencies.js:29983
#: dist/converse-no-dependencies.js:43299
msgid "Query for rooms"
msgstr ""
#: dist/converse-no-dependencies.js:30022
#: dist/converse-no-dependencies.js:43337
#, javascript-format
msgid "Click to mention %1$s in your message."
msgstr ""
#: dist/converse-no-dependencies.js:30023
#: dist/converse-no-dependencies.js:43338
msgid "This user is a moderator."
msgstr ""
#: dist/converse-no-dependencies.js:30024
#: dist/converse-no-dependencies.js:43339
msgid "This user can send messages in this room."
msgstr ""
#: dist/converse-no-dependencies.js:30025
#: dist/converse-no-dependencies.js:43340
msgid "This user can NOT send messages in this room."
msgstr ""
#: dist/converse-no-dependencies.js:30026
#: dist/converse-no-dependencies.js:43341
msgid "Moderator"
msgstr ""
#: dist/converse-no-dependencies.js:30027
#: dist/converse-no-dependencies.js:43342
msgid "Visitor"
msgstr ""
#: dist/converse-no-dependencies.js:30028
#: dist/converse-no-dependencies.js:43343
msgid "Owner"
msgstr ""
#: dist/converse-no-dependencies.js:30029
#: dist/converse-no-dependencies.js:43344
msgid "Member"
msgstr ""
#: dist/converse-no-dependencies.js:30030
#: dist/converse-no-dependencies.js:43345
msgid "Admin"
msgstr ""
#: dist/converse-no-dependencies.js:30082
#: dist/converse-no-dependencies.js:43387
msgid "Occupants"
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"
msgstr ""
#: dist/converse-no-dependencies.js:30121
#: dist/converse-no-dependencies.js:43423
msgid "Features"
msgstr ""
#: dist/converse-no-dependencies.js:30123
#: dist/converse-no-dependencies.js:43425
msgid "Message archiving"
msgstr ""
#: dist/converse-no-dependencies.js:30124
#: dist/converse-no-dependencies.js:43426
msgid "Members only"
msgstr ""
#: dist/converse-no-dependencies.js:30127
#: dist/converse-no-dependencies.js:43429
msgid "Open"
msgstr ""
#: dist/converse-no-dependencies.js:30128
#: dist/converse-no-dependencies.js:43430
msgid "Password protected"
msgstr ""
#: dist/converse-no-dependencies.js:30129
#: dist/converse-no-dependencies.js:43431
msgid "Persistent"
msgstr ""
#: dist/converse-no-dependencies.js:30132
#: dist/converse-no-dependencies.js:43434
msgid "Temporary"
msgstr ""
#: dist/converse-no-dependencies.js:30134
#: dist/converse-no-dependencies.js:43436
msgid "No password"
msgstr ""
#: dist/converse-no-dependencies.js:30135
#: dist/converse-no-dependencies.js:43437
msgid "This room is not publicly searchable"
msgstr ""
#: dist/converse-no-dependencies.js:30136
#: dist/converse-no-dependencies.js:43438
msgid "Messages are archived on the server"
msgstr ""
#: dist/converse-no-dependencies.js:30137
#: dist/converse-no-dependencies.js:43439
msgid "This room is restricted to members only"
msgstr ""
#: dist/converse-no-dependencies.js:30138
#: dist/converse-no-dependencies.js:43440
msgid "This room is being moderated"
msgstr ""
#: dist/converse-no-dependencies.js:30139
#: dist/converse-no-dependencies.js:43441
msgid "All other room occupants can see your XMPP username"
msgstr ""
#: dist/converse-no-dependencies.js:30140
#: dist/converse-no-dependencies.js:43442
msgid "Anyone can join this room"
msgstr ""
#: dist/converse-no-dependencies.js:30141
#: dist/converse-no-dependencies.js:43443
msgid "This room requires a password before entry"
msgstr ""
#: dist/converse-no-dependencies.js:30142
#: dist/converse-no-dependencies.js:43444
msgid "This room persists even if it's unoccupied"
msgstr ""
#: dist/converse-no-dependencies.js:30143
#: dist/converse-no-dependencies.js:43445
msgid "This room is publicly searchable"
msgstr ""
#: dist/converse-no-dependencies.js:30144
#: dist/converse-no-dependencies.js:43446
msgid "Only moderators can see your XMPP username"
msgstr ""
#: dist/converse-no-dependencies.js:30145
#: dist/converse-no-dependencies.js:43447
msgid "This room will disappear once the last person leaves"
msgstr ""
#: dist/converse-no-dependencies.js:30146
#: dist/converse-no-dependencies.js:43448
msgid "This room is not being moderated"
msgstr ""
#: dist/converse-no-dependencies.js:30147
#: dist/converse-no-dependencies.js:43449
msgid "This room does not require a password upon entry"
msgstr ""
#: dist/converse-no-dependencies.js:30187
#: dist/converse-no-dependencies.js:43488
#, javascript-format
msgid ""
"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."
msgstr ""
#: dist/converse-no-dependencies.js:30208
#: dist/converse-no-dependencies.js:43510
msgid "Please enter a valid XMPP username"
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"
#: 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
msgid "Notification from %1$s"
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
msgid "%1$s says"
msgstr ""
#: dist/converse-no-dependencies.js:30525
#: dist/converse-no-dependencies.js:45291
msgid "has come online"
msgstr ""
#: dist/converse-no-dependencies.js:30542
#: dist/converse-no-dependencies.js:45308
msgid "wants to be your contact"
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 ""
#. 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 ""
#: dist/converse-no-dependencies.js:30835
msgid "Your browser might become unresponsive."
#: dist/converse-no-dependencies.js:45594
msgid "Your avatar image"
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 ""
#: 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 ""
#: 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 ""
#: 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 ""
#: 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 ""
#: 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 ""
#: 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 ""
#: dist/converse-no-dependencies.js:31054
msgid "Your message could not be sent"
#: dist/converse-no-dependencies.js:45678
msgid "Away for long"
msgstr ""
#: dist/converse-no-dependencies.js:31056
msgid "We received an unencrypted message"
#: dist/converse-no-dependencies.js:45679
msgid "Change chat status"
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 ""
#: dist/converse-no-dependencies.js:31084
#: dist/converse-no-dependencies.js:45724
#, 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 ""
#: dist/converse-no-dependencies.js:31097
msgid "What is your security question?"
#: dist/converse-no-dependencies.js:45727
msgid "Change settings"
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 ""
#: dist/converse-no-dependencies.js:31104
msgid "Invalid authentication scheme provided"
#: dist/converse-no-dependencies.js:45729
msgid "Log out"
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 ""
#: 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 ""
#: 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 ""
#: 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 ""
#: dist/converse-no-dependencies.js:31141
msgid "End encrypted conversation"
#: dist/converse-no-dependencies.js:45972
msgid "here"
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 ""
#: 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 ""
#: 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 ""
#: dist/converse-no-dependencies.js:31145
msgid "Verify with SMP"
#: dist/converse-no-dependencies.js:46223
msgid "Now logging you in"
msgstr ""
#: dist/converse-no-dependencies.js:31146
msgid "What's this?"
#: dist/converse-no-dependencies.js:46227
msgid "Registered successfully"
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 ""
#: dist/converse-no-dependencies.js:31190
msgid "unverified"
#: dist/converse-no-dependencies.js:46705
msgid "Click to toggle the rooms list"
msgstr ""
#: dist/converse-no-dependencies.js:31191
msgid "verified"
#: dist/converse-no-dependencies.js:46706
msgid "Open Rooms"
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 ""
#: dist/converse-no-dependencies.js:31788
#: dist/converse-no-dependencies.js:47359
#, javascript-format
msgid "Sorry, there was an error while trying to add %1$s as a contact."
msgstr ""
#: dist/converse-no-dependencies.js:31936
#: dist/converse-no-dependencies.js:47570
msgid "This client does not allow presence subscriptions"
msgstr ""
#: dist/converse-no-dependencies.js:32028
#: dist/converse-no-dependencies.js:47678
msgid "Click to hide these contacts"
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 ""
#: dist/converse-no-dependencies.js:32114
msgid "Create an account"
#: dist/converse-no-dependencies.js:47878
msgid "This contact is online"
msgstr ""
#: dist/converse-no-dependencies.js:32126
msgid "Create your account"
#: dist/converse-no-dependencies.js:47879
msgid "This contact is offline"
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 ""
#: 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 ""
#: dist/converse-no-dependencies.js:32150
msgid "Log in here"
#: dist/converse-no-dependencies.js:47882
msgid "This contact is away"
msgstr ""
#: dist/converse-no-dependencies.js:32162
msgid "Account Registration:"
#: dist/converse-no-dependencies.js:47887
msgid "Groups"
msgstr ""
#: dist/converse-no-dependencies.js:32170
msgid "Register"
#: dist/converse-no-dependencies.js:47889
msgid "My contacts"
msgstr ""
#: dist/converse-no-dependencies.js:32174
msgid "Choose a different provider"
#: dist/converse-no-dependencies.js:47891
msgid "Pending contacts"
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 ""
#: dist/converse-no-dependencies.js:32321
msgid " e.g. conversejs.org"
#: dist/converse-no-dependencies.js:47895
msgid "Ungrouped"
msgstr ""
#: dist/converse-no-dependencies.js:32367
msgid "Fetch registration form"
#: dist/converse-no-dependencies.js:47938
msgid "Contact name"
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 ""
#: dist/converse-no-dependencies.js:32369
msgid "here"
#: dist/converse-no-dependencies.js:47942
msgid "XMPP Address"
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 ""
#: 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 ""
#: dist/converse-no-dependencies.js:32457
#: dist/converse-no-dependencies.js:48219
#: dist/converse-no-dependencies.js:48261
#, 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 ""
#: 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 ""
#: 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 ""
#: 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 ""
"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 ""
#: dist/converse-no-dependencies.js:33149
msgid "Click to toggle the rooms list"
#: dist/converse-no-dependencies.js:51178
msgid "Log in"
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 ""
#: 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
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 ""
......@@ -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 {
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 {
ul {
padding: 0;
......@@ -164,15 +179,6 @@
flex-grow: 1;
border-bottom: 1px solid lightgrey;
}
&.features-list {
padding-top: 0;
.feature {
width: 100%;
.fa {
color: $text-color;
}
}
}
li {
cursor: default;
display: block;
......
......@@ -159,6 +159,10 @@ body.reset {
font-weight: 700;
}
em {
font-style: italic;
}
ol, ul {
list-style: none;
}
......
......@@ -814,9 +814,8 @@
.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(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');
done();
});
......@@ -1842,7 +1841,7 @@
_converse.connection._dataRecv(test_utils.createRequest(features_stanza));
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('hidden')).toBe(true);
expect(view.model.get('temporary')).toBe(true);
......
......@@ -3,11 +3,15 @@
} (this, function (jasmine, mock, test_utils) {
var _ = converse.env._;
var $msg = converse.env.$msg;
var $iq = converse.env.$iq;
var $pres = converse.env.$pres;
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'],
{ allow_bookmarks: false // Makes testing easier, otherwise we
// 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(
null, ['rosterGroupsFetched'],
......
(function (root, factory) {
define(["jasmine", "mock", "test-utils"], factory);
} (this, function (jasmine, mock, test_utils) {
var _ = converse.env._;
var Strophe = converse.env.Strophe;
var $msg = converse.env.$msg;
......
......@@ -422,6 +422,7 @@
},
showUserDetailsModal (ev) {
ev.preventDefault();
if (_.isUndefined(this.user_details_modal)) {
this.user_details_modal = new _converse.UserDetailsModal({model: this.model});
}
......
......@@ -11,6 +11,7 @@
"templates/add_chatroom_modal.html",
"templates/chatarea.html",
"templates/chatroom.html",
"templates/chatroom_details_modal.html",
"templates/chatroom_disconnect.html",
"templates/chatroom_features.html",
"templates/chatroom_form.html",
......@@ -37,6 +38,7 @@
tpl_add_chatroom_modal,
tpl_chatarea,
tpl_chatroom,
tpl_chatroom_details_modal,
tpl_chatroom_disconnect,
tpl_chatroom_features,
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({
/* Backbone.NativeView which renders a chat room, based upon the view
* for normal one-on-one chat boxes.
......@@ -495,6 +517,7 @@
'click .chatbox-navback': 'showControlBox',
'click .close-chatbox-button': 'close',
'click .configure-chatroom-button': 'getAndRenderConfigurationForm',
'click .show-room-details-modal': 'showRoomDetailsModal',
'click .hide-occupants': 'hideOccupants',
'click .new-msgs-indicator': 'viewUnreadMessages',
'click .occupant-nick': 'onOccupantClicked',
......@@ -595,6 +618,14 @@
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) {
if (message.get('sender') === 'me') {
return;
......@@ -632,10 +663,11 @@
*/
return tpl_chatroom_head(
_.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();
});
form_el.addEventListener('submit', (ev) => {
form_el.addEventListener('submit',
(ev) => {
ev.preventDefault();
this.model.saveConfiguration(ev.target).then(
this.model.getRoomFeatures.bind(this.model)
......@@ -1547,16 +1580,13 @@
_converse.RoomsPanel = Backbone.NativeView.extend({
/* Backbone.NativeView which renders MUC section of the control box.
*
* Chat rooms can be listed, joined and new rooms can be created.
*/
tagName: 'div',
className: 'controlbox-section',
id: 'chatrooms',
events: {
'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 () {
......@@ -1568,11 +1598,6 @@
return this;
},
toggleRoomInfo (ev) {
ev.preventDefault();
toggleRoomInfo(ev);
},
showAddRoomModal (ev) {
if (_.isUndefined(this.add_room_modal)) {
this.add_room_modal = new _converse.AddChatRoomModal({'model': this.model});
......@@ -1703,34 +1728,8 @@
el.innerHTML = tpl_chatroom_features(
_.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();
return this;
......
......@@ -246,6 +246,10 @@
this.handlers[type][name] = callback;
},
getDisplayName () {
return this.get('name') || this.get('jid');
},
join (nick, password) {
/* Join the chat room.
*
......@@ -430,7 +434,7 @@
* <feature var='urn:xmpp:mam:0'/>
*/
const features = {
'features_fetched': true,
'features_fetched': moment().format(),
'name': iq.querySelector('identity').getAttribute('name')
}
_.each(iq.querySelectorAll('feature'), function (field) {
......
......@@ -45,6 +45,7 @@
_converse.OpenRooms = Backbone.Collection.extend({
comparator (room) {
if (room.get('bookmarked')) {
const bookmark = _.head(_converse.bookmarksview.model.where({'jid': room.get('jid')}));
......@@ -97,6 +98,10 @@
});
_converse.RoomsListElementView = Backbone.VDOMView.extend({
events: {
'click a.room-info': 'showRoomDetailsModal'
},
initialize () {
this.model.on('destroy', this.remove, this);
this.model.on('remove', this.remove, this);
......@@ -106,15 +111,6 @@
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 () {
return tpl_rooms_list_item(
_.extend(this.model.toJSON(), {
......@@ -130,9 +126,28 @@
'name': this.getRoomsListElementName(),
'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({
tagName: 'div',
className: 'open-rooms-list list-container rooms-list-container',
......
<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>
{[ if (o.has_features) { ]}
<p class="occupants-heading">{{{o.label_features}}}</p>
<p class="occupants-heading">{{{o.__('Features')}}}</p>
{[ } ]}
<ul class="features-list">
{[ 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) { ]}
<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) { ]}
<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) { ]}
<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) { ]}
<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) { ]}
<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) { ]}
<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) { ]}
<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) { ]}
<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) { ]}
<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) { ]}
<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) { ]}
<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) { ]}
<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>
......@@ -14,4 +14,5 @@
{[ if (o.affiliation == 'owner') { ]}
<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>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment