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
|
@ -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
|
* Generate SQL to retrieve firstCreator field
|
||||||
*
|
*
|
||||||
|
|
|
@ -205,7 +205,7 @@ Zotero.OpenURL = new function() {
|
||||||
|
|
||||||
if(item.creators && item.creators.length) {
|
if(item.creators && item.creators.length) {
|
||||||
// encode first author as first and last
|
// encode first author as first and last
|
||||||
var firstCreator = item.creators[0];
|
let firstCreator = Zotero.Items.getFirstCreatorFromJSON(item);
|
||||||
if(item.itemType == "patent") {
|
if(item.itemType == "patent") {
|
||||||
_mapTag(firstCreator.firstName, "invfirst");
|
_mapTag(firstCreator.firstName, "invfirst");
|
||||||
_mapTag(firstCreator.lastName, "invlast");
|
_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…
Reference in New Issue
Block a user