Xmpp.Views.Contacts ||= {} class Xmpp.Views.Contacts.ListView extends Backbone.View template: JST["backbone/templates/contacts/contact_list"] initialize: () -> _.bindAll(this) @el = '#' + @attributes['id'] @title = I18n.t(@attributes['title']) @titleClass = @listClass = '' @activeGroup = false @contactViews = [] Backbone.Events.on('removeContact', @detachContact) createListContainer: -> $(@el).html(@template(title: @title, isActiveGroup: @activeGroup)) appendContact: (contact) -> if @hasContact(contact) return false if @contactViews.length == 0 @createListContainer() view = new Xmpp.Views.Contacts.ContactView(model: contact, attributes: {listView: this}) @contactViews.push view @render(view.render().el) detachContact: (contact) -> matchingView = @hasContact(contact) if matchingView @contactViews = _.without(@contactViews, matchingView) matchingView.remove() if @contactViews.length == 0 $(@el).html('') return !!matchingView hasContact: (contact) -> _.find(@contactViews, (view) -> view.model == contact ) setAsActiveChatGroup: -> @activeGroup = true render: (contactHtml) -> if (contactHtml?) $(@el).find('ul').append(contactHtml) else _.each(@contactViews, (i, contact) => @render(contact.render().el) ) return this