From 72d3b8b711f267212644f5f81f5c51d8b5418c6b Mon Sep 17 00:00:00 2001 From: aurimasv Date: Mon, 18 Feb 2013 00:16:44 -0600 Subject: [PATCH 1/4] Set this.translator for "detect" calls so that parentTranslator is set correctly --- chrome/content/zotero/xpcom/translation/translate.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/chrome/content/zotero/xpcom/translation/translate.js b/chrome/content/zotero/xpcom/translation/translate.js index 5c46ba2e7..5b013255d 100644 --- a/chrome/content/zotero/xpcom/translation/translate.js +++ b/chrome/content/zotero/xpcom/translation/translate.js @@ -1310,17 +1310,19 @@ Zotero.Translate.Base.prototype = { var me = this; this._loadTranslator(this._potentialTranslators[0], - function() { me._detectTranslatorLoaded() }); + function() { me._detectTranslatorLoaded(me._potentialTranslators[0]) }); }, /** * Runs detect code for a translator */ - "_detectTranslatorLoaded":function() { + "_detectTranslatorLoaded":function(translator) { this._prepareDetection(); this.incrementAsyncProcesses("Zotero.Translate#getTranslators"); + this.translator = [translator]; + try { var returnValue = this._sandboxManager.sandbox["detect"+this._entryFunctionSuffix].apply(null, this._getParameters()); } catch(e) { From db8b8a96621b0812148e49dffa64c6dc823cc505 Mon Sep 17 00:00:00 2001 From: aurimasv Date: Mon, 18 Feb 2013 01:42:08 -0600 Subject: [PATCH 2/4] Do not overwrite set translators --- chrome/content/zotero/xpcom/translation/translate.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/chrome/content/zotero/xpcom/translation/translate.js b/chrome/content/zotero/xpcom/translation/translate.js index 5b013255d..07d6e81ae 100644 --- a/chrome/content/zotero/xpcom/translation/translate.js +++ b/chrome/content/zotero/xpcom/translation/translate.js @@ -1167,6 +1167,8 @@ Zotero.Translate.Base.prototype = { if(!returnValue && error) errorString = this._generateErrorString(error); if(oldState === "detect") { + if(this._clearTranslator) delete this.translator; + if(this._potentialTranslators.length) { var lastTranslator = this._potentialTranslators.shift(); var lastProperToProxyFunction = this._properToProxyFunctions ? this._properToProxyFunctions.shift() : null; @@ -1321,7 +1323,10 @@ Zotero.Translate.Base.prototype = { this.incrementAsyncProcesses("Zotero.Translate#getTranslators"); - this.translator = [translator]; + if(!this.translator) { + this.translator = [translator]; + this._clearTranslator = true; + } try { var returnValue = this._sandboxManager.sandbox["detect"+this._entryFunctionSuffix].apply(null, this._getParameters()); From 63b9c9fd36ca9bac39933993228f0b25aad15058 Mon Sep 17 00:00:00 2001 From: aurimasv Date: Mon, 18 Feb 2013 01:47:45 -0600 Subject: [PATCH 3/4] And also don't leave behind unnecessary properties. --- chrome/content/zotero/xpcom/translation/translate.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/chrome/content/zotero/xpcom/translation/translate.js b/chrome/content/zotero/xpcom/translation/translate.js index 07d6e81ae..52cfdf605 100644 --- a/chrome/content/zotero/xpcom/translation/translate.js +++ b/chrome/content/zotero/xpcom/translation/translate.js @@ -1167,7 +1167,10 @@ Zotero.Translate.Base.prototype = { if(!returnValue && error) errorString = this._generateErrorString(error); if(oldState === "detect") { - if(this._clearTranslator) delete this.translator; + if(this._clearTranslator) { + delete this.translator; + delete this._clearTranslator; + } if(this._potentialTranslators.length) { var lastTranslator = this._potentialTranslators.shift(); From c4f008a97d6596b3d2dbdc4f6959c23ded920b39 Mon Sep 17 00:00:00 2001 From: aurimasv Date: Fri, 1 Mar 2013 03:29:11 -0600 Subject: [PATCH 4/4] Keep track of currently loaded translator --- .../zotero/xpcom/translation/translate.js | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/chrome/content/zotero/xpcom/translation/translate.js b/chrome/content/zotero/xpcom/translation/translate.js index 52cfdf605..df3b687e3 100644 --- a/chrome/content/zotero/xpcom/translation/translate.js +++ b/chrome/content/zotero/xpcom/translation/translate.js @@ -1167,11 +1167,6 @@ Zotero.Translate.Base.prototype = { if(!returnValue && error) errorString = this._generateErrorString(error); if(oldState === "detect") { - if(this._clearTranslator) { - delete this.translator; - delete this._clearTranslator; - } - if(this._potentialTranslators.length) { var lastTranslator = this._potentialTranslators.shift(); var lastProperToProxyFunction = this._properToProxyFunctions ? this._properToProxyFunctions.shift() : null; @@ -1315,22 +1310,17 @@ Zotero.Translate.Base.prototype = { var me = this; this._loadTranslator(this._potentialTranslators[0], - function() { me._detectTranslatorLoaded(me._potentialTranslators[0]) }); + function() { me._detectTranslatorLoaded() }); }, /** * Runs detect code for a translator */ - "_detectTranslatorLoaded":function(translator) { + "_detectTranslatorLoaded":function() { this._prepareDetection(); this.incrementAsyncProcesses("Zotero.Translate#getTranslators"); - if(!this.translator) { - this.translator = [translator]; - this._clearTranslator = true; - } - try { var returnValue = this._sandboxManager.sandbox["detect"+this._entryFunctionSuffix].apply(null, this._getParameters()); } catch(e) { @@ -1363,6 +1353,7 @@ Zotero.Translate.Base.prototype = { this._generateSandbox(); } + this._currentTranslator = translator; this._runningAsyncProcesses = 0; this._returnValue = undefined; this._aborted = false; @@ -1450,8 +1441,8 @@ Zotero.Translate.Base.prototype = { this._sandboxManager.sandbox.Zotero.isConnector = Zotero.isConnector || false; this._sandboxManager.sandbox.Zotero.isServer = Zotero.isServer || false; this._sandboxManager.sandbox.Zotero.parentTranslator = this._parentTranslator - && this._parentTranslator.translator && this._parentTranslator.translator[0] ? - this._parentTranslator.translator[0].translatorID : null; + && this._parentTranslator._currentTranslator ? + this._parentTranslator._currentTranslator.translatorID : null; // create shortcuts this._sandboxManager.sandbox.Z = this._sandboxManager.sandbox.Zotero;