//var editor = document.getElementById('zotero-csl-editor');
//generateBibliography(editor.value);
this.generateBibliography(this.loadStyleFromEditor());
//
}
//
//this.generateBibliography(this.loadStyleFromEditor());
}
this.save = function() {
var editor = document.getElementById('zotero-csl-editor');
var style = editor.value;
const nsIFilePicker = Components.interfaces.nsIFilePicker;
var fp = Components.classes["@mozilla.org/filepicker;1"]
.createInstance(nsIFilePicker);
fp.init(window, Zotero.getString('styles.editor.save'), nsIFilePicker.modeSave);
fp.appendFilter("Citation Style Language", "*.csl");
//get the filename from the id; we could consider doing even more here like creating the id from filename.
var parser = new DOMParser();
var doc = parser.parseFromString(style, 'text/xml');
var filename = doc.getElementsByTagName("id");
if (filename) {
filename = filename[0].textContent;
fp.defaultString = filename.replace(/.+\//, "") + ".csl";
}
else {
fp.defaultString = "untitled.csl";
}
var rv = fp.show();
if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
var outputFile = fp.file;
Zotero.File.putContents(outputFile, style);
}
};
function handleKeyPress(event) {
if (event.keyCode == 9 &&
(!event.shiftKey && !event.metaKey && !event.altKey && !event.ctrlKey)) {
_insertText("\t");
event.preventDefault();
}
}
function loadCSL(cslID) {
var editor = document.getElementById('zotero-csl-editor');
var style = Zotero.Styles.get(cslID);
editor.value = Zotero.File.getContents(style.file);
editor.cslID = cslID;
editor.doCommand();
document.getElementById('zotero-csl-list').value = cslID;
}
this.loadStyleFromEditor = function() {
var styleObject;
try {
styleObject = new Zotero.Style(
document.getElementById('zotero-csl-editor').value
);
} catch(e) {
document.getElementById('zotero-csl-preview-box')
.contentDocument.documentElement.innerHTML = ''
+ Zotero.getString('styles.editor.warning.parseError')
+ '
' + e + '
';
throw e;
}
return styleObject;
}
this.onStyleModified = function(str) {
document.getElementById('zotero-csl-list').selectedIndex = -1;
let styleObject = this.loadStyleFromEditor();
Zotero.Styles.updateLocaleList(
document.getElementById("locale-menu"),
styleObject,
Zotero.Prefs.get('export.lastLocale')
);
Zotero_CSL_Editor.generateBibliography(styleObject);
}
this.generateBibliography = function(style) {
var iframe = document.getElementById('zotero-csl-preview-box');
var items = Zotero.getActiveZoteroPane().getSelectedItems();
if (items.length == 0) {
iframe.contentDocument.documentElement.innerHTML =
''
+ Zotero.getString('styles.editor.warning.noItems')
+ '
';
return;
}
var selectedLocale = document.getElementById("locale-menu").value;
var styleEngine;
try {
styleEngine = style.getCiteProc(style.locale || selectedLocale);
} catch(e) {
iframe.contentDocument.documentElement.innerHTML = '' + Zotero.getString('styles.editor.warning.parseError') + '
'+e+'
';
throw e;
}
var itemIds = [items[i].id for (i in items)];
styleEngine.updateItems(itemIds);
// Generate multiple citations
var citation = {};
citation.citationItems = [];
citation.properties = {};
citation.properties.noteIndex = 1;
for (var i = 0, ilen = items.length; i < ilen; i += 1) {
citation.citationItems.push({id:itemIds[i]});
}
// Generate single citations
var author = document.getElementById("preview-suppress-author").checked;
var search = document.getElementById('preview-pages');
var loc = document.getElementById('zotero-csl-page-type');
var pos = document.getElementById('zotero-ref-position').selectedItem.value;
var citations = '' + Zotero.getString('styles.editor.output.individualCitations') + '
';
for (var i=0; i';
}
try {
var multCitations = '
' + Zotero.getString('styles.editor.output.singleCitation') + '
' +
styleEngine.previewCitationCluster(citation, [], [], "html");
// Generate bibliography
styleEngine.updateItems(itemIds);
var bibliography = '
' + Zotero.getString('styles.bibliography') + '
' +
Zotero.Cite.makeFormattedBibliography(styleEngine, "html");
iframe.contentDocument.documentElement.innerHTML =
'' + citations + multCitations + bibliography + '
';
} catch(e) {
iframe.contentDocument.documentElement.innerHTML = '' + Zotero.getString('styles.editor.warning.renderError') + '
'+e+'
';
throw e;
}
}
// From http://kb.mozillazine.org/Inserting_text_at_cursor
function _insertText(text) {
var command = "cmd_insertText";
var controller = document.commandDispatcher.getControllerForCommand(command);
if (controller && controller.isCommandEnabled(command)) {
controller = controller.QueryInterface(Components.interfaces.nsICommandController);
var params = Components.classes["@mozilla.org/embedcomp/command-params;1"];
params = params.createInstance(Components.interfaces.nsICommandParams);
params.setStringValue("state_data", "\t");
controller.doCommandWithParams(command, params);
}
}
}();