From 0741c651c076b741c6f5fbcd43dea7d84a109274 Mon Sep 17 00:00:00 2001 From: Simon Kornblith Date: Wed, 26 Aug 2009 18:08:33 +0000 Subject: [PATCH] closes #1552: Add/edit citation should not update other citations --- chrome/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 index 33d406189..ee0021dc0 100644 --- 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