1. 15 Mar, 2022 9 commits
    • Robert Knight's avatar
      Improve text selection behavior in VitalSource PDFs · 00763a2d
      Robert Knight authored
      Previously the text layer in VitalSource PDFs consisted of a set of
      absolutely positioned elements, one per word. When the user was making a
      text selection and the cursor was between words, the browser could not
      determine an appropriate caret position in the text. As a result text
      selection was tricky.
      
      Improve this by re-implementing ImageTextLayer to produce a more
      structured DOM tree. Group the characters into words, lines and columns.
      Words are laid out using inline layout into `<hypothesis-text-line>`
      elements, which are then arranged using block layouts into
      `<hypothesis-text-column>` elements. Columns are absolutely positioned.
      Within lines and columns the gaps between words and lines are fine-tuned
      using margins. This use of inline and block layouts allows the browser
      to set the selection correctly when the cursor is between words or
      lines. The visual gap between selected words has also been eliminated by
      adding inter-word spaces to the previous word.
      
       - Separate page layout analysis from DOM construction. This makes these
         elements easier to understand and improve.
      
       - Change DOM structure generated by `ImageTextLayer` to a hierarchical
         structure of words, lines and columns.
      
       - Change ImageTextLayer to use DOMRect and DOMPoint as the types for
         rect and point structs. This allows sharing of geometry utilities
         with other code.
      
       - Simplify rescaling of text layer when image size changes by
         expressing all margins, sizes and scales in the text layer in terms
         of CSS variables (`--x-scale` and `--y-scale`) defined on the root
         `<hypothesis-text-layer>` element. When the image is resized, these
         variables are simply updated to reflect the new image size.
      00763a2d
    • Lyza Danger Gardner's avatar
    • Robert Knight's avatar
      Add test page for JSTOR content banner · 01cf0efe
      Robert Knight authored
      Add a test page at http://localhost:3000/pdf/jstor that shows the JSTOR
      content banner.
      01cf0efe
    • Robert Knight's avatar
      Add facility to customize client configuration in PDF test pages · 897dcf6d
      Robert Knight authored
      Add the ability to specify custom configuration for a PDF test case by
      putting the configuration in a `<basename>.config.json` file alongside
      the PDF, where `<basename>` is the name of the PDF file minus the '.pdf'
      extension.
      897dcf6d
    • Robert Knight's avatar
      Add `contentPartner` configuration option · 010c44fd
      Robert Knight authored
      Add an option that enables the embedder to configure a content
      provider/partner banner to be shown in the client, indicating who is
      providing the content.
      010c44fd
    • Robert Knight's avatar
      d0039747
    • Lyza Danger Gardner's avatar
      c052cd18
    • Robert Knight's avatar
      Add option to show content partner banner in PDF integration · 75694446
      Robert Knight authored
      Add an option to show a banner at the top of the PDF viewer indicating
      where the content came from. This is a contractual requirement for
      working with certain content providers.
      75694446
    • Robert Knight's avatar
      Catch mouseup/mousedown events earlier in SelectionObserver · e70287cf
      Robert Knight authored
      Listen for mouseup/mousedown events on the document body rather than document
      itself, so that we can still capture them if an event listener on
      `document.body` or `document.documentElement` stops propagation of the event.
      The VitalSource integration does this for example to prevent VitalSource's own
      selection UI appearing, but ordinary web pages could do something similar.
      
      In VitalSource books, this change makes the adder behave the same as it does in
      HTML and PDF documents where, when making a selection with the mouse, the adder
      only appears when the mouse is released so it doesn't get in the way during the
      selection.
      
      While updating the tests for this change, they were converted to use a real
      document, as the complexity of mocking the relevant parts of the DOM document
      interface accurately is now too high.
      e70287cf
  2. 14 Mar, 2022 10 commits
  3. 11 Mar, 2022 3 commits
  4. 10 Mar, 2022 3 commits
    • Robert Knight's avatar
      Ignore fixed-positioned content which choosing a scroll anchor · 04e8025f
      Robert Knight authored
      When choosing a scroll anchor to preserve the visible content after toggling
      side-by-side mode, ignore content in elements with `position: fixed` or
      `position: sticky` styles, since this content won't significantly shift its
      position as a result of the document content being resized.
      04e8025f
    • Robert Knight's avatar
      Increase timeout in test · 73acd7d2
      Robert Knight authored
      `waitFor` has a short default timeout of 10ms and this test sometimes
      failed in CI. Try increasing it to reduce flakiness. We might want to
      consider changing the `waitFor` default in future, although we also want
      to encourage test authors to avoid writing tests that frequently wait
      for long (> 10ms) periods of time.
      73acd7d2
    • Lyza Danger Gardner's avatar
      61be5879
  5. 09 Mar, 2022 4 commits
    • Robert Knight's avatar
    • Robert Knight's avatar
      01431523
    • Robert Knight's avatar
      Make src/annotator/ and src/boot/ typecheck with `noImplicitAny` · 08fd737c
      Robert Knight authored
       - Add missing types in src/annotator and src/boot.
      
       - Simplify the return types of some config parsing functions by
         coercing invalid values to `null` or some other default. This reduces
         complexity with the types elsewhere and also potentially avoids some
         confusing errors if invalid values are specified here.
      
       - Add type definitions for hammerjs, scroll-into-view and
         lodash.debounce. The definitions for hammerjs and scroll-into-view
         come from DefinitelyTyped. For lodash a minimal custom definition has
         been written because the @types/lodash.debounce package includes
         types for the whole of lodash.
      
         In order to use these types the `allowSyntheticDefaultImports` flag
         had to be enabled in the TS configs.
      
         A consequence of adding types for scroll-into-view is that some
         missing null checks in sidebar components were found.
      08fd737c
    • Lyza Danger Gardner's avatar
      Re-implement `.styled-text` · f090632a
      Lyza Danger Gardner authored
      Re-implement `.styled-text` in Tailwind:
      
      * Simplify as much as possible and only impose rules that directly apply
        to a block of styled text
      * Re-generate heading size scale using `type-scale.com` (previous tool
        is no longer extant)
      * Ensure that all rules operate with `em` units (proportional to
        inherited font size)
      
      A subsequent step would be to extract a styled-text reusable component.
      f090632a
  6. 08 Mar, 2022 11 commits