closes #630, Implement copyCitationsToClipboard in fileInterface.js
the function is actually called copyCitationToClipboard, because it generates a single citation of multiple items if multiple items are passed to it. if this isn't the desired behavior, it's easy to change.
This commit is contained in:
parent
c68dbce961
commit
bccef73b0f
|
@ -116,6 +116,7 @@ var Zotero_File_Interface = new function() {
|
||||||
this.bibliographyFromCollection = bibliographyFromCollection;
|
this.bibliographyFromCollection = bibliographyFromCollection;
|
||||||
this.bibliographyFromItems = bibliographyFromItems;
|
this.bibliographyFromItems = bibliographyFromItems;
|
||||||
this.copyItemsToClipboard = copyItemsToClipboard;
|
this.copyItemsToClipboard = copyItemsToClipboard;
|
||||||
|
this.copyCitationToClipboard = copyCitationToClipboard;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Creates Zotero.Translate instance and shows file picker for file export
|
* Creates Zotero.Translate instance and shows file picker for file export
|
||||||
|
@ -340,6 +341,41 @@ var Zotero_File_Interface = new function() {
|
||||||
clipboardService.setData(transferable, null, Components.interfaces.nsIClipboard.kGlobalClipboard);
|
clipboardService.setData(transferable, null, Components.interfaces.nsIClipboard.kGlobalClipboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copies HTML and text citations for passed items in given style
|
||||||
|
*
|
||||||
|
* Does not check that items are actual references (and not notes or attachments)
|
||||||
|
*/
|
||||||
|
function copyCitationToClipboard(items, style) {
|
||||||
|
// copy to clipboard
|
||||||
|
var transferable = Components.classes["@mozilla.org/widget/transferable;1"].
|
||||||
|
createInstance(Components.interfaces.nsITransferable);
|
||||||
|
var clipboardService = Components.classes["@mozilla.org/widget/clipboard;1"].
|
||||||
|
getService(Components.interfaces.nsIClipboard);
|
||||||
|
|
||||||
|
var csl = Zotero.Cite.getStyle(style);
|
||||||
|
csl.preprocessItems(items);
|
||||||
|
|
||||||
|
// add HTML
|
||||||
|
var bibliography = csl.createCitation({citationType:1, items:items}, "HTML");
|
||||||
|
var str = Components.classes["@mozilla.org/supports-string;1"].
|
||||||
|
createInstance(Components.interfaces.nsISupportsString);
|
||||||
|
str.data = bibliography;
|
||||||
|
transferable.addDataFlavor("text/html");
|
||||||
|
transferable.setTransferData("text/html", str, bibliography.length*2);
|
||||||
|
|
||||||
|
// add text
|
||||||
|
var bibliography = csl.createCitation({citationType:1, items:items}, "Text");
|
||||||
|
var str = Components.classes["@mozilla.org/supports-string;1"].
|
||||||
|
createInstance(Components.interfaces.nsISupportsString);
|
||||||
|
str.data = bibliography;
|
||||||
|
transferable.addDataFlavor("text/unicode");
|
||||||
|
transferable.setTransferData("text/unicode", str, bibliography.length*2);
|
||||||
|
|
||||||
|
clipboardService.setData(transferable, null, Components.interfaces.nsIClipboard.kGlobalClipboard);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Shows bibliography options and creates a bibliography
|
* Shows bibliography options and creates a bibliography
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -444,6 +444,22 @@ Zotero.CSL._locatorTerms = {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* create a citation (in-text or footnote)
|
* create a citation (in-text or footnote)
|
||||||
|
* accepts a citation object containing:
|
||||||
|
*
|
||||||
|
* citation.citationType
|
||||||
|
* 1 = first
|
||||||
|
* 2 = subsequent
|
||||||
|
* 3 = ibid
|
||||||
|
* 4 = ibid + pages
|
||||||
|
*
|
||||||
|
* citation.locators
|
||||||
|
* array of locators
|
||||||
|
*
|
||||||
|
* citation.locatorTypes
|
||||||
|
* array of types for given locators (see above)
|
||||||
|
*
|
||||||
|
* citation.items/citation.itemIDs
|
||||||
|
* array of items/itemIDs to be cited
|
||||||
*/
|
*/
|
||||||
Zotero.CSL.prototype.createCitation = function(citation, format) {
|
Zotero.CSL.prototype.createCitation = function(citation, format) {
|
||||||
var string = new Zotero.CSL.FormattedString(this, format);
|
var string = new Zotero.CSL.FormattedString(this, format);
|
||||||
|
@ -475,8 +491,10 @@ Zotero.CSL.prototype.createCitation = function(citation, format) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else { // indicates primary or subsequent
|
} else { // indicates primary or subsequent
|
||||||
var lasti = citation.itemIDs.length-1;
|
if(citation.itemIDs) citation.items = citation.itemIDs;
|
||||||
for(var i in citation.itemIDs) {
|
|
||||||
|
var lasti = citation.items.length-1;
|
||||||
|
for(var i in citation.items) {
|
||||||
var locatorType = false;
|
var locatorType = false;
|
||||||
var locator = false;
|
var locator = false;
|
||||||
if(citation.locators) {
|
if(citation.locators) {
|
||||||
|
@ -485,7 +503,15 @@ Zotero.CSL.prototype.createCitation = function(citation, format) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var position = (citation.citationType[i] == 1 ? "first" : "subsequent");
|
var position = (citation.citationType[i] == 1 ? "first" : "subsequent");
|
||||||
var citationString = this._getCitation(Zotero.Items.get(citation.itemIDs[i]),
|
|
||||||
|
// allow either item objects or ids
|
||||||
|
if(typeof citation.items[i] == "object") {
|
||||||
|
item = citation.items[i];
|
||||||
|
} else {
|
||||||
|
item = Zotero.Items.get(citation.items[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
var citationString = this._getCitation(item,
|
||||||
position,
|
position,
|
||||||
locatorType, locator, format, this._cit);
|
locatorType, locator, format, this._cit);
|
||||||
string.concat(citationString);
|
string.concat(citationString);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user