Thanks so much for the clear reproduction steps @Don
Yup, that’s it! Two things going on here at the same time
- Loading slider service needs to remove the
still-loading
class from the body - LockOn needs to scroll to the right place
They were both scheduled in the afterRender
part of Ember’s runloop. And since the ‘lock on’ stuff is technically scheduled first, it was being run first. And so LockOn was running while all the post HTML was in the DOM, but still had display: none
.
This PR will move the still-loading
class removal to the ‘render’ part of the runloop, which means anything else which is scheduling stuff afterRender
will be running once everything is rendered and visible:
Agreed! I didn’t want to touch it as part of this bugfix, but I think we should aim to remove all those hacks.
Reading the comments in the file, it looks like it was originally introduced (10 years ago!) to counteract browser ‘scroll restoration’ features. Nowadays, we use history.scrollRestoration = false
to disable that browser feature, so I think that makes most of the old hacks redundant.
Probably best to trial this kind of sensitive change via a theme component first, and then if it all looks good we can merge into core. I imagine removing LockOn
will fix a lot of other edge-cases we have with topic scroll position. I’ll aim to try this out in the next couple of weeks