When clicking the Fixed, Discard, or Reopen button, the updating of the
issue summary table can cause the page's scroll position to change. We
had code in place that intended to address this, but this was very
dependent on the order in which the browser updates the pages and
calculates positions. The old code assumed it could safely get the old
scroll position after triggering DOM updates, but this wasn't a good
assumption and no longer works in Chrome or Firefox.
We now fetch this value before performing any DOM updates, and we also
now set the scroll position in an animation frame. This is done in an
attempt to more closely tie the scroll position update with the DOM
update. While not necessary on Chrome or Firefox, it does reduce the
chances quite a bit of jumping on Safari and Internet Explorer (though
it will happen at times).
There is a very slight jump that's still noticeable in Firefox, but it's
actually unrelated to this logic. There are some heights/positions in
the review request box that are using subpixels, which affect rendering
as the issue summary table changes height. Those will be dealt with
Tested in Chrome, Firefox, Safari, and Edge.
Chrome works the best. There's absolutely no jump or perceived shift in
rendering when clicking any issue buttons now.
Firefox works mostly well, but as the issue summary table changes height,
subpixels elsewhere in the UI affect rendering. This is noticed as a slight
shift in horizontal lines, with the scroll position staying exactly the
same on every click.
Safari mostly stays in place when clicking buttons, but does sometimes have
a quick jump. I have not been able to eliminate this entirely, but
`requestAnimationFrame` reduces the occurrence.
Internet Explorer has both the sub-pixel bug and the occasional jump (again,
reduced by `requestAnimationFrame`, but otherwise mostly stays in place.
Reviewed at https://reviews.reviewboard.org/r/8906/