1. 26 Mar, 2021 5 commits
    • Lyza Danger Gardner's avatar
      91fa33cd
    • Lyza Danger Gardner's avatar
      Add shared buttons components · f503edcc
      Lyza Danger Gardner authored
      Add shared button components in a temporary "shared/components"
      directory. The plan is to extract this to the `frontend-shared` package
      once it has been more further integrated into the client preact app(s)
      and the kinks are worked out. This will replace
      `src/sidebar/components/Button` and will be reusable in other apps
      f503edcc
    • Lyza Danger Gardner's avatar
      Update project typecheck configuration · a8bcbc96
      Lyza Danger Gardner authored
      Update project typecheck configuration so that typechecking may be
      additionally applied to the `dev-server` area of the project. This helps
      for typechecking usage of components in the "UI Playground" app.
      
      * Add `tsconfig.json` for `dev-server` area of project
      * Add "project references" at root level
        See https://www.typescriptlang.org/docs/handbook/project-references.html
      * Update `package.json` `typecheck` script
      a8bcbc96
    • Robert Knight's avatar
      Extract side-by-side functionality out of PdfSidebar class · 793d289c
      Robert Knight authored
      Move the functionality that PdfSidebar implements elsewhere and remove
      the class. This mainly consists of side-by-side mode, but there is also
      the logic to get the scrollable document container for use with the
      bucket bar. The PDF-specific logic has been moved to the `PDF` class in
      `src/annotator/plugin/pdf.js` and the generic logic has been moved to
      the `Sidebar` or `Guest` classes.
      
      This change is a step towards creating an common interface between the
      Guest/Sidebar and the document-type/viewer specific functionality. In
      future the `PDF` class will evolve into the implementation of this
      interface for PDFs. For HTML documents the logic is currently contained
      directly in the `Guest` class and this will be extracted out into a
      class that implements the same interface.
      
       - Move the PDF-specific parts of side-by-side mode into
         `PDF#fitSideBySide`
       - Move the generic parts of side-by-side mode into the `Sidebar` class.
         This will allow it to be reused for HTML documents or other document
         types in future
       - Move the logic for determining the scrollable container into
         `PDF#contentContainer`
       - Change the annotator setup code in `annotator/index.js` to always
         instantiate the `Sidebar` class, regardless of document type
      793d289c
    • Eduardo Sanz García's avatar
      Position the adder to the top-left corner on hide · b2b33c2e
      Eduardo Sanz García authored
      When the `adder` is hidden reposition the outer container to the
      top-left corner of the host page.
      b2b33c2e
  2. 25 Mar, 2021 3 commits
  3. 24 Mar, 2021 2 commits
    • Kyle Keating's avatar
      Change thread sorter "Newest" & "Oldest" to use created · 37497780
      Kyle Keating authored
      This changes the sorting in the notebook to sort by date created rather than last edited date ("updated"). This prevents root threads from resorting to the top after they are edited in the notebook.  This also changes the way the sidebar orders root threads when using Newest/Oldest sorting filter in the same manner.
      37497780
    • Eduardo Sanz García's avatar
      Move creation of the outer container element to `Adder` · 2d9b0253
      Eduardo Sanz García authored
      `Notebook` and `Sidebar` components create `<hypothesis-...>` elements
      that attach shadow DOMs. This PR makes the `Adder` class responsible of
      creating its own outer element.
      2d9b0253
  4. 23 Mar, 2021 3 commits
    • Eduardo Sanz García's avatar
      Reload iframe on every `openNotebook` event · 0606bbcf
      Eduardo Sanz García authored
      While there is no mechanism to sync new annotations in the notebook, we
      force re-rendering of the iframe on every 'openNotebook' event, so we
      fetch the new annotations.
      
      This is a temporary fix that is intended to be removed.
      0606bbcf
    • Lyza Danger Gardner's avatar
      Update playground app · 599df082
      Lyza Danger Gardner authored
      Add some pattern structure to the playground app and a
      placeholder "Menu" demo
      599df082
    • Eduardo Sanz García's avatar
      Added accessibility tests to notebook components · d7a2a4e8
      Eduardo Sanz García authored
      Added a11y tests to these components:
      
      - NotebookView
      - FilterSelect
      - NotebookResultCount
      - PaginationNavigation
      
      To following components I didn't add a11y tests because they are
      wrappers of one or several components already tested:
      
      - PaginatedThreadList (ThreadList + PaginationNavigation)
      - NotebookFilters (FilterSelect)
      d7a2a4e8
  5. 22 Mar, 2021 9 commits
  6. 19 Mar, 2021 3 commits
  7. 18 Mar, 2021 7 commits
  8. 16 Mar, 2021 8 commits
    • Robert Knight's avatar
      Rename `pageSize` => `getPageSize` · 5ae245d8
      Robert Knight authored
      Per PR feedback, rename the `pageSize` option to something that sounds more like a
      function/callback, which is what this value now is.
      5ae245d8
    • Robert Knight's avatar
      Optimize perceived loading time by varying /api/search page size · 9c96e1fe
      Robert Knight authored
      When fetching annotations from the backend there is a trade-off between
      the time taken to generate a page (less if the page size is smaller) and
      the time taken to fetch all pages (less if the page size is larger).
      
      To optimize the perceived loading time we can pick a smaller page size
      for the first page, enabling the first screenful of annotations/threads
      to appear quickly, and then use a larger page size for the remaining
      pages.
      
       - Change the `pageSize` option for `SearchClient` from a fixed number
         to a callback that returns the page size for a given page index
      
       - Set the default value for the `pageSize` option to use a small page
         size (50) for the first page and a larger size (200) for remaining
         pages
      9c96e1fe
    • Robert Knight's avatar
      Use "page" rather than "chunk" or "batch" in SearchClient · 0727d13b
      Robert Knight authored
      Consistently use the term "page" to refer to a subset of results fetched
      from the search API instead of "batch" or "chunk". This is more
      consistent within the rest of the client code and also consistent with
      the API documentation.
      
       - Rename `chunkSize` constructor argument to `pageSize`
       - Change internal references to "batch" or "chunk" in SearchClient to
         "page"
      0727d13b
    • Eduardo Sanz García's avatar
      Improved string formatting of the client's version · d53e4c34
      Eduardo Sanz García authored
      Reordered fields according to the UI and capitalised properties.
      d53e4c34
    • Eduardo Sanz García's avatar
      Preserve line breaks on copy command · 1e202a16
      Eduardo Sanz García authored
      I have tested successfully on the latest version of Chrome, Safari and
      Firefox. I also tested successfully on an Android and iOS devices.
      
      I couldn't tested more exhaustively on other desktop/mobile browser
      versions because SauceLabs didn't allowed me to retrieve the pasted
      text.
      
      Closes https://github.com/hypothesis/product-backlog/issues/1180
      1e202a16
    • Robert Knight's avatar
      Reword comment about optimistically set group ID · 23a84ffa
      Robert Knight authored
      Reword this comment to try and make the intent of the code clearer.
      23a84ffa
    • Robert Knight's avatar
      Improve comments for `load` method in `loadAnnotationsService` · 5445ad58
      Robert Knight authored
      It is safe to call `load` while annotations are already being loaded,
      in that it does all the necessary cleanup/interruption of the existing
      fetch. However it wasn't immediately clear to me from the code that this
      was the case.
      5445ad58
    • Robert Knight's avatar
      Fetch annotations in parallel with groups and profile where possible · 1d00a99b
      Robert Knight authored
      Currently both the sidebar and notebook wait until the user's profile and groups are
      fetched before fetching annotations. This is because the search query to
      fetch annotations depends on the focused group. The groups query may
      take several hundred ms to complete, so this ends up delaying the
      initial fetch and display of annotations by that amount of time.
      
      In the notebook the common case is that the user is already logged in
      and the notebook is configured to display a specific group ("the direct
      linked group"): whatever the user had previously selected in the sidebar.
      In this scenario it is very likely that the direct-linked group will end
      up being the focused one after groups are fetched.
      
      Based on these assumptions, we can speed up the initial annotation by
      loading annotations from the direct-linked group. If the focused group
      ends up being different, annotations will just be re-fetched from the
      correct group once that is known.
      1d00a99b