Commit graph

133 commits

Author SHA1 Message Date
Dan Stillman
fec43f1f62 Merge branch '4.0' into api_syncing 2015-04-13 02:01:43 -04:00
Dan Stillman
f5ce2d238e Fixes #546, Advanced search : match "any" is broken 2015-04-09 02:57:29 -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
1c8abf3841 Change user library from 0 to 1
0 allowed for some accidental behavior due to old code expecting NULL,
and it prevented easy checks (``if (!libraryID)``) for a passed
libraryID. Code now uses Zotero.Libraries.userLibraryID instead of a
hard-coded value (except in schema.js). Functions can still make
libraryID optional, but they should then use
Zotero.Libraries.userLibraryID if that's to mean the user library.

There might be some code that still expects 0 that I missed.
2015-03-16 12:16:05 -04:00
Dan Stillman
8499ec6211 Allow extra data for single-object notifications to be passed directly
Previous it had to be keyed by id (and still can be, but if there's only
a single id the notifier will now key it automatically)
2015-01-28 17:25:17 -05:00
Aurimas Vinckevicius
7f5555aab6 Inheritance-based Zotero.DataObjects 2015-01-26 15:46:49 -06:00
Aurimas Vinckevicius
adab8e45a7 Additional tweaks to DataObject & descendents to support inheritance 2015-01-19 11:16:15 -06:00
Aurimas Vinckevicius
9f535e0e91 Use Zotero.extendClass for inheritance 2015-01-19 10:37:22 -06:00
Aurimas Vinckevicius
f7220378dd Pass fixGaps to Zotero.Search.save() in an options object 2015-01-19 10:36:42 -06:00
Aurimas Vinckevicius
e02945b591 Add a centralized, modular .save() method to DataObject
.save calls ._initSave(), _saveData(), _finalizeSave() internally passing `env` object to each to act as an environment for passing around variables
* _initSave should determine if the save is possible and return a promise for either `true` or `false`. It should also set up the environment, e.g. determine if this `isNew`
* _saveData performs the actual saving to the database, but should not do any terminal steps in the save process so that any extending classes could extend this method to write additional data to the database
* _finalizeSave should perform any finalization before the data is committed to the database.

_recoverFromSaveError is called with `env` and an error that occurred. This method should perform any recovery steps, e.g. discarding the save and reloading the item from the database into the cache.
2015-01-19 10:36:42 -06:00
Aurimas Vinckevicius
4657c46d4b getClassForObjectType => getObjectsClassForObjectType 2015-01-19 10:36:41 -06:00
Aurimas Vinckevicius
c222a3248a Transition __defineGetter/Setter__ to Zotero.defineProperty 2015-01-19 10:36:41 -06:00
Dan Stillman
950302d8ee Merge pull request #507 from f-mb/quick-search-for-civil-law-case
Allow QuickSearch to search for civil law cases
2014-12-15 19:43:58 -05:00
Aurimas Vinckevicius
bd87bd3f56 Normalize all user and translator input to NFC
This includes storing values into DB and performing searches. Note that export/display of existing data is not normalized. We can try to capture all access points to the database and normalize on output, but that seems like a lot of unnecessary normalization happening all the time. Would probably be best to just normalize existing data.
2014-11-23 13:55:01 -06:00
Aurimas Vinckevicius
aca15c0d2d Fix deleting saved searches 2014-11-14 01:50:02 -06:00
Aurimas Vinckevicius
bc8a340c30 Virtualize data objects 2014-10-29 23:51:43 -05: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
ce6cba7974 Don't log stack trace for getString() failure unless unexpected 2014-09-19 15:52:53 -04:00
Dan Stillman
c917d9e30e Use only keys for collections and saved searches in search conditions
Previously, 'collection' and 'savedSearch' conditions used
"[libraryID]_[key]" format. Now, the condition should contain only a
key, and the libraryID will be drawn from either the search itself or a
libraryID search condition. Old-style conditions are still parsed if
provided.
2014-09-09 02:50:56 -04:00
Dan Stillman
755ead2119 Update zotero:// extensions (report, timeline, etc.) for async DB, and more
- Protocol handler extensions can now handle promises and can also make
  data available as it's ready instead of all at once (e.g., reports now
  output one entry at a time)
- zotero:// URL syntaxes are now more consistent and closer to the web
  API (old URLs should work, but some may currently be broken)

Also:

- Code to generate server API, currently available for testing via
  zotero://data URLs but eventually moving to HTTP -- zotero://data URLs match
  web API URLs, with a different prefix for the personal library (/library vs.
  /users/12345)
- Miscellaneous fixes to data objects

Under the hood:

- Extensions now return an AsyncChannel, which is an nsIChannel implementation
  that takes a promise-yielding generator that returns a string,
  nsIAsyncInputStream, or file that will be used for the channel's data
- New function Zotero.Utilities.Internal.getAsyncInputStream() takes a
  generator that yields either promises or strings and returns an async input
  stream filled with the yielded strings
- Zotero.Router parsers URLs and extract parameters
- Zotero.Item.toResponseJSON()
2014-09-09 00:36:29 -04:00
Dan Stillman
2856b71f0b Remove some remaining synchronous queries in data objects
Fixes collection and search saving
2014-08-12 03:11:49 -04:00
Dan Stillman
78a8e6b622 Fix breakage from 278e06e58 - Zotero.DataObject signature changed 2014-08-12 02:09:45 -04:00
Aurimas Vinckevicius
dcd65d087c Add object key/ID validation. Centralize key generation/checking. 2014-08-12 00:26:26 -05: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
Florian Martin-Bariteau
dbe7640f18 Allow QuickSearch to search for civil law cases 2014-06-24 22:55:56 -04:00
Dan Stillman
a59f3c50ed Hack to fix "Numéro" search condition in French locale
https://forums.zotero.org/discussion/14942/
2014-06-03 14:17:54 -04:00
Dan Stillman
cbdc75df9a Fix search condition handling when two conditions have same translation
This prevented one "Numéro" from working in the French locale.

Also do a proper collation sort
2014-06-03 14:17:54 -04:00
Dan Stillman
9f91d240b0 Library switcher in advanced search window
When opening the advanced search window, the current library is
selected, and a different library can be selected to change the search
scope. If a library is read-only, the saved search button is disabled.
For saved searches, the appropriate library is selected and the
drop-down is disabled.

Also:

- Close the advanced search window after a search is saved
- The default name for saved searches ("Untitled 2", etc.) was based on
  collections rather than searches
- Once an initial search has been performed, the drop-downs and
  checkboxes now update the results
- More consistent spacing in advanced search window
- (dev) Zotero.DB.getNextName() now takes a libraryID as its first
  parameter instead of always using My Library; the old parameters are
  deprecated but still work
2014-05-15 21:41:22 -04:00
Dan Stillman
1d4a6b0848 Fix [Attachment Content] [does not contain] searches in "all" mode 2014-02-19 00:52:27 -05:00
Dan Stillman
94233108ae Fix saving advanced search
Fixes #379
2013-08-31 04:47:39 -04:00
Dan Stillman
75d5d9f88d Add Publication Title to title/creator/year search
As requested by Simon
2013-07-15 19:55:18 -04:00
Dan Stillman
f8515693aa Fix error when no results from regexp search 2013-04-22 20:08:01 -04:00
gracile-fr
58e6f5e07e Allow searching for dateDecided (case), dateEnacted (statute), issueDate (patent) in the "Title, Creator, Year" quicksearch mode. 2013-03-02 00:29:49 +01:00
Dan Stillman
7dad7bcd5a Require exact 8-character, uppercase item key for quick search 2012-08-08 03:17:14 -04:00
Dan Stillman
f6e7cf83fa Add ability to search for item by key from quick search bar
Matches beginning of key only, and only when search string is >= 2 chars
2012-08-08 01:56:25 -04:00
gracile-fr
0ece4145cd Fixes #111: "Search subcollections" instead of "Search subfolders" in Advanced search. 2012-05-03 17:35:49 -04:00
Dan Stillman
b43ce3254d Year part of title/creator/year search worked only if month/day were set 2011-12-06 18:01:28 -05:00
Dan Stillman
9d9ab86729 Update titles/creators quicksearch mode to include year
Also:

Change "All Fields" to "All Fields & Tags" to reflect reality
Increase width of search box slightly
2011-12-01 14:33:43 -05:00
Simon Kornblith
87978f7a1c Another ~10% collection switching perf win 2011-09-28 06:46:02 +00:00
Simon Kornblith
28e7531710 20% speed boost in collection switching 2011-09-06 18:14:23 +00:00
Dan Stillman
236901c1ad Don't include child items in "Titles & Creators" searches 2011-08-29 14:32:17 +00:00
Dan Stillman
9ac7efb3f0 Fix "Zotero.Libraries.getGroupIDFromLibraryID" in new code 2011-07-27 14:20:47 +00:00
Dan Stillman
455eb68c20 Persist open/close state of source list (libraries, collections, etc.) 2011-07-25 21:27:32 +00:00
Dan Stillman
56c7afc47e Duplicate detection:
- Adds a per-library "Duplicate Items" virtual search to the source list -- shows up by default for "My Library" but can be added to and removed from all libraries
- Current matching algorithm is very basic: finds exact title matches (after normalizing case/diacritics/punctuation/spacing) and DOI/ISBN matches (untested)
- In duplicates view, sets are selected automatically; in other views, duplicate items can be selected manually and the merge interface can be brought up with "Merge Items" in the context menu
- Can select a master item and individual fields to merge from other versions
- Word processor integration code will automatically find mapped replacements and update documents with new item keys

Possible future improvements:

- Improved detection algorithms
- UI tweaks
- Currently if any items differ, all available versions will be shown as master item options, even if only one item is different; probably the earliest equivalent item should be shown for each distinct version
- Caching of results for performance
- Confidence scale
- Creator version selection (currently the creators from the chosen master item are kept)
- Merging of matching child items
- Better sorting of duplicates if not clustered together by the selected sort column
- Relation path compression when merging items that are already mapped to previously removed duplicates

Other changes in this commit:

- Don't show Trash in word processor integration windows
- Consider items in trash to be missing in word processor documents
- Selection of special views (Trash, Unfiled, Duplicates) is now restored properly in new windows
- Disabled field transform context menu when item isn't editable
- Left/right arrow now expands/collapses all selected items instead of just the last-selected row
- Relation deletions are now synced
- The same items row is now reselected after item deletion
- (dev) Zotero.Item.getNotes(), Zotero.Item.getAttachments(), and Zotero.Item.getTags() now return empty arrays rather than FALSE if no matches -- tests on those return values in third-party code will need to be changed
- (dev) New function Zotero.Utilities.removeDiacritics(str, lowercaseOnly) -- could be used to generate ASCII BibTeX keys
- (dev) New 'tempTable' search condition can take a table to join against -- useful for implementing virtual source lists
- (dev) Significant UI code cleanup
- (dev) Moved all item pane content into itemPane.xul
- Probably various other things


Needless to say, this needs testing.
2011-07-22 21:24:38 +00:00
Dan Stillman
51f8c11ea0 Switch client code license to Affero GPL version 3 2011-05-18 18:34:22 +00:00
Dan Stillman
fdc6e1b6d3 Include tags and note content in "All Fields", and make that the default 2011-04-26 14:52:18 +00:00