commit ebf6447351fa9e4c559e842da23bb17a7be44de7
parent c324ae8f8e7ce878e075c0b404aa76d16a4d480b
Author: Dan Stillman <dstillman@zotero.org>
Date: Sat, 6 Jun 2009 18:03:04 +0000
Add Zotero.Translators.save(metadata, code)
Diffstat:
2 files changed, 86 insertions(+), 28 deletions(-)
diff --git a/chrome/content/zotero/xpcom/schema.js b/chrome/content/zotero/xpcom/schema.js
@@ -1038,35 +1038,9 @@ Zotero.Schema = new function(){
? xmlnode.getElementsByTagName('detectCode')[0].firstChild.nodeValue
: null;
var code = xmlnode.getElementsByTagName('code')[0].firstChild.nodeValue;
+ code = (detectCode ? detectCode + "\n\n" : "") + code;
- var fileName = Zotero.Translators.getFileNameFromLabel(metadata.label);
- var destFile = Zotero.getTranslatorsDirectory();
- destFile.append(fileName);
-
- var nsIJSON = Cc["@mozilla.org/dom/json;1"].createInstance(Ci.nsIJSON);
- var metadataJSON = nsIJSON.encode(metadata);
-
- var str = metadataJSON + "\n\n" + (detectCode ? detectCode + "\n\n" : "") + code;
-
- if (translator && destFile.equals(translator.file)) {
- var sameFile = true;
- }
-
- if (!sameFile && destFile.exists()) {
- var msg = "Overwriting translator with same filename '"
- + fileName + "'";
- Zotero.debug(msg, 1);
- Zotero.debug(metadata, 1);
- Components.utils.reportError(msg + " in Zotero.Schema._translatorXMLToFile()");
- }
-
- if (translator && translator.file.exists()) {
- translator.file.remove(false);
- }
-
- Zotero.debug("Saving translator '" + metadata.label + "'");
- Zotero.File.putContents(destFile, str);
- return destFile;
+ return Zotero.Translators.save(metadata, code);
}
diff --git a/chrome/content/zotero/xpcom/translate.js b/chrome/content/zotero/xpcom/translate.js
@@ -120,6 +120,89 @@ Zotero.Translators = new function() {
this.getFileNameFromLabel = function(label) {
return Zotero.File.getValidFileName(label) + ".js";
}
+
+
+ /**
+ * @param {String} metadata
+ * @param {String} metadata.translatorID Translator GUID
+ * @param {Integer} metadata.translatorType See TRANSLATOR_TYPES in translate.js
+ * @param {String} metadata.label Translator title
+ * @param {String} metadata.creator Translator author
+ * @param {String|Null} metadata.target Target regexp
+ * @param {String|Null} metadata.minVersion
+ * @param {String} metadata.maxVersion
+ * @param {Integer} metadata.priority
+ * @param {Boolean} metadata.inRepository
+ * @param {String} metadata.lastUpdated SQL date
+ * @param {String} code
+ * @return {nsIFile}
+ */
+ this.save = function(metadata, code) {
+ if (!metadata.translatorID) {
+ throw ("metadata.translatorID not provided in Zotero.Translators.save()");
+ }
+
+ if (!metadata.translatorType) {
+ var found = false;
+ for each(var type in TRANSLATOR_TYPES) {
+ if (metadata.translatorType == type) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ throw ("Invalid translatorType '" + metadata.translatorType + "' in Zotero.Translators.save()");
+ }
+ }
+
+ if (!metadata.label) {
+ throw ("metadata.label not provided in Zotero.Translators.save()");
+ }
+
+ if (!metadata.priority) {
+ throw ("metadata.priority not provided in Zotero.Translators.save()");
+ }
+
+ if (!metadata.lastUpdated) {
+ throw ("metadata.lastUpdated not provided in Zotero.Translators.save()");
+ }
+
+ if (!code) {
+ throw ("code not provided in Zotero.Translators.save()");
+ }
+
+ var fileName = Zotero.Translators.getFileNameFromLabel(metadata.label);
+ var destFile = Zotero.getTranslatorsDirectory();
+ destFile.append(fileName);
+
+ var nsIJSON = Cc["@mozilla.org/dom/json;1"].createInstance(Ci.nsIJSON);
+ var metadataJSON = nsIJSON.encode(metadata);
+
+ var str = metadataJSON + "\n\n" + code;
+
+ var translator = Zotero.Translators.get(metadata.translatorID);
+ if (translator && destFile.equals(translator.file)) {
+ var sameFile = true;
+ }
+
+ if (!sameFile && destFile.exists()) {
+ var msg = "Overwriting translator with same filename '"
+ + fileName + "'";
+ Zotero.debug(msg, 1);
+ Zotero.debug(metadata, 1);
+ Components.utils.reportError(msg + " in Zotero.Translators.save()");
+ }
+
+ if (translator && translator.file.exists()) {
+ translator.file.remove(false);
+ }
+
+ Zotero.debug("Saving translator '" + metadata.label + "'");
+ Zotero.debug(str);
+ Zotero.File.putContents(destFile, str);
+
+ return destFile;
+ }
}
/**
@@ -224,6 +307,7 @@ Zotero.Translator.prototype.logError = function(message, type, line, lineNumber,
Zotero.log(message, type ? type : "error", ios.newFileURI(this.file).spec);
}
+
/*
* Zotero.Translate: a class for translation of Zotero metadata from and to
* other formats