Use best first creator for OpenURL author, not just first position
This also fixes Google Scholar Search lookup to use an author not in first creator position [1]. [1] https://forums.zotero.org/discussion/58384/
This commit is contained in:
parent
83d11947ff
commit
599598566b
3 changed files with 48 additions and 1 deletions
|
@ -955,6 +955,30 @@ Zotero.Items = function() {
|
|||
});
|
||||
|
||||
|
||||
/**
|
||||
* Given API JSON for an item, return the best first creator, regardless of creator order
|
||||
*
|
||||
* @return {Object|false} - Creator in API JSON format, or false
|
||||
*/
|
||||
this.getFirstCreatorFromJSON = function (json) {
|
||||
var primaryCreatorType = Zotero.CreatorTypes.getName(
|
||||
Zotero.CreatorTypes.getPrimaryIDForType(
|
||||
Zotero.ItemTypes.getID(json.itemType)
|
||||
)
|
||||
);
|
||||
let firstCreator = json.creators.find(creator => {
|
||||
return creator.creatorType == primaryCreatorType || creator.creatorType == 'author';
|
||||
});
|
||||
if (!firstCreator) {
|
||||
firstCreator = json.creators.find(creator => creator.creatorType == 'editor');
|
||||
}
|
||||
if (!firstCreator) {
|
||||
return false;
|
||||
}
|
||||
return firstCreator;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Generate SQL to retrieve firstCreator field
|
||||
*
|
||||
|
|
|
@ -205,7 +205,7 @@ Zotero.OpenURL = new function() {
|
|||
|
||||
if(item.creators && item.creators.length) {
|
||||
// encode first author as first and last
|
||||
var firstCreator = item.creators[0];
|
||||
let firstCreator = Zotero.Items.getFirstCreatorFromJSON(item);
|
||||
if(item.itemType == "patent") {
|
||||
_mapTag(firstCreator.firstName, "invfirst");
|
||||
_mapTag(firstCreator.lastName, "invlast");
|
||||
|
|
23
test/tests/openurlTest.js
Normal file
23
test/tests/openurlTest.js
Normal file
|
@ -0,0 +1,23 @@
|
|||
"use strict";
|
||||
|
||||
describe("Zotero.OpenURL", function() {
|
||||
describe("#createContextObject()", function () {
|
||||
it("should use firstCreator for author", function* () {
|
||||
var item = createUnsavedDataObject('item');
|
||||
item.setCreators([
|
||||
{
|
||||
firstName: "Aaa",
|
||||
lastName: "Editor",
|
||||
creatorType: 'editor'
|
||||
},
|
||||
{
|
||||
firstName: "Bbb",
|
||||
lastName: "Author",
|
||||
creatorType: 'author'
|
||||
}
|
||||
]);
|
||||
var co = Zotero.OpenURL.createContextObject(item, "1.0");
|
||||
assert.include(co, '&rft.aufirst=Bbb&rft.aulast=Author&');
|
||||
});
|
||||
});
|
||||
});
|
Loading…
Add table
Reference in a new issue