Fixes #1064 /topic without argument sets topic to "undefined"
This commit is contained in:
parent
572cc49498
commit
27378068c0
33
dist/converse.js
vendored
33
dist/converse.js
vendored
@ -68757,7 +68757,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|||||||
type: "groupchat"
|
type: "groupchat"
|
||||||
}).c("subject", {
|
}).c("subject", {
|
||||||
xmlns: "jabber:client"
|
xmlns: "jabber:client"
|
||||||
}).t(match[2]).tree());
|
}).t(match[2] || "").tree());
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -69428,19 +69428,25 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|||||||
// For translators: the %1$s and %2$s parts will get
|
// For translators: the %1$s and %2$s parts will get
|
||||||
// replaced by the user and topic text respectively
|
// replaced by the user and topic text respectively
|
||||||
// Example: Topic set by JC Brand to: Hello World!
|
// Example: Topic set by JC Brand to: Hello World!
|
||||||
const subject = this.model.get('subject');
|
const subject = this.model.get('subject'),
|
||||||
|
message = subject.text ? __('Topic set by %1$s', subject.author) : __('Topic cleared by %1$s', subject.author),
|
||||||
|
date = moment().format();
|
||||||
this.content.insertAdjacentHTML('beforeend', tpl_info({
|
this.content.insertAdjacentHTML('beforeend', tpl_info({
|
||||||
'data': '',
|
'data': '',
|
||||||
'isodate': moment().format(),
|
'isodate': date,
|
||||||
'extra_classes': 'chat-event',
|
'extra_classes': 'chat-event',
|
||||||
'message': __('Topic set by %1$s', subject.author)
|
'message': message
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
if (subject.text) {
|
||||||
this.content.insertAdjacentHTML('beforeend', tpl_info({
|
this.content.insertAdjacentHTML('beforeend', tpl_info({
|
||||||
'data': '',
|
'data': '',
|
||||||
'isodate': moment().format(),
|
'isodate': date,
|
||||||
'extra_classes': 'chat-topic',
|
'extra_classes': 'chat-topic',
|
||||||
'message': subject.text
|
'message': subject.text
|
||||||
}));
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
this.scrollDown();
|
this.scrollDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70893,9 +70899,14 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|||||||
sender = resource && Strophe.unescapeNode(resource) || '';
|
sender = resource && Strophe.unescapeNode(resource) || '';
|
||||||
|
|
||||||
if (!this.handleMessageCorrection(stanza)) {
|
if (!this.handleMessageCorrection(stanza)) {
|
||||||
const subject = _.propertyOf(stanza.querySelector('subject'))('textContent');
|
if (sender === '') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (subject) {
|
const subject_el = stanza.querySelector('subject');
|
||||||
|
|
||||||
|
if (subject_el) {
|
||||||
|
const subject = _.propertyOf(subject_el)('textContent') || '';
|
||||||
u.safeSave(this, {
|
u.safeSave(this, {
|
||||||
'subject': {
|
'subject': {
|
||||||
'author': sender,
|
'author': sender,
|
||||||
@ -70904,10 +70915,6 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sender === '') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.createMessage(stanza, original_stanza).then(msg => this.incrementUnreadMsgCounter(msg)).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
|
this.createMessage(stanza, original_stanza).then(msg => this.incrementUnreadMsgCounter(msg)).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78386,7 +78393,9 @@ __e( o.Strophe.getNodeFromJid(o.jid) ) +
|
|||||||
__e( o.Strophe.getDomainFromJid(o.jid) ) +
|
__e( o.Strophe.getDomainFromJid(o.jid) ) +
|
||||||
'\n ';
|
'\n ';
|
||||||
} ;
|
} ;
|
||||||
__p += '\n </div>\n <p class="chatroom-description">' +
|
__p += '\n </div>\n <p class="chatroom-description" title="' +
|
||||||
|
__e(o.description) +
|
||||||
|
'">' +
|
||||||
__e(o.description) +
|
__e(o.description) +
|
||||||
'<p/>\n</div>\n<div class="chatbox-buttons row no-gutters">\n <a class="chatbox-btn close-chatbox-button fa fa-sign-out-alt" title="' +
|
'<p/>\n</div>\n<div class="chatbox-buttons row no-gutters">\n <a class="chatbox-btn close-chatbox-button fa fa-sign-out-alt" title="' +
|
||||||
__e(o.info_close) +
|
__e(o.info_close) +
|
||||||
|
@ -770,54 +770,6 @@
|
|||||||
}).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL))
|
}).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL))
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it("shows its description in the chat heading",
|
|
||||||
mock.initConverseWithPromises(
|
|
||||||
null, ['rosterGroupsFetched', 'chatBoxesFetched'], {},
|
|
||||||
function (done, _converse) {
|
|
||||||
|
|
||||||
let sent_IQ, IQ_id, view;
|
|
||||||
const sendIQ = _converse.connection.sendIQ;
|
|
||||||
spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
|
|
||||||
sent_IQ = iq;
|
|
||||||
IQ_id = sendIQ.bind(this)(iq, callback, errback);
|
|
||||||
});
|
|
||||||
_converse.api.rooms.open('coven@chat.shakespeare.lit', {'nick': 'some1'})
|
|
||||||
.then(() => {
|
|
||||||
view = _converse.chatboxviews.get('coven@chat.shakespeare.lit');
|
|
||||||
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 participants'})
|
|
||||||
.c('value').t(0);
|
|
||||||
_converse.connection._dataRecv(test_utils.createRequest(features_stanza));
|
|
||||||
return test_utils.waitUntil(() => _.get(view.el.querySelector('.chatroom-description'), 'textContent'))
|
|
||||||
}).then(function () {
|
|
||||||
expect(view.el.querySelector('.chatroom-description').textContent).toBe('This is the description');
|
|
||||||
done();
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
|
|
||||||
it("supports the /me command",
|
it("supports the /me command",
|
||||||
mock.initConverseWithPromises(
|
mock.initConverseWithPromises(
|
||||||
@ -1600,7 +1552,7 @@
|
|||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it("shows received groupchat subject messages",
|
it("shows the room topic in the header",
|
||||||
mock.initConverseWithPromises(
|
mock.initConverseWithPromises(
|
||||||
null, ['rosterGroupsFetched'], {},
|
null, ['rosterGroupsFetched'], {},
|
||||||
function (done, _converse) {
|
function (done, _converse) {
|
||||||
@ -1618,6 +1570,7 @@
|
|||||||
var chat_content = view.el.querySelector('.chat-content');
|
var chat_content = view.el.querySelector('.chat-content');
|
||||||
expect($(chat_content).find('.chat-event:last').text()).toBe('Topic set by ralphm');
|
expect($(chat_content).find('.chat-event:last').text()).toBe('Topic set by ralphm');
|
||||||
expect($(chat_content).find('.chat-topic:last').text()).toBe(text);
|
expect($(chat_content).find('.chat-topic:last').text()).toBe(text);
|
||||||
|
expect(view.el.querySelector('.chatroom-description').textContent).toBe(text);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
@ -991,7 +991,7 @@
|
|||||||
to: this.model.get('jid'),
|
to: this.model.get('jid'),
|
||||||
from: _converse.connection.jid,
|
from: _converse.connection.jid,
|
||||||
type: "groupchat"
|
type: "groupchat"
|
||||||
}).c("subject", {xmlns: "jabber:client"}).t(match[2]).tree()
|
}).c("subject", {xmlns: "jabber:client"}).t(match[2] || "").tree()
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case 'voice':
|
case 'voice':
|
||||||
@ -1632,23 +1632,29 @@
|
|||||||
// For translators: the %1$s and %2$s parts will get
|
// For translators: the %1$s and %2$s parts will get
|
||||||
// replaced by the user and topic text respectively
|
// replaced by the user and topic text respectively
|
||||||
// Example: Topic set by JC Brand to: Hello World!
|
// Example: Topic set by JC Brand to: Hello World!
|
||||||
const subject = this.model.get('subject');
|
const subject = this.model.get('subject'),
|
||||||
|
message = subject.text ? __('Topic set by %1$s', subject.author) :
|
||||||
|
__('Topic cleared by %1$s', subject.author),
|
||||||
|
date = moment().format();
|
||||||
this.content.insertAdjacentHTML(
|
this.content.insertAdjacentHTML(
|
||||||
'beforeend',
|
'beforeend',
|
||||||
tpl_info({
|
tpl_info({
|
||||||
'data': '',
|
'data': '',
|
||||||
'isodate': moment().format(),
|
'isodate': date,
|
||||||
'extra_classes': 'chat-event',
|
'extra_classes': 'chat-event',
|
||||||
'message': __('Topic set by %1$s', subject.author)
|
'message': message
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
if (subject.text) {
|
||||||
this.content.insertAdjacentHTML(
|
this.content.insertAdjacentHTML(
|
||||||
'beforeend',
|
'beforeend',
|
||||||
tpl_info({
|
tpl_info({
|
||||||
'data': '',
|
'data': '',
|
||||||
'isodate': moment().format(),
|
'isodate': date,
|
||||||
'extra_classes': 'chat-topic',
|
'extra_classes': 'chat-topic',
|
||||||
'message': subject.text
|
'message': subject.text
|
||||||
}));
|
}));
|
||||||
|
}
|
||||||
this.scrollDown();
|
this.scrollDown();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -921,13 +921,14 @@
|
|||||||
sender = resource && Strophe.unescapeNode(resource) || '';
|
sender = resource && Strophe.unescapeNode(resource) || '';
|
||||||
|
|
||||||
if (!this.handleMessageCorrection(stanza)) {
|
if (!this.handleMessageCorrection(stanza)) {
|
||||||
const subject = _.propertyOf(stanza.querySelector('subject'))('textContent');
|
|
||||||
if (subject) {
|
|
||||||
u.safeSave(this, {'subject': {'author': sender, 'text': subject}});
|
|
||||||
}
|
|
||||||
if (sender === '') {
|
if (sender === '') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
const subject_el = stanza.querySelector('subject');
|
||||||
|
if (subject_el) {
|
||||||
|
const subject = _.propertyOf(subject_el)('textContent') || '';
|
||||||
|
u.safeSave(this, {'subject': {'author': sender, 'text': subject}});
|
||||||
|
}
|
||||||
this.createMessage(stanza, original_stanza)
|
this.createMessage(stanza, original_stanza)
|
||||||
.then(msg => this.incrementUnreadMsgCounter(msg))
|
.then(msg => this.incrementUnreadMsgCounter(msg))
|
||||||
.catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
|
.catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
{{{ o.Strophe.getNodeFromJid(o.jid) }}}@{{{ o.Strophe.getDomainFromJid(o.jid) }}}
|
{{{ o.Strophe.getNodeFromJid(o.jid) }}}@{{{ o.Strophe.getDomainFromJid(o.jid) }}}
|
||||||
{[ } ]}
|
{[ } ]}
|
||||||
</div>
|
</div>
|
||||||
<p class="chatroom-description">{{{ o.description }}}<p/>
|
<p class="chatroom-description" title="{{{o.description}}}">{{{o.description}}}<p/>
|
||||||
</div>
|
</div>
|
||||||
<div class="chatbox-buttons row no-gutters">
|
<div class="chatbox-buttons row no-gutters">
|
||||||
<a class="chatbox-btn close-chatbox-button fa fa-sign-out-alt" title="{{{o.info_close}}}"></a>
|
<a class="chatbox-btn close-chatbox-button fa fa-sign-out-alt" title="{{{o.info_close}}}"></a>
|
||||||
|
Loading…
Reference in New Issue
Block a user