88 lines
No EOL
2.1 KiB
JavaScript
88 lines
No EOL
2.1 KiB
JavaScript
{
|
|
"translatorID":"c159dcfe-8a53-4301-a499-30f6549c340d",
|
|
"translatorType":4,
|
|
"label":"DOI",
|
|
"creator":"Simon Kornblith",
|
|
"target":null,
|
|
"minVersion":"1.0.10",
|
|
"maxVersion":"",
|
|
"priority":300,
|
|
"inRepository":true,
|
|
"lastUpdated":"2009-04-07 15:48:00"
|
|
}
|
|
|
|
//var DOIre = /(doi:)?\s*(10\.[\w.]+\/[^\/\s]+)/ig;
|
|
var DOIre = /doi:\s*(10\.[\w.]+\/[^\/\s]+)/ig;
|
|
|
|
var items = {};
|
|
var selectArray = {};
|
|
|
|
function detectWeb(doc, url) {
|
|
var m1 = DOIre.exec(doc.documentElement.textContent);
|
|
var m2 = DOIre.exec(doc.documentElement.textContent);
|
|
if(m1 && m2) {
|
|
return "multiple";
|
|
} else if(m1) {
|
|
return "journalArticle";
|
|
}
|
|
}
|
|
|
|
function retrieveNextDOI(DOIs, doc) {
|
|
if(DOIs.length) {
|
|
// retrieve DOI
|
|
var DOI = DOIs.shift();
|
|
var translate = Zotero.loadTranslator("search");
|
|
translate.setTranslator("11645bd1-0420-45c1-badb-53fb41eeb753");
|
|
var item = {"itemType":"journalArticle", "DOI":DOI};
|
|
translate.setSearch(item);
|
|
// don't save when item is done
|
|
translate.setHandler("itemDone", function(translate, item) {
|
|
item.repository = "CrossRef";
|
|
items[DOI] = item;
|
|
selectArray[DOI] = item.title;
|
|
});
|
|
translate.setHandler("done", function(translate) {
|
|
retrieveNextDOI(DOIs, doc);
|
|
});
|
|
translate.translate();
|
|
} else {
|
|
// all DOIs retrieved now
|
|
// check to see if there is more than one DOI
|
|
var numDOIs = 0;
|
|
for(var DOI in selectArray) {
|
|
numDOIs++;
|
|
if(numDOIs == 2) break;
|
|
}
|
|
if(numDOIs == 0) {
|
|
throw "DOI Translator: could not find DOI";
|
|
} else if(numDOIs == 1) {
|
|
// do we want to add URL of the page?
|
|
items[DOI].url = doc.location.href;
|
|
items[DOI].attachments = [{document:doc}];
|
|
items[DOI].complete();
|
|
} else {
|
|
selectArray = Zotero.selectItems(selectArray);
|
|
for(var DOI in selectArray) {
|
|
items[DOI].complete();
|
|
}
|
|
}
|
|
Zotero.done();
|
|
}
|
|
}
|
|
|
|
function doWeb(doc, url) {
|
|
// build a list of DOIs
|
|
DOIre.lastMatch = 0;
|
|
DOIs = [];
|
|
while((m = DOIre.exec(doc.documentElement.textContent))) {
|
|
var DOI = m[1];
|
|
if(DOI.substr(-1) == ")" && DOI.indexOf("(") == -1) {
|
|
DOI = DOI.substr(0, DOI.length-1);
|
|
}
|
|
DOIs.push(DOI);
|
|
}
|
|
|
|
// retrieve full items asynchronously
|
|
Zotero.wait();
|
|
retrieveNextDOI(DOIs, doc);
|
|
} |