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 8f3e13aa4..0091a803a 100644 --- a/converse.js +++ b/converse.js @@ -69,6 +69,7 @@ this.i18n = locales.en; this.prebind = false; this.show_controlbox_by_default = false; + this.show_only_online_users = false; this.show_toolbar = true; this.testing = false; // Exposes sensitive data for testing. Never set to true in production systems! this.xhr_custom_status = false; @@ -92,6 +93,7 @@ 'prebind', 'rid', 'show_controlbox_by_default', + 'show_only_online_users', 'show_toolbar', 'sid', 'testing', @@ -2605,8 +2607,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) { @@ -2735,7 +2735,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(); } @@ -2770,11 +2770,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); } }, @@ -2798,7 +2804,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 24366e8b2..bcc6e2ac9 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 ---------------