]*>/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; i