Răsfoiți Sursa

Fixes #1369

* Add test and changelog entry
* Also show message subject if available
JC Brand 6 ani în urmă
părinte
comite
d97deaea80
6 a modificat fișierele cu 37 adăugiri și 4 ștergeri
  1. 1 0
      CHANGES.md
  2. 3 0
      css/converse.css
  3. 6 0
      dist/converse.js
  4. 5 0
      sass/_messages.scss
  5. 19 4
      spec/muc.js
  6. 3 0
      src/templates/message.html

+ 1 - 0
CHANGES.md

@@ -3,6 +3,7 @@
 ## 4.1.1 (unreleased)
 
 - Accessibility: Tag the chat-content as an ARIA live region, for screen readers
+- #1369 Don't wrongly interpret message with `subject` as a topic change.
 - #1408 new config option `roomconfig_whitelist`
 - #1421 fix direct invite for membersonly room
 

+ 3 - 0
css/converse.css

@@ -11912,6 +11912,9 @@ body.converse-fullscreen {
     padding-right: 0.5em; }
   #conversejs .message.chat-msg.headline .chat-msg__body {
     margin-left: 0; }
+  #conversejs .message.chat-msg .chat-msg__subject {
+    font-weight: bold;
+    clear: right; }
   #conversejs .message.chat-msg .chat-msg__text {
     padding: 0;
     color: var(--message-text-color);

+ 6 - 0
dist/converse.js

@@ -93518,6 +93518,12 @@ __e(o.spoiler_hint) +
 __e(o.label_show) +
 '</a>\n                    </div>\n                ';
  } ;
+__p += '\n                ';
+ if (o.subject) { ;
+__p += '\n                    <div class="chat-msg__subject">' +
+__e( o.subject ) +
+'</div>\n                ';
+ } ;
 __p += '\n                <div class="chat-msg__text';
  if (o.is_spoiler) { ;
 __p += ' spoiler collapsed';

+ 5 - 0
sass/_messages.scss

@@ -149,6 +149,11 @@
                 }
             }
 
+            .chat-msg__subject {
+                font-weight: bold;
+                clear: right;
+            }
+
             .chat-msg__text {
                 padding: 0;
                 color: var(--message-text-color);

+ 19 - 4
spec/muc.js

@@ -12,7 +12,7 @@
           Backbone = converse.env.Backbone,
           u = converse.env.utils;
 
-    describe("Chatrooms", function () {
+    describe("Groupchats", function () {
 
         describe("The \"rooms\" API", function () {
 
@@ -1937,7 +1937,7 @@
 
                 await test_utils.openAndEnterChatRoom(_converse, 'jdev', 'conference.jabber.org', 'jc');
                 const text = 'Jabber/XMPP Development | RFCs and Extensions: http://xmpp.org/ | Protocol and XSF discussions: xsf@muc.xmpp.org';
-                const stanza = Strophe.xmlHtmlNode(
+                let stanza = Strophe.xmlHtmlNode(
                     '<message xmlns="jabber:client" to="jc@opkode.com/_converse.js-60429116" type="groupchat" from="jdev@conference.jabber.org/ralphm">'+
                     '    <subject>'+text+'</subject>'+
                     '    <delay xmlns="urn:xmpp:delay" stamp="2014-02-04T09:35:39Z" from="jdev@conference.jabber.org"/>'+
@@ -1945,11 +1945,26 @@
                     '</message>').firstChild;
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
                 const view = _converse.chatboxviews.get('jdev@conference.jabber.org');
-                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
-                const chat_content = view.el.querySelector('.chat-content');
+                await new Promise((resolve, reject) => view.model.once('change:subject', resolve));
+                let chat_content = view.el.querySelector('.chat-content');
                 expect(sizzle('.chat-event:last').pop().textContent).toBe('Topic set by ralphm');
                 expect(sizzle('.chat-topic:last').pop().textContent).toBe(text);
                 expect(view.el.querySelector('.chatroom-description').textContent).toBe(text);
+
+                stanza = Strophe.xmlHtmlNode(
+                    `<message xmlns="jabber:client" to="jc@opkode.com/_converse.js-60429116" type="groupchat" from="jdev@conference.jabber.org/ralphm">
+                         <subject>This is a message subject</subject>
+                         <body>This is a message</body>
+                     </message>`).firstChild;
+                _converse.connection._dataRecv(test_utils.createRequest(stanza));
+                await new Promise((resolve, reject) => view.once('messageInserted', resolve));
+                chat_content = view.el.querySelector('.chat-content');
+                expect(sizzle('.chat-topic').length).toBe(1);
+                expect(sizzle('.chat-msg__subject').length).toBe(1);
+                expect(sizzle('.chat-msg__subject').pop().textContent).toBe('This is a message subject');
+                expect(sizzle('.chat-msg__text').length).toBe(1);
+                expect(sizzle('.chat-msg__text').pop().textContent).toBe('This is a message');
+                expect(view.el.querySelector('.chatroom-description').textContent).toBe(text);
                 done();
             }));
 

+ 3 - 0
src/templates/message.html

@@ -23,6 +23,9 @@
                         <a class="badge badge-info spoiler-toggle" data-toggle-state="closed" href="#"><i class="fa fa-eye"></i>{{{o.label_show}}}</a>
                     </div>
                 {[ } ]}
+                {[ if (o.subject) { ]}
+                    <div class="chat-msg__subject">{{{ o.subject }}}</div>
+                {[ } ]}
                 <div class="chat-msg__text{[ if (o.is_spoiler) { ]} spoiler collapsed{[ } ]}"><!-- message gets added here via renderMessage --></div>
                 <div class="chat-msg__media"></div>
             {[ if (!o.is_me_message) { ]}</div>{[ } ]}