diff --git a/translators/ScienceDirect.js b/translators/ScienceDirect.js index f70c80ef0..e3ef5e09d 100644 --- a/translators/ScienceDirect.js +++ b/translators/ScienceDirect.js @@ -28,8 +28,6 @@ function doWeb(doc, url) { if (prefix == 'x') return namespace; else return null; } : null; - // MCB-04dec08: Old guest detection logic was broken, the check of advertisement has not been fully vetted - //if (!doc.evaluate('//img[contains(@src, "guest_user.gif")]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { if (!doc.evaluate('//div[@title = "Advertisement."]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var articles = new Array(); if(detectWeb(doc, url) == "multiple") { @@ -59,15 +57,31 @@ function doWeb(doc, url) { Zotero.Utilities.processDocuments(articles, function(newDoc) { var doi = newDoc.evaluate('//div[@class="articleHeaderInner"][@id="articleHeader"]/a[contains(text(), "doi")]', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.substr(4); - // MCB-04dec08: grab the correct PDF link, there are at least 2 versions - // MCB-04dec08: In RARE cases the PDF link does not exists...need some logic here and below in the item.attachments section var tempPDF = newDoc.evaluate('//a[@class="noul" and div/div[contains(text(), "PDF")]]', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); - var PDF = (tempPDF) ? - tempPDF.href : - newDoc.evaluate('//a[@class="noul" and contains(text(), "PDF")]', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; + if (!tempPDF) { // PDF xpath failed, lets try another + tempPDF = newDoc.evaluate('//a[@class="noul" and contains(text(), "PDF")]', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); + if (!tempPDF) { // second PDF xpath failed set PDF to null to avoid item.attachements + PDF = null; + } else { + PDF = tempPDF.href; // second xpath succeeded, use that link + } + } else { + var PDF = tempPDF.href; // first xpath succeeded, use that link + } var url = newDoc.location.href; var get = newDoc.evaluate('//a[img[contains(@src, "exportarticle_a.gif")]]', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; + // if the PDF is available make it an attachment + if (PDF) { + attachements = [ + {url:url, title:"ScienceDirect Snapshot", mimeType:"text/html"}, + {url:PDF, title:"ScienceDirect Full Text PDF", mimeType:"application/pdf"} // Sometimes PDF is null...I hope that is ok + ]; + } else { + attachements = [ + {url:url, title:"ScienceDirect Snapshot", mimeType:"text/html"}, + ]; + } Zotero.Utilities.HTTP.doGet(get, function(text) { var md5 = text.match(/]+)>/)[1]; var acct = text.match(/]+)>/)[1]; @@ -88,10 +102,7 @@ function doWeb(doc, url) { translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { - item.attachments = [ - {url:url, title:"ScienceDirect Snapshot", mimeType:"text/html"}, - {url:PDF, title:"ScienceDirect Full Text PDF", mimeType:"application/pdf"} - ]; + item.attachments = attachements; if(item.notes[0]) {