www

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

commit 0741c651c076b741c6f5fbcd43dea7d84a109274
parent 4fa9b77aaeacc8322470ada9a2c39bd174dfebd3
Author: Simon Kornblith <simon@simonster.com>
Date:   Wed, 26 Aug 2009 18:08:33 +0000

closes #1552: Add/edit citation should not update other citations


Diffstat:
Mchrome/content/zotero/xpcom/integration.js | 60+++++++++++++++++++++++++++++-------------------------------
1 file changed, 29 insertions(+), 31 deletions(-)

diff --git a/chrome/content/zotero/xpcom/integration.js b/chrome/content/zotero/xpcom/integration.js @@ -262,6 +262,7 @@ Zotero.Integration.Document.prototype._createNewSession = function(data) { * preferences exist */ Zotero.Integration.Document.prototype._getSession = function(require, dontRunSetDocPrefs) { + this._reloadSession = false; var dataString = this._doc.getDocumentData(); if(!dataString) { if(require) { @@ -309,6 +310,8 @@ Zotero.Integration.Document.prototype._getSession = function(require, dontRunSet } } this._doc.setDocumentData(this._session.data.serializeXML()); + + this._reloadSession = true; } } @@ -445,9 +448,14 @@ Zotero.Integration.Document.prototype._updateSession = function(editField) { this._session.updateItemSet(); + // if we are reloading this session, assume no item IDs to be updated except for edited items + if(this._reloadSession) { + this._session.updateItemIDs = {}; + this._session.bibliographyHasChanged = false; + } + // create new citation or edit existing citation if(editFieldIndex) { - this._session.updateCitations(editFieldIndex-1); var editFieldCode = editField.getCode().substr(ITEM_CODE.length+1); var editCitation = editFieldCode ? this._session.unserializeCitation(editFieldCode, editFieldIndex) : null; @@ -464,8 +472,6 @@ Zotero.Integration.Document.prototype._updateSession = function(editField) { } } } - - this._session.updateCitations(); } /** @@ -879,7 +885,7 @@ Zotero.Integration._oldCitationLocatorMap = { /** * Gets a Zotero.CSL.Citation object given a field name */ -Zotero.Integration.Session.prototype.addCitation = function(index, noteIndex, arg) { +Zotero.Integration.Session.prototype.addCitation = function(index, noteIndex, arg, update) { var index = parseInt(index, 10); if(typeof(arg) == "string") { // text field @@ -890,9 +896,15 @@ Zotero.Integration.Session.prototype.addCitation = function(index, noteIndex, ar var citation = arg; } - this.completeCitation(citation); + // update if completeCitation tells us to + if(this.completeCitation(citation)) this.updateIndices[index] = true; + + citation.properties.index = index; + citation.properties.noteIndex = noteIndex; + this.citationsByIndex[index] = citation; // add to citationsByItemID and citationsByIndex + this.getCitationPositions(citation, true); for(var i=0; i<citation.citationItems.length; i++) { var citationItem = citation.citationItems[i]; if(!this.citationsByItemID[citationItem.itemID]) { @@ -905,14 +917,13 @@ Zotero.Integration.Session.prototype.addCitation = function(index, noteIndex, ar } else { // otherwise, splice in at appropriate location for(var j=0; byItemID[j].properties.index < index && j<byItemID.length-1; j++) {} - byItemID.splice(j, 0, citation); + byItemID.splice(j++, 0, citation); + for(; j<byItemID.length; j++) { + this.getCitationPositions(byItemID[j], true); + } } } } - - citation.properties.index = index; - citation.properties.noteIndex = noteIndex; - this.citationsByIndex[index] = citation; } /** @@ -920,16 +931,16 @@ Zotero.Integration.Session.prototype.addCitation = function(index, noteIndex, ar */ Zotero.Integration.Session.prototype.completeCitation = function(object) { // replace item IDs with real items - var err; + var returnNeedUpdate = false; for(var i=0; i<object.citationItems.length; i++) { var citationItem = object.citationItems[i]; // get Zotero item var zoteroItem = false; if(citationItem.uri) { - var needUpdate = false; [zoteroItem, needUpdate] = this.uriMap.getZoteroItemForURIs(citationItem.uri); - if(needUpdate) this.updateItemIDs[zoteroItem.id] = true; + + if(!returnNeedUpdate && needUpdate) returnNeedUpdate = true; } else { if(citationItem.key) { zoteroItem = Zotero.Items.getByKey(citationItem.key); @@ -937,7 +948,7 @@ Zotero.Integration.Session.prototype.completeCitation = function(object) { zoteroItem = Zotero.Items.get(citationItem.itemID); } - if(zoteroItem) this.updateItemIDs[zoteroItem.id] = true; + if(zoteroItem) returnNeedUpdate = true; } // if no item, check if it was already reselected and otherwise handle as a missing item @@ -957,6 +968,7 @@ Zotero.Integration.Session.prototype.completeCitation = function(object) { for each(var reselectKey in reselectKeys) { if(this.reselectedItems[reselectKey]) { zoteroItem = Zotero.Items.get(this.reselectedItems[reselectKey]); + returnNeedUpdate = true; break; } } @@ -973,8 +985,8 @@ Zotero.Integration.Session.prototype.completeCitation = function(object) { if(!item) { item = this.itemSet.add([zoteroItem])[0]; - this.dateModified[citationItem.itemID] = item.zoteroItem.getField("dateModified", true, true); - this.updateItemIDs[citationItem.itemID] = true; + this.dateModified[zoteroItem.id] = item.zoteroItem.getField("dateModified", true, true); + this.updateItemIDs[zoteroItem.id] = true; this.bibliographyHasChanged = true; } @@ -982,7 +994,7 @@ Zotero.Integration.Session.prototype.completeCitation = function(object) { if(!citationItem.itemID) citationItem.itemID = item.id; } - return null; + return returnNeedUpdate; } /** @@ -1209,20 +1221,6 @@ Zotero.Integration.Session.prototype.getCitationPositions = function(citation, u } /** - * Marks citations for update, where necessary - */ -Zotero.Integration.Session.prototype.updateCitations = function(toIndex) { - if(!toIndex) toIndex = this.citationsByIndex.length-1; - for(var i=0; i<=toIndex; i++) { - var citation = this.citationsByIndex[i]; - // get position, updating if necesary - if(citation && !citation.properties["delete"] && !citation.properties.custom) { - this.getCitationPositions(citation, true); - } - } -} - -/** * Updates the ItemSet, adding and deleting bibliography items as appropriate, then re-sorting */ Zotero.Integration.Session.prototype.updateItemSet = function() {