Anton Shestakov <av6@dwimlabs.net>, Thu, 24 Mar 2016 20:17:04 +0800
index: improve onPresence()
- default presence type is 'available', not 'online'
- return early on all standard types that aren't currently handled
- set default show and priority based on presence type
- use status message in log
- don't show status changes for contact type 'self'
coffee/contacts.coffee
Permissions: -rw-r--r--
class Tram.Contact extends Backbone.Model @on 'add change:avatar', -> if avatar?.mime and avatar?.data @set('d/avatar', "data:#{ avatar.mime };base64,#{ avatar.data }") @on 'add change:fullname change:nickname change:bjid', -> @set('d/handle', @get('fullname') or @get('nickname') or @get('bjid')) @on 'add change:show change:presence', -> @set('d/pip', if @has('show') then @get('show') else @get('presence')) class Tram.Contacts extends Backbone.Collection if model.get('presence') is 'unavailable' else if model.get('type') is 'self' @on('change:presence change:type', @sort) class Tram.AvatarView extends Backbone.View colors: Tram.colors.avatar template: $('#avatar-template').html() for i in [0...string.length] result += string.charCodeAt(i) ci = @hash(@model.get 'bjid') % @colors.length "color: white; background: #{ @colors[ci] };" @rivet = rivets.bind(@el, model: @model, view: this) class Tram.ContactView extends Backbone.View template: $('#contact-template').html() @$el.attr('data-jid', @model.get('jid')) @$avatarColumn = @$('.avatar-column') "background: #{ @colors[@model.get 'd/pip'] || @colors['default'] };" @rivet = rivets.bind(@el, model: @model, view: this) av = new Tram.AvatarView(model: @model) @$avatarColumn.prepend av.render().el class Tram.ContactsApp extends Backbone.View @listenTo(@collection, 'add', @onAdd) @listenTo(@collection, 'sort', @onSort) onAdd: (model, collection) -> mi = collection.indexOf model model.view = new Tram.ContactView(model: model) el = model.view.render().el @$el.children().eq(mi - 1).after(el) onSort: (collection, options) -> collection.each (model) => @$el.append(model.view.el)