Commit graph

16826 commits

Author SHA1 Message Date
Adomas Venčkauskas
06eb70abda Citation Explorer: preserve group open state 2026-09-07 16:21:16 +03:00
Adomas Venčkauskas
580b9cf5bb Citation Explorer: restrict relinking to one item 2026-09-07 16:21:16 +03:00
Adomas Venčkauskas
ad90d4b76f Citation Explorer: snapshot rows before async actions 2026-09-07 16:21:16 +03:00
Adomas Venčkauskas
80b82fc953 Duplicates: allow to search for duplicates by specific item 2026-09-07 16:21:14 +03:00
Adomas Venčkauskas
5977f1c917 Duplicates: allow to run duplicate queries on multiple libraries 2026-09-07 16:18:51 +03:00
Adomas Venčkauskas
14495b5982 Citation Explorer: enable add to button on any row 2026-09-07 16:18:51 +03:00
Adomas Venčkauskas
cf058891c1 Citation Explorer: misc renaming/cleanup 2026-09-07 16:18:51 +03:00
Adomas Venčkauskas
ab849085d7 Citation Explorer: Restrict multi-select to item rows within one group 2026-09-07 16:18:51 +03:00
Adomas Venčkauskas
926305899c Citation Explorer: Group unlinked items in a pseudo-library
Remove the isLinked item-list column and introduce an Unlinked Items
container row, with a localized label in zotero.properties.

Grouped mode now activates when unlinked items are present, and selection/
activation logic explicitly targets item rows while allowing container-row
navigation.
2026-09-07 16:18:51 +03:00
Adomas Venčkauskas
7f7ccd172b Citation Explorer: adjust for refactored item tree 2026-09-07 16:18:51 +03:00
Adomas Venčkauskas
da6389ed93 Citation Explorer: Rewrite with ItemTreeRow subclasses
Replace Proxy-wrapped items and hacky rendering overrides
with proper ItemTreeRow subclasses and a custom
ItemTreeRowProvider.

- LibraryItemTreeRow: expandable container for library
  grouping with sortChildren opt-in
- CitationExplorerItemTreeRow: row with citation metadata,
  explicit id for CSL-only items, isContainer/
  isContainerEmpty overrides to suppress twisties
- CitationExplorerRowProvider: groups items by library,
  delegates sorting to base class via _sort()/_compareRows()
- CitationExplorerItemTree: custom tree with row provider

- Enable all standard columns (hidden by default) with
  column picker and persistence
- isLinked column excluded from picker via
  showInColumnPicker: false
- Remove persistColumns from citationDialog (consolidated
  into columnPicker in prior commit)
- Add .library-container-row styling
2026-09-07 16:18:51 +03:00
Adomas Venčkauskas
155d2ef75e Don't double-invalidate the windowed list
E.g. when the item count changes due to toggling open state of elements
2026-09-07 16:18:51 +03:00
Adomas Venčkauskas
68b9499bc0 Citation Explorer: Disable buttons when no selection 2026-09-07 16:18:51 +03:00
Adomas Venčkauskas
4fd753f822 Citation Explorer: minor styling changes 2026-09-07 16:18:51 +03:00
Adomas Venčkauskas
87f9173c2d Citation Explorer: Uncited item display change 2026-09-07 16:18:51 +03:00
Adomas Venčkauskas
a0735fdb2c Citation Explorer: Fix highlighting inconsistencies 2026-09-07 16:18:51 +03:00
Adomas Venčkauskas
41e0c15f04 Citation Explorer: Various styling adjustments 2026-09-07 16:18:51 +03:00
Adomas Venčkauskas
8c91198eb4 Citation Explorer: Change Date column out for Year 2026-09-07 16:18:51 +03:00
Adomas Venčkauskas
2fb4c61064 Citation Explorer: Fix item tree menu view 2026-09-07 16:18:51 +03:00
Adomas Venčkauskas
b7c5caa8ee Citation Dialog: log failures to select citation in document 2026-09-07 16:18:51 +03:00
Adomas Venčkauskas
3575dabd50 Fix splitMenuButton appearance on Linux 2026-09-07 16:18:51 +03:00
Adomas Venčkauskas
d300dd497b Citation dialog: Fix tab order 2026-09-07 16:18:50 +03:00
Adomas Venčkauskas
1ab1d34a88 Fix switching to different citation explorer view not resetting selection 2026-09-07 16:18:50 +03:00
Adomas Venčkauskas
e05696acb2 Citation explorer: Windows styling 2026-09-07 16:18:50 +03:00
Adomas Venčkauskas
2c18b3973a Citation explorer: macOS styling
- Refactor alternating row colors from item tree into virtualized table
- Adjust the way twisty and spacer are aligned for regularOnly item
  trees
2026-09-07 16:18:50 +03:00
Adomas Venčkauskas
6bd1da9036 Citation Explorer: Update per new design
Switch the layout to use grid instead of flexbox
2026-09-07 16:18:50 +03:00
Adomas Venčkauskas
376e69545b Restore tick and cross icons for citation link status 2026-09-07 16:18:50 +03:00
Adomas Venčkauskas
bcfaadde4d Fix Citation Explorer changes not saving when switching to citation dialog 2026-09-07 16:18:50 +03:00
Adomas Venčkauskas
588c4f5e5d Fix Citation Explorer breaking when library item data not loaded 2026-09-07 16:18:50 +03:00
Adomas Venčkauskas
43fce2cf4c Fix split menu button not flex-growing 2026-09-07 16:18:50 +03:00
Adomas Venčkauskas
5794d8a954 Restore split menu button fix (d96afa44, regression b2ad17d6) 2026-09-07 16:18:50 +03:00
Adomas Venčkauskas
623218028c fx128: Remove Service.jsm load in Citation Explorer 2026-09-07 16:18:50 +03:00
Adomas Venčkauskas
e45659f62c Add a hidden pref to enable citation explorer on google docs 2026-09-07 16:18:50 +03:00
Dan Stillman
fc17dcd24a Tell the user to set up syncing again if credentials can't be decrypted
Some checks failed
CI / Build, Upload (push) Has been cancelled
CI / Detect changes (push) Has been cancelled
CI / Utilities Tests (push) Has been cancelled
CI / Test () (push) Has been cancelled
CI / Test (macOS NFS) (push) Has been cancelled
CI / Test (Windows arm64) (push) Has been cancelled
CI / Test (Windows x64) (push) Has been cancelled
If the keystore's secret is replaced -- say, after a keyring reset --
the stored value won't be able to be decrypted again, so tell them to
try logging in again instead of trying to fix their keyring.

https://forums.zotero.org/discussion/133603/
2026-09-04 18:12:31 -04:00
Dan Stillman
1086d80cec Update reader submodule 2026-09-04 16:06:00 -04:00
Dan Stillman
92dfac8c64 Don't make an unloaded tab reopenable with Undo Close Tab
unload() closes and re-adds the tab, and the close recorded an undo-close
history entry, so Undo Close Tab could open a duplicate of a tab that was
still open.
2026-09-04 15:30:33 -04:00
Dan Stillman
e88b7ee10f Don't clear the hidden flag when refreshing retractions data
_addEntry() wrote the row with REPLACE INTO, listing only itemID and
data, so flag reverted to its default of 0. It's called for every match
on every update, not just new ones, so a retraction the user had hidden
came back as soon as the list changed and Zotero restarted.
2026-09-04 15:07:15 -04:00
Dan Stillman
53bcd30a5f Don't report a window's observers as leaked while it's still closing
A window is marked as closed before its unload handlers run, so the tab
events fired from ZoteroPane.destroy() warned about every observer that
the closing window hadn't torn down yet. The leak check now also requires
the window to be detached from its docShell, and it covers functions. It
caught an observer that outlived its window -- the sync-reminder API key
observer, which is now unregistered on teardown.
2026-09-04 14:40:24 -04:00
Dan Stillman
22a1b33a42 Remove library tree event listeners on teardown
Listeners added to the item and collection trees' event bindings
survived unregister() and held ZoteroPane and the views for as long
as the tree objects did. makeClassEventDispatcher() now provides
clearEventListeners(), which the trees call on unregister, so callers
don't need to remove their own listeners. The collection tree focus
listener, a plain DOM listener, is removed in destroy().
2026-09-04 14:28:11 -04:00
Dan Stillman
0e46a5356b Fix tag selector observer leaks on uninit
Hiding the tag selector destroyed the TagSelectorContainer but left
its media-query listener registered, keeping the destroyed instance
alive for the lifetime of the window and firing setState() on the
unmounted component when the display density changed. The fontSize
pref observer id was also overwritten by the uiDensity registration,
so it was never unregistered.
2026-09-04 14:28:11 -04:00
Dan Stillman
d0a32a3b4f Poll for expected tag selector state in flaky tests
Selecting a collection doesn't wait for the tag selector to re-render,
so waitForTagSelector() could be resolved by the initial render instead
of the awaited change, and the assertions could run against a stale tag
list.
2026-09-04 14:28:11 -04:00
Dan Stillman
b3b6e7f33d Reopen closed reader and note tabs at their original position
The undo-close hooks read the index from the wrong object, so reopened
reader and note tabs were always appended at the end.
2026-09-04 14:24:47 -04:00
Dan Stillman
4d94810def Don't send a conditional request for an invalidated retractions cache
The cached retractions list is saved with the current data version from
the code, which we can bump to make clients discard their cached data
and refetch it. We've never actually done that, but if we did, it
would've hit a bug: init() would've started the refetch but still sent
the cached ETag, so if the list itself hadn't changed, the server
would've returned 304 and nothing would have been updated. The stale
version then would have survived, so the refetch would have been retried
on every startup.
2026-09-04 13:27:12 -04:00
Dan Stillman
54cea6cc37 Update Retraction Watch reason descriptions
Retraction Watch has renamed, merged, and added reason terms since these
were added, leaving only 65 of the 102 entries matching a term still in
use. 90% of retracted items had at least one reason that didn't show a
description, and 21% showed none at all. Rebuilt from the current
Appendix B list, which covers every reason in the data.
2026-09-04 13:12:43 -04:00
Dan Stillman
f3810befde Show file access error for NS_ERROR_FILE_FS_CORRUPTED
Windows returns this for ERROR_FILE_CORRUPT/ERROR_DISK_CORRUPT. It's not
in xpc.msg, so the exception has an empty name and isn't in
Components.results, and it was falling through to the generic file sync
error instead of the file access error with the path. Show a message
about the reported corruption in place of the usual permissions advice.

https://forums.zotero.org/discussion/133592/
2026-09-04 12:37:49 -04:00
Jakob Nylin
e3da52bebc
Match duplicate books by ISBN-10/13 equivalence (#6028)
---------

Co-authored-by: Dan Stillman <dstillman@zotero.org>
2026-09-03 12:42:04 -04:00
Martynas Bagdonas
9086156a91 Update document-worker submodule 2026-09-03 18:20:11 +03:00
Dan Stillman
e56fad828d Throw from removed selection methods in pre-release builds
The shims from 5697ee0af7 keep old plugins working for users, but
beta/dev/source builds should still throw to get the attention of
developers and (hopefully breakage-tolerant) beta users.
2026-09-02 22:34:19 -04:00
Dan Stillman
0e00c1ce51 Center single-paragraph items pane status messages when they wrap
Status messages were left aligned for the multi-paragraph intro text,
but in a narrow window, that made single lines that wrapped sit
off-center, so center those instead.
2026-09-02 22:16:13 -04:00
Dan Stillman
5697ee0af7 Shim removed selection methods when a single row is selected
Plugins written for earlier versions call methods like
CollectionTree#getSelectedSearch(), which now throw. We did this
intentionally to make old code more obviously broken, even with single
selection, so developers would fix their code, but we're not yet
blocking plugins that illegitimately declared compatibility with a
future version, so some haven't been updated and are breaking Zotero.
With a single row selected, the pre-10 functions can technically
continue to work, so for now, restore them and just warn and name the
plugin instead of throwing. They still need to throw if multiple rows
are selected, since plugins that haven't been updated can't safely act
on a selection that might span collections or libraries.

https://forums.zotero.org/discussion/133565/
2026-09-02 22:16:13 -04:00