Skip to content

Commit da1f103

Browse files
committed
Bugfix. Don't include .chat-events, to avoid null reference
1 parent 2c7a942 commit da1f103

File tree

2 files changed

+53
-15
lines changed

2 files changed

+53
-15
lines changed

spec/chatbox.js

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -643,7 +643,7 @@
643643
.then(function () {
644644
expect(_converse.api.vcard.get).toHaveBeenCalled();
645645
return test_utils.waitUntil(function () {
646-
return chatbox.get('fullname') === mock.cur_names[0];
646+
return chatbox.get('fullname') === mock.cur_names[0];
647647
}, 100);
648648
}).then(function () {
649649
done();
@@ -972,7 +972,7 @@
972972
'to': _converse.bare_jid,
973973
'from': sender_jid,
974974
'type': 'chat'})
975-
.c('body').t("message from today")
975+
.c('body').t("message")
976976
.tree();
977977
_converse.chatboxes.onMessage(msg);
978978

@@ -996,7 +996,7 @@
996996
'to': _converse.bare_jid,
997997
'from': sender_jid,
998998
'type': 'chat'})
999-
.c('body').t("Inbetween message")
999+
.c('body').t("Inbetween message").up()
10001000
.tree();
10011001
_converse.chatboxes.onMessage(msg);
10021002

@@ -1020,7 +1020,7 @@
10201020
'to': _converse.bare_jid,
10211021
'from': sender_jid,
10221022
'type': 'chat'})
1023-
.c('body').t("An earlier message today")
1023+
.c('body').t("An earlier message on the next day")
10241024
.tree();
10251025
_converse.chatboxes.onMessage(msg);
10261026

@@ -1032,16 +1032,40 @@
10321032
'to': _converse.bare_jid,
10331033
'from': sender_jid,
10341034
'type': 'chat'})
1035-
.c('body').t("newer message from today")
1035+
.c('body').t("newer message from the next day")
10361036
.tree();
10371037
_converse.chatboxes.onMessage(msg);
10381038

1039+
// Insert <composing> message, to also check that
1040+
// text messages are inserted correctly with
1041+
// temporary chat events in the chat contents.
1042+
msg = $msg({
1043+
'id': 'aeb219',
1044+
'to': _converse.bare_jid,
1045+
'xmlns': 'jabber:client',
1046+
'from': sender_jid,
1047+
'type': 'chat'})
1048+
.c('composing', {'xmlns': Strophe.NS.CHATSTATES}).up()
1049+
.tree();
1050+
_converse.chatboxes.onMessage(msg);
1051+
1052+
msg = $msg({
1053+
'id': 'aeb220',
1054+
'to': _converse.bare_jid,
1055+
'xmlns': 'jabber:client',
1056+
'from': sender_jid,
1057+
'type': 'chat'})
1058+
.c('composing', {'xmlns': Strophe.NS.CHATSTATES}).up()
1059+
.c('body').t("latest message")
1060+
.tree();
1061+
_converse.chatboxes.onMessage(msg);
1062+
10391063
var chatboxview = _converse.chatboxviews.get(sender_jid);
10401064
var $chat_content = $(chatboxview.el).find('.chat-content');
10411065
chatboxview.clearSpinner(); //cleanup
10421066

10431067
var $time = $chat_content.find('time');
1044-
expect($time.length).toEqual(3);
1068+
expect($time.length).toEqual(4);
10451069
$time = $chat_content.find('time:first');
10461070
expect($time.data('isodate')).toEqual('2017-12-31T00:00:00+00:00');
10471071

@@ -1058,15 +1082,19 @@
10581082
$el = $chat_content.find('.chat-message:eq(2)');
10591083
expect($el.find('.chat-msg-content').text()).toEqual('another inbetween message');
10601084

1061-
$time = $chat_content.find('time:last');
1085+
$time = $chat_content.find('time:nth(2)');
10621086
expect($time.data('isodate')).toEqual('2018-01-02T00:00:00+00:00');
1063-
expect($time[0].nextElementSibling.querySelector('.chat-msg-content').textContent).toBe('An earlier message today');
1087+
expect($time[0].nextElementSibling.querySelector('.chat-msg-content').textContent).toBe('An earlier message on the next day');
10641088
$el = $chat_content.find('.chat-message:eq(3)');
1065-
expect($el.find('.chat-msg-content').text()).toEqual('An earlier message today');
1089+
expect($el.find('.chat-msg-content').text()).toEqual('An earlier message on the next day');
10661090

10671091
$el = $chat_content.find('.chat-message:eq(4)');
1068-
expect($el.find('.chat-msg-content').text()).toEqual('message from today');
1069-
expect($el[0].nextElementSibling.querySelector('.chat-msg-content').textContent).toEqual('newer message from today');
1092+
expect($el.find('.chat-msg-content').text()).toEqual('message');
1093+
expect($el[0].nextElementSibling.querySelector('.chat-msg-content').textContent).toEqual('newer message from the next day');
1094+
1095+
$time = $chat_content.find('time:last');
1096+
expect($time.data('isodate')).toEqual(moment().startOf('day').format());
1097+
expect($time[0].nextElementSibling.querySelector('.chat-msg-content').textContent).toBe('latest message');
10701098
done();
10711099
});
10721100
}));

src/converse-chatview.js

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -468,8 +468,14 @@
468468
if (_.isNull(most_recent_date) || moment(most_recent_date).isBefore(cutoff)) {
469469
return most_recent_date;
470470
}
471+
/* XXX: Besides .chat-message and .chat-date elements, there are also
472+
* .chat-event elements. These are however temporary and
473+
* removed once a new element is inserted into the chat
474+
* area, so we don't query for them here, otherwise we get
475+
* a null reference later upon element insertion.
476+
*/
471477
const msg_dates = _.invokeMap(
472-
sizzle('.message, .chat-info', this.content),
478+
sizzle('.chat-message, .chat-date', this.content),
473479
Element.prototype.getAttribute, 'data-isodate'
474480
)
475481
if (_.isObject(cutoff)) {
@@ -621,6 +627,7 @@
621627
} else if (message.get('chat_state') === _converse.GONE) {
622628
this.showStatusNotification(message.get('fullname')+' '+__('has gone away'));
623629
}
630+
return message;
624631
},
625632

626633
shouldShowOnTextMessage () {
@@ -674,10 +681,13 @@
674681
}
675682
if (message.get('type') === 'error') {
676683
this.handleErrorMessage(message);
677-
} else if (!message.get('message')) {
678-
this.handleChatStateMessage(message);
679684
} else {
680-
this.handleTextMessage(message);
685+
if (message.get('chat_state')) {
686+
this.handleChatStateMessage(message);
687+
}
688+
if (message.get('message')) {
689+
this.handleTextMessage(message);
690+
}
681691
}
682692
_converse.emit('messageAdded', {
683693
'message': message,

0 commit comments

Comments
 (0)