- Make badges draggable with the mouse
- Replace Insert and Replace modes with a single Apply action
- Add a hint for the keyboard shortcut
- Reorganize directory structure
* track-changes: enforce write and review permissions on review actions
- Toggling track changes and accepting changes need write access
- Resolving, reopening and deleting a thread use ensureUserCanDeleteOrResolveThread
- Deleting a reply needs write or review access, and reviewers may only delete their own replies
* track-changes: leave the reviewer own-reply check out of deleteMessage
- Deleting a reply is limited by the route only, so reviewers can still delete any reply
* track-changes: list ranges of all docs in the review panel Overview
GET /project/:project_id/ranges returned document-updater's
/project/:id/ranges, which only covers docs currently loaded in Redis.
Comments and tracked changes in any doc nobody had opened since it was
last unloaded (or since document-updater restarted) were missing from
the Overview tab until that file was opened.
Flush the project's loaded docs to docstore first (POST
/project/:id/flush writes them back without unloading them), then read
the ranges of all non-deleted docs from docstore. After the flush
docstore is complete and current, so there is nothing to merge; this is
simpler than overlaying document-updater's live ranges on docstore's.
The response keeps the shape the frontend decodes ([{ id, ranges }]),
and docs without ranges get {} as document-updater returned for them.
The flush makes the request cost proportional to the number of loaded
docs with unflushed changes, and docstore unarchives the project's docs
if they were archived; on very large projects opening the Overview may
therefore be slower than before.
* track-changes: flush before listing tracked change authors
getChangesUsers read docstore directly. A tracked change still in
document-updater (not yet flushed to Mongo) was not seen, so the review
panel could not name its author once they left the project. Flush the
project first, as getAllRanges does since the previous commit.
Reported in ayaka-notes/ayakaleaf-pro#108.
Suspended users cannot log in to web, but their git-bridge personal
access tokens kept working for clone/pull/push. Treat a token whose
owner is suspended like an unknown token in GitBridgePATManager.getUserId,
which backs both /oauth/token/info and the token checks on the
/api/v0/docs routes, so git-bridge gets a 401.
registerNewUser() requires analyticsId (UserCreator throws
'bug: attributes.analyticsId is missing'), so every sign-up through the
registration-page module failed with a 500. Same fix as #208 for admin-tools.
Fixes#255
- do not show the project owner, email and connections number columns
- add mailto: all active users of a project when clicking the project title
- fix error handling
- use OAuth instead of tokens
- add an integration card
- improve error handling
- add BibLaTeX format support
- fix indexing of linked .bib files on creation