Closes#2265
There's also new code for showing a different icon for snapshots, files,
and DOI/URL links, like the web library and iOS app, but it's commented
out for now. The bitmap icons create too much visual noise with the
greater information density and hierarchical tree of the desktop app
(not to mention many more low-DPI displays). We can revisit after
switching to SVGs across the board.
Cmd/Ctrl-Shift-T is now used for reopening a closed tab
This is now a View menu option, so macOS users can assign an
app-specific shortcut key for it. For other platforms that can't do
that, Zutilo could add it, and it will be an option if we add general
key-binding configurability in a future version.
Closes#2281
So that this works for PDFs with external annotations that haven't yet
been processed. Going forward, if we add automatic/background scanning,
we can avoid showing this option if the file hasn't changed and there
are no Zotero annotations, which would probably be the majority of
attachments.
Addresses #2268, but better support for other en-* locales will require
other changes, including `timeStyle` support in `Intl.DateTimeFormat` in
a newer Firefox version, which will let us use a custom `DateTimeFormat`
for dates instead of relying on `toLocaleString()`.
Previously only individual objects from successful requests that
couldn't be processed for some reason would be added to the queue.
`Sync.APIClient.downloadObjects()` now returns clearer and more
consistent results. It now returns an array of promises for objects with
a `keys` array of requested keys and either a `json` array of returned
API JSON objects or an `error` Error, depending on whether the request
succeeded or failed. This makes it easier to detect remotely missing
objects and request failures.
This includes the `Zotero.RDF.getResourceURI()` fix in
zotero/translate@85b39a5be.
This position change here for `this._handleRelated()` for attachments
isn't necessary, since the attachment is already saved and already has
an id, but it's done for consistency with the call for notes (where the
note previously didn't yet have an id).
Institutional login process goes through multiple pages, the URL regexp
is tweaked to be more precise to ensure that no arbitrary URLs are
matched while polling for the final URL with auth code.