• Robert Knight's avatar
    Preserve scroll position after toggling side-by-side mode in web pages · a3d50a93
    Robert Knight authored
    Toggling side-by-side mode in a web page reflows the content. If the absolute
    scroll position stays the same, the logical position in the document will change
    and the user would have to scroll to find the content they were
    previously reading.
    
    To avoid this add logic which picks content in the viewport to use as a _scroll
    anchor_, before the document is resized. After the document is resized, the
    scroll position is changed so that the vertical position of the scroll anchor in
    the viewport is the same as before. This keeps most of the content on screen.
    
    The scroll anchor is currently chosen by picking the first _word_
    (non-whitespace substring of a text node) which is visible in the viewport,
    represented as a DOM Range. This fine-grained scroll anchor is chosen rather
    than eg. just a DOM element, because long paragraphs may change in size
    substantially relative to the viewport after resizing the document, so just
    preserving the location of the paragraph element would not preserve the content
    that is on screen.
    
     - Add `preserveScrollPosition` helper in html-side-by-side.js which
       picks a scroll anchor, invokes a callback and then restores the
       position of the scroll anchor.
    
     - Make the HTML integration use `preserveScrollPosition` to preserve
       the scroll position after activating and de-activating side-by-side
       mode
    
     - Add helper functions in src/annotator/util/geometry for comparing
       DOMRect objects
    a3d50a93
Name
Last commit
Last update
.github Loading commit data...
bin Loading commit data...
dev-server Loading commit data...
docs Loading commit data...
embedding-examples Loading commit data...
images Loading commit data...
requirements Loading commit data...
scripts Loading commit data...
src Loading commit data...
.babelrc Loading commit data...
.dockerignore Loading commit data...
.eslintignore Loading commit data...
.eslintrc Loading commit data...
.gitignore Loading commit data...
.npmignore Loading commit data...
.npmrc Loading commit data...
.prettierignore Loading commit data...
.python-version Loading commit data...
CODE_OF_CONDUCT Loading commit data...
Dockerfile Loading commit data...
Jenkinsfile Loading commit data...
LICENSE Loading commit data...
Makefile Loading commit data...
README.md Loading commit data...
codecov.yml Loading commit data...
gulpfile.mjs Loading commit data...
package.json Loading commit data...
pyproject.toml Loading commit data...
requirements-dev.in Loading commit data...
rollup-boot.config.mjs Loading commit data...
rollup-tests.config.mjs Loading commit data...
rollup.config.mjs Loading commit data...
tailwind.config.mjs Loading commit data...
tox.ini Loading commit data...
tsconfig.json Loading commit data...
yarn.lock Loading commit data...