diff --git a/converse.js b/converse.js
index 181da64cc..bd8ee7d27 100644
--- a/converse.js
+++ b/converse.js
@@ -1662,6 +1662,7 @@
if (view) {
view.$el.remove();
delete this.rosteritemviews[item.id];
+ this.render();
}
},
@@ -1699,20 +1700,16 @@
'
Pending contacts'),
render: function (item) {
- if (!item) {
- return this;
- }
var $my_contacts = this.$el.find('#xmpp-contacts'),
$contact_requests = this.$el.find('#xmpp-contact-requests'),
$pending_contacts = this.$el.find('#pending-xmpp-contacts'),
$count, presence_change;
- // TODO see if user_id would be useful
- var jid = item.id,
- user_id = Strophe.getNodeFromJid(jid),
- view = this.rosteritemviews[item.id],
- ask = item.get('ask'),
- subscription = item.get('subscription'),
- crit = {order:'asc'};
+ if (item) {
+ var jid = item.id,
+ view = this.rosteritemviews[item.id],
+ ask = item.get('ask'),
+ subscription = item.get('subscription'),
+ crit = {order:'asc'};
if (ask === 'subscribe') {
$pending_contacts.after(view.render().el);
@@ -1732,24 +1729,25 @@
view.render();
}
}
- presence_change = view.model.changed['chat_status'];
- if (presence_change) {
- // resort all items only if the model has changed it's chat_status as this render
- // is also triggered when the resource is changed which always comes before the presence change
- // therefore we avoid resorting when the change doesn't affect the position of the item
- $my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.offline').tsort('a', crit));
- $my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.unavailable').tsort('a', crit));
- $my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.away').tsort('a', crit));
- $my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.dnd').tsort('a', crit));
- $my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.online').tsort('a', crit));
- }
+ presence_change = view.model.changed['chat_status'];
+ if (presence_change) {
+ // resort all items only if the model has changed it's chat_status as this render
+ // is also triggered when the resource is changed which always comes before the presence change
+ // therefore we avoid resorting when the change doesn't affect the position of the item
+ $my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.offline').tsort('a', crit));
+ $my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.unavailable').tsort('a', crit));
+ $my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.away').tsort('a', crit));
+ $my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.dnd').tsort('a', crit));
+ $my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.online').tsort('a', crit));
+ }
- if (item.get('is_last') && !item.get('sorted')) {
- // this will be true after all of the roster items have been added with the default
- // options where all of the items are offline and now we can show the rosterView
- item.set('sorted', true)
- this.initialSort();
- this.$el.show();
+ if (item.get('is_last') && !item.get('sorted')) {
+ // this will be true after all of the roster items have been added with the default
+ // options where all of the items are offline and now we can show the rosterView
+ item.set('sorted', true)
+ this.initialSort();
+ this.$el.show();
+ }
}
// Hide the headings if there are no contacts under them
_.each([$my_contacts, $contact_requests, $pending_contacts], function (h) {