Improve centering of the collapsed button in expanded diffs.

Review Request #13233 — Created Aug. 23, 2023 and submitted — Latest diff uploaded

Information

Review Board
release-6.x

Reviewers

We try to vertically center the diff collapse button in the viewable
content area of an expanded region, but there were some issues with the
logic:

  1. If there's a banner, it reduces the available content area. It's then
    possible for the button to appear below the banner. This is the case
    with the Unified Banner.

  2. The button only vertically centered in relation to the
    expanded/collapsed tbody. Ajacent tbodies of the same type (e.g.,
    "equals") weren't considered, and this made the button appear shifted
    up or down.

  3. The button didn't smoothly jump to new positions until it reached
    fixed position mode (which is when we know we're centering it
    absolutely vertically in the viewport). This had a pretty bad feel to
    it.

The new design fixes all of these issues.

We now factor in the new content viewport to shift the available space
by the Unified Banner's height, ensuring there's never an overlap.

We can now specify a top, bottom, and parent for the element when
centering, offsetting the position as appropriate. DiffReviewableView
will set these based on the types of adjacent tbodies. This gives us teh
entire span of lines of a type as the boundaries for the centering.

Position updates are smoother, now using requestAnimation() rather
than a delay for repositioning. We also avoid setting more CSS
properties than we need to at once, and we do a better job of capping
the button in the contained area.

Unit tests pass.

Tested fixed-based vertical centering when the viewport spans an entire
expanded area.

Tested absolute-based vertical centering at the top and bottom of an
expanded area.

Tested that it stops at the top-most and bottom-most boundaries and does
not overflow.

Tested that it adjusts based on the scrolling of the Unified Banner.

Tested that it appears smooth and not jumpy in all cases.


Commits

Files