Anton Shestakov <av6@dwimlabs.net>, Wed, 23 Mar 2016 16:55:52 +0800
index: maintain only one contact with type 'self'
This isn't done in an event handler of contacts collection because doing it in
'add' handler would trigger 'sort' event after the model has been added, but
before its 'add' event has propagated, and that's dumb.
coffee/messages.coffee
Permissions: -rw-r--r--
class Tram.Message extends Backbone.Model @on 'add change:stamp', -> @set('d/mstamp', moment(@get('stamp'))) class Tram.Messages extends Backbone.Collection splitThreshold: 30 * 60 * 1000 model.get('stamp').valueOf() @_splitOrFold(prev, model) @_splitOrFold(model, next) _splitOrFold: (m1, m2) -> else if @_foldable(m1, m2) Math.abs(m1.get('stamp').valueOf() - m2.get('stamp').valueOf()) > @splitThreshold m1.get('from') is m2.get('from') and Math.abs(m1.get('stamp').valueOf() - m2.get('stamp').valueOf()) < @foldThreshold class Tram.MessageView extends Backbone.View template: $('#message-template').html() @$avatarColumn = @$('.avatar-column') @listenTo(@model, 'change:contact', @updateContact) if not @model.previous('contact')? and @model.get('contact')? av = new Tram.AvatarView(model: contact) @$avatarColumn.prepend(av.render().el) @model.get('contact')?.get('d/handle') or @model.get('from') @rivet = rivets.bind(@el, model: @model, view: this) contact = @model.get('contact') av = new Tram.AvatarView(model: contact) @$avatarColumn.prepend(av.render().el) class Tram.LogApp extends Backbone.View @listenTo(@collection, 'add', @onAdd) onAdd: (model, collection) -> mi = collection.indexOf(model) view = new Tram.MessageView(model: model) @$el.children().eq(mi - 1).after(el) return @$el.scrollTop() + @$el.height() == @$el.get(0).scrollHeight @$el.scrollTop(@$el.get(0).scrollHeight)