Commit 6a790916 authored by JC Brand's avatar JC Brand

Only own messages should be editable.

Fixes #1139
parent acd9a186
...@@ -70234,6 +70234,12 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -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() { editLaterMessage() {
let message; let message;
let idx = this.model.messages.findLastIndex('correcting'); let idx = this.model.messages.findLastIndex('correcting');
...@@ -70243,9 +70249,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -70243,9 +70249,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
while (idx < this.model.messages.length - 1) { while (idx < this.model.messages.length - 1) {
idx += 1; idx += 1;
const candidate = this.model.messages.at(idx);
if (this.model.messages.at(idx).get('message')) { if (candidate.get('sender') === 'me' && candidate.get('message')) {
message = this.model.messages.at(idx); message = candidate;
break; break;
} }
} }
...@@ -70268,15 +70275,16 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -70268,15 +70275,16 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
while (idx > 0) { while (idx > 0) {
idx -= 1; idx -= 1;
const candidate = this.model.messages.at(idx);
if (this.model.messages.at(idx).get('message')) { if (candidate.get('sender') === 'me' && candidate.get('message')) {
message = this.model.messages.at(idx); message = candidate;
break; break;
} }
} }
} }
message = message || _.findLast(this.model.messages.models, msg => msg.get('message')); message = message || this.getOwnMessages().findLast(msg => msg.get('message'));
if (message) { if (message) {
this.insertIntoTextArea(message.get('message'), true); this.insertIntoTextArea(message.get('message'), true);
...@@ -1720,7 +1720,7 @@ ...@@ -1720,7 +1720,7 @@
'<img class="chat-image img-thumbnail" src="http://localhost:8000/logo/conversejs-filled.svg">'+ '<img class="chat-image img-thumbnail" src="http://localhost:8000/logo/conversejs-filled.svg">'+
'</a>'); '</a>');
done(); done();
}); }).catch(_.partial(console.error, _));
})); }));
}); });
}); });
...@@ -1801,7 +1801,7 @@ ...@@ -1801,7 +1801,7 @@
expect(older_msgs[0].textContent).toBe('But soft, what light through yonder airlock breaks?'); 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?'); expect(older_msgs[1].textContent).toBe('But soft, what light through yonder chimney breaks?');
done(); done();
}); }).catch(_.partial(console.error, _));
})); }));
it("can be sent as a correction", it("can be sent as a correction",
...@@ -1812,9 +1812,9 @@ ...@@ -1812,9 +1812,9 @@
let msg_id, view; let msg_id, view;
test_utils.openAndEnterChatRoom(_converse, 'lounge', 'localhost', 'dummy') test_utils.openAndEnterChatRoom(_converse, 'lounge', 'localhost', 'dummy')
.then(() => { .then(() => {
const jid = 'lounge@localhost'; const room_jid = 'lounge@localhost';
const room = _converse.api.rooms.get(jid); const room = _converse.api.rooms.get(room_jid);
view = _converse.chatboxviews.get(jid); view = _converse.chatboxviews.get(room_jid);
const textarea = view.el.querySelector('textarea.chat-textarea'); const textarea = view.el.querySelector('textarea.chat-textarea');
expect(textarea.value).toBe(''); expect(textarea.value).toBe('');
...@@ -1874,6 +1874,15 @@ ...@@ -1874,6 +1874,15 @@
expect(view.el.querySelectorAll('.chat-msg').length).toBe(1); expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
expect(u.hasClass('correcting', view.el.querySelector('.chat-msg'))).toBe(false); 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 // Test that pressing the down arrow cancels message correction
expect(textarea.value).toBe(''); expect(textarea.value).toBe('');
view.keyPressed({ view.keyPressed({
...@@ -1882,7 +1891,7 @@ ...@@ -1882,7 +1891,7 @@
}); });
expect(textarea.value).toBe('But soft, what light through yonder window breaks?'); expect(textarea.value).toBe('But soft, what light through yonder window breaks?');
expect(view.model.messages.at(0).get('correcting')).toBe(true); 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(u.hasClass('correcting', view.el.querySelector('.chat-msg'))).toBe(true);
expect(textarea.value).toBe('But soft, what light through yonder window breaks?'); expect(textarea.value).toBe('But soft, what light through yonder window breaks?');
view.keyPressed({ view.keyPressed({
...@@ -1891,10 +1900,10 @@ ...@@ -1891,10 +1900,10 @@
}); });
expect(textarea.value).toBe(''); expect(textarea.value).toBe('');
expect(view.model.messages.at(0).get('correcting')).toBe(false); 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); expect(u.hasClass('correcting', view.el.querySelector('.chat-msg'))).toBe(false);
done(); done();
}); }).catch(_.partial(console.error, _));
})); }));
}); });
})); }));
...@@ -927,6 +927,10 @@ ...@@ -927,6 +927,10 @@
} }
}, },
getOwnMessages () {
return f(this.model.messages.filter({'sender': 'me'}));
},
editLaterMessage () { editLaterMessage () {
let message; let message;
let idx = this.model.messages.findLastIndex('correcting'); let idx = this.model.messages.findLastIndex('correcting');
...@@ -934,8 +938,9 @@ ...@@ -934,8 +938,9 @@
this.model.messages.at(idx).save('correcting', false); this.model.messages.at(idx).save('correcting', false);
while (idx < this.model.messages.length-1) { while (idx < this.model.messages.length-1) {
idx += 1; idx += 1;
if (this.model.messages.at(idx).get('message')) { const candidate = this.model.messages.at(idx);
message = this.model.messages.at(idx); if (candidate.get('sender') === 'me' && candidate.get('message')) {
message = candidate;
break; break;
} }
} }
...@@ -955,13 +960,14 @@ ...@@ -955,13 +960,14 @@
this.model.messages.at(idx).save('correcting', false); this.model.messages.at(idx).save('correcting', false);
while (idx > 0) { while (idx > 0) {
idx -= 1; idx -= 1;
if (this.model.messages.at(idx).get('message')) { const candidate = this.model.messages.at(idx);
message = this.model.messages.at(idx); if (candidate.get('sender') === 'me' && candidate.get('message')) {
message = candidate;
break; break;
} }
} }
} }
message = message || _.findLast(this.model.messages.models, (msg) => msg.get('message')); message = message || this.getOwnMessages().findLast((msg) => msg.get('message'));
if (message) { if (message) {
this.insertIntoTextArea(message.get('message'), true); this.insertIntoTextArea(message.get('message'), true);
message.save('correcting', true); message.save('correcting', true);
......
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