From 3bf27e8b5fdc6f5b81fee9670ac3e82fee9787b4 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Sat, 5 Oct 2013 23:07:42 +0200 Subject: [PATCH] New config option ``show_only_online_users`` If true, only users with a status of 'online' will be shown in the contacts roster. --- CHANGES.rst | 7 ++++--- converse.js | 20 +++++++++++++------- docs/source/index.rst | 7 +++++++ 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index b6404f1c4..e9ff4cd5a 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,12 +4,13 @@ Changelog 0.6.5 (Unreleased) ------------------ -* Fetch vCards asynchronously once a roster contacts is added [jcbrand] +* Fetch vCards asynchronously once a roster contact is added [jcbrand] * Hungarian translation [w3host] * Russian translation [bkocherov] * Update CSS to avoid clash with bootstrap [seocam] -* Add config option ``allow_muc`` to toggle multi-user chat (MUC) [jcbrand] -* Add config option ``allow_contact_requests`` to toggle user adding [jcbrand] +* New config option ``allow_muc`` toggles multi-user chat (MUC) [jcbrand] +* New config option ``allow_contact_requests`` toggles user adding [jcbrand] +* New config option ``show_only_online_users`` [jcbrand] 0.6.4 (2013-09-15) ------------------ diff --git a/converse.js b/converse.js index c548c6817..e93727e72 100644 --- a/converse.js +++ b/converse.js @@ -57,6 +57,7 @@ this.i18n = locales.en; this.prebind = false; this.show_controlbox_by_default = false; + this.show_only_online_users = false; this.testing = false; // Exposes sensitive data for testing. Never set to true in production systems! this.xhr_custom_status = false; this.xhr_user_search = false; @@ -78,6 +79,7 @@ 'prebind', 'rid', 'show_controlbox_by_default', + 'show_only_online_users', 'sid', 'testing', 'xhr_custom_status', @@ -2225,8 +2227,6 @@ converse.connection.roster.authorize(bare_jid); } else { if (!this.get(bare_jid)) { - // TODO: we can perhaps do the creation inside - // getVCard. converse.getVCard( bare_jid, $.proxy(function (jid, fullname, img, img_type, url) { @@ -2355,7 +2355,7 @@ this.model.on("remove", function (item) { this.removeRosterItem(item); }, this); this.model.on("destroy", function (item) { this.removeRosterItem(item); }, this); - var roster_markup = this.contacts_template() + var roster_markup = this.contacts_template(); if (converse.allow_contact_requests) { roster_markup = this.requesting_contacts_template() + roster_markup + this.pending_contacts_template(); } @@ -2373,7 +2373,7 @@ // want to send a presence stanza, so we do it here. converse.xmppstatus.sendPresence(); } - }, + } }); // Get the cached roster items from localstorage }, @@ -2390,11 +2390,17 @@ chatbox.save(changes); }, - renderRosterItem: function () { + renderRosterItem: function (item, view) { + if (converse.show_only_online_users) { + if (item.get('chat_status') !== 'online') { + view.$el.remove(); + return; + } + } if ($.contains(document.documentElement, view.el)) { view.render(); } else { - $my_contacts.after(view.render().el); + this.$el.find('#xmpp-contacts').after(view.render().el); } }, @@ -2418,7 +2424,7 @@ $contact_requests.after(view.render().el); $contact_requests.after($contact_requests.siblings('dd.requesting-xmpp-contact').tsort(crit)); } else if (subscription === 'both' || subscription === 'to') { - this.renderRosterItem(); + this.renderRosterItem(item, view); } changed_presence = view.model.changed.chat_status; if (changed_presence) { diff --git a/docs/source/index.rst b/docs/source/index.rst index 8d02458a7..4f8e28cf6 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -581,6 +581,13 @@ the page with class *toggle-online-users*. If this options is set to true, the controlbox will by default be shown upon page load. +show_only_online_users +---------------------- + +Default = ``false`` + +If set to ``true``, only online users will be shown in the contacts roster. +Users with any other status (e.g. away, busy etc.) will not be shown. xhr_user_search ---------------