diff --git a/app/assets/javascripts/discourse/components/topic-timeline.js.es6 b/app/assets/javascripts/discourse/components/topic-timeline.js.es6 index cbc88e7ff..a744515e4 100644 --- a/app/assets/javascripts/discourse/components/topic-timeline.js.es6 +++ b/app/assets/javascripts/discourse/components/topic-timeline.js.es6 @@ -15,6 +15,7 @@ export default MountWidget.extend(Docking, { dockCheck(info) { if (this.get('loading')) { return; } + const topicTop = $('.container.posts').offset().top; const topicBottom = $('#topic-bottom').offset().top; const $timeline = this.$('.timeline-container'); const timelineHeight = $timeline.height(); @@ -23,8 +24,12 @@ export default MountWidget.extend(Docking, { const tTop = 140; const prev = this.dockAt; - const pos = tTop + info.offset() + timelineHeight; - if (pos > topicBottom) { + const posTop = tTop + info.offset(); + const pos = posTop + timelineHeight; + + if (posTop < topicTop) { + this.dockAt = 0; + } else if (pos > topicBottom) { this.dockAt = topicBottom - timelineHeight - parentTop; } else { this.dockAt = null; diff --git a/app/assets/javascripts/discourse/mixins/docking.js.es6 b/app/assets/javascripts/discourse/mixins/docking.js.es6 index a70bcdee5..e4f2d843c 100644 --- a/app/assets/javascripts/discourse/mixins/docking.js.es6 +++ b/app/assets/javascripts/discourse/mixins/docking.js.es6 @@ -14,7 +14,7 @@ export default Ember.Mixin.create({ $(window).bind('scroll.discourse-dock', this._dockHandler); $(document).bind('touchmove.discourse-dock', this._dockHandler); - this._dockHandler(); + this.dockCheck(helper); }, willDestroyElement() { diff --git a/app/assets/javascripts/discourse/widgets/topic-timeline.js.es6 b/app/assets/javascripts/discourse/widgets/topic-timeline.js.es6 index f591787a5..5d1a4a2e1 100644 --- a/app/assets/javascripts/discourse/widgets/topic-timeline.js.es6 +++ b/app/assets/javascripts/discourse/widgets/topic-timeline.js.es6 @@ -187,11 +187,11 @@ createWidget('timeline-scrollarea', { createWidget('topic-timeline-container', { tagName: 'div.timeline-container', buildClasses(attrs) { - if (attrs.dockAt) { return 'timeline-docked'; } + if (attrs.dockAt !== null) { return 'timeline-docked'; } }, buildAttributes(attrs) { - if (attrs.dockAt) { + if (attrs.dockAt !== null) { return { style: `top: ${attrs.dockAt}px` }; };