浏览代码

Don't mark /me messages are followup messages.

JC Brand 7 年之前
父节点
当前提交
7eb6b13f10
共有 5 个文件被更改,包括 50 次插入23 次删除
  1. 6 2
      css/converse.css
  2. 6 2
      css/inverse.css
  3. 4 0
      sass/_messages.scss
  4. 22 4
      spec/chatbox.js
  5. 12 15
      src/converse-chatview.js

+ 6 - 2
css/converse.css

@@ -8433,8 +8433,12 @@ body.reset {
     #conversejs .message.chat-msg .chat-msg-heading .chat-msg-time {
       padding-left: 0.25em;
       color: #9d9d9d; }
-  #conversejs .message.chat-msg.chat-action .chat-msg-heading {
-    margin-top: 0; }
+  #conversejs .message.chat-msg.chat-action {
+    display: block; }
+    #conversejs .message.chat-msg.chat-action .chat-msg-heading {
+      float: left;
+      margin-top: 0;
+      padding-bottom: 0; }
   #conversejs .message.chat-msg.chat-msg-followup .chat-msg-heading,
   #conversejs .message.chat-msg.chat-msg-followup .avatar {
     display: none; }

+ 6 - 2
css/inverse.css

@@ -8621,8 +8621,12 @@ body {
     #conversejs .message.chat-msg .chat-msg-heading .chat-msg-time {
       padding-left: 0.25em;
       color: #9d9d9d; }
-  #conversejs .message.chat-msg.chat-action .chat-msg-heading {
-    margin-top: 0; }
+  #conversejs .message.chat-msg.chat-action {
+    display: block; }
+    #conversejs .message.chat-msg.chat-action .chat-msg-heading {
+      float: left;
+      margin-top: 0;
+      padding-bottom: 0; }
   #conversejs .message.chat-msg.chat-msg-followup .chat-msg-heading,
   #conversejs .message.chat-msg.chat-msg-followup .avatar {
     display: none; }

+ 4 - 0
sass/_messages.scss

@@ -144,8 +144,12 @@
                 }
             }
             &.chat-action {
+                display: block;
+
                 .chat-msg-heading {
+                    float: left;
                     margin-top: 0;
+                    padding-bottom: 0;
                 }
             }
             &.chat-msg-followup {

+ 22 - 4
spec/chatbox.js

@@ -58,11 +58,8 @@
                 var view;
                 test_utils.createContacts(_converse, 'current');
                 test_utils.waitUntilDiscoConfirmed(_converse, 'localhost', [], ['vcard-temp'])
+                .then(() => test_utils.waitUntil(() => _converse.xmppstatus.get('fullname')), 300)
                 .then(function () {
-                    return test_utils.waitUntil(function () {
-                        return _converse.xmppstatus.get('fullname');
-                    }, 300);
-                }).then(function () {
                     test_utils.openControlBox();
                     expect(_converse.chatboxes.length).toEqual(1);
                     var sender_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@localhost';
@@ -81,14 +78,35 @@
                     test_utils.waitUntil(function () {
                         return u.isVisible(view.el);
                     }).then(function () {
+                        expect(view.el.querySelectorAll('.chat-action').length).toBe(1);
                         expect(_.includes(view.el.querySelector('.chat-msg-author').textContent, '**Max Frankfurter')).toBeTruthy();
                         expect($(view.el).find('.chat-msg-text').text()).toBe(' is tired');
 
                         message = '/me is as well';
                         test_utils.sendMessage(view, message);
+                        expect(view.el.querySelectorAll('.chat-action').length).toBe(2);
                         expect(_.includes($(view.el).find('.chat-msg-author:last').text(), '**Max Mustermann')).toBeTruthy();
                         expect($(view.el).find('.chat-msg-text:last').text()).toBe(' is as well');
                         expect($(view.el).find('.chat-msg:last').hasClass('chat-msg-followup')).toBe(false);
+
+                        // Check that /me messages after a normal message don't
+                        // get the 'chat-msg-followup' class.
+                        message = 'This a normal message';
+                        test_utils.sendMessage(view, message);
+                        let message_el = view.el.querySelector('.message:last-child');
+                        expect(u.hasClass('chat-msg-followup', message_el)).toBeFalsy();
+
+                        message = '/me wrote a 3rd person message';
+                        test_utils.sendMessage(view, message);
+                        message_el = view.el.querySelector('.message:last-child');
+                        expect(view.el.querySelectorAll('.chat-action').length).toBe(3);
+                        expect($(view.el).find('.chat-msg-text:last').text()).toBe(' wrote a 3rd person message');
+                        expect($(view.el).find('.chat-msg-author:last').is(':visible')).toBeTruthy();
+                        expect(u.hasClass('chat-msg-followup', message_el)).toBeFalsy();
+
+
+                        message = 'This a normal message';
+
                         done();
                     });
                 });

+ 12 - 15
src/converse-chatview.js

@@ -683,25 +683,22 @@
                      */
                     const from = el.getAttribute('data-from'),
                           previous_el = el.previousElementSibling,
-                          date = moment(el.getAttribute('data-isodate'));
-
-                    if (previous_el.getAttribute('data-from') === from &&
-                        date.isBefore(moment(previous_el.getAttribute('data-isodate')).add(10, 'minutes'))) {
+                          date = moment(el.getAttribute('data-isodate')),
+                          next_el = el.nextElementSibling;
 
+                    if (!u.hasClass('chat-action', el) && !u.hasClass('chat-action', previous_el) &&
+                            previous_el.getAttribute('data-from') === from &&
+                            date.isBefore(moment(previous_el.getAttribute('data-isodate')).add(10, 'minutes'))) {
                         u.addClass('chat-msg-followup', el);
                     }
-                    const next_el = el.nextElementSibling;
-                    if (!next_el) {
-                        return;
-                    }
-                    if (next_el.getAttribute('data-from') !== from) {
-                        u.removeClass('chat-msg-followup', next_el);
+                    if (!next_el) { return; }
+
+                    if (!u.hasClass('chat-action', 'el') &&
+                            next_el.getAttribute('data-from') === from &&
+                            moment(next_el.getAttribute('data-isodate')).isBefore(date.add(10, 'minutes'))) {
+                        u.addClass('chat-msg-followup', next_el);
                     } else {
-                        if (moment(next_el.getAttribute('data-isodate')).isBefore(date.add(10, 'minutes'))) {
-                            u.addClass('chat-msg-followup', next_el);
-                        } else {
-                            u.removeClass('chat-msg-followup', next_el);
-                        }
+                        u.removeClass('chat-msg-followup', next_el);
                     }
                 },