Jelajahi Sumber

Don't mark info messages as followups

JC Brand 5 tahun lalu
induk
melakukan
3d4bad4b19
3 mengubah file dengan 37 tambahan dan 13 penghapusan
  1. 0 8
      sass/_messages.scss
  2. 31 0
      spec/muc_messages.js
  3. 6 5
      src/converse-chatview.js

+ 0 - 8
sass/_messages.scss

@@ -52,9 +52,6 @@
             font-size: 90%;
             padding: 0.17rem 1rem;
 
-            &.chat-msg--followup {
-                margin-left: 2.75rem;
-            }
             &.badge {
                 color: var(--chat-head-text-color);
             }
@@ -348,11 +345,6 @@
                 }
             }
         }
-        &.chat-info {
-            &.chat-msg--followup {
-                margin-left: 0;
-            }
-        }
     }
 }
 

+ 31 - 0
spec/muc_messages.js

@@ -11,6 +11,37 @@
 
     describe("A Groupchat Message", function () {
 
+        describe("an info message", function () {
+
+            it("is not rendered as a followup message",
+                mock.initConverse(
+                    ['rosterGroupsFetched', 'chatBoxesFetched'], {},
+                    async function (done, _converse) {
+
+                const muc_jid = 'lounge@montague.lit';
+                await test_utils.openAndEnterChatRoom(_converse, muc_jid, 'romeo');
+
+                const view = _converse.api.chatviews.get(muc_jid);
+                const presence = u.toStanza(`
+                    <presence xmlns="jabber:client" to="${_converse.jid}" from="${muc_jid}/romeo">
+                        <x xmlns="http://jabber.org/protocol/muc#user">
+                            <status code="201"/>
+                            <item role="moderator" affiliation="owner" jid="${_converse.jid}"/>
+                            <status code="110"/>
+                        </x>
+                    </presence>
+                `);
+                _converse.connection._dataRecv(test_utils.createRequest(presence));
+                await u.waitUntil(() => view.el.querySelectorAll('.chat-info').length === 2);
+
+                const messages = view.el.querySelectorAll('.chat-info');
+                expect(u.hasClass('chat-msg--followup', messages[0])).toBe(false);
+                expect(u.hasClass('chat-msg--followup', messages[1])).toBe(false);
+                done();
+            }));
+        });
+
+
         it("is rejected if it's an unencapsulated forwarded message",
             mock.initConverse(
                 ['rosterGroupsFetched', 'chatBoxesFetched'], {},

+ 6 - 5
src/converse-chatview.js

@@ -658,12 +658,13 @@ converse.plugins.add('converse-chatview', {
              * @param { HTMLElement } el - The message element
              */
             markFollowups (el) {
-                const from = el.getAttribute('data-from'),
-                      previous_el = el.previousElementSibling,
-                      date = dayjs(el.getAttribute('data-isodate')),
-                      next_el = el.nextElementSibling;
+                const from = el.getAttribute('data-from');
+                const previous_el = el.previousElementSibling;
+                const date = dayjs(el.getAttribute('data-isodate'));
+                const next_el = el.nextElementSibling;
 
                 if (!u.hasClass('chat-msg--action', el) && !u.hasClass('chat-msg--action', previous_el) &&
+                        !u.hasClass('chat-info', el) && !u.hasClass('chat-info', previous_el) &&
                         previous_el.getAttribute('data-from') === from &&
                         date.isBefore(dayjs(previous_el.getAttribute('data-isodate')).add(10, 'minutes')) &&
                         el.getAttribute('data-encrypted') === previous_el.getAttribute('data-encrypted')) {
@@ -671,7 +672,7 @@ converse.plugins.add('converse-chatview', {
                 }
                 if (!next_el) { return; }
 
-                if (!u.hasClass('chat-msg--action', el) &&
+                if (!u.hasClass('chat-msg--action', el) && u.hasClass('chat-info', el) &&
                         next_el.getAttribute('data-from') === from &&
                         dayjs(next_el.getAttribute('data-isodate')).isBefore(date.add(10, 'minutes')) &&
                         el.getAttribute('data-encrypted') === next_el.getAttribute('data-encrypted')) {