Closes #44, Allow generating citations via right-click

Currently generates multi-source citations for multiple items for note
styles, but a list of note citations might be better.

Also, context menu option is unchanged, since it becomes very long if
you add "Citation/Bibliography".
This commit is contained in:
Dan Stillman 2012-11-01 21:36:12 -04:00
parent 2139603ae1
commit 079b767974
5 changed files with 79 additions and 20 deletions

View file

@ -95,9 +95,24 @@ var Zotero_File_Interface_Bibliography = new function() {
// ONLY FOR bibliography.xul: export options
if(document.getElementById("save-as-rtf")) {
var settings = Zotero.Prefs.get("export.bibliographySettings");
try {
settings = JSON.parse(settings);
var mode = settings.mode;
var method = settings.method;
}
// If not JSON, assume it's the previous format-as-a-string
catch (e) {
method = settings;
}
if (!mode) mode = "bibliography";
if (!method) method = "save-as-rtf";
// restore saved bibliographic settings
document.getElementById('output-radio').selectedItem =
document.getElementById(Zotero.Prefs.get("export.bibliographySettings"));
document.getElementById('output-mode-radio').selectedItem =
document.getElementById(mode);
document.getElementById('output-method-radio').selectedItem =
document.getElementById(method);
}
// ONLY FOR integrationDocPrefs.xul: update status of displayAs, set
@ -126,7 +141,7 @@ var Zotero_File_Interface_Bibliography = new function() {
}
/*
* ONLY FOR integrationDocPrefs.xul: called when style is changed
* Called when style is changed
*/
function styleChanged(index) {
// When called from init(), selectedItem isn't yet set
@ -139,6 +154,10 @@ var Zotero_File_Interface_Bibliography = new function() {
var selectedStyle = selectedItem.getAttribute('value');
//
// For integrationDocPrefs.xul
//
// update status of displayAs box based on style class
if(document.getElementById("displayAs")) {
var isNote = Zotero.Styles.get(selectedStyle).class == "note";
@ -151,16 +170,32 @@ var Zotero_File_Interface_Bibliography = new function() {
document.getElementById("bookmarks").disabled = isNote;
document.getElementById("bookmarks-caption").disabled = isNote;
}
//
// For bibliography.xul
//
// Change label to "Citation" or "Note" depending on style class
if(document.getElementById("citation")) {
if(Zotero.Styles.get(selectedStyle).class == "note") {
var label = Zotero.getString('citation.note');
} else {
var label = Zotero.getString('citation.citation');
}
document.getElementById("citation").label = label;
}
}
function acceptSelection() {
// collect code
_io.style = document.getElementById("style-listbox").selectedItem.value;
if(document.getElementById("output-radio")) {
if(document.getElementById("output-method-radio")) {
// collect settings
_io.output = document.getElementById("output-radio").selectedItem.id;
_io.mode = document.getElementById("output-mode-radio").selectedItem.id;
_io.method = document.getElementById("output-method-radio").selectedItem.id;
// save settings
Zotero.Prefs.set("export.bibliographySettings", _io.output);
Zotero.Prefs.set("export.bibliographySettings",
JSON.stringify({ mode: _io.mode, method: _io.method }));
}
// ONLY FOR integrationDocPrefs.xul: collect displayAs

View file

@ -14,11 +14,18 @@
<vbox id="zotero-bibliography-container">
<groupbox>
<caption label="&zotero.bibliography.style.label;"/>
<listbox id="style-listbox" oncommand="Zotero_File_Interface_Bibliography.styleChanged()"/>
<listbox id="style-listbox" onselect="Zotero_File_Interface_Bibliography.styleChanged()"/>
</groupbox>
<groupbox>
<caption label="&zotero.bibliography.output.label;"/>
<radiogroup id="output-radio">
<caption label="&zotero.bibliography.outputMode;"/>
<radiogroup id="output-mode-radio">
<radio id="citation"/>
<radio id="bibliography" label="&zotero.bibliography.bibliography;"/>
</radiogroup>
</groupbox>
<groupbox>
<caption label="&zotero.bibliography.outputMethod;"/>
<radiogroup id="output-method-radio">
<radio id="save-as-rtf" label="&zotero.bibliography.saveAsRTF.label;"/>
<radio id="save-as-html" label="&zotero.bibliography.saveAsHTML.label;"/>
<radio id="copy-to-clipboard" label="&zotero.bibliography.copyToClipboard.label;"/>

View file

@ -489,30 +489,43 @@ var Zotero_File_Interface = new function() {
var newDialog = window.openDialog("chrome://zotero/content/bibliography.xul",
"_blank","chrome,modal,centerscreen", io);
if(!io.output) return;
if(!io.method) return;
// determine output format
var format = "html";
if(io.output == "save-as-rtf") {
if(io.method == "save-as-rtf") {
format = "rtf";
}
// generate bibliography
try {
if(io.output == 'copy-to-clipboard') {
copyItemsToClipboard(items, io.style);
if(io.method == 'copy-to-clipboard') {
if (io.mode == 'citation') {
copyCitationToClipboard(items, io.style);
}
else {
copyItemsToClipboard(items, io.style);
}
return;
}
else {
var style = Zotero.Styles.get(io.style);
var bibliography = Zotero.Cite.makeFormattedBibliographyOrCitationList(style, items, format);
if (io.mode == 'citation') {
var csl = Zotero.Styles.get(format).csl;
csl.updateItems([item.id for each(item in items)]);
var citation = {citationItems:[{id:item.id} for each(item in items)], properties:{}};
var bibliography = csl.previewCitationCluster(citation, [], [], "html");
}
else {
var style = Zotero.Styles.get(io.style);
var bibliography = Zotero.Cite.makeFormattedBibliographyOrCitationList(style, items, format);
}
}
} catch(e) {
window.alert(Zotero.getString("fileInterface.bibliographyGenerationError"));
throw(e);
}
if(io.output == "print") {
if(io.method == "print") {
// printable bibliography, using a hidden browser
var browser = Zotero.Browser.createHiddenBrowser(window);
@ -549,7 +562,7 @@ var Zotero_File_Interface = new function() {
browser.addEventListener("pageshow", listener, false);
browser.loadURIWithFlags("data:text/html;charset=utf-8,"+encodeURI(bibliography),
Components.interfaces.nsIWebNavigation.LOAD_FLAGS_BYPASS_HISTORY, null, "utf-8", null);
} else if(io.output == "save-as-html") {
} else if(io.method == "save-as-html") {
var fStream = _saveBibliography(name, "HTML");
if(fStream !== false) {
@ -575,7 +588,7 @@ var Zotero_File_Interface = new function() {
os.close();
fStream.close();
}
} else if(io.output == "save-as-rtf") {
} else if(io.method == "save-as-rtf") {
var fStream = _saveBibliography(name, "RTF");
if(fStream !== false) {
fStream.write(bibliography, bibliography.length);

View file

@ -131,9 +131,11 @@
<!ENTITY zotero.selectitems.cancel.label "Cancel">
<!ENTITY zotero.selectitems.select.label "OK">
<!ENTITY zotero.bibliography.title "Create Bibliography">
<!ENTITY zotero.bibliography.title "Create Citation/Bibliography">
<!ENTITY zotero.bibliography.style.label "Citation Style:">
<!ENTITY zotero.bibliography.output.label "Output Format">
<!ENTITY zotero.bibliography.outputMode "Output Mode:">
<!ENTITY zotero.bibliography.bibliography "Bibliography">
<!ENTITY zotero.bibliography.outputMethod "Output Method:">
<!ENTITY zotero.bibliography.saveAsRTF.label "Save as RTF">
<!ENTITY zotero.bibliography.saveAsHTML.label "Save as HTML">
<!ENTITY zotero.bibliography.copyToClipboard.label "Copy to Clipboard">

View file

@ -567,6 +567,8 @@ citation.multipleSources = Multiple Sources…
citation.singleSource = Single Source…
citation.showEditor = Show Editor…
citation.hideEditor = Hide Editor…
citation.citation = Citation
citation.note = Note
report.title.default = Zotero Report
report.parentItem = Parent Item: