From 0a916082688e3413be9cbca4fdeb1446b911be59 Mon Sep 17 00:00:00 2001 From: Simon Kornblith Date: Wed, 2 Feb 2011 04:39:42 +0000 Subject: [PATCH] fix for a last-minute Fx 4 API change. this at least gets the translator infrastructure working, but the API change may result in a good amount of translator breakage as well. --- .../xpcom/translation/browser_firefox.js | 33 +++++++++++------ .../zotero/xpcom/translation/translate.js | 36 ++++++++++++++++--- chrome/content/zotero/xpcom/utilities.js | 4 +-- 3 files changed, 57 insertions(+), 16 deletions(-) diff --git a/chrome/content/zotero/xpcom/translation/browser_firefox.js b/chrome/content/zotero/xpcom/translation/browser_firefox.js index d54495ac8..3e73b302a 100644 --- a/chrome/content/zotero/xpcom/translation/browser_firefox.js +++ b/chrome/content/zotero/xpcom/translation/browser_firefox.js @@ -64,13 +64,11 @@ Zotero.Translate.SandboxManager.prototype = { */ "importObject":function(object, passAsFirstArgument, attachTo) { if(!attachTo) attachTo = this.sandbox.Zotero; - for(var key in (object.__exposedProps__ ? object.__exposedProps__ : object)) { - let localKey; - if(object.__exposedProps__) { - localKey = object.__exposedProps__[key]; - } else { - localKey = key; - } + var newExposedProps = false; + if(!object.__exposedProps__) newExposedProps = {}; + for(var key in (newExposedProps ? object : object.__exposedProps__)) { + let localKey = key; + if(newExposedProps) newExposedProps[localKey] = "r"; // magical XPCSafeJSObjectWrappers for sandbox if(typeof object[localKey] === "function" || typeof object[localKey] === "object") { @@ -90,9 +88,15 @@ Zotero.Translate.SandboxManager.prototype = { this.importObject(object[localKey], passAsFirstArgument ? passAsFirstArgument : null, attachTo[localKey]); } } else { - object[localKey] = object[localKey]; + attachTo[localKey] = object[localKey]; } } + + if(newExposedProps) { + attachTo.__exposedProps__ = newExposedProps; + } else { + attachTo.__exposedProps__ = object.__exposedProps__; + } } } @@ -243,7 +247,12 @@ Zotero.Translate.IO.Read = function(file, mode) { } Zotero.Translate.IO.Read.prototype = { - "__exposedProps__":["_getXML", "RDF", "read", "setCharacterSet"], + "__exposedProps__":{ + "_getXML":"r", + "RDF":"r", + "read":"r", + "setCharacterSet":"r" + }, "_seekToStart":function() { this._rawStream.QueryInterface(Components.interfaces.nsISeekableStream) @@ -351,7 +360,11 @@ Zotero.Translate.IO.Write = function(file, mode, charset) { } Zotero.Translate.IO.Write.prototype = { - "__exposedProps__":["RDF", "write", "setCharacterSet"], + "__exposedProps__":{ + "RDF":"r", + "write":"r", + "setCharacterSet":"r" + }, "_initRDF":function() { Zotero.debug("Translate: Initializing RDF data store"); diff --git a/chrome/content/zotero/xpcom/translation/translate.js b/chrome/content/zotero/xpcom/translation/translate.js index 3c880969d..9bbd1d0ae 100644 --- a/chrome/content/zotero/xpcom/translation/translate.js +++ b/chrome/content/zotero/xpcom/translation/translate.js @@ -150,6 +150,16 @@ Zotero.Translate.Sandbox = { // for security reasons, safeTranslator wraps the translator object. // note that setLocation() is not allowed var safeTranslator = new Object(); + safeTranslator.__exposedProps__ = { + "setSearch":"r", + "setDocument":"r", + "setHandler":"r", + "setString":"r", + "setTranslator":"r", + "getTranslators":"r", + "translate":"r", + "getTranslatorObject":"r" + }; safeTranslator.setSearch = function(arg) { if(Zotero.isFx4) arg = JSON.parse(JSON.stringify(arg)); return translation.setSearch(arg); @@ -1379,7 +1389,13 @@ Zotero.Translate.IO.String = function(string, uri, mode) { } Zotero.Translate.IO.String.prototype = { - "__exposedProps__":["RDF", "read", "write", "setCharacterSet", "_getXML"], + "__exposedProps__":{ + "RDF":"r", + "read":"r", + "write":"r", + "setCharacterSet":"r", + "_getXML":"r" + }, "_initRDF":function() { Zotero.debug("Translate: Initializing RDF data store"); @@ -1488,9 +1504,21 @@ Zotero.Translate.IO._RDFSandbox = function(dataStore) { Zotero.Translate.IO._RDFSandbox.prototype = { "_containerCounts":[], - "__exposedProps__":["addStatement", "newResource", "newContainer", "addContainerElement", - "getContainerElements", "addNamespace", "getAllResources", "getResourceURI", "getArcsIn", - "getArcsOut", "getSources", "getTargets", "getStatementsMatching"], + "__exposedProps__":{ + "addStatement":"r", + "newResource":"r", + "newContainer":"r", + "addContainerElement":"r", + "getContainerElements":"r", + "addNamespace":"r", + "getAllResources":"r", + "getResourceURI":"r", + "getArcsIn":"r", + "getArcsOut":"r", + "getSources":"r", + "getTargets":"r", + "getStatementsMatching":"r" + }, /** * Gets a resource as a Zotero.RDF.AJAW.RDFSymbol, rather than a string diff --git a/chrome/content/zotero/xpcom/utilities.js b/chrome/content/zotero/xpcom/utilities.js index 7f87e6b89..59b6501e2 100644 --- a/chrome/content/zotero/xpcom/utilities.js +++ b/chrome/content/zotero/xpcom/utilities.js @@ -906,10 +906,10 @@ Zotero.Utilities.Translate.prototype._convertURL = function(url) { } } -Zotero.Utilities.Translate.prototype.__exposedProps__ = []; +Zotero.Utilities.Translate.prototype.__exposedProps__ = {}; for(var j in Zotero.Utilities.Translate.prototype) { if(typeof Zotero.Utilities.Translate.prototype[j] === "function" && j[0] !== "_" && j != "Translate") { - Zotero.Utilities.Translate.prototype.__exposedProps__.push(j); + Zotero.Utilities.Translate.prototype.__exposedProps__[j] = "r"; } }