Commit graph

297 commits

Author SHA1 Message Date
Dan Stillman
bdd44e9a44 DB isolation changes and item selection tweaks
- Add an 'exclusive' option to transactions that causes them to block other
  transactions and wait for other transactions to finish before starting,
  instead of nesting
- Resolve Zotero.DB.waitForTransaction() promise before returning from
  executeTransaction()
- A side effect of the above: wait for a newly created item to be selected in
  the middle pane and rendered in the right-hand pane before returning from
  executeTransaction()
- Don't save items multiple times when adding/removing a non-final creator in
  the Info pane
- Use a simpler, non-recursive method for focusing the next field in the Info
  pane; this prevents "too much recursion" errors if something causes the
  right-hand pane not to be rendered when expected
2015-05-04 02:45:55 -04:00
Dan Stillman
afe0412c58 Collection/item tree view updates
- Pass .skipSelect option to data object .save() to prevent new objects
  from being selected
- Fix miscellaneous bugs
- Selection-related tests
2015-05-04 02:43:32 -04:00
Dan Stillman
fbef911cb7 Add wizard for My Publications
Show a wizard after items are dragged to My Publications choosing
whether to include files and notes and choosing sharing settings for the
items. Sharing options are Creative Commons licenses, CC0, "All rights
reserved", or keeping the existing Rights field if available.

Also blocks collections, searches, linked file attachments, and
top-level attachments/notes from My Publications at the data layer, but
not yet from the UI in all places (so it can crash if you try).

Todo:

- Block certain UI actions with nice messages
- Show a nice scrollable list of items in the wizard to allow selecting
  specific files/notes, instead of just having checkboxes for files and
  notes that apply to all dragged items
- Show an explanation of My Publications in the right-hand pane when no
  items are selected
- Maybe adjust handling when no attached files/notes, since it might be
  a bit alarming at the moment to see sharing options for metadata
  entries
2015-04-26 19:41:45 -04:00
Dan Stillman
311ed7a71d Fix some old-style generators passed to executeTransaction()
And some missing yields
2015-04-26 18:08:25 -04:00
Dan Stillman
bdd69d0a53 Merge branch '4.0' into api_syncing 2015-03-16 23:41:10 -04:00
Dan Stillman
a03772cae7 Merge branch 'master' into api_syncing
Note that this loses conflicting changes to translate_item.js from 849803473a,
so those will need to be reapplied if applicable. /cc @aurimasv, @mtd91429
2015-03-16 15:23:07 -04:00
Dan Stillman
bf36a988e4 Initial My Publications support
Adds a "My Publications" source after "My Library", implemented as a
separate library. Top-level items can be dragged in and removed.

(This doesn't currently work without disabling Quick Copy.)

Also:

- Make "Group Libraries" an unselectable header instead of a container,
  and don't indent group libraries
- Fix relation purging, which maybe never worked
- Pass only libraryID/key on deletes (which should speed them up)
- Fix async item cloning/copying
- Fix miscellaneous other bugs

To-do:

- Confirmation dialog on drag
- API support
2015-03-16 12:18:54 -04:00
Dan Stillman
ba2a16531b Add "Show Item in Library" button to note-too-long window
TODO: other too-long errors
2015-02-19 17:44:35 -05:00
Aurimas Vinckevicius
9574e56ad6 Convert itemType to itemTypeID in itemTreeView.js, not items.js
itemType comes from the column name in the tree view, so it makes most sense to do it there. Otherwise, Zotero was complaining about invalid field somewhere
2015-01-29 19:31:54 -06:00
Dan Stillman
0fd0da2903 Fix "getItemAtRow(...) is undefined" error for some item modifications
Since 67c63a29
2014-12-01 16:51:11 -05:00
Dan Stillman
67c63a2968 Remove child items from view when removing parent
https://forums.zotero.org/discussion/42218/
2014-11-28 16:37:40 -05:00
Dan Stillman
55068a0059 Use the whole firstCreator string in sortCreatorAsString mode
And in the default mode, use the whole string up through 'and' or 'et al.'
before falling back to full creator sorting, which could speed things up
slightly.
2014-11-26 20:12:07 -05:00
Dan Stillman
5c94119c70 Fixes duplicates view for async DB
It's way too slow, though, since the whole list is regenerated after
merging.

Fixes #519

Also:

- The arguments to Zotero.Item.prototype.clone() have changed, and it no
  longer takes an existing item or copies primary data. To create an
  in-memory copy of an item, use the new Zotero.Item.prototype.copy().

- Zotero.Item.prototype.getUsedFields() now gets in-memory fields rather
  than the fields in the database
2014-10-10 04:49:39 -04:00
Dan Stillman
e2d3cc3f0d Update zotero://select to use new URLs and wait for items list load
Closes #541
2014-09-23 01:13:38 -04:00
Dan Stillman
9db4927f78 Scroll to new collections, and stay on same row when deleting collections 2014-08-12 22:19:59 -04:00
Dan Stillman
c729dc8a54 Fixes #522, [Async DB] Quick Copy is broken
Export depends on #520 (but still with a synchronous interface, somehow)
2014-08-12 21:49:30 -04:00
Dan Stillman
f5896dbb8d Remove synchronous database methods
This required doing additional caching at startup (e.g., item types and fields)
so that various methods can remain synchronous.

This lets us switch back to using the current Sqlite.jsm. Previously we were
bundling the Fx24 version, which avoided freezes with locking_mode=EXCLUSIVE
with both sync and async queries.

Known broken things:

  - Autocomplete
  - Database backup
  - UDFs (e.g., REGEXP function used in Zotero.DB.getNextName())
2014-08-09 18:10:32 -04:00
Dan Stillman
380668cc60 Changes to item and file retrieval methods
- Zotero.Item.prototype.getFilePath() is now synchronous, with a separate async getFilePathAsync()

- getFile() no longer takes a skipExistsCheck parameter, since that shouldn't happen synchronously

- Zotero.Items.getByLibraryAndKey() is now synchronous again, with a
  separate Zotero.Items.getByLibraryAndKeyAsync() - I haven't fully
  tested this, so I'm not sure if there will need to be any async
  calls.

- Some of the full-text indexing functions now take file paths instead of nsIFile objects

- Zotero.File.getContentsAsync() can now take a string path as well
2014-08-08 17:43:26 -04:00
Dan Stillman
db0fa3c33e Async DB megacommit
Promise-based rewrite of most of the codebase, with asynchronous database and file access -- see https://github.com/zotero/zotero/issues/518 for details.

WARNING: This includes backwards-incompatible schema changes.

An incomplete list of other changes:

- Schema overhaul
  - Replace main tables with new versions with updated schema
  - Enable real foreign key support and remove previous triggers
  - Don't use NULLs for local libraryID, which broke the UNIQUE index
    preventing object key duplication. All code (Zotero and third-party)
    using NULL for the local library will need to be updated to use 0
    instead (already done for Zotero code)
  - Add 'compatibility' DB version that can be incremented manually to break DB
    compatibility with previous versions. 'userdata' upgrades will no longer
    automatically break compatibility.
  - Demote creators and tags from first-class objects to item properties
- New API syncing properties
  - 'synced'/'version' properties to data objects
  - 'etag' to groups
  - 'version' to libraries
- Create Zotero.DataObject that other objects inherit from
- Consolidate data object loading into Zotero.DataObjects
- Change object reloading so that only the loaded and changed parts of objects are reloaded, instead of reloading all data from the database (with some exceptions, including item primary data)
- Items and collections now have .parentItem and .parentKey properties, replacing item.getSource() and item.getSourceKey()
- New function Zotero.serial(fn), to wrap an async function such that all calls are run serially
- New function Zotero.Utilities.Internal.forEachChunkAsync(arr, chunkSize, func)
- Add tag selector loading message
- Various API and name changes, since everything was breaking anyway

Known broken things:

- Syncing (will be completely rewritten for API syncing)
- Translation architecture (needs promise-based rewrite)
- Duplicates view
- DB integrity check (from schema changes)
- Dragging (may be difficult to fix)

Lots of other big and little things are certainly broken, particularly with the UI, which can be affected by async code in all sorts of subtle ways.
2014-08-06 22:59:37 -04:00
Dan Stillman
4ea5e2d426 Update code to use 0 instead of NULL for libraryID 2014-08-06 22:14:59 -04:00
Dan Stillman
15108eea3f Fix intermittent source file deletion when dragging files in on Windows
(at least, if this is caused by what I think it was caused by)

https://forums.zotero.org/discussion/38486/
2014-07-20 15:56:55 -04:00
Dan Stillman
b8f69d6281 Fix Quick Copy drag to Chrome textareas on Windows
Possibly to other places as well (but not Notepad, which doesn't work
from Firefox or Chrome either)

Unfortunately this requires going back to 'copy' cursor feedback when
dragging, even when Shift is used. We can only choose one on Windows (as
far as I can tell), and we were previously using the unadorned 'move'.
2014-07-20 02:16:25 -04:00
Dan Stillman
072ae245d9 Use base-mapped dates for sorting (broken in dd477e15) 2014-05-26 19:13:21 -04:00
Dan Stillman
dd477e15b8 Configurable secondary sorting and other improvements
- Each column in the middle pane can now have its own persistent
  secondary sort column, configurable from a new submenu in the column
  picker menu (top right of items list). The settings are stored in
  extensions.zotero.secondarySort.[primaryField]. The submenu title
  includes the current primary field (e.g., "Secondary Sort (Creator)"),
  which is pretty weird, and I'm not sure I want to keep it, but it does
  convey that the setting is specific to the selected column.

- The fallback sort fields (firstCreator, date, title, dateAdded) are
  now configurable via the extensions.zotero.fallbackSort. Setting that
  pref to an empty string avoids all fallback sorts, which
  allows reverse-order clicking to set the order, as requested by
  @aurimasv in #275.

- The previous behavior of sorting based on the exact Creator string
  (rather than the actual creators) can now be restored with the
  extensions.zotero.sortCreatorAsString pref. (It simply circumvents all
  the newer code, so it's pretty safe.) This setting should result in
  faster sorting in large libraries that have many items with the same
  Creator string.

- Some of the lesser fields in the column picker menu are now in the
  More Columns submenu (which is now alphabetical)

- The "Type" column is now the less-ambiguous "Item Type".

- This uses a different method to modify the column picker menu that is
  simultaneously less and more hacky. (It no longer has to duplicate
  Mozilla code in a custom XBL binding that wouldn't reflect future
  upstream changes, and instead it bushwhacks its way through various
  boxObject properties to get to the underlying menupopup.)
2014-05-07 05:15:07 -04:00
Dan Stillman
156f4eb160 Allow items to be moved (not copied) between collections w/modifier key
Cmd on OS X, Shift on Windows/Linux

How do I not get to close a ticket for this?

Unfortunately on Windows it doesn't seem possible to set the cursor
effect to arbitrary states (see note in libraryTreeView.js::
_setDropEffect() for the gory details), so this just uses the default
cursor there. On OS X and Linux the cursor reflects the requested
action.
2014-05-03 11:52:38 -04:00
Dan Stillman
fe1bedcb8d Fix hang navigating by keyboard in Add Citation after switching views
https://forums.zotero.org/discussion/35658/
2014-03-24 16:31:53 -04:00
Dan Stillman
1e0674cf7c Fix some bugs adding items to various views
- Refresh Unfiled Items view when items are added
- Fix brief freeze ("too much recursion") adding an item to a search
  where the new item doesn't appear. Now, select the library root
  instead if a manually added item doesn't appear in the current view.
- Fix immediate closing of title field when adding an item to a
  collection rather than the library root
2013-11-21 19:52:13 -05:00
Aurimas Vinckevicius
3d1df82836 Don't attempt to select items that are not in the item tree 2013-11-04 14:15:57 -06:00
Dan Stillman
571dfc551c Fix colored tags in group libraries
Pressing the number keys was pulling in colored tags from "My Library".
2013-11-04 05:23:03 -05:00
Dan Stillman
6eb354bf36 Fix cursor feedback for file drag-in on Linux, where we can set it 2013-09-03 04:49:02 -04:00
Dan Stillman
82769f0b9c Allow moving (instead of copying) files into Zotero
Cmd-drag on OS X, Shift on Windows and Linux

As requested in
https://forums.zotero.org/discussion/31717/delete-source-file-on-import/

Unfortunately due to https://bugzilla.mozilla.org/show_bug.cgi?id=911918
(and another issue on Windows) we can't show proper cursor feedback for
external file drags.
2013-09-03 04:25:35 -04:00
Dan Stillman
675fde2f1a Use async I/O for attachment (blue dot) column file check in Fx23+ 2013-08-05 16:31:23 -04:00
Dan Stillman
1267c4d659 Closes #77, Create linked files with drag and drop
The cursor effect doesn't work reliably anywhere other than on Linux,
but external files can now be linked instead of stored with
Cmd-Option-drag on OS X and Ctrl-Shift-drag on Win/Linux.
2013-08-03 18:08:09 -04:00
Dan Stillman
30a0bbcca2 Fix conflict with Cmd-Shift-A, and probably other third-party shortcuts
The Zotero shortcut keys, and their event.preventDefault(), were bound
to keydown, so shortcuts bound to keypress were still be called. This
moves most of the shortcut handling code into the keypress handler.

Fixes #344
2013-07-02 02:43:53 -04:00
Dan Stillman
44ea578fd5 Fix updating of item type icon when changing types (broken by 6b7fe80) 2013-04-22 20:07:02 -04:00
Dan Stillman
6b7fe8053a Fix UI update when adding/removing colored tags in search modes
https://forums.zotero.org/discussion/28827/404-colored-tag-search-results/
2013-04-21 03:06:35 -04:00
Dan Stillman
41e2f3008e Sort empty titles last when title isn't primary sort
When sorting by Title, empty titles get sorted to the top of the items
list for visibility, but when sorting by another column and using the
title as a secondary/tertiary sort, empty titles should get sorted last
so that new empty items go to the end of the list rather than the
middle.

This is a little weird, and the alternative would be to just always sort
empty titles last even when sorting by Title, but this preserves the
current behavior for Title sorting. (Before f0f6772b01 titles weren't
used for secondary sorting at all, so there's no precedent for
title-sorting behavior when sorting by another column.)

Addresses #275
2013-03-19 15:59:40 -04:00
Dan Stillman
d69dc3d5a7 If Year column is visible and not Date, don't sort by full date
Otherwise use full date, even if Date column is hidden

Addresses #275
2013-03-19 15:42:39 -04:00
Dan Stillman
b1f80a3615 Use dateAdded rather than dateModified for final fallback sort
Addresses #275
2013-03-19 06:00:11 -04:00
Dan Stillman
f0f6772b01 Sort by title after creator and date, if not primary sort
Addresses #275
2013-03-19 05:16:31 -04:00
Dan Stillman
0853dbc070 Fix problem with items list scrollbar size between views
Caused by 2cd45be191, though not sure why it's happening.
2013-03-17 16:12:46 -04:00
Dan Stillman
36eae6ad00 Update child attachment order when renaming attachment
Also show "1" next to child attachments with embedded notes
2013-03-17 03:14:29 -04:00
Dan Stillman
2b4f2e3a0f Merge branch '3.0' into 4.0 2013-03-15 17:01:44 -04:00
Dan Stillman
d726ce41fa Fixes incorrect post-edit scrolling
Fixes #268, broken in 2cd45be191

Post-edit scrolling can probably be smarter, but this fixes the brokenness.
2013-03-15 16:56:55 -04:00
Dan Stillman
a1197883bb Disable key navigation on 1-6 keys if any tag colors are assigned
Previously any unused numbers were still available for key navigation, but I
think it's too easy hit the wrong key that way, and getting moved to another
part of the items list is annoying.
2013-03-15 14:09:31 -04:00
Dan Stillman
0191601f9f Fix items tree styling (context rows, attachment pies) in Fx22+ 2013-03-13 00:00:27 -04:00
Dan Stillman
1217a5409e Fix Control (and Alt) key shortcuts in items pane on Windows
Follow-up to d2f028d and 0a7cc4448
2013-03-12 02:13:35 -04:00
Dan Stillman
6ea38df873 Don't sort Year column by full date 2013-03-06 16:41:02 -05:00
Dan Stillman
0a7cc44481 Fix Select-All on Windows (broken by d2f028d) 2013-03-06 04:52:27 -05:00
Dan Stillman
b0a71467ea Fix sorting of top-level attachments in attachments column
Also hide the attachments column by default in the select-items dialog
2013-03-03 06:23:43 -05:00