diff --git a/js/views/conversation_view.js b/js/views/conversation_view.js index b8a9b9a3aa..5e53d73de1 100644 --- a/js/views/conversation_view.js +++ b/js/views/conversation_view.js @@ -45,7 +45,8 @@ }); this.view = new Whisper.MessageListView({ - collection: this.model.messageCollection + collection: this.model.messageCollection, + window: this.appWindow.contentWindow }); this.$('.discussion-container').append(this.view.el); this.view.render(); diff --git a/js/views/list_view.js b/js/views/list_view.js index 31e4d76e69..efc28e70e1 100644 --- a/js/views/list_view.js +++ b/js/views/list_view.js @@ -24,9 +24,31 @@ Whisper.ListView = Backbone.View.extend({ tagName: 'ul', itemView: Backbone.View, - initialize: function() { + initialize: function(options) { this.listenTo(this.collection, 'add', this.addOne); this.listenTo(this.collection, 'reset', this.addAll); + + if (options.window) { + var $window = this.$(options.window); + $window.scroll(this.onScroll.bind(this)); + $window.resize(this.onResize.bind(this)); + } + }, + + onResize: function(e) { + this.resizing = true; + clearTimeout(this.resizeTimer); + resizeTimer = setTimeout(function() { + resizing = false; + }, 500); + this.$el.scrollTop(this.scrollPercent * this.$el.height()); + }, + + onScroll: function(e) { + if (!this.resizing) { + this.scrollTop = this.$el.scrollTop(); + this.scrollPercent = this.scrollTop / this.$el.height(); + } }, addOne: function(model) {