From 10e5766d8f83d5fe5df5ceb022aadb329585d96f Mon Sep 17 00:00:00 2001 From: Avram Lyon Date: Tue, 24 Aug 2010 20:40:17 +0000 Subject: [PATCH] Fixed ERIC translator --- translators/ERIC.js | 87 +++++++++++++++++++++++++++++---------------- 1 file changed, 56 insertions(+), 31 deletions(-) diff --git a/translators/ERIC.js b/translators/ERIC.js index a509f7c6b..8ed37654e 100644 --- a/translators/ERIC.js +++ b/translators/ERIC.js @@ -1,14 +1,14 @@ { - "translatorID":"e4660e05-a935-43ec-8eec-df0347362e4c", - "translatorType":4, - "label":"ERIC", - "creator":"Ramesh Srigiriraju", - "target":"^http://(?:www\\.)?eric\\.ed\\.gov/", - "minVersion":"1.0.0b4.r1", - "maxVersion":"", - "priority":100, - "inRepository":true, - "lastUpdated":"2008-12-15 05:30:00" + "translatorID":"e4660e05-a935-43ec-8eec-df0347362e4c", + "label":"ERIC", + "creator":"Ramesh Srigiriraju, Avram Lyon", + "target":"^http://(?:www\\.)?eric\\.ed\\.gov/", + "minVersion":"1.0.0b4.r1", + "maxVersion":"", + "priority":100, + "inRepository":"1", + "translatorType":4, + "lastUpdated":"2010-08-24 07:23:41" } function detectWeb(doc, url) { @@ -16,13 +16,21 @@ function detectWeb(doc, url) { var nsResolver=namespace?function(prefix) { return (prefix=="x")?namespace:null; }:null; - var searchpath='//form[@name="searchResultsForm"][@id="searchResultsForm"]'; + // Search results + var searchpath='//div[@id="searchFaceted"]//td[@class="resultHeader"]'; if(doc.evaluate(searchpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) return "multiple"; - //var singpath='//tr/td[@class="primaryHeader"][contains(text(), "Record Details")]'; - var singpath='contains(//div[@id="titleBarBlue"]/text(), "Record Details")'; - if(doc.evaluate(singpath, doc, nsResolver, XPathResult.ANY_TYPE, null).booleanValue) { - var typepath='//tr[td/span/strong/text()="Pub Types:"]/td[2]/text()'; + // Clipboard + if(url.match(/ERICWebPortal\/search\/clipboard\.jsp/)) + return "multiple"; + // folder + if(url.match(/ERICWebPortal\/MyERIC\/clipboard\/viewFolder\.jsp\?folderIndex/)) + return "multiple"; + // Individual record + var singpath='//div[@id="titleBarBlue"]'; + var res = doc.evaluate(singpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); + if(res && res.textContent.indexOf("Record Details") !== -1) { + var typepath='//tr[td/span/a/strong/text()="Pub Types:"]/td[2]/text()'; var typestr=doc.evaluate(typepath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue; var typereg=new RegExp("([^;/\-]+)"); var typearr=typereg.exec(typestr); @@ -52,22 +60,38 @@ function doWeb(doc, url) { var nsResolver=namespace?function(prefix) { return (prefix=="x")?namespace:null; }:null; - var searchpath='//form[@name="searchResultsForm"][@id="searchResultsForm"]'; - if(doc.evaluate(searchpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { + if(detectWeb(doc, url) == "multiple") { var string="http://eric.ed.gov/ERICWebPortal/custom/portlets/clipboard/performExport.jsp"; - var idpath='//a[img]/@id'; - var ids=doc.evaluate(idpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var items=new Array(); - var titlpath='//tr[1]/td[1]/p/a'; - var titlerows=doc.evaluate(titlpath, doc, nsResolver, XPathResult.ANY_TYPE, null); - var id; - while(id=ids.iterateNext()) - items[id.nodeValue]=Zotero.Utilities.cleanTags(Zotero.Utilities.cleanString(titlerows.iterateNext().textContent)); + if(url.match(/ERICWebPortal\/search\/clipboard\.jsp/) + || url.match(/ERICWebPortal\/MyERIC\/clipboard\/viewFolder\.jsp\?folderIndex/)) { + // We have a clipboard or folder page; structure is the same + var rowpath='//table[@class="tblDataTable"]/tbody/tr[td]'; + var rows = doc.evaluate(rowpath, doc, nsResolver, XPathResult.ANY_TYPE, null); + var row, id, title; + while(row = rows.iterateNext()) { + title = doc.evaluate('./td[2]/a', row, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; + id = doc.evaluate('./td[6]', row, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; + Zotero.debug(title + id); + items[id] = Zotero.Utilities.cleanTags(Zotero.Utilities.cleanString(title)); + } + } else { + // We have normal search results + var idpath='//a[img[@width="64"]]'; + var ids=doc.evaluate(idpath, doc, nsResolver, XPathResult.ANY_TYPE, null); + var titlpath='//table[@class="tblSearchResult"]//td[@class="resultHeader"][1]/p/a'; + var titlerows=doc.evaluate(titlpath, doc, nsResolver, XPathResult.ANY_TYPE, null); + var id; + while(id=ids.iterateNext()) + items[id.id]=Zotero.Utilities.cleanTags(Zotero.Utilities.cleanString(titlerows.iterateNext().textContent)); + } items=Zotero.selectItems(items); - var string="http://eric.ed.gov/ERICWebPortal/custom/portlets/clipboard/performExport.jsp?"; + if (!items) return false; + var string="http://eric.ed.gov/ERICWebPortal/MyERIC/clipboard/performExport.jsp?"; for(var ids in items) string+="accno="+ids+"&"; string+="texttype=endnote&citationtype=brief&Download.x=86&Download.y=14"; + Zotero.debug(string); Zotero.Utilities.HTTP.doGet(string, function(text) { var trans=Zotero.loadTranslator("import"); trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); @@ -84,13 +108,14 @@ function doWeb(doc, url) { }); Zotero.wait(); } - var singpath='contains(//div[@id="titleBarBlue"]/text(), "Record Details")'; - if(doc.evaluate(singpath, doc, nsResolver, XPathResult.ANY_TYPE, null).booleanValue) { - var idpath='//input[@type="hidden"][@name="accno"]/@value'; + var type = detectWeb(doc, url); + if(type && type != "multiple") { + var idpath='//tr[/td[1]/span/a/strong/contains("ERIC #")]/td[2]'; var idpath2='//meta[@name="eric #"]/@content'; var id = url.match(/accno=([^&]+)/)[1]; - var string="http://eric.ed.gov/ERICWebPortal/custom/portlets/clipboard/performExport.jsp?accno="; - string+= id+"&texttype=endnote&citationtype=brief&Download.x=86&Download.y=14"; + var string="http://eric.ed.gov/ERICWebPortal/MyERIC/clipboard/performExport.jsp?"; + string+= "accno="+ id+"&texttype=endnote&citationtype=brief&Download.x=86&Download.y=14"; + Zotero.debug(string); Zotero.Utilities.HTTP.doGet(string, function(text) { var trans=Zotero.loadTranslator("import"); trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); @@ -107,4 +132,4 @@ function doWeb(doc, url) { }); Zotero.wait(); } -} \ No newline at end of file +}