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 { ...@@ -6938,6 +6938,8 @@ body.reset {
min-height: 0; } min-height: 0; }
#conversejs strong { #conversejs strong {
font-weight: 700; } font-weight: 700; }
#conversejs em {
font-style: italic; }
#conversejs ol, #conversejs ul { #conversejs ol, #conversejs ul {
list-style: none; } list-style: none; }
#conversejs li { #conversejs li {
...@@ -8443,6 +8445,26 @@ body.reset { ...@@ -8443,6 +8445,26 @@ body.reset {
#conversejs .add-chatroom input[type="submit"], #conversejs .add-chatroom input[type="submit"],
#conversejs .add-chatroom input[type="button"] { #conversejs .add-chatroom input[type="button"] {
margin: 0.3em 0; } margin: 0.3em 0; }
#conversejs.converse-embedded #room-details-modal .features-list,
#conversejs #room-details-modal .features-list {
margin-left: 1em; }
#conversejs.converse-embedded .chatroom-features,
#conversejs .chatroom-features {
width: 100%; }
#conversejs.converse-embedded .chatroom-features .features-list,
#conversejs .chatroom-features .features-list {
padding-top: 0; }
#conversejs.converse-embedded .chatroom-features .features-list .feature,
#conversejs .chatroom-features .features-list .feature {
width: 100%;
margin-right: 0.5em;
padding-right: 0;
font-size: 1em;
cursor: help; }
#conversejs.converse-embedded .chatroom-features .features-list .feature .fa,
#conversejs .chatroom-features .features-list .feature .fa {
margin-right: 0.5em;
color: #666; }
#conversejs.converse-embedded .chat-head-chatroom, #conversejs.converse-embedded .chat-head-chatroom,
#conversejs .chat-head-chatroom { #conversejs .chat-head-chatroom {
background-color: #E77051; } background-color: #E77051; }
...@@ -8567,16 +8589,6 @@ body.reset { ...@@ -8567,16 +8589,6 @@ body.reset {
#conversejs .chatroom .box-flyout .chatroom-body .occupants .occupants-header .occupants-heading { #conversejs .chatroom .box-flyout .chatroom-body .occupants .occupants-header .occupants-heading {
font-family: "Century Gothic", futura, "URW Gothic L", Verdana, sans-serif; font-family: "Century Gothic", futura, "URW Gothic L", Verdana, sans-serif;
padding: 0.3em 0; } padding: 0.3em 0; }
#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .chatroom-features,
#conversejs .chatroom .box-flyout .chatroom-body .occupants .chatroom-features {
width: 100%; }
#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .chatroom-features .feature,
#conversejs .chatroom .box-flyout .chatroom-body .occupants .chatroom-features .feature {
float: left;
margin-right: 0.5em;
padding-right: 0;
font-size: 1em;
cursor: help; }
#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .awesomplete ul, #conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .awesomplete ul,
#conversejs .chatroom .box-flyout .chatroom-body .occupants .awesomplete ul { #conversejs .chatroom .box-flyout .chatroom-body .occupants .awesomplete ul {
padding: 0; } padding: 0; }
...@@ -8596,15 +8608,6 @@ body.reset { ...@@ -8596,15 +8608,6 @@ body.reset {
flex-basis: 0; flex-basis: 0;
flex-grow: 1; flex-grow: 1;
border-bottom: 1px solid lightgrey; } border-bottom: 1px solid lightgrey; }
#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul.features-list,
#conversejs .chatroom .box-flyout .chatroom-body .occupants ul.features-list {
padding-top: 0; }
#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul.features-list .feature,
#conversejs .chatroom .box-flyout .chatroom-body .occupants ul.features-list .feature {
width: 100%; }
#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul.features-list .feature .fa,
#conversejs .chatroom .box-flyout .chatroom-body .occupants ul.features-list .feature .fa {
color: #666; }
#conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li, #conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul li,
#conversejs .chatroom .box-flyout .chatroom-body .occupants ul li { #conversejs .chatroom .box-flyout .chatroom-body .occupants ul li {
cursor: default; cursor: default;
......
...@@ -32,8 +32,8 @@ ...@@ -32,8 +32,8 @@
notify_all_room_messages: [ notify_all_room_messages: [
'discuss@conference.conversejs.org' 'discuss@conference.conversejs.org'
], ],
// bosh_service_url: 'http://chat.example.org:5280/http-bind/', bosh_service_url: '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: 'https://conversejs.org/http-bind/', // Please use this connection manager only for testing purposes
message_archiving: 'always', message_archiving: 'always',
debug: true 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_ ...@@ -63421,6 +63421,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
}, },
showUserDetailsModal(ev) { showUserDetailsModal(ev) {
ev.preventDefault();
if (_.isUndefined(this.user_details_modal)) { if (_.isUndefined(this.user_details_modal)) {
this.user_details_modal = new _converse.UserDetailsModal({ this.user_details_modal = new _converse.UserDetailsModal({
model: this.model model: this.model
...@@ -69169,11 +69171,11 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -69169,11 +69171,11 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
// Copyright (c) 2012-2018, the Converse.js developers // Copyright (c) 2012-2018, the Converse.js developers
// Licensed under the Mozilla Public License (MPLv2) // Licensed under the Mozilla Public License (MPLv2)
(function (root, factory) { (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_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), (__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__)); __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"; "use strict";
const _converse$env = converse.env, const _converse$env = converse.env,
...@@ -69607,6 +69609,23 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -69607,6 +69609,23 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
ev.target.reset(); 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({ _converse.ChatRoomView = _converse.ChatBoxView.extend({
/* Backbone.NativeView which renders a chat room, based upon the view /* Backbone.NativeView which renders a chat room, based upon the view
...@@ -69621,6 +69640,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -69621,6 +69640,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
'click .chatbox-navback': 'showControlBox', 'click .chatbox-navback': 'showControlBox',
'click .close-chatbox-button': 'close', 'click .close-chatbox-button': 'close',
'click .configure-chatroom-button': 'getAndRenderConfigurationForm', 'click .configure-chatroom-button': 'getAndRenderConfigurationForm',
'click .show-room-details-modal': 'showRoomDetailsModal',
'click .hide-occupants': 'hideOccupants', 'click .hide-occupants': 'hideOccupants',
'click .new-msgs-indicator': 'viewUnreadMessages', 'click .new-msgs-indicator': 'viewUnreadMessages',
'click .occupant-nick': 'onOccupantClicked', 'click .occupant-nick': 'onOccupantClicked',
...@@ -69725,6 +69745,18 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -69725,6 +69745,18 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
return this; return this;
}, },
showRoomDetailsModal(ev) {
ev.preventDefault();
if (_.isUndefined(this.model.room_details_modal)) {
this.model.room_details_modal = new _converse.RoomDetailsModal({
'model': this.model
});
}
this.model.room_details_modal.show(ev);
},
showChatStateNotification(message) { showChatStateNotification(message) {
if (message.get('sender') === 'me') { if (message.get('sender') === 'me') {
return; return;
...@@ -69768,10 +69800,11 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -69768,10 +69800,11 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
/* Returns the heading HTML to be rendered. /* Returns the heading HTML to be rendered.
*/ */
return tpl_chatroom_head(_.extend(this.model.toJSON(), { return tpl_chatroom_head(_.extend(this.model.toJSON(), {
Strophe: Strophe, 'Strophe': Strophe,
info_close: __('Close and leave this room'), 'info_close': __('Close and leave this room'),
info_configure: __('Configure this room'), 'info_configure': __('Configure this room'),
description: this.model.get('description') || '' '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_ ...@@ -70729,16 +70762,13 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
}); });
_converse.RoomsPanel = Backbone.NativeView.extend({ _converse.RoomsPanel = Backbone.NativeView.extend({
/* Backbone.NativeView which renders MUC section of the control box. /* Backbone.NativeView which renders MUC section of the control box.
*
* Chat rooms can be listed, joined and new rooms can be created.
*/ */
tagName: 'div', tagName: 'div',
className: 'controlbox-section', className: 'controlbox-section',
id: 'chatrooms', id: 'chatrooms',
events: { events: {
'click a.chatbox-btn.show-add-muc-modal': 'showAddRoomModal', 'click a.chatbox-btn.show-add-muc-modal': 'showAddRoomModal',
'click a.chatbox-btn.show-list-muc-modal': 'showListRoomsModal', 'click a.chatbox-btn.show-list-muc-modal': 'showListRoomsModal'
'click a.room-info': 'toggleRoomInfo'
}, },
render() { render() {
...@@ -70750,11 +70780,6 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -70750,11 +70780,6 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
return this; return this;
}, },
toggleRoomInfo(ev) {
ev.preventDefault();
toggleRoomInfo(ev);
},
showAddRoomModal(ev) { showAddRoomModal(ev) {
if (_.isUndefined(this.add_room_modal)) { if (_.isUndefined(this.add_room_modal)) {
this.add_room_modal = new _converse.AddChatRoomModal({ this.add_room_modal = new _converse.AddChatRoomModal({
...@@ -70882,34 +70907,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -70882,34 +70907,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
el = this.el.querySelector('.chatroom-features'); el = this.el.querySelector('.chatroom-features');
el.innerHTML = tpl_chatroom_features(_.extend(this.chatroomview.model.toJSON(), { el.innerHTML = tpl_chatroom_features(_.extend(this.chatroomview.model.toJSON(), {
'has_features': _.reduce(_.values(picks), iteratee), '__': __,
'label_features': __('Features'), 'has_features': _.reduce(_.values(picks), iteratee)
'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')
})); }));
this.setOccupantsHeight(); this.setOccupantsHeight();
return this; return this;
...@@ -71359,6 +71358,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -71359,6 +71358,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
this.handlers[type][name] = callback; this.handlers[type][name] = callback;
}, },
getDisplayName() {
return this.get('name') || this.get('jid');
},
join(nick, password) { join(nick, password) {
/* Join the chat room. /* Join the chat room.
* *
...@@ -71579,7 +71582,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -71579,7 +71582,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
* <feature var='urn:xmpp:mam:0'/> * <feature var='urn:xmpp:mam:0'/>
*/ */
const features = { const features = {
'features_fetched': true, 'features_fetched': moment().format(),
'name': iq.querySelector('identity').getAttribute('name') 'name': iq.querySelector('identity').getAttribute('name')
}; };
...@@ -74144,6 +74147,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -74144,6 +74147,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
} }
}); });
_converse.RoomsListElementView = Backbone.VDOMView.extend({ _converse.RoomsListElementView = Backbone.VDOMView.extend({
events: {
'click a.room-info': 'showRoomDetailsModal'
},
initialize() { initialize() {
this.model.on('destroy', this.remove, this); this.model.on('destroy', this.remove, this);
this.model.on('remove', this.remove, this); this.model.on('remove', this.remove, this);
...@@ -74153,18 +74160,6 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -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); this.model.on('change:num_unread_general', this.render, this);
}, },
getRoomsListElementName() {
if (this.model.get('bookmarked') && _converse.bookmarksview) {
const bookmark = _.head(_converse.bookmarksview.model.where({
'jid': this.model.get('jid')
}));
return bookmark.get('name');
} else {
return this.model.get('name');
}
},
toHTML() { toHTML() {
return tpl_rooms_list_item(_.extend(this.model.toJSON(), { return tpl_rooms_list_item(_.extend(this.model.toJSON(), {
// XXX: By the time this renders, the _converse.bookmarks // XXX: By the time this renders, the _converse.bookmarks
...@@ -74179,6 +74174,32 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -74179,6 +74174,32 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
'name': this.getRoomsListElementName(), 'name': this.getRoomsListElementName(),
'open_title': __('Click to open this room') 'open_title': __('Click to open this room')
})); }));
},
showRoomDetailsModal(ev) {
const room = _converse.chatboxes.get(this.model.get('jid'));
ev.preventDefault();
if (_.isUndefined(room.room_details_modal)) {
room.room_details_modal = new _converse.RoomDetailsModal({
'model': room
});
}
room.room_details_modal.show(ev);
},
getRoomsListElementName() {
if (this.model.get('bookmarked') && _converse.bookmarksview) {
const bookmark = _.head(_converse.bookmarksview.model.where({
'jid': this.model.get('jid')
}));
return bookmark.get('name');
} else {
return this.model.get('name');
}
} }
}); });
...@@ -77666,6 +77687,149 @@ return __p ...@@ -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":
/*!************************************************!*\ /*!************************************************!*\
!*** ./src/templates/chatroom_disconnect.html ***! !*** ./src/templates/chatroom_disconnect.html ***!
...@@ -77698,111 +77862,111 @@ function print() { __p += __j.call(arguments, '') } ...@@ -77698,111 +77862,111 @@ function print() { __p += __j.call(arguments, '') }
__p += '<!-- src/templates/chatroom_features.html -->\n'; __p += '<!-- src/templates/chatroom_features.html -->\n';
if (o.has_features) { ; if (o.has_features) { ;
__p += '\n<p class="occupants-heading">' + __p += '\n<p class="occupants-heading">' +
__e(o.label_features) + __e(o.__('Features')) +
'</p>\n'; '</p>\n';
} ; } ;
__p += '\n<ul class="features-list">\n'; __p += '\n<ul class="features-list">\n';
if (o.passwordprotected) { ; if (o.passwordprotected) { ;
__p += '\n<li class="feature" title="' + __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>' + '"><span class="fa fa-lock"></span>' +
__e( o.label_passwordprotected ) + __e( o.__('Password protected') ) +
'</li>\n'; '</li>\n';
} ; } ;
__p += '\n'; __p += '\n';
if (o.unsecured) { ; if (o.unsecured) { ;
__p += '\n<li class="feature" title="' + __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>' + '"><span class="fa fa-unlock"></span>' +
__e( o.label_unsecured ) + __e( o.__('No password') ) +
'</li>\n'; '</li>\n';
} ; } ;
__p += '\n'; __p += '\n';
if (o.hidden) { ; if (o.hidden) { ;
__p += '\n<li class="feature" title="' + __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>' + '"><span class="fa fa-eye-slash"></span>' +
__e( o.label_hidden ) + __e( o.__('Hidden') ) +
'</li>\n'; '</li>\n';
} ; } ;
__p += '\n'; __p += '\n';
if (o.public_room) { ; if (o.public_room) { ;
__p += '\n<li class="feature" title="' + __p += '\n<li class="feature" title="' +
__e( o.tt_public ) + __e( o.__('This room is publicly searchable') ) +
'"><span class="fa fa-eye"></span>' + '"><span class="fa fa-eye"></span>' +
__e( o.label_public ) + __e( o.__('Public') ) +
'</li>\n'; '</li>\n';
} ; } ;
__p += '\n'; __p += '\n';
if (o.membersonly) { ; if (o.membersonly) { ;
__p += '\n<li class="feature" title="' + __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>' + '"><span class="fa fa-address-book"></span>' +
__e( o.label_membersonly ) + __e( o.__('Members only') ) +
'</li>\n'; '</li>\n';
} ; } ;
__p += '\n'; __p += '\n';
if (o.open) { ; if (o.open) { ;
__p += '\n<li class="feature" title="' + __p += '\n<li class="feature" title="' +
__e( o.tt_open ) + __e( o.__('Anyone can join this room') ) +
'"><span class="fa fa-globe"></span>' + '"><span class="fa fa-globe"></span>' +
__e( o.label_open ) + __e( o.__('Open') ) +
'</li>\n'; '</li>\n';
} ; } ;
__p += '\n'; __p += '\n';
if (o.persistent) { ; if (o.persistent) { ;
__p += '\n<li class="feature" title="' + __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>' + '"><span class="fa fa-save"></span>' +
__e( o.label_persistent ) + __e( o.__('Persistent') ) +
'</li>\n'; '</li>\n';
} ; } ;
__p += '\n'; __p += '\n';
if (o.temporary) { ; if (o.temporary) { ;
__p += '\n<li class="feature" title="' + __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>' + '"><span class="fa fa-snowflake-o"></span>' +
__e( o.label_temporary ) + __e( o.__('Temporary') ) +
'</li>\n'; '</li>\n';
} ; } ;
__p += '\n'; __p += '\n';
if (o.nonanonymous) { ; if (o.nonanonymous) { ;
__p += '\n<li class="feature" title="' + __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>' + '"><span class="fa fa-id-card"></span>' +
__e( o.label_nonanonymous ) + __e( o.__('Not anonymous') ) +
'</li>\n'; '</li>\n';
} ; } ;
__p += '\n'; __p += '\n';
if (o.semianonymous) { ; if (o.semianonymous) { ;
__p += '\n<li class="feature" title="' + __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>' + '"><span class="fa fa-user-secret"></span>' +
__e( o.label_semianonymous ) + __e( o.__('Semi-anonymous') ) +
'</li>\n'; '</li>\n';
} ; } ;
__p += '\n'; __p += '\n';
if (o.moderated) { ; if (o.moderated) { ;
__p += '\n<li class="feature" title="' + __p += '\n<li class="feature" title="' +
__e( o.tt_moderated ) + __e( o.__('This room is being moderated') ) +
'"><span class="fa fa-gavel"></span>' + '"><span class="fa fa-gavel"></span>' +
__e( o.label_moderated ) + __e( o.__('Moderated') ) +
'</li>\n'; '</li>\n';
} ; } ;
__p += '\n'; __p += '\n';
if (o.unmoderated) { ; if (o.unmoderated) { ;
__p += '\n<li class="feature" title="' + __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>' + '"><span class="fa fa-info-circle"></span>' +
__e( o.label_unmoderated ) + __e( o.__('Not moderated') ) +
'</li>\n'; '</li>\n';
} ; } ;
__p += '\n'; __p += '\n';
if (o.mam_enabled) { ; if (o.mam_enabled) { ;
__p += '\n<li class="feature" title="' + __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>' + '"><span class="fa fa-database"></span>' +
__e( o.label_mam_enabled ) + __e( o.__('Message archiving') ) +
'</li>\n'; '</li>\n';
} ; } ;
__p += '\n</ul>\n'; __p += '\n</ul>\n';
...@@ -77862,7 +78026,9 @@ __p += '\n <a class="chatbox-btn configure-chatroom-button fa fa-wrench" titl ...@@ -77862,7 +78026,9 @@ __p += '\n <a class="chatbox-btn configure-chatroom-button fa fa-wrench" titl
__e(o.info_configure) + __e(o.info_configure) +
' "></a>\n '; ' "></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 return __p
}; };
...@@ -8,7 +8,7 @@ msgid "" ...@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Converse.js 3.3.4\n" "Project-Id-Version: Converse.js 3.3.4\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-05-17 11:19+0200\n" "POT-Creation-Date: 2018-06-04 18:44+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
...@@ -17,688 +17,402 @@ msgstr "" ...@@ -17,688 +17,402 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: dist/converse-no-dependencies.js:9853 dist/converse-no-dependencies.js:9882 #: dist/converse-no-dependencies.js:34242
msgid "Download" #: dist/converse-no-dependencies.js:34327
msgstr "" #: dist/converse-no-dependencies.js:46646
#: 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
msgid "Bookmark this room" msgid "Bookmark this room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:16465 #: dist/converse-no-dependencies.js:34328
msgid "The name for this bookmark:" msgid "The name for this bookmark:"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:16466 #: dist/converse-no-dependencies.js:34329
msgid "Would you like this room to be automatically joined upon startup?" msgid "Would you like this room to be automatically joined upon startup?"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:16467 #: dist/converse-no-dependencies.js:34330
msgid "What should your nickname for this room be?" msgid "What should your nickname for this room be?"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:16469 #: dist/converse-no-dependencies.js:34332
#: dist/converse-no-dependencies.js:25296 #: dist/converse-no-dependencies.js:42768
#: dist/converse-no-dependencies.js:25380 #: dist/converse-no-dependencies.js:45592
#: dist/converse-no-dependencies.js:45677
msgid "Save" msgid "Save"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:16470 #: dist/converse-no-dependencies.js:34333
#: dist/converse-no-dependencies.js:25376 #: dist/converse-no-dependencies.js:42769
#: dist/converse-no-dependencies.js:32190 #: dist/converse-no-dependencies.js:45673
#: dist/converse-no-dependencies.js:51631
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:16543 #: dist/converse-no-dependencies.js:34406
#, javascript-format #, javascript-format
msgid "Are you sure you want to remove the bookmark \"%1$s\"?" msgid "Are you sure you want to remove the bookmark \"%1$s\"?"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:16659 #: dist/converse-no-dependencies.js:34522
msgid "Sorry, something went wrong while trying to save your bookmark." msgid "Sorry, something went wrong while trying to save your bookmark."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:16738 #: dist/converse-no-dependencies.js:34601
#: dist/converse-no-dependencies.js:33112 #: dist/converse-no-dependencies.js:46644
msgid "Leave this room" msgid "Leave this room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:16739 #: dist/converse-no-dependencies.js:34602
msgid "Remove this bookmark" msgid "Remove this bookmark"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:16740 #: dist/converse-no-dependencies.js:34603
#: dist/converse-no-dependencies.js:33113 #: dist/converse-no-dependencies.js:46645
msgid "Unbookmark this room" msgid "Unbookmark this room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:16741 #: dist/converse-no-dependencies.js:34604
#: dist/converse-no-dependencies.js:28819 #: dist/converse-no-dependencies.js:42041
#: dist/converse-no-dependencies.js:33115 #: dist/converse-no-dependencies.js:46647
msgid "Show more information on this room" msgid "Show more information on this room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:16744 #: dist/converse-no-dependencies.js:34607
#: dist/converse-no-dependencies.js:28818 #: dist/converse-no-dependencies.js:42040
#: dist/converse-no-dependencies.js:33117 #: dist/converse-no-dependencies.js:46649
msgid "Click to open this room" msgid "Click to open this room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:16780 #: dist/converse-no-dependencies.js:34643
msgid "Click to toggle the bookmarks list" msgid "Click to toggle the bookmarks list"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:16781 #: dist/converse-no-dependencies.js:34644
msgid "Bookmarks" msgid "Bookmarks"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:21217 #: dist/converse-no-dependencies.js:35089
msgid "Sorry, could not determine file upload URL." msgid "Sorry, could not determine file upload URL."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:21225 #: dist/converse-no-dependencies.js:35097
msgid "Sorry, could not determine upload URL." msgid "Sorry, could not determine upload URL."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:21257 #: dist/converse-no-dependencies.js:35129
msgid "Sorry, could not succesfully upload your file." msgid "Sorry, could not succesfully upload your file."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:21260 #: dist/converse-no-dependencies.js:35132
#, javascript-format #, javascript-format
msgid "Your server's response: \"%1$s\"" msgid "Your server's response: \"%1$s\""
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:21442 #: dist/converse-no-dependencies.js:35306
msgid "Sorry, looks like file upload is not supported by your server." msgid "Sorry, looks like file upload is not supported by your server."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:21452 #: dist/converse-no-dependencies.js:35316
#, javascript-format #, javascript-format
msgid "" msgid ""
"The size of your file, %1$s, exceeds the maximum allowed by your server, " "The size of your file, %1$s, exceeds the maximum allowed by your server, "
"which is %2$s." "which is %2$s."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22197 #: dist/converse-no-dependencies.js:36039
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
msgid "Close this chat box" msgid "Close this chat box"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22516 #: dist/converse-no-dependencies.js:36067
msgid "The User's Profile Image" msgid "The User's Profile Image"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22519 #: dist/converse-no-dependencies.js:36070
#: dist/converse-no-dependencies.js:25289 #: dist/converse-no-dependencies.js:45585
#: dist/converse-no-dependencies.js:25374 #: dist/converse-no-dependencies.js:45671
msgid "Close" msgid "Close"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22520 #: dist/converse-no-dependencies.js:36071
#: dist/converse-no-dependencies.js:25290 #: dist/converse-no-dependencies.js:45586
msgid "Email" msgid "Email"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22521 #: dist/converse-no-dependencies.js:36072
#: dist/converse-no-dependencies.js:25291 #: dist/converse-no-dependencies.js:45587
msgid "Full Name" msgid "Full Name"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22522 #: dist/converse-no-dependencies.js:36073
msgid "Jabber ID" msgid "Jabber ID"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22523 #: dist/converse-no-dependencies.js:36074
#: dist/converse-no-dependencies.js:25292 #: dist/converse-no-dependencies.js:42924
#: dist/converse-no-dependencies.js:29617 #: dist/converse-no-dependencies.js:45588
msgid "Nickname" msgid "Nickname"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22524 #: dist/converse-no-dependencies.js:36075
msgid "Remove as contact" msgid "Remove as contact"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22525 #: dist/converse-no-dependencies.js:36076
msgid "Refresh" msgid "Refresh"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22526 #: dist/converse-no-dependencies.js:36077
#: dist/converse-no-dependencies.js:25294 #: dist/converse-no-dependencies.js:45590
msgid "Role" msgid "Role"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22527 #: dist/converse-no-dependencies.js:36078
#: dist/converse-no-dependencies.js:25297 #: dist/converse-no-dependencies.js:45593
msgid "URL" msgid "URL"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22566 #: dist/converse-no-dependencies.js:36117
#: dist/converse-no-dependencies.js:24293 #: dist/converse-no-dependencies.js:48307
msgid "Are you sure you want to remove this contact?" msgid "Are you sure you want to remove this contact?"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22575 #: dist/converse-no-dependencies.js:36126
#: dist/converse-no-dependencies.js:25325 #: dist/converse-no-dependencies.js:45621
msgid "Error" msgid "Error"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22575 #: dist/converse-no-dependencies.js:36126
#: dist/converse-no-dependencies.js:24301 #: dist/converse-no-dependencies.js:48315
#, javascript-format #, javascript-format
msgid "Sorry, there was an error while trying to remove %1$s as a contact." msgid "Sorry, there was an error while trying to remove %1$s as a contact."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22629 #: dist/converse-no-dependencies.js:36180
#: dist/converse-no-dependencies.js:22667 #: dist/converse-no-dependencies.js:36218
#: dist/converse-no-dependencies.js:29029 #: dist/converse-no-dependencies.js:42291
msgid "You have unread messages" msgid "You have unread messages"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22653 #: dist/converse-no-dependencies.js:36204
msgid "Hidden message" msgid "Hidden message"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22655 #: dist/converse-no-dependencies.js:36206
msgid "Personal message" msgid "Personal message"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22662 #: dist/converse-no-dependencies.js:36213
#: dist/converse-no-dependencies.js:29026 #: dist/converse-no-dependencies.js:42288
msgid "Send" msgid "Send"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22663 #: dist/converse-no-dependencies.js:36214
msgid "Optional hint" msgid "Optional hint"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22692 #: dist/converse-no-dependencies.js:36252
msgid "Choose a file to send" msgid "Choose a file to send"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22748 #: dist/converse-no-dependencies.js:36308
msgid "Click to write as a normal (non-spoiler) message" msgid "Click to write as a normal (non-spoiler) message"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22750 #: dist/converse-no-dependencies.js:36310
msgid "Click to write your message as a spoiler" msgid "Click to write your message as a spoiler"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22754 #: dist/converse-no-dependencies.js:36314
msgid "Clear all messages" msgid "Clear all messages"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22755 #: dist/converse-no-dependencies.js:36315
msgid "Insert emojis" msgid "Insert emojis"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:22756 #: dist/converse-no-dependencies.js:36316
msgid "Start a call" msgid "Start a call"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:23069 #: dist/converse-no-dependencies.js:36629
#: dist/converse-no-dependencies.js:29265 #: dist/converse-no-dependencies.js:42567
msgid "Remove messages" msgid "Remove messages"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:23069 #: dist/converse-no-dependencies.js:36629
msgid "Write in the third person" msgid "Write in the third person"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:23069 #: dist/converse-no-dependencies.js:36629
#: dist/converse-no-dependencies.js:29267 #: dist/converse-no-dependencies.js:42567
msgid "Show this menu" msgid "Show this menu"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:23164 #: dist/converse-no-dependencies.js:36728
msgid "Are you sure you want to clear the messages from this conversation?" msgid "Are you sure you want to clear the messages from this conversation?"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:23254 #: dist/converse-no-dependencies.js:36817
#: dist/converse-no-dependencies.js:30519 #: dist/converse-no-dependencies.js:45285
msgid "has gone offline" msgid "has gone offline"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:23258 #: dist/converse-no-dependencies.js:36819
#: dist/converse-no-dependencies.js:30523 #: dist/converse-no-dependencies.js:41017
msgid "is busy" #: dist/converse-no-dependencies.js:45287
msgstr "" msgid "has gone away"
#: 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"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:23868 #: dist/converse-no-dependencies.js:36821
msgid "This contact is away for an extended period" #: dist/converse-no-dependencies.js:45289
msgid "is busy"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:23869 #: dist/converse-no-dependencies.js:36823
msgid "This contact is away" msgid "is online"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:23872 #: dist/converse-no-dependencies.js:37209
#: dist/converse-no-dependencies.js:24584 #: dist/converse-no-dependencies.js:47885
#: dist/converse-no-dependencies.js:25680 #: dist/converse-no-dependencies.js:48606
msgid "Contacts" msgid "Contacts"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:23874 #: dist/converse-no-dependencies.js:37447
msgid "Groups" msgid "Username"
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"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:23932 #: dist/converse-no-dependencies.js:37447
msgid "Add" msgid "user@domain"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:24003 #: dist/converse-no-dependencies.js:37455
#: dist/converse-no-dependencies.js:25917 #: dist/converse-no-dependencies.js:48016
msgid "Please enter a valid XMPP address" msgid "Please enter a valid XMPP address"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:24040 #: dist/converse-no-dependencies.js:37544
msgid "Filter" msgid "Chat Contacts"
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."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:25377 #: dist/converse-no-dependencies.js:37544
msgid "Custom status" msgid "Toggle chat"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:25381 #: dist/converse-no-dependencies.js:38122
msgid "Away for long" msgid "The connection has dropped, attempting to reconnect."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:25382 #: dist/converse-no-dependencies.js:38220
msgid "Change chat status" msgid "An error occurred while connecting to the chat server."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:25383 #: dist/converse-no-dependencies.js:38227
msgid "Personal status message" msgid "Your Jabber ID and/or password is incorrect. Please try again."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:25427 #: dist/converse-no-dependencies.js:38239
#, javascript-format #, javascript-format
msgid "I am %1$s" msgid "Sorry, we could not connect to the XMPP host with domain: %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"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:25470 #: dist/converse-no-dependencies.js:38241
msgid "away" msgid "The XMPP server did not offer a supported authentication mechanism"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:25472 #: dist/converse-no-dependencies.js:40963
msgid "offline" msgid "Show more"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:25909 #: dist/converse-no-dependencies.js:41006
msgid "Username" msgid "Typing from another device"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:25909 #: dist/converse-no-dependencies.js:41008
msgid "user@domain" msgid "is typing"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:26003 #: dist/converse-no-dependencies.js:41012
msgid "Chat Contacts" msgid "Stopped typing on the other device"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:26003 #: dist/converse-no-dependencies.js:41014
msgid "Toggle chat" msgid "has stopped typing"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:27529 #: dist/converse-no-dependencies.js:41245
#: dist/converse-no-dependencies.js:27572 #: dist/converse-no-dependencies.js:41288
msgid "Minimize this chat box" msgid "Minimize this chat box"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:27705 #: dist/converse-no-dependencies.js:41421
msgid "Click to restore this chat" msgid "Click to restore this chat"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:27892 #: dist/converse-no-dependencies.js:41608
msgid "Minimized" msgid "Minimized"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28650 #: dist/converse-no-dependencies.js:41937
msgid "This room is not anonymous" msgid "This room is not anonymous"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28651 #: dist/converse-no-dependencies.js:41938
msgid "This room now shows unavailable members" msgid "This room now shows unavailable members"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28652 #: dist/converse-no-dependencies.js:41939
msgid "This room does not show unavailable members" msgid "This room does not show unavailable members"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28653 #: dist/converse-no-dependencies.js:41940
msgid "The room configuration has changed" msgid "The room configuration has changed"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28654 #: dist/converse-no-dependencies.js:41941
msgid "Room logging is now enabled" msgid "Room logging is now enabled"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28655 #: dist/converse-no-dependencies.js:41942
msgid "Room logging is now disabled" msgid "Room logging is now disabled"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28656 #: dist/converse-no-dependencies.js:41943
msgid "This room is now no longer anonymous" msgid "This room is now no longer anonymous"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28657 #: dist/converse-no-dependencies.js:41944
msgid "This room is now semi-anonymous" msgid "This room is now semi-anonymous"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28658 #: dist/converse-no-dependencies.js:41945
msgid "This room is now fully-anonymous" msgid "This room is now fully-anonymous"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28659 #: dist/converse-no-dependencies.js:41946
msgid "A new room has been created" msgid "A new room has been created"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28663 #: dist/converse-no-dependencies.js:41949
msgid "You have been banned from this room" msgid "You have been banned from this room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28664 #: dist/converse-no-dependencies.js:41950
msgid "You have been kicked from this room" msgid "You have been kicked from this room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28665 #: dist/converse-no-dependencies.js:41951
msgid "You have been removed from this room because of an affiliation change" msgid "You have been removed from this room because of an affiliation change"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28666 #: dist/converse-no-dependencies.js:41952
msgid "" msgid ""
"You have been removed from this room because the room has changed to members-" "You have been removed from this room because the room has changed to members-"
"only and you're not a member" "only and you're not a member"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28667 #: dist/converse-no-dependencies.js:41953
msgid "" msgid ""
"You have been removed from this room because the MUC (Multi-user chat) " "You have been removed from this room because the MUC (Multi-user chat) "
"service is being shut down" "service is being shut down"
...@@ -714,798 +428,949 @@ msgstr "" ...@@ -714,798 +428,949 @@ msgstr ""
#. * can then at least tell gettext to scan for it so that these #. * can then at least tell gettext to scan for it so that these
#. * strings are picked up by the translation machinery. #. * strings are picked up by the translation machinery.
#. #.
#: dist/converse-no-dependencies.js:28681 #: dist/converse-no-dependencies.js:41966
#, javascript-format #, javascript-format
msgid "%1$s has been banned" msgid "%1$s has been banned"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28682 #: dist/converse-no-dependencies.js:41967
#, javascript-format #, javascript-format
msgid "%1$s's nickname has changed" msgid "%1$s's nickname has changed"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28683 #: dist/converse-no-dependencies.js:41968
#, javascript-format #, javascript-format
msgid "%1$s has been kicked out" msgid "%1$s has been kicked out"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28684 #: dist/converse-no-dependencies.js:41969
#, javascript-format #, javascript-format
msgid "%1$s has been removed because of an affiliation change" msgid "%1$s has been removed because of an affiliation change"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28685 #: dist/converse-no-dependencies.js:41970
#, javascript-format #, javascript-format
msgid "%1$s has been removed for not being a member" msgid "%1$s has been removed for not being a member"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28689 #: dist/converse-no-dependencies.js:41973
#, javascript-format #, javascript-format
msgid "Your nickname has been automatically set to %1$s" msgid "Your nickname has been automatically set to %1$s"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28690 #: dist/converse-no-dependencies.js:41974
#, javascript-format #, javascript-format
msgid "Your nickname has been changed to %1$s" msgid "Your nickname has been changed to %1$s"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28724 #: dist/converse-no-dependencies.js:41992
msgid "Description:" msgid "Query for Chatrooms"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28725 #: dist/converse-no-dependencies.js:41993
msgid "Room Address (JID):" msgid "Server address"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28726 #: dist/converse-no-dependencies.js:41994
msgid "Occupants:" msgid "Show rooms"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28727 #: dist/converse-no-dependencies.js:41995
msgid "Features:" msgid "conference.example.org"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28728 #: dist/converse-no-dependencies.js:42053
msgid "Requires authentication" msgid "No rooms found"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28729 #: dist/converse-no-dependencies.js:42070
#: dist/converse-no-dependencies.js:30122 msgid "Rooms found:"
msgid "Hidden"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28730 #: dist/converse-no-dependencies.js:42122
msgid "Requires an invitation" msgid "Enter a new Chatroom"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28731 #: dist/converse-no-dependencies.js:42123
#: dist/converse-no-dependencies.js:30125 msgid "Room address"
msgid "Moderated"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28732 #: dist/converse-no-dependencies.js:42124
#: dist/converse-no-dependencies.js:30126 #: dist/converse-no-dependencies.js:47938
msgid "Non-anonymous" msgid "Optional nickname"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28733 #: dist/converse-no-dependencies.js:42125
msgid "Open room" msgid "name@conference.example.org"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28734 #: dist/converse-no-dependencies.js:42126
msgid "Permanent room" msgid "Join"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28735 #: dist/converse-no-dependencies.js:42169
#: dist/converse-no-dependencies.js:30130 msgid "Description:"
msgid "Public"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28736 #: dist/converse-no-dependencies.js:42170
#: dist/converse-no-dependencies.js:30131 msgid "Features:"
msgid "Semi-anonymous"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28737 #: dist/converse-no-dependencies.js:42171
msgid "Temporary room" #: dist/converse-no-dependencies.js:43424
msgid "Hidden"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28738 #: dist/converse-no-dependencies.js:42172
#: dist/converse-no-dependencies.js:30133 #: dist/converse-no-dependencies.js:43427
msgid "Unmoderated" msgid "Moderated"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28777 #: dist/converse-no-dependencies.js:42173
msgid "Query for Chatrooms" #: dist/converse-no-dependencies.js:43428
msgid "Non-anonymous"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28778 #: dist/converse-no-dependencies.js:42174
msgid "Server address" msgid "Online users:"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28779 #: dist/converse-no-dependencies.js:42175
msgid "Show rooms" msgid "Open room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28780 #: dist/converse-no-dependencies.js:42176
msgid "conference.example.org" msgid "Permanent room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28833 #: dist/converse-no-dependencies.js:42177
msgid "No rooms found" #: dist/converse-no-dependencies.js:43432
msgid "Public"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28850 #: dist/converse-no-dependencies.js:42178
msgid "Rooms found:" msgid "Requires authentication"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28903 #: dist/converse-no-dependencies.js:42179
msgid "Enter a new Chatroom" msgid "Requires an invitation"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28904 #: dist/converse-no-dependencies.js:42180
msgid "Room address" #: dist/converse-no-dependencies.js:43433
msgid "Semi-anonymous"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28906 #: dist/converse-no-dependencies.js:42181
msgid "name@conference.example.org" msgid "Temporary room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:28907 #: dist/converse-no-dependencies.js:42182
msgid "Join" #: dist/converse-no-dependencies.js:43435
msgid "Unmoderated"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29025 #: dist/converse-no-dependencies.js:42287
msgid "Message" msgid "Message"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29058 #: dist/converse-no-dependencies.js:42322
#, javascript-format #, javascript-format
msgid "%1$s is no longer a moderator" msgid "%1$s is no longer a moderator"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29061 #: dist/converse-no-dependencies.js:42326
#, javascript-format #, javascript-format
msgid "%1$s has been given a voice again" msgid "%1$s has been given a voice again"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29064 #: dist/converse-no-dependencies.js:42330
#, javascript-format #, javascript-format
msgid "%1$s has been muted" msgid "%1$s has been muted"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29067 #: dist/converse-no-dependencies.js:42334
#, javascript-format #, javascript-format
msgid "%1$s is now a moderator" msgid "%1$s is now a moderator"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29077 #: dist/converse-no-dependencies.js:42342
msgid "Close and leave this room" msgid "Close and leave this room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29078 #: dist/converse-no-dependencies.js:42343
msgid "Configure this room" msgid "Configure this room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29122 #: dist/converse-no-dependencies.js:42383
msgid "Hide the list of occupants" msgid "Hide the list of occupants"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29206 #: dist/converse-no-dependencies.js:42499
#, javascript-format #, javascript-format
msgid "" msgid ""
"Error: the \"%1$s\" command takes two arguments, the user's nickname and " "Error: the \"%1$s\" command takes two arguments, the user's nickname and "
"optionally a reason." "optionally a reason."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29218 #: dist/converse-no-dependencies.js:42508
msgid "" msgid ""
"Sorry, an error happened while running the command. Check your browser's " "Sorry, an error happened while running the command. Check your browser's "
"developer console for details." "developer console for details."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29263 #: dist/converse-no-dependencies.js:42567
msgid "Change user's affiliation to admin" msgid "Change user's affiliation to admin"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29264 #: dist/converse-no-dependencies.js:42567
msgid "Ban user from room" msgid "Ban user from room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29266 #: dist/converse-no-dependencies.js:42567
msgid "Change user role to participant" msgid "Change user role to participant"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29268 #: dist/converse-no-dependencies.js:42567
msgid "Kick user from room" msgid "Kick user from room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29269 #: dist/converse-no-dependencies.js:42567
msgid "Write in 3rd person" msgid "Write in 3rd person"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29270 #: dist/converse-no-dependencies.js:42567
msgid "Grant membership to a user" msgid "Grant membership to a user"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29271 #: dist/converse-no-dependencies.js:42567
msgid "Remove user's ability to post messages" msgid "Remove user's ability to post messages"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29272 #: dist/converse-no-dependencies.js:42567
msgid "Change your nickname" msgid "Change your nickname"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29273 #: dist/converse-no-dependencies.js:42567
msgid "Grant moderator role to user" msgid "Grant moderator role to user"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29274 #: dist/converse-no-dependencies.js:42567
msgid "Grant ownership of this room" msgid "Grant ownership of this room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29275 #: dist/converse-no-dependencies.js:42567
msgid "Revoke user's membership" msgid "Revoke user's membership"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29276 #: dist/converse-no-dependencies.js:42567
msgid "Set room subject" msgid "Set room subject"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29277 #: dist/converse-no-dependencies.js:42567
msgid "Set room subject (alias for /subject)" msgid "Set room subject (alias for /subject)"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29278 #: dist/converse-no-dependencies.js:42567
msgid "Allow muted user to post messages" msgid "Allow muted user to post messages"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29590 #: dist/converse-no-dependencies.js:42897
msgid "" msgid ""
"The nickname you chose is reserved or currently in use, please choose a " "The nickname you chose is reserved or currently in use, please choose a "
"different one." "different one."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29616 #: dist/converse-no-dependencies.js:42923
msgid "Please choose your nickname" msgid "Please choose your nickname"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29618 #: dist/converse-no-dependencies.js:42925
msgid "Enter room" msgid "Enter room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29641 #: dist/converse-no-dependencies.js:42946
msgid "This chatroom requires a password" msgid "This chatroom requires a password"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29642 #: dist/converse-no-dependencies.js:42947
msgid "Password: " msgid "Password: "
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29740 #: dist/converse-no-dependencies.js:42948
msgid "Submit"
msgstr ""
#: dist/converse-no-dependencies.js:43062
#, javascript-format #, javascript-format
msgid "This action was done by %1$s." msgid "This action was done by %1$s."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29743 #: dist/converse-no-dependencies.js:43066
#: dist/converse-no-dependencies.js:29759 #: dist/converse-no-dependencies.js:43083
#, javascript-format #, javascript-format
msgid "The reason given is: \"%1$s\"." msgid "The reason given is: \"%1$s\"."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29781 #: dist/converse-no-dependencies.js:43104
#, javascript-format #, javascript-format
msgid "%1$s has left and re-entered the room" msgid "%1$s has left and re-entered the room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29786 #: dist/converse-no-dependencies.js:43110
#, javascript-format #, javascript-format
msgid "%1$s has entered the room" msgid "%1$s has entered the room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29788 #: dist/converse-no-dependencies.js:43112
#, javascript-format #, javascript-format
msgid "%1$s has entered the room. \"%2$s\"" msgid "%1$s has entered the room. \"%2$s\""
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29818 #: dist/converse-no-dependencies.js:43143
#, javascript-format #, javascript-format
msgid "%1$s has entered and left the room" msgid "%1$s has entered and left the room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29820 #: dist/converse-no-dependencies.js:43145
#, javascript-format #, javascript-format
msgid "%1$s has entered and left the room. \"%2$s\"" msgid "%1$s has entered and left the room. \"%2$s\""
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29832 #: dist/converse-no-dependencies.js:43158
#, javascript-format #, javascript-format
msgid "%1$s has left the room" msgid "%1$s has left the room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29834 #: dist/converse-no-dependencies.js:43160
#, javascript-format #, javascript-format
msgid "%1$s has left the room. \"%2$s\"" msgid "%1$s has left the room. \"%2$s\""
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29877 #: dist/converse-no-dependencies.js:43206
msgid "You are not on the member list of this room." msgid "You are not on the member list of this room."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29879 #: dist/converse-no-dependencies.js:43208
msgid "You have been banned from this room." msgid "You have been banned from this room."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29883 #: dist/converse-no-dependencies.js:43212
msgid "No nickname was specified." msgid "No nickname was specified."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29887 #: dist/converse-no-dependencies.js:43216
msgid "You are not allowed to create new rooms." msgid "You are not allowed to create new rooms."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29889 #: dist/converse-no-dependencies.js:43218
msgid "Your nickname doesn't conform to this room's policies." msgid "Your nickname doesn't conform to this room's policies."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29893 #: dist/converse-no-dependencies.js:43222
msgid "This room does not (yet) exist." msgid "This room does not (yet) exist."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29895 #: dist/converse-no-dependencies.js:43224
msgid "This room has reached its maximum number of occupants." msgid "This room has reached its maximum number of occupants."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29950 #: dist/converse-no-dependencies.js:43274
#, javascript-format #, javascript-format
msgid "Topic set by %1$s" msgid "Topic set by %1$s"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29981 #: dist/converse-no-dependencies.js:43297
msgid "Chatrooms" msgid "Chatrooms"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29982 #: dist/converse-no-dependencies.js:43298
msgid "Add a new room" msgid "Add a new room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:29983 #: dist/converse-no-dependencies.js:43299
msgid "Query for rooms" msgid "Query for rooms"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30022 #: dist/converse-no-dependencies.js:43337
#, javascript-format #, javascript-format
msgid "Click to mention %1$s in your message." msgid "Click to mention %1$s in your message."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30023 #: dist/converse-no-dependencies.js:43338
msgid "This user is a moderator." msgid "This user is a moderator."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30024 #: dist/converse-no-dependencies.js:43339
msgid "This user can send messages in this room." msgid "This user can send messages in this room."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30025 #: dist/converse-no-dependencies.js:43340
msgid "This user can NOT send messages in this room." msgid "This user can NOT send messages in this room."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30026 #: dist/converse-no-dependencies.js:43341
msgid "Moderator" msgid "Moderator"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30027 #: dist/converse-no-dependencies.js:43342
msgid "Visitor" msgid "Visitor"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30028 #: dist/converse-no-dependencies.js:43343
msgid "Owner" msgid "Owner"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30029 #: dist/converse-no-dependencies.js:43344
msgid "Member" msgid "Member"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30030 #: dist/converse-no-dependencies.js:43345
msgid "Admin" msgid "Admin"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30082 #: dist/converse-no-dependencies.js:43387
msgid "Occupants" msgid "Occupants"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30102 #: dist/converse-no-dependencies.js:43404
#: dist/converse-no-dependencies.js:30209 #: dist/converse-no-dependencies.js:43511
msgid "Invite" msgid "Invite"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30121 #: dist/converse-no-dependencies.js:43423
msgid "Features" msgid "Features"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30123 #: dist/converse-no-dependencies.js:43425
msgid "Message archiving" msgid "Message archiving"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30124 #: dist/converse-no-dependencies.js:43426
msgid "Members only" msgid "Members only"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30127 #: dist/converse-no-dependencies.js:43429
msgid "Open" msgid "Open"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30128 #: dist/converse-no-dependencies.js:43430
msgid "Password protected" msgid "Password protected"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30129 #: dist/converse-no-dependencies.js:43431
msgid "Persistent" msgid "Persistent"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30132 #: dist/converse-no-dependencies.js:43434
msgid "Temporary" msgid "Temporary"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30134 #: dist/converse-no-dependencies.js:43436
msgid "No password" msgid "No password"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30135 #: dist/converse-no-dependencies.js:43437
msgid "This room is not publicly searchable" msgid "This room is not publicly searchable"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30136 #: dist/converse-no-dependencies.js:43438
msgid "Messages are archived on the server" msgid "Messages are archived on the server"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30137 #: dist/converse-no-dependencies.js:43439
msgid "This room is restricted to members only" msgid "This room is restricted to members only"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30138 #: dist/converse-no-dependencies.js:43440
msgid "This room is being moderated" msgid "This room is being moderated"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30139 #: dist/converse-no-dependencies.js:43441
msgid "All other room occupants can see your XMPP username" msgid "All other room occupants can see your XMPP username"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30140 #: dist/converse-no-dependencies.js:43442
msgid "Anyone can join this room" msgid "Anyone can join this room"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30141 #: dist/converse-no-dependencies.js:43443
msgid "This room requires a password before entry" msgid "This room requires a password before entry"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30142 #: dist/converse-no-dependencies.js:43444
msgid "This room persists even if it's unoccupied" msgid "This room persists even if it's unoccupied"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30143 #: dist/converse-no-dependencies.js:43445
msgid "This room is publicly searchable" msgid "This room is publicly searchable"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30144 #: dist/converse-no-dependencies.js:43446
msgid "Only moderators can see your XMPP username" msgid "Only moderators can see your XMPP username"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30145 #: dist/converse-no-dependencies.js:43447
msgid "This room will disappear once the last person leaves" msgid "This room will disappear once the last person leaves"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30146 #: dist/converse-no-dependencies.js:43448
msgid "This room is not being moderated" msgid "This room is not being moderated"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30147 #: dist/converse-no-dependencies.js:43449
msgid "This room does not require a password upon entry" msgid "This room does not require a password upon entry"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30187 #: dist/converse-no-dependencies.js:43488
#, javascript-format #, javascript-format
msgid "" msgid ""
"You are about to invite %1$s to the chat room \"%2$s\". You may optionally " "You are about to invite %1$s to the chat room \"%2$s\". You may optionally "
"include a message, explaining the reason for the invitation." "include a message, explaining the reason for the invitation."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30208 #: dist/converse-no-dependencies.js:43510
msgid "Please enter a valid XMPP username" msgid "Please enter a valid XMPP username"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:44865
#, javascript-format
msgid "%1$s has invited you to join a chat room: %2$s"
msgstr ""
#: dist/converse-no-dependencies.js:44867
#, javascript-format
msgid ""
"%1$s has invited you to join a chat room: %2$s, and left the following "
"reason: \"%3$s\""
msgstr ""
#. workaround for Prosody which doesn't give type "headline" #. workaround for Prosody which doesn't give type "headline"
#: dist/converse-no-dependencies.js:30469 #: dist/converse-no-dependencies.js:45235
#: dist/converse-no-dependencies.js:30475 #: dist/converse-no-dependencies.js:45241
#, javascript-format #, javascript-format
msgid "Notification from %1$s" msgid "Notification from %1$s"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30477 #: dist/converse-no-dependencies.js:45243
#: dist/converse-no-dependencies.js:30488 #: dist/converse-no-dependencies.js:45254
#: dist/converse-no-dependencies.js:30491 #: dist/converse-no-dependencies.js:45257
#, javascript-format #, javascript-format
msgid "%1$s says" msgid "%1$s says"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30525 #: dist/converse-no-dependencies.js:45291
msgid "has come online" msgid "has come online"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30542 #: dist/converse-no-dependencies.js:45308
msgid "wants to be your contact" msgid "wants to be your contact"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30824 #: dist/converse-no-dependencies.js:45584
msgid "Re-establishing encrypted session" msgid "Your Profile"
msgstr ""
#: dist/converse-no-dependencies.js:45589
msgid "XMPP Address (JID)"
msgstr "" msgstr ""
#. We need to generate a new key and instance tag #: dist/converse-no-dependencies.js:45591
#: dist/converse-no-dependencies.js:30835 msgid ""
msgid "Generating private key." "Use commas to separate multiple roles. Your roles are shown next to your "
"name on your chat messages."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30835 #: dist/converse-no-dependencies.js:45594
msgid "Your browser might become unresponsive." msgid "Your avatar image"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30878 #: dist/converse-no-dependencies.js:45621
#, javascript-format msgid "Sorry, an error happened while trying to save your profile data."
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"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30887 #: dist/converse-no-dependencies.js:45621
msgid "Could not verify this user's identify." msgid "You can check your browser's developer console for any error output."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:30941 #: dist/converse-no-dependencies.js:45670
msgid "Exchanging private key with contact." #: dist/converse-no-dependencies.js:48062
msgid "Away"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31038 #: dist/converse-no-dependencies.js:45672
msgid "Your messages are not encrypted anymore" #: dist/converse-no-dependencies.js:48061
msgid "Busy"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31040 #: dist/converse-no-dependencies.js:45674
msgid "" msgid "Custom status"
"Your messages are now encrypted but your contact's identity has not been "
"verified."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31042 #: dist/converse-no-dependencies.js:45675
msgid "Your contact's identify has been verified." #: dist/converse-no-dependencies.js:48064
msgid "Offline"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31044 #: dist/converse-no-dependencies.js:45676
msgid "Your contact has ended encryption on their end, you should do the same." #: dist/converse-no-dependencies.js:48059
msgid "Online"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31054 #: dist/converse-no-dependencies.js:45678
msgid "Your message could not be sent" msgid "Away for long"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31056 #: dist/converse-no-dependencies.js:45679
msgid "We received an unencrypted message" msgid "Change chat status"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31058 #: dist/converse-no-dependencies.js:45680
msgid "We received an unreadable encrypted message" msgid "Personal status message"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31084 #: dist/converse-no-dependencies.js:45724
#, javascript-format #, javascript-format
msgid "" msgid "I am %1$s"
"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."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31097 #: dist/converse-no-dependencies.js:45727
msgid "What is your security question?" msgid "Change settings"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31100 #: dist/converse-no-dependencies.js:45728
msgid "What is the answer to the security question?" msgid "Click to change your chat status"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31104 #: dist/converse-no-dependencies.js:45729
msgid "Invalid authentication scheme provided" msgid "Log out"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31121 #: dist/converse-no-dependencies.js:45730
msgid "Your messages are not encrypted. Click here to enable OTR encryption." msgid "Your profile"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31123 #: dist/converse-no-dependencies.js:45753
msgid "Your messages are encrypted, but your contact has not been verified." msgid "Are you sure you want to log out?"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31125 #: dist/converse-no-dependencies.js:45761
msgid "Your messages are encrypted and your contact verified." #: dist/converse-no-dependencies.js:45771
msgid "online"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31127 #: dist/converse-no-dependencies.js:45763
msgid "" msgid "busy"
"Your contact has closed their end of the private session, you should do the " msgstr ""
"same"
#: dist/converse-no-dependencies.js:45765
msgid "away for long"
msgstr ""
#: dist/converse-no-dependencies.js:45767
msgid "away"
msgstr ""
#: dist/converse-no-dependencies.js:45769
msgid "offline"
msgstr ""
#: dist/converse-no-dependencies.js:45923
msgid " e.g. conversejs.org"
msgstr ""
#: dist/converse-no-dependencies.js:45970
msgid "Fetch registration form"
msgstr ""
#: dist/converse-no-dependencies.js:45971
msgid "Tip: A list of public XMPP providers is available"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31141 #: dist/converse-no-dependencies.js:45972
msgid "End encrypted conversation" msgid "here"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31142 #: dist/converse-no-dependencies.js:46020
msgid "Refresh encrypted conversation" msgid "Sorry, we're unable to connect to your chosen provider."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31143 #: dist/converse-no-dependencies.js:46036
msgid "Start encrypted conversation" msgid ""
"Sorry, the given provider does not support in band account registration. "
"Please try with a different provider."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31144 #: dist/converse-no-dependencies.js:46060
msgid "Verify with fingerprints" #, javascript-format
msgid ""
"Something went wrong while establishing a connection with \"%1$s\". Are you "
"sure it exists?"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31145 #: dist/converse-no-dependencies.js:46223
msgid "Verify with SMP" msgid "Now logging you in"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31146 #: dist/converse-no-dependencies.js:46227
msgid "What's this?" msgid "Registered successfully"
msgstr "" msgstr ""
#. Translation aware constants #: dist/converse-no-dependencies.js:46336
#. --------------------------- msgid ""
#. We can only call the __ translation method *after* converse.js "The provider rejected your registration attempt. Please check the values you "
#. has been initialized and with it the i18n machinery. That's why "entered for correctness."
#. we do it here in the "initialize" method and not at the top of
#. the module.
#: dist/converse-no-dependencies.js:31189
msgid "unencrypted"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31190 #: dist/converse-no-dependencies.js:46705
msgid "unverified" msgid "Click to toggle the rooms list"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31191 #: dist/converse-no-dependencies.js:46706
msgid "verified" msgid "Open Rooms"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31192 #: dist/converse-no-dependencies.js:46750
msgid "finished" #, javascript-format
msgid "Are you sure you want to leave the room %1$s?"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31788 #: dist/converse-no-dependencies.js:47359
#, javascript-format #, javascript-format
msgid "Sorry, there was an error while trying to add %1$s as a contact." msgid "Sorry, there was an error while trying to add %1$s as a contact."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:31936 #: dist/converse-no-dependencies.js:47570
msgid "This client does not allow presence subscriptions" msgid "This client does not allow presence subscriptions"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32028 #: dist/converse-no-dependencies.js:47678
msgid "Click to hide these contacts" msgid "Click to hide these contacts"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32112 #: dist/converse-no-dependencies.js:47877
msgid "Don't have a chat account?" msgid "This contact is busy"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32114 #: dist/converse-no-dependencies.js:47878
msgid "Create an account" msgid "This contact is online"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32126 #: dist/converse-no-dependencies.js:47879
msgid "Create your account" msgid "This contact is offline"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32128 #: dist/converse-no-dependencies.js:47880
msgid "Please enter the XMPP provider to register with:" msgid "This contact is unavailable"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32148 #: dist/converse-no-dependencies.js:47881
msgid "Already have a chat account?" msgid "This contact is away for an extended period"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32150 #: dist/converse-no-dependencies.js:47882
msgid "Log in here" msgid "This contact is away"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32162 #: dist/converse-no-dependencies.js:47887
msgid "Account Registration:" msgid "Groups"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32170 #: dist/converse-no-dependencies.js:47889
msgid "Register" msgid "My contacts"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32174 #: dist/converse-no-dependencies.js:47891
msgid "Choose a different provider" msgid "Pending contacts"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32186 #: dist/converse-no-dependencies.js:47893
msgid "Hold tight, we're fetching the registration form…" msgid "Contact requests"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32321 #: dist/converse-no-dependencies.js:47895
msgid " e.g. conversejs.org" msgid "Ungrouped"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32367 #: dist/converse-no-dependencies.js:47938
msgid "Fetch registration form" msgid "Contact name"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32368 #: dist/converse-no-dependencies.js:47941
msgid "Tip: A list of public XMPP providers is available" msgid "Add a Contact"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32369 #: dist/converse-no-dependencies.js:47942
msgid "here" msgid "XMPP Address"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32417 #: dist/converse-no-dependencies.js:47944
msgid "Sorry, we're unable to connect to your chosen provider." msgid "name@example.org"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32433 #: dist/converse-no-dependencies.js:47945
msgid "" msgid "Add"
"Sorry, the given provider does not support in band account registration. " msgstr ""
"Please try with a different provider."
#: dist/converse-no-dependencies.js:48053
msgid "Filter"
msgstr ""
#: dist/converse-no-dependencies.js:48054
msgid "Filter by contact name"
msgstr ""
#: dist/converse-no-dependencies.js:48055
msgid "Filter by group name"
msgstr ""
#: dist/converse-no-dependencies.js:48056
msgid "Filter by status"
msgstr ""
#: dist/converse-no-dependencies.js:48057
msgid "Any"
msgstr ""
#: dist/converse-no-dependencies.js:48058
msgid "Unread"
msgstr ""
#: dist/converse-no-dependencies.js:48060
msgid "Chatty"
msgstr ""
#: dist/converse-no-dependencies.js:48063
msgid "Extended Away"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32457 #: dist/converse-no-dependencies.js:48219
#: dist/converse-no-dependencies.js:48261
#, javascript-format #, javascript-format
msgid "" msgid "Click to remove %1$s as a contact"
"Something went wrong while establishing a connection with \"%1$s\". Are you "
"sure it exists?"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32620 #: dist/converse-no-dependencies.js:48228
msgid "Now logging you in" #, javascript-format
msgid "Click to accept the contact request from %1$s"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32624 #: dist/converse-no-dependencies.js:48229
msgid "Registered successfully" #, javascript-format
msgid "Click to decline the contact request from %1$s"
msgstr ""
#: dist/converse-no-dependencies.js:48260
#, javascript-format
msgid "Click to chat with %1$s (JID: %2$s)"
msgstr ""
#: dist/converse-no-dependencies.js:48337
msgid "Are you sure you want to decline this contact request?"
msgstr ""
#: dist/converse-no-dependencies.js:48607
msgid "Add a contact"
msgstr ""
#: dist/converse-no-dependencies.js:50080
msgid "Room Address (JID)"
msgstr ""
#: dist/converse-no-dependencies.js:50084
msgid "Title"
msgstr ""
#: dist/converse-no-dependencies.js:50088
msgid "Description"
msgstr ""
#: dist/converse-no-dependencies.js:51158
msgid "XMPP Username:"
msgstr ""
#: dist/converse-no-dependencies.js:51164
msgid "Password:"
msgstr ""
#: dist/converse-no-dependencies.js:51166
msgid "password"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:32733 #: dist/converse-no-dependencies.js:51174
msgid "This is a trusted device"
msgstr ""
#: dist/converse-no-dependencies.js:51176
msgid "" msgid ""
"The provider rejected your registration attempt. Please check the values you " "To improve performance, we cache your data in this browser. Uncheck this box "
"entered for correctness." "if this is a public computer or if you want your data to be deleted when you "
"log out. It's important that you explicitly log out, otherwise not all "
"cached data might be deleted."
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:33149 #: dist/converse-no-dependencies.js:51178
msgid "Click to toggle the rooms list" msgid "Log in"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:33150 #: dist/converse-no-dependencies.js:51184
msgid "Open Rooms" msgid "Click here to log in anonymously"
msgstr ""
#: dist/converse-no-dependencies.js:51526
msgid "Don't have a chat account?"
msgstr ""
#: dist/converse-no-dependencies.js:51528
msgid "Create an account"
msgstr ""
#: dist/converse-no-dependencies.js:51549
msgid "Create your account"
msgstr "" msgstr ""
#: dist/converse-no-dependencies.js:33194 #: dist/converse-no-dependencies.js:51551
msgid "Please enter the XMPP provider to register with:"
msgstr ""
#: dist/converse-no-dependencies.js:51571
msgid "Already have a chat account?"
msgstr ""
#: dist/converse-no-dependencies.js:51573
msgid "Log in here"
msgstr ""
#: dist/converse-no-dependencies.js:51594
msgid "Account Registration:"
msgstr ""
#: dist/converse-no-dependencies.js:51602
msgid "Register"
msgstr ""
#: dist/converse-no-dependencies.js:51606
msgid "Choose a different provider"
msgstr ""
#: dist/converse-no-dependencies.js:51627
msgid "Hold tight, we're fetching the registration form…"
msgstr ""
#: dist/converse-no-dependencies.js:52762
#: dist/converse-no-dependencies.js:52791
msgid "Download"
msgstr ""
#: dist/converse-no-dependencies.js:52781
#, javascript-format #, javascript-format
msgid "Are you sure you want to leave the room %1$s?" msgid "Download: \"%1$s"
msgstr ""
#: dist/converse-no-dependencies.js:52804
msgid "Download video file"
msgstr ""
#: dist/converse-no-dependencies.js:52817
msgid "Download audio file"
msgstr "" msgstr ""
...@@ -7,6 +7,31 @@ ...@@ -7,6 +7,31 @@
} }
} }
#room-details-modal {
.features-list {
margin-left: 1em;
}
}
.chatroom-features {
width: 100%;
.features-list {
padding-top: 0;
.feature {
width: 100%;
margin-right: 0.5em;
padding-right: 0;
font-size: 1em;
cursor: help;
.fa {
margin-right: 0.5em;
color: $text-color;
}
}
}
}
.chat-head-chatroom { .chat-head-chatroom {
background-color: $chatroom-head-color; background-color: $chatroom-head-color;
...@@ -133,16 +158,6 @@ ...@@ -133,16 +158,6 @@
} }
} }
.chatroom-features {
width: 100%;
.feature {
float: left;
margin-right: 0.5em;
padding-right: 0;
font-size: 1em;
cursor: help;
}
}
.awesomplete { .awesomplete {
ul { ul {
padding: 0; padding: 0;
...@@ -164,15 +179,6 @@ ...@@ -164,15 +179,6 @@
flex-grow: 1; flex-grow: 1;
border-bottom: 1px solid lightgrey; border-bottom: 1px solid lightgrey;
} }
&.features-list {
padding-top: 0;
.feature {
width: 100%;
.fa {
color: $text-color;
}
}
}
li { li {
cursor: default; cursor: default;
display: block; display: block;
......
...@@ -159,6 +159,10 @@ body.reset { ...@@ -159,6 +159,10 @@ body.reset {
font-weight: 700; font-weight: 700;
} }
em {
font-style: italic;
}
ol, ul { ol, ul {
list-style: none; list-style: none;
} }
......
...@@ -814,9 +814,8 @@ ...@@ -814,9 +814,8 @@
.c('field', {'type':'text-single', 'var':'muc#roominfo_occupants', 'label':'Number of occupants'}) .c('field', {'type':'text-single', 'var':'muc#roominfo_occupants', 'label':'Number of occupants'})
.c('value').t(0); .c('value').t(0);
_converse.connection._dataRecv(test_utils.createRequest(features_stanza)); _converse.connection._dataRecv(test_utils.createRequest(features_stanza));
test_utils.waitUntil(function () { test_utils.waitUntil(() => _.get(view.el.querySelector('.chatroom-description'), 'textContent'))
return _.get(view.el.querySelector('.chatroom-description'), 'textContent'); .then(function () {
}).then(function () {
expect($(view.el.querySelector('.chatroom-description')).text()).toBe('This is the description'); expect($(view.el.querySelector('.chatroom-description')).text()).toBe('This is the description');
done(); done();
}); });
...@@ -1842,7 +1841,7 @@ ...@@ -1842,7 +1841,7 @@
_converse.connection._dataRecv(test_utils.createRequest(features_stanza)); _converse.connection._dataRecv(test_utils.createRequest(features_stanza));
var view = _converse.chatboxviews.get('coven@chat.shakespeare.lit'); var view = _converse.chatboxviews.get('coven@chat.shakespeare.lit');
expect(view.model.get('features_fetched')).toBe(true); expect(view.model.get('features_fetched')).toBeTruthy();
expect(view.model.get('passwordprotected')).toBe(true); expect(view.model.get('passwordprotected')).toBe(true);
expect(view.model.get('hidden')).toBe(true); expect(view.model.get('hidden')).toBe(true);
expect(view.model.get('temporary')).toBe(true); expect(view.model.get('temporary')).toBe(true);
......
...@@ -3,11 +3,15 @@ ...@@ -3,11 +3,15 @@
} (this, function (jasmine, mock, test_utils) { } (this, function (jasmine, mock, test_utils) {
var _ = converse.env._; var _ = converse.env._;
var $msg = converse.env.$msg; var $msg = converse.env.$msg;
var $iq = converse.env.$iq;
var $pres = converse.env.$pres;
var Promise = converse.env.Promise; var Promise = converse.env.Promise;
var Strophe = converse.env.Strophe;
var u = converse.env.utils;
describe("The converse-roomslist plugin", function () { describe("A list of open rooms", function () {
it("is shown under a list of open rooms in the \"Rooms\" panel", mock.initConverseWithPromises( it("is shown in the \"Rooms\" panel", mock.initConverseWithPromises(
null, ['rosterGroupsFetched'], null, ['rosterGroupsFetched'],
{ allow_bookmarks: false // Makes testing easier, otherwise we { allow_bookmarks: false // Makes testing easier, otherwise we
// have to mock stanza traffic. // have to mock stanza traffic.
...@@ -50,7 +54,104 @@ ...@@ -50,7 +54,104 @@
)); ));
}); });
describe("An room shown in the rooms list", function () { describe("A room shown in the rooms list", function () {
it("has an info icon which opens a details modal when clicked", mock.initConverseWithPromises(
null, ['rosterGroupsFetched'],
{ whitelisted_plugins: ['converse-roomslist'],
allow_bookmarks: false // Makes testing easier, otherwise we
// have to mock stanza traffic.
}, function (done, _converse) {
test_utils.openControlBox();
_converse.api.rooms.open('coven@chat.shakespeare.lit', {'nick': 'some1'});
const view = _converse.chatboxviews.get('coven@chat.shakespeare.lit');
const last_stanza = _.last(_converse.connection.IQ_stanzas).nodeTree;
const IQ_id = last_stanza.getAttribute('id');
const features_stanza = $iq({
'from': 'coven@chat.shakespeare.lit',
'id': IQ_id,
'to': 'dummy@localhost/desktop',
'type': 'result'
})
.c('query', { 'xmlns': 'http://jabber.org/protocol/disco#info'})
.c('identity', {
'category': 'conference',
'name': 'A Dark Cave',
'type': 'text'
}).up()
.c('feature', {'var': 'http://jabber.org/protocol/muc'}).up()
.c('feature', {'var': 'muc_passwordprotected'}).up()
.c('feature', {'var': 'muc_hidden'}).up()
.c('feature', {'var': 'muc_temporary'}).up()
.c('feature', {'var': 'muc_open'}).up()
.c('feature', {'var': 'muc_unmoderated'}).up()
.c('feature', {'var': 'muc_nonanonymous'}).up()
.c('feature', {'var': 'urn:xmpp:mam:0'}).up()
.c('x', { 'xmlns':'jabber:x:data', 'type':'result'})
.c('field', {'var':'FORM_TYPE', 'type':'hidden'})
.c('value').t('http://jabber.org/protocol/muc#roominfo').up().up()
.c('field', {'type':'text-single', 'var':'muc#roominfo_description', 'label':'Description'})
.c('value').t('This is the description').up().up()
.c('field', {'type':'text-single', 'var':'muc#roominfo_occupants', 'label':'Number of occupants'})
.c('value').t(0);
_converse.connection._dataRecv(test_utils.createRequest(features_stanza));
test_utils.waitUntil(() => view.model.get('connection_status') === converse.ROOMSTATUS.CONNECTING)
.then(function () {
var presence = $pres({
to: _converse.connection.jid,
from: 'coven@chat.shakespeare.lit/some1',
id: 'DC352437-C019-40EC-B590-AF29E879AF97'
}).c('x').attrs({xmlns:'http://jabber.org/protocol/muc#user'})
.c('item').attrs({
affiliation: 'member',
jid: _converse.bare_jid,
role: 'participant'
}).up()
.c('status').attrs({code:'110'});
_converse.connection._dataRecv(test_utils.createRequest(presence));
const room_els = _converse.rooms_list_view.el.querySelectorAll(".open-room");
expect(room_els.length).toBe(1);
var info_el = _converse.rooms_list_view.el.querySelector(".room-info");
info_el.click();
const modal = view.model.room_details_modal;
return test_utils.waitUntil(() => u.isVisible(modal.el), 2000);
}).then(() => {
const modal = view.model.room_details_modal;
let els = modal.el.querySelectorAll('p.room-info');
expect(els[0].textContent).toBe("Room address (JID): coven@chat.shakespeare.lit")
expect(els[1].textContent).toBe("Name: A Dark Cave")
expect(els[2].textContent).toBe("Description: This is the description")
expect(els[3].textContent).toBe("Online users: 1")
const features_list = modal.el.querySelector('.features-list');
expect(features_list.textContent.replace(/(\n|\s{2,})/g, '')).toBe(
'Password protected - This room requires a password before entry'+
'Hidden - This room is not publicly searchable'+
'Open - Anyone can join this room'+
'Temporary - This room will disappear once the last person leaves'+
'Not anonymous - All other room occupants can see your XMPP username'+
'Not moderated - This room is not being moderated'
);
const presence = $pres({
to: 'dummy@localhost/_converse.js-29092160',
from: 'coven@chat.shakespeare.lit/newguy'
})
.c('x', {xmlns: Strophe.NS.MUC_USER})
.c('item', {
'affiliation': 'none',
'jid': 'newguy@localhost/_converse.js-290929789',
'role': 'participant'
});
_converse.connection._dataRecv(test_utils.createRequest(presence));
els = modal.el.querySelectorAll('p.room-info');
expect(els[3].textContent).toBe("Online users: 2")
done();
});
}));
it("can be closed", mock.initConverseWithPromises( it("can be closed", mock.initConverseWithPromises(
null, ['rosterGroupsFetched'], null, ['rosterGroupsFetched'],
......
(function (root, factory) { (function (root, factory) {
define(["jasmine", "mock", "test-utils"], factory); define(["jasmine", "mock", "test-utils"], factory);
} (this, function (jasmine, mock, test_utils) { } (this, function (jasmine, mock, test_utils) {
var _ = converse.env._; var _ = converse.env._;
var Strophe = converse.env.Strophe; var Strophe = converse.env.Strophe;
var $msg = converse.env.$msg; var $msg = converse.env.$msg;
......
...@@ -422,6 +422,7 @@ ...@@ -422,6 +422,7 @@
}, },
showUserDetailsModal (ev) { showUserDetailsModal (ev) {
ev.preventDefault();
if (_.isUndefined(this.user_details_modal)) { if (_.isUndefined(this.user_details_modal)) {
this.user_details_modal = new _converse.UserDetailsModal({model: this.model}); this.user_details_modal = new _converse.UserDetailsModal({model: this.model});
} }
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
"templates/add_chatroom_modal.html", "templates/add_chatroom_modal.html",
"templates/chatarea.html", "templates/chatarea.html",
"templates/chatroom.html", "templates/chatroom.html",
"templates/chatroom_details_modal.html",
"templates/chatroom_disconnect.html", "templates/chatroom_disconnect.html",
"templates/chatroom_features.html", "templates/chatroom_features.html",
"templates/chatroom_form.html", "templates/chatroom_form.html",
...@@ -37,6 +38,7 @@ ...@@ -37,6 +38,7 @@
tpl_add_chatroom_modal, tpl_add_chatroom_modal,
tpl_chatarea, tpl_chatarea,
tpl_chatroom, tpl_chatroom,
tpl_chatroom_details_modal,
tpl_chatroom_disconnect, tpl_chatroom_disconnect,
tpl_chatroom_features, tpl_chatroom_features,
tpl_chatroom_form, tpl_chatroom_form,
...@@ -482,6 +484,26 @@ ...@@ -482,6 +484,26 @@
}); });
_converse.RoomDetailsModal = _converse.BootstrapModal.extend({
initialize () {
_converse.BootstrapModal.prototype.initialize.apply(this, arguments);
this.model.on('change', this.render, this);
this.model.occupants.on('change', this.render, this);
},
toHTML () {
return tpl_chatroom_details_modal(_.extend(
this.model.toJSON(), {
'__': __,
'display_name': this.model.getDisplayName(),
'num_occupants': this.model.occupants.length
})
);
}
});
_converse.ChatRoomView = _converse.ChatBoxView.extend({ _converse.ChatRoomView = _converse.ChatBoxView.extend({
/* Backbone.NativeView which renders a chat room, based upon the view /* Backbone.NativeView which renders a chat room, based upon the view
* for normal one-on-one chat boxes. * for normal one-on-one chat boxes.
...@@ -495,6 +517,7 @@ ...@@ -495,6 +517,7 @@
'click .chatbox-navback': 'showControlBox', 'click .chatbox-navback': 'showControlBox',
'click .close-chatbox-button': 'close', 'click .close-chatbox-button': 'close',
'click .configure-chatroom-button': 'getAndRenderConfigurationForm', 'click .configure-chatroom-button': 'getAndRenderConfigurationForm',
'click .show-room-details-modal': 'showRoomDetailsModal',
'click .hide-occupants': 'hideOccupants', 'click .hide-occupants': 'hideOccupants',
'click .new-msgs-indicator': 'viewUnreadMessages', 'click .new-msgs-indicator': 'viewUnreadMessages',
'click .occupant-nick': 'onOccupantClicked', 'click .occupant-nick': 'onOccupantClicked',
...@@ -595,6 +618,14 @@ ...@@ -595,6 +618,14 @@
return this; return this;
}, },
showRoomDetailsModal (ev) {
ev.preventDefault();
if (_.isUndefined(this.model.room_details_modal)) {
this.model.room_details_modal = new _converse.RoomDetailsModal({'model': this.model});
}
this.model.room_details_modal.show(ev);
},
showChatStateNotification (message) { showChatStateNotification (message) {
if (message.get('sender') === 'me') { if (message.get('sender') === 'me') {
return; return;
...@@ -632,10 +663,11 @@ ...@@ -632,10 +663,11 @@
*/ */
return tpl_chatroom_head( return tpl_chatroom_head(
_.extend(this.model.toJSON(), { _.extend(this.model.toJSON(), {
Strophe: Strophe, 'Strophe': Strophe,
info_close: __('Close and leave this room'), 'info_close': __('Close and leave this room'),
info_configure: __('Configure this room'), 'info_configure': __('Configure this room'),
description: this.model.get('description') || '' 'info_details': __('Show more details about this room'),
'description': this.model.get('description') || ''
})); }));
}, },
...@@ -1035,7 +1067,8 @@ ...@@ -1035,7 +1067,8 @@
this.closeForm(); this.closeForm();
}); });
form_el.addEventListener('submit', (ev) => { form_el.addEventListener('submit',
(ev) => {
ev.preventDefault(); ev.preventDefault();
this.model.saveConfiguration(ev.target).then( this.model.saveConfiguration(ev.target).then(
this.model.getRoomFeatures.bind(this.model) this.model.getRoomFeatures.bind(this.model)
...@@ -1547,16 +1580,13 @@ ...@@ -1547,16 +1580,13 @@
_converse.RoomsPanel = Backbone.NativeView.extend({ _converse.RoomsPanel = Backbone.NativeView.extend({
/* Backbone.NativeView which renders MUC section of the control box. /* Backbone.NativeView which renders MUC section of the control box.
*
* Chat rooms can be listed, joined and new rooms can be created.
*/ */
tagName: 'div', tagName: 'div',
className: 'controlbox-section', className: 'controlbox-section',
id: 'chatrooms', id: 'chatrooms',
events: { events: {
'click a.chatbox-btn.show-add-muc-modal': 'showAddRoomModal', 'click a.chatbox-btn.show-add-muc-modal': 'showAddRoomModal',
'click a.chatbox-btn.show-list-muc-modal': 'showListRoomsModal', 'click a.chatbox-btn.show-list-muc-modal': 'showListRoomsModal'
'click a.room-info': 'toggleRoomInfo'
}, },
render () { render () {
...@@ -1568,11 +1598,6 @@ ...@@ -1568,11 +1598,6 @@
return this; return this;
}, },
toggleRoomInfo (ev) {
ev.preventDefault();
toggleRoomInfo(ev);
},
showAddRoomModal (ev) { showAddRoomModal (ev) {
if (_.isUndefined(this.add_room_modal)) { if (_.isUndefined(this.add_room_modal)) {
this.add_room_modal = new _converse.AddChatRoomModal({'model': this.model}); this.add_room_modal = new _converse.AddChatRoomModal({'model': this.model});
...@@ -1703,34 +1728,8 @@ ...@@ -1703,34 +1728,8 @@
el.innerHTML = tpl_chatroom_features( el.innerHTML = tpl_chatroom_features(
_.extend(this.chatroomview.model.toJSON(), { _.extend(this.chatroomview.model.toJSON(), {
'has_features': _.reduce(_.values(picks), iteratee), '__': __,
'label_features': __('Features'), 'has_features': _.reduce(_.values(picks), iteratee)
'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')
})); }));
this.setOccupantsHeight(); this.setOccupantsHeight();
return this; return this;
......
...@@ -246,6 +246,10 @@ ...@@ -246,6 +246,10 @@
this.handlers[type][name] = callback; this.handlers[type][name] = callback;
}, },
getDisplayName () {
return this.get('name') || this.get('jid');
},
join (nick, password) { join (nick, password) {
/* Join the chat room. /* Join the chat room.
* *
...@@ -430,7 +434,7 @@ ...@@ -430,7 +434,7 @@
* <feature var='urn:xmpp:mam:0'/> * <feature var='urn:xmpp:mam:0'/>
*/ */
const features = { const features = {
'features_fetched': true, 'features_fetched': moment().format(),
'name': iq.querySelector('identity').getAttribute('name') 'name': iq.querySelector('identity').getAttribute('name')
} }
_.each(iq.querySelectorAll('feature'), function (field) { _.each(iq.querySelectorAll('feature'), function (field) {
......
...@@ -45,6 +45,7 @@ ...@@ -45,6 +45,7 @@
_converse.OpenRooms = Backbone.Collection.extend({ _converse.OpenRooms = Backbone.Collection.extend({
comparator (room) { comparator (room) {
if (room.get('bookmarked')) { if (room.get('bookmarked')) {
const bookmark = _.head(_converse.bookmarksview.model.where({'jid': room.get('jid')})); const bookmark = _.head(_converse.bookmarksview.model.where({'jid': room.get('jid')}));
...@@ -97,6 +98,10 @@ ...@@ -97,6 +98,10 @@
}); });
_converse.RoomsListElementView = Backbone.VDOMView.extend({ _converse.RoomsListElementView = Backbone.VDOMView.extend({
events: {
'click a.room-info': 'showRoomDetailsModal'
},
initialize () { initialize () {
this.model.on('destroy', this.remove, this); this.model.on('destroy', this.remove, this);
this.model.on('remove', this.remove, this); this.model.on('remove', this.remove, this);
...@@ -106,15 +111,6 @@ ...@@ -106,15 +111,6 @@
this.model.on('change:num_unread_general', this.render, this); this.model.on('change:num_unread_general', this.render, this);
}, },
getRoomsListElementName () {
if (this.model.get('bookmarked') && _converse.bookmarksview) {
const bookmark = _.head(_converse.bookmarksview.model.where({'jid': this.model.get('jid')}));
return bookmark.get('name');
} else {
return this.model.get('name');
}
},
toHTML () { toHTML () {
return tpl_rooms_list_item( return tpl_rooms_list_item(
_.extend(this.model.toJSON(), { _.extend(this.model.toJSON(), {
...@@ -130,9 +126,28 @@ ...@@ -130,9 +126,28 @@
'name': this.getRoomsListElementName(), 'name': this.getRoomsListElementName(),
'open_title': __('Click to open this room') 'open_title': __('Click to open this room')
})); }));
},
showRoomDetailsModal (ev) {
const room = _converse.chatboxes.get(this.model.get('jid'));
ev.preventDefault();
if (_.isUndefined(room.room_details_modal)) {
room.room_details_modal = new _converse.RoomDetailsModal({'model': room});
}
room.room_details_modal.show(ev);
},
getRoomsListElementName () {
if (this.model.get('bookmarked') && _converse.bookmarksview) {
const bookmark = _.head(_converse.bookmarksview.model.where({'jid': this.model.get('jid')}));
return bookmark.get('name');
} else {
return this.model.get('name');
}
} }
}); });
_converse.RoomsListView = Backbone.OrderedListView.extend({ _converse.RoomsListView = Backbone.OrderedListView.extend({
tagName: 'div', tagName: 'div',
className: 'open-rooms-list list-container rooms-list-container', className: 'open-rooms-list list-container rooms-list-container',
......
<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) { ]} {[ if (o.has_features) { ]}
<p class="occupants-heading">{{{o.label_features}}}</p> <p class="occupants-heading">{{{o.__('Features')}}}</p>
{[ } ]} {[ } ]}
<ul class="features-list"> <ul class="features-list">
{[ if (o.passwordprotected) { ]} {[ if (o.passwordprotected) { ]}
<li class="feature" title="{{{ o.tt_passwordprotected }}}"><span class="fa fa-lock"></span>{{{ o.label_passwordprotected }}}</li> <li class="feature" title="{{{ o.__('This room requires a password before entry') }}}"><span class="fa fa-lock"></span>{{{ o.__('Password protected') }}}</li>
{[ } ]} {[ } ]}
{[ if (o.unsecured) { ]} {[ if (o.unsecured) { ]}
<li class="feature" title="{{{ o.tt_unsecured }}}"><span class="fa fa-unlock"></span>{{{ o.label_unsecured }}}</li> <li class="feature" title="{{{ o.__('This room does not require a password upon entry') }}}"><span class="fa fa-unlock"></span>{{{ o.__('No password') }}}</li>
{[ } ]} {[ } ]}
{[ if (o.hidden) { ]} {[ if (o.hidden) { ]}
<li class="feature" title="{{{ o.tt_hidden }}}"><span class="fa fa-eye-slash"></span>{{{ o.label_hidden }}}</li> <li class="feature" title="{{{ o.__('This room is not publicly searchable') }}}"><span class="fa fa-eye-slash"></span>{{{ o.__('Hidden') }}}</li>
{[ } ]} {[ } ]}
{[ if (o.public_room) { ]} {[ if (o.public_room) { ]}
<li class="feature" title="{{{ o.tt_public }}}"><span class="fa fa-eye"></span>{{{ o.label_public }}}</li> <li class="feature" title="{{{ o.__('This room is publicly searchable') }}}"><span class="fa fa-eye"></span>{{{ o.__('Public') }}}</li>
{[ } ]} {[ } ]}
{[ if (o.membersonly) { ]} {[ if (o.membersonly) { ]}
<li class="feature" title="{{{ o.tt_membersonly }}}"><span class="fa fa-address-book"></span>{{{ o.label_membersonly }}}</li> <li class="feature" title="{{{ o.__('this room is restricted to members only') }}}"><span class="fa fa-address-book"></span>{{{ o.__('Members only') }}}</li>
{[ } ]} {[ } ]}
{[ if (o.open) { ]} {[ if (o.open) { ]}
<li class="feature" title="{{{ o.tt_open }}}"><span class="fa fa-globe"></span>{{{ o.label_open }}}</li> <li class="feature" title="{{{ o.__('Anyone can join this room') }}}"><span class="fa fa-globe"></span>{{{ o.__('Open') }}}</li>
{[ } ]} {[ } ]}
{[ if (o.persistent) { ]} {[ if (o.persistent) { ]}
<li class="feature" title="{{{ o.tt_persistent }}}"><span class="fa fa-save"></span>{{{ o.label_persistent }}}</li> <li class="feature" title="{{{ o.__('This room persists even if it\'s unoccupied') }}}"><span class="fa fa-save"></span>{{{ o.__('Persistent') }}}</li>
{[ } ]} {[ } ]}
{[ if (o.temporary) { ]} {[ if (o.temporary) { ]}
<li class="feature" title="{{{ o.tt_temporary }}}"><span class="fa fa-snowflake-o"></span>{{{ o.label_temporary }}}</li> <li class="feature" title="{{{ o.__('This room will disappear once the last person leaves') }}}"><span class="fa fa-snowflake-o"></span>{{{ o.__('Temporary') }}}</li>
{[ } ]} {[ } ]}
{[ if (o.nonanonymous) { ]} {[ if (o.nonanonymous) { ]}
<li class="feature" title="{{{ o.tt_nonanonymous }}}"><span class="fa fa-id-card"></span>{{{ o.label_nonanonymous }}}</li> <li class="feature" title="{{{ o.__('All other room occupants can see your XMPP username') }}}"><span class="fa fa-id-card"></span>{{{ o.__('Not anonymous') }}}</li>
{[ } ]} {[ } ]}
{[ if (o.semianonymous) { ]} {[ if (o.semianonymous) { ]}
<li class="feature" title="{{{ o.tt_semianonymous }}}"><span class="fa fa-user-secret"></span>{{{ o.label_semianonymous }}}</li> <li class="feature" title="{{{ o.__('Only moderators can see your XMPP username') }}}"><span class="fa fa-user-secret"></span>{{{ o.__('Semi-anonymous') }}}</li>
{[ } ]} {[ } ]}
{[ if (o.moderated) { ]} {[ if (o.moderated) { ]}
<li class="feature" title="{{{ o.tt_moderated }}}"><span class="fa fa-gavel"></span>{{{ o.label_moderated }}}</li> <li class="feature" title="{{{ o.__('This room is being moderated') }}}"><span class="fa fa-gavel"></span>{{{ o.__('Moderated') }}}</li>
{[ } ]} {[ } ]}
{[ if (o.unmoderated) { ]} {[ if (o.unmoderated) { ]}
<li class="feature" title="{{{ o.tt_unmoderated }}}"><span class="fa fa-info-circle"></span>{{{ o.label_unmoderated }}}</li> <li class="feature" title="{{{ o.__('This room is not being moderated') }}}"><span class="fa fa-info-circle"></span>{{{ o.__('Not moderated') }}}</li>
{[ } ]} {[ } ]}
{[ if (o.mam_enabled) { ]} {[ if (o.mam_enabled) { ]}
<li class="feature" title="{{{ o.tt_mam_enabled }}}"><span class="fa fa-database"></span>{{{ o.label_mam_enabled }}}</li> <li class="feature" title="{{{ o.__('Messages are archived on the server') }}}"><span class="fa fa-database"></span>{{{ o.__('Message archiving') }}}</li>
{[ } ]} {[ } ]}
</ul> </ul>
...@@ -14,4 +14,5 @@ ...@@ -14,4 +14,5 @@
{[ if (o.affiliation == 'owner') { ]} {[ if (o.affiliation == 'owner') { ]}
<a class="chatbox-btn configure-chatroom-button fa fa-wrench" title="{{{o.info_configure}}} "></a> <a class="chatbox-btn configure-chatroom-button fa fa-wrench" title="{{{o.info_configure}}} "></a>
{[ } ]} {[ } ]}
<a class="chatbox-btn show-room-details-modal fa fa-info-circle" title="{{{o.info_details}}}"></a>
</div> </div>
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