Add Zotero.Translators.save(metadata, code)
This commit is contained in:
parent
c324ae8f8e
commit
ebf6447351
2 changed files with 86 additions and 28 deletions
|
@ -1038,35 +1038,9 @@ Zotero.Schema = new function(){
|
||||||
? xmlnode.getElementsByTagName('detectCode')[0].firstChild.nodeValue
|
? xmlnode.getElementsByTagName('detectCode')[0].firstChild.nodeValue
|
||||||
: null;
|
: null;
|
||||||
var code = xmlnode.getElementsByTagName('code')[0].firstChild.nodeValue;
|
var code = xmlnode.getElementsByTagName('code')[0].firstChild.nodeValue;
|
||||||
|
code = (detectCode ? detectCode + "\n\n" : "") + code;
|
||||||
|
|
||||||
var fileName = Zotero.Translators.getFileNameFromLabel(metadata.label);
|
return Zotero.Translators.save(metadata, code);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -120,6 +120,89 @@ Zotero.Translators = new function() {
|
||||||
this.getFileNameFromLabel = function(label) {
|
this.getFileNameFromLabel = function(label) {
|
||||||
return Zotero.File.getValidFileName(label) + ".js";
|
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.log(message, type ? type : "error", ios.newFileURI(this.file).spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Zotero.Translate: a class for translation of Zotero metadata from and to
|
* Zotero.Translate: a class for translation of Zotero metadata from and to
|
||||||
* other formats
|
* other formats
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue