discourse/app/assets/javascripts/discourse/mixins/docking.js.es6
Sam f4418ae884 PERF: fast docking of timeline so it does not overlap
In the past we debounced all dock check this causes situations where
sometimes timeline would not dock in time especially on slow computers

This works around it by performing the dock by hand.

Also there was missing integer casting causing over aggressive re-rendering
2018-02-22 12:52:43 +11:00

45 lines
1.0 KiB
JavaScript

const helper = {
offset() {
const mainOffset = $('#main').offset();
const offsetTop = mainOffset ? mainOffset.top : 0;
return (window.pageYOffset || $('html').scrollTop()) - offsetTop;
}
};
export default Ember.Mixin.create({
queueDockCheck: null,
init() {
this._super();
this.queueDockCheck = () => {
// we want to do a very fast non-debounced check first
if (this.fastDockCheck) {
this.fastDockCheck();
}
Ember.run.debounce(this, this.safeDockCheck, 5);
};
},
safeDockCheck() {
if (this.isDestroyed || this.isDestroying) { return; }
this.dockCheck(helper);
},
didInsertElement() {
this._super();
$(window).bind('scroll.discourse-dock', this.queueDockCheck);
$(document).bind('touchmove.discourse-dock', this.queueDockCheck);
this.dockCheck(helper);
},
willDestroyElement() {
this._super();
$(window).unbind('scroll.discourse-dock', this.queueDockCheck);
$(document).unbind('touchmove.discourse-dock', this.queueDockCheck);
}
});