www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit 615259c1c977286b90ddec56d5e75c930204a310
parent 7855c88f9ec828051fd4b3f3be6c6e4a980b4de8
Author: Simon Kornblith <simon@simonster.com>
Date:   Sat, 31 Dec 2011 14:46:52 +0000

Fix showing cited items when no items with matching names exist in library, and don't update item list multiple times

Diffstat:
Mchrome/content/zotero/integration/quickFormat.js | 49+++++++++++++++++++++++++++----------------------
1 file changed, 27 insertions(+), 22 deletions(-)

diff --git a/chrome/content/zotero/integration/quickFormat.js b/chrome/content/zotero/integration/quickFormat.js @@ -26,8 +26,8 @@ var Zotero_QuickFormat = new function () { var initialized, io, qfs, qfi, qfiWindow, qfiDocument, qfe, qfb, qfbHeight, keepSorted, showEditor, referencePanel, referenceBox, referenceHeight, separatorHeight, - curLocator, curLocatorLabel, curIDs = [], curResizer, dragging, panel, panelPrefix, - panelSuffix, panelSuppressAuthor, panelLocatorLabel, panelLocator, panelInfo, + currentLocator, currentLocatorLabel, currentIDs = [], currentSearchTime, dragging, panel, + panelPrefix, panelSuffix, panelSuppressAuthor, panelLocatorLabel, panelLocator, panelInfo, panelRefersToBubble; // A variable that contains the timeout object for the latest onKeyPress event @@ -190,8 +190,8 @@ var Zotero_QuickFormat = new function () { isBC = false, dateID = false; - curLocator = false; - curLocatorLabel = false; + currentLocator = false; + currentLocatorLabel = false; // check for adding a number onto a previous page number if(numRe.test(str)) { @@ -225,7 +225,7 @@ var Zotero_QuickFormat = new function () { } // TODO support types other than page - curLocator = m[2]; + currentLocator = m[2]; str = str.substring(0, m.index); } @@ -237,11 +237,11 @@ var Zotero_QuickFormat = new function () { if(m[3]) { isBC = true; } - if(!curLocator && m[4]) { - curLocator = m[4]; + if(!currentLocator && m[4]) { + currentLocator = m[4]; } } else { - curLocator = m[1]; + currentLocator = m[1]; } str = str.substr(0, m.index)+str.substring(m.index+m[0].length); @@ -262,11 +262,10 @@ var Zotero_QuickFormat = new function () { var searchResultIDs = (haveConditions ? s.search() : []); // No need to refresh anything if box hasn't changed - if(searchResultIDs.length === curIDs.length) { - Zotero.debug("unchanged"); + if(searchResultIDs.length === currentIDs.length) { var mismatch = false; for(var i=0; i<searchResultIDs.length; i++) { - if(curIDs[i] !== searchResultIDs[i]) { + if(currentIDs[i] !== searchResultIDs[i]) { mismatch = true; break; } @@ -276,13 +275,18 @@ var Zotero_QuickFormat = new function () { return; } } - curIDs = searchResultIDs; + currentIDs = searchResultIDs; // Check to see which search results match items already in the document var citedItems, completed = false, isAsync = false; + // Save current search so that when we get items, we know whether it's too late to + // process them or not + var lastSearchTime = currentSearchTime = Date.now(); io.getItems(function(citedItems) { // Don't do anything if panel is already closed - if(isAsync && referencePanel.state !== "open" && referencePanel.state !== "showing") return; + if(isAsync && + ((referencePanel.state !== "open" && referencePanel.state !== "showing") + || lastSearchTime !== currentSearchTime)) return; completed = true; @@ -319,8 +323,11 @@ var Zotero_QuickFormat = new function () { if(!completed) { // We are going to have to wait until items have been retrieved from the document. // Until then, show item list without cited items. + Zotero.debug("Getting cited items asynchronously"); _updateItemList(false, searchResultIDs); isAsync = true; + } else { + Zotero.debug("Got cited items synchronously"); } } else { // No search conditions, so just clear the box @@ -389,8 +396,6 @@ var Zotero_QuickFormat = new function () { items.sort(function _itemSort(a, b) { var libA = a.libraryID ? a.libraryID : 0, libB = b.libraryID ? b.libraryID : 0; if(libA !== libB) { - Zotero.debug(libA); - Zotero.debug(libB); // Sort by number of cites for library if(nCitedItemsFromLibrary[libA] && !nCitedItemsFromLibrary[libB]) { return -1; @@ -422,7 +427,7 @@ var Zotero_QuickFormat = new function () { }); var previousLibrary = -1; - for(var i=0, n=Math.min(items.length, 50-citedItems.length); i<n; i++) { + for(var i=0, n=Math.min(items.length, citedItems ? 50-citedItems.length : 50); i<n; i++) { var item = items[i], libraryID = item.libraryID; if(previousLibrary != libraryID) { @@ -649,7 +654,7 @@ var Zotero_QuickFormat = new function () { * Clear list of bubbles */ function _clearEntryList() { - curIDs = []; + currentIDs = []; while(referenceBox.hasChildNodes()) referenceBox.removeChild(referenceBox.firstChild); _resize(); } @@ -666,10 +671,10 @@ var Zotero_QuickFormat = new function () { citationItem.uris = item.cslURIs; citationItem.itemData = item.cslItemData; } - if(curLocator) { - citationItem["locator"] = curLocator; - if(curLocatorLabel) { - citationItem["label"] = curLocatorLabel; + if(currentLocator) { + citationItem["locator"] = currentLocator; + if(currentLocatorLabel) { + citationItem["label"] = currentLocatorLabel; } } @@ -731,7 +736,7 @@ var Zotero_QuickFormat = new function () { var panelShowing = referencePanel.state === "open" || referencePanel.state === "showing"; - if(numReferences) { + if(numReferences || numSeparators) { var height = referenceHeight ? Math.min(numReferences*referenceHeight+1+numSeparators*separatorHeight) : 39;