From e35a505e1188a21ab74123d491ac175db2290deb Mon Sep 17 00:00:00 2001 From: Simon Kornblith Date: Sat, 26 Jan 2008 21:47:17 +0000 Subject: [PATCH] Closes #904, Automatically repair documents with invalid fields --- chrome/content/zotero/xpcom/integration.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/chrome/content/zotero/xpcom/integration.js b/chrome/content/zotero/xpcom/integration.js index 908869705..83c9768e0 100644 --- a/chrome/content/zotero/xpcom/integration.js +++ b/chrome/content/zotero/xpcom/integration.js @@ -393,7 +393,7 @@ Zotero.Integration.SOAP = new function() { } } else if(editCitationIndex !== false && vars[i] == editCitationIndex) { // save citation data - editCitation = session.unserializeCitation(vars[i+1]); + editCitation = session.unserializeCitation(vars[i+1], vars[i]); } else { session.addCitation(vars[i], vars[i+1]); } @@ -627,12 +627,7 @@ Zotero.Integration.Session.prototype.addCitation = function(index, arg) { if(typeof(arg) == "string") { // text field if(arg == "!" || arg == "X") return; - var citation = this.unserializeCitation(arg); - if(arg[0] == "{") { // JSON - citation.properties.field = arg; - } else { - this.updateIndices[citation.properties.index]; - } + var citation = this.unserializeCitation(arg, index); } else { // a citation already var citation = arg; } @@ -695,11 +690,20 @@ Zotero.Integration.Session.prototype.completeCitation = function(object) { /* * unserializes a JSON citation into a citation object (sans items) */ -Zotero.Integration.Session.prototype.unserializeCitation = function(arg) { +Zotero.Integration.Session.prototype.unserializeCitation = function(arg, index) { if(arg[0] == "{") { // JSON field // create citation var citation = this.style.createCitation(); + // fix for corrupted fields + var lastBracket = arg.lastIndexOf("}"); + if(lastBracket+1 != arg.length) { + arg = arg.substr(0, lastBracket+1); + this.updateIndices[index] = true; + } else { + citation.properties.field = arg; + } + // get JSON var object = Zotero.JSON.unserialize(arg); @@ -732,6 +736,7 @@ Zotero.Integration.Session.prototype.unserializeCitation = function(arg) { } var citation = this.style.createCitation(citationItems); + this.updateIndices[index] = true; } return citation;