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.
Adds a new function, Zotero.promiseGenerator, that returns a promise that is fulfilled by the last thing yielded by a generator, or rejected with an error.
- Zotero.Utilities is now a singleton
- Zotero.Utilities.HTTP is now Zotero.HTTP
- Zotero.Utilities.md5 and Zotero.Utilities.Base64 are now located under Zotero.Utilities.Internal
- Zotero.Utilities.AutoComplete has been eliminated
This needs testing to make sure there is no associated breakage.
fix Accept button issue by using getAttribute() rather than id property, but also scroll to newly inserted citation, since it's probably the desirable behavior
- upgrade to citeproc-js 1.0.29
From Frank's 1.0.25 announcement:
Provide new command, previewCitationCluster(), that returns
string for hypothetical citation at specified position,
without affecting processor state.
Fix bug that would have cause appendCitationCluster() to
run updateItems() unnecessarily.
Provide for forced generation of citationID, for internal use
in previewing.
From Frank's 1.0.26 announcement:
Implement new command restoreProcessorState(), for use in,
er, restoring the processor state, when position variables
and citation sort keys are already known.
From Frank's 1.0.27 announcement:
This fixes a couple of obvious problems in the code of the new
restoreProcessorState() command.
From Frank's 1.0.28 announcement:
This version introduces a significant change to the return
value of processCitationCluster(). It is now an array with
two elements, the first being a JS object that serves as a
data segment, and the second the list of two-element arrays
representing insertion indexes and strings for insertion
(as previously documented). An API change of this scale
probably calls for some more visible sign in the version
numbering, but the original statement on versioning says
that the major and minor numbers will align with the CSL
schema, so we stay at level 1.0.
The data segment referred to above contains just one element
currently, "bibchange", which is true if processing the
citation results in any change affecting the bibliography.
This release also introduces one change and one addition to
style configuration flags. The flag at citation.opt["citation-number-sort"]
has been moved to opt.citation_number_sort, for clarity and
consistency. A new flag, opt.sort_citations, is true if
citations are sorted by the style in any way.
From Frank's 1.0.29 announcement:
Complete reimplementation of cite-level disambiguation.
The new code is more compact and maintainable, and
avoids thrashing behavior that afflicted the previous
code when a large number of cites required both
add-names and year-suffix disambiguation.
Suppress year suffix when fresh ambig keys are generated.
Inserts by a plugin affecting year suffixes should now be
correctly handled.
- update to citeproc-js 1.0.22
From Frank's announcement:
- Bypass sorting of citations that have a value for "unsorted"
in citation.properties.
This permits per-citation override of style-driven citation sorts, as
supported by Zotero and required for some common use cases.
closes#1650: suppress author does not work for multiple sources
closes#1505: Edit Biblography Button Strips Year Disambiguation
closes#1503: Editing a bibliography resets all reference numbers to 1 (new)
closes#1262: Broken pluralization with et al. + other issues
closes#1238: Localize quotation marks
closes#1191: Harmonize 'plural/pluralize' label attribute with CSL schema
closes#1154: Only one works page numbers are added to the citation are when citing multiple works by the same author
closes#1097: Disambiguation issues
closes#1083: Defect in IEEE CSL with Multiple Citations
closes#993: more sophisticated subsequent-author-substitute
closes#833: text-transform doesn't work with name