www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit 227e393922493a9fdba26641df6afbce685d3c54
parent 0f649d660849d284fe70a3d3a5f3a9ceb31c6acb
Author: Simon Kornblith <simon@simonster.com>
Date:   Mon,  4 May 2009 20:58:58 +0000

don't let DOI translator hang some page loads


Diffstat:
Mtranslators/DOI.js | 55++++++++++++++++++++++++++++++++++++-------------------
1 file changed, 36 insertions(+), 19 deletions(-)

diff --git a/translators/DOI.js b/translators/DOI.js @@ -11,19 +11,46 @@ "lastUpdated":"2009-04-07 15:48:00" } -var DOIre = /(?:doi:)?\s*(10\.[\w.]+\/[^\/\s]+)/igm; - var items = {}; var selectArray = {}; +// builds a list of DOIs +function getDOIs(doc) { + const DOIre = /\b(10\.[\w.]+\/[^\/\s]+)\.?\b/igm; + const DOIXPath = "//text()[contains(., '10.')]"; + + DOIre.lastMatch = 0; + 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) { - var m1 = DOIre.exec(doc.documentElement.textContent); - var m2 = DOIre.exec(doc.documentElement.textContent); - if(m1 && m2) { - return "multiple"; - } else if(m1) { - return "journalArticle"; + 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) { @@ -70,17 +97,7 @@ function retrieveNextDOI(DOIs, doc) { } 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); - } - + var DOIs = getDOIs(doc); // retrieve full items asynchronously Zotero.wait(); retrieveNextDOI(DOIs, doc);