diff --git a/translators/PLoS Journals.js b/translators/PLoS Journals.js index a555bb25b..a76ac7d21 100644 --- a/translators/PLoS Journals.js +++ b/translators/PLoS Journals.js @@ -2,57 +2,82 @@ "translatorID":"9575e804-219e-4cd6-813d-9b690cbfc0fc", "translatorType":4, "label":"PLoS Journals", - "creator":"Michael Berkowitz", - "target":"http://www\\.plos(one|ntds|compbiol|pathogens|genetics)\\.org/(search|article)/", + "creator":"Michael Berkowitz And Rintze Zelle", + "target":"http://www\\.plos(one|ntds|compbiol|pathogens|genetics|medicine|biology)\\.org/(search|article)/", "minVersion":"1.0.0b4.r5", "maxVersion":"", "priority":100, "inRepository":true, - "lastUpdated":"2009-01-08 08:19:07" + "lastUpdated":"2009-05-31 20:57:07" } function detectWeb(doc, url) { - if (url.indexOf("Search.action") != -1 || url.indexOf("browse.action") != -1) { - return "multiple"; - } else if (url.indexOf("article") != -1) { + if (url.indexOf("Search.action") != -1 || url.indexOf("browse.action") != -1 || url.indexOf("browseIssue.action") != -1) { + return "multiple"; + } else if (url.indexOf("article/info") != -1) { return "journalArticle"; } } -function doWeb(doc, url) { + +function getSelectedItems(doc, articleRegEx) { var items = new Object(); var texts = new Array(); + var articles = doc.evaluate(articleRegEx, doc, null, XPathResult.ANY_TYPE, null); + var next_art = articles.iterateNext(); + while (next_art) { + items[next_art.href] = next_art.textContent; + next_art = articles.iterateNext(); + } + items = Zotero.selectItems(items); + for (var i in items) { + texts.push(i); + } + return(texts); +} + +function doWeb(doc, url) { if (url.indexOf("Search.action") != -1 || url.indexOf("browse.action") != -1) { var articlex = '//span[@class="article"]/a'; - var articles = doc.evaluate(articlex, doc, null, XPathResult.ANY_TYPE, null); - var next_art = articles.iterateNext(); - while (next_art) { - items[next_art.href] = next_art.textContent; - next_art = articles.iterateNext(); - } - items = Zotero.selectItems(items); - for (var i in items) { - texts.push(i); - } + var texts = getSelectedItems(doc, articlex); + } else if (url.indexOf("browseIssue.action") != -1) { + var articlex = '//div[@class="article"]/h3/a'; + var texts = getSelectedItems(doc, articlex); } else { - texts.push(url); + var texts = new Array(url); } - Zotero.Utilities.processDocuments(texts, function(newDoc, url) { - var doi = newDoc.location.href.match(/doi(\/|%2F)(.*)$/)[2]; - var newURL = newDoc.location.href.replace("info", "getRisCitation.action?articleURI=info"); - var pdfURL = newDoc.location.href.replace("info", "fetchObjectAttachment.action?uri=info") + '&representation=PDF'; - Zotero.Utilities.HTTP.doGet(newURL, function(text) { - var translator = Zotero.loadTranslator("import"); - translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); - translator.setString(text); - translator.setHandler("itemDone", function(obj, item) { - item.attachments.push({url:pdfURL, title:"PLoS One Full Text PDF", mimeType:"application/pdf"}); - item.DOI = doi; - item.repository = item.publicationTitle; - item.complete(); - }); - translator.translate(); - }); + + var risLinks = new Array(); + for (var i in texts) { + texts[i]=texts[i].replace(/;jsessionid[^;]+/, "");//Strip sessionID string + var risLink = texts[i].replace("info", "getRisCitation.action?articleURI=info"); + risLinks.push(risLink); + } + + Zotero.Utilities.HTTP.doGet(risLinks, function(text) { + var risLink = texts.shift(); + var pdfURL = risLink.replace("info", "fetchObjectAttachment.action?uri=info") + '&representation=PDF'; + var doi = risLink.match(/doi(\/|%2F)(.*)$/)[2]; + text = text.replace(text.match(/(ER[^\n]*)([^\0]*)/)[2],"");//Remove stray M3-tag at the end of the RIS record + text = text.replace("%2F","/");//Replace %2F characters by forward slashes in url + doi = doi.replace("%2F","/");//Replace %2F characters by forward slashes in doi + + // grab the UR link for a snapshot then blow it away + var snapshot = text.match(/UR\s+\-\s+(.*)/)[1]; + text = text.replace(/UR\s+\-(.*)/, ""); + + var translator = Zotero.loadTranslator("import"); + translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); + translator.setString(text); + translator.setHandler("itemDone", function(obj, item) { + //item.attachments[0]=({url:pdfURL, title:"PLoS Full Text PDF", mimeType:"application/pdf"}); + item.attachments.push({url:pdfURL, title:"PLoS Full Text PDF", mimeType:"application/pdf"}); + item.attachments.push({url:snapshot, title:"PLoS Snapshot", mimeType:"text/html", snapshot:true}); + item.DOI = doi; + item.repository = item.publicationTitle; + item.complete(); + }); + translator.translate(); }, function() {Zotero.done();}); Zotero.wait(); } \ No newline at end of file