Add RB.ContentViewport for managing safe content areas.

Review Request #13228 — Created Aug. 22, 2023 and submitted — Latest diff uploaded

Information

Review Board
release-6.x

Reviewers

This introduces a new RB.ContentViewport class and
RB.contentViewport global that's used for tracking offsets into the
main browwser viewport that are safe for content. Its primarily useful
for helping dock content and align elements.

Elements can be registered for tracking, ensuring that any element
resizes automatically update the content area. The machinery for
tracking is only enabled when first used, to save on memory in places
where nothing is docked.

All tracking is done with a WeakMap. If the element disappears, it
will be untracked automatically. Worth noting, though, that the viewport
won't automatically adjust until another resize event occurs. We could
track removals down the road, but currently, it's not necessary.

The Unified Banner is registered as a tracked item on instantiation
during construction.

This will be used in an upcoming change to help properly center the
collapse button for diffs.

Unit tests pass.

Tested with upcoming changes for the diff collapse button, and
verified that any resizes to the Unified Banner were factored in
for positioning.

Commits

Files