don't let DOI translator hang some page loads
This commit is contained in:
parent
0f649d6608
commit
227e393922
1 changed files with 37 additions and 20 deletions
|
@ -11,19 +11,46 @@
|
||||||
"lastUpdated":"2009-04-07 15:48:00"
|
"lastUpdated":"2009-04-07 15:48:00"
|
||||||
}
|
}
|
||||||
|
|
||||||
var DOIre = /(?:doi:)?\s*(10\.[\w.]+\/[^\/\s]+)/igm;
|
|
||||||
|
|
||||||
var items = {};
|
var items = {};
|
||||||
var selectArray = {};
|
var selectArray = {};
|
||||||
|
|
||||||
function detectWeb(doc, url) {
|
// builds a list of DOIs
|
||||||
var m1 = DOIre.exec(doc.documentElement.textContent);
|
function getDOIs(doc) {
|
||||||
var m2 = DOIre.exec(doc.documentElement.textContent);
|
const DOIre = /\b(10\.[\w.]+\/[^\/\s]+)\.?\b/igm;
|
||||||
if(m1 && m2) {
|
const DOIXPath = "//text()[contains(., '10.')]";
|
||||||
return "multiple";
|
|
||||||
} else if(m1) {
|
DOIre.lastMatch = 0;
|
||||||
return "journalArticle";
|
var DOIs = [];
|
||||||
|
|
||||||
|
var node, m;
|
||||||
|
var results = doc.evaluate(DOIXPath, doc, null, XPathResult.ANY_TYPE, null);
|
||||||
|
while(node = results.iterateNext()) {
|
||||||
|
while(m = DOIre.exec(node.nodeValue)) {
|
||||||
|
var DOI = m[1];
|
||||||
|
if(DOI.substr(-1) == ")" && DOI.indexOf("(") == -1) {
|
||||||
|
DOI = DOI.substr(0, DOI.length-1);
|
||||||
|
}
|
||||||
|
// only add new DOIs
|
||||||
|
if(DOIs.indexOf(DOI) == -1) {
|
||||||
|
DOIs.push(DOI);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return DOIs;
|
||||||
|
}
|
||||||
|
|
||||||
|
function detectWeb(doc, url) {
|
||||||
|
const blacklistRe = /^https?:\/\/[^/]*google\.com/i;
|
||||||
|
|
||||||
|
if(!blacklistRe.test(url)) {
|
||||||
|
var DOIs = getDOIs(doc);
|
||||||
|
Zotero.debug(DOIs);
|
||||||
|
if(DOIs.length) {
|
||||||
|
return DOIs.length == 1 ? "journalArticle" : "multiple";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function retrieveNextDOI(DOIs, doc) {
|
function retrieveNextDOI(DOIs, doc) {
|
||||||
|
@ -70,17 +97,7 @@ function retrieveNextDOI(DOIs, doc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function doWeb(doc, url) {
|
function doWeb(doc, url) {
|
||||||
// build a list of DOIs
|
var DOIs = getDOIs(doc);
|
||||||
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
|
// retrieve full items asynchronously
|
||||||
Zotero.wait();
|
Zotero.wait();
|
||||||
retrieveNextDOI(DOIs, doc);
|
retrieveNextDOI(DOIs, doc);
|
||||||
|
|
Loading…
Add table
Reference in a new issue