From 88c104bb831597af6b95555a0f97e49268e1fe4b Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Wed, 10 Feb 2016 13:40:31 -0500 Subject: [PATCH] FIX: Upwards scrolling was broken in a topic --- .../discourse/components/mount-widget.js.es6 | 12 +++++++++++- .../components/scrolling-post-stream.js.es6 | 8 +++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/app/assets/javascripts/discourse/components/mount-widget.js.es6 b/app/assets/javascripts/discourse/components/mount-widget.js.es6 index d23485964f0..cd108d449dc 100644 --- a/app/assets/javascripts/discourse/components/mount-widget.js.es6 +++ b/app/assets/javascripts/discourse/components/mount-widget.js.es6 @@ -6,6 +6,7 @@ export default Ember.Component.extend({ _rootNode: null, _timeout: null, _widgetClass: null, + _afterRender: null, init() { this._super(); @@ -24,7 +25,11 @@ export default Ember.Component.extend({ Ember.run.cancel(this._timeout); }, - queueRerender() { + queueRerender(callback) { + if (callback && !this._afterRender) { + this._afterRender = callback; + } + Ember.run.scheduleOnce('render', this, this.rerenderWidget); }, @@ -41,6 +46,11 @@ export default Ember.Component.extend({ this._rootNode = patch(this._rootNode, patches); this._tree = newTree; console.log('render: ', new Date().getTime() - t0); + + if (this._afterRender) { + this._afterRender(); + this._afterRender = null; + } } } diff --git a/app/assets/javascripts/discourse/components/scrolling-post-stream.js.es6 b/app/assets/javascripts/discourse/components/scrolling-post-stream.js.es6 index 4489e5aa657..490ff3d0a35 100644 --- a/app/assets/javascripts/discourse/components/scrolling-post-stream.js.es6 +++ b/app/assets/javascripts/discourse/components/scrolling-post-stream.js.es6 @@ -77,7 +77,7 @@ export default MountWidget.extend({ const posts = this.posts; if (onscreen.length) { - const refresh = () => this.queueRerender(); + const refresh = cb => this.queueRerender(cb); const first = posts.objectAt(onscreen[0]); if (this._topVisible !== first) { this._topVisible = first; @@ -89,10 +89,8 @@ export default MountWidget.extend({ const distToElement = elemPos ? $body.scrollTop() - elemPos.top : 0; const topRefresh = () => { - refresh(); - - Ember.run.next(() => { - const $refreshedElem = $(elemId); + refresh(() => { + const $refreshedElem = $(`#${elemId}`); // Quickly going back might mean the element is destroyed const position = $refreshedElem.position();