From ea54644a45fe40d53cf43386851de45a0311ac1f Mon Sep 17 00:00:00 2001 From: JC Brand Date: Thu, 17 Oct 2019 13:28:18 +0200 Subject: [PATCH] Fixes #1089. When filtering by `online`, show all non-offline users --- CHANGES.md | 5 +++-- src/converse-rosterview.js | 34 +++++++++++++++++++--------------- webpack.html | 2 +- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 4372abc3a..318d721e6 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,8 +3,9 @@ ## 6.0.0 (Unreleased) - #129: Add support for XEP-0156: Disovering Alternative XMPP Connection Methods. Only XML is supported for now. -- #1691 Fix `collection.chatbox is undefined` errors -- #1733 New message notifications for a minimized chat stack on top of each other +- #1089: When filtering the roster for `online` users, show all non-offline users. +- #1691: Fix `collection.chatbox is undefined` errors +- #1733: New message notifications for a minimized chat stack on top of each other - Prevent editing of sent file uploads. - Initial support for sending custom emojis. Currently only between Converse instances. Still working out a wire protocol for compatibility with other clients. diff --git a/src/converse-rosterview.js b/src/converse-rosterview.js index 833293e0a..e7d54d6c0 100644 --- a/src/converse-rosterview.js +++ b/src/converse-rosterview.js @@ -593,13 +593,14 @@ converse.plugins.add('converse-rosterview', { return u.slideIn(this.contacts_el); }, + /* Given a list of contacts, make sure they're filtered out + * (aka hidden) and that all other contacts are visible. + * If all contacts are hidden, then also hide the group title. + * @private + * @method _converse.RosterGroupView#filterOutContacts + * @param { Array } contacts + */ filterOutContacts (contacts=[]) { - /* Given a list of contacts, make sure they're filtered out - * (aka hidden) and that all other contacts are visible. - * - * If all contacts are hidden, then also hide the group - * title. - */ let shown = 0; this.model.contacts.forEach(contact => { const contact_view = this.get(contact.get('id')); @@ -617,10 +618,15 @@ converse.plugins.add('converse-rosterview', { } }, + /** + * Given the filter query "q" and the filter type "type", + * return a list of contacts that need to be filtered out. + * @private + * @method _converse.RosterGroupView#getFilterMatches + * @param { String } q - The filter query + * @param { String } type - The filter type + */ getFilterMatches (q, type) { - /* Given the filter query "q" and the filter type "type", - * return a list of contacts that need to be filtered out. - */ if (q.length === 0) { return []; } @@ -631,15 +637,13 @@ converse.plugins.add('converse-rosterview', { // When filtering by chat state, we still want to // show requesting contacts, even though they don't // have the state in question. - matches = this.model.contacts.filter( - (contact) => !_.includes(contact.presence.get('show'), q) && !contact.get('requesting') - ); + matches = this.model.contacts.filter(c => !_.includes(c.presence.get('show'), q) && !c.get('requesting')); } else if (q === 'unread_messages') { matches = this.model.contacts.filter({'num_unread': 0}); + } else if (q === 'online') { + matches = this.model.contacts.filter(c => ["offline", "unavailable"].includes(c.presence.get('show'))); } else { - matches = this.model.contacts.filter( - (contact) => !_.includes(contact.presence.get('show'), q) - ); + matches = this.model.contacts.filter(c => !_.includes(c.presence.get('show'), q)); } } else { matches = this.model.contacts.filter((contact) => { diff --git a/webpack.html b/webpack.html index e7193e92f..3b7a00596 100644 --- a/webpack.html +++ b/webpack.html @@ -29,7 +29,7 @@ muc_domain: 'conference.chat.example.org', muc_respect_autojoin: true, password: 'secret', - view_mode: 'overlayed', + view_mode: 'fullscreen', websocket_url: 'ws://chat.example.org:5380/xmpp-websocket', whitelisted_plugins: ['converse-debug'], });