Adds setting to toggle showing unread message counter in page title

This commit is contained in:
Ariel Fuggini 2020-11-04 15:13:55 -05:00 committed by JC Brand
parent cf94a5193a
commit 6de07c5c29
3 changed files with 46 additions and 18 deletions

View File

@ -1954,6 +1954,13 @@ Converse render the emojis with `Twemoji <https://twemoji.twitter.com/>`_.
See also `emoji_image_path`_.
update_title
------------
* Default: ``true``
Determines whether to shows unread messages counter in the page title.
visible_toolbar_buttons
-----------------------

View File

@ -1058,16 +1058,16 @@ describe("Chatboxes", function () {
await mock.openControlBox(_converse);
expect(document.title).toBe('Converse Tests');
_converse.api.settings.set('update_title', false);
const sender_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
const previous_state = _converse.windowState;
const message = 'This message will increment the message counter';
const msg = $msg({
from: sender_jid,
to: _converse.connection.jid,
type: 'chat',
id: u.getUniqueId()
}).c('body').t(message).up()
}).c('body').t('This message will increment the message counter').up()
.c('active', {'xmlns': Strophe.NS.CHATSTATES}).tree();
_converse.windowState = 'hidden';
@ -1078,8 +1078,21 @@ describe("Chatboxes", function () {
await _converse.handleMessageStanza(msg);
expect(_converse.incrementMsgCounter).toHaveBeenCalled();
expect(_converse.clearMsgCounter).not.toHaveBeenCalled();
expect(document.title).toBe('Messages (1) Converse Tests');
expect(document.title).toBe('Converse Tests');
expect(_converse.api.trigger).toHaveBeenCalledWith('message', jasmine.any(Object));
_converse.api.settings.set('update_title', true);
const msg2 = $msg({
from: sender_jid,
to: _converse.connection.jid,
type: 'chat',
id: u.getUniqueId()
}).c('body').t('This message increment the message counter AND update the page title').up()
.c('active', {'xmlns': Strophe.NS.CHATSTATES}).tree();
await _converse.handleMessageStanza(msg2);
expect(document.title).toBe('Messages (2) Converse Tests');
_converse.windowSate = previous_state;
done();
}));

View File

@ -32,32 +32,40 @@ converse.plugins.add('converse-chatboxes', {
'privateChatsAutoJoined'
]);
api.settings.extend({
'update_title': true
});
let msg_counter = 0;
const favicon = new Favico({type : 'circle', position: 'up', animation: 'none'});
_converse.incrementMsgCounter = function () {
msg_counter += 1;
favicon.badge(msg_counter);
const title = document.title;
if (!title) {
return;
}
if (title.search(/^Messages \(\d+\) /) === -1) {
document.title = `Messages (${msg_counter}) ${title}`;
} else {
document.title = title.replace(/^Messages \(\d+\) /, `Messages (${msg_counter}) `);
if (api.settings.get('update_title')) {
const title = document.title;
if (!title) {
return;
}
if (title.search(/^Messages \(\d+\) /) === -1) {
document.title = `Messages (${msg_counter}) ${title}`;
} else {
document.title = title.replace(/^Messages \(\d+\) /, `Messages (${msg_counter}) `);
}
}
};
_converse.clearMsgCounter = function () {
msg_counter = 0;
favicon.badge(msg_counter);
const title = document.title;
if (!title) {
return;
}
if (title.search(/^Messages \(\d+\) /) !== -1) {
document.title = title.replace(/^Messages \(\d+\) /, "");
if (api.settings.get('update_title')) {
const title = document.title;
if (!title) {
return;
}
if (title.search(/^Messages \(\d+\) /) !== -1) {
document.title = title.replace(/^Messages \(\d+\) /, "");
}
}
};