diff --git a/dist/converse.js b/dist/converse.js index c0971df6a..1e4948310 100644 --- a/dist/converse.js +++ b/dist/converse.js @@ -70234,6 +70234,12 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ } }, + getOwnMessages() { + return f(this.model.messages.filter({ + 'sender': 'me' + })); + }, + editLaterMessage() { let message; let idx = this.model.messages.findLastIndex('correcting'); @@ -70243,9 +70249,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ while (idx < this.model.messages.length - 1) { idx += 1; + const candidate = this.model.messages.at(idx); - if (this.model.messages.at(idx).get('message')) { - message = this.model.messages.at(idx); + if (candidate.get('sender') === 'me' && candidate.get('message')) { + message = candidate; break; } } @@ -70268,15 +70275,16 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ while (idx > 0) { idx -= 1; + const candidate = this.model.messages.at(idx); - if (this.model.messages.at(idx).get('message')) { - message = this.model.messages.at(idx); + if (candidate.get('sender') === 'me' && candidate.get('message')) { + message = candidate; break; } } } - message = message || _.findLast(this.model.messages.models, msg => msg.get('message')); + message = message || this.getOwnMessages().findLast(msg => msg.get('message')); if (message) { this.insertIntoTextArea(message.get('message'), true); diff --git a/spec/messages.js b/spec/messages.js index 1324f213a..300ddf628 100644 --- a/spec/messages.js +++ b/spec/messages.js @@ -1720,7 +1720,7 @@ ''+ ''); done(); - }); + }).catch(_.partial(console.error, _)); })); }); }); @@ -1801,7 +1801,7 @@ expect(older_msgs[0].textContent).toBe('But soft, what light through yonder airlock breaks?'); expect(older_msgs[1].textContent).toBe('But soft, what light through yonder chimney breaks?'); done(); - }); + }).catch(_.partial(console.error, _)); })); it("can be sent as a correction", @@ -1812,9 +1812,9 @@ let msg_id, view; test_utils.openAndEnterChatRoom(_converse, 'lounge', 'localhost', 'dummy') .then(() => { - const jid = 'lounge@localhost'; - const room = _converse.api.rooms.get(jid); - view = _converse.chatboxviews.get(jid); + const room_jid = 'lounge@localhost'; + const room = _converse.api.rooms.get(room_jid); + view = _converse.chatboxviews.get(room_jid); const textarea = view.el.querySelector('textarea.chat-textarea'); expect(textarea.value).toBe(''); @@ -1874,6 +1874,15 @@ expect(view.el.querySelectorAll('.chat-msg').length).toBe(1); expect(u.hasClass('correcting', view.el.querySelector('.chat-msg'))).toBe(false); + // Check that messages from other users are skipped + view.model.onMessage($msg({ + 'from': room_jid+'/someone-else', + 'id': (new Date()).getTime(), + 'to': 'dummy@localhost', + 'type': 'groupchat' + }).c('body').t('Hello world').tree()); + expect(view.el.querySelectorAll('.chat-msg').length).toBe(2); + // Test that pressing the down arrow cancels message correction expect(textarea.value).toBe(''); view.keyPressed({ @@ -1882,7 +1891,7 @@ }); expect(textarea.value).toBe('But soft, what light through yonder window breaks?'); expect(view.model.messages.at(0).get('correcting')).toBe(true); - expect(view.el.querySelectorAll('.chat-msg').length).toBe(1); + expect(view.el.querySelectorAll('.chat-msg').length).toBe(2); expect(u.hasClass('correcting', view.el.querySelector('.chat-msg'))).toBe(true); expect(textarea.value).toBe('But soft, what light through yonder window breaks?'); view.keyPressed({ @@ -1891,10 +1900,10 @@ }); expect(textarea.value).toBe(''); expect(view.model.messages.at(0).get('correcting')).toBe(false); - expect(view.el.querySelectorAll('.chat-msg').length).toBe(1); + expect(view.el.querySelectorAll('.chat-msg').length).toBe(2); expect(u.hasClass('correcting', view.el.querySelector('.chat-msg'))).toBe(false); done(); - }); + }).catch(_.partial(console.error, _)); })); }); })); diff --git a/src/converse-chatview.js b/src/converse-chatview.js index 7bd2e6e96..b99fded36 100644 --- a/src/converse-chatview.js +++ b/src/converse-chatview.js @@ -927,6 +927,10 @@ } }, + getOwnMessages () { + return f(this.model.messages.filter({'sender': 'me'})); + }, + editLaterMessage () { let message; let idx = this.model.messages.findLastIndex('correcting'); @@ -934,8 +938,9 @@ this.model.messages.at(idx).save('correcting', false); while (idx < this.model.messages.length-1) { idx += 1; - if (this.model.messages.at(idx).get('message')) { - message = this.model.messages.at(idx); + const candidate = this.model.messages.at(idx); + if (candidate.get('sender') === 'me' && candidate.get('message')) { + message = candidate; break; } } @@ -955,13 +960,14 @@ this.model.messages.at(idx).save('correcting', false); while (idx > 0) { idx -= 1; - if (this.model.messages.at(idx).get('message')) { - message = this.model.messages.at(idx); + const candidate = this.model.messages.at(idx); + if (candidate.get('sender') === 'me' && candidate.get('message')) { + message = candidate; break; } } } - message = message || _.findLast(this.model.messages.models, (msg) => msg.get('message')); + message = message || this.getOwnMessages().findLast((msg) => msg.get('message')); if (message) { this.insertIntoTextArea(message.get('message'), true); message.save('correcting', true);