소스 검색

Only own messages should be editable.

Fixes #1139
JC Brand 7 년 전
부모
커밋
6a790916d3
3개의 변경된 파일41개의 추가작업 그리고 18개의 파일을 삭제
  1. 13 5
      dist/converse.js
  2. 17 8
      spec/messages.js
  3. 11 5
      src/converse-chatview.js

+ 13 - 5
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);

+ 17 - 8
spec/messages.js

@@ -1720,7 +1720,7 @@
                             '<img class="chat-image img-thumbnail" src="http://localhost:8000/logo/conversejs-filled.svg">'+
                         '</a>');
                     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, _));
         }));
     });
 }));

+ 11 - 5
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);