Skip to content

Commit c571e15

Browse files
committed
fix conversejs#1999 - Jump to first unread message
1 parent 5efb7b2 commit c571e15

File tree

5 files changed

+26
-2
lines changed

5 files changed

+26
-2
lines changed

CHANGES.md

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Soon we'll deprecate the latter, so prepare now.
2121
- #1896: Don't send receipts for messages fetched from the archive
2222
- #1937: Editing a message removes the mentions highlight
2323
- #1963: Mentions are visually incorrect when used in message replies
24+
- #1999: Jump to first unread message
2425
- Allow ignoring of bootstrap modules at build using environment variable. For xample: `export BOOTSTRAP_IGNORE_MODULES="Modal,Dropdown" && make dist`
2526
- Bugfix. Handle stanza that clears the MUC subject
2627
- Replace Backbone with [Skeletor](https://github.com/skeletorjs/skeletor)

spec/chatbox.js

+6
Original file line numberDiff line numberDiff line change
@@ -1296,6 +1296,7 @@ describe("Chatboxes", function () {
12961296
await _converse.handleMessageStanza(msg);
12971297
await u.waitUntil(() => view.model.messages.length);
12981298
expect(view.model.get('num_unread')).toBe(1);
1299+
expect(view.model.get('first_unread')).toBeDefined();
12991300
done();
13001301
}));
13011302

@@ -1332,6 +1333,7 @@ describe("Chatboxes", function () {
13321333
_converse.handleMessageStanza(msgFactory());
13331334
await u.waitUntil(() => chatbox.messages.length);
13341335
expect(chatbox.get('num_unread')).toBe(1);
1336+
expect(chatbox.get('first_unread')).toBeDefined();
13351337
done();
13361338
}));
13371339

@@ -1350,6 +1352,7 @@ describe("Chatboxes", function () {
13501352
_converse.handleMessageStanza(msgFactory());
13511353
await u.waitUntil(() => chatbox.messages.length);
13521354
expect(chatbox.get('num_unread')).toBe(1);
1355+
expect(chatbox.get('first_unread')).toBeDefined();
13531356
done();
13541357
}));
13551358

@@ -1367,6 +1370,7 @@ describe("Chatboxes", function () {
13671370
_converse.handleMessageStanza(msgFactory());
13681371
await u.waitUntil(() => chatbox.messages.length);
13691372
expect(chatbox.get('num_unread')).toBe(1);
1373+
expect(chatbox.get('first_unread')).toBeDefined();
13701374
_converse.saveWindowState(null, 'focus');
13711375
expect(chatbox.get('num_unread')).toBe(0);
13721376
done();
@@ -1387,8 +1391,10 @@ describe("Chatboxes", function () {
13871391
_converse.handleMessageStanza(msgFactory());
13881392
await u.waitUntil(() => chatbox.messages.length);
13891393
expect(chatbox.get('num_unread')).toBe(1);
1394+
expect(chatbox.get('first_unread')).toBeDefined();
13901395
_converse.saveWindowState(null, 'focus');
13911396
expect(chatbox.get('num_unread')).toBe(1);
1397+
expect(chatbox.get('first_unread')).toBeDefined();
13921398
done();
13931399
}));
13941400
});

src/headless/converse-chat.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -1100,7 +1100,14 @@ converse.plugins.add('converse-chat', {
11001100
return;
11011101
}
11021102
if (utils.isNewMessage(message) && this.isHidden()) {
1103-
this.save({'num_unread': this.get('num_unread') + 1});
1103+
let first_unread = this.get('first_unread');
1104+
1105+
if (this.get('num_unread') == 0) {
1106+
if (first_unread) first_unread.set("first_unread", false);
1107+
message.set("first_unread", true);
1108+
first_unread = message;
1109+
}
1110+
this.save({'first_unread': first_unread, 'num_unread': this.get('num_unread') + 1});
11041111
_converse.incrementMsgCounter();
11051112
}
11061113
},

src/headless/converse-muc.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -2361,7 +2361,14 @@ converse.plugins.add('converse-muc', {
23612361
const body = message.get('message');
23622362
if (!body) { return; }
23632363
if (u.isNewMessage(message) && this.isHidden()) {
2364-
const settings = {'num_unread_general': this.get('num_unread_general') + 1};
2364+
let first_unread = this.get('first_unread');
2365+
2366+
if (this.get('num_unread_general') == 0) {
2367+
if (first_unread) first_unread.set("first_unread", false);
2368+
message.set("first_unread", true);
2369+
first_unread = message;
2370+
}
2371+
const settings = {'first_unread': first_unread, 'num_unread_general': this.get('num_unread_general') + 1};
23652372
if (this.isUserMentioned(message)) {
23662373
settings.num_unread = this.get('num_unread') + 1;
23672374
_converse.incrementMsgCounter();

src/templates/message.html

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
<canvas class="avatar chat-msg__avatar" height="36" width="36"></canvas>
55
{[ } ]}
66
<div class="chat-msg__content chat-msg__content--{{{o.sender}}} {{{o.is_me_message ? 'chat-msg__content--action' : ''}}}">
7+
{[ if (o.first_unread) { ]}
8+
<div class="message date-separator"><hr class="separator"><span class="separator-text">{{{o.__('unread messages')}}}</span></div>
9+
{[ } ]}
710
<span class="chat-msg__heading">
811
{[ if (o.is_me_message) { ]}<time timestamp="{{{o.isodate}}}" class="chat-msg__time">{{{o.pretty_time}}}</time>{[ } ]}
912
<span class="chat-msg__author">{[ if (o.is_me_message) { ]}**{[ }; ]}{{{o.username}}}</span>

0 commit comments

Comments
 (0)