From 28355c5ab5357e296dc9ec8ece9fc54df4d0c532 Mon Sep 17 00:00:00 2001 From: Simon Kornblith Date: Thu, 27 Jun 2013 22:00:38 -0400 Subject: [PATCH 1/3] Fix error message when inserting a field in an unsupported location --- chrome/content/zotero/xpcom/integration.js | 81 +++++++++++----------- 1 file changed, 42 insertions(+), 39 deletions(-) diff --git a/chrome/content/zotero/xpcom/integration.js b/chrome/content/zotero/xpcom/integration.js index 8fea62024..9dcab6897 100644 --- a/chrome/content/zotero/xpcom/integration.js +++ b/chrome/content/zotero/xpcom/integration.js @@ -1075,13 +1075,14 @@ Zotero.Integration.Document.prototype.addBibliography = function() { "integration.error.title"); } - var fieldGetter = new Zotero.Integration.Fields(me._session, me._doc), - field = fieldGetter.addField(); - field.setCode("BIBL"); - return fieldGetter.updateSession().fail(Zotero.Integration.onFieldError) - .then(function() { - return fieldGetter.updateDocument(FORCE_CITATIONS_FALSE, true, false); - }) + var fieldGetter = new Zotero.Integration.Fields(me._session, me._doc); + return fieldGetter.addField().then(function(field) { + field.setCode("BIBL"); + return fieldGetter.updateSession().fail(Zotero.Integration.onFieldError) + .then(function() { + return fieldGetter.updateDocument(FORCE_CITATIONS_FALSE, true, false); + }); + }); }); } @@ -1287,7 +1288,7 @@ Zotero.Integration.Fields.prototype.addField = function(note) { (note ? this._session.data.prefs["noteType"] : 0)); } - return field; + return Q.resolve(field); } /** @@ -1725,39 +1726,41 @@ Zotero.Integration.Fields.prototype.addEditCitation = function(field) { } } else { newField = true; - var field = this.addField(true); + field = this.addField(true); } - if(!citation) { - field.setCode("TEMP"); - citation = {"citationItems":[], "properties":{}}; - } - - var io = new Zotero.Integration.CitationEditInterface(citation, field, this, session); - - if(Zotero.Prefs.get("integration.useClassicAddCitationDialog")) { - Zotero.Integration.displayDialog(this._doc, - 'chrome://zotero/content/integration/addCitationDialog.xul', 'alwaysRaised,resizable', - io); - } else { - var mode = (!Zotero.isMac && Zotero.Prefs.get('integration.keepAddCitationDialogRaised') - ? 'popup' : 'alwaysRaised') - Zotero.Integration.displayDialog(this._doc, - 'chrome://zotero/content/integration/quickFormat.xul', mode, io); - } - - if(newField) { - var me = this; - return io.promise.fail(function(e) { - // Try to delete new field on failure - try { - field.delete(); - } catch(e) {} - throw e; - }); - } else { - return io.promise; - } + var me = this; + return Q(field).then(function(field) { + if(!citation) { + field.setCode("TEMP"); + citation = {"citationItems":[], "properties":{}}; + } + + var io = new Zotero.Integration.CitationEditInterface(citation, field, me, session); + + if(Zotero.Prefs.get("integration.useClassicAddCitationDialog")) { + Zotero.Integration.displayDialog(me._doc, + 'chrome://zotero/content/integration/addCitationDialog.xul', 'alwaysRaised,resizable', + io); + } else { + var mode = (!Zotero.isMac && Zotero.Prefs.get('integration.keepAddCitationDialogRaised') + ? 'popup' : 'alwaysRaised') + Zotero.Integration.displayDialog(me._doc, + 'chrome://zotero/content/integration/quickFormat.xul', mode, io); + } + + if(newField) { + return io.promise.fail(function(e) { + // Try to delete new field on failure + try { + field.delete(); + } catch(e) {} + throw e; + }); + } else { + return io.promise; + } + }); } /** From 44bb1ad976134dcec473d97ccd22d9b74a47816f Mon Sep 17 00:00:00 2001 From: Simon Kornblith Date: Wed, 19 Jun 2013 13:29:04 -0400 Subject: [PATCH 2/3] Ignore empty bibliography fields --- chrome/content/zotero/xpcom/integration.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chrome/content/zotero/xpcom/integration.js b/chrome/content/zotero/xpcom/integration.js index 9dcab6897..0bec45c32 100644 --- a/chrome/content/zotero/xpcom/integration.js +++ b/chrome/content/zotero/xpcom/integration.js @@ -1490,7 +1490,7 @@ Zotero.Integration.Fields.prototype._processFields = function(i) { throw e; } } - } else if(type === INTEGRATION_TYPE_BIBLIOGRAPHY) { + } else if(type === INTEGRATION_TYPE_BIBLIOGRAPHY && field.getText().trim() !== "") { this._bibliographyFields.push(field); if(!this._session.bibliographyData && !this._bibliographyData) { this._bibliographyData = content; From 85682dbb19f42b9d25556c993d64e2bbbccde6af Mon Sep 17 00:00:00 2001 From: Simon Kornblith Date: Wed, 19 Jun 2013 13:37:50 -0400 Subject: [PATCH 3/3] Remove field codes for empty bibliographies when refreshing This happens when a user inserts a bibliography in the middle of a paragraph and doesn't fully delete it. Also remove unused code for deleting citations from the document. --- chrome/content/zotero/xpcom/integration.js | 43 ++++++---------------- 1 file changed, 11 insertions(+), 32 deletions(-) diff --git a/chrome/content/zotero/xpcom/integration.js b/chrome/content/zotero/xpcom/integration.js index 0bec45c32..bed03469e 100644 --- a/chrome/content/zotero/xpcom/integration.js +++ b/chrome/content/zotero/xpcom/integration.js @@ -1235,6 +1235,7 @@ Zotero.Integration.Document.prototype.setDocPrefs = function() { // Refresh contents fieldGetter = new Zotero.Integration.Fields(me._session, me._doc); + fieldGetter.ignoreEmptyBibliography = false; return fieldGetter.updateSession().fail(Zotero.Integration.onFieldError) .then(fieldGetter.updateDocument.bind( fieldGetter, FORCE_CITATIONS_RESET_TEXT, true, true)); @@ -1261,6 +1262,7 @@ Zotero.Integration.Document.JSEnumerator.prototype.getNext = function() { Zotero.Integration.Fields = function(session, doc) { this._session = session; this._doc = doc; + this.ignoreEmptyBibliography = true; } /** @@ -1490,10 +1492,14 @@ Zotero.Integration.Fields.prototype._processFields = function(i) { throw e; } } - } else if(type === INTEGRATION_TYPE_BIBLIOGRAPHY && field.getText().trim() !== "") { - this._bibliographyFields.push(field); - if(!this._session.bibliographyData && !this._bibliographyData) { - this._bibliographyData = content; + } else if(type === INTEGRATION_TYPE_BIBLIOGRAPHY) { + if(this.ignoreEmptyBibliography && field.getText().trim() === "") { + this._removeCodeFields[i] = true; + } else { + this._bibliographyFields.push(field); + if(!this._session.bibliographyData && !this._bibliographyData) { + this._bibliographyData = content; + } } } } @@ -2490,33 +2496,6 @@ Zotero.Integration.Session.prototype.unserializeCitation = function(arg, index) return citation; } -/** - * Marks a citation for removal - */ -Zotero.Integration.Session.prototype.deleteCitation = function(index) { - var oldCitation = (this.citationsByIndex[index] ? this.citationsByIndex[index] : false); - this.citationsByIndex[index] = {properties:{"delete":true}}; - - if(oldCitation && oldCitation.citationItems & oldCitation.properties.added) { - // clear out old citations if necessary - for each(var citationItem in oldCitation.citationItems) { - if(this.citationsByItemID[citationItem.id]) { - var indexInItemID = this.citationsByItemID[citationItem.id].indexOf(oldCitation); - if(indexInItemID !== -1) { - this.citationsByItemID[citationItem.id] = this.citationsByItemID[citationItem.id].splice(indexInItemID, 1); - if(this.citationsByItemID[citationItem.id].length == 0) { - delete this.citationsByItemID[citationItem.id]; - } - } - } - } - } - Zotero.debug("Integration: Deleting old citationID "+oldCitation.citationID); - if(oldCitation.citationID) delete this.citeprocCitationIDs[oldCitation.citationID]; - - this.updateIndices[index] = true; -} - /** * Gets integration bibliography */ @@ -2657,7 +2636,7 @@ Zotero.Integration.Session.prototype._updateCitations = function() { index = parseInt(index); var citation = this.citationsByIndex[index]; - if(!citation) continue; + if(!citation || citation.properties.delete) continue; if(this.formatCitation(index, citation)) { this.bibliographyHasChanged = true; }