diff --git a/translators/A Contra Corriente.js b/translators/A Contra Corriente.js new file mode 100644 index 000000000..0f9bc585e --- /dev/null +++ b/translators/A Contra Corriente.js @@ -0,0 +1,48 @@ +{ + "translatorID":"bbf1617b-d836-4665-9aae-45f223264460", + "translatorType":4, + "label":"A Contra Corriente", + "creator":"Michael Berkowitz", + "target":"http://www.ncsu.edu/project/acontracorriente", + "minVersion":"1.0.0b4.r5", + "maxVersion":"", + "priority":100, + "inRepository":true, + "lastUpdated":"2008-06-03 19:40:00" +} + +function detectWeb(doc, url) { + if (doc.evaluate('//tr[td[1]//img][td[3]]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { + return "multiple"; + } +} + +function doWeb(doc, url) { + var arts = doc.evaluate('//tr[td[1]//img][td[3]]', doc, null, XPathResult.ANY_TYPE, null); + var art; + var selectList = new Object(); + var items = new Object(); + while (art = arts.iterateNext()) { + var item = new Object(); + var title = doc.evaluate('.//a', art, null, XPathResult.ANY_TYPE, null).iterateNext(); + item['title'] = Zotero.Utilities.trimInternal(title.textContent); + item['pdfurl'] = title.href; + item['author'] = doc.evaluate('.//strong', art, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; + selectList[item.title] = item.title; + items[item.title] = item; + } + var selected = Zotero.selectItems(selectList); + var voliss = Zotero.Utilities.trimInternal(doc.evaluate('//td[@class="red01"]/font[2]/strong', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); + voliss = voliss.match(/Vol\.\s+(\d+),\s+No\.\s+(\d+)\.\s+([^|]+)|/); + Zotero.debug(voliss); + for each (var title in selected) { + var item = new Zotero.Item("journalArticle"); + var olditem = items[title]; + item.title = olditem.title; + item.creators = [Zotero.Utilities.cleanAuthor(olditem.author, "author")]; + item.volume = voliss[1]; + item.issue = voliss[2] + item.date = Zotero.Utilities.trimInternal(voliss[3]); + item.complete(); + } +} \ No newline at end of file diff --git a/translators/ABC-CLIO Serials Web.js b/translators/ABC-CLIO Serials Web.js new file mode 100644 index 000000000..b440e74b9 --- /dev/null +++ b/translators/ABC-CLIO Serials Web.js @@ -0,0 +1,141 @@ +{ + "translatorID":"a07bb62a-4d2d-4d43-ba08-d9679a0122f8", + "translatorType":4, + "label":"ABC-CLIO Serials Web", + "creator":"Simon Kornblith", + "target":"https?://[^/]*serials\\.abc-clio\\.com[^/]*/active/go/ABC-Clio-Serials_v4", + "minVersion":"1.0.0b3.r1", + "maxVersion":"", + "priority":100, + "inRepository":true, + "lastUpdated":"2008-01-09 20:00:00" +} + +function detectWeb(doc, url) { + var namespace = doc.documentElement.namespaceURI; + var nsResolver = namespace ? function(prefix) { + if (prefix == 'x') return namespace; else return null; + } : null; + + var result = doc.evaluate('//table[@class="rc_main"]', doc, nsResolver, + XPathResult.ANY_TYPE, null).iterateNext(); + if(result) { + return "multiple"; + } +} + +function doWeb(doc, url) { + var namespace = doc.documentElement.namespaceURI; + var nsResolver = namespace ? function(prefix) { + if (prefix == 'x') return namespace; else return null; + } : null; + + var availableItems = new Array(); + var availableAttachments = new Array(); + + var elmts = doc.evaluate('//table[@class="rc_main"]', doc, nsResolver, + XPathResult.ANY_TYPE, null); + var elmt; + while(elmt = elmts.iterateNext()) { + var title = doc.evaluate('./tbody/tr/td[b/text() = "Title:"]', + elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); + var checkbox = doc.evaluate('.//input[@type = "checkbox"]', + elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); + if(title, checkbox) { + checkbox = checkbox.name; + availableItems[checkbox] = Zotero.Utilities.cleanString(title.textContent).substr(6); + + var links = doc.evaluate('./tbody/tr/td[b/text() = "Fulltext: ["]/a', + elmt, nsResolver, XPathResult.ANY_TYPE, null); + var link; + + var attach = new Array(); + while(link = links.iterateNext()) { + attach.push({url:link.href, title:Zotero.Utilities.cleanString(link.textContent)+" Full Text", + mimeType:"text/html"}); + } + availableAttachments[checkbox] = attach; + } + } + + var items = Zotero.selectItems(availableItems); + + if(!items) { + return true; + } + + var postString = "_defaultoperation=Download+Options&research_field=&research_value=&jumpto="; + var attachments = new Array(); + for(var i in availableItems) { + postString += "&_checkboxname="+i+(items[i] ? "&"+i+"=1" : ""); + if(items[i]) { + attachments.push(availableAttachments[i]); + } + } + + Zotero.Utilities.HTTP.doPost(url, postString, function(text) { + Zotero.Utilities.HTTP.doPost(url, "_appname=serials&_defaultoperation=Download+Documents&_formname=download&download_format=citation&download_which=tagged&download_where=ris&mailto=&mailreplyto=&mailsubject=&mailmessage=", + function(text) { + // get link + var linkRe = /]*>/ig); + if (m[1]) { + var text = m[1]; + } + // unescape HTML for extended characters + function unescapeHTML(str, p1){ + return Zotero.Utilities.unescapeHTML("&#"+p1); + } + text = text.replace(/\\&\\#([^;]+;)/g, unescapeHTML); + // load Refer translator + var translator = Zotero.loadTranslator("import"); + translator.setTranslator("881f60f2-0802-411a-9228-ce5f47b64c7d"); + translator.setString(text); + translator.setHandler("itemDone", function(obj, item) { + if(abstract) item.abstractNote = abstract; + item.attachments = attachments; + item.tags = keywords; + item.DOI = doi; + item.url = doc.location.href; + item.complete(); + }); + translator.translate(); + + getNext(); + }); +} + +function doWeb(doc, url) { + if(url.indexOf("/results.cfm") != -1) { + var items = Zotero.Utilities.getItemArray(doc, doc, '^https?://[^/]+/citation.cfm\\?[^#]+$'); + + items = Zotero.selectItems(items); + if(!items) return true; + + for(var url in items) { + urls.push(url); + } + + getNext(); + } else { + scrape(doc); + } + + Zotero.wait(); +} \ No newline at end of file diff --git a/translators/ACS Publications.js b/translators/ACS Publications.js new file mode 100644 index 000000000..e8b352c84 --- /dev/null +++ b/translators/ACS Publications.js @@ -0,0 +1,126 @@ +{ + "translatorID":"938ebe32-2b2e-4349-a5b3-b3a05d3de627", + "translatorType":4, + "label":"ACS Publications", + "creator":"Sean Takats and Michael Berkowitz", + "target":"http://[^/]*pubs3?.acs.org[^/]*/(?:wls/journals/query/(?:subscriberResults|query)\\.html|acs/journals/toc.page|cgi-bin/(?:article|abstract|sample|asap).cgi)?", + "minVersion":"1.0.0b3.r1", + "maxVersion":"", + "priority":100, + "inRepository":true, + "lastUpdated":"2008-05-06 08:15:00" +} + +function detectWeb(doc, url) { + var namespace = doc.documentElement.namespaceURI; + var nsResolver = namespace ? function(prefix) { + if (prefix == 'x') return namespace; else return null; + } : null; + + if(doc.evaluate('//input[@name="jid"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { + return "multiple"; + } else if (doc.evaluate('//jid', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { + return "journalArticle"; + } + return false; +} + +function handleRequests(requests, pdfs) { + if(requests.length == 0) { + Zotero.done(); + return; + } + + var request = requests.shift(); + + Zotero.Utilities.HTTP.doGet("http://pubs.acs.org/wls/journals/citation2/Citation?"+request.jid, function() { + Zotero.Utilities.HTTP.doPost("http://pubs.acs.org/wls/journals/citation2/Citation", + "includeAbstract=citation-abstract&format=refmgr&submit=1&mode=GET", function(text) { + // load translator for RIS + var translator = Zotero.loadTranslator("import"); + translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); + translator.setString(text); + translator.setHandler("itemDone", function(obj, item) { + var pdf = pdfs.shift(); + if(pdf) { + item.attachments.push({ + title:"ACS Full Text PDF", + url:pdf, mimeType:"application/pdf" + }); + } + if (!item.attachments[0].title) + item.attachments[0].title = "ACS Snapshot"; + item.complete(); + }); + translator.translate(); + + handleRequests(requests); + }); + }); +} + +function doWeb(doc, url) { + var namespace = doc.documentElement.namespaceURI; + var nsResolver = namespace ? function(prefix) { + if (prefix == 'x') return namespace; else return null; + } : null; + + var pdfs = new Array(); + var requests = new Array(); + + if (detectWeb(doc, url) == "multiple") { + // search page + var items = new Array(); + if (doc.evaluate('//form[@name="citationSelect"]//tbody/tr[1]//span[@class="textbold"][1]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { + var titles = doc.evaluate('//form[@name="citationSelect"]//tbody/tr[1]//span[@class="textbold"][1]', doc, nsResolver, XPathResult.ANY_TYPE, null); + } else if (doc.evaluate('//form/div[@class="artBox"]/div[@class="artBody"]/div[@class="artTitle"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { + var titles = doc.evaluate('//form/div[@class="artBox"]/div[@class="artBody"]/div[@class="artTitle"]', doc, nsResolver, XPathResult.ANY_TYPE, null); + } + if (doc.evaluate('//form[@name="citationSelect"]//input[@name="jid"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { + var jids = doc.evaluate('//form[@name="citationSelect"]//input[@name="jid"]', doc, nsResolver, XPathResult.ANY_TYPE, null); + } else if (doc.evaluate('//div[@id="content"]/form/div[@class="artBox"]/div[@class="artHeadBox"]/div[@class="artHeader"]/input', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { + var jids = doc.evaluate('//div[@id="content"]/form/div[@class="artBox"]/div[@class="artHeadBox"]/div[@class="artHeader"]/input', doc, nsResolver, XPathResult.ANY_TYPE, null); + } + var links = doc.evaluate('//form[@name="citationSelect"]//tbody/tr[2]//a[@class="link"]', doc, nsResolver, XPathResult.ANY_TYPE, null); + var title; + var jid; + var id; + var link; + while ((title = titles.iterateNext()) && (jid = jids.iterateNext())){ + id = jid.value + items[id] = Zotero.Utilities.trimInternal(title.textContent); + + var link = doc.evaluate('../../..//a[contains(text(), "PDF")]', title, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); + if(link) { + links[id] = link.href.replace("searchRedirect.cgi", "article.cgi"); + } + } + + items = Zotero.selectItems(items); + if(!items) return true; + + var getstring = ""; + for(var i in items) { + getstring = getstring + "jid=" + encodeURIComponent(i) + "&"; + pdfs.push(links[i]+"?sessid="); + } + requests.push({jid:getstring}); + } else { + // single page + var jid = doc.evaluate('//jid', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; + jid = jid.substr(jid.indexOf("/")+1); + var pdf = doc.evaluate('/html/body//a[contains(text(), "PDF")]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); + if (!pdf) { + var pdf = doc.evaluate('/html/body//a[contains(@href, "/pdf/")]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); + } + if (pdf) { + pdf = pdf.href; + pdf = pdf.replace("searchRedirect.cgi", "article.cgi"); + pdfs.push(pdf+"?sessid="); + } + var requests = [{jid:"jid=" + encodeURIComponent(jid)}]; + } + handleRequests(requests, pdfs); + + Zotero.wait(); +} \ No newline at end of file diff --git a/translators/AGU Journals.js b/translators/AGU Journals.js new file mode 100644 index 000000000..e92cd9bd0 --- /dev/null +++ b/translators/AGU Journals.js @@ -0,0 +1,258 @@ +{ + "translatorID":"9220fa99-b936-430e-a8ea-43ca6cb04145", + "translatorType":4, + "label":"AGU Journals", + "creator":"Ben Parr", + "target":"^https?://(?:www.)?agu.org", + "minVersion":"1.0.0b4.r1", + "maxVersion":"", + "priority":100, + "inRepository":true, + "lastUpdated":"2007-07-31 16:45:00" +} + +function detectWeb(doc,url) +{ + var namespace = doc.documentElement.namespaceURI; + var nsResolver = namespace ? function(prefix) { + if (prefix == 'x') return namespace; else return null; + } : null; + + var xpath; + + //abstract + xpath='//p[@id="citation"]'; + if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext()) + { return "journalArticle"; } + + //full text + xpath='//frameset[@rows="98, *"]'; + if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext()) + { return "journalArticle"; } + + //issue page + xpath='//tr/td/p[@class="title"]'; + if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext()) + { return "multiple"; } + + //Search Page + if(doc.title.indexOf("Query Results")>-1) + {return "multiple";} +} + + +function fixCaps(s) +{ + if(s!='') + { + words=Zotero.Utilities.cleanString(s).toLowerCase().split(" "); + for (var j = 0 ; j < words.length ; j++) + { + if (j==0||(words[j][0] ==words[j][0].toLowerCase()&&words[j]!="or"&&words[j]!="and"&&words[j]!="of"&&words[j]!="in")) + { words[j]= words[j][0].toUpperCase() +words[j].substr(1); } + } + return words.join(" "); + } + return ''; +} + +function scrape(doc,url) +{ + var namespace = doc.documentElement.namespaceURI; + var nsResolver = namespace ? function(prefix) { + if (prefix == 'x') return namespace; else return null; + } : null; + + var newItem=new Zotero.Item("journalArticle"); + var temp; + var xpath; + var row; + var rows; + + newItem.url = doc.location.href; + + xpath='//p[@id="title"]'; + temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext(); + if(temp) + {newItem.title=temp.textContent;} + + xpath='//span[@id="published"]'; + temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext(); + if(temp) + { + temp=Zotero.Utilities.cleanString(temp.textContent).split(" ");; + newItem.date=temp[1]+" "+temp[0]+", "+temp[2]; + } + + xpath='//p[@class="author"]'; + rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); + var count=0; + while(row=rows.iterateNext()) + {newItem.creators.push(Zotero.Utilities.cleanAuthor(row.textContent,"author")); + count++;} + + xpath='//tr/td/p'; + temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); + var temp2=temp.iterateNext(); + if(temp2) + { + for(var n=0;n<(3+2*count);n++) + {temp2=temp.iterateNext();} + newItem.abstractNote=Zotero.Utilities.cleanString(temp2.textContent); + } + + xpath='//p[@id="runhead"]'; + temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext(); + if(temp) + { + temp=Zotero.Utilities.cleanString(temp.textContent).split(", "); + newItem.publicationTitle=fixCaps(temp[0]); + for(var n=1;temp[n];n++) + { + if(temp[n].indexOf("VOL")>-1) + {newItem.volume=temp[n].replace('VOL. ','');} + else if(temp[n].indexOf("NO.")>-1) + {newItem.issue=temp[n].replace('NO. ','');} + else if(temp[n].indexOf("doi:")>-1) + {newItem.DOI=temp[n].replace('doi:','');} + else if(temp[n+1]) + {newItem.pages=temp[n];} + } + } + + xpath='//p[@id="keywords"]'; + temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext(); + if(temp) + { + temp=Zotero.Utilities.cleanString(temp.textContent.replace('Keywords:','')); + newItem.tags=temp.replace('.','').split('; '); + } + xpath='//p[@id="citation"]/span[@id="journal"]'; + temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext(); + if(temp) + {newItem.journalAbbreviation=temp.textContent;} + + newItem.complete(); +} + + +function processList(items) +{ + items = Zotero.selectItems(items); + var uris=new Array(); + + if (!items) + {return true;} + + for (var i in items) + {uris.push(i);} + + Zotero.Utilities.processDocuments(uris, scrape,function() {Zotero.done(); }); + Zotero.wait(); + + return true; +} + +function doWeb(doc,url) +{ + var namespace = doc.documentElement.namespaceURI; + var nsResolver = namespace ? function(prefix) { + if (prefix == 'x') return namespace; else return null; + } : null; + + //abstract + var xpath='//p[@id="citation"]'; + if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext()) + { + scrape(doc,url); + return true; + } + + //full text + xpath='//frameset[@rows="98, *"]'; + if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext()) + { + Zotero.Utilities.processDocuments(url+"0.shtml", scrape, function(){ Zotero.done(); }); + Zotero.wait(); + + return true; + } + + //issue page + xpath='//tr/td/p[@class="title"]'; + if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext()) + { + var titlerows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); + xpath='//tr/td/p[@class="pubdate"]/a'; + var linkrows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); + + var titlerow; + var linkrow; + var items=new Array(); + + while(titlerow=titlerows.iterateNext()) + { + linkrow=linkrows.iterateNext(); + while(linkrow.textContent.indexOf("Abstract")<0) + {linkrow=linkrows.iterateNext();} + items[linkrow.href]=titlerow.textContent; + } + + return processList(items); + } + + + //Search page + if(doc.title.indexOf("Query Results")>-1) + { + //FASTFind Search + + xpath='//tr/td/h2'; + var tt=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext().textContent; + if(tt.indexOf("FASTFIND")>-1) + { + xpath='//tr/td[1]/font'; + var citerows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); + xpath='//tr/td[2]/font/a'; + var linkrows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); + + var citerow; + var linkrow; + var items=new Array(); + var temp; + var title; + + while(citerow=citerows.iterateNext()) + { + linkrow=linkrows.iterateNext(); + items[linkrow.href]=Zotero.Utilities.cleanString(citerow.textContent); + } + return processList(items); + } + else + { + //Advanced Search + + xpath='//tr/td[1]/font/a'; + var titlerows=doc.evaluate(xpath, doc,nsResolver,XPathResult.ANY_TYPE, null); + xpath='//tr/td[2]/font/a'; + var linkrows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); + + var titlerow; + var linkrow; + var items=new Array(); + var temp; + + while(titlerow=titlerows.iterateNext()) + { + linkrow=linkrows.iterateNext(); + while(linkrow.textContent.indexOf("Abstract")<0) + {linkrow=linkrows.iterateNext();} + + items[linkrow.href]=titlerow.textContent; + } + return processList(items); + } + } + +} diff --git a/translators/AJHG.js b/translators/AJHG.js new file mode 100644 index 000000000..d02c9af41 --- /dev/null +++ b/translators/AJHG.js @@ -0,0 +1,84 @@ +{ + "translatorID":"0a01d85e-483c-4998-891b-24707728d83e", + "translatorType":4, + "label":"AJHG", + "creator":"Michael Berkowitz", + "target":"http://(www.)?ajhg.org/", + "minVersion":"1.0.0b4.r5", + "maxVersion":"", + "priority":100, + "inRepository":true, + "lastUpdated":"2008-02-14 23:15:00" +} + +function detectWeb(doc, url) { + if (doc.evaluate('//div[@class="article_links"]/a[1]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { + return "multiple"; + } else if (url.indexOf("abstract") != -1 || url.indexOf("fulltext") != -1) { + return "journalArticle"; + } +} + +function getID(str) { + str = str.match(/\/([^/]+)$/)[1]; + if (str.indexOf("#") != -1) { + str = str.substr(0, str.length - 1); + } + return str; +} + +function doWeb(doc, url) { + var articles = new Array(); + if (detectWeb(doc, url) == "multiple") { + var items = new Object(); + if (doc.title.indexOf("Search Results") != -1) { + var xpath = '//table[@id="search_results"]/tbody/tr/td[1]'; + var titlex = './strong'; + var linkx = './div/a[1]'; + } else { + var xpath = '//div[@id="main_toc"]/dl'; + var titlex = './dt'; + var linkx = './dd/div/a[1]'; + } + var blocks = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); + var next_block; + while (next_block = blocks.iterateNext()) { + var title = doc.evaluate(titlex, next_block, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; + var link = doc.evaluate(linkx, next_block, null, XPathResult.ANY_TYPE, null).iterateNext().href; + items[link] = title; + } + items = Zotero.selectItems(items); + for (var i in items) { + articles.push(getID(i)); + } + } else { + articles = [getID(url)]; + } + Zotero.debug(articles); + for (var i in articles) { + var poststr = 'format=cite-abs&citation-type=RIS&pii=' + articles[i] + '&action=download&Submit=Export'; + var pdfurl = 'http://download.ajhg.org/AJHG/pdf/PII' + articles[i].replace(/(\(|\)|\-)/g, "") + '.pdf'; + var newurl = 'http://www.ajhg.org/AJHG/fulltext/' + articles[i]; + Zotero.Utilities.HTTP.doPost('http://ajhg.org/AJHG/citationexport', poststr, function(text) { + var trans = Zotero.loadTranslator("import"); + trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); + trans.setString(text); + trans.setHandler("itemDone", function(obj, item) { + item.attachments = [ + {url:newurl, title:"AJHG Snapshot", mimeType:"text/html"}, + {url:pdfurl, title:"AJHG Full Text PDF", mimeType:"application/pdf"} + ]; + + if (item.notes[0]["note"]) { + item.abstractNote = item.notes[0]["note"]; + } + item.notes = []; + item.complete(); + }); + trans.translate(); + Zotero.done(); + }); + } + Zotero.wait(); + +} \ No newline at end of file diff --git a/translators/AMS Journals.js b/translators/AMS Journals.js new file mode 100644 index 000000000..abef957b1 --- /dev/null +++ b/translators/AMS Journals.js @@ -0,0 +1,79 @@ +{ + "translatorID":"bdaac15c-b0ee-453f-9f1d-f35d00c7a994", + "translatorType":4, + "label":"AMS Journals", + "creator":"Michael Berkowitz", + "target":"http://www.ams.org/", + "minVersion":"1.0.0b4.r5", + "maxVersion":"", + "priority":100, + "inRepository":true, + "lastUpdated":"2008-05-05 07:45:00" +} + +function detectWeb(doc, url) { + if (url.match(/jour(nals|search)/)) { + return "multiple"; + } else if (url.match(/\d{4}\-\d{2}\-\d{2}/)) { + return "journalArticle"; + } +} + +function doWeb(doc, url) { + var namespace = doc.documentElement.namespaceURI; + var nsResolver = namespace ? function(prefix) { + if (prefix == 'x') return namespace; else return null; + } : null; + var articles = new Array(); + if (detectWeb(doc, url) == "multiple") { + var items = new Object(); + if (url.match(/joursearch/)) { + var titlex = '//table/tbody/tr/td/span[@class="searchResultsArticleTitle"]'; + var linkx = '//table/tbody/tr[td/span[@class="searchResultsArticleTitle"]]//a[contains(text(), "Abstract")]'; + } else { + var titlex = '//div[@class="contentList"]/dl/dt[@class="articleTitleInAbstract"]'; + var linkx = '//div[@class="contentList"]/dl/dd/a[contains(text(), "Abstract")]' + } + var titles = doc.evaluate(titlex, doc, nsResolver, XPathResult.ANY_TYPE, null); + var links = doc.evaluate(linkx, doc, nsResolver, XPathResult.ANY_TYPE, null); + var title, link; + while ((title = titles.iterateNext()) && (link = links.iterateNext())) { + items[link.href] = Zotero.Utilities.trimInternal(title.textContent); + } + items = Zotero.selectItems(items); + for (var i in items) { + articles.push(decodeURIComponent(i)); + } + } else { + articles = [url]; + } + Zotero.debug(articles); + Zotero.Utilities.processDocuments(articles, function(doc) { + var item = new Zotero.Item("journalArticle"); + item.publicationTitle = doc.title; + item.ISSN = doc.evaluate('//span[@class="journalISSN"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/\(e\)\s+ISSN:?\s+(.*)\(p\)/)[1]; + item.title = Zotero.Utilities.trimInternal(doc.evaluate('//p[@class="articleTitle"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); + var data = Zotero.Utilities.trimInternal(doc.evaluate('//p[span[@class="bibDataTag"]][1]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); + data = data.replace(/(Journal|MSC|Posted|Retrieve)/g, "\n$1"); + Zotero.debug(data); + var authors = data.match(/Author\(s\):\s+(.*)\n/)[1].split(/;\s+/); + for each (var aut in authors) { + item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); + } + var journalinfo = data.match(/Journal:\s+(.*)\n/)[1].match(/^([^\d]+)(\d+)\s+\((\d+)\),\s+(.*)$/); + item.journalAbbreviation = journalinfo[1]; + item.volume = journalinfo[2]; + item.pages = journalinfo[4]; + item.date = Zotero.Utilities.trimInternal(data.match(/Posted:\s+(.*)\n/)[1]); + item.url = doc.location.href; + item.issue = item.url.match(/(\d+)\/S/)[1]; + var pdfurl = item.url.replace(/([^/]+)\/home.html$/, "$1/$1.pdf"); + item.attachments = [ + {url:item.url, title:item.journalAbbreviation + " Snapshot", mimeType:"text/html"}, + {url:pdfurl, title:item.journalAbbreviation + " PDF", mimeType:"application/pdf"} + ]; + item.abstract = Zotero.Utilities.trimInternal(doc.evaluate('//td[@class="bottomCell"]/p[4]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.substr(10)); + item.complete(); + }, function() {Zotero.done;}); + Zotero.wait(); +} \ No newline at end of file diff --git a/translators/AMS MathSciNet.js b/translators/AMS MathSciNet.js new file mode 100644 index 000000000..8a77e25e9 --- /dev/null +++ b/translators/AMS MathSciNet.js @@ -0,0 +1,98 @@ +{ + "translatorID":"a354331-981b-43de-a61-bc26dd1be3a9", + "translatorType":4, + "label":"AMS MathSciNet", + "creator":"Simon Kornblith", + "target":"^https?://www\\.ams\\.org[^/]*/mathscinet/search/(?:publications\\.html|publdoc\\.html)", + "minVersion":"1.0.0b3.r1", + "maxVersion":"", + "priority":100, + "inRepository":true, + "lastUpdated":"2007-03-24 22:20:00" +} + +function detectWeb(doc, url) { + var namespace = doc.documentElement.namespaceURI; + var nsResolver = namespace ? function(prefix) { + if (prefix == 'x') return namespace; else return null; + } : null; + + var tableRows = doc.evaluate('//div[@id="content"]/form/div[@class="headline"]', doc, nsResolver, + XPathResult.ANY_TYPE, null); + if(tableRows.iterateNext()) { + return "multiple" + } else if(doc.evaluate('//div[@id="titleSeparator"]/div[@class="navbar"]/span[@class="PageLink"]/a[text() = "Up"]', + doc, nsResolver, XPathResult.ANY_TYPE, null)) { + return "journalArticle"; + } + + return false; +} + +function doWeb(doc, url) { + var namespace = doc.documentElement.namespaceURI; + var nsResolver = namespace ? function(prefix) { + if (prefix == 'x') return namespace; else return null; + } : null; + + var pub = "http://www.ams.org/mathscinet/search/publications.html?fmt=bibtex"; + + var tableRows = doc.evaluate('//div[@id="content"]/form/div[@class="headline"]', doc, nsResolver, + XPathResult.ANY_TYPE, null); + var tableRow = tableRows.iterateNext(); + if(tableRow) { + // search page + var items = new Object(); + var links = new Object(); + + do { + var id = doc.evaluate('.//input[@type="checkbox"]', tableRow, nsResolver, + XPathResult.ANY_TYPE, null).iterateNext().value; + items[id] = doc.evaluate('./div[@class="headlineText"]/span[@class="title"]', tableRow, nsResolver, + XPathResult.ANY_TYPE, null).iterateNext().textContent; + links[id] = doc.evaluate('.//a', tableRow, nsResolver, XPathResult.ANY_TYPE, + null).iterateNext().href; + } while(tableRow = tableRows.iterateNext()) + + + items = Zotero.selectItems(items); + if(!items) return true; + + var docLinks = new Array(); + for(var id in items) { + pub += "&b="+id; + docLinks.push(links[id]); + } + } else { + var MR = doc.evaluate('//div[@id="content"]/div[@class="doc"]/div[@class="headline"]/strong', + doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; + pub += "&b="+MR.replace(/^MR0*/, ""); + } + + Zotero.Utilities.HTTP.doGet(pub, function(text) { + var m = text.match(/
(?:.|[\r\n])*?<\/pre>/g);
+		var bibTeXString = "";
+		for each(var citation in m) {
+			// kill pre tags
+			citation = citation.substring(5, citation.length-6);
+			bibTeXString += citation;
+		}
+		
+		// import using BibTeX
+		var translator = Zotero.loadTranslator("import");
+		translator.setTranslator("9cb70025-a888-4a29-a210-93ec52da40d4");
+		translator.setString(bibTeXString);
+		translator.setHandler("itemDone", function(obj, item) {
+			if(docLinks) {
+				item.attachments.push({title:"MathSciNet Snapshot", url:docLinks.shift(), mimeType:"text/html"});
+			} else {
+				item.attachments.push({title:"MathSciNet Snapshot", document:doc});
+			}
+			
+			item.complete();
+		});
+		translator.translate();
+		
+		Zotero.done();
+	});
+}
\ No newline at end of file
diff --git a/translators/AMS Online Journals - Allenpress.js b/translators/AMS Online Journals - Allenpress.js
new file mode 100644
index 000000000..d3592a649
--- /dev/null
+++ b/translators/AMS Online Journals - Allenpress.js	
@@ -0,0 +1,293 @@
+{
+	"translatorID":"dbb5d4bc-3b21-47a2-9751-5dcbb65b902a",
+	"translatorType":4,
+	"label":"AMS Online Journals - Allenpress",
+	"creator":"Ben Parr",
+	"target":"^http://ams.allenpress.com/",
+	"minVersion":"1.0.0b4.r1",
+	"maxVersion":"",
+	"priority":100,
+	"inRepository":true,
+	"lastUpdated":"2007-07-31 16:45:00"
+}
+
+function detectWeb(doc,url)
+{
+      var namespace = doc.documentElement.namespaceURI;
+      var nsResolver = namespace ? function(prefix) {
+      if (prefix == 'x') return namespace; else return null;
+      } : null;
+
+      	var xpath;
+      	
+	//Homepage=AMS Top 20
+	var temp=url.split("request=")[1];
+	if(temp)
+	{
+		if(temp.substr(0,10)=="index-html")
+		{ return "multiple"; }
+	}
+	
+	
+	//browse page
+	xpath='//div[@class="group"]/p[@class="title"]';
+	if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext())
+		{ return "multiple"; }
+		
+	//second browse page format
+	xpath='//div[@class="toc include j"]/p/span[@class="title"]';
+	if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext())
+		{ return "multiple"; }
+	
+		
+	//search page 
+	xpath='//td[@class="search"]/span[@class="title"]';
+	if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext())
+		{ return "multiple"; }
+		
+	//single page
+	xpath='//ul/li/a';
+	var rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null);
+	var row;
+	
+	while(row=rows.iterateNext())
+	{
+		if(row.textContent=="Create Reference")
+			{ return "journalArticle"; }
+	}
+	
+}
+
+function parseRIS(temp,PDFs)
+{
+      Zotero.Utilities.HTTP.doGet(temp, function(text){
+
+              // load translator for RIS
+              var translator = Zotero.loadTranslator("import");
+	      
+              translator.setHandler("itemDone", function(obj, newItem) {
+		//get doi of the item we're currently saving from RIS file
+		var doi=newItem.DOI;
+		if(!doi)
+			{doi=newItem.url.replace('http://dx.doi.org/','');}
+		else
+			{doi=doi.replace("doi%3A","");}
+		
+		var urlstring='';
+		var volume=newItem.volume;
+		var issue=newItem.issue;
+		var d=newItem.pages.split("-")[0];
+		
+		var pdf = PDFs.shift();
+		if(pdf)
+		{
+			if(pdf=="0")
+			{
+				var b=doi.split("/");
+				if(b.length>1)
+					{b=b[1];}
+				else
+					{b=doi.split("%2F")[1];}
+				b=b.split("(")[0];
+				b=b.split("%28")[0];
+				if(!b||b.length!=9)
+					{b="1520-0477";}
+				urlstring="http://ams.allenpress.com/archive/"+b+"/"+volume+"/"+issue+"/pdf/i"+b+"-"+volume+"-"+issue+"-"+d+".pdf";
+			}
+			else if(pdf=="1")
+			{
+				while(volume.length<3)
+					{volume="0"+volume;}
+				while(issue.length<2)
+					{issue="0"+issue;}
+				while(d.length<4)
+					{d="0"+d;}
+				
+				urlstring="http://docs.lib.noaa.gov/rescue/mwr/"+volume+"/mwr-"+volume+"-"+issue+"-"+d+".pdf";
+			}
+		}
+		newItem.attachments[0]={
+				title:"AMS Journals Full Text PDF",
+				url:urlstring, mimeType:"application/pdf"}
+		
+		if(Zotero.Utilities.cleanString(newItem.abstractNote).toLowerCase()=="no abstract available.")
+			{newItem.abstractNote='';}
+		newItem.complete();
+		});
+		
+              translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
+              translator.setString(text);
+              translator.translate();
+
+              Zotero.done();
+      }, function() {});
+      Zotero.wait();
+}
+
+
+function createLink(link)
+{
+	var url="http://ams.allenpress.com/perlserv/?request=download-citation&t=refman&doi=";
+	url+=getdoi(link);
+	url+="&site=amsonline";
+	return url;
+}
+
+function getdoi(link)
+{
+	doi=link.split("doi%3A")[1];
+	if(!doi)
+	{
+		doi=link.split("doi=")[1];
+		return doi;
+	}
+	return doi;
+}
+
+function getType(text)
+{
+	if(text.indexOf("(")>-1)
+		{return "0";}
+	else
+		{return "1";}
+}
+
+function doWeb(doc,url)
+{
+      var namespace = doc.documentElement.namespaceURI;
+      var nsResolver = namespace ? function(prefix) {
+      if (prefix == 'x') return namespace; else return null;
+      } : null;
+
+        var doi;
+        var PDFs=new Array();
+	var xpath='//ul/li/a';
+	var rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null);
+	var row;
+	
+	while(row=rows.iterateNext())
+	{
+		if(row.textContent=="Create Reference")
+		{
+				//single page
+				
+				var thelink=createLink(row.href);
+				xpath='//div[@class="mainPadding"]/div/div/div/div/div/p/a';
+				rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null);
+				while(row=rows.iterateNext())
+				{
+					if(row.textContent.toLowerCase().indexOf("pdf")>-1)
+						{PDFs.push(getType(row.textContent));}
+				}
+				parseRIS(thelink,PDFs);
+				
+				return null;
+		}
+	}
+	
+	var items=new Array();
+	
+	xpath='//div[@class="group"]/p[@class="title"]';
+	var xpath1='';
+	var xpath2='';
+	
+	if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext())
+	{
+		//browse page
+		
+		xpath1='//div[@class="group"]/p[@class="title"]';
+		xpath2='//p[@class="link"]/a';
+	}
+	else
+	{
+		xpath='//td[@class="search"]/span[@class="title"]';
+		if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext())
+		{
+			//search page
+			
+			xpath1='//td[@class="search"]/span[@class="title"]';
+			xpath2='//tr/td/a';
+		}
+		else
+		{
+			xpath='//div[@class="toc include j"]/p/span[@class="title"]';
+			if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext())
+			{
+				//second browse format
+				
+				xpath1='//div[@class="toc include j"]/p/span[@class="title"]';
+				xpath2='//div[@class="toc include j"]/p/a';
+			}
+		}
+	}
+	
+	if(xpath1!='')
+	{
+		var rows1=doc.evaluate(xpath1, doc, nsResolver,XPathResult.ANY_TYPE, null);
+		var row1;
+		
+		var rows2=doc.evaluate(xpath2, doc, nsResolver,XPathResult.ANY_TYPE, null);
+		var row2=rows2.iterateNext();
+		
+		var rows3=doc.evaluate(xpath2, doc, nsResolver,XPathResult.ANY_TYPE, null);
+		var row3;
+		
+		var tPDFs=new Array();
+		var nextType;
+		
+		var link;
+		var lastdoi;
+		
+		while(row1=rows1.iterateNext())
+		{
+			while(row3=rows3.iterateNext())
+			{
+				if(row3.textContent.toLowerCase().indexOf("pdf")>-1)
+					{tPDFs.push(getType(row3.textContent));}
+			}
+			while(getdoi(row2.href)==lastdoi || !getdoi(row2.href))
+				{row2=rows2.iterateNext()}
+			
+			lastdoi=getdoi(row2.href);
+			link=createLink(row2.href);
+			
+			nextType=tPDFs.shift();
+			if(!nextType)
+				{nextType="none";}
+			items[nextType+link]=row1.textContent;
+		}
+	}
+	else
+	{
+		var t=url.split("request=")[1];
+		if(t)
+		{
+			if(t.substr(0,10)=="index-html")
+			{
+				//Homepage=AMS Top 20
+				
+				xpath='//div/p/a[@style="font-size: 85%;"]';
+				var rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null);
+				var row;
+	
+				while(row=rows.iterateNext())
+					{items["0"+createLink(row.href)]=row.textContent;}
+			}
+	
+		}
+	}
+		
+		items = Zotero.selectItems(items);
+				
+		if(!items)
+			{return true;}
+		
+		var urls = new Array();
+		for(var i in items)
+		{
+			PDFs.push(i[0]);
+			urls.push(i.substr(1));
+		}
+		
+		parseRIS(urls,PDFs);
+}
\ No newline at end of file
diff --git a/translators/APA PsycNET.js b/translators/APA PsycNET.js
new file mode 100644
index 000000000..863952d63
--- /dev/null
+++ b/translators/APA PsycNET.js	
@@ -0,0 +1,82 @@
+{
+	"translatorID":"1e1e35be-6264-45a0-ad2e-7212040eb984",
+	"translatorType":4,
+	"label":"APA PsycNET",
+	"creator":"Michael Berkowitz",
+	"target":"http://psycnet\\.apa\\.org/",
+	"minVersion":"1.0.0b4.r5",
+	"maxVersion":"",
+	"priority":100,
+	"inRepository":true,
+	"lastUpdated":"2008-06-23 16:45:00"
+}
+
+function detectWeb(doc, url) {
+	if (url.match(/search\.searchResults/)) {
+		return "multiple";
+	} else if (url.match(/search\.displayRecord/)) {
+		return "journalArticle";
+	}
+}
+
+function associateXPath(xpath, doc, ns) {
+	return Zotero.Utilities.trimInternal(doc.evaluate(xpath, doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent);
+}
+
+function doWeb(doc, url) {
+	var namespace = doc.documentElement.namespaceURI;
+	var nsResolver = namespace ? function(prefix) {
+		if (prefix == 'x') return namespace; else return null;
+	} : null;
+	
+	var arts = new Array();
+	if (detectWeb(doc, url) == "multiple") {
+		var items = new Object();
+		var titles = doc.evaluate('//div[@class="srhcTitle"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
+		var title;
+		while (title = titles.iterateNext()) {
+			items[title.href] = title.textContent;
+		}
+		items = Zotero.selectItems(items);
+		for (var i in items) {
+			arts.push(i);
+		}
+	} else {
+		arts = [url];
+	}
+	Zotero.Utilities.processDocuments(arts, function(doc) {
+		var newurl = doc.location.href;
+		if (doc.evaluate('//input[@name="id"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
+			var id = doc.evaluate('//input[@name="id"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value;
+			var lstSelectedUIDs = doc.evaluate('//input[@name="lstUIDs"][@id="srhLstUIDs"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value;
+			var get = 'http://psycnet.apa.org/index.cfm?fa=search.export&id=' + id + '&lstSelectedUIDs=' + lstSelectedUIDs + '&lstUIDs=&records=selected&displayFormat=&exportFormat=referenceSoftware&printDoc=0';
+			Zotero.Utilities.HTTP.doGet(get, function(text) {
+				var translator = Zotero.loadTranslator("import");
+				translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
+				translator.setString(text);
+				translator.setHandler("itemDone", function(obj, item) {
+					item.url = newurl;
+					item.attachments = [{url:newurl, title:"APA PsycNET Snapshot", mimeType:"text/html"}];
+					item.complete();
+				});
+				translator.translate();
+			});
+		} else {
+			var item = new Zotero.Item("journalArticle");
+			item.title = associateXPath('//div[@id="rdcTitle"]', doc, nsResolver);
+			var authors = associateXPath('//div[@id="rdcAuthors"]', doc, nsResolver).split(/;\s+/);
+			for each (var aut in authors) {
+				item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author", true));
+			}
+			var voliss = associateXPath('//div[@id="rdcSource"]', doc, nsResolver).match(/^([^\.]+)\.\s+(\d+\s+\w+)\s+Vol\s+(\d+)\((\d+)\)\s+(.*)$/);
+			item.publicationTitle = voliss[1];
+			item.date = voliss[2];
+			item.volume = voliss[3];
+			item.issue = voliss[4];
+			item.pages = voliss[5];
+			item.abstractNote = associateXPath('//div[@id="rdRecord"]/div[@class="rdRecordSection"][2]', doc, nsResolver);
+			item.complete();			
+		}
+	}, function() {Zotero.done;});
+	Zotero.wait();
+}
\ No newline at end of file
diff --git a/translators/ARTFL Encyclopedie.js b/translators/ARTFL Encyclopedie.js
new file mode 100644
index 000000000..5a2cb87e2
--- /dev/null
+++ b/translators/ARTFL Encyclopedie.js	
@@ -0,0 +1,169 @@
+{
+	"translatorID":"72cb2536-3211-41e0-ae8b-974c0385e085",
+	"translatorType":4,
+	"label":"ARTFL Encyclopedie",
+	"creator":"Sean Takats",
+	"target":"/cgi-bin/philologic31/(getobject\\.pl\\?c\\.[0-9]+:[0-9]+\\.encyclopedie|search3t\\?dbname=encyclopedie0507)",
+	"minVersion":"1.0.0b4.r1",
+	"maxVersion":"",
+	"priority":100,
+	"inRepository":true,
+	"lastUpdated":"2008-06-12 19:30:00"
+}
+
+function detectWeb(doc, url) {
+	if (url.indexOf("getobject.pl") != -1){
+		return "encyclopediaArticle";
+	} else {
+		return "multiple";
+	}
+}
+
+function reconcileAuthor(author){
+	var authorMap = {
+		"Venel":"Venel, Gabriel-François",
+		"d'Aumont":"d'Aumont, Arnulphe",
+		"de La Chapelle":"de La Chapelle, Jean-Baptiste",
+		"Bourgelat":"Bourgelat, Claude",
+		"Dumarsais":"Du Marsais, César Chesneau",
+		"Mallet":"Mallet, Edme-François",
+		"Toussaint":"Toussaint, François-Vincent",
+		"Daubenton":"Daubenton, Louis-Jean-Marie",
+		"d'Argenville": "d'Argenville, Antoine-Joseph Desallier",
+		"Tarin":"Tarin, Pierre",
+		"Vandenesse":"de Vandenesse, Urbain",
+		"Blondel": "Blondel, Jacques-François",
+		"Le Blond":"Le Blond, Guillaume",
+		"Rousseau":"Rousseau, Jean-Jacques",
+		"Eidous":"Eidous, Marc-Antoine",
+		"d'Alembert":"d'Alembert, Jean le Rond",
+		"Louis":"Louis, Antoine",
+		"Bellin":"Bellin, Jacques-Nicolas",
+		"Diderot":"Diderot, Denis",
+		"Diderot1":"Diderot, Denis",
+		"Diderot2":"Diderot, Denis",
+		"de Jaucourt":"de Jaucourt, Chevalier Louis",
+		"Jaucourt":"de Jaucourt, Chevalier Louis",
+		"d'Holbach":"d'Holbach, Baron"
+		/* not yet mapped
+		Yvon
+		Forbonnais
+		Douchet and Beauzée
+		Boucher d'Argis
+		Lenglet Du Fresnoy
+		Cahusac
+		Pestré
+		Daubenton, le Subdélégué
+		Goussier
+		de Villiers
+		Barthès
+		Morellet
+		Malouin
+		Ménuret de Chambaud
+		Landois
+		Le Roy
+		*/
+	}
+	if(authorMap[author]) {
+		author = authorMap[author];
+	}
+	// remove ARTFL's trailing 5 for odd contributors (e.g. Turgot5)
+		if (author.substr(author.length-1, 1)=="5"){
+		author = author.substr(0, author.length-1);
+	}
+	return author;
+}
+
+function scrape (doc){
+	var namespace = doc.documentElement.namespaceURI;
+	var nsResolver = namespace ? function(prefix) {
+		if (prefix == 'x') return namespace; else return null;
+		} : null;
+		var url = doc.location.href;
+		var newItem = new Zotero.Item("encyclopediaArticle");
+		var xpath = '/html/body/div[@class="text"]/font';
+		var titleElmt = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
+		if (titleElmt) {
+			var title = titleElmt.textContent;
+		} else {
+			xpath = '/html/body/div[@class="text"]/b';
+			var title = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
+		}
+		newItem.title = title;
+		newItem.encyclopediaTitle = "Encyclopédie, ou Dictionnaire raisonné des sciences, des arts et des métiers";
+		newItem.shortTitle = "Encyclopédie";
+		newItem.date = "1751-1772";
+		newItem.publisher = "Briasson";
+		newItem.place = "Paris";
+		newItem.url = url;
+	
+		newItem.attachments.push({title:"ARTFL Snapshot", mimeType:"text/html", url:url, snapshot:true});
+	
+		// get author and tags
+		var hostRegexp = new RegExp("^(https?://[^/]+)/");
+		var hMatch = hostRegexp.exec(url);
+		var host = hMatch[1];
+		var getString1 = "/cgi-bin/philologic31/search3t?dbname=encyclopedie0507&word=&dgdivhead=";
+		var getString2 = "&dgdivocauthor=&dgdivocplacename=&dgdivocsalutation=&dgdivocclassification=&dgdivocpartofspeech=&dgdivtype=&CONJUNCT=PHRASE&DISTANCE=3&PROXY=or+fewer&OUTPUT=conc&POLESPAN=5&KWSS=1&KWSSPRLIM=500";
+		
+		Zotero.Utilities.HTTP.doGet(host+getString1+title+getString2, function(text){
+			var tagRe = new RegExp('>'+title+'[^\[]*\\[([^\\]]*)\]', 'i');
+			var m = tagRe.exec(text);
+			if(m[1] != "unclassified"){
+			 	var tagstring = m[1].replace("&", "&", "g");
+				var tags = tagstring.split(";")
+				for(var j in tags) {
+					newItem.tags.push(Zotero.Utilities.cleanString(tags[j]));
+				}
+			}
+			var authorRe = new RegExp('>'+title+',([^,]*),', "i");
+			var m = authorRe.exec(text);
+			var author = m[1];
+			author = Zotero.Utilities.cleanString(author);
+			// reconcile author
+			author = reconcileAuthor(author);	
+			if (author!="NA"){ // ignore unknown authors
+				newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author", true));
+			}
+			newItem.creators.push({firstName:"Denis", lastName:"Diderot", creatorType:"editor"});
+			newItem.creators.push({firstName:"Jean le Rond", lastName:"d'Alembert", creatorType:"editor"});
+			newItem.complete();
+		}, function() {Zotero.done();}, null);
+		Zotero.wait();	
+}
+
+function doWeb(doc, url) {
+	var namespace = doc.documentElement.namespaceURI;
+	var nsResolver = namespace ? function(prefix) {
+		if (prefix == 'x') return namespace; else return null;
+		} : null;
+
+	if (url.indexOf("getobject.pl") != -1){
+		// single article
+		scrape(doc);				
+	} else {
+		//search page
+		var items = new Object();
+		var xpath = '/html/body/div[@class="text"]/p/a';
+		var elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
+		var elmt;		
+		while (elmt = elmts.iterateNext()){
+			var title = elmt.textContent;
+			var link = elmt.href;
+			if (title && link){
+				items[link] = title;
+			}			
+		}
+		var items = Zotero.selectItems(items);
+		if(!items) {
+			return true;
+		}
+		var urls = new Array();
+		for(var i in items) {
+			urls.push(i);
+		}
+		Zotero.Utilities.processDocuments(urls, scrape, function() { Zotero.done(); });
+		Zotero.wait();	
+	}
+		
+}
\ No newline at end of file
diff --git a/translators/ARTstor.js b/translators/ARTstor.js
new file mode 100644
index 000000000..b86276214
--- /dev/null
+++ b/translators/ARTstor.js
@@ -0,0 +1,257 @@
+{
+	"translatorID":"5278b20c-7c2c-4599-a785-12198ea648bf",
+	"translatorType":4,
+	"label":"ARTstor",
+	"creator":"Ameer Ahmed and Michael Berkowitz",
+	"target":"http://[^/]artstor.org[^/]*",
+	"minVersion":"1.0.0b4.r5",
+	"maxVersion":"",
+	"priority":100,
+	"inRepository":true,
+	"lastUpdated":"2008-09-02 13:55:00"
+}
+
+function detectWeb(doc, url) {
+	if (url.match(/(S|s)earch/) && (doc.evaluate('//div[@id="thumbContentWrap"]/div', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/\w+/))) return "multiple"
+}
+
+function doWeb(doc, url) {
+	if (url.indexOf("|")!=-1){	
+	scrape(doc, url);
+	}
+}
+
+function scrape(doc, url){
+	var savedItems = new Array();
+	var saved = 0;
+	var urlstub = url.substring(url.indexOf('.org/')+5,url.length);
+	urlstub = url.substring(0,url.indexOf('.org/')+5) + urlstub.substring(0, urlstub.indexOf('/')+1)
+	var suburl = url.substring(url.indexOf('|')+1, url.length);
+        var groupname = suburl.substring(0, suburl.indexOf("|"));
+	var searchterm = '//*[@id="thumbSubTitle"]';
+		var stt = doc.evaluate(searchterm, doc, null, XPathResult.ANY_TYPE, null).iterateNext();
+	var st = stt.firstChild.nodeValue;
+	var pageNn = '//*[@id="pageNo"]';
+	var stt = doc.evaluate(pageNn, doc, null, XPathResult.ANY_TYPE, null).iterateNext();
+	var pg;
+      	if (stt.value==1){
+        	pg = 1;
+        } else if (stt.value==2){
+        	pg = 25;
+        } else {
+		pg = ((stt.value-1) * 24) + 1;
+        }
+        var groupid;
+	//check if user is on search page if not construct the query using the 2nd pattern
+	if (groupname.indexOf("search")!=-1){
+		groupid = "1/" + pg + "/24/0?tn=1&name=&id=all&kw=" +st + "&type=1";
+	}else {
+		groupid = suburl.substring(suburl.indexOf('|')+1, suburl.indexOf('||')) + "//thumbnails/" + pg + "/24/0";
+	}
+	// Initial query to get results from the service - primary purpose is to get objectids. which in turn are required for the 2nd service call, which exposes the actual metadata
+	Zotero.Utilities.HTTP.doGet(urlstub + "secure/" + groupname + "//" + groupid, function(text) {
+		json = eval("(" + text + ")");
+		items = new Object();
+		for(var i=0; i1) {
+				dialogTitle+="  " + childtitle;
+			}
+		        var sitem = child.id.substring(6,child.id.indexOf("_"));
+			webitems[sitem-1] = dialogTitle;
+			if (glow.indexOf(75)!=-1){
+				selectedNums[si]=sitem-1;
+				si++;
+			}
+	 		title = null;
+		}
+	}
+	// GET VALUES FROM THE WEB		
+	var tcount=0;
+	var newitems = null;
+	if (selectedNums.length>0){
+		newitems = new Object();
+		for (j=0; j/g, "");
+				} else {
+					newArticle.rights = child.fieldValue.replace(//g, "");
+				}
+			}
+			if (child.fieldName.indexOf("Subject")!=-1){
+				newArticle.tags.push(Zotero.Utilities.trimInternal(child.fieldValue));
+			}
+			if (child.fieldName.indexOf("Location")!=-1){
+				newArticle.tags.push(Zotero.Utilities.trimInternal(child.fieldValue));
+			}
+			if (child.fieldName.indexOf("Style Period")!=-1){
+				newArticle.tags.push(Zotero.Utilities.trimInternal(child.fieldValue));
+			}
+			if (child.fieldName.indexOf("Work Type")!=-1){
+				newArticle.tags.push(Zotero.Utilities.trimInternal(child.fieldValue));
+			}
+			if (child.fieldName.indexOf("Material")!=-1 || child.fieldName.indexOf("Technique")!=-1 ){
+				if (newArticle.artworkMedium!=null){
+					newArticle.artworkMedium+= ";" + Zotero.Utilities.trimInternal(child.fieldValue);
+				} else {
+					newArticle.artworkMedium = Zotero.Utilities.trimInternal(child.fieldValue);
+				}
+			}
+			if (child.fieldName.indexOf("Measurements")!=-1){
+				if (newArticle.artworkSize!=null){
+					newArticle.artworkSize+= ";" + Zotero.Utilities.trimInternal(child.fieldValue);
+				} else {			
+					newArticle.artworkSize = Zotero.Utilities.trimInternal(child.fieldValue);
+				}
+			}
+			if (child.fieldName.indexOf("Date")!=-1){
+				if (newArticle.date!=null){
+					newArticle.date+= ";" + Zotero.Utilities.trimInternal(child.fieldValue);
+				} else {
+					//bug here!! when date parser fails, entire object is not saved in Zotero - works in Scaffold, fails in Zotero! to patch remove all occurrences of B.C
+					newArticle.date = Zotero.Utilities.trimInternal(child.fieldValue.replace(/B.C./i, ""));
+				}
+			}
+			if (child.fieldName.indexOf("Repository")!=-1){
+				if (newArticle.repository!=null){
+					newArticle.repository+= ";" + Zotero.Utilities.trimInternal(child.fieldValue);
+				} else {			
+					newArticle.repository = Zotero.Utilities.trimInternal(child.fieldValue);
+				}
+			}
+			if (child.fieldName.indexOf("Source")!=-1){
+				if (newArticle.archiveLocation!=null){
+					newArticle.archiveLocation+= ";" + Zotero.Utilities.trimInternal(child.fieldValue);
+				} else {			
+					newArticle.archiveLocation = Zotero.Utilities.trimInternal(child.fieldValue);
+				}
+			}
+			if (child.fieldName.indexOf("Description")!=-1){
+				if (newArticle.abstractNote!=null){
+					newArticle.abstractNote+= ";" + Zotero.Utilities.trimInternal(child.fieldValue);
+				} else {
+					newArticle.abstractNote = Zotero.Utilities.trimInternal(child.fieldValue);
+				}
+			}
+			if (child.fieldName.indexOf("Collection")!=-1){
+				if (newArticle.extra!=null){
+					newArticle.extra+= ";" + Zotero.Utilities.trimInternal(child.fieldValue);
+				} else {			
+					newArticle.extra = Zotero.Utilities.trimInternal(child.fieldValue);
+				}
+			}
+		}
+		var objectId = json.objectId;
+		//this is called to get the url stub for the ARTstor viewer
+		Zotero.Utilities.HTTP.doGet(urlstub + "secure/metadata/" + objectId + "?_method=FpHtml", function(dom) {
+			var testurl = dom.substring(dom.lastIndexOf('')+21,dom.lastIndexOf('')); 
+			var t2 = "http://www.artstor.org"; 
+			var tmp2 = testurl.replace(//g, "");
+			tmp2 = tmp2.substring(0, tmp2.indexOf("&userId"));
+			//build ARTstorImageURL
+			artstorimgurl = t2+tmp2;
+			newArticle.url = artstorimgurl;
+			newArticle.callNumber = objectId;
+			newArticle.complete();
+			Zotero.done();
+		}); 
+		Zotero.wait();
+	});
+	Zotero.wait();
+});
+Zotero.wait();
+}
\ No newline at end of file
diff --git a/translators/ASCE.js b/translators/ASCE.js
new file mode 100644
index 000000000..16e9f657f
--- /dev/null
+++ b/translators/ASCE.js
@@ -0,0 +1,76 @@
+{
+	"translatorID":"303bdfc5-11b8-4107-bca1-63ca97701a0f",
+	"translatorType":4,
+	"label":"ASCE",
+	"creator":"Michael Berkowitz",
+	"target":"^http://ascelibrary.aip.org/.+",
+	"minVersion":"1.0.0b3.r1",
+	"maxVersion":"",
+	"priority":100,
+	"inRepository":true,
+	"lastUpdated":"2007-09-06 19:30:00"
+}
+
+function detectWeb(doc, url) {
+	if (doc.evaluate('//div[@id="sr-content-wrap"]//div[@class="sr-right"]/p[@class="sr-art-title"]/a', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
+		return "multiple";
+	} else {
+		return "journalArticle";
+	}
+}
+
+function getRIS(doc, url) {
+	var newx = '//div[@id="sci-art-options-box"]//input[@name="SelectCheck"]';
+	var key = doc.evaluate(newx, doc, null, XPathResult.ANY_TYPE, null).iterateNext().value;
+	Zotero.debug(key);
+	var citation = 'http://ascelibrary.aip.org/getabs/servlet/GetCitation?source=scitation&PrefType=ARTICLE&PrefAction=Add+Selected&SelectCheck=' + key + '&fn=open_refworks&downloadcitation=+Go+';
+	Zotero.Utilities.HTTP.doGet(citation, function(text) {
+		var translator = Zotero.loadTranslator("import");
+		text = text.replace(/RT/, "TY");
+		text = text.replace(/VO/, "VL");
+		text = text.replace(/LK/, "UR");
+		text = text.replace(/YR/, "PY");
+		Zotero.debug(text);
+		translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
+		translator.setString(text.replace(/([A-Z][A-Z\d]\s)/g, "$1 - "));
+		translator.setHandler("itemDone", function(obj, item) {
+			item.attachments = [
+				{url:item.url, title:"ASCE Snapshot", mimeType:"text/html"},
+				{url:"http://ascelibrary.aip.org/getpdf/servlet/GetPDFServlet?filetype=pdf&id=" + key + "&idtype=cvips&prog=search", title:"EAS Full Text PDF", mimeType:"application/pdf"}
+			];
+			//item.itemType = "journalArticle";
+			item.complete();
+		});
+		translator.translate();
+		Zotero.wait();
+		Zotero.done();
+	});
+}
+
+function doWeb(doc, url) {
+	var articles = new Array();
+	var items = new Object();
+	var xpath = '//div[@class="sr-right"]/p[@class="sr-art-title"]/a';
+	if (doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
+		var titles = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null);
+		while (new_title = titles.iterateNext()) {
+			items[new_title.href] = new_title.textContent;
+		}
+		
+		items = Zotero.selectItems(items);
+		
+		for (var i in items) {
+			articles.push(i)
+		}
+	} else {
+		var newx = '//div[@id="sci-art-options-box"]//input[@name="SelectCheck"]';
+		var stuff = doc.evaluate(newx, doc, null, XPathResult.ANY_TYPE, null).iterateNext().value;
+		Zotero.debug(stuff);
+		articles.push(url);
+	}
+
+	Zotero.debug(articles);
+	Zotero.Utilities.processDocuments(articles, getRIS, function() {Zotero.done});
+	Zotero.wait();
+
+}
diff --git a/translators/AcademicJournals.net.js b/translators/AcademicJournals.net.js
new file mode 100644
index 000000000..a2902ecec
--- /dev/null
+++ b/translators/AcademicJournals.net.js
@@ -0,0 +1,91 @@
+{
+	"translatorID":"252c6a50-0900-41c5-a66b-ec456137c43c",
+	"translatorType":4,
+	"label":"AcademicJournals.net",
+	"creator":"Michael Berkowitz",
+	"target":"http://www.academicjournals.net/",
+	"minVersion":"1.0.0b4.r5",
+	"maxVersion":"",
+	"priority":100,
+	"inRepository":true,
+	"lastUpdated":"2008-05-05 07:45:00"
+}
+
+function detectWeb(doc, url) {
+	if (url.match('articleno=')) {
+		return "journalArticle";
+	} else if (url.match('issueno=') || url.match('current.php')) {
+		return "multiple";
+	}
+}
+
+function doWeb(doc, url) {
+	var namespace = doc.documentElement.namespaceURI;
+	var nsResolver = namespace ? function(prefix) {
+		if (prefix == 'x') return prefix; else return null;
+	} : namespace;
+	
+	var arts = new Array();
+	if (detectWeb(doc, url) == "multiple") {
+		var items = new Object();
+		var titles = doc.evaluate('//tr[2]/td//table/tbody/tr[1]/td[2]/font', doc, nsResolver, XPathResult.ANY_TYPE, null);
+		var title;
+		var links = doc.evaluate('//tr[4]/td[2]/div/a[@class="links"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
+		var link;
+		while ((title = titles.iterateNext()) && (link = links.iterateNext())) {
+			items[link.href] = Zotero.Utilities.trimInternal(title.textContent);
+		}
+		items = Zotero.selectItems(items);
+		for (var i in items) {
+			arts.push(i);
+		}
+	} else {
+		arts = [url];
+	}
+	Zotero.Utilities.processDocuments(arts, function(doc) {
+		var item = new Zotero.Item("journalArticle");
+		item.url = doc.location.href;
+		//title
+		item.title = Zotero.Utilities.trimInternal(doc.evaluate('//td[2]/table/tbody/tr/td/div/font', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent);
+		
+		//voliss, etc.
+		var voliss = doc.evaluate('//table/tbody/tr/td[2]/font/font', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
+		voliss = voliss.match(/^([^\d]+)(\d+)\s+\((\d+)\):\s+([\d\-]+),\s+(\d+)/);
+		Zotero.debug(voliss);
+		item.publicationTitle = voliss[1];
+		item.volume = voliss[2];
+		item.issue = voliss[3];
+		item.pages = voliss[4];
+		item.date = voliss[5];
+		
+		//authors
+		var authorsx = doc.evaluate('//td[2]/font/a[@class="links"]/font', doc, nsResolver, XPathResult.ANY_TYPE, null);
+		var author;
+		var authors = new Array();
+		while (author = authorsx.iterateNext()) {
+			authors.push(author.textContent);
+		}
+		for each (var aut in authors) {
+			item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author"));
+		}
+		
+		item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate('//table/tbody/tr/td/div/table/tbody/tr/td[2]/div/font', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent);
+		
+		//attachments
+		var pdfurl = doc.evaluate('//a[contains(@href, ".pdf")]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href;
+		item.attachments = [
+			{url:item.url, title:"AcademicJournals.net Snapshot", mimeType:"text/html"},
+			{url:pdfurl, title:"AcademicJournals.net PDF", mimeType:"application/pdf"}
+		];
+		
+		//tags
+		var tagspath = doc.evaluate('//tbody/tr/td/table/tbody/tr[2]/td/font/a[@class="links"]/font', doc, nsResolver, XPathResult.ANY_TYPE, null);
+		var tag;
+		var tags = new Array();
+		while (tag = tagspath.iterateNext()) {
+			tags.push(tag.textContent);
+		}
+		item.tags = tags;
+		item.complete();
+	}, function() {Zotero.done;});
+}
\ No newline at end of file
diff --git a/translators/AdvoCAT.js b/translators/AdvoCAT.js
new file mode 100644
index 000000000..0792b437e
--- /dev/null
+++ b/translators/AdvoCAT.js
@@ -0,0 +1,117 @@
+{
+	"translatorID":"138de272-0d2a-4ab5-8cfb-0fd879958d04",
+	"translatorType":4,
+	"label":"AdvoCAT",
+	"creator":"Adam Crymble",
+	"target":"^http://(142.57.32.51|library.lsuc.on.ca)",
+	"minVersion":"1.0.0b4.r5",
+	"maxVersion":"",
+	"priority":100,
+	"inRepository":true,
+	"lastUpdated":"2008-07-25 17:40:00"
+}
+
+function detectWeb(doc, url) {
+	if (doc.location.href.match("Search_Code")) {
+		return "multiple";
+	} else if (doc.title.match("Record View")) {
+		return "book";
+	}
+}
+
+function associateData (newItem, dataTags, field, zoteroField) {
+	if (dataTags[field]) {
+		newItem[zoteroField] = dataTags[field];
+	}
+}
+
+function scrape(doc, url) {
+	var namespace = doc.documentElement.namespaceURI;
+	var nsResolver = namespace ? function(prefix) {
+		if (prefix == 'x') return namespace; else return null;
+	} : null;	
+	
+	var dataTags = new Object();
+	var fieldTitle;
+	
+	var newItem = new Zotero.Item("book");
+
+	var headers = doc.evaluate('//table[2]/tbody/tr/th', doc, nsResolver, XPathResult.ANY_TYPE, null);
+	var xPathCount = doc.evaluate('count (//table[2]/tbody/tr/th)', doc, nsResolver, XPathResult.ANY_TYPE, null);
+	var contents = doc.evaluate('//table[2]/tbody/tr/td', doc, nsResolver, XPathResult.ANY_TYPE, null);
+
+	for (i=0; i