Improve chatroom name rendering

- Take locked_muc_domain into consideration in chatroom display name
- Use getDisplayName when rendering the heading name
- Give preference to bookmark name if it exists
This commit is contained in:
JC Brand 2019-05-29 12:57:54 +02:00
parent 94f916775c
commit da713f3162
6 changed files with 35 additions and 32 deletions

View File

@ -134,7 +134,7 @@
});
_converse.connection._dataRecv(test_utils.createRequest(stanza));
await test_utils.waitUntil(() => view.model.get('bookmarked'));
toggle = view.el.querySelector('.toggle-bookmark');
toggle = await test_utils.waitUntil(() => view.el.querySelector('.toggle-bookmark'));
expect(view.model.get('bookmarked')).toBeTruthy();
expect(toggle.title).toBe('Unbookmark this groupchat');
expect(u.hasClass('on-button', toggle), true);
@ -224,12 +224,19 @@
);
await _converse.api.rooms.open(`lounge@localhost`);
const view = _converse.chatboxviews.get('lounge@localhost');
await test_utils.waitUntil(() => !_.isNull(view.el.querySelector('.toggle-bookmark')));
var bookmark_icon = view.el.querySelector('.toggle-bookmark');
let bookmark_icon = await test_utils.waitUntil(() => view.el.querySelector('.toggle-bookmark'));
expect(_.includes(bookmark_icon.classList, 'button-on')).toBeFalsy();
_converse.bookmarks.create({
'jid': view.model.get('jid'),
'autojoin': false,
'name': 'The lounge',
'nick': ' some1'
});
view.model.set('bookmarked', true);
bookmark_icon = await test_utils.waitUntil(() => view.el.querySelector('.toggle-bookmark'));
expect(_.includes(bookmark_icon.classList, 'button-on')).toBeTruthy();
view.model.set('bookmarked', false);
bookmark_icon = await test_utils.waitUntil(() => view.el.querySelector('.toggle-bookmark'));
expect(_.includes(bookmark_icon.classList, 'button-on')).toBeFalsy();
done();
}));
@ -264,7 +271,7 @@
});
expect(_converse.bookmarks.length).toBe(1);
expect(view.model.get('bookmarked')).toBeTruthy();
var bookmark_icon = view.el.querySelector('.toggle-bookmark');
let bookmark_icon = await test_utils.waitUntil(() => view.el.querySelector('.toggle-bookmark'));
expect(u.hasClass('button-on', bookmark_icon)).toBeTruthy();
spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
@ -273,6 +280,7 @@
});
spyOn(_converse.connection, 'getUniqueId').and.callThrough();
bookmark_icon.click();
bookmark_icon = await test_utils.waitUntil(() => view.el.querySelector('.toggle-bookmark'));
expect(view.toggleBookmark).toHaveBeenCalled();
expect(u.hasClass('button-on', bookmark_icon)).toBeFalsy();
expect(_converse.bookmarks.length).toBe(0);

View File

@ -127,20 +127,6 @@ converse.plugins.add('converse-bookmark-views', {
}
},
onBookmarked () {
const icon = this.el.querySelector('.toggle-bookmark');
if (_.isNull(icon)) {
return;
}
if (this.model.get('bookmarked')) {
icon.classList.add('button-on');
icon.title = __('Unbookmark this groupchat');
} else {
icon.classList.remove('button-on');
icon.title = __('Bookmark this groupchat');
}
},
setBookmarkState () {
/* Set whether the groupchat is bookmarked or not.
*/
@ -177,7 +163,6 @@ converse.plugins.add('converse-bookmark-views', {
this.renderBookmarkForm();
} else {
models.forEach(model => model.destroy());
this.el.querySelector('.toggle-bookmark').classList.remove('button-on');
}
}
}
@ -372,10 +357,7 @@ converse.plugins.add('converse-bookmark-views', {
_converse.api.listen.on('bookmarksInitialized', initBookmarkViews);
_converse.api.listen.on('chatRoomOpened', view => {
view.model.on('change:bookmarked', view.onBookmarked, view);
view.setBookmarkState();
});
_converse.api.listen.on('chatRoomOpened', view => view.setBookmarkState());
/************************ END Event Handlers ************************/
}
});

View File

@ -559,6 +559,7 @@ converse.plugins.add('converse-muc-views', {
this.model.on('change:affiliation', this.renderHeading, this);
this.model.on('change:connection_status', this.onConnectionStatusChanged, this);
this.model.on('change:hidden_occupants', this.updateOccupantsToggle, this);
this.model.on('change:bookmarked', this.renderHeading, this);
this.model.on('change:jid', this.renderHeading, this);
this.model.on('change:name', this.renderHeading, this);
this.model.on('change:role', this.renderBottomPanel, this);
@ -739,6 +740,7 @@ converse.plugins.add('converse-muc-views', {
*/
return tpl_chatroom_head(
Object.assign(this.model.toJSON(), {
'title': this.model.getDisplayName(),
'Strophe': Strophe,
'_converse': _converse,
'info_close': __('Close and leave this groupchat'),

View File

@ -40,7 +40,17 @@ converse.plugins.add('converse-bookmarks', {
// New functions which don't exist yet can also be added.
ChatRoom: {
getAndPersistNickname(nick) {
getDisplayName () {
const { _converse } = this.__super__;
if (this.get('bookmarked') && _converse.bookmarks) {
const bookmark = _converse.bookmarks.findWhere({'jid': this.get('jid')});
return bookmark.get('name');
} else {
return this.__super__.getDisplayName.apply(this, arguments);
}
},
getAndPersistNickname (nick) {
const { _converse } = this.__super__;
nick = nick || _converse.getNicknameFromBookmark(this.get('jid'));
return this.__super__.getAndPersistNickname.call(this, nick);

View File

@ -356,7 +356,14 @@ converse.plugins.add('converse-muc', {
},
getDisplayName () {
return this.get('name') || this.get('jid');
const name = this.get('name');
if (name) {
return name;
} else if (_converse.locked_muc_domain === 'hidden') {
return Strophe.getNodeFromJid(this.get('jid'));
} else {
return this.get('jid');
}
},
/**

View File

@ -1,13 +1,7 @@
<div class="chatbox-navback"><i class="fa fa-arrow-left"></i></div>
<div class="chatbox-title">
<div class="chat-title" {[ if (o._converse.locked_muc_domain !== 'hidden') { ]} title="{{{o.jid}}}" {[ } ]} >
{[ if (o.name && o.name !== o.Strophe.getNodeFromJid(o.jid)) { ]}
{{{ o.name }}}
{[ } else if (o._converse.locked_muc_domain === 'hidden') { ]}
{{{ o.Strophe.getNodeFromJid(o.jid) }}}
{[ } else { ]}
{{{ o.Strophe.getNodeFromJid(o.jid) }}}@{{{ o.Strophe.getDomainFromJid(o.jid) }}}
{[ } ]}
{{{ o.title }}}
</div>
<!-- Sanitized in converse-muc-views. We want to render links. -->
<p class="chatroom-description">{{o.description}}</p>