Anton Shestakov <av6@dwimlabs.net>, Thu, 07 Apr 2016 00:10:32 +0800
index: instead of resetting clientState, just reload the page
Since log out is a <a href=""> "button" now, this code is only relevant on
forced disconnects (server restarting, etc).
js/messages.js
Permissions: -rw-r--r--
// Generated by CoffeeScript 1.10.0 var extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; Tram.Message = (function(superClass) { extend(Message, superClass); return Message.__super__.constructor.apply(this, arguments); Message.prototype.initialize = function() { return this.on('add change:stamp', function() { return this.set('d/mstamp', moment(this.get('stamp'))); return this.unset('d/mstamp'); Tram.Messages = (function(superClass) { extend(Messages, superClass); return Messages.__super__.constructor.apply(this, arguments); Messages.prototype.model = Tram.Message; Messages.prototype.splitThreshold = 30 * 60 * 1000; Messages.prototype.foldThreshold = 60 * 1000; Messages.prototype.comparator = function(model) { return model.get('stamp').valueOf(); Messages.prototype.initialize = function() { return this.on('add', this.onAdd); Messages.prototype.onAdd = function(model) { mi = this.indexOf(model); prev = this.models[mi - 1]; this._splitOrFold(prev, model); next = this.models[mi + 1]; return this._splitOrFold(model, next); Messages.prototype._splitOrFold = function(m1, m2) { if (this._splittable(m1, m2)) { return m2.set('d/split', true); if (this._foldable(m1, m2)) { return m2.set('d/fold', true); return m2.unset('d/fold'); Messages.prototype._splittable = function(m1, m2) { return Math.abs(m1.get('stamp').valueOf() - m2.get('stamp').valueOf()) > this.splitThreshold; Messages.prototype._foldable = function(m1, m2) { return m1.get('from') === m2.get('from') && Math.abs(m1.get('stamp').valueOf() - m2.get('stamp').valueOf()) < this.foldThreshold; Tram.MessageView = (function(superClass) { extend(MessageView, superClass); return MessageView.__super__.constructor.apply(this, arguments); MessageView.prototype.tagName = 'div'; MessageView.prototype.className = 'message'; MessageView.prototype.template = $('#message-template').html(); MessageView.prototype.initialize = function() { this.$el.attr('data-id', this.model.get('id')); this.$el.html(this.template); this.$avatarColumn = this.$('.avatar-column'); MessageView.prototype.bind = function() { return this.listenTo(this.model, 'change:contact', this.updateContact); MessageView.prototype.updateContact = function() { if ((this.model.previous('contact') == null) && (this.model.get('contact') != null)) { av = new Tram.AvatarView({ return this.$avatarColumn.prepend(av.render().el); MessageView.prototype.getHandle = function() { return ((ref = this.model.get('contact')) != null ? ref.get('d/handle') : void 0) || this.model.get('from'); MessageView.prototype.render = function(model) { this.rivet = rivets.bind(this.el, { contact = this.model.get('contact'); av = new Tram.AvatarView({ this.$avatarColumn.prepend(av.render().el); MessageView.prototype.remove = function() { return MessageView.__super__.remove.apply(this, arguments); Tram.LogApp = (function(superClass) { extend(LogApp, superClass); return LogApp.__super__.constructor.apply(this, arguments); LogApp.prototype.tagName = 'div'; LogApp.prototype.className = 'log'; LogApp.prototype.initialize = function() { return this.listenTo(this.collection, 'add', this.onAdd); LogApp.prototype.onAdd = function(model, collection) { mi = collection.indexOf(model); view = new Tram.MessageView({ this.$el.children().eq(mi - 1).after(el); LogApp.prototype.bottomed = function() { return this.$el.scrollTop() + this.$el.height() === this.$el.get(0).scrollHeight; LogApp.prototype.scroll = function() { return this.$el.scrollTop(this.$el.get(0).scrollHeight); //# sourceMappingURL=messages.js.map