commit translators as separate files, combine CiteBase translators, and modify SPIE translator

This commit is contained in:
Simon Kornblith 2008-09-11 04:40:07 +00:00
parent b32ed05971
commit 51bfbbc42a
264 changed files with 36688 additions and 0 deletions

View File

@ -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();
}
}

View File

@ -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 = /<a\s+class="button"\s+href="([^"]+)"\s+id="resource_link"/i;
var m = linkRe.exec(text);
if(!m) {
throw("regular expression failed!");
}
Zotero.Utilities.HTTP.doGet(m[1], 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) {
if(item.notes && item.notes[0]) {
item.extra = item.notes[0].note;
delete item.notes;
item.notes = undefined;
}
// grab uni data from thesis
if(item.itemType == "thesis") {
var re = /^(.+?) ([0-9]{4})\. ([0-9]+) pp\.(.*)$/;
var m = re.exec(item.extra);
if(m) {
item.publisher = m[1];
item.date = m[2];
item.pages = m[3];
item.extra = m[4];
}
}
// fix periods
for(var i in item.creators) {
var nameLength = item.creators[i].firstName.length;
if(item.creators[i].firstName[nameLength-1] == ".") {
item.creators[i].firstName = item.creators[i].firstName.substr(0, nameLength-1);
}
}
for(var i in item.tags) {
var tagLength = item.tags[i].length;
if(item.tags[i][tagLength-1] == ".") {
item.tags[i] = item.tags[i].substr(0, tagLength-1);
}
}
// fix title
item.title = Zotero.Utilities.superCleanString(item.title);
// add attachments
item.attachments = attachments.shift();
item.complete();
});
translator.translate();
Zotero.done();
});
});
});
Zotero.wait();
}

138
translators/ACM.js Normal file
View File

@ -0,0 +1,138 @@
{
"translatorID":"e78d20f7-488-4023-831-dfe39679f3f",
"translatorType":4,
"label":"ACM",
"creator":"Simon Kornblith and Michael Berkowitz",
"target":"https?://[^/]*portal\\.acm\\.org[^/]*/(?:results\\.cfm|citation\\.cfm)",
"minVersion":"1.0.0b3.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-06-06 08:45:00"
}
function detectWeb(doc, url) {
if(url.indexOf("/results.cfm") != -1) {
var items = Zotero.Utilities.getItemArray(doc, doc, '^https?://[^/]+/citation.cfm\\?[^#]+$');
// hack to return multiple if there are items
for(var i in items) {
return "multiple";
}
} else {
var onClick = doc.evaluate('//a[substring(text(), 5, 7) = "EndNote"]', doc, null, XPathResult.ANY_TYPE,
null).iterateNext().getAttribute("onClick");
if(onClick.match("proceeding.article")) {
return "conferencePaper";
} else {
return "journalArticle";
}
}
}
var urls = new Array();
// this handles sequential loading, since first we need to process a document (to get the abstract), then
// get the Refer metadata, then process the next document, etc.
function getNext() {
if(urls.length) {
var url = urls.shift();
Zotero.Utilities.processDocuments([url], function(doc) { scrape(doc); });
} else {
Zotero.done();
}
}
function scrape(doc) {
var onClick = doc.evaluate('//a[substring(text(), 5, 7) = "EndNote"]', doc, null, XPathResult.ANY_TYPE,
null).iterateNext().getAttribute("onClick");
var m = onClick.match(/'([^']+)'/);
if (doc.evaluate('//div[@class="abstract"]/p[@class="abstract"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
var abstract = doc.evaluate('//div[@class="abstract"]/p[@class="abstract"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext();
if (!abstract.textContent.match(/\w+/)) {
var abstract = doc.evaluate('//div[@class="abstract"]/p[2]', doc, null, XPathResult.ANY_TYPE, null).iterateNext();
}
if(abstract) abstract = Zotero.Utilities.cleanString(abstract.textContent);
}
var snapshot = doc.location.href;
var attachments = new Array();
var url;
var typeLinks = doc.evaluate('//td[@class="smaller-text"]/a[img]', doc, null,
XPathResult.ANY_TYPE, null);
var typeLink;
while(typeLink = typeLinks.iterateNext()) {
var linkText = typeLink.textContent.toLowerCase();
if(linkText == "pdf") {
attachments.push({title:"ACM Full Text PDF", mimeType:"application/pdf", url:typeLink.href});
url = typeLink.href;
} else if(linkText == "html") {
url = snapshot = typeLink.href;
}
}
attachments.push({title:"ACM Snapshot", mimeType:"text/html", url:snapshot});
var keywords = new Array();
var keywordLinks = doc.evaluate('//p[@class="keywords"]/a', doc, null,
XPathResult.ANY_TYPE, null);
var keywordLink;
while(keywordLink = keywordLinks.iterateNext()) {
keywords.push(Zotero.Utilities.trimInternal(keywordLink.textContent.toLowerCase()));
}
var doi = "";
var doiElmt = doc.evaluate('/html/body/div/table/tbody/tr[4]/td/table/tbody/tr/td/table/tbody/tr[3]/td[2][@class="small-text"]/a', doc, null, XPathResult.ANY_TYPE, null).iterateNext()
if (doiElmt){
var match = doiElmt.textContent.match(/org\/(.*)/);
if (match){
doi = match[1];
}
}
Zotero.Utilities.HTTP.doGet("http://portal.acm.org/"+m[1], function(text) {
// split() may no longer be necessary
var m = text.split(/<\/?pre[^>]*>/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();
}

View File

@ -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();
}

258
translators/AGU Journals.js Normal file
View File

@ -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);
}
}
}

84
translators/AJHG.js Normal file
View File

@ -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();
}

View File

@ -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();
}

View File

@ -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(/<pre>(?:.|[\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();
});
}

View File

@ -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);
}

View File

@ -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();
}

View File

@ -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+'</a>[^\[]*\\[([^\\]]*)\]', 'i');
var m = tagRe.exec(text);
if(m[1] != "unclassified"){
var tagstring = m[1].replace("&amp;", "&", "g");
var tags = tagstring.split(";")
for(var j in tags) {
newItem.tags.push(Zotero.Utilities.cleanString(tags[j]));
}
}
var authorRe = new RegExp('>'+title+'</a>,([^,]*),', "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();
}
}

257
translators/ARTstor.js Normal file
View File

@ -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<json.thumbnails.length; i++) {
child = json.thumbnails[i];
var tmpUrl = urlstub + "secure/metadata/" + child.objectId + "?_method=Infolder";
//here we are saving the url service call to get each objects metadata
savedItems[saved] = tmpUrl;
items[tmpUrl]=child.objectId;
saved++;
}
// GET VALUES FROM THE WEB
var xpath = '//div[@id="thumbContentWrap"]';
var elmts = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext();
var webitems = new Object();
var selectedNums = new Array();
var si=0;
var c = elmts.getElementsByTagName('*');
var title = "";
for(var i=0; i<c.length; i++) {
var child = c[i];
if (child.id.indexOf("_imageHolder")!=-1){
var csss = child.style;
var glow = csss.getPropertyValue('border');
}
if (child.id.indexOf("_thumb1")!=-1){
title = child.title;
}
if (child.id.indexOf("_thumb2")!=-1){
title+= " :: " + child.title;
}
if (child.id.indexOf("_thumb3")!=-1){
var childtitle = child.title;
var dialogTitle = title;
if (childtitle.length>1) {
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<selectedNums.length;j++){
var numnum = selectedNums[j];
for (var x in items){
if (numnum==tcount){
newitems[x] = webitems[tcount];
tcount=0;
break;
} else {
tcount++;
}
}
}
} else {
tcount = 0;
for (var x in items){
items[x] = webitems[tcount];
tcount++;
}
}
if (newitems!=null){
items = newitems;
}
//show dialogbox
var items = Zotero.selectItems(items);
if(!items) {
return true;
}
var urls = new Array();
for(var i in items) {
urls.push(i);
}
//this gets called when an object is selected in the dialog box, fires off a get on the service url
Zotero.Utilities.HTTP.doGet(urls, function(text) {
json = eval("(" + text + ")");
var newArticle = new Zotero.Item('artwork');
for (var i=0; i<json.metaData.length; i++) {
child = json.metaData[i];
// MISSING CULTURE!!!
if (child.fieldName.indexOf("Title")!=-1){
if (newArticle.title!=null){
newArticle.title+= ";" + child.fieldValue;
} else {
newArticle.title = child.fieldValue;
}
}
if (child.fieldName.indexOf("Creator")!=-1){
if (child.fieldValue != "") {
if (child.fieldValue.match(/,/)) {
var aut = child.fieldValue.match(/^([^,]+),\s+(.*)$/);
if (aut[1].match(/\s/)) {
newArticle.notes.push({note:"Artist information: " + aut[2]});
newArticle.creators.push(Zotero.Utilities.cleanAuthor(aut[1], "artist"));
} else {
var extras = aut[2].match(/^([^,]+),\s+(.*)$/);
newArticle.creators.push({firstName:extras[1], lastName:aut[1], creatorType:"author"});
newArticle.notes.push({note:"Artist information: " + extras[2]});
}
} else {
newArticle.creators.push(Zotero.Utilities.cleanAuthor(child.fieldValue, "artist"));
}
}
}
if (child.fieldName.indexOf("Culture")!=-1){
newArticle.creators.push(Zotero.Utilities.cleanAuthor(child.fieldValue, "producer", true));
}
if (child.fieldName.indexOf("Rights")!=-1){
if (newArticle.rights!=null){
newArticle.rights+= ";" + child.fieldValue.replace(/<wbr\/>/g, "");
} else {
newArticle.rights = child.fieldValue.replace(/<wbr\/>/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('<td class="data">')+21,dom.lastIndexOf('</td>'));
var t2 = "http://www.artstor.org";
var tmp2 = testurl.replace(/<wbr\/>/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();
}

76
translators/ASCE.js Normal file
View File

@ -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();
}

View File

@ -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;});
}

117
translators/AdvoCAT.js Normal file
View File

@ -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<xPathCount.numberValue; i++) {
fieldTitle = headers.iterateNext().textContent.replace(/\s+/g, '');
if (!fieldTitle.match(/\w/)) {
fieldTitle = "Blank" + i;
}
dataTags[fieldTitle] = Zotero.Utilities.cleanTags(contents.iterateNext().textContent.replace(/^\s*|\s*$/g, ''));
}
if (dataTags["MainAuthor:"]) {
var author = dataTags["MainAuthor:"];
if (author.match(", ") && !author.match(":")) {
var authors = author.split(", ");
author = authors[1] + " " + authors[0];
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
} else {
newItem.creators.push({lastName: author, creatorType: "creator"});
}
}
if (dataTags["Published:"]) {
if (dataTags["Published:"].match(": ")) {
var place1 = dataTags["Published:"].indexOf(": ");
newItem.place = dataTags["Published:"].substr(0, place1);
var publisher1 = dataTags["Published:"].substr(place1 + 2);
if (publisher1.match(", ")) {
var date1 = publisher1.lastIndexOf(", ");
newItem.date = publisher1.substr(date1 +2);
newItem.publisher = publisher1.substr(0, date1);
} else {
newItem.publisher = publisher1;
}
} else {
newItem.publisher = publisher1;
}
}
associateData (newItem, dataTags, "Title:", "title");
associateData (newItem, dataTags, "Database:", "repository");
associateData (newItem, dataTags, "Description:", "pages");
associateData (newItem, dataTags, "Edition:", "edition");
newItem.url = doc.location.href;
newItem.complete();
}
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();
var titles = doc.evaluate('//form[2]/table/tbody/tr/td[3]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
items[next_title.href] = next_title.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,71 @@
{
"translatorID":"9d822257-2eec-4674-b6d0-2504f54c8890",
"translatorType":4,
"label":"African Journals Online",
"creator":"Michael Berkowitz",
"target":"http://www.ajol.info",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-04-18 08:55:00"
}
function detectWeb(doc, url) {
if (url.match(/viewarticle.php/)) {
return "journalArticle";
} else if (url.match(/search.php/) || url.match(/viewissue.php/)) {
return "multiple";
}
}
function getID(str) {
return str.match(/(&|\?)id=(\d+)&?/)[2];
}
function doWeb(doc, url) {
var articles = new Array();
if (detectWeb(doc, url) == "multiple") {
if (url.match(/search.php/)) {
var items = Zotero.Utilities.getItemArray(doc, doc, "viewarticle.php?");
} else if (url.match("viewissue.php")) {
var items = new Object();
var titles = doc.evaluate('//span[@class="toctitle"]', doc, null, XPathResult.ANY_TYPE, null);
var links = doc.evaluate('//a[text() = "Abstract"]', doc, null, XPathResult.ANY_TYPE, null);
var title;
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) {
articles.push(getID(i));
}
} else {
articles = [getID(url)];
}
Zotero.debug(articles);
for each (var id in articles) {
var getstr = 'http://www.ajol.info/rst/rst.php?op=capture_cite&id=' + id + '&cite=refman';
Zotero.Utilities.HTTP.doGet(getstr, 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 pubinfo = item.publicationTitle.match(/(.*);([^;]+)$/);
item.publicationTitle = pubinfo[1];
var voliss = pubinfo[2].toLowerCase();
if (voliss.match(/v/)) item.volume = voliss.match(/v(ol\.)?\s+(\d+)/)[2];
if (voliss.match(/n/)) item.issue = voliss.match(/n(o\.)?\s+(\d+)/)[2];
if (voliss.match(/p(age)?/)) item.pages = voliss.match(/\d+\-\d+/)[0];
item.date = voliss.match(/\(([^)]+)\)/)[1];
item.attachments[0].title = "African Journals Online Snapshot";
item.attachments[0].mimeType = "text/html";
item.complete();
});
translator.translate();
});
}
}

87
translators/AfroEuropa.js Normal file
View File

@ -0,0 +1,87 @@
{
"translatorID":"4f62425a-c99f-4ce1-b7c1-5a3ac0d636a3",
"translatorType":4,
"label":"AfroEuropa",
"creator":"Michael Berkowitz",
"target":"http://journal.afroeuropa.eu/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-05-20 19:10:00"
}
function detectWeb(doc, url) {
if (doc.evaluate('//tr[td/a[2]]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
} else if (url.match(/article\/view\//)) {
return "journalArticle";
}
}
function makeExport(site, str) {
var nums = str.match(/\d+(\/\d+)?/)[0];
if (!nums.match(/\//)) nums += "/0";
return site + 'rt/captureCite/' + nums + '/referenceManager';
}
function doWeb(doc, url) {
var n = doc.documentElement.namespaceURI;
var ns = n ? function(prefix) {
if (prefix == 'x') return n; else return null;
} : null;
var site = url.match(/^http:\/\/([^/]*\/)+index\.php\/[^/]*\//)[0];
var arts = new Array();
if (detectWeb(doc, url) == "multiple") {
var xpath = '//tr[td/a]';
if (url.match(/search/)) {
var titlex = './td[2]';
var linkx = './td[3]/a[1]';
} else if (url.match(/issue/)) {
var titlex = './td[1]';
var linkx = './td[2]/a[1]';
}
var items = new Object();
var results = doc.evaluate(xpath, doc, ns, XPathResult.ANY_TYPE, null);
var result;
while (result = results.iterateNext()) {
var title = Zotero.Utilities.trimInternal(doc.evaluate(titlex, result, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent);
var link = doc.evaluate(linkx, result, ns, XPathResult.ANY_TYPE, null).iterateNext().href;
items[makeExport(site, link)] = title;
}
items = Zotero.selectItems(items);
for (var i in items) {
arts.push(i);
}
} else {
arts = [makeExport(cite, url)];
}
Zotero.Utilities.HTTP.doGet(arts, function(text) {
var translator = Zotero.loadTranslator("import");
translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
translator.setString(text);
translator.setHandler("itemDone", function(obj, item) {
item.title = Zotero.Utilities.capitalizeTitle(item.title);
var voliss = item.publicationTitle.split(/;\s+/);
item.publicationTitle = Zotero.Utilities.trimInternal(voliss[0]);
voliss = voliss[1].match(/(\d+),\s+No\s+(\d+)\s+\((\d+)\)/);
item.volume = voliss[1];
item.issue = voliss[2];
item.date = voliss[3];
var auts = new Array();
for each (var aut in item.creators) {
auts.push(aut.lastName);
}
item.creators = new Array();
for each (var aut in auts) {
item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author"));
}
item.attachments[0].mimeType = "text/html";
item.attachments[0].title = "AfroEuropa Snapshot";
item.complete();
});
translator.translate();
});
Zotero.wait();
}

View File

@ -0,0 +1,65 @@
{
"translatorID":"b8a86e36-c270-48c9-bdd1-22aaa167ef46",
"translatorType":4,
"label":"Agencia del ISBN",
"creator":"Michael Berkowitz",
"target":"http://www.mcu.es/webISBN",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-06-08 23:00:00"
}
function detectWeb(doc, url) {
if (doc.evaluate('//div[@class="isbnResultado"]/div[@class="isbnResDescripcion"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
} else if (doc.evaluate('//div[@class="fichaISBN"]/div[@class="cabecera"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "book";
}
}
function doWeb(doc, url) {
var books = new Array();
if (detectWeb(doc, url) == "multiple") {
var items = new Object();
var boxes = doc.evaluate('//div[@class="isbnResultado"]/div[@class="isbnResDescripcion"]', doc, null, XPathResult.ANY_TYPE, null);
var box;
while (box = boxes.iterateNext()) {
var book = doc.evaluate('./p/span/strong/a', box, null, XPathResult.ANY_TYPE, null).iterateNext();
items[book.href] = book.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
books.push(i);
}
} else {
books = [url];
}
Zotero.Utilities.processDocuments(books, function(newDoc) {
var data = new Object();
var rows = newDoc.evaluate('//div[@class="fichaISBN"]/table/tbody/tr', newDoc, null, XPathResult.ANY_TYPE, null);
var next_row;
while (next_row = rows.iterateNext()) {
var heading = newDoc.evaluate('./th', next_row, null, XPathResult.ANY_TYPE, null).iterateNext().textContent;
var value = newDoc.evaluate('./td', next_row, null, XPathResult.ANY_TYPE, null).iterateNext().textContent;
data[heading.replace(/\W/g, "")] = value;
}
var isbn = Zotero.Utilities.trimInternal(newDoc.evaluate('//span[@class="cabTitulo"]/strong', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent);
var item = new Zotero.Item("book");
item.ISBN = isbn;
item.title = Zotero.Utilities.trimInternal(data['Ttulo']);
author = data['Autores'];
if (author) {
var authors = author.match(/\b.*,\s+\w+[^([]/g);
for each (aut in authors) {
item.creators.push(Zotero.Utilities.cleanAuthor(Zotero.Utilities.trimInternal(aut), "author", true));
}
}
if (data['Publicacin']) item.publisher = Zotero.Utilities.trimInternal(data['Publicacin']);
if (data['FechaEdicin']) item.date = Zotero.Utilities.trimInternal(data['FechaEdicin']);
item.complete();
}, function() {Zotero.done;});
Zotero.wait();
}

View File

@ -0,0 +1,197 @@
{
"translatorID":"0a84a653-79ea-4c6a-8a68-da933e3b504a",
"translatorType":4,
"label":"Alexander Street Press",
"creator":"John West and Michael Berkowitz",
"target":"http://(?:www\\.)alexanderstreet",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-03-28 16:30:00"
}
function detectWeb(doc, url) {
if( url.indexOf("object.details.aspx") != -1 ) {
var zitemtype = doc.getElementById("ctl00_ctl00_MasterContentBody_ContentPlaceHolder1_txtZType").value;
switch (zitemtype.toLowerCase()) {
case "book":
return "book";
break;
case "chapter":
return "bookSection";
break;
case "journal":
return "journalArticle";
break;
case "manuscript":
return "manuscript";
break;
case "audio":
return "audioRecording";
break;
case "video":
return "videoRecording";
break;
case "issue":
return "journalArticle";
break;
case "article":
return "journalArticle";
break;
case "series":
return "interview";
break;
case "session":
return "interview";
break;
default:
return "document";
}
} else if (url.indexOf("results.aspx") != -1) {
return "multiple";
}
}
function scrape(doc, url) {
// set prefix for serverside control
var p = "ctl00_ctl00_MasterContentBody_ContentPlaceHolder1_txtZ";
// get values from hidden inputs
var ztype = GetItemType(doc.getElementById(p+"Type").value);
var ztitle = doc.getElementById(p+"Title").value;
var zbooktitle = doc.getElementById(p+"BookTitle").value;
var znotes = doc.getElementById(p+"Notes").value;
var zurl = doc.getElementById(p+"URL").value;
var zrights = doc.getElementById(p+"Rights").value;
var zseries = doc.getElementById(p+"Series").value;
var zvolume = doc.getElementById(p+"Volume").value;
var zissue = doc.getElementById(p+"Issue").value;
var zedition = doc.getElementById(p+"Edition").value;
var zplace = doc.getElementById(p+"Place").value;
var zpublisher = doc.getElementById(p+"Publisher").value;
var zpages = doc.getElementById(p+"Pages").value;
var zrepository = doc.getElementById(p+"Repository").value;
var zlabel = doc.getElementById(p+"Label").value;
var zrunningTime = doc.getElementById(p+"RunningTime").value;
var zlanguage = doc.getElementById(p+"Language").value;
var zauthor = doc.getElementById(p+"Author").value;
var zeditor = doc.getElementById(p+"Editor").value;
var ztranslator = doc.getElementById(p+"Translator").value;
var zinterviewee = doc.getElementById(p+"Interviewee").value;
var zinterviewer = doc.getElementById(p+"Interviewer").value;
var zrecipient = doc.getElementById(p+"Recipient").value;
var zdirector = doc.getElementById(p+"Director").value;
var zscriptwriter = doc.getElementById(p+"ScriptWriter").value;
var zproducer = doc.getElementById(p+"Producer").value;
var zcastMember = doc.getElementById(p+"CastMember").value;
var zperformer = doc.getElementById(p+"Performer").value;
var zcomposer = doc.getElementById(p+"Composer").value;
// create Zotero item
var newArticle = new Zotero.Item(ztype);
// populate Zotero item
newArticle.title = ztitle;
newArticle.bookTitle = zbooktitle;
newArticle.notes = znotes;
newArticle.url = zurl;
newArticle.place = zplace;
newArticle.publisher = zpublisher;
newArticle.pages = zpages;
newArticle.rights = zrights;
newArticle.series = zseries;
newArticle.volume = zvolume;
newArticle.issue = zissue;
newArticle.edition = zedition;
newArticle.repository = zrepository;
newArticle.label = zlabel;
newArticle.runningTime = zrunningTime;
newArticle.language = zlanguage;
newArticle.editor = zeditor;
newArticle.translator = ztranslator;
newArticle.interviewee = zinterviewee;
newArticle.interviewer = zinterviewer;
newArticle.recipient = zrecipient;
newArticle.director = zdirector;
newArticle.scriptwriter = zscriptwriter;
newArticle.producer = zproducer;
newArticle.castMember = zcastMember;
newArticle.performer = zperformer;
newArticle.composer = zcomposer;
var aus = zauthor.split(";");
for (var i=0; i< aus.length ; i++) {
newArticle.creators.push(Zotero.Utilities.cleanAuthor(aus[i], "author", true));
}
newArticle.attachments = [{url:doc.location.href, title:"Alexander Street Press Snapshot", mimeType:"text/html"}];
if (doc.evaluate('//a[contains(@href, "get.pdf")]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
var pdfurl = doc.evaluate('//a[contains(@href, "get.pdf")]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href;
newArticle.attachments.push({url:pdfurl, title:"Alexander Street Press PDF", mimeType:"application/pdf"});
} else if (doc.evaluate('//a[contains(@href, "get.jpg")]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
var imgurl = doc.evaluate('//a[contains(@href, "get.jpg")]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href.replace(/.{2}$/, "01");
newArticle.attachments.push({url:imgurl, title:"Alexander Street Press Pg 1", mimeType:"image/jpg"});
newArticle.notes = [{note:"Further page images can be found by following the URL of the 'Alexander Street Press Pg 1' attachment and iterating the final digits of the URL"}];
}
// save Zotero item
newArticle.complete();
}
function GetItemType(zitemtype) {
switch (zitemtype.toLowerCase()) {
case "book":
return "book";
break;
case "chapter":
return "bookSection";
break;
case "journal":
return "journalArticle";
break;
case "manuscript":
return "manuscript";
break;
case "audio":
return "audioRecording";
break;
case "video":
return "videoRecording";
break;
case "issue":
return "journalArticle";
break;
case "article":
return "journalArticle";
break;
case "series":
return "interview";
break;
case "session":
return "interview";
break;
default:
return "document";
}
}
function doWeb(doc, url) {
var articles = new Array();
if (detectWeb(doc, url) == "multiple") {
var items = new Object();
var xpath = '//tbody/tr/td[2][@class="data"]/a[1]';
var titles = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
items[next_title.href] = next_title.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done;});
}

182
translators/AlterNet.js Normal file
View File

@ -0,0 +1,182 @@
{
"translatorID":"ea531652-cdeb-4ec2-940e-627d4b107263",
"translatorType":4,
"label":"AlterNet",
"creator":"Jesse Johnson",
"target":"^http://(?:www\\.)alternet.org",
"minVersion":"1.0.0b4.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-07-10 06:15:00"
}
function detectWeb(doc, url) {
// identifies articles according to the presence of an article ID
// number in the URL
var index = url.toString().indexOf('.org/') + 5;
index += url.toString().substr(index).indexOf('/');
if (index != -1) {
// ordinary aritcle
var id = url.toString().substr(index + 1, 5);
Zotero.Utilities.cleanString(id);
if (Number(id)) {
return "magazineArticle";
}
//columnist or blog article
index += url.toString().substr(index + 1).indexOf('/');
id = url.toString().substr(index + 2, 5);
Zotero.Utilities.cleanString(id);
if (Number(id) && url.toString().search('blog') == -1) {
return "magazineArticle";
}
else if (Number(id)) {
return "blogPost";
}
}
return null;
}
function scrape(doc, url, title) {
var index = url.toString().indexOf('.org/') + 5;
index += url.toString().substr(index).indexOf('/');
if (index != -1) {
// ordinary aritcle
var id = url.toString().substr(index + 1, 5);
Zotero.Utilities.cleanString(id);
if (Number(id)) {
var newItem = new Zotero.Item("magazineArticle");
}
//columnist or blog article
index += url.toString().substr(index + 1).indexOf('/');
id = url.toString().substr(index + 2, 5);
Zotero.Utilities.cleanString(id);
if (Number(id) && url.toString().search('blog') == -1) {
var newItem = new Zotero.Item("magazineArticle");
}
else if (Number(id)) {
var newItem = new Zotero.Item("blogPost");
}
}
newItem.url = url;
newItem.title = title;
if (newItem.itemType == "magazineArticle") {
newItem.publicationTitle = "AlterNet";
newItem.repository = "alternet.org";
}
else if (newItem.itemType == "blogPost") {
newItem.websiteType = "AlterNet Blog";
}
// general scraping variables
var xpath;
// author
if (newItem.itemType == "magazineArticle") {
xpath = '//p[@class="storybyline"]//a[contains(@href,"author")]';
}
else if (newItem.itemType == "blogPost") {
xpath = '//p[@class="storybyline"]//a[contains(@href,"bloggers")]';
}
temp = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext();
if (temp) {
var author = Zotero.Utilities.trimInternal(temp.textContent);
if(author.substr(0, 3).toLowerCase() == "by ") {
author = author.substr(3);
}
var authors = author.split(",");
for each (var author in authors) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
}
}
// date
if (newItem.itemType == "magazineArticle") {
xpath = '//p[@class="storybyline"]//a[contains(@href,"date")]';
temp = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext();
var date = Zotero.Utilities.strToDate(temp.textContent);
}
else if (newItem.itemType == "blogPost") {
xpath = '//p[@class="storybyline"]/b';
temp = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext();
var begin = temp.textContent.lastIndexOf(" on ");
temp = temp.textContent.substr(begin + 4);
var date = Zotero.Utilities.strToDate(temp.substr(0, temp.length - 1));
}
if (date != null) {
var strdate;
date.month = date.month + 1;
strdate = date.year + '-';
if (date.month < 10) {
strdate += '0' + date.month;
}
else {
strdate += date.month;
}
if (date.day > 10) {
strdate += '-' + date.day;
}
else {
strdate += '-0' + date.day;
}
newItem.date = strdate;
}
// abstract
xpath = '//div[@class="teaser"]//div[contains(@class,"teaser")]';
temp = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext();
if (temp) {
newItem.abstractNote = Zotero.Utilities.trimInternal(temp.textContent);
}
// article snapshot
// grabs 5-digit article code from url and uses it to derive printable page url for use in article snapshot
var index = url.toString().indexOf('.org/') + 5;
index += url.toString().substr(index).indexOf('/');
if (index != -1) {
var printurl;
// ordinary article
var id = url.toString().substr(index + 1, 5);
if (Number(id)) {
printurl = "http://www.alternet.org/module/printversion/" + id;
newItem.attachments.push({url:printurl, title:"AlterNet Article Snapshot", mimeType:"text/html"});
}
// columnist article
else {
index += url.toString().substr(index + 1).indexOf('/');
id = url.toString().substr(index + 2, 5);
Zotero.Utilities.cleanString(id);
if (Number(id)) {
printurl = "http://www.alternet.org/module/printversion/" + id;
if (newItem.itemType == "blogPost") {
printurl += "/?type=blog";
}
newItem.attachments.push({url:printurl, title:"AlterNet Article Snapshot", mimeType:"text/html"});
}
}
}
newItem.complete();
}
function doWeb(doc, url) {
// ordinary and columnist articles
var xpath = '//p[@class="storyheadline"]';
var title;
if (title = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
scrape(doc, url, title.textContent);
}
return null;
}

191
translators/Aluka.js Normal file
View File

@ -0,0 +1,191 @@
{
"translatorID":"e8fc7ebc-b63d-4eb3-a16c-91da232f7220",
"translatorType":4,
"label":"Aluka",
"creator":"Sean Takats",
"target":"https?://(?:www\\.)aluka.org/action/(?:showMetadata\\?doi=[^&]+|doSearch\\?|doBrowseResults\\?)",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-02-12 10: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 xpath = '//a[@class="title"]';
if (url.match(/showMetadata\?doi=[^&]+/)){
return "document";
} else if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
}
}
// Aluka types we can import
// TODO: Improve support for other Aluka item types?
// Correspondence, Circulars, Newsletters, Interviews, Pamphlets, Policy Documents, Posters, Press Releases, Reports, Testimonies, Transcripts
var typeMap = {
"Books":"book",
"Aluka Essays":"report",
"photograph":"artwork",
"Photographs":"artwork",
"Panoramas":"artwork",
"Journals (Periodicals)":"journalArticle",
"Articles":"journalArticle",
"Correspondence":"letter",
"Interviews":"interview",
"Reports":"report"
}
function doWeb(doc, url){
var urlString = "http://www.aluka.org/action/showPrimeXML?doi=" ;
var uris = new Array();
var m = url.match(/showMetadata\?doi=([^&]+)/);
if (m) { //single page
uris.push(urlString+ m[1]);
} else { //search results page
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var xpath = '//a[@class="title"]';
var items = new Object();
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;
var m = link.match(/showMetadata\?doi=([^&]+)/);
if (title && m){
items[m[1]] = title;
}
}
var items = Zotero.selectItems(items);
if(!items) {
return true;
}
for(var i in items) {
uris.push(urlString + i);
}
}
// http://www.aluka.org/action/showPrimeXML?doi=10.5555/AL.SFF.DOCUMENT.cbp1008
Zotero.Utilities.HTTP.doGet(uris, function(text) {
text = text.replace(/<\?xml[^>]*\?>/, ""); // strip xml header
text = text.replace(/(<[^>\.]*)\.([^>]*>)/g, "$1_$2"); // replace dots in tags with underscores
var xml = new XML(text);
var metadata = xml..MetadataDC;
var itemType = "Unknown";
if (metadata.length()){
itemType = "document";
if (metadata[0].Type.length()){
var value = metadata[0].Type[0].text().toString();
if(typeMap[value]) {
itemType = typeMap[value];
} else {
Zotero.debug("Unmapped Aluka Type: " + value);
}
}
var newItem = new Zotero.Item(itemType);
var title = "";
if (metadata[0].Title.length()){
var title = Zotero.Utilities.trimInternal(metadata[0].Title[0].text().toString());
if (title == ""){
title = " ";
}
newItem.title = title;
}
if (metadata[0].Title_Alternative.length()){
newItem.extra = Zotero.Utilities.trimInternal(metadata[0].Title_Alternative[0].text().toString());
}
for(var i=0; i<metadata[0].Subject_Enriched.length(); i++) {
newItem.tags.push(Zotero.Utilities.trimInternal(metadata[0].Subject_Enriched[i].text().toString()));
}
for(var i=0; i<metadata[0].Coverage_Spatial.length(); i++) {
newItem.tags.push(Zotero.Utilities.trimInternal(metadata[0].Coverage_Spatial[i].text().toString()));
}
for(var i=0; i<metadata[0].Coverage_Temporal.length(); i++) {
newItem.tags.push(Zotero.Utilities.trimInternal(metadata[0].Coverage_Temporal[i].text().toString()));
}
// TODO: decide whether to uncomment below code to import species data as tags
// for(var i=0; i<xml..TopicName.length(); i++) {
// newItem.tags.push(Zotero.Utilities.trimInternal(xml..TopicName[i].text().toString()));
// }
if (metadata[0].Date.length()){
var date = metadata[0].Date[0].text().toString();
if (date.match(/^\d{8}$/)){
date = date.substr(0, 4) + "-" + date.substr(4, 2) + "-" + date.substr(6, 2);
}
newItem.date = date;
}
if (metadata[0].Creator.length()){
var authors = metadata[0].Creator;
var type = "author";
for(var j=0; j<authors.length(); j++) {
Zotero.debug("author: " + authors[j]);
newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[j].text().toString(),type,true));
}
}
if (metadata[0].Contributor.length()){
var authors = metadata[0].Contributor;
var type = "contributor";
for(var j=0; j<authors.length(); j++) {
Zotero.debug("author: " + authors[j]);
newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[j].text().toString(),type,true));
}
}
if (metadata[0].Publisher.length()){
newItem.publisher = Zotero.Utilities.trimInternal(metadata[0].Publisher[0].text().toString());
}
if (metadata[0].Format_Medium.length()){
newItem.medium = Zotero.Utilities.trimInternal(metadata[0].Format_Medium[0].text().toString());
}
if (metadata[0].Language.length()){
newItem.language = Zotero.Utilities.trimInternal(metadata[0].Language[0].text().toString());
}
if (metadata[0].Description.length()){
newItem.abstractNote = metadata[0].Description[0].text().toString();
}
if (metadata[0].Format_Extent.length()){
newItem.pages = Zotero.Utilities.trimInternal(metadata[0].Format_Extent[0].text().toString());
}
var doi = xml..DOI;
if (doi.length()){
newItem.DOI = doi[0];
var newUrl = "http://www.aluka.org/action/showMetadata?doi=" + doi[0];
newItem.attachments.push({title:"Aluka Link", snapshot:false, mimeType:"text/html", url:newUrl});
var pdfUrl = "http://ts-den.aluka.org/delivery/aluka-contentdelivery/pdf/" + doi[0] + "?type=img&q=high";
newItem.attachments.push({url:pdfUrl});
newItem.url = newUrl;
}
var rights = xml..Rights.Attribution;
if (rights.length()){
newItem.rights = rights[0];
}
if (metadata[0].Rights.length()){
newItem.rights = Zotero.Utilities.trimInternal(metadata[0].Rights[0].text().toString());
}
if (metadata[0].Source.length()){
newItem.repository = "Aluka: " + Zotero.Utilities.trimInternal(metadata[0].Source[0].text().toString());
}
if (metadata[0].Relation.length()){
newItem.callNumber = Zotero.Utilities.trimInternal(metadata[0].Relation[0].text().toString());
}
newItem.complete();
} else {
Zotero.debug("No Dublin Core XML data");
return false;
}
Zotero.done();
});
Zotero.wait();
}

208
translators/Amazon.com.js Normal file
View File

@ -0,0 +1,208 @@
{
"translatorID":"96b9f483-c44d-5784-cdad-ce21b984fe01",
"translatorType":4,
"label":"Amazon.com",
"creator":"Sean Takats and Michael Berkowitz",
"target":"^https?://(?:www\\.)?amazon",
"minVersion":"1.0.0b4.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-08-22 20:30:00"
}
function detectWeb(doc, url) {
var suffixRe = new RegExp("https?://(?:www\.)?amazon\.([^/]+)/");
var suffixMatch = suffixRe.exec(url);
var suffix = suffixMatch[1];
var searchRe = new RegExp('^https?://(?:www\.)?amazon\.' + suffix + '/(gp/search/|exec/obidos/search-handle-url/|s/)');
if(searchRe.test(doc.location.href)) {
return "multiple";
} else {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var xpath = '//input[@name="ASIN"]';
if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var elmt = doc.evaluate('//input[@name="storeID"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
if(elmt) {
var storeID = elmt.value;
Zotero.debug("store id: " + storeID);
if (storeID=="books"){
return "book";
}
else if (storeID=="music"){
return "audioRecording";
}
else if (storeID=="dvd"|storeID=="video"){
return "videoRecording";
}
else {
return "book";
}
}
else {
return "book";
}
}
}
}
function doWeb(doc, url) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var suffixRe = new RegExp("https?://(?:www\.)?amazon\.([^/]+)/");
var suffixMatch = suffixRe.exec(url);
var suffix = suffixMatch[1];
var searchRe = new RegExp('^https?://(?:www\.)?amazon\.' + suffix + '/(gp/search/|exec/obidos/search-handle-url/|s/)');
var m = searchRe.exec(doc.location.href);
var uris = new Array();
if (suffix == "co.jp"){
suffix = "jp";
}
if (suffix == ".com") suffix = "com";
if(m) {
var xpath = '//div[@class="productTitle"]/a | //a[span[@class="srTitle"]]';
var elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
var elmt = elmts.iterateNext();
var asins = new Array();
var availableItems = new Array();
var i = 0;
var asinRe = new RegExp('/(dp|product)/([^/]+)/');
do {
var link = elmt.href;
var searchTitle = elmt.textContent;
if (asinRe.exec(link)) {
var asinMatch = asinRe.exec(link);
availableItems[i] = searchTitle;
asins[i] = asinMatch[2];
i++;
}
} while (elmt = elmts.iterateNext());
var items = Zotero.selectItems(availableItems);
if(!items) {
return true;
}
for(var i in items) {
uris.push("http://ecs.amazonaws." + suffix + "/onca/xml?Service=AWSECommerceService&Version=2006-06-28&Operation=ItemLookup&SubscriptionId=0H174V5J5R5BE02YQN02&ItemId=" + asins[i] + "&ResponseGroup=ItemAttributes");
}
} else {
var elmts = doc.evaluate('//input[@name = "ASIN"]', doc,
nsResolver, XPathResult.ANY_TYPE, null);
var elmt;
while(elmt = elmts.iterateNext()) {
var asin = elmt.value;
}
uris.push("http://ecs.amazonaws." + suffix + "/onca/xml?Service=AWSECommerceService&Version=2006-06-28&Operation=ItemLookup&SubscriptionId=0H174V5J5R5BE02YQN02&ItemId=" + asin + "&ResponseGroup=ItemAttributes");
}
Zotero.Utilities.HTTP.doGet(uris, function(text) {
text = text.replace(/<!DOCTYPE[^>]*>/, "").replace(/<\?xml[^>]*\?>/, "");
var texts = text.split("<Items>");
texts = texts[1].split("</ItemLookupResponse>");
text = "<Items>" + texts[0];
var xml = new XML(text);
var publisher = "";
if (!xml..Errors.length()) {
if (xml..Publisher.length()){
publisher = Zotero.Utilities.cleanString(xml..Publisher[0].text().toString());
}
var binding = "";
if (xml..Binding.length()){
binding = Zotero.Utilities.cleanString(xml..Binding[0].text().toString());
}
var productGroup = "";
if (xml..ProductGroup.length()){
productGroup = Zotero.Utilities.cleanString(xml..ProductGroup[0].text().toString());
}
if (productGroup=="Book") {
var newItem = new Zotero.Item("book");
newItem.publisher = publisher;
}
else if (productGroup == "Music") {
var newItem = new Zotero.Item("audioRecording");
newItem.label = publisher;
newItem.audioRecordingType = binding;
for(var i=0; i<xml..Artist.length(); i++) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(xml..Artist[i].text().toString(), "performer"));
}
}
else if (productGroup == "DVD" | productGroup == "Video") {
var newItem = new Zotero.Item("videoRecording");
newItem.studio = publisher;
newItem.videoRecordingType = binding;
for(var i=0; i<xml..Actor.length(); i++) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(xml..Actor[i].text().toString(), "castMember"));
}
for(var i=0; i<xml..Director.length(); i++) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(xml..Director[i].text().toString(), "director"));
}
}
else{
var newItem = new Zotero.Item("book");
newItem.publisher = publisher;
}
if(xml..RunningTime.length()){
newItem.runningTime = Zotero.Utilities.cleanString(xml..RunningTime[0].text().toString());
}
// Retrieve authors and other creators
for(var i=0; i<xml..Author.length(); i++) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(xml..Author[i].text().toString(), "author"));
}
if (newItem.creators.length == 0){
for(var i=0; i<xml..Creator.length(); i++) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(xml..Creator[i].text().toString()));
}
}
if (xml..PublicationDate.length()){
newItem.date = Zotero.Utilities.cleanString(xml..PublicationDate[0].text().toString());
} else if (xml..ReleaseDate.length()){
newItem.date = Zotero.Utilities.cleanString(xml..ReleaseDate[0].text().toString());
}
if (xml..Edition.length()){
newItem.edition = Zotero.Utilities.cleanString(xml..Edition[0].text().toString());
}
if (xml..ISBN.length()){
newItem.ISBN = Zotero.Utilities.cleanString(xml..ISBN[0].text().toString());
}
// Uncomment when numPages field is added to schema
// if (xml..NumberOfPages.length()){
// newItem.numPages = Zotero.Utilities.cleanString(xml..NumberOfPages[0].text().toString());
// }
var title = Zotero.Utilities.cleanString(xml..Title[0].text().toString());
if(title.lastIndexOf("(") != -1 && title.lastIndexOf(")") == title.length-1) {
title = title.substring(0, title.lastIndexOf("(")-1);
}
if (xml..ASIN.length()){
var url = "http://www.amazon." + suffix + "/dp/" + Zotero.Utilities.cleanString(xml..ASIN[0].text().toString());
newItem.attachments.push({title:"Amazon.com Link", snapshot:false, mimeType:"text/html", url:url});
}
if (xml..OriginalReleaseDate.length()){
newItem.extra = Zotero.Utilities.cleanString(xml..OriginalReleaseDate[0].text().toString());
}
newItem.title = title;
newItem.complete();
}
}, function() {Zotero.done;}, null);
Zotero.wait();
}

View File

@ -0,0 +1,96 @@
{
"translatorID":"75edc5a1-6470-465a-a928-ccb77d95eb72",
"translatorType":4,
"label":"American Institute of Aeronautics and Astronautics",
"creator":"Michael Berkowitz",
"target":"http://www.aiaa.org/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-05-12 19:00:00"
}
function detectWeb(doc, url) {
if (doc.evaluate('//td/div[@class="title"]/b/div[@class="centerHeadlines"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
}
}
function doWeb(doc, url) {
var n = doc.documentElement.namespaceURI;
var ns = n ? function(prefix) {
if (prefix == 'x') return n; else return null;
} : null;
var items = new Object();
var oldItems = doc.evaluate('//table/tbody/tr/td[div[@class="title"]]', doc, ns, XPathResult.ANY_TYPE, null);
var nextItem;
while (nextItem = oldItems.iterateNext()) {
var data = new Object();
data['title'] = Zotero.Utilities.trimInternal(doc.evaluate('./div[@class="title"]//div[@class="centerHeadlines"]', nextItem, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent);
data['pages'] = Zotero.Utilities.trimInternal(doc.evaluate('./div[@class="title"]//div[@class="centerHeadlinesSub2"]', nextItem, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/[\d\w]+\-[\d\w]+/)[0]);
data['authors'] = Zotero.Utilities.trimInternal(doc.evaluate('./ul/i', nextItem, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent);
var extra = Zotero.Utilities.trimInternal(doc.evaluate('./ul', nextItem, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent);
var extra = extra.replace(data['authors'], "");
data['extra'] = Zotero.Utilities.trimInternal(extra);
var pdf = doc.evaluate('.//a', nextItem, ns, XPathResult.ANY_TYPE, null).iterateNext().href;
Zotero.debug(pdf);
data['pdfurl'] = pdf;
items[data['title']] = data;
}
var volume;
var issue;
var date;
if (doc.evaluate('//td[2]/table/tbody/tr/td[1]/strong', doc, ns, XPathResult.ANY_TYPE, null).iterateNext()) {
var voliss = Zotero.Utilities.trimInternal(doc.evaluate('//td[2]/table/tbody/tr/td[1]/strong', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent);
voliss = voliss.match(/(\d+)\s+vol\.\s*(\d+)\s+no\.\s*(\d+)/);
volume = voliss[2];
issue = voliss[3];
date = voliss[1];
} else if (doc.evaluate('//select', doc, ns, XPathResult.ANY_TYPE, null).iterateNext()) {
var voliss = Zotero.Utilities.trimInternal(doc.evaluate('//select[@name="volume"]/option[@selected]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent);
var issue = Zotero.Utilities.trimInternal(doc.evaluate('//select[@name="issue"]/option[@selected]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent);
voliss = voliss.match(/vol\.\s*(\d+)\s*\-\s*(\d+)/);
volume = voliss[1];
date = voliss[2];
}
if (doc.evaluate('//tr[1]/td/b/div[@class="centerHeadlines"]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext()) {
var journal = Zotero.Utilities.trimInternal(doc.evaluate('//tr[1]/td/b/div[@class="centerHeadlines"]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent);
var ISSN = Zotero.Utilities.trimInternal(doc.evaluate('//tr[1]/td/font[@class="centerHeadlinesSub2"]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(/(\(|\))/g, ""));
} else if (doc.evaluate('//div[@class="centerHeadlinesTitle"]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext()) {
var journal = Zotero.Utilities.trimInternal(doc.evaluate('//div[@class="centerHeadlinesTitle"]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent);
var ISSN = Zotero.Utilities.trimInternal(doc.evaluate('//tr/td[1]/table/tbody/tr[2]/td/div', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/ISSN\s*([\d\-]+)/)[1]);
}
var searchItems = new Array();
for (var i in items) {
searchItems.push(i);
}
searchItems = Zotero.selectItems(searchItems);
for (var i in items) {
for each (var title in searchItems) {
if (i == title) {
var data = items[i];
var item = new Zotero.Item("journalArticle");
item.volume = volume;
item.issue = issue;
item.date = date;
item.title = data['title'];
item.pages = data['pages'];
item.publicationTitle = Zotero.Utilities.capitalizeTitle(journal);
item.ISSN = ISSN;
if (data['authors'].match(/\w+/)) {
var authors = data['authors'].split(/(\band\b|,|;)/);
for each (var aut in authors) {
if (aut.match(/\w+/) && aut != "and") {
item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author"));
}
}
}
item.attachments = [{url:data['pdfurl'], title:"AIAA PDF (first page)", mimeType:"application/pdf"}];
item.complete();
}
}
}
}

View File

@ -0,0 +1,235 @@
{
"translatorID":"0dda3f89-15de-4479-987f-cc13f1ba7999",
"translatorType":4,
"label":"Ancestry.com US Federal Census",
"creator":"Elena Razlogova",
"target":"^https?://search.ancestry.com/(.*)usfedcen|1890orgcen|1910uscenindex",
"minVersion":"1.0.0b4.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-03-24 02: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;
var result = doc.evaluate('//div[@class="g_container"]/div[@class="g_panelWrap"]/div[@class="g_panelCore"]/div[@class="s_container"]/div[@class="p_rsltList"]', doc, nsResolver,
XPathResult.ANY_TYPE, null).iterateNext();
var rows = doc.evaluate('//div[@class="g_container"]/div[@class="g_panelWrap"]/div[@class="g_panelCore"]/div[@class="s_container"]/div[@class="p_rsltList"]/table/tbody/tr[@class="tblrow record"]',
doc, nsResolver, XPathResult.ANY_TYPE, null);
var row;
while(row = rows.iterateNext()) {
links = doc.evaluate('.//a', row, nsResolver, XPathResult.ANY_TYPE, null);
var linkNo=0;
while(link=links.iterateNext()) {
linkNo=linkNo+1;
}
break;
}
if(result && linkNo == 2) {
return "multiple";
} else {
var indivRe = /indiv=1/;
var m = indivRe.exec(doc.location.href);
var indiv = 0;
if(m) {
indiv = 1;
}
checkURL = doc.location.href.replace("pf=", "").replace("&h=", "");
if(doc.location.href == checkURL && indiv == 1) {
return "bookSection";
}
}
}
// this US Federal Census scraper is a hack - so far there is no proper item type in Zotero for this kind of data (added to trac as a low priority ticket)
// this scraper creates proper citation for the census as a whole (should be cited as book)
// but also adds name, city, and state for a particular individual to the citation to make scanning for names & places easier in the middle pane
// (that's why the resulting item type is a book section)
// it also adds all searchable text as a snapshot and a scan of the census record as an image
function scrape(doc) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
// get initial census data; a proper census record item type should have separate fields for all of these except perhaps dbid
var info = doc.evaluate('//div[@class="facets"][@id="connect"]/div[@class="g_box"]/p/a',
doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
if(info) {
info = info.toString();
var data = new Array();
var parts = info.split(/[?&]/);
for each(var part in parts) {
var index = part.indexOf("=");
if(index !== -1) {
data[part.substr(0, index)] = part.substr(index+1);
}
}
if(data.ln) {
var lastName = data.ln.replace(/\+/g, " ");
var firstName = data.fn.replace(/\+/g, " ");
} else {
var lastName = data.fn.replace(/\+/g, " ");
var firstName = "";
}
var dOb = data.by; // this does not get saved yet because no field is available; the info is in the snapshot
if(data.rfd) {
var yearRe = /([0-9]{4})/;
var m = yearRe.exec(data.rfd);
if(m) {
var year = m[1];
}
} else { var year = data.ry; }
var state = data.rs.replace(/\+/g, " ");
var county = data.rcnty.replace(/\+/g, " "); // this does not get saved yet because no field is available; the info is in the snapshot
var city = data.rcty.replace(/\+/g, " ");
var dbid = data.dbid;
}
// set census number for citation - let me know if this can be done in a better way
var censusYear = 0;
var censusNo = "";
var censusNos = new Array("1790", "First", "1800", "Second", "1810", "Third", "1820", "Fourth", "1830", "Fifth", "1840", "Sixth", "1850", "Seventh", "1860", "Eighth", "1870", "Ninth",
"1880", "Tenth", "1890", "Eleventh", "1900", "Twelfth", "1910", "Thirteenth", "1920", "Fourteenth", "1930", "Fifteenth")
for(var i in censusNos) {
if(censusYear == 1) { censusNo = censusNos[i] };
if(censusNos[i] == year) { censusYear = 1 } else {censusYear= 0 };
}
//begin adding item
var newItem = new Zotero.Item("bookSection");
newItem.title = city+", "+state; // this is not proper citation but is needed to easily scan for placenames in middle pane
newItem.publicationTitle = censusNo+" Census of the United States, "+year;
newItem.publisher = "National Archives and Records Administration";
newItem.place = "Washington, DC";
newItem.date = year;
// get snapshot with all searchable text and a simplified link to the record for the URL field
var dbRe = /db=([0-9a-z]+)/;
var m = dbRe.exec(doc.location.href);
if(m) {
db = m[1];
}
var snapshotRe = /recid=([0-9]+)/;
var m = snapshotRe.exec(doc.location.href);
if(m) {
snapshotURL = "http://search.ancestry.com/cgi-bin/sse.dll?db="+db+"&indiv=1&pf=1&recid="+m[1];
newItem.attachments.push({title:"Ancestry.com Snapshot", mimeType:"text/html", url:snapshotURL, snapshot:true});
cleanURL = "http://search.ancestry.com/cgi-bin/sse.dll?indiv=1&db="+db+"&recid="+m[1];
newItem.url = cleanURL;
}
// add particular individual being surveyed as contributor - this is not proper citation but is needed so one could easily scan for names in middle pane
var creator = new Array();
creator.firstName = firstName;
creator.lastName = lastName;
creator.creatorType = "author";
newItem.creators.push(creator);
//add proper author for citation
var creator = new Array();
creator.lastName = "United States of America, Bureau of the Census";
creator.creatorType = "contributor";
newItem.creators.push(creator);
// get scan of the census image
var scanInfo = doc.evaluate('//div[@id="record-main"]/table[@class="p_recTable"]/tbody/tr/td[2][@class="recordTN"]/a',
doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
if(scanInfo) {
var scanRe = /iid=([A-Z0-9_-]+)/;
var m = scanRe.exec(scanInfo);
if(m) {
scanURL = "http://content.ancestry.com/Browse/print_u.aspx?dbid="+dbid+"&iid="+m[1];
Zotero.debug("scan url: " + scanURL);
}
}
if(scanURL){
Zotero.Utilities.HTTP.doGet(scanURL, function(text) {
Zotero.debug("running doGet");
Zotero.debug(text);
var imageRe = /950 src="([^"]+)"/;
var m = imageRe.exec(text);
if(m) {
imageURL = m[1];
Zotero.debug("image url: " + imageURL);
newItem.attachments.push({title:"Ancestry.com Image", mimeType:"image/jpeg", url:imageURL, snapshot:true});
}
newItem.complete();
Zotero.done();
});
} else {
newItem.complete();
Zotero.done();
}
}
function doWeb(doc, url) {
var resultsRegexp = /recid=/;
if(resultsRegexp.test(url)) {
scrape(doc);
} else {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
// get census year for links to items
var yearRe = /db=([0-9]+)/;
var m = yearRe.exec(doc.location.href);
if(m) {
year = m[1];
}
var dbRe = /db=([0-9a-z]+)/;
var m = dbRe.exec(doc.location.href);
if(m) {
db = m[1];
}
//select items
var items = new Array();
var listElts = doc.evaluate('//div[@class="g_container"]/div[@class="g_panelWrap"]/div[@class="g_panelCore"]/div[@class="s_container"]/div[@class="p_rsltList"]/table/tbody/tr[@class="tblrowalt record"] | //div[@class="g_container"]/div[@class="g_panelWrap"]/div[@class="g_panelCore"]/div[@class="s_container"]/div[@class="p_rsltList"]/table/tbody/tr[@class="tblrow record"]',
doc, nsResolver, XPathResult.ANY_TYPE, null);
var recid;
var link;
var name;
while (listElt = listElts.iterateNext()) {
recInfo = doc.evaluate('.//a', listElt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
var recidRe = /recid=([0-9]+)/;
var m = recidRe.exec(recInfo);
if(m) {
recid = m[1];
}
link = "http://search.ancestry.com/cgi-bin/sse.dll?indiv=1&db="+db+"&recid="+recid;
name = doc.evaluate('.//span[@class="srchHit"]', listElt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
items[link] = Zotero.Utilities.cleanString(name);
}
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();
}
}

157
translators/Archeion.js Normal file
View File

@ -0,0 +1,157 @@
{
"translatorID":"f6717cbb-2771-4043-bde9-dbae19129bb3",
"translatorType":4,
"label":"Archeion",
"creator":"Adam Crymble",
"target":"http://archeion-aao",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-07-24 05:15:00"
}
function detectWeb(doc, url) {
if (doc.evaluate('//td[@class="full"]/a', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
} else if (doc.evaluate('//div[@class="main"]/h1', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "book";
}
}
//Archeion translator. code by Adam Crymble
//The way the site is formatted, I can't split the creators up logically. I have left them off for now.
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;
newItem = new Zotero.Item("book");
var xPathHeadings = doc.evaluate('//th', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathContent = doc.evaluate('//table[@class="results"]/tbody/tr/td', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathCount = doc.evaluate('count (//th)', doc, nsResolver, XPathResult.ANY_TYPE, null);
var fieldTitle;
var dataTags = new Object();
var multiAuthorCheck = new Array();
for (var i = 0; i < xPathCount.numberValue; i++) {
fieldTitle=xPathHeadings.iterateNext().textContent.replace(/\s+/g, '');
//This was Michael Berkowitz's suggested Fix.
/*var ts = doc.getElementsByTagName(("table"), 1) = ts.length, ar = [];
while ((i--)) {
if (ts[i].className&&ts[i].className.match("results")) {
ar[ar.length] = ts[i].getElementsByTagName("td")[0].split(/\<br\>/);
}
}
Zotero.debug(ar[0][0]); */
//COULDN"T SPLIT BY ("\n") TO SEPARATE MULTIPLE CREATORS.
if (fieldTitle == "Creator:" | fieldTitle == "Créateur:") {
fieldTitle == "Creator:";
var authorContent = xPathContent.iterateNext().textContent;
//Zotero.debug(authorContent);
//if (authorContent.match(' (*) ')) {
// Zotero.debug(doc.title);
//}
//var test = authorContent.split(/\<br\>/);
//Zotero.debug(test);
authors = authorContent.match(/\w+,?\s+[\w\(\)\.]+/g);
//Zotero.debug(authors);
for (i = 0; i < authors.length; i++) {
var author = authors[i].split(", ");
if (author.length < 2) {
dataTags["Creator:"] = author[0];
newItem.creators.push({lastName: dataTags["Creator:"], creatorType: "creator"});
} else {
dataTags["Creator:"] = (author[1] + (" ") + author[0]);
//Zotero.debug(authorArranged);
newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["Creator:"], "creator"));
}
}
} else {
dataTags[fieldTitle] = Zotero.Utilities.cleanTags(xPathContent.iterateNext().textContent);
//Zotero.debug(fieldTitle);
}
}
associateData (newItem, dataTags, "Datesofmaterial:", "date");
associateData (newItem, dataTags, "Repository:", "repository");
associateData (newItem, dataTags, "ReferenceNumber:", "callNumber");
associateData (newItem, dataTags, "PhysicalDescription:", "extra");
associateData (newItem, dataTags, "Scopeandcontent", "abstractNote");
associateData (newItem, dataTags, "Dates:", "date");
associateData (newItem, dataTags, "Centred'archives:", "repository");
associateData (newItem, dataTags, "Numéroderéférence:", "callNumber");
associateData (newItem, dataTags, "Descriptionmatérielle:", "extra");
associateData (newItem, dataTags, "Portéeetcontenu", "abstractNote");
newItem.title = doc.evaluate('//h1', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
newItem.url = doc.location.href;
newItem.complete();
}
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();
var xPathLinks = doc.evaluate('//td[@class="full"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var linksCounter = doc.evaluate('count (//td[@class="full"]/a)', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathTitles = doc.evaluate('//table[@class="results"]/tbody/tr[1]/td', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_link;
for (var i = 0; i < linksCounter.numberValue; i++) {
next_link = xPathLinks.iterateNext().href;
items[next_link] = xPathTitles.iterateNext().textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,75 @@
{
"translatorID":"dedcae51-073c-48fb-85ce-2425e97f128d",
"translatorType":4,
"label":"Archive Ouverte en Sciences de l'Information et de la Communication (AOSIC)",
"creator":"Michael Berkowitz",
"target":"http://archivesic.ccsd.cnrs.fr/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-04-18 08:55:00"
}
function detectWeb(doc, url) {
if (doc.title.toLowerCase().match("fulltext search")) {
return "multiple";
} else if (url.match(/sic_\d+/)) {
return "journalArticle";
}
}
var metaTags = {
"DC.relation":"url",
"DC.date":"date",
"DC.description":"abstractNote",
"DC.creator":"creators",
"DC.title":"title"
}
function doWeb(doc, url) {
var articles = new Array();
if (detectWeb(doc, url) == "multiple") {
var items = Zotero.Utilities.getItemArray(doc, doc, /sic_\d+\/fr\//);
items = Zotero.selectItems(items)
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, function(doc) {
var xpath = '//meta[@name]';
var data = new Object();
var metas = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null);
var meta;
while (meta = metas.iterateNext()) {
if (data[meta.name]) {
data[meta.name] = data[meta.name] + ";" + meta.content;
} else {
data[meta.name] = meta.content;
}
}
Zotero.debug(data);
var item = new Zotero.Item("journalArticle");
for (var tag in metaTags) {
if (tag == "DC.creator") {
var authors = data['DC.creator'].split(";");
for each (var aut in authors) {
aut = aut.replace(/^([^,]+),\s+(.*)$/, "$2 $1");
item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author"));
}
} else {
item[metaTags[tag]] = data[tag];
}
}
var pdfurl = doc.evaluate('//a[contains(@href, ".pdf")]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href.match(/url=([^&]+)&/)[1];
Zotero.debug(pdfurl);
item.attachments = [
{url:item.url, title:"AOSIC Snapshot", mimeType:"text/html"},
{url:pdfurl, title:"AOSIC Full Text PDF", mimeType:"application/pdf"}
];
item.complete();
}, function() {Zotero.done;});
Zotero.wait();
}

View File

@ -0,0 +1,148 @@
{
"translatorID":"d9a16cf3-8b86-4cab-8610-dbd913ad1a44",
"translatorType":4,
"label":"Archives Canada-France",
"creator":"Adam Crymble",
"target":"http://bd.archivescanadafrance.org",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-07-24 05:30:00"
}
function detectWeb(doc, url) {
if (doc.location.href.match("doc.xsp?")) {
return "book";
} else if (doc.evaluate('//li/a', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
} else if (doc.evaluate('//td[1][@class="icones"]/a', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
}
}
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 tagsContent = new Array();
var fieldTitle;
var newItem = new Zotero.Item("book");
var xPathHeaders = '//td[2]/div[@class="ead-c"]/div[@class="ead-did"]/table[@class="ead-did"]/tbody/tr/td[1]';
if (doc.evaluate(xPathHeaders, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var headers = doc.evaluate(xPathHeaders, doc, nsResolver, XPathResult.ANY_TYPE, null);
var contents = doc.evaluate('//td[2][@class="did-content"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
while (fieldTitle = headers.iterateNext()) {
fieldTitle = fieldTitle.textContent.replace(/\s+/g, '');
if (fieldTitle == "Origination" || fieldTitle == "Origine") {
fieldTitle = "Origination";
}
dataTags[fieldTitle] = Zotero.Utilities.cleanTags(contents.iterateNext().textContent.replace(/^\s*|\s*$/g, ''));
}
if (dataTags["Origination"]) {
var author = dataTags["Origination"];
if (!author.match(", ")) {
newItem.creators.push({lastName: author, creatorType: "author"});
} else {
var authors = author.split(", ");
author = authors[1] + " " + authors[0];
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
}
}
}
if (doc.evaluate('//h1[@class="doc-title"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
newItem.title = doc.evaluate('//h1[@class="doc-title"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
} else if (doc.evaluate('//td[2]/div[@class="notice"]/p', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
newItem.title = doc.evaluate('//td[2]/div[@class="notice"]/p', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
} else {
newItem.title = doc.title + " Title Not Found";
}
associateData (newItem, dataTags, "PhysicalDescription", "pages");
associateData (newItem, dataTags, "Descriptionmatérielle", "pages");
associateData (newItem, dataTags, "Repository", "repository");
associateData (newItem, dataTags, "Lieudeconservation", "repository");
associateData (newItem, dataTags, "LanguageoftheMaterial", "language");
associateData (newItem, dataTags, "Langue", "language");
associateData (newItem, dataTags, "Identifier", "callNumber");
associateData (newItem, dataTags, "Cote", "callNumber");
associateData (newItem, dataTags, "Datesextrêmes", "date");
associateData (newItem, dataTags, "Dates", "date");
newItem.url = doc.location.href;
newItem.complete();
}
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 (doc.evaluate('//td[1][@class="icones"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var titles = doc.evaluate('//td[2][@class="ressource"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var titlesCount = doc.evaluate('count (//td[2][@class="ressource"])', doc, nsResolver, XPathResult.ANY_TYPE, null);
var links = doc.evaluate('//td[1][@class="icones"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_link;
for (var i = 0; i < titlesCount.numberValue; i++) {
next_link = links.iterateNext().href;
if (!next_link.match("doc.xsp")) {
next_link = links.iterateNext().href;
}
items[next_link] = titles.iterateNext().textContent;
}
}
if (doc.evaluate('//li/a', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var titles = doc.evaluate('//li/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
items[next_title.href] = next_title.textContent;
}
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else if (doc.evaluate('//div[@class="ancestor"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var link = doc.evaluate('//div[@class="ancestor"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href;
articles = [link];
} else {
articles = [url]
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,126 @@
{
"translatorID":"18bc329c-51af-497e-a7cf-aa572fae363d",
"translatorType":4,
"label":"Archives Canada",
"creator":"Adam Crymble",
"target":"http://(www.)?archivescanada.ca",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-06-20 20:45:00"
}
function detectWeb (doc, url) {
if (doc.location.href.match("RouteRqst")) {
return "multiple";
} else if (doc.location.href.match("ItemDisplay")) {
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 tagsContent = new Array();
var cainNo;
var newItem = new Zotero.Item("book");
var data = doc.evaluate('//td/p', doc, nsResolver, XPathResult.ANY_TYPE, null);
var dataCount = doc.evaluate('count (//td/p)', doc, nsResolver, XPathResult.ANY_TYPE, null);
for (i=0; i<dataCount.numberValue; i++) {
data1 = data.iterateNext().textContent.replace(/^\s*|\s*$/g, '').split(":");
fieldTitle = data1[0].replace(/\s+/g, '');
if (fieldTitle == "PROVENANCE") {
var multiAuthors = data1[1].split(/\n/);
for (var j = 0; j < multiAuthors.length; j++) {
if (multiAuthors[j].match(",")) {
var authorName = multiAuthors[j].replace(/^\s*|\s*$/g, '').split(",");
authorName[0] = authorName[0].replace(/\s+/g, '');
dataTags["PROVENANCE"] = (authorName[1] + (" ") + authorName[0]);
newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["PROVENANCE"], "author"));
} else {
newItem.creators.push({lastName: multiAuthors[j].replace(/^\s*|\s*$/g, ''), creatorType: "creator"});
}
}
} else if (fieldTitle == "SUBJECTS" | fieldTitle == "MATIÈRES") {
tagsContent = data1[1].split(/\n/);
} else {
dataTags[fieldTitle] = data1[1];
}
}
if (doc.evaluate('//tr[3]/td/table/tbody/tr[1]/td/table/tbody/tr[2]/td/table/tbody/tr/td[1]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
cainNo = doc.evaluate('//tr[3]/td/table/tbody/tr[1]/td/table/tbody/tr[2]/td/table/tbody/tr/td[1]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
newItem.extra = cainNo.replace(/^\s*|\s*$/g, '');
}
for (var i = 0; i < tagsContent.length; i++) {
newItem.tags[i] = tagsContent[i].replace(/^\s*|\s*$/g, '');
}
associateData (newItem, dataTags, "TITLE", "title" );
associateData (newItem, dataTags, "REPOSITORY", "repository" );
associateData (newItem, dataTags, "RETRIEVALNUMBER", "callNumber" );
associateData (newItem, dataTags, "DATES", "date" );
associateData (newItem, dataTags, "SCOPEANDCONTENT", "abstractNote" );
associateData (newItem, dataTags, "LANGUAGE", "language" );
associateData (newItem, dataTags, "LANGUE", "language" );
associateData (newItem, dataTags, "TITRE", "title" );
associateData (newItem, dataTags, "CENTRED'ARCHIVES", "repository" );
associateData (newItem, dataTags, "NUMÉROD'EXTRACTION", "callNumber" );
associateData (newItem, dataTags, "PORTÉEETCONTENU", "abstractNote" );
newItem.url = doc.location.href;
newItem.complete();
}
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();
var titles = doc.evaluate('//td[3]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
items[next_title.href] = next_title.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,152 @@
{
"translatorID":"f39dbd1c-229e-4abb-8414-a09fdbda37b7",
"translatorType":4,
"label":"Archives Network of Alberta",
"creator":"Adam Crymble",
"target":"http://208.38.46.62:8080/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-06-29 21:10:00"
}
function detectWeb(doc, url) {
var xPathH3 = doc.evaluate('//h3', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent;
if (xPathH3.match("Search Results")) {
return "multiple";
} else if (xPathH3.match("Display")) {
return "book";
}
}
//Archives Network of Alberta translator. Code by Adam Crymble
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 newItem = new Zotero.Item("book");
var dataTags = new Object();
var manyAuthors = new Array();
var tagsContent = new Array();
var tagsContent1 = new Array();
var xPathHeaders = doc.evaluate('//td[1][@class="datalabel"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathContent = doc.evaluate('//td[2][@class="datatext"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathCount = doc.evaluate('count (//td[1][@class="datalabel"])', doc, nsResolver, XPathResult.ANY_TYPE, null);
for (var i = 0; i < xPathCount.numberValue; i++) {
fieldTitle = xPathHeaders.iterateNext().textContent.replace(/\s+/g, '');
if (fieldTitle =="Provenance:") {
dataTags[fieldTitle] = (xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, ''));
if (dataTags[fieldTitle].match("; ")) {
manyAuthors = dataTags[fieldTitle].split("; ");
} else {
manyAuthors.push(dataTags[fieldTitle]);
}
Zotero.debug(manyAuthors);
for (var j = 0; j < manyAuthors.length; j++) {
if (manyAuthors[j].match(", ")) {
var authorName = manyAuthors[j].split(",");
authorName[0] = authorName[0].replace(/^\s*|\s*$/g, '');
authorName[1] = authorName[1].replace(/^\s*|\s*$/g, '');
newItem.creators.push(Zotero.Utilities.cleanAuthor((authorName[1] + (" ") + authorName[0]), "author"));
} else {
newItem.creators.push({lastName: manyAuthors[j], creatorType: "creator"});
}
}
} else if (fieldTitle == "Partof:") {
dataTags[fieldTitle] = ("Part of " + Zotero.Utilities.cleanTags(xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, '')));
} else if (fieldTitle == "OnlineFindingAid:") {
dataTags[fieldTitle] = ("Online Finding Aid: " + xPathContent.iterateNext().textContent);
Zotero.debug(dataTags["OnlineFindingAid:"]);
} else if (fieldTitle == "Names:") {
dataTags[fieldTitle] = (xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, ''));
tagsContent = dataTags[fieldTitle].split(";");
} else if (fieldTitle == "Topic:") {
dataTags[fieldTitle] = (xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, ''));
tagsContent1 = dataTags[fieldTitle].split(", ");
} else {
dataTags[fieldTitle] = Zotero.Utilities.cleanTags(xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, ''));
}
}
for (i = 0; i < tagsContent.length; i++) {
tagsContent[i] = tagsContent[i].replace(/^\s*|\s*$/g, '');
newItem.tags[i] = tagsContent[i];
}
for (i = 0; i < tagsContent1.length; i++) {
newItem.tags.push(tagsContent1[i]);
}
associateData (newItem, dataTags, "Title:", "title");
associateData (newItem, dataTags, "Dates:", "date");
associateData (newItem, dataTags, "Physicaldesc.:", "pages");
associateData (newItem, dataTags, "Repository:", "repository");
associateData (newItem, dataTags, "Scope/Content:", "abstractNote");
associateData (newItem, dataTags, "Partof:", "series");
associateData (newItem, dataTags, "OnlineFindingAid:", "extra");
associateData (newItem, dataTags, "Language:", "language");
associateData (newItem, dataTags, "RecordNo.:", "callNumber");
newItem.url = doc.location.href;
newItem.complete();
}
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();
var xPathTitles = doc.evaluate('//tr[1]/td[2][@class="datatext"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var nextTitle;
var xPathLinks = doc.evaluate('//td[1][@class="dataleft"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
while (nextTitle = xPathTitles.iterateNext()) {
items[xPathLinks.iterateNext().href] = nextTitle.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,160 @@
{
"translatorID":"661fc39a-2500-4710-8285-2d67ddc00a69",
"translatorType":4,
"label":"Artefacts Canada",
"creator":"Adam Crymble",
"target":"http://daryl.chin.gc.ca",
"minVersion":"1.0",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-09-02 13:55:00"
}
function detectWeb(doc, url) {
var multi1 = '';
var single1 = '';
if (doc.evaluate('//div[@id="mainContent"]/table/tbody/tr/td[1]/h1', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
multi1 = doc.evaluate('//div[@id="mainContent"]/table/tbody/tr/td[1]/h1', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent;
}
var xpath = '//tbody/tr[1]/td[2]/span';
if (doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
single1 = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent;
}
if (multi1.match("Search Results") || multi1.match("Résultats de recherche")) {
return "multiple";
} else if (single1.match("Document") || single1.match("Enregistrement")) {
return "artwork";
}
}
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 tagsContent = new Array();
var fieldTitle;
var newItem = new Zotero.Item("artwork");
var headers = doc.evaluate('//td[1][@class="leftResTitle"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var contents = doc.evaluate('//td[2][@class="pageText"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
while (fieldTitle = headers.iterateNext()) {
fieldTitle = fieldTitle.textContent.replace(/\s+/g, '');
if (fieldTitle == "Titre:") {
fieldTitle = "Title:";
} else if (fieldTitle == "Nomdel'objet:") {
fieldTitle = "NameofObject:";
} else if (fieldTitle == "Sujetouimage:") {
fieldTitle = "Subject/Image:";
} else if (fieldTitle == "Numérod'accession:") {
fieldTitle = "AccessionNumber:";
} else if (fieldTitle == "Artisteouartisan:") {
fieldTitle = "Artist/Maker:";
} else if (fieldTitle == "Fabricant:") {
fieldTitle = "Manufacturer:";
}
dataTags[fieldTitle] = contents.iterateNext().textContent.replace(/^\s*|\s*$/g, '')
}
Zotero.debug(dataTags);
if (dataTags["Artist/Maker:"]) {
if (dataTags["Artist/Maker:"].match(", ")) {
var authors = dataTags["Artist/Maker:"].split(", ");
authors = authors[0] + ' ' + authors[1];
newItem.creators.push(authors, "creator");
} else {
newItem.creators.push(dataTags["Artist/Make:"], "creator");
}
}
if (dataTags["Manufacturer:"]) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["Manufacturer:"], "creator"));
}
if (dataTags["AccessionNumber:"]) {
newItem.locInArchive = "Accession Number: " + dataTags["AccessionNumber:"];
}
if (dataTags["Subject/Image:"]) {
if (dataTags["Subject/Image:"].match(/\n/)) {
var subjects = dataTags["Subject/Image:"].split(/\n/);
for (var i = 0; i < subjects.length; i++) {
newItem.tags[i] = subjects[i];
}
} else {
newItem.tags[0] = dataTags["Subject/Image:"].match(/\n/);
}
}
if (dataTags["Title:"]) {
associateData (newItem, dataTags, "Title:", "title");
associateData (newItem, dataTags, "NameofObject:", "medium");
} else if (dataTags["NameofObject:"]) {
associateData (newItem, dataTags, "NameofObject:", "title");
} else {
newItem.title = "No Title Found";
}
associateData (newItem, dataTags, "LatestProductionDate:", "date");
associateData (newItem, dataTags, "Datedefindeproduction:", "date");
associateData (newItem, dataTags, "Institution:", "repository");
associateData (newItem, dataTags, "Établissement:", "repository");
associateData (newItem, dataTags, "Description:", "description");
associateData (newItem, dataTags, "Medium:", "medium");
associateData (newItem, dataTags, "Médium:", "medium");
newItem.url = doc.location.href;
newItem.complete();
}
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();
var titles = doc.evaluate('//tr[1]/td[2][@class="pageText"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var links = doc.evaluate('//td/a[@class="moreInfoink"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
items[links.iterateNext().href] = next_title.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,80 @@
{
"translatorID":"5ed5ab01-899f-4a3b-a74c-290fb2a1c9a4",
"translatorType":4,
"label":"AustLII and NZLII",
"creator":"Bill McKinney",
"target":"http:\\/\\/www\\.(?:austlii\\.edu\\.au|nzlii\\.org)\\/(?:\\/cgi-bin\\/disp\\.pl\\/)?(?:au|nz)\\/cases\\/.+",
"minVersion":"1.0.0b4.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2007-06-18 18: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;
var austliiRegexp = /^http:\/\/www\.(?:austlii\.edu\.au|nzlii\.org)\/(?:\/cgi-bin\/disp\.pl\/)?(?:au|nz)\/cases\/.+/
if(austliiRegexp.test(url)) {
return "book";
} else {
var aTags = doc.getElementsByTagName("a");
for(var i=0; i<aTags.length; i++) {
if(articleRegexp.test(aTags[i].href)) {
return "multiple";
}
}
}
}
function scrape(doc) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var newItem = new Zotero.Item("case");
newItem.title = doc.title;
newItem.url = doc.location.href;
var titleRegexp = /^(.+)\s+\[(\d+)\]\s+(\w+)\s(\d+)\s+\((\d+)\s+(\w+)\s+(\d+)\)/
var titleMatch = titleRegexp .exec(doc.title);
if (titleMatch ) {
newItem.caseName = titleMatch[1] + " [" + titleMatch[2] + "] " + titleMatch[3] + " " + titleMatch[4];
newItem.dateDecided = titleMatch[7] + " " + titleMatch[6] + " " + titleMatch[5];
newItem.court = titleMatch[3];
} else {
newItem.caseName = doc.title;
newItem.dateDecided = "not found";
}
newItem.complete();
}
function doWeb(doc, url) {
var austliiRegexp = /^http:\/\/www\.(?:austlii\.edu\.au|nzlii\.org)\/(?:\/cgi-bin\/disp\.pl\/)?(?:au|nz)\/cases\/.+/
if(austliiRegexp.test(url)) {
scrape(doc);
} else {
var items = Zotero.Utilities.getItemArray(doc, doc, austliiRegexp);
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();
}
}

View File

@ -0,0 +1,78 @@
{
"translatorID":"0aea3026-a246-4201-a4b5-265f75b9a6a7",
"translatorType":4,
"label":"Australian Dictionary of Biography",
"creator":"Tim Sherratt and Michael Berkowitz",
"target":"http://www.adb.online.anu.edu.au",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-05-30 08:00:00"
}
function detectWeb(doc, url) {
if (url.match(/adbp-ent_search|browse_people|browse_authors/)) {
return "multiple";
} else if (url.match(/biogs\/AS*\d+b.htm/)) {
return "bookSection";
}
}
function doWeb(doc, url) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == "x") return namespace; else return null;
} : null;
if (detectWeb(doc, url) == "multiple") {
var records = new Array();
var items = new Object();
if (url.match(/browse_people/)) {
var titles = doc.evaluate('//ul[@class="pb-results"]/li', doc, nsResolver, XPathResult.ANY_TYPE, null);
var links = doc.evaluate('//ul[@class="pb-results"]/li/a[1]', doc, nsResolver, XPathResult.ANY_TYPE, null);
} else if (url.match(/browse_authors/)) {
var titles = doc.evaluate('//div[@id="content"]/dl/dd', doc, nsResolver, XPathResult.ANY_TYPE, null);
var links = doc.evaluate('//div[@id="content"]/dl/dd/a[1]', doc, nsResolver, XPathResult.ANY_TYPE, null);
} else if (url.match(/adbp-ent_search/)) {
var titles = doc.evaluate('//div[@id="content"]/ol/li', doc, nsResolver, XPathResult.ANY_TYPE, null);
var links = doc.evaluate('//div[@id="content"]/ol/li//a[1]', doc, nsResolver, XPathResult.ANY_TYPE, null);
}
var title;
var link;
while ((link = links.iterateNext()) && (title = titles.iterateNext())) {
items[link.href] = Zotero.Utilities.trimInternal(title.textContent);
}
items = Zotero.selectItems(items);
for (var i in items) {
records.push(i);
}
} else {
records = [url];
}
Zotero.Utilities.processDocuments(records, function(doc) {
var item = new Zotero.Item("bookSection");
var author = Zotero.Utilities.cleanString(doc.evaluate('//div[@id="content"]/p[strong="Author"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().lastChild.textContent);
item.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
item.title = Zotero.Utilities.cleanString(doc.evaluate('//h1', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent);
var pubdetails = Zotero.Utilities.cleanString(doc.evaluate('//div[@id="content"]/p[strong="Print Publication Details"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent);
pubdetails = pubdetails.match(/Volume (\d+), ([\w ]+), (\d{4}), p+\.*\s+([\d-]+)/);
item.volume = RegExp.$1;
item.publisher = RegExp.$2;
item.date = RegExp.$3;
item.pages = RegExp.$4;
item.url = doc.location.href;
item.bookTitle = "Australian Dictionary of Biography";
item.place = "Melbourne";
item.repository = "Australian Dictionary of Biography";
var tags = doc.evaluate('//li/a[starts-with(@title, "find people with the occupation")]', doc, nsResolver, XPathResult.ANY_TYPE, null);
while (tag = tags.iterateNext()) {
item.tags.push(tag.textContent);
}
item.attachments = [
{url:item.url, title: "Snapshot - " + item.title, mimeType:"text/html"},
];
item.complete();
}, function() {Zotero.done;});
}

106
translators/BAILII.js Normal file
View File

@ -0,0 +1,106 @@
{
"translatorID":"5ae63913-669a-4792-9f45-e089a37de9ab",
"translatorType":4,
"label":"BAILII",
"creator":"Bill McKinney",
"target":"http:\\/\\/www\\.bailii\\.org(?:\\/cgi\\-bin\\/markup\\.cgi\\?doc\\=)?\\/\\w+\\/cases\\/.+",
"minVersion":"1.0.0b4.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2007-06-18 18: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;
var liiRegexp= /^http:\/\/www\.bailii\.org(?:\/cgi\-bin\/markup\.cgi\?doc\=)?\/\w+\/cases\/.+/
if(liiRegexp.test(url)) {
return "book";
} else {
var aTags = doc.getElementsByTagName("a");
for(var i=0; i<aTags.length; i++) {
if(articleRegexp.test(aTags[i].href)) {
return "multiple";
}
}
}
}
function scrape(doc) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var newItem = new Zotero.Item("case");
newItem.title = doc.title;
newItem.url = doc.location.href;
var titleRegexp = /^(.+)\s+\[(\d+)\]\s+(.+)\s+\((\d+)\s+(\w+)\s+(\d+)\)/
var titleMatch = titleRegexp .exec(doc.title);
if (titleMatch ) {
newItem.caseName = titleMatch[1] + " [" + titleMatch[2] + "] " + titleMatch[3];
newItem.dateDecided = titleMatch[4] + " " + titleMatch[5] + " " + titleMatch[6];
} else {
newItem.caseName = doc.title;
newItem.dateDecided = "not found";
}
var courtRegexp = /cases\/([^\/]+)\/([^\/]+)\//
var courtMatch = courtRegexp.exec(doc.location.href);
if (courtMatch) {
var divRegexp = /\w+/
var divMatch = divRegexp.exec(courtMatch[2]);
if (divMatch) {
newItem.court = courtMatch[1] + " (" + courtMatch[2] + ")";
} else {
newItem.court = courtMatch[1];
}
} else {
newItem.court = "not found";
}
// judge
var panel = doc.getElementsByTagName("PANEL");
if (panel.length > 0) {
var tmp = panel[0].innerHTML;
newItem.creators.push({lastName:tmp, creatorType:"judge", fieldMode:true});
}
// citation
var cite = doc.getElementsByTagName("CITATION");
if (cite.length > 0) {
var tmpc = cite[0].childNodes[0].innerHTML;
newItem.notes.push({note:tmpc});
}
newItem.complete();
}
function doWeb(doc, url) {
var liiRegexp= /http:\/\/www\.bailii\.org(?:\/cgi\-bin\/markup\.cgi\?doc\=)?\/\w+\/cases\/.+/
if(liiRegexp.test(url)) {
scrape(doc);
} else {
var items = Zotero.Utilities.getItemArray(doc, doc, liiRegexp);
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();
}
}

116
translators/BBC.js Normal file
View File

@ -0,0 +1,116 @@
{
"translatorID":"f4130157-93f7-4493-8f24-a7c85549013d",
"translatorType":4,
"label":"BBC",
"creator":"Ben Parr",
"target":"^https?://(?:www|news?)\\.bbc\\.co.uk",
"minVersion":"1.0.0b4.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2007-08-27 05: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 xpath;
xpath='//meta[@name="Headline"]';
if(content=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext())
{ return "newspaperArticle"; }
xpath='//font[@class="poshead"]/b';
if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext())
{ return "newspaperArticle"; }
return null;
}
function scrape(doc,url,title)
{
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var newItem = new Zotero.Item("newspaperArticle");
newItem.url=url;
newItem.repository="bbc.co.uk";
newItem.publicationTitle="BBC";
newItem.title=title;
xpath='//meta[@name="OriginalPublicationDate"]/@content';
var temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext();
if(temp)
{
temp=temp.value;
temp=temp.split(" ")[0];
newItem.date=temp;
}
else
{
xpath='//font[@class="postxt"][@size="1"]';
var rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null);
var row;
while(row=rows.iterateNext())
{
temp=row.textContent;
if(temp.substr(0,9)=="Created: ")
{
newItem.date=temp.substr(9);
break;
}
}
}
xpath='//meta[@name="Section"]/@content';
temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext();
if(temp)
{ newItem.section=temp.value; }
xpath='//meta[@name="Description"]/@content';
temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext();
if(temp)
{ newItem.abstractNote=temp.value; }
else
{
xpath='//meta[@name="description"]/@content';
temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext();
if(temp)
{ newItem.abstractNote=temp.value; }
}
newItem.attachments.push({url:url, title:"BBC News Snapshot",mimeType:"text/html"});
newItem.complete();
}
function doWeb(doc,url)
{
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var xpath='//meta[@name="Headline"]/@content';
var title;
if(title=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext())
{ scrape(doc,url,title.value) }
else
{
xpath='//font[@class="poshead"]/b';
if(title=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext())
{ scrape(doc,url,title.textContent) }
}
}

View File

@ -0,0 +1,147 @@
{
"translatorID":"c76d6c19-b4c6-4e51-bd7a-0a81752305ae",
"translatorType":4,
"label":"BC Archival Information Network",
"creator":"Adam Crymble",
"target":"http://(mayne.)?aabc.bc.ca/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-06-20 20: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 entryType = (doc.evaluate('/html/body/h3', doc, nsResolver, XPathResult.ANY_TYPE, null));
if (entryType.iterateNext()) {
var entryType1 = entryType.iterateNext().textContent;
if (entryType1.match("Search") && entryType1 != ("Search Results - BCAUL Repositories")) {
return "multiple";
} else if (entryType1.match("Display") && entryType1 != ("Display - BCAUL Repositories") && doc.location.href.match("display")) {
return "book";
}
}
}
//BCAIN translator. Code by Adam Crymble
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 newItem = new Zotero.Item("book");
var dataTags = new Object();
var manyAuthors = new Array();
var tagsContent = new Array();
var xPathHeaders = doc.evaluate('//td[1][@class="datalabel"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathContent = doc.evaluate('//td[2][@class="datatext"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathCount = doc.evaluate('count (//td[1][@class="datalabel"])', doc, nsResolver, XPathResult.ANY_TYPE, null);
Zotero.debug(xPathCount.numberValue);
for (var i = 0; i < xPathCount.numberValue; i++) {
fieldTitle = xPathHeaders.iterateNext().textContent.replace(/\s+/g, '');
if (fieldTitle =="Provenance:") {
dataTags[fieldTitle] = (xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, ''));
if (dataTags[fieldTitle].match("; ")) {
manyAuthors = dataTags[fieldTitle].split("; ");
} else {
manyAuthors.push(dataTags[fieldTitle]);
}
for (var j = 0; j < manyAuthors.length; j++) {
if (manyAuthors[j].match(", ")) {
var authorName = manyAuthors[j].split(",");
authorName[0] = authorName[0].replace(/^\s*|\s*$/g, '');
newItem.creators.push(Zotero.Utilities.cleanAuthor((authorName[1] + (" ") + authorName[0]), "author"));
} else {
newItem.creators.push({lastName: dataTags["Provenance:"], creatorType: "creator"});
}
}
} else if (fieldTitle == "Partof:") {
dataTags[fieldTitle] = ("Part of " + Zotero.Utilities.cleanTags(xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, '')));
} else if (fieldTitle == "OnlineFindingAid:") {
dataTags[fieldTitle] = ("Online Finding Aid: " + xPathContent.iterateNext().textContent);
Zotero.debug(dataTags["OnlineFindingAid:"]);
} else if (fieldTitle == "Names:") {
dataTags[fieldTitle] = (xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, ''));
tagsContent = dataTags[fieldTitle].split(";");
} else {
dataTags[fieldTitle] = Zotero.Utilities.cleanTags(xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, ''));
}
}
for (var i = 0; i < tagsContent.length; i++) {
tagsContent[i] = tagsContent[i].replace(/^\s*|\s*$/g, '');
newItem.tags[i] = tagsContent[i];
}
associateData (newItem, dataTags, "Title:", "title");
associateData (newItem, dataTags, "Dates:", "date");
associateData (newItem, dataTags, "Physicaldesc.:", "pages");
associateData (newItem, dataTags, "Repository:", "repository");
associateData (newItem, dataTags, "Scope/Content:", "abstractNote");
associateData (newItem, dataTags, "Partof:", "series");
associateData (newItem, dataTags, "OnlineFindingAid:", "extra");
newItem.notes.push({title:"Title", note:"To view this entry in your browser, please go to'http://aabc.bc.ca/WWW.aabc.archbc/access' and search for the entry Title "});
newItem.complete();
}
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();
var xPathTitles = doc.evaluate('//tr[1]/td[2][@class="datatext"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var nextTitle;
var xPathLinks = doc.evaluate('//td[1][@class="dataleft"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var nextLink;
while (nextTitle = xPathTitles.iterateNext()) {
items[xPathLinks.iterateNext().href] = nextTitle.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

66
translators/BIBSYS.js Normal file
View File

@ -0,0 +1,66 @@
{
"translatorID":"ab961e61-2a8a-4be1-b8a3-044f20d52d78",
"translatorType":4,
"label":"BIBSYS",
"creator":"Ramesh Srigiriraju",
"target":"^http://ask\\.bibsys\\.no/ask/action",
"minVersion":"1.0.0b4.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2007-07-31 16:45:00"
}
function detectWeb(doc, url) {
var multireg=new RegExp("^http://ask\.bibsys\.no/ask/action/result");
if(multireg.test(url))
return "multiple";
var singlereg=new RegExp("^http://ask\.bibsys\.no/ask/action/show");
if(singlereg.test(url))
return "book";
}
function doWeb(doc, url) {
var namespace=doc.documentElement.namespaceURI;
var nsResolver=namespace?function(prefix) {
return (prefix=="x")?namespace:null;
}:null;
var multireg=new RegExp("http://ask\.bibsys\.no/ask/action/result");
if(multireg.test(url)) {
var titlpath='//tr/td[@width="49%"][@align="left"][@valign="top"]/a/text()';
var titles=doc.evaluate(titlpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
var codepath='//tr/td/input[@type="checkbox"][@name="valg"]/@value';
var codes=doc.evaluate(codepath, doc, nsResolver, XPathResult.ANY_TYPE, null);
var items=new Array();
var title;
titles.iterateNext();
while(title=titles.iterateNext())
items[codes.iterateNext().nodeValue]=title.nodeValue;
items=Zotero.selectItems(items);
var string="http://ask.bibsys.no/ask/action/result?control=ctr_top";
for(var codes in items)
string+="&valg="+codes;
string+="&control=ctr_bottom&eksportFormat=refmanager&eksportEpostAdresse=&eksportEpostFormat=fortekst&cmd=sendtil";
Zotero.Utilities.HTTP.doGet(string, function(text) {
var trans=Zotero.loadTranslator("import");
trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
trans.setString(text);
trans.translate();
Zotero.done();
});
Zotero.wait();
}
var singlereg=new RegExp("http://ask\.bibsys\.no/ask/action/show");
if(singlereg.test(url)) {
var urlstring="http://ask.bibsys.no/ask/action/show";
var data="visningsformat=fortekst_m_eksemplarer&eksportFormat=refmanager&eksportEpostAdresse=&eksportEpostFormat=fortekst&cmd=sendtil";
Zotero.Utilities.HTTP.doPost(urlstring, data, function(text) {
var trans=Zotero.loadTranslator("import");
trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
trans.setString(text);
trans.translate();
Zotero.done();
});
Zotero.wait();
}
}

97
translators/BIUM.js Normal file
View File

@ -0,0 +1,97 @@
{
"translatorID":"cae7d3ec-bc8d-465b-974f-8b0dcfe24290",
"translatorType":4,
"label":"BIUM",
"creator":"Michael Berkowitz",
"target":"http://hip.bium.univ-paris5.fr/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-06-12 19:30:00"
}
function detectWeb(doc, url) {
if (doc.evaluate('//td/a[@class="itemTitle"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
} else if (doc.evaluate('//td[1]/span[@class="uportal-channel-strong"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "book";
}
}
function makeMARCurl(link, rsId, rrsId, query) {
return 'http://hip.bium.univ-paris5.fr/uPortal/Print?link=' + link + '&xslFileName=com/dynix/hip/uportal/channels/standard/FullMarc.xsl&F=/searching/getmarcdata&responseSessionId=' + rsId + '&responseResultSetId=' + rrsId + '&searchGroup=BIUM-13&query=' + query + '&searchTargets=16&locale=fr_FR';
}
function doWeb(doc, url) {
var n = doc.documentElement.namespaceURI;
var ns = n ? function(prefix) {
if (prefix == 'x') return n; else return null;
} : null;
var books = new Array();
if (detectWeb(doc, url) == "multiple") {
var items = new Object();
var links = doc.evaluate('//a[@class="itemTitle"]', doc, ns, XPathResult.ANY_TYPE, null);
var link;
while (link = links.iterateNext()) {
items[link.href] = Zotero.Utilities.trimInternal(link.textContent);
}
items = Zotero.selectItems(items);
var rsId = doc.evaluate('//input[@name="responseSessionId"]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().value;
var rrsId = doc.evaluate('//input[@name="responseResultSetId"]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().value;
var query = doc.evaluate('//input[@name="query"]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().value;
var linkRE = new RegExp("'([^']+)'", "g");
for (var i in items) {
var link = linkRE.exec(i)[1];
Zotero.debug(link);
books.push(makeMARCurl(link, rsId, rrsId, query));
}
} else {
var link = url.match(/link=([^&]+)/)[1];
var rsId = url.match(/responseSessionId=([^&]+)/)[1];
var rrsId = url.match(/responseResultSetId=([^&]+)/)[1];
var query = url.match(/query=([^&]+)/)[1];
books = [makeMARCurl(link, rsId, rrsId, query)];
}
var translator = Zotero.loadTranslator("import");
translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973");
var marc = translator.getTranslatorObject();
Zotero.Utilities.processDocuments(books, function(doc) {
var rows = doc.evaluate('//center/table/tbody/tr', doc, ns, XPathResult.ANY_TYPE, null);
var row;
var record = new marc.record();
while (row = rows.iterateNext()) {
var field = Zotero.Utilities.trimInternal(doc.evaluate('./td[1]', row, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(":", ""));
if (field) {
var value = doc.evaluate('./td[2]', row, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent;
if (value.split(/\n/)[1]) value = Zotero.Utilities.trimInternal(value.split(/\n/)[1]);
if (field == "LDR") {
record.leader = value;
} else if (field != "FMT") {
value = value.replace(/\¤([a-z])/g, marc.subfieldDelimiter+ "$1");
var code = field.substring(0, 3);
var ind = "";
if (field.length > 3) {
ind = field[3];
if (field.length > 4) {
ind += field[4];
}
}
record.addField(code, ind, value);
}
}
}
var item = new Zotero.Item();
record.translate(item);
var oldauthors = item.creators;
var newauthors = new Array();
for each (var aut in oldauthors) {
if (aut.lastName.match(/^[A-Z][^\s]+\s[^\s]+/)) newauthors.push(Zotero.Utilities.cleanAuthor(aut.lastName.match(/^[A-Z][^\s]+\s[^\s]+/)[0].replace(/^([^\s]+)\s+(.*)$/, "$2 $1"), "author"));
}
item.creators = newauthors;
item.complete();
}, function() {Zotero.done;});
Zotero.wait();
}

View File

@ -0,0 +1,84 @@
{
"translatorID":"2a5dc3ed-ee5e-4bfb-baad-36ae007e40ce",
"translatorType":4,
"label":"Berkeley Electronic Press",
"creator":"Michael Berkowitz",
"target":"http://www.bepress.com/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-04-01 04:50:00"
}
function detectWeb(doc, url) {
if (url.match("cgi/query.cgi")) {
return "multiple";
} else if (url.match(/vol[\d+]\/iss[\d]+/)) {
return "journalArticle";
}
}
var tagMap = {
journal_title:"publicationTitle",
title:"title",
date:"date",
volume:"volume",
issue:"issue",
abstract_html_url:"url",
doi:"DOI"
}
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();
var titles = doc.evaluate('//table[@id="query"]/tbody/tr/td[4]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
items[next_title.href] = next_title.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.debug(articles);
Zotero.Utilities.processDocuments(articles, function(newDoc) {
var metatags = new Object();
var metas = newDoc.evaluate('//meta[contains(@name, "bepress_citation")]', newDoc, null, XPathResult.ANY_TYPE, null);
var next_meta;
while (next_meta = metas.iterateNext()) {
metatags[next_meta.name.replace("bepress_citation_", "")] = next_meta.content;
}
var item = new Zotero.Item("journalArticle");
//regularly mapped tags
for (var tag in tagMap) {
if (metatags[tag]) {
item[tagMap[tag]] = metatags[tag];
}
}
//authors
var authors = metatags['authors'].split(";");
for each (var author in authors) {
item.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
}
//attachments
item.attachments = [
{url:item.url, title:item.title, mimeType:"text/html"},
{url:metatags['pdf_url'], title:"Berkeley Electronic Press Full Text PDF", mimeType:"application/pdf"}
];
item.complete();
}, function() {Zotero.done;});
Zotero.wait();
}

View File

@ -0,0 +1,95 @@
{
"translatorID":"9c335444-a562-4f88-b291-607e8f46a9bb",
"translatorType":4,
"label":"Berkeley Library Catalog",
"creator":"Simon Kornblith",
"target":"^https?://[^/]*berkeley.edu[^/]*/WebZ/(?:html/results.html|FETCH)\\?.*sessionid=",
"minVersion":"1.0.0b3.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-07-02 11:00:00"
}
function detectWeb(doc, url) {
var resultsRegexp = /\/WebZ\/html\/results.html/i
if(resultsRegexp.test(url)) {
return "multiple";
} else {
return "book";
}
}
function reformURL(url) {
return url.replace(/fmtclass=[^&]*/, "")+":fmtclass=marc";
}
function doWeb(doc, url) {
var resultsRegexp = /\/WebZ\/html\/results.html/i
if(resultsRegexp.test(url)) {
var items = Zotero.Utilities.getItemArray(doc, doc, "/WebZ/FETCH", "^[0-9]*$");
items = Zotero.selectItems(items);
if(!items) {
return true;
}
var urls = new Array();
for(var i in items) {
urls.push(reformURL(i));
}
} else {
var urls = [reformURL(url)];
}
var translator = Zotero.loadTranslator("import");
translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973");
var marc = translator.getTranslatorObject();
Zotero.Utilities.processDocuments(urls, function(newDoc) {
var uri = newDoc.location.href;
var namespace = newDoc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var elmts = newDoc.evaluate('//table/tbody/tr[@valign="top"]',
newDoc, nsResolver, XPathResult.ANY_TYPE, null);
var record = new marc.record();
while(elmt = elmts.iterateNext()) {
var field = Zotero.Utilities.superCleanString(newDoc.evaluate('./TD[1]/text()[1]', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue);
var value = newDoc.evaluate('./TD[2]/text()[1]', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue;
// remove spacing
value = value.replace(/^\s+/, "");
value = value.replace(/\s+$/, "");
if(field == 0) {
record.leader = "00000"+value;
} else {
var ind = value[3]+value[5];
if (value.match(/^\d{1,2}\s{3}/)) value = Zotero.Utilities.cleanString(value.replace(/^\d{1,2}\s{3}/, ""));
value = value.replace(/\$([a-z0-9]) /g, marc.subfieldDelimiter+"$1");
if(value[0] != marc.subfieldDelimiter) {
value = marc.subfieldDelimiter+"a"+value;
}
record.addField(field, ind, value);
}
}
var newItem = new Zotero.Item();
record.translate(newItem);
var oldTags = newItem.tags;
var newTags = new Array();
for each (var tag in oldTags) {
if (newTags.indexOf(tag) == -1) newTags.push(tag)
}
newItem.tags = newTags;
newItem.repository = "Berkeley Library Catalog";
newItem.complete();
}, function() { Zotero.done(); }, null);
Zotero.wait();
}

1993
translators/BibTeX.js Normal file

File diff suppressed because it is too large Load Diff

125
translators/Biblio.com.js Normal file
View File

@ -0,0 +1,125 @@
{
"translatorID":"9932d1a7-cc6d-4d83-8462-8f6658b13dc0",
"translatorType":4,
"label":"Biblio.com",
"creator":"Adam Crymble and Michael Berkowitz",
"target":"http://www.biblio.com/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-07-07 14:50:00"
}
function detectWeb(doc, url) {
if (doc.location.href.match("bookseller_search") || doc.location.href.match("bookstores") || doc.location.href.match("textbooks")) {
} else if (doc.location.href.match("search")) {
return "multiple";
} else if (doc.location.href.match("books")) {
return "book";
}
}
//Biblio.com translator. Code by Adam Crymble.
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 contents = new Array();
var multiAuthors = new Array();
var fieldTitle;
var author1;
var newItem = new Zotero.Item("book");
var content = doc.evaluate('//div[@class="smalltext1"][@id="infobox"]/ul/li', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathCount = doc.evaluate('count (//div[@class="smalltext1"][@id="infobox"]/ul/li)', doc, nsResolver, XPathResult.ANY_TYPE, null);
for (i=0; i<xPathCount.numberValue; i++) {
contents = content.iterateNext().textContent.split(": ");
fieldTitle = contents[0].replace(/\s*/g, '');
dataTags[fieldTitle] = contents[1].replace(/^\s*|\s*$/g, '');
}
//Authors
if (doc.evaluate('//td[2]/h3', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var authors = doc.evaluate('//td[2]/h3', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
if (authors.match(/\w/)) {
if (authors.match(/^ by/)) {
authors = authors.substr(4);
if (authors.match(/;/)) {
multiAuthors = authors.split(";");
Zotero.debug(multiAuthors);
for each (var aut in multiAuthors) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(aut, "author", true));
}
} else {
newItem.creators.push(Zotero.Utilities.cleanAuthor(authors, "author", true));
}
} else {
newItem.creators.push(Zotero.Utilities.cleanAuthor(authors, "author"));
}
}
}
//extra
if (dataTags["Quantityavailable"]) {
newItem.extra = "Quantity Available: " + dataTags["Quantityavailable"];
}
associateData (newItem, dataTags, "Publisher", "publisher");
associateData (newItem, dataTags, "Place", "place");
associateData (newItem, dataTags, "Datepublished", "date");
associateData (newItem, dataTags, "ISBN10", "ISBN");
associateData (newItem, dataTags, "ISBN13", "ISBN");
associateData (newItem, dataTags, "Pages", "pages");
associateData (newItem, dataTags, "Edition", "edition");
newItem.title = doc.evaluate('//tbody/tr[1]/td[2]/h1', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(/^\s*|\s&+/g, '');
newItem.url = doc.location.href;
newItem.complete();
}
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();
var titles = doc.evaluate('//table[@class="search-result"]/tbody/tr/td[2]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
if (next_title.textContent.match(/\w/)) {
items[next_title.href] = next_title.textContent;
}
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,234 @@
{
"translatorID":"39ea814e-8fdb-486c-a88d-59479f341066",
"translatorType":4,
"label":"Bibliotheque UQAM",
"creator":"Adam Crymble",
"target":"http://www.manitou.uqam.ca",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-07-24 05:15:00"
}
function detectWeb(doc, url) {
if (doc.evaluate('//center/table/tbody/tr[1]/td/input', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
} else if (doc.title.match("détails")) {
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 newItem = new Zotero.Item("book");
var dataTags = new Object();
var tagsContent = new Array();
var contents;
var newItemAuthors1 = new Array();
var newItemAuthors2 = new Array();
var xPathHeadings = doc.evaluate('//p/table/tbody/tr/td[1]/b', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathContents = doc.evaluate('//p/table/tbody/tr/td[2]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathCount = doc.evaluate('count (//p/table/tbody/tr/td[1]/b)', doc, nsResolver, XPathResult.ANY_TYPE, null);
var dump = xPathHeadings.iterateNext();
for (i=0; i<xPathCount.numberValue-1; i++) {
fieldTitle=xPathHeadings.iterateNext().textContent.replace(/\s+/g, '');
contents = xPathContents.iterateNext().textContent;
if (fieldTitle == "Titres:") {
fieldTitle = "Titre:";
}
//determines media type
if (fieldTitle == "Titre:") {
dataTags[fieldTitle] = contents.replace(/^\s*|\s*$/g, '');
if (contents.match("enregistrement sonore")) {
var newItem = new Zotero.Item("audioRecording");
} else if (contents.match("musique")) {
var newItem = new Zotero.Item("audioRecording");
} else if (contents.match("enregistrement vidéo")) {
var newItem = new Zotero.Item("videoRecording");
} else {
var newItem = new Zotero.Item("book");
}
}
//gets author(s).
if (fieldTitle == "Auteur:") {
fieldTitle = "author";
dataTags[fieldTitle] = contents;
if (dataTags[fieldTitle].match(",")) {
var authorName = dataTags["author"].split(",");
authorName[0] = authorName[0].replace(/^\s*|\s*$/g, '');
dataTags["author"] = (authorName[1] + (" ") + authorName[0]);
} else {
var parenthesis = dataTags["author"].indexOf("(");
if (parenthesis > 0) {
dataTags["author"] = dataTags["author"].substr(0, parenthesis);
}
dataTags["author"] = dataTags["author"].replace(/^\s*|\s*$/g, '');
}
} else if (fieldTitle == "Auteurs:") {
dataTags[fieldTitle] = contents;
var multiAuthors = dataTags["Auteurs:"].split(/\n/);
for (var j = 0; j < multiAuthors.length; j++) {
var parenthesis = multiAuthors[j].indexOf("(");
if (parenthesis > 0) {
multiAuthors[j] = multiAuthors[j].substr(0, parenthesis);
}
if (multiAuthors[j] != "" && multiAuthors[j] != ' ') {
if (multiAuthors[j].match(", ")) {
var authorName = multiAuthors[j].split(",");
newItemAuthors1.push(authorName[1] + (" ") + authorName[0]);
} else {
newItemAuthors2.push(multiAuthors[j]);
}
}
}
} else if (fieldTitle == "Éditeur:") {
dataTags[fieldTitle] = contents;
var imprintSplit = dataTags["Éditeur:"].split(": ");
if (imprintSplit.length > 1) {
newItem.place = imprintSplit[0].replace(/^\s*|\s*$/g, '');
var publisherDate = imprintSplit[1].split(", ");
newItem.publisher = publisherDate[0].replace(/^\s*|\s*$/g, '');
if (publisherDate.length > 1) {
newItem.date = publisherDate[1].replace(/^\s*|\s*$/g, '');
}
} else {
newItem.publisher = dataTags["Éditeur:"];
}
} else if (fieldTitle == "Sujet:") {
dataTags[fieldTitle] = contents;
if (dataTags["Sujet:"].match("\n")) {
tagsContent = (dataTags["Sujet:"].split(/\n/));
}
} else {
dataTags[fieldTitle] = contents.replace(/^\s*|\s*$/g, '');
}
}
//pushes tags
for (var y = 0; y < tagsContent.length; y++) {
if (tagsContent[y]!='' && tagsContent[y]!= " ") {
var parenthesis = tagsContent[y].indexOf("(");
if (parenthesis > 0) {
tagsContent[y] = tagsContent[y].substr(0, parenthesis);
}
newItem.tags[y] = tagsContent[y];
}
}
//because newItem is not defined until after the authors have, authors must be put into Zotero outside the main for loop.
if (dataTags["author"]) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["author"], "author"));
}
for (var i = 0; i < newItemAuthors1.length; i++) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(newItemAuthors1[i], "author"));
}
for (var i = 0; i < newItemAuthors2.length; i++) {
newItem.creators.push({lastName: newItemAuthors2[i], creatorType: "creator"});
}
//trims title as best as possible
if (dataTags["Titre:"].match(/\[/)) {
var splitter = dataTags["Titre:"].indexOf("[");
}
if (dataTags["Titre:"].match("/")) {
var splitter1 = dataTags["Titre:"].indexOf("/");
}
if (splitter1 > -1 && splitter > -1) {
if (splitter1 > splitter) {
dataTags["Titre:"] = dataTags["Titre:"].substr(0, splitter);
} else {
dataTags["Titre:"] = dataTags["Titre:"].substr(0, splitter1);
}
} else if (splitter1 > -1) {
dataTags["Titre:"] = dataTags["Titre:"].substr(0, splitter1);
} else if (splitter > -1) {
dataTags["Titre:"] = dataTags["Titre:"].substr(0, splitter);
}
associateData (newItem, dataTags, "Titre:", "title");
associateData (newItem, dataTags, "Numéro:", "ISBN");
associateData (newItem, dataTags, "Description:", "pages");
associateData (newItem, dataTags, "Banque:", "repository");
associateData (newItem, dataTags, "Langue:", "language");
associateData (newItem, dataTags, "Localisation:", "Loc. in Archive");
newItem.url = doc.location.href;
newItem.complete();
}
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();
var titles = doc.evaluate('/html/body/table/tbody/tr/td/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
for (var i = 0; i < 4; i++) {
var dump = titles.iterateNext();
}
var next_title;
while (next_title = titles.iterateNext()) {
items[next_title.href] = next_title.textContent;
Zotero.debug(next_title.href);
Zotero.debug(next_title.textContent);
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,151 @@
{
"translatorID":"1eb5eb03-26ab-4015-bd0d-65487734744a",
"translatorType":4,
"label":"Bibliotheque et Archives Nationale du Quebec (Pistard)",
"creator":"Adam Crymble",
"target":"http://pistard.banq.qc.ca",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-08-06 17:00:00"
}
function detectWeb (doc, url) {
if (doc.title.match("Liste détaillée des fonds")) {
return "multiple";
} else if (doc.title.match("Description fonds")) {
return "book";
}
}
//Bibliotheque et Archives National du Quebec. Code by Adam Crymble
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 tagsContent= new Array();
var newItem = new Zotero.Item("book");
var headers = doc.evaluate('//strong', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathCount = doc.evaluate('count (//strong)', doc, nsResolver, XPathResult.ANY_TYPE, null);
var contents = doc.evaluate('//div[@id="Content"]/div/table', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
var headersArray = new Array();
var oneHeader = '';
if (xPathCount.numberValue > 1) {
for (var i = 0; i < xPathCount.numberValue; i++) {
fieldTitle = headers.iterateNext().textContent;
headersArray.push(fieldTitle);
}
} else {
oneHeader = (headers.iterateNext().textContent);
}
var contentsArray = new Array();
var j = 0;
if (oneHeader.length<1) {
for (var i = headersArray.length-1; i> -1; i--) {
var fieldIndex = contents.indexOf(headersArray[i]);
var removeHeader = headersArray[i].length;
contentsArray.push(contents.substr(fieldIndex));
contents = contents.substr(0, fieldIndex);
fieldTitle = headersArray[i].replace(/\s+/g, '');
dataTags[fieldTitle] = contentsArray[j].substr(removeHeader).replace(/^\s*|\s+$/g, '');
j++;
}
}
Zotero.debug(dataTags);
if (dataTags["Titre,Dates,Quantité"]) {
if (dataTags["Titre,Dates,Quantité"].match(/\n/)) {
var splitTitle = dataTags["Titre,Dates,Quantité"].split(/\n/);
if (splitTitle[0].match(/\w/)) {
newItem.title = splitTitle[0].replace(/^\s*|\s+$/g, '');
}
for (var i = 0; i < splitTitle.length; i++) {
if (splitTitle[i].match("/ ")) {
var author = splitTitle[i].replace(/^\s*|\s+$/g, '').substr(2);
newItem.creators.push({lastName: author, creatorType: "creator"});
}
}
}
} else {
newItem.title = doc.title;
}
var k = 0;
if (dataTags["Termesrattachés"]) {
if (dataTags["Termesrattachés"].match(/\n/)) {
tagsContent = dataTags["Termesrattachés"].split(/\n/);
for (var i in tagsContent) {
if (tagsContent[i].match(/\w/)) {
newItem.tags[k] = tagsContent[i].replace(/^\s+|\s*$/g, '');
k++;
}
}
} else {
newItem.tags[0] = dataTags["Termesrattachés"];
}
}
associateData (newItem, dataTags, "Languedesdocuments", "language");
associateData (newItem, dataTags, "Cote:", "callNumber");
associateData (newItem, dataTags, "Collation", "pages");
associateData (newItem, dataTags, "Centre:", "place");
associateData (newItem, dataTags, "Portéeetcontenu", "abstractNote");
newItem.url = doc.location.href;
newItem.complete();
}
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();
var titles = doc.evaluate('//td[2]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
if (next_title.href.match("description_fonds")) {
items[next_title.href] = next_title.textContent;
}
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,264 @@
{
"translatorID":"59cce211-9d77-4cdd-876d-6229ea20367f",
"translatorType":4,
"label":"Bibliothèque et Archives nationales du Québec",
"creator":"Adam Crymble",
"target":"http://catalogue.banq.qc.ca",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-06-12 19:30:00"
}
function detectWeb(doc, url) {
if (doc.title.match("Search")) {
return "multiple";
} else if (doc.title.match("Recherche")) {
return "multiple";
} else if (doc.evaluate('//td[2]/a/img', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("book")) {
return "book";
} else if (doc.evaluate('//td[2]/a/img', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("mmusic")) {
return "book";
} else if (doc.evaluate('//td[2]/a/img', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("manalytic")) {
return "book";
} else if (doc.evaluate('//td[2]/a/img', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("msdisc")) {
return "audioRecording";
} else if (doc.evaluate('//td[2]/a/img', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("msound")) {
return "audioRecording";
} else if (doc.evaluate('//td[2]/a/img', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("mscas")) {
return "audioRecording";
} else if (doc.evaluate('//td[2]/a/img', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("mvdisc")) {
return "videoRecording";
} else if (doc.evaluate('//td[2]/a/img', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("mpaint")) {
return "artwork";
} else if (doc.evaluate('//td[2]/a/img', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("mserial")) {
return "report";
} else if (doc.evaluate('//td[2]/a/img', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("mcomponent")) {
return "newspaperArticle";
}
}
//Bibliotheque et Archives National du Quebec. Code by Adam Crymble
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 contents;
var descriptionField;
var tagsContent= new Array();
var inField = 0;
//determines media type
if (detectWeb(doc, url) == "book") {
var newItem = new Zotero.Item("book");
descriptionField = "pages";
} else if (detectWeb(doc, url) == "audioRecording") {
var newItem = new Zotero.Item("audioRecording");
descriptionField = "runningTime";
} else if (detectWeb(doc, url) == "videoRecording") {
var newItem = new Zotero.Item("videoRecording");
descriptionField = "runningTime";
} else if (detectWeb(doc, url) == "artwork") {
var newItem = new Zotero.Item("artwork");
descriptionField = "artworkSize";
} else if (detectWeb(doc, url) == "report") {
var newItem = new Zotero.Item("report");
descriptionField = "pages";
} else if (detectWeb(doc, url) == "newspaperArticle") {
var newItem = new Zotero.Item("newspaperArticle");
descriptionField = "pages"
}
//determines language
var lang = doc.evaluate('//td[2]/a/img', doc, nsResolver, XPathResult.ANY_TYPE, null);
var langCount = doc.evaluate('count (//td[2]/a/img)', doc, nsResolver, XPathResult.ANY_TYPE, null);
var lang1 = lang.iterateNext().src;
if (langCount.numberValue > 1) {
lang1 = lang.iterateNext().src;
if (lang1.match("lfre")) {
newItem.language = "French";
} else if (lang1.match("leng")) {
newItem.language = "English";
}
}
//scraping XPaths
var xPathHeadings = doc.evaluate('//td/table/tbody/tr/td[2]/b', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathContents = doc.evaluate('//td[2]/table/tbody/tr/td/table/tbody/tr/td[4]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathCount = doc.evaluate('count (//td/table/tbody/tr/td[2]/b)', doc, nsResolver, XPathResult.ANY_TYPE, null);
if (doc.evaluate('//td/table/tbody/tr/td[2]/b', doc, nsResolver, XPathResult.ANY_TYPE, null)) {
for (i=0; i<xPathCount.numberValue; i++) {
fieldTitle = xPathHeadings.iterateNext().textContent.replace(/\s+/g, '');
contents = xPathContents.iterateNext().textContent;
if (contents.match("[*]") && fieldTitle!= "Publisher" && fieldTitle!= "Éditeur") {
var removeTagExcess = contents.indexOf("[");
contents = contents.substr(0, removeTagExcess);
}
if (fieldTitle == "Author" | fieldTitle == "Auteur") {
fieldTitle = "Author";
dataTags[fieldTitle] = (contents);
var authorName = dataTags["Author"].split(",");
authorName[0] = authorName[0].replace(/\s+/g, '');
dataTags["Author"] = (authorName[1] + (" ") + authorName[0]);
newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["Author"], "author"));
//publishing info
} else if (fieldTitle == "Publisher" | fieldTitle == "Éditeur") {
fieldTitle = "Publisher";
dataTags["Publisher"] = (contents);
if (dataTags["Publisher"].match(":")) {
var place1 = dataTags["Publisher"].split(":");
dataTags["Place"] = place1[0].replace(/^\s*|\[|\]/g,'');
var publish = place1[1].split(",");
dataTags["Publish"] = (publish[0].replace(/^\s*|\[|\]/g,''));
place1[1] = place1[1].replace(/^\s*|\s*$|\[|\]/g, '');
if (place1[1].match("/?")) {
var dateLength = place1[1].length-5;
} else {
var dateLength = place1[1].length-4;
}
dataTags["Date"] = place1[1].substr(dateLength);
} else {
dataTags["Date"] = (contents);
}
//tags
} else if (fieldTitle == "Subjects" | fieldTitle == "Sujets") {
fieldTitle = "Subjects";
tagsContent = contents.split("\n");
//source
} else if (fieldTitle == "Source") {
dataTags[fieldTitle] = (contents.replace(/^\s*|\s*$/g, ''));
dataTags["Source"] = ("Source: " + dataTags["Source"]);
Zotero.debug(doc.title);
//normal
} else {
dataTags[fieldTitle] = (contents.replace(/^\s*|\s*$/g, ''));
}
}
//series
if (fieldTitle == "Series" | fieldTitle == "Collection") {
fieldTitle = "Series";
dataTags[fieldTitle] = (contents.replace(/\s\s\s*/g, ''));
}
//makes tags
for (i = 0; i < tagsContent.length; i++) {
if (tagsContent[i] != ("") && tagsContent[i] !=(" ")) {
newItem.tags[i] = tagsContent[i];
}
}
associateData (newItem, dataTags, "Description", descriptionField);
associateData (newItem, dataTags, "Title", "title");
associateData (newItem, dataTags, "Place", "place");
associateData (newItem, dataTags, "Publish", "publisher");
associateData (newItem, dataTags, "Date", "date");
associateData (newItem, dataTags, "Source", "extra");
associateData (newItem, dataTags, "ISBN", "ISBN");
associateData (newItem, dataTags, "Localinf.", "rights");
associateData (newItem, dataTags, "Series", "series");
associateData (newItem, dataTags, "Notes", "abstractNote");
associateData (newItem, dataTags, "Numbering", "reportNumber");
associateData (newItem, dataTags, "Titre", "title");
associateData (newItem, dataTags, "Numérotation", "reportNumber");
}
newItem.url = doc.location.href;
newItem.complete();
}
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();
var next_title = new Array();
var links1 = new Array();
var y = 0;
var next_title1 = new Array();
var titlesCount = doc.evaluate('count (//p/table/tbody/tr/td/b)', doc, nsResolver, XPathResult.ANY_TYPE, null);
var numAndTitle= doc.evaluate('//p/table/tbody/tr/td/b', doc, nsResolver, XPathResult.ANY_TYPE, null);
var links = doc.evaluate('//p/table/tbody/tr/td/a[img]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var multipleTest = 0;
for (j=0; j < titlesCount.numberValue; j++) {
next_title[j] = numAndTitle.iterateNext().textContent;
next_title[j] = next_title[j].substr(0, next_title[j].length-1);
if (/^\d*$/.test(next_title[j])) {
multipleTest = 0;
} else if (multipleTest < 1) {
multipleTest++;
next_title1[y] = next_title[j];
y++;
Zotero.debug(next_title1[0]);
} else if (multipleTest > 1) {
multipleTest = 0;
}
}
for (j = 0; j < 10; j++) {
links1[j] = links.iterateNext().href;
//Zotero.debug(links1[0]);
items[links1] = next_title1[j];
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

121
translators/BioInfoBank.js Normal file
View File

@ -0,0 +1,121 @@
{
"translatorID":"4c9dbe33-e64f-4536-a02f-f347fa1f187d",
"translatorType":4,
"label":"BioInfoBank",
"creator":"Michael Berkowitz",
"target":"http://lib.bioinfo.pl/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-04-03 19:45:00"
}
function detectWeb(doc, url) {
return "multiple";
}
function doWeb(doc, url) {
var pmids = new Array();
var items = new Object();
var titles = doc.evaluate('//div[@class="css_pmid"]/div[@class="css_pmid_title"]/a', doc, null, XPathResult.ANY_TYPE, null);
var title;
while (title = titles.iterateNext()) {
items[title.href] = Zotero.Utilities.trimInternal(title.textContent);
}
items = Zotero.selectItems(items);
for (var i in items) {
pmids.push(i.match(/pmid:(\d+)/)[1]);
}
var newUri = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=PubMed&retmode=xml&rettype=citation&id="+pmids.join(",");
Zotero.Utilities.HTTP.doGet(newUri, function(text) {
// Remove xml parse instruction and doctype
text = text.replace(/<!DOCTYPE[^>]*>/, "").replace(/<\?xml[^>]*\?>/, "");
var xml = new XML(text);
for(var i=0; i<xml.PubmedArticle.length(); i++) {
var newItem = new Zotero.Item("journalArticle");
var citation = xml.PubmedArticle[i].MedlineCitation;
var PMID = citation.PMID.text().toString();
newItem.extra = "PMID: "+PMID;
// add attachments
if(doc) {
newItem.attachments.push({document:doc, title:"PubMed Snapshot"});
} else {
var url = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=AbstractPlus&list_uids="+PMID;
newItem.attachments.push({url:url, title:"PubMed Snapshot",
mimeType:"text/html"});
}
var article = citation.Article;
if(article.ArticleTitle.length()) {
var title = article.ArticleTitle.text().toString();
if(title.substr(-1) == ".") {
title = title.substring(0, title.length-1);
}
newItem.title = title;
}
if (article.Pagination.MedlinePgn.length()){
newItem.pages = article.Pagination.MedlinePgn.text().toString();
}
if(article.Journal.length()) {
var issn = article.Journal.ISSN.text().toString();
if(issn) {
newItem.ISSN = issn.replace(/[^0-9]/g, "");
}
newItem.journalAbbreviation = Zotero.Utilities.superCleanString(citation.MedlineJournalInfo.MedlineTA.text().toString());
if(article.Journal.Title.length()) {
newItem.publicationTitle = Zotero.Utilities.superCleanString(article.Journal.Title.text().toString());
} else if(citation.MedlineJournalInfo.MedlineTA.length()) {
newItem.publicationTitle = newItem.journalAbbreviation;
}
if(article.Journal.JournalIssue.length()) {
newItem.volume = article.Journal.JournalIssue.Volume.text().toString();
newItem.issue = article.Journal.JournalIssue.Issue.text().toString();
if(article.Journal.JournalIssue.PubDate.length()) { // try to get the date
if(article.Journal.JournalIssue.PubDate.Day.text().toString() != "") {
newItem.date = article.Journal.JournalIssue.PubDate.Month.text().toString()+" "+article.Journal.JournalIssue.PubDate.Day.text().toString()+", "+article.Journal.JournalIssue.PubDate.Year.text().toString();
} else if(article.Journal.JournalIssue.PubDate.Month.text().toString() != "") {
newItem.date = article.Journal.JournalIssue.PubDate.Month.text().toString()+" "+article.Journal.JournalIssue.PubDate.Year.text().toString();
} else if(article.Journal.JournalIssue.PubDate.Year.text().toString() != "") {
newItem.date = article.Journal.JournalIssue.PubDate.Year.text().toString();
}
}
}
}
if(article.AuthorList.length() && article.AuthorList.Author.length()) {
var authors = article.AuthorList.Author;
for(var j=0; j<authors.length(); j++) {
var lastName = authors[j].LastName.text().toString();
var firstName = authors[j].FirstName.text().toString();
if(firstName == "") {
var firstName = authors[j].ForeName.text().toString();
}
if(firstName || lastName) {
newItem.creators.push({lastName:lastName, firstName:firstName});
}
}
}
if (citation.MeshHeadingList && citation.MeshHeadingList.MeshHeading) {
var keywords = citation.MeshHeadingList.MeshHeading;
for (var k = 0 ; k < keywords.length() ; k++) {
newItem.tags.push(keywords[k].DescriptorName.text().toString());
}
}
newItem.abstractNote = article.Abstract.AbstractText.toString()
newItem.complete();
}
Zotero.done();
});
}

View File

@ -0,0 +1,140 @@
{
"translatorID":"1a3e63b2-0adf-4c8e-928b-c58c2594b45d",
"translatorType":4,
"label":"BioMed Central and More",
"creator":"Ben Parr",
"target":"http://[^/]*(jcmr-online|respiratory-research|bio-diglib|nuclear-receptor|medimmunol|kinetoplastids|filariajournal|cellandchromosome|actavetscand|aidsrestherapy|almob|ann-clinmicrob|annals-general-psychiatry|asir-journal|arthritis-research|apfmj|anzhealthpolicy|behavioralandbrainfunctions|biodatamining|biology-direct|biomagres|biomedical-engineering-online|bpsmedicine|biotechnologyforbiofuels|biomedcentral|breast-cancer-research|cancerci|cbmjournal|cardiab|cardiovascularultrasound|casesjournal|lipidsignaling.cbdjournals|biosignaling|celldiv|cerebrospinalfluidresearch|journal.chemistrycentral|capmh|cmjournal|chiroandosteo|clinicalmolecularallergy|cpementalhealth|comparative-hepatology|conflictandhealth|resource-allocation|coughjournal|ccforum|cytojournal|diagnosticpathology|dynamic-med|ete-online|ehjournal|epi-perspectives|epigeneticsandchromatin|fibrogenesis|frontiersinzoology|gvt-journal|genomebiology|genomemedicine|geochemicaltransactions|globalizationandhealth|gutpathogens|harmreductionjournal|head-face-med|hqlo|health-policy-systems|human-resources-health|immunityageing|immunome-research|implementationscience|infectagentscancer|intarchmed|internationalbreastfeedingjournal|equityhealthj|ijbnpa|ij-healthgeographics|ijmhs|issoonline|jautoimdis|jbioleng|jbiol|j-biomed-discovery|jbppni|carcinogenesis|cardiothoracicsurgery|jcmr-online|jcircadianrhythms|ethnobiomed|jexpclinassistreprod|jeccr|jfootankleres|jhoonline|jibtherapies|journal-inflammation|jmedicalcasereports|jmolecularsignaling|jnanobiotechnology|jnrbm|jneuroengrehab|jneuroinflammation|occup-med|josr-online|jissn|translational-medicine|traumamanagement|lipidworld|malariajournal|microbialcellfactories|molecularbrain|molecular-cancer|molecularcytogenetics|molecularneurodegeneration|molecularpain|neuraldevelopment|nonlinearbiomedphys|nutritionandmetabolism|nutritionj|ojrd|om-pc|parasitesandvectors|particleandfibretoxicology|pathogeneticsjournal|pssjournal|ped-rheum|peh-med|plantmethods|pophealthmetrics|proteomesci|ro-journal|rbej|reproductive-health-journal|respiratory-research|retrovirology|salinesystems|the-scientist|scoliosisjournal|scfbm|substanceabusepolicy|tbiomed|thrombosisjournal|thyroidresearchjournal|tobaccoinduceddiseases|trialsjournal|urooncologyjournal|virologyj|wjes|wjso)\\.(com|org|net)",
"minVersion":"1.0.0b4.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-07-15 19: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='//meta[@name="citation_fulltext_html_url"]';
//Single
if (doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext())
{return "journalArticle";}
//Multiple
xpath='//a[@class="hiddenlink"][span[@class="xcitationtitle"][b]]';
xpath+=' | //span[@class="xcitationtitle2"]/a[@class="hiddenlink"]';
xpath+=' | //div[@class="bodytext"]/a[@class="hiddenlink"][font/b]';
xpath+=' | //p[@class="bodytext"]/a[@class="hiddenblack"][b]';
xpath+=' | //div[@class="bodytext"]/a[@class="hiddenblack"][b]';
xpath+=' | //div[@class="bodytext"]/a[@class="hiddenlink"][font/b]';
var rows=doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
var row;
var link;
while(row=rows.iterateNext())
{
link=row.href;
if(link.indexOf("pubmed")<0 && link.substr(link.length-4)!=".pdf" && link.indexOf("blogs.")<0)
{return "multiple";}
}
}
function parseRIS(getURL)
{
Zotero.Utilities.HTTP.doGet(getURL, function(text){
// load translator for RIS
var translator = Zotero.loadTranslator ("import");
translator.setHandler("itemDone", function(obj, newItem) {
var doi = newItem.DOI;
var splitURL = newItem.url.split('/');
if(splitURL.length>=3 && doi){
var doiSuffix = doi.slice(doi.indexOf('/')+1);
var pdfURL = splitURL[0] + '/' + splitURL[1] + '/' + splitURL[2];
pdfURL += '/content/pdf/' + doiSuffix + '.pdf';
var source = splitURL[2].replace(/^www./i,'').replace(/\.[\w]+$/i,'');
newItem.attachments = [
//{url:newItem.url+'/abstract', title:source + " Abstract Snapshot", mimeType:"text/html"},
{url:newItem.url, title:source + " Snapshot", mimeType:"text/html"},
{url:pdfURL, title:source + " PDF", mimeType:"application/pdf"}
];
}
newItem.complete();
});
translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
translator.setString(text);
translator.translate();
Zotero.done();
}, function() {});
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;
var xpath='//meta[@name="citation_fulltext_html_url"]/@content';
var rows;
var row=doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
if (row)
{
//Single Article
var url=row.textContent+"/citation/";
Zotero.Utilities.HTTP.doPost(url, 'include=cit&format=refman&direct=on&submit=Download+references&action=submit', function(text)
{parseRIS(url+'?include=cit&format=refman&direct=on&submit=Download+references&action=submit');});
Zotero.wait();
return true;
}
//Multiple
xpath='//a[@class="hiddenlink"][span[@class="xcitationtitle"][b]]';
xpath+=' | //span[@class="xcitationtitle2"]/a[@class="hiddenlink"]';
xpath+=' | //div[@class="bodytext"]/a[@class="hiddenlink"][font/b]';
xpath+=' | //p[@class="bodytext"]/a[@class="hiddenblack"][b]';
xpath+=' | //div[@class="bodytext"]/a[@class="hiddenblack"][b]';
xpath+=' | //div[@class="bodytext"]/a[@class="hiddenlink"][font/b]';
rows=doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
var items=new Array();
var link;
var t;
while(row=rows.iterateNext())
{
link=row.href;
if(link.indexOf("pubmed")<0 && link.substr(link.length-4)!=".pdf" && link.indexOf("blogs.")<0)
{
t=link.split('/');
if(t[t.length-1].indexOf("comments#")>-1)
{link=t.slice(0,t.length-1).join('/');}
items[link.replace("/abstract","")+"/citation"]=row.textContent;
}
}
items = Zotero.selectItems(items);
var uris=new Array();
if (!items)
{return true;}
for (var i in items)
{uris.push(i);}
Zotero.Utilities.HTTP.doPost(uris, "include=cit&format=refman&direct=on&submit=Download+references&action=submit", function(text)
{
for (var j = 0 ; j < uris.length ; j++)
{parseRIS(uris[j] + "?include=cit&format=refman&direct=on&submit=Download+references&action=submit");}
});
Zotero.wait();
}

66
translators/BioOne.js Normal file
View File

@ -0,0 +1,66 @@
{
"translatorID":"7cb0089b-9551-44b2-abca-eb03cbf586d9",
"translatorType":4,
"label":"BioOne",
"creator":"Michael Berkowitz",
"target":"http://[^/]*www.bioone.org[^/]*/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-08-04 07:10:00"
}
function detectWeb(doc, url) {
if (url.indexOf("searchtype") != -1) {
return "multiple";
} else if (url.indexOf("get-document") != -1 || url.indexOf("get-abstract") != -1) {
return "journalArticle";
}
}
function createCitationURL(str) {
str = str.match(/doi=([^&]+)/)[1];
return "http://www.bioone.org/perlserv/?request=cite-builder&doi=" + str;
}
function doWeb(doc, url) {
var host = doc.location.host;
var articles = new Array();
if (detectWeb(doc, url) == "multiple") {
var items = new Object();
var results = doc.evaluate('//div[@class="content"]/table/tbody/tr/td[3][@class="group"]', doc, null, XPathResult.ANY_TYPE, null);
var next_result;
while (next_result = results.iterateNext()) {
var title = doc.evaluate('.//span[@class="title"]', next_result, null, XPathResult.ANY_TYPE, null).iterateNext().textContent;
var link = doc.evaluate('.//tr[4]/td/a[1]', next_result, null, XPathResult.ANY_TYPE, null).iterateNext().href;
items[link] = title;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(createCitationURL(i));
}
} else {
articles = [createCitationURL(url)];
}
Zotero.Utilities.processDocuments(articles, function(newDoc) {
var newlink = newDoc.evaluate('//a[contains(@href, "refman")]', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().href;
Zotero.Utilities.HTTP.doGet(newlink, 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 = decodeURIComponent(item.url);
item.DOI = item.url.match(/http:\/\/dx\.doi\.org\/(.*)$/)[1];
var pdfurl = 'http://' + host + '/perlserv/?request=get-pdf&doi=' + item.DOI;
item.attachments = [
{url:item.url, title:item.title, mimeType:"text/html"},
{url:pdfurl, title:"BioOne Full Text PDF", mimeType:"application/pdf"}
];
item.complete();
});
translator.translate();
});
}, function() {Zotero.done;});
Zotero.wait();
}

View File

@ -0,0 +1,68 @@
{
"translatorID":"60d97c99-47f0-4323-98b6-5699faf827b1",
"translatorType":4,
"label":"Blackwell Compass",
"creator":"Michael Berkowitz",
"target":"http://www.blackwell-compass.com/subject/[^/]+/.+",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-01-09 20:00:00"
}
function detectWeb(doc, url) {
if (url.indexOf("search_results") != -1 || url.indexOf("section_home") != -1) {
return "multiple";
} else {
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 URIs = new Array();
var items = new Object();
if (detectWeb(doc, url) == "multiple") {
var xpath = '//div[@class="article-holder"]//h4[@class="article"]/a';
var articles = doc.evaluate(xpath, doc, namespace, XPathResult.ANY_TYPE, null);
var next_art = articles.iterateNext();
while (next_art) {
items[next_art.href] = next_art.textContent;
next_art = articles.iterateNext();
}
items = Zotero.selectItems(items);
for (var i in items) {
URIs.push(i);
}
} else {
URIs.push(url);
}
Zotero.Utilities.processDocuments(URIs, function(doc, urll) {
var doi = doc.evaluate('//div[@id="content"]/p/span[@class="guide"]/a[substring(@href, 1, 4) = "http"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href.match(/doi\/[^/]*\/([^&]*)/)[1];
Zotero.Utilities.HTTP.doGet('http://www.blackwell-synergy.com/action/downloadCitation?doi=' + doi + '&include=cit&format=refman&direct=on&submit=Download+references', function(text) {
var translator = Zotero.loadTranslator("import");
translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
translator.setString(text);
translator.setHandler("itemDone", function(obj, item) {
item.attachments = [
{url:item.url, title:"Blackwell Compass Snapshot", mimeType:"text/html"},
{url:item.url.replace("/doi/abs", "/doi/pdf"), title:"Blackwell Compass Full Text PDF", mimeType:"application/pdf"}
];
item.complete();
});
translator.translate();
});
}, function() {Zotero.done;});
Zotero.wait();
}

View File

@ -0,0 +1,91 @@
{
"translatorID":"cb48083-4d9-4ed-ac95-2e93dceea0ec",
"translatorType":4,
"label":"Blackwell Synergy",
"creator":"Michael Berkowitz",
"target":"https?://www\\.blackwell-synergy\\.com[^/]*/(?:action/doSearch|doi/|links/doi/)",
"minVersion":"1.0.0b3.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-04-28 17:50:00"
}
function detectWeb(doc, url) {
if(url.indexOf("doSearch") != -1) {
return "multiple";
} else {
return "journalArticle";
}
}
function titleCase(str) {
var skipWords = ["but", "or", "yet", "so", "for", "and", "nor", "a", "an", "the", "at", "by", "from", "in", "into", "of", "on", "to", "with", "up", "down", "as"];
var words = str.toLowerCase().split(/\s+/);
var newstr = "";
for each (var word in words) {
if (skipWords.indexOf(word.replace(/[^a-zA-Z]+/, "")) != -1) {
newstr += " " + word;
} else if (word.indexOf("-") != -1) {
newword = word.split("-");
newstr += " " + newword[0][0].toUpperCase() + newword[0].substr(1) + "-" + newword[1][0].toUpperCase() + newword[1].substr(1);
} else {
newstr += " " + word[0].toUpperCase() + word.substr(1);
}
}
return Zotero.Utilities.trimInternal(newstr);
}
function doWeb(doc, url) {
var host = doc.location.host;
var articles = new Array();
if (detectWeb(doc, url) == "multiple") {
var items = new Object();
var rows = doc.evaluate('//div[@class="toc_item"]', doc, null, XPathResult.ANY_TYPE, null);
var row;
while (row = rows.iterateNext()) {
var title = Zotero.Utilities.trimInternal(doc.evaluate('.//label', row, null, XPathResult.ANY_TYPE, null).iterateNext().textContent);
var id = doc.evaluate('.//input[@name="doi"]', row, null, XPathResult.ANY_TYPE, null).iterateNext().value;
items[id] = title;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [decodeURIComponent(url).match(/doi\/(abs\/)?([^\?]+)(\?|$)/)[2]];
}
var post = "";
for each (var doi in articles) {
post += "doi=" + encodeURIComponent(doi) + "&"
}
post += "include=abs&format=refman&submit=Download+references";
Zotero.Utilities.HTTP.doPost('http://www.blackwell-synergy.com/action/downloadCitation', post, function(text) {
text = text.replace(/(Y1\s+\-\s+)(\d{4}\/\d{2}).*\n/, "$1$2\n");
var translator = Zotero.loadTranslator("import");
translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
translator.setString(text);
translator.setHandler("itemDone", function(obj, item) {
item.DOI = Zotero.Utilities.trimInternal(item.notes[0]['note'].substr(4));
item.notes = new Array();
item.attachments = [
{url:item.url, title:"Blackwell Synergy Snapshot", mimeType:"text/html"},
{url:item.url.replace(/\/\/[^/]*/, "//" + host).replace("/doi/abs", "/doi/pdf"), title:"Blackwell Synergy Full Text PDF", mimeType:"application/pdf"}
];
// use fulltext if possible
var oldCreators = item.creators;
item.creators = []
for each (var author in oldCreators) {
if (author["lastName"] != "") {
item.creators.push({firstName:titleCase(author.firstName), lastName:titleCase(author.lastName), creatorType:"author"});
}
}
item.title = titleCase(item.title);
item.complete();
});
translator.translate();
Zotero.done();
});
}

127
translators/Blogger.js Normal file
View File

@ -0,0 +1,127 @@
{
"translatorID":"6f9aa90d-6631-4459-81ef-a0758d2e3921",
"translatorType":4,
"label":"Blogger",
"creator":"Adam Crymble",
"target":"blogspot.com",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-07-24 05:15:00"
}
function detectWeb(doc, url) {
if (doc.evaluate('//h3[@class="post-title entry-title"]/a', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
var entryCount = doc.evaluate('count (//h3[@class="post-title entry-title"]/a)', doc, null, XPathResult.ANY_TYPE, null);
}
if (entryCount.numberValue == 1) {
return "blogPost";
} else if (entryCount.numberValue > 1) {
return "multiple";
}
}
//Blogger translator. Code by Adam Crymble
function scrape(doc, url) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var tagsContent = new Array();
var newItem = new Zotero.Item("blogPost");
//title
if (doc.evaluate('//h3[@class="post-title entry-title"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
newItem.title = doc.evaluate('//h3[@class="post-title entry-title"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
} else {
newItem.title = doc.title;
}
//author, if available
if (doc.evaluate('//span[@class="post-author vcard"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var author = doc.evaluate('//span[@class="post-author vcard"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(/^\s*|\s*$/g, '');
var author = author.toLowerCase();
if (author.match(/\sby\s/)) {
var shortenAuthor = author.indexOf(" by");
author = author.substr(shortenAuthor + 3).replace(/^\s*|\s$/g, '');
}
var words = author.split(/\s/);
for (var i in words) {
words[i] = words[i][0].toUpperCase() + words[i].substr(1).toLowerCase();
}
author = words.join(" ");
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
}
//date, if available
if (doc.evaluate('//h2[@class="date-header"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
newItem.date = doc.evaluate('//h2[@class="date-header"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
}
//tags, if available
if (doc.evaluate('//span[@class="post-labels"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var tags = doc.evaluate('//span[@class="post-labels"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var tags1;
while (tags1 = tags.iterateNext()) {
tagsContent.push(tags1.textContent);
}
for (var i = 0; i < tagsContent.length; i++) {
newItem.tags[i] = tagsContent[i];
}
}
var blogTitle1 = doc.title.split(":");
newItem.blogTitle = blogTitle1[0];
newItem.url = doc.location.href;
newItem.complete();
}
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();
var titles = doc.evaluate('//h3[@class="post-title entry-title"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var titles1 = doc.evaluate('//li[@class="archivedate expanded"]/ul[@class="posts"]/li/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
items[next_title.href] = next_title.textContent;
}
while (next_title = titles1.iterateNext()) {
items[next_title.href] = next_title.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,171 @@
{
"translatorID":"f9373e49-e6ac-46f7-aafe-bb24a2fbc3f0",
"translatorType":4,
"label":"Bracero History Archive",
"creator":"Adam Crymble",
"target":"http://braceroarchive.org",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-09-02 13:40:00"
}
function detectWeb(doc, url) {
if (doc.title.match("Item")) {
return "book";
} else if (doc.evaluate('//div[@class="item-meta"]/h2/a', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
}
}
//Bracero History Archive translator; Code by Adam Crymble
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 contents1;
var headers = doc.evaluate('//h3', doc, nsResolver, XPathResult.ANY_TYPE, null);
var contents = doc.evaluate('//div[@class="field"]/div', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathCount = doc.evaluate('count (//div[@class="field"]/div)', doc, nsResolver, XPathResult.ANY_TYPE, null);
for (i=0; i<xPathCount.numberValue -1; i++) {
fieldTitle = headers.iterateNext().textContent.replace(/\s+/g, '');
contents1 = contents.iterateNext().textContent.replace(/^\s*|\s*$/g, '');
if (contents1.match("Empty")) {
contents1 = '';
}
dataTags[fieldTitle] = Zotero.Utilities.cleanTags(contents1);
}
//media type?
if (dataTags["TypeName"]) {
if (dataTags["TypeName"].match("Oral History")) {
Zotero.debug(doc.title);
var newItem = new Zotero.Item("audioRecording");
} else {
var newItem = new Zotero.Item("book");
}
} else {
var newItem = new Zotero.Item("book");
}
//creators
if (dataTags["Interviewee"] && dataTags["Interviewee"] != '') {
if (dataTags["Interviewee"].match(", ")) {
var authors = dataTags["Interviewee"].split(", ");
authors = authors[1] + ' ' + authors[0];
newItem.creators.push(Zotero.Utilities.cleanAuthor(authors, "interviewee"));
} else {
newItem.creators.push({lastName: dataTags["Interviewee"], creatorType: "interviewee"});
}
}
if (dataTags["Interviewer"] && dataTags["Interviewer"] != '') {
if (dataTags["Interviewer"].match(", ")) {
var authors = dataTags["Interviewer"].split(", ");
authors = authors[1] + ' ' + authors[0];
newItem.creators.push(Zotero.Utilities.cleanAuthor(authors, "interviewer"));
} else {
newItem.creators.push({lastName: dataTags["Interviewee"], creatorType: "interviewer"});
}
}
if (dataTags["Creator"] && dataTags["Creator"] != '') {
if (dataTags["Creator"].match(", ")) {
var authors = dataTags["Creator"].split(", ");
authors = authors[1] + ' ' + authors[0];
newItem.creators.push(Zotero.Utilities.cleanAuthor(authors, "creator"));
} else {
newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["Creator"], "creator"));
}
}
if (dataTags["AdditionalCreator"] && dataTags["AdditionalCreator"] != '') {
if (dataTags["AdditionalCreator"].match(", ")) {
var authors = dataTags["AdditionalCreator"].split(", ");
authors = authors[1] + ' ' + authors[0];
newItem.creators.push(Zotero.Utilities.cleanAuthor(authors, "creator"));
} else {
newItem.creators.push({lastName: dataTags["AdditionalCreator"], creatorType: "creator"});
}
}
//associate
associateData (newItem, dataTags, "Description", "abstractNote");
associateData (newItem, dataTags, "Date", "date");
associateData (newItem, dataTags, "Publisher", "publisher");
associateData (newItem, dataTags, "Source", "place");
associateData (newItem, dataTags, "Location", "place");
associateData (newItem, dataTags, "RightsHolder", "rights");
associateData (newItem, dataTags, "Language", "lang");
associateData (newItem, dataTags, "Title:", "title");
associateData (newItem, dataTags, "FileNameIdentifier", "callNumber");
//tags
var tags1;
var tagsContent = new Array();
if (doc.evaluate('//li[@class="tag"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var xPathTags = doc.evaluate('//li[@class="tag"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
while (tags1 = xPathTags.iterateNext()) {
tagsContent.push(tags1.textContent);
}
}
for (var i = 0; i < tagsContent.length; i++) {
newItem.tags[i] = tagsContent[i];
}
//title
newItem.title = doc.evaluate('//h1', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
newItem.url = doc.location.href;
newItem.complete();
}
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();
var fullRecord = "view=full";
var extraChar = "?";
if (detectWeb(doc, url) == "multiple") {
var items = new Object();
var titles = doc.evaluate('//div[@class="item-meta"]/h2/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
items[next_title.href + extraChar + fullRecord] = next_title.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,85 @@
{
"translatorID":"635c1246-e0c8-40a0-8799-a73a0b013ad8",
"translatorType":4,
"label":"Bryn Mawr Classical Review",
"creator":"Michael Berkowitz",
"target":"http://ccat.sas.upenn.edu/bmcr/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-05-09 23:15:00"
}
function detectWeb(doc, url) {
if (url.match(/by_reviewer/) || url.match(/by_author/) || url.match(/recent.html/) || url.match(/\/\d{4}\/$/)) {
return "multiple";
} else if (url.match(/[\d\-]+\.html$/)) {
return "journalArticle";
}
}
function doWeb(doc, url) {
var ns = doc.documentElement.namespaceURI;
var nsResolver = ns ? function(prefix) {
if (prefix == 'x') return ns; else return null;
} : null;
var arts = new Array();
if (detectWeb(doc, url) == "multiple") {
var items = new Object();
if (doc.evaluate('//table/tbody/tr/td/ul/li/i', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var boxes = doc.evaluate('//table/tbody/tr/td/ul/li', doc, nsResolver, XPathResult.ANY_TYPE, null);
var box;
while (box = boxes.iterateNext()) {
var link = doc.evaluate('./a', box, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href;
var title = doc.evaluate('./i', box, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
items[link] = title;
}
} else if (doc.evaluate('//table/tbody/tr/td/ul/li', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var title = doc.evaluate('//table/tbody/tr/td/ul/li', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next;
while (next = title.iterateNext()) {
items[next.href] = Zotero.Utilities.trimInternal(next.textContent);
}
} else if (url.match(/google\.com/)) {
var titles = doc.evaluate('//h2[@class="r"]/a[@class="l"]', 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 item = new Zotero.Item("journalArticle");
var title = doc.evaluate('//h3/i', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
item.title = "Review of: " + Zotero.Utilities.trimInternal(title);
var data = doc.evaluate('//h3[i]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
var title = title.replace("(", "\\(").replace(")", "\\)");
var author = doc.evaluate('//b[contains(text(), "Reviewed")]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/Reviewed by\s+([^,]+),/)[1];
item.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
var splitRe = new RegExp(title);
var authors = data.split(splitRe)[0].replace(/\([^)]+\)/, "").split(/(,|and)\s+/);
Zotero.debug(authors);
Zotero.debug(authors);
for each (var aut in authors) {
if (aut.match(/\w/) && (aut != "and")) {
item.creators.push(Zotero.Utilities.cleanAuthor(aut, "reviewedAuthor"));
}
}
item.url = doc.location.href;
item.attachments = [{url:item.url, title:item.title, mimeType:"text/html"}];
if (doc.evaluate('/html/body/center/table/tbody/tr/td/center/table/tbody/tr/td/center/font', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
item.date = Zotero.Utilities.trimInternal(doc.evaluate('/html/body/center/table/tbody/tr/td/center/table/tbody/tr/td/center/font', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace("Bryn Mawr Classical Review ", "").replace(/\./g, "/"));
} else {
item.date = Zotero.Utilities.trimInternal(doc.evaluate('/html/body/h3', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace("Bryn Mawr Classical Review ", "").replace(/\./g, "/"))
}
item.complete();
}, function() {Zotero.done;});
Zotero.wait();
}

View File

@ -0,0 +1,67 @@
{
"translatorID":"e8d40f4b-c4c9-41ca-a59f-cf4deb3d3dc5",
"translatorType":4,
"label":"Business Standard",
"creator":"Prashant Iyengar and Michael Berkowitz",
"target":"http://www.business-standard.com",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-05-08 20:30:00"
}
function detectWeb(doc, url) {
if (url.match(/googlesearch/)) {
return "multiple";
} else if (url.match(/common/)) {
return "newspaperArticle";
}
}
function doWeb(doc, url) {
var arts = new Array();
if (detectWeb(doc, url) == "multiple") {
var links = doc.evaluate('//a[@class="NewsHead"]', doc, null, XPathResult.ANY_TYPE, null);
var link;
var items = new Object();
while (link = links.iterateNext()) {
items[link.href] = Zotero.Utilities.cleanTags(link.textContent);
}
items = Zotero.selectItems(items);
for (var i in items) {
arts.push(i);
}
} else {
arts = [url];
}
Zotero.Utilities.processDocuments(arts, function(doc) {
var newItem = new Zotero.Item("newspaperArticle");
newItem.publicationTitle = "The Business Standard";
newItem.url = doc.location.href;
newItem.websiteTitle="The Business Standard";
newItem.edition="Online";
newItem.title = Zotero.Utilities.cleanTags(doc.title);
if (doc.evaluate('//td[@class="author"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
var bits = doc.evaluate('//td[@class="author"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(/\s+\/\s+/);
newItem.creators.push(Zotero.Utilities.cleanAuthor(bits[0], "author"));
extras = Zotero.Utilities.trimInternal(bits[1]).match(/^(.*)(\s\w+\s+\d+,\s*\d+)$/);
newItem.place = extras[1];
newItem.date = Zotero.Utilities.trimInternal(extras[2]);
newItem.complete();
} else if (doc.evaluate('//td[@class="NewsSummary"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
var author = Zotero.Utilities.trimInternal(doc.evaluate('//td[@class="NewsSummary"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent);
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
var printurl = 'http://www.business-standard.com/general/printpage.php?autono=' + newItem.url.match(/autono=(\d+)/)[1];
Zotero.debug(printurl);
Zotero.Utilities.HTTP.doGet(printurl, function(text) {
var date = text.match(/<td class=author>([^<]+)</)[1];
newItem.date = Zotero.Utilities.trimInternal(date.split("&nbsp;")[1]);
newItem.complete();
});
}
}, function() {Zotero.done;});
Zotero.wait();
}

View File

@ -0,0 +1,58 @@
{
"translatorID":"fb342bae-7727-483b-a871-c64c663c2fae",
"translatorType":4,
"label":"BusinessWeek",
"creator":"Michael Berkowitz",
"target":"http://(www\\.)?businessweek.com",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-04-11 08:30:00"
}
function detectWeb(doc, url) {
if (doc.title == "BusinessWeek Search Results") {
return "multiple";
} else if (doc.evaluate('//meta[@name="headline"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "magazineArticle";
}
}
function doWeb(doc, url) {
var articles = new Array();
if (detectWeb(doc, url) == "multiple") {
var results = doc.evaluate('//div[@class="result"]/h3[@class="story"]/a', doc, null, XPathResult.ANY_TYPE, null);
var result;
var items = new Object();
while (result = results.iterateNext()) {
items[result.href] = Zotero.Utilities.trimInternal(result.textContent);
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.debug(articles);
Zotero.Utilities.processDocuments(articles, function(newDoc) {
var metaTags = new Object();
var metas = newDoc.evaluate('//meta', newDoc, null, XPathResult.ANY_TYPE, null);
var meta;
while (meta = metas.iterateNext()) {
metaTags[meta.name] = meta.content;
}
Zotero.debug(metaTags);
var item = new Zotero.Item("magazineArticle");
item.title = metaTags['headline'];
item.abstractNote = metaTags['abstract'];
item.tags = metaTags['keywords'].split(/\s*,\s*/);
item.creators.push(Zotero.Utilities.cleanAuthor(metaTags['author'], "author"));
item.publicationTitle = "BusinessWeek: " + metaTags['channel'];
item.url = newDoc.location.href;
item.date = metaTags['pub_date'].replace(/(\d{4})(\d{2})(\d{2})/, "$2/$3/$1");
item.complete();
}, function() {Zotero.done;});
Zotero.wait();
}

View File

@ -0,0 +1,132 @@
{
"translatorID":"a29d22b3-c2e4-4cc0-ace4-6c2326144332",
"translatorType":4,
"label":"CABI - CAB Abstracts",
"creator":"Adam Crymble",
"target":"http://www.cabi.org/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-06-29 21:10:00"
}
function detectWeb(doc, url) {
if (doc.evaluate('//div/table/tbody/tr[1]/td/a', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
} else if (doc.evaluate('//span[@class="PageSubTitle"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "book";
}
}
//CAB Abstracts translator. Code by Adam Crymble
//only designed for "book" entries. People, projects, sites, etc are ignored by Zotero.
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("book");
//authors
if (doc.evaluate('//td[@class="smallwebtext"]/table/tbody/tr/td[1]/span[@class="MenuBar"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var xPathAuthors = doc.evaluate('//td[@class="smallwebtext"]/table/tbody/tr/td[1]/span[@class="MenuBar"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPath1Count = doc.evaluate('count (//td[@class="smallwebtext"]/table/tbody/tr/td[1]/span[@class="MenuBar"])', doc, nsResolver, XPathResult.ANY_TYPE, null);
var nameTest = 0;
for (var j = 0; j < xPath1Count.numberValue; j++) {
authors = xPathAuthors.iterateNext().textContent
if (authors.match("by ")) {
var shortenAuthor = authors.indexOf("by ")+3;
authors = authors.substr(shortenAuthor).split("; ");
for (var i = 0; i < authors.length; i++) {
shortenAuthor = authors[i].indexOf(",");
authors[i] = (authors[i].substr(0, shortenAuthor));
var givenName = (authors[i].split(/\s/));
authors[i] = '';
for (var k = 0; k < givenName.length; k++) {
if (givenName[k].length == 1) {
authors[i] = (authors[i] + givenName[k] + ".");
} else {
authors[i] = (authors[i] + " " + givenName[k]);
}
}
newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[i], "author"));
}
}
}
}
//imprint info
var info = new Array();
if (doc.evaluate('//td[3]/table/tbody/tr/td[@class="MenuBar"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var xPathImprint = doc.evaluate('//td[3]/table/tbody/tr/td[@class="MenuBar"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var imprint = xPathImprint.iterateNext().textContent.split(/\n/);
for (var i = 0; i < imprint.length; i++) {
imprint[i] = imprint[i].replace(/^\s*|\s*$/g, '');
if (imprint[i].match(/\w/)) {
info.push(imprint[i]);
}
}
for (var i = 0; i < info.length; i++) {
if (info[i].match("pages")) {
var cutPages = info[i].indexOf("pages");
newItem.pages = info[i].substr(0, cutPages);
} else if (info[i].match("Date:")) {
newItem.date = info[i].substr(10);
} else if (info[i].match("ISBN: ")) {
newItem.ISBN = info[i].substr(6);
}
}
}
newItem.title = doc.title;
newItem.url = doc.location.href;
newItem.complete();
}
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();
var titles = doc.evaluate('//tr[1]/td/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var mediaType = doc.evaluate('//strong', doc, nsResolver, XPathResult.ANY_TYPE, null);
var dump = mediaType.iterateNext();
var next_title;
while (next_title = titles.iterateNext()) {
items[next_title.href] = mediaType.iterateNext().textContent;
if (items[next_title.href].match("Book")) {
items[next_title.href] = next_title.textContent;
}
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,121 @@
{
"translatorID":"31649d9d-8f7e-4b87-8678-b3e68ee98f39",
"translatorType":4,
"label":"CARL/ABRC OAI Harvester",
"creator":"Adam Crymble",
"target":"http://carl-abrc-oai",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-09-02 13:40:00"
}
function detectWeb(doc, url) {
if (doc.title.match("Search")) {
return "multiple";
} else if (doc.title.match("Browse")) {
return "multiple";
} else if (doc.title.match("Record")) {
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 allAuthors = new Array();
var newItem = new Zotero.Item("book");
var metaTagHTML = doc.getElementsByTagName("meta");
for (var i = 0 ; i < metaTagHTML.length ; i++) {
dataTags[metaTagHTML[i].getAttribute("name")] = Zotero.Utilities.cleanTags(metaTagHTML[i].getAttribute("content"));
if (metaTagHTML[i].getAttribute("name") == "DC.Creator") {
allAuthors.push(dataTags["DC.Creator"]);
}
}
Zotero.debug(allAuthors);
for (var i = 0; i < allAuthors.length; i++) {
if (allAuthors[i].match(",")) {
var authorName = allAuthors[i].split(",");
allAuthors[i] = (authorName[1] + (" ") + authorName[0]);
if (allAuthors[i].match("; ; ")) {
allAuthors[i] = allAuthors[i].replace("; ;", '');
}
newItem.creators.push(Zotero.Utilities.cleanAuthor(allAuthors[i], "author"));
} else {
if (allAuthors[i].match("; ; ")) {
allAuthors[i] = allAuthors[i].replace("; ;", '');
}
newItem.creators.push({lastName: allAuthors[i], creatorType: "creator"});
}
}
associateData (newItem, dataTags, "DC.Title", "title");
associateData (newItem, dataTags, "DC.Description", "abstractNote");
associateData (newItem, dataTags, "DC.Publisher", "publisher");
associateData (newItem, dataTags, "DC.Contributor", "extra");
associateData (newItem, dataTags, "DC.Date", "date");
associateData (newItem, dataTags, "DC.Language", "language");
newItem.url = doc.location.href;
newItem.complete();
}
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();
var titles = doc.evaluate('//span[@class="title"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var links = doc.evaluate('//div[@class="main"]/div/div/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
items[links.iterateNext().href] = next_title.textContent;
links.iterateNext();
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

189
translators/COinS.js Normal file
View File

@ -0,0 +1,189 @@
{
"translatorID":"05d07af9-105a-4572-99f6-a8e231c0daef",
"translatorType":4,
"label":"COinS",
"creator":"Simon Kornblith",
"target":null,
"minVersion":"1.0.0b3.r1",
"maxVersion":"",
"priority":300,
"inRepository":true,
"lastUpdated":"2007-09-15 20:08:46"
}
function detectWeb(doc, url) {
var spanTags = doc.getElementsByTagName("span");
var encounteredType = false;
for(var i=0; i<spanTags.length; i++) {
var spanClass = spanTags[i].getAttribute("class");
if(spanClass) {
var spanClasses = spanClass.split(" ");
if(Zotero.Utilities.inArray("Z3988", spanClasses)) {
var spanTitle = spanTags[i].getAttribute("title");
// determine if it's a valid type
var item = new Zotero.Item;
var success = Zotero.Utilities.parseContextObject(spanTitle, item);
if(item.itemType) {
if(encounteredType) {
return "multiple";
} else {
encounteredType = item.itemType;
}
}
}
}
}
return encounteredType;
}
// used to retrieve next COinS object when asynchronously parsing COinS objects
// on a page
function retrieveNextCOinS(needFullItems, newItems, couldUseFullItems, doc) {
if(needFullItems.length) {
var item = needFullItems.shift();
Zotero.debug("looking up contextObject");
var search = Zotero.loadTranslator("search");
search.setHandler("itemDone", function(obj, item) {
newItems.push(item);
});
search.setHandler("done", function() {
retrieveNextCOinS(needFullItems, newItems, couldUseFullItems, doc);
});
search.setSearch(item);
// look for translators
var translators = search.getTranslators();
if(translators.length) {
search.setTranslator(translators);
search.translate();
} else {
retrieveNextCOinS(needFullItems, newItems, couldUseFullItems, doc);
}
} else {
completeCOinS(newItems, couldUseFullItems, doc);
Zotero.done();
}
}
// saves all COinS objects
function completeCOinS(newItems, couldUseFullItems, doc) {
if(newItems.length > 1) {
var selectArray = new Array();
for(var i in newItems) {
selectArray[i] = newItems[i].title;
}
selectArray = Zotero.selectItems(selectArray);
var useIndices = new Array();
for(var i in selectArray) {
useIndices.push(i);
}
completeItems(newItems, useIndices, couldUseFullItems);
} else if(newItems.length) {
completeItems(newItems, [0], couldUseFullItems);
}
}
function completeItems(newItems, useIndices, couldUseFullItems, doc) {
if(!useIndices.length) {
return;
}
var i = useIndices.shift();
// grab full item if the COinS was missing an author
if(couldUseFullItems[i]) {
Zotero.debug("looking up contextObject");
var search = Zotero.loadTranslator("search");
var firstItem = false;
search.setHandler("itemDone", function(obj, newItem) {
if(!firstItem) {
// add doc as attachment
newItem.attachments.push({document:doc});
newItem.complete();
firstItem = true;
}
});
search.setHandler("done", function(obj) {
// if we didn't find anything, use what we had before (even if it
// lacks the creator)
if(!firstItem) {
newItems[i].complete();
}
// call next
completeItems(newItems, useIndices, couldUseFullItems);
});
search.setSearch(newItems[i]);
var translators = search.getTranslators();
if(translators.length) {
search.setTranslator(translators);
search.translate();
} else {
// add doc as attachment
newItems[i].attachments.push({document:doc});
newItems[i].complete();
// call next
completeItems(newItems, useIndices, couldUseFullItems);
}
} else {
// add doc as attachment
newItems[i].attachments.push({document:doc});
newItems[i].complete();
// call next
completeItems(newItems, useIndices, couldUseFullItems);
}
}
function doWeb(doc, url) {
var newItems = new Array();
var needFullItems = new Array();
var couldUseFullItems = new Array();
var spanTags = doc.getElementsByTagName("span");
for(var i=0; i<spanTags.length; i++) {
var spanClass = spanTags[i].getAttribute("class");
if(spanClass) {
var spanClasses = spanClass.split(" ");
if(Zotero.Utilities.inArray("Z3988", spanClasses)) {
var spanTitle = spanTags[i].getAttribute("title");
var newItem = new Zotero.Item();
newItem.repository = false; // do not save repository
if(Zotero.Utilities.parseContextObject(spanTitle, newItem)) {
if(newItem.title) {
if(!newItem.creators.length) {
// if we have a title but little other identifying
// information, say we'll get full item later
newItem.contextObject = spanTitle;
couldUseFullItems[newItems.length] = true;
}
// title and creators are minimum data to avoid looking up
newItems.push(newItem);
} else {
// retrieve full item
newItem.contextObject = spanTitle;
needFullItems.push(newItem);
}
}
}
}
}
Zotero.debug(needFullItems);
if(needFullItems.length) {
// retrieve full items asynchronously
Zotero.wait();
retrieveNextCOinS(needFullItems, newItems, couldUseFullItems, doc);
} else {
completeCOinS(newItems, couldUseFullItems, doc);
}
}

View File

@ -0,0 +1,71 @@
{
"translatorID":"303c2744-ea37-4806-853d-e1ca67be6818",
"translatorType":4,
"label":"CSIRO Publishing",
"creator":"Michael Berkowitz",
"target":"http://(www.)?publish.csiro.au/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-04-23 09:45:00"
}
function detectWeb(doc, url) {
if (doc.evaluate('//a[@class="searchBoldBlue"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate('//a[@class="linkjournal"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
} else if (url.indexOf("/view/journals/") != -1 || url.indexOf("paper") != -1) {
return "journalArticle";
}
}
function doWeb(doc, url) {
var links = new Array();
if (detectWeb(doc, url) == "multiple") {
var items = new Object();
if (doc.evaluate('//a[@class="searchBoldBlue"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
var arts = doc.evaluate('//a[@class="searchBoldBlue"]', doc, null, XPathResult.ANY_TYPE, null);
var art = arts.iterateNext();
while (art) {
items[art.href] = art.textContent;
art = arts.iterateNext();
}
} else if (doc.evaluate('//a[@class="linkjournal"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
var arts = doc.evaluate('//a[@class="linkjournal"]', doc, null, XPathResult.ANY_TYPE, null);
var titles = doc.evaluate('//td[3]//td[1]/table/tbody/tr/td/b', doc, null, XPathResult.ANY_TYPE, null);
var art;
var title;
while ((art = arts.iterateNext()) && (title = titles.iterateNext())) {
items[art.href] = title.textContent;
}
}
items = Zotero.selectItems(items);
for (var i in items) {
links.push(i.match(/([^/=.htm]*)(.htm)?$/)[1]);
}
} else {
links.push(url.match(/([^/=.htm]*)(.htm)?$/)[1]);
}
for (var i in links) {
var newURL = 'http://www.publish.csiro.au/view/journals/dsp_journal_retrieve_citation.cfm?ct=' + links[i] + '.ris';
var pdfURL = 'http://www.publish.csiro.au/?act=view_file&file_id=' + links[i] + '.pdf';
Zotero.Utilities.HTTP.doGet(newURL, function(text) {
var translator = Zotero.loadTranslator("import");
translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
translator.setString(text);
translator.setHandler("itemDone", function(obj, item) {
item.itemType = "journalArticle";
if (item.notes[0]) {
item.abstractNote = item.notes[0].note;
}
item.attachments = [
{url:pdfURL, title:"CSIRO Publishing PDF", mimeType:"application/pdf"},
{url:newURL, title:"CSIRO Publishing Snaphost", mimeType:"text/html"}
];
item.complete();
});
translator.translate();
});
}
Zotero.wait();
}

View File

@ -0,0 +1,90 @@
{
"translatorID":"850f4c5f-71fb-4669-b7da-7fb7a95500ef",
"translatorType":4,
"label":"Cambridge Journals Online",
"creator":"Sean Takats and Michael Berkowitz",
"target":"https?://[^/]*journals.cambridge.org[^/]*//?action/(quickSearch|search|displayAbstract|displayFulltext|displayIssue)",
"minVersion":"1.0.0b3r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-07-08 15:35:00"
}
function detectWeb(doc, url) {
var namespace=doc.documentElement.namespaceURI;
var nsResolver=namespace?function(prefix) {
return (prefix=="x")?namespace:null;
}:null;
var xpath = '//tr[td/input[@type="checkbox"][@name="toView"]]';
if ((url.indexOf("/action/displayAbstract") != -1) || (url.indexOf("action/displayFulltext") != -1)){
return "journalArticle";
} else if (doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){
return "multiple";
}
}
function doWeb(doc, url){
var namespace=doc.documentElement.namespaceURI;
var nsResolver=namespace?function(prefix) {
return (prefix=="x")?namespace:null;
}:null;
var host = doc.location.host;
var urlstring="http://" + host + "/action/exportCitation";
var datastring="format=RIS&emailId=&Download=Download&componentIds=";
var links = new Array();
if(detectWeb(doc, url) == "multiple"){
var xpath = '//tr[td/input[@type="checkbox"][@name="toView"]]';
var tableRows = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
var tableRow;
var items=new Array();
while (tableRow = tableRows.iterateNext()){
var id = doc.evaluate('./td/input[@type="checkbox"][@name="toView"]/@value', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
var title = doc.evaluate('./td/h3', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
items['http://' + host + '/action/displayAbstract?aid=' + id.nodeValue] = Zotero.Utilities.capitalizeTitle(title.textContent);
}
items=Zotero.selectItems(items);
for (var i in items) {
links.push(i);
}
} else {
links = [url];
}
Zotero.Utilities.processDocuments(links, function(doc) {
if (doc.evaluate('//p[@class="AbsType"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var abs = doc.evaluate('//p[@class="AbsType"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
}
if (doc.evaluate('//p[@class="KeyWords"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var kws = doc.evaluate('//p[@class="KeyWords"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.substr(11).split('; ');
}
var pdfpath='//div/ul/li/a[contains(text(), "PDF")]';
if (doc.evaluate(pdfpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var pdflink =doc.evaluate(pdfpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href;
}
idRe = /aid=([0-9]+)/
var m = idRe.exec(doc.location.href);
var id = m[1];
Zotero.Utilities.HTTP.doGet(urlstring + "?" + datastring+id, function(text) {
text = text.replace(/(^|\n)?([A-Z\d]{2})\s+\-\s+(\n)?/g, "\n$2 - $3");
var translator = Zotero.loadTranslator("import");
translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
translator.setString(text);
translator.setHandler("itemDone", function(obj, item) {
item.attachments = [{url:url, title:"Cambridge Journals Snapshot", mimeType:"text/html"}]
if (pdflink) item.attachments.push({url:pdflink, title:"Cambridge Journals PDF", mimeType:"application/pdf"});
item.url = url;
item.title = Zotero.Utilities.capitalizeTitle(item.title);
var authors = item.creators;
item.creators = new Array();
for each (var aut in authors) {
item.creators.push({firstName:aut.firstName, lastName:aut.lastName, creatorType:"author"});
}
if (kws) item.tags = kws;
if (abs) item.abstractNote = Zotero.Utilities.trimInternal(abs);
item.complete();
});
translator.translate();
});
}, function() {Zotero.done;});
Zotero.wait();
}

View File

@ -0,0 +1,187 @@
{
"translatorID":"82174f4f-8c13-403b-99b2-affc7bc7769b",
"translatorType":4,
"label":"Cambridge Scientific Abstracts",
"creator":"Simon Kornblith and Michael Berkowitz",
"target":"https?://[^/]+/ids70/(?:results.php|view_record.php)",
"minVersion":"1.0.0b3.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-05-28 18:30: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(url.indexOf("/results.php") != -1) {
var type = doc.evaluate('//td[@class="rt_tab_on"]', doc, nsResolver, XPathResult.ANY_TYPE,
null).iterateNext().textContent;
if(type.substr(0, 15) == "Published Works") {
return "multiple";
}
} else {
// default to journal
var itemType = "journalArticle";
var type = doc.evaluate('//tr[td[1][@class="data_heading"]/text() = "Publication Type"]/td[3]',
doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
if(type) {
type = Zotero.Utilities.cleanString(type.textContent);
if(type == "Book Chapter") {
return "bookSection";
} else if(type.substr(0, 4) == "Book") {
return "book";
} else if(type.substr(0, 12) == "Dissertation") {
return "thesis";
} else if(type == "Catalog") {
return "magazineArticle";
}
}
return "journalArticle";
}
return false;
}
function scrape(doc) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var itemType = "journalArticle";
var type = doc.evaluate('//tr[td[1][@class="data_heading"]/text() = "Publication Type"]/td[3]',
doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
if(type) {
type = Zotero.Utilities.trimInternal(type.textContent);
if(type == "Book Chapter") {
itemType = "bookSection";
} else if(type.substr(0, 4) == "Book") {
itemType = "book";
} else if(type.substr(0, 12) == "Dissertation") {
itemType = "thesis";
} else if(type == "Catalog") {
itemType = "magazineArticle";
}
}
var newItem = new Zotero.Item(itemType);
newItem.attachments = [{document:doc, title:"Cambridge Scientific Abstracts Snapshot"}];
newItem.title = Zotero.Utilities.trimInternal(doc.evaluate('//tr/td[3][@class="data_emphasis"]', doc, nsResolver,
XPathResult.ANY_TYPE, null).iterateNext().textContent);
var dataRows = doc.evaluate('//tr[td[3][@class="data_content"]]', doc, nsResolver,
XPathResult.ANY_TYPE, null);
var dataRow;
while(dataRow = dataRows.iterateNext()) {
var tds = dataRow.getElementsByTagName("td");
var heading = Zotero.Utilities.trimInternal(tds[0].textContent).toLowerCase();
var content = Zotero.Utilities.trimInternal(tds[2].textContent);
if(heading == "database") {
newItem.repository = "Cambridge Scientific Abstracts ("+content+")";
} else if(heading == "author") {
var authors = content.split("; ");
for each(var author in authors) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(author.replace(/\d+/g, ""), "author", true));
}
} else if(heading == "source") {
if(itemType == "journalArticle") {
var parts = content.split(/(,|;)/);
newItem.publicationTitle = parts.shift();
for each (var i in parts) {
if (i.match(/\d+/)) {
if (i.match(/v(ol)?/)) {
newItem.volume = i.match(/\d+/)[0];
} else if (i.match(/pp/)) {
newItem.pages = i.match(/[\d\-]+/)[0];
} else if (i.match(/no?/)) {
newItem.issue = i.match(/\d+/)[0];
} else if (i.match(/\d{4}/)) {
newItem.date = Zotero.Utilities.trimInternal(i);
}
}
}
} else if(itemType == "book") {
var m = content.match(/^([^:]+): ([^,0-9]+)/);
if(m) {
newItem.place = m[1];
newItem.publisher = m[2];
}
} else if(itemType == "bookSection") {
if(content.length > newItem.publicationTitle.length
&& content.substr(0, newItem.publicationTitle.length) == newItem.publicationTitle) {
var m = content.match(/\)\. ([^:]+): ([^,0-9]+)/);
if(m) {
newItem.place = m[1];
newItem.publisher = m[2];
}
var m = content.match(/\(pp. ([\-0-9]+)\)/);
if(m) newItem.pages = m[1];
}
}
} else if(heading == "monograph title") {
newItem.publicationTitle = content;
} else if(heading == "series title") {
newItem.series = content;
} else if(heading == "issn") {
newItem.ISSN = content;
} else if(heading == "isbn") {
newItem.ISBN = content;
} else if(heading == "abstract") {
newItem.abstractNote = content;
} else if(heading == "notes") {
newItem.extra = content;
} else if(heading == "publication year") {
if(!newItem.date) newItem.date = content;
} else if(heading == "information provider") {
if(content.substr(0, 19) == "http://dx.doi.org/") {
newItem.DOI = content.substr(19);
}
} else if(heading == "journal volume") {
newItem.volume = content;
} else if(heading == "journal pages") {
newItem.pages = content;
} else if(heading == "journal issue") {
newItem.issue = content;
} else if(heading == "affiliation") {
if(newItem.itemType == "thesis") {
newItem.publisher = content;
}
}
}
var terms = doc.evaluate('//input[substring(@name, 1, 4) = "term"]', doc, nsResolver,
XPathResult.ANY_TYPE, null);
var term;
while(term = terms.iterateNext()) {
newItem.tags.push(term.value.replace(/ [0-9]{3,}$/, ""));
}
newItem.complete();
}
function doWeb(doc, url) {
if(url.indexOf("/results.php") != -1) {
var items = Zotero.Utilities.getItemArray(doc, doc, '/view_record\.php\?', '^(?:View Record|More\.{3})$');
items = Zotero.selectItems(items);
if(!items) return true;
var urls = new Array();
for(var url in items) {
urls.push(url);
}
Zotero.Utilities.processDocuments(urls, scrape, function() { Zotero.done() })
Zotero.wait();
} else {
scrape(doc);
}
}

112
translators/CanLII.js Normal file
View File

@ -0,0 +1,112 @@
{
"translatorID":"84799379-7bc5-4e55-9817-baf297d129fe",
"translatorType":4,
"label":"CanLII",
"creator":"Bill McKinney",
"target":"http:\\/\\/www\\.canlii\\.org\\/en\\/[^\\/]+\\/[^\\/]+\\/doc\\/.+",
"minVersion":"1.0.0b4.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2007-06-18 18: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;
var canLiiRegexp = /http:\/\/www\.canlii\.org\/en\/[^\/]+\/[^\/]+\/doc\/.+/
if(canLiiRegexp .test(url)) {
return "book";
} else {
var aTags = doc.getElementsByTagName("a");
for(var i=0; i<aTags.length; i++) {
if(articleRegexp.test(aTags[i].href)) {
return "multiple";
}
}
}
}
function associateMeta(newItem, metaTags, field, zoteroField) {
var field = metaTags.namedItem(field);
if(field) {
newItem[zoteroField] = field.getAttribute("content");
}
}
function scrape(doc) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var newItem = new Zotero.Item("case");
var metaTags = doc.getElementsByTagName("meta");
associateMeta(newItem, metaTags, "DC.Title", "title");
associateMeta(newItem, metaTags, "DC.Date", "dateDecided");
associateMeta(newItem, metaTags, "DC.Language", "language");
newItem.url = doc.location.href;
var field = metaTags.namedItem("DC.Title");
var tmpText = "";
if(field) {
tmpText = field.getAttribute("content");
var capRe = /^(.+),\s+(\d{4})\s+(\w+)\s+(\d+)\s+\(([^\)]+)\)/;
var m = capRe.exec(tmpText);
if(m) {
newItem.caseName = m[1]+", "+m[2]+" "+m[3]+" "+m[4];
if (m[3] == 'CanLII') {
newItem.court = m[5];
} else {
newItem.court = m[3];
}
} else {
newItem.caseName = tmpText;
newItem.court = "not found";
}
}
// attach link to pdf version
// NOTE: not working - don't know why
var pdfRe = /^(.+)\.html$/;
var pdfMatch = pdfRe.exec(doc.location.href);
if (pdfMatch) {
var pdfUrl = pdfMatch[1]+".pdf";
newItem.attachments = [{url:pdfUrl, title:"PDF version", mimeType:"application/pdf"}];
}
newItem.complete();
}
function doWeb(doc, url) {
var canLiiRegexp= /http:\/\/www\.canlii\.org\/en\/[^\/]+\/[^\/]+\/doc\/.+/
if(canLiiRegexp.test(url)) {
scrape(doc);
} else {
var items = Zotero.Utilities.getItemArray(doc, doc, canLiiRegexp);
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();
}
}

153
translators/Canada.com.js Normal file
View File

@ -0,0 +1,153 @@
{
"translatorID":"4da40f07-904b-4472-93b6-9bea1fe7d4df",
"translatorType":4,
"label":"Canada.com",
"creator":"Adam Crymble",
"target":"http://www.canada.com",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-07-24 05:30:00"
}
function detectWeb(doc, url) {
if (doc.location.href.match("story")) {
return "newspaperArticle";
} else if (doc.location.href.match("search")) {
return "multiple";
}
}
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 tagsContent = new Array();
var fieldTitle;
var newItem = new Zotero.Item("newspaperArticle");
newItem.title = doc.title;
if (doc.evaluate('//div[@class="storyheader"]/h4', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
newItem.abstractNote = doc.evaluate('//div[@class="storyheader"]/h4', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
} else if (doc.evaluate('//div[@class="storyheader"]/h2', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
newItem.abstracteNote = doc.evaluate('//div[@class="storyheader"]/h2', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
}
if (doc.evaluate('//div[@class="feed_details"]/h4', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var author = doc.evaluate('//div[@class="feed_details"]/h4', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
if (author.match(/\n/)) {
author1 = author.split(/\n/);
if (author1[0].match(/ and /)) {
author2 = author1[0].split(/ and /);
for (var i in author2) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(author2[i], "author"));
}
} else {
newItem.creators.push(Zotero.Utilities.cleanAuthor(author1[0], "author"));
}
} else {
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
}
}
if (doc.evaluate('//div[@class="feed_details"]/span', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var date1 = doc.evaluate('//div[@class="feed_details"]/span', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(/^\s*|\s*$/g, '');
if (date1.match("Published:")) {
date1 = date1.substr(11);
newItem.date = date1;
}
}
if (doc.evaluate('//ul[@class="home"]/li/a/span', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var pubTitle = doc.evaluate('//ul[@class="home"]/li/a/span', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
if (pubTitle.match("Home")) {
newItem.publicationTitle = pubTitle.substr(0, pubTitle.length-5);
} else {
newItem.publicationTitle = pubTitle;
}
} else {
newItem.publicationTitle = "Canada.com";
}
newItem.url = doc.location.href;
newItem.complete();
}
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();
var next_title;
if (doc.evaluate('//div[@class="even"]/p/a', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
Zotero.debug("AAAAAA");
var titles0 = doc.evaluate('//div[@class="even"]/p/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
while (next_title = titles0.iterateNext()) {
if (next_title.href.match("story") && next_title.href.match("canada.com")) {
items[next_title.href] = next_title.textContent;
}
}
}
if (doc.evaluate('//div[@class="odd"]/p/a', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
Zotero.debug("BBBBB");
var titles1 = doc.evaluate('//div[@class="odd"]/p/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
while (next_title = titles1.iterateNext()) {
if (next_title.href.match("story") && next_title.href.match("canada.com")) {
items[next_title.href] = next_title.textContent;
}
}
}
if (doc.evaluate('//p/b/a', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
Zotero.debug("CCCCC");
var titles2 = doc.evaluate('//p/b/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
while (next_title = titles2.iterateNext()) {
if (next_title.href.match("story") && next_title.href.match("canada.com")) {
items[next_title.href] = next_title.textContent;
}
}
}
if (doc.evaluate('//div[@class="name"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
Zotero.debug("DDDD");
var titles3 = doc.evaluate('//div[@class="name"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
while (next_title = titles3.iterateNext()) {
if (next_title.href.match("story") && next_title.href.match("canada.com")) {
items[next_title.href] = next_title.textContent;
}
}
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,124 @@
{
"translatorID":"a7c8b759-6f8a-4875-9d6e-cc0a99fe8f43",
"translatorType":4,
"label":"Canadian Letters and Images",
"creator":"Adam Crymble",
"target":"http://(www.)?canadianletters.ca/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-06-20 20:45:00"
}
function detectWeb(doc, url) {
if (doc.location.href.match("results")) {
return "multiple";
} else if (doc.location.href.match("letters.php")) {
return "document";
} else if (doc.location.href.match("template")) {
return "artwork";
}
}
//Translator for Canadian Letters and Images. Code by Adam Crymble
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 mediaType = (detectWeb(doc, url));
if (mediaType == "document") {
var newItem = new Zotero.Item("letter");
var title2;
//title
if (doc.evaluate('//h3', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
newItem.title = doc.evaluate('//h3', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
} else {
newItem.title = doc.title;
}
//letter, diary, memoir, personal item
if (doc.evaluate('//div[@id="collectionCategory_letters"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var xPathType = doc.evaluate('//div[@id="collectionCategory_letters"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
newItem.type = xPathType;
}
//gets date, to and from
if (doc.evaluate('//div[@class="letterInfo_label"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var xPathHeaders = doc.evaluate('//div[@class="letterInfo_label"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathContent = doc.evaluate('//div[@class="letterInfo_title"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathCount = doc.evaluate('count (//div[@class="letterInfo_label"])', doc, nsResolver, XPathResult.ANY_TYPE, null);
for (i=0; i<xPathCount.numberValue; i++) {
fieldTitle=xPathHeaders.iterateNext().textContent.replace(/\s+/g, '');
dataTags[fieldTitle] = xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, '');
if (fieldTitle == "To:") {
newItem.abstractNote = ("To: " + dataTags[fieldTitle]);
} else if (fieldTitle == "From:") {
newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags[fieldTitle], "author"));
} else if (fieldTitle == "Date:") {
newItem.date = dataTags[fieldTitle];
}
}
}
} else if (mediaType == "artwork") {
newItem = new Zotero.Item("artwork");
if (doc.evaluate('//div[@class="pictureDisplay"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
newItem.title = doc.evaluate('//div[@class="pictureDisplay"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
} else {
newItem.title = doc.title;
}
}
newItem.url = doc.location.href;
newItem.complete();
}
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();
var titles = doc.evaluate('//div[@class="searchResultsDisplay"]/div/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
items[next_title.href] = next_title.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,180 @@
{
"translatorID":"2d174277-7651-458f-86dd-20e168d2f1f3",
"translatorType":4,
"label":"Canadiana.org",
"creator":"Adam Crymble",
"target":"http://(www.)?canadiana.org",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-06-12 19:30:00"
}
function detectWeb(doc, url) {
//checks the title of the webpage. If it matches, then the little blue book symbol appears in the address bar.
//works for English and French versions of the page.
if(doc.title == "Early Canadiana Online - Item Record"|doc.title == "Notre mémoire en ligne - Notice") {
return "book";
} else if (doc.evaluate('//div[@id="Content"]/div[@class="NormalRecord"]/h3/a', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
}
}
//Canadiana Translator Coding by Adam Crymble
//because the site uses so many random formats for the "Imprint" field, it's not always perfect. But it works for MOST entries
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;
//declaring variables to be used later.
var newItem = new Zotero.Item("book");
newItem.url = doc.location.href;
var dataTags = new Object();
var fieldTitle;
var tagsContent= new Array();
//these variables tell the program where to find the data we want in the HTML file we're looking at.
//in this case, the data is found in a table.
var xPath1 = '//tr/td[1][@class="Label"]';
var xPath2 = '//tr/td[2]';
//at this point, all the data we want has been saved into the following 2 Objects: one for the headings, one for the content.
// The 3rd object tells us how many items we've found.
if (doc.evaluate('//tr/td[1][@class="Label"]', doc, nsResolver, XPathResult.ANY_TYPE, null)) {
var xPath1Results = doc.evaluate(xPath1, doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPath2Results = doc.evaluate(xPath2, doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathCount = doc.evaluate( 'count (//tr/td[1][@class="Label"])', doc, nsResolver, XPathResult.ANY_TYPE, null);
}
//At this point we have two lists (xPath1Results and xPath2Results). this loop matches the first item in the first list
//with the first item in the second list, and on until the end.
//If we then ask for the "Principal Author" the program returns "J.K. Rowling" instead of "Principal Author"
if (doc.evaluate('//tr/td[1][@class="Label"]', doc, nsResolver, XPathResult.ANY_TYPE, null)) {
for (i=0; i<xPathCount.numberValue; i++) {
fieldTitle=xPath1Results.iterateNext().textContent.replace(/\s+/g, '');
//gets the author's name without cleaning it away using cleanTags.
if (fieldTitle =="PrincipalAuthor:" || fieldTitle == "Auteurprincipal:") {
fieldTitle="PrincipalAuthor:";
dataTags[fieldTitle]=(xPath2Results.iterateNext().textContent);
var authorName =dataTags["PrincipalAuthor:"].split(",");
authorName[0]=authorName[0].replace(/\s+/g, '');
dataTags["PrincipalAuthor:"]= (authorName[1] + (" ") + authorName[0]);
newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["PrincipalAuthor:"], "author"));
//Splits Adressebibliographique or Imprint into 3 fields and cleans away any extra whitespace or unwanted characters.
} else if (fieldTitle =="Adressebibliographique:" || fieldTitle == "Imprint:") {
fieldTitle = "Imprint:";
dataTags[fieldTitle] = Zotero.Utilities.cleanTags(xPath2Results.iterateNext().textContent);
var separateImprint = dataTags["Imprint:"].split(":");
separateImprint[0]= separateImprint[0].replace(/^\s*|\[|\]/g,'');
dataTags["Place:"]=separateImprint[0];
var justDate = separateImprint[1].replace(/\D/g, '');
dataTags["Date:"]= justDate;
separateImprint[1] = separateImprint[1].replace(/\d|\[|\]|\./g, '');
separateImprint[1] = separateImprint[1].replace(/^\s*|\s*$/g, '');
dataTags["Publisher:"]= separateImprint[1];
// determines how many tags there will be, pushes them into an array and clears away whitespace.
} else if (fieldTitle == "Subject:" || fieldTitle == "Sujet:") {
tagsContent.push(Zotero.Utilities.cleanTags(xPath2Results.iterateNext().textContent.replace(/^\s*|\s*$/g, '')));
while (fieldTitle != "Collection:") {
i=i+1;
tagsContent.push(Zotero.Utilities.cleanTags(xPath2Results.iterateNext().textContent.replace(/^\s*|\s*$/g, '')));
fieldTitle=xPath1Results.iterateNext().textContent.replace(/\s+/g, '');
}
} else {
dataTags[fieldTitle] = Zotero.Utilities.cleanTags(xPath2Results.iterateNext().textContent.replace(/^\s*|\s*$/g, ''));
}
}
}
//Adds a string to CIHM no: and ICMH no: so that the resulting number makes sense to the reader.
if (dataTags["CIHMno.:"]) {
dataTags["CIHMno.:"]=("CIHM Number: " + dataTags["CIHMno.:"]);
}
if (dataTags["ICMHno:"]) {
dataTags["ICMHno:"]=("ICMH nombre: " + dataTags["ICMHno:"]);
}
//makes tags of the items in the "tagsContent" array.
for (var i = 0; i < tagsContent.length; i++) {
newItem.tags[i] = tagsContent[i];
}
//calls the associateData function to put the data in the correct Zotero field.
associateData (newItem, dataTags, "Title:", "title");
associateData (newItem, dataTags, "Place:", "place");
associateData (newItem, dataTags, "Publisher:", "publisher");
associateData (newItem, dataTags, "Date:", "date");
associateData (newItem, dataTags, "PageCount:", "pages");
associateData (newItem, dataTags, "CIHMno.:", "extra");
associateData (newItem, dataTags, "DocumentSource:", "rights");
associateData (newItem, dataTags, "Titre:", "title" );
associateData (newItem, dataTags, "Nombredepages:", "pages");
associateData (newItem, dataTags, "ICMHno:", "extra");
associateData (newItem, dataTags, "Documentoriginal:", "rights");
//Saves everything to Zotero.
newItem.complete();
}
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();
var titles = doc.evaluate('//div[@id="Content"]/div[@class="NormalRecord"]/h3/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
items[next_title.href] = next_title.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

139
translators/Cell Press.js Normal file
View File

@ -0,0 +1,139 @@
{
"translatorID":"f26cfb71-efd7-47ae-a28c-d4d8852096bd",
"translatorType":4,
"label":"Cell Press",
"creator":"Michael Berkowitz",
"target":"http://www.(cancercell|cell|cellhostandmicrobe|cellmetabolism|cellstemcell|chembiol|current-biology|developmentalcell|immunity|molecule|neuron|structure).(org|com)",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":99,
"inRepository":true,
"lastUpdated":"2008-07-07 14:50:00"
}
function detectWeb(doc, url) {
if (url.indexOf("search/results") != -1) {
return "multiple";
} else if (url.indexOf("content/article") != -1) {
return "journalArticle";
}
}
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 commaSplit = new Array();
var newItem = new Zotero.Item("journalArticle");
//title
newItem.title = doc.evaluate('//h1[@class="article_title"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
//publication, volume, pages, date.
var voliss = doc.evaluate('//div[contains(@class, "article_citation")]/p[1]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
var volissSplit = voliss.split(".");
for (var i = 0; i < volissSplit.length; i++) {
if (volissSplit[i].match(", ")) {
commaSplit = volissSplit[i].split(", ");
}
}
if (commaSplit[0] != '') {
newItem.publicationTitle = commaSplit[0];
}
if (commaSplit[1] != '') {
newItem.volume = commaSplit[1];
}
if (commaSplit[2] != '') {
newItem.pages= commaSplit[2];
}
if (commaSplit[3] != '') {
newItem.date= commaSplit[3];
}
//abstract
var abstractXPath2 = '//div[@class="min_fulltext"][@id="main_content"]/p';
if (doc.evaluate(abstractXPath2, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
newItem.abstractNote = doc.evaluate(abstractXPath2, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
}
var abstractXPath = '//div[@class="panelcontent article_summary"]/p[contains(text(), " ")]';
if (doc.evaluate(abstractXPath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
newItem.abstractNote = doc.evaluate(abstractXPath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
}
//authors
var authors = doc.evaluate('//p[@class="authors"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(",");
for (var i in authors) {
var next_author = authors[i];
if (next_author.match(/[a-z]/)) {
next_author = Zotero.Utilities.trimInternal(next_author.replace(/\d/g, ""));
if (next_author.substr(0, 3) == "and") {
next_author = next_author.substr(4);
}
newItem.creators.push(Zotero.Utilities.cleanAuthor(next_author, "author"));
}
}
//url
var newurl = doc.location.href;
if (newurl.indexOf("abstract") != -1) {
newurl = newurl.replace("abstract", "fulltext");
}
//attachments
var uid = newurl.match(/uid=([^&]+)/)[1];
var pdfx = '//a[contains(text(), "PDF")][contains(@href, "' + uid + '")]';
var pdfurl = doc.evaluate(pdfx, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href;
newItem.attachments = [
{url:newurl, title:"Cell Press Snapshot", mimeType:"text/html"},
{url:pdfurl, title:"Cell Press Full Text PDF", mimeType:"application/pdf"}
];
newItem.complete();
}
function doWeb(doc, url) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
} : null;
var articles = new Array();
if (detectWeb(doc, url) == "multiple") {
var items = new Object();
var titles = doc.evaluate('//dd/strong', doc, nsResolver, XPathResult.ANY_TYPE, null);
var link = doc.evaluate('//nobr/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
var next_lilnk;
while (next_title = titles.iterateNext()) {
next_link = link.iterateNext();
if (next_link.textContent.match("Summary")) {
items[next_link.href] = next_title.textContent;
} else {
next_link = link.iterateNext();
items[next_link.href] = next_title.textContent;
}
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,167 @@
{
"translatorID":"50d3ca81-3c4c-406b-afb2-0fe8105b9b38",
"translatorType":4,
"label":"Champlain Society - Collection",
"creator":"Adam Crymble",
"target":"http://link.library.utoronto.ca",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-09-02 13:40:00"
}
function detectWeb(doc, url) {
if (doc.location.href.match("search_results")) {
return "multiple";
} else if (doc.location.href.match("item_record")) {
return "book";
}
}
//Champlain Collection translator. Code by Adam Crymble
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 tagsContent = new Array();
var fieldTitle;
var newItem = new Zotero.Item("book");
var headers = doc.evaluate('//table[1]/tbody/tr/td[1]/b/font', doc, nsResolver, XPathResult.ANY_TYPE, null);
var contents = doc.evaluate('//td/table[1]/tbody/tr/td[2]/font', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathCount = doc.evaluate('count (//table[1]/tbody/tr/td[1]/b/font)', doc, nsResolver, XPathResult.ANY_TYPE, null);
for (i=0; i<xPathCount.numberValue; i++) {
fieldTitle = headers.iterateNext().textContent.replace(/\s+/g, '');
if (fieldTitle == "Auteur:" ) {
fieldTitle = "Author:";
} else if (fieldTitle == "Titre:") {
fieldTitle = "Title:";
} else if (fieldTitle == "Description:") {
fieldTitle = "Extent:";
} else if (fieldTitle == "Éditeur:") {
fieldTitle = "Published:";
} else if (fieldTitle == "Sujet:") {
fieldTitle = "Subjects:";
}
dataTags[fieldTitle] = (contents.iterateNext().textContent.replace(/^\s*|\s*$/g, ''));
}
//author
var multiAuthors = 0;
if (dataTags["Author:"]) {
var author = dataTags["Author:"];
if (author.match("; ")) {
var authors = author.split("; ");
multiAuthors = 1;
}
if (multiAuthors == 1) {
for (var i = 0; i < authors.length; i++) {
if (authors[i].match(", ")) {
var author1 = authors[i].split(", ");
author = author1[1] + " " + author1[0];
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
} else {
newItem.creators.push({lastName: author, creatorType: "creator"});
}
}
} else {
if (author.match(", ")) {
var author1 = author.split(", ");
author = author1[1] + " " + author1[0];
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
} else {
newItem.creators.push({lastName: author, creatorType: "creator"});
}
}
}
if (dataTags["Published:"]) {
if (dataTags["Published:"].match(": ")) {
var place1 = dataTags["Published:"].indexOf(": ");
newItem.place = dataTags["Published:"].substr(0, place1);
var publisher1 = dataTags["Published:"].substr(place1 + 2);
if (publisher1.match(", ")) {
var date1 = publisher1.lastIndexOf(", ");
newItem.date = publisher1.substr(date1 +2);
newItem.publisher = publisher1.substr(0, date1);
} else {
newItem.publisher = publisher1;
}
} else {
newItem.publisher = publisher1;
}
}
//for Tags
if (dataTags["Subjects:"]) {
tagsContent = dataTags["Subjects:"].split(/\n/);
}
var j = 0;
for (var i = 0; i < tagsContent.length; i++) {
if (tagsContent[i].match(/\w/)) {
newItem.tags[j] = tagsContent[i].replace(/^\s*|\s+$/g, '');
j++;
}
}
associateData (newItem, dataTags, "Extent:", "pages");
associateData (newItem, dataTags, "ID:", "callNumber");
associateData (newItem, dataTags, "Notes:", "abstractNote");
newItem.title = doc.title;
if (dataTags["Title:"]) {
associateData (newItem, dataTags, "Title:", "title");
} else {
newItem.title = "No Title Found: Champlain Collection";
}
newItem.url = doc.location.href;
newItem.complete();
}
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();
var titles = doc.evaluate('//tr[1]/td[2]/font/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
items[next_title.href] = next_title.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,150 @@
{
"translatorID":"04c0db88-a7fc-4d1a-9cf7-471d0990acb1",
"translatorType":4,
"label":"Christian Science Monitor",
"creator":"Adam Crymble",
"target":"http://(features.csmonitor|www.csmonitor).com",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-08-06 17:00:00"
}
function detectWeb(doc, url) {
if (doc.location.href.match("search")) {
return "multiple";
} else if (doc.location.href.match("features")) {
return "newspaperArticle";
} else if (doc.evaluate('//div[@id="storyContent"]/h1', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "newspaperArticle";
}
}
//Christian Science Monitor translator. Code by Adam Crymble.
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("newspaperArticle");
if (doc.location.href.match("features.csmonitor")) {
newItem.title = doc.title;
if (doc.evaluate('//div[@class="story"][@id="main"]/p/strong', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
newItem.abstractNote = doc.evaluate('//div[@class="story"][@id="main"]/p/strong', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
}
if (doc.evaluate('//h3/span[@class="time-date"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
newItem.date = doc.evaluate('//h3/span[@class="time-date"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(" edition", '');
}
if (doc.evaluate('//h3/span', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var author = doc.evaluate('//h3/span', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
if (author.match("By ")) {
author = author.substr(3);
}
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
}
var title1 = doc.title;
//Some entries do not work for some reason unbeknownst to me; this flag catches the problem and prevents an error, but doesn't save the data properly.
if (title1.match("csmonitor")) {
newItem.title = title1.substr(0, title1.length-15);
} else {
newItem.title = "This Entry Cannot Be Saved";
newItem.abstractNote = "Entry must be entered manually";
}
} else {
//title
if (doc.evaluate('//div[@id="storyContent"]/h1', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var title1 = doc.evaluate('//div[@id="storyContent"]/h1', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
var words = title1.split(" ");
for (var i in words) {
words[i] = words[i][0].toUpperCase() + words[i].substr(1).toLowerCase();
}
title1 = words.join(" ");
newItem.title = title1;
} else {
newItem.title = "no title found";
}
//abstract note
if (doc.evaluate('//div[@id="storyContent"]/h2', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
newItem.abstractNote = doc.evaluate('//div[@id="storyContent"]/h2', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
}
//date
if (doc.evaluate('//div[@id="storyContent"]/p[@class="postdate"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var date1 = doc.evaluate('//div[@id="storyContent"]/p[@class="postdate"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
date1 = date1.replace(/from the /g, '');
date1 = date1.replace(/ edition/g, '');
newItem.date = date1;
}
//author
if (doc.evaluate('//address[@class="byline"]/strong', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var author = doc.evaluate('//address[@class="byline"]/strong', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
if (author.match("By ")) {
author = author.substr(3);
}
var words = author.split(" ");
for (var i in words) {
words[i] = words[i][0].toUpperCase() + words[i].substr(1).toLowerCase();
}
author = words.join(" ");
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
}
}
newItem.publicationTitle = "Christian Science Monitor";
newItem.url = doc.location.href;
newItem.complete();
}
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();
var titles = doc.evaluate('//p[@id="searchResultRow"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
if (!next_title.href.match("features")) {
items[next_title.href] = next_title.textContent;
}
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

67
translators/CiNii.js Normal file
View File

@ -0,0 +1,67 @@
{
"translatorID":"46291dc3-5cbd-47b7-8af4-d009078186f6",
"translatorType":4,
"label":"CiNii",
"creator":"Michael Berkowitz",
"target":"http://ci.nii.ac.jp/naid/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-05-15 00:30:00"
}
function detectWeb(doc, url) {
if (url.match(/(naid|QuotDisp)/)) {
return "journalArticle";
} else if (doc.evaluate('//a[contains(@href, "QuotDisp") or contains(@href, "/naid/")]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
}
}
function doWeb(doc, url) {
var n = doc.documentElement.namespaceURI;
var ns = n ? function(prefix) {
if (prefix == 'x') return n; else return null;
} : null;
var arts = new Array();
if (detectWeb(doc, url) == "multiple") {
var items = new Object();
var links = doc.evaluate('//a[contains(@href, "QuotDisp") or contains(@href, "/naid/")]', doc, ns, XPathResult.ANY_TYPE, null);
var link;
while (link = links.iterateNext()) {
items[link.href] = Zotero.Utilities.trimInternal(link.textContent);
}
items = Zotero.selectItems(items);
for (var i in items) {
arts.push(i);
}
} else {
arts = [url];
}
Zotero.Utilities.processDocuments(arts, function(doc) {
var biblink = doc.evaluate('//a[contains(text(), "BibTex")]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().href;
var newurl = doc.location.href;
var tags = new Array();
if (doc.evaluate('//a[@class="keyword"]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext()) {
var kws = doc.evaluate('//a[@class="keyword"]', doc, ns, XPathResult.ANY_TYPE, null);
var kw;
while (kw = kws.iterateNext()) {
tags.push(Zotero.Utilities.trimInternal(kw.textContent));
}
}
Zotero.Utilities.HTTP.doGet(biblink, function(text) {
var trans = Zotero.loadTranslator("import");
trans.setTranslator("9cb70025-a888-4a29-a210-93ec52da40d4");
trans.setString(text);
trans.setHandler("itemDone", function(obj, item) {
item.url = newurl;
item.attachments = [{url:item.url, title:item.title + " Snapshot", mimeType:"text/html"}];
item.tags = tags;
item.complete();
});
trans.translate();
});
}, function() {Zotero.done;});
Zotero.wait();
}

94
translators/CiteBase.js Normal file
View File

@ -0,0 +1,94 @@
{
"translatorID":"daa26181-71d4-48ef-8cac-54c06ff4c20e",
"translatorType":12,
"label":"Citebase",
"creator":"Michael Berkowitz",
"target":"^http://www\\.citebase\\.org/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-09-11 04:32:00"
}
function detectWeb(doc, url) {
if (url.match(/\/search/)) {
return "multiple";
} else if (url.match(/\/abstract/)) {
return "journalArticle";
}
}
function detectSearch(item) {
if(item.itemType == "journalArticle") {
return true;
}
return false;
}
function doWeb(doc, url) {
var articles = new Array();
if (detectWeb(doc, url) == "multiple") {
var links = doc.evaluate('//div[@class="rs_match"]/div/a[@class="abs_title"]', doc, null, XPathResult.ANY_TYPE, null);
var items = new Object();
var link;
while (link = links.iterateNext()) {
items[link.href] = link.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, function(doc) {
var biburl = doc.evaluate('//a[contains(text(), "BibTeX")]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href;
if (doc.evaluate('/html/body/div[@class="body"]/div[@class="abstract"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) var abs = Zotero.Utilities.trimInternal(doc.evaluate('/html/body/div[@class="body"]/div[@class="abstract"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent);
var translator = Zotero.loadTranslator("import");
translator.setTranslator("9cb70025-a888-4a29-a210-93ec52da40d4");
Zotero.Utilities.HTTP.doGet(biburl, function(text) {
translator.setString(text);
translator.setHandler("itemDone", function(obj, item) {
if (abs) {
if (abs.match(/^Abstract/)) {
item.abstractNote = abs.substr(9);
} else {
item.abstractNote = abs;
}
}
item.attachments = [{url:item.url, title:"Citebase Snapshot", mimeType:"text/html"}];
item.complete();
});
translator.translate();
});
}, function() {Zotero.done;});
Zotero.wait();
}
function doSearch(item) {
if(item.contextObject) {
var co = item.contextObject;
if(co.indexOf("url_ver=") == -1) {
co = "url_ver=Z39.88-2004&"+co;
}
co = co.replace(/(?:&|^)svc_id=[^&]*/, "");
} else {
var co = Zotero.Utilities.createContextObject(item);
}
Zotero.Utilities.HTTP.doGet("http://www.citebase.org/openurl?"+co+"&svc_id=bibtex", function(responseText, request) {
if(responseText.substr(0, 6) != "<?xml ") {
// read BibTeX
var translator = Zotero.loadTranslator("import");
translator.setTranslator("9cb70025-a888-4a29-a210-93ec52da40d4");
translator.setString(responseText);
translator.translate();
}
Zotero.done();
});
Zotero.wait();
}

111
translators/CiteSeer.js Normal file
View File

@ -0,0 +1,111 @@
{
"translatorID":"fa396dd4-7d04-4f99-95e1-93d6f355441d",
"translatorType":4,
"label":"CiteSeer",
"creator":"Simon Kornblith",
"target":"^http://(?:citeseer\\.ist\\.psu\\.edu/|citeseer\\.csail\\.mit\\.edu/|citeseer\\.ifi\\.unizh\\.ch/|citeseer\\.comp\\.nus\\.edu\\.sg/)",
"minVersion":"1.0.0b3.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-02-06 21:00:00"
}
function detectWeb(doc, url) {
var searchRe = /http:\/\/[^\/]+\/ci?s/;
if(searchRe.test(url)) {
return "multiple";
} else {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
if(doc.evaluate('/html/body/span[@class="m"]/pre', doc, nsResolver,
XPathResult.ANY_TYPE, null).iterateNext()) {
return "journalArticle";
}
}
}
function scrape(doc) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
// figure out what attachments to add
var attachments = new Array();
var results = doc.evaluate('/html/body/span[@class="m"]/table[@class="h"]/tbody/tr/td[4]/center/font/a',
doc, nsResolver, XPathResult.ANY_TYPE, null);
var elmt;
var acceptableTypes = ["PDF", "PS", "PS.gz"];
var mimeTypes = ["application/pdf", "application/postscript", "application/gzip"];
var resultsArray = [];
while (elmt = results.iterateNext()) {
resultsArray.push(elmt);
}
resultsArray = resultsArray.filter(function (element, index, array) {
return (acceptableTypes.indexOf(element.textContent.toString()) != -1);
});
resultsArray = resultsArray.sort(function (a,b) {
return (acceptableTypes.indexOf(a.textContent.toString()) -
acceptableTypes.indexOf(b.textContent.toString()));
});
if (resultsArray.length > 0) {
var elmt = resultsArray[0];
var kind = elmt.textContent.toString();
var index = acceptableTypes.indexOf(kind);
var attachment = {url:elmt.href, mimeType:mimeTypes[index],
title:"CiteSeer Full Text "+kind};
attachments.push(attachment);
}
var bibtex = doc.evaluate('/html/body/span[@class="m"]/pre/text()', doc, nsResolver,
XPathResult.ANY_TYPE, null).iterateNext();
if(bibtex) {
var translator = Zotero.loadTranslator("import");
translator.setTranslator("9cb70025-a888-4a29-a210-93ec52da40d4");
translator.setString(bibtex.nodeValue.toString());
translator.setHandler("itemDone", function(obj, item) {
if(item.url) { // add http to url
item.url = "http://"+item.url;
}
item.attachments = attachments;
item.complete();
});
translator.translate();
} else {
throw "No BibTeX found!";
}
}
function doWeb(doc, url) {
var searchRe = /http:\/\/([^\/]+)\/ci?s/;
var m = searchRe.exec(doc.location.href);
if(m) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var items = Zotero.Utilities.getItemArray(doc, doc, "^http://"+m[1]+"/[^/]+.html");
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();
} else {
scrape(doc);
}
}

58
translators/CiteULike.js Normal file
View File

@ -0,0 +1,58 @@
{
"translatorID":"8917b41c-8527-4ee7-b2dd-bcbc3fa5eabd",
"translatorType":4,
"label":"CiteULike",
"creator":"Sean Takats",
"target":"https?://(?:www\\.)?citeulike.org(?:.*/tag/[^/]*$|/search/|/journal/|/group/[0-9]+/library$|/\\?page=[0-9]+$|/.*article/[0-9]+$|/$)",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-02-01 19:30:00"
}
function detectWeb(doc, url){
var articleRe = /\/article\/[0-9]+$/;
var m = url.match(articleRe);
var newUris = new Array();
if (m){
return "journalArticle";
} else {
return "multiple";
}
}
function doWeb(doc, url){
var articleRe = /\/article\/[0-9]+$/;
var m = url.match(articleRe);
var newUris = new Array();
if (m){
newUris.push(url.replace(/citeulike\.org\//, "citeulike.org/endnote/"));
} else {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var elmt;
var elmts = doc.evaluate('//a[@class="title"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var items = new Object();
while(elmt = elmts.iterateNext()) {
items[elmt.href] = Zotero.Utilities.trimInternal(elmt.textContent);
}
items = Zotero.selectItems(items);
if(!items) return true;
for(var uri in items) {
newUris.push(uri.replace(/citeulike\.org\//, "citeulike.org/endnote/"));
}
}
Zotero.Utilities.HTTP.doGet(newUris, function(text) {
var translator = Zotero.loadTranslator("import");
translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
translator.setString(text);
translator.translate();
Zotero.done();
});
Zotero.wait();
}

View File

@ -0,0 +1,132 @@
{
"translatorID":"8451431a-895f-4732-8339-79eb6756d2f9",
"translatorType":4,
"label":"Civilization.ca",
"creator":"Adam Crymble",
"target":"http://collections.civilization.ca",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-09-02 13:40:00"
}
function detectWeb(doc, url) {
if (doc.evaluate('//tr/td[2]/a/font', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
} else if (doc.location.href.match("Display.php")) {
return "artwork";
}
}
//Civilization.ca translator. Code by Adam Crymble.
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 tagsContent = new Array();
var fieldTitle;
var newItem = new Zotero.Item("artwork");
var headers = doc.evaluate('//table[2]/tbody/tr/td[1]/span[@class="textb"]/b', doc, nsResolver, XPathResult.ANY_TYPE, null);
var contents = doc.evaluate('//tr[2]/td/table[2]/tbody/tr/td[2]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathCount = doc.evaluate('count (//table[2]/tbody/tr/td[1]/span[@class="textb"]/b)', doc, nsResolver, XPathResult.ANY_TYPE, null);
newItem.title = contents.iterateNext().textContent.replace(/^\s*|\s+$/g, '');
var dump = contents.iterateNext();
for (i=0; i<xPathCount.numberValue; i++) {
fieldTitle = headers.iterateNext().textContent.replace(/\s+/g, '');
if (fieldTitle == "Artist/Maker/Manufacturer") {
fieldTitle = " Artiste/Artisan/Fabricant";
} else if (fieldTitle == "Autreaffiliationculturelle") {
fieldTitle = "OtherCulturalAffiliation";
}
dataTags[fieldTitle] = Zotero.Utilities.cleanTags(contents.iterateNext().textContent.replace(/^\s*|\s*$/g, ''));
}
if (dataTags["Artist/Maker/Manufacturer"]) {
var author = dataTags["Artist/Maker/Manufacturer"];
if (author.match(" and ")) {
var authors = author.split(" and ");
for (var i in authors) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[i], "author"));
}
} else {
newItem.creators.push({lastName: author, creatorType: "creator"});
}
}
if (dataTags["OtherCulturalAffiliation"]) {
tagsContent = dataTags["OtherCulturalAffiliation"].split(/\n/);
for (var i = 0; i < tagsContent.length; i++) {
newItem.tags[i] = tagsContent[i];
}
}
if (dataTags["Collection"]) {
newItem.extra = "Collection: " + dataTags['Collection'];
}
associateData (newItem, dataTags, "ArtifactNumber", "callNumber");
associateData (newItem, dataTags, "Museum", "repository");
associateData (newItem, dataTags, "Measurements", "artworkSize");
associateData (newItem, dataTags, "BeginDate", "date");
associateData (newItem, dataTags, "EndDate", "date");
associateData (newItem, dataTags, "AdditionalInformation", "abstractNote");
associateData (newItem, dataTags, "Numérod'artefact", "callNumber");
associateData (newItem, dataTags, "Musée", "repository");
associateData (newItem, dataTags, "Mesures", "artworkSize");
associateData (newItem, dataTags, "Datededébut", "date");
associateData (newItem, dataTags, "Datedefin", "date");
associateData (newItem, dataTags, "Informationsupplémentaire", "abstractNote");
newItem.url = doc.location.href;
newItem.complete();
}
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();
var titles = doc.evaluate('//tr/td[2]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
if (next_title.textContent.match(/\w/)) {
items[next_title.href] = next_title.textContent;
}
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,68 @@
{
"translatorID":"a326fc49-60c2-405b-8f44-607e5d18b9ad",
"translatorType":4,
"label":"Code4Lib Journal",
"creator":"Michael Berkowitz",
"target":"http://journal.code4lib.org/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-01-25 20:00:00"
}
function detectWeb(doc, url) {
if (doc.evaluate('//h2[@class="articletitle"]/a', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
} else if (doc.evaluate('//h1[@class="articletitle"]/a', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "journalArticle";
}
}
function doWeb(doc, url) {
var items = new Object();
var articles = new Array();
var xpath = '//div[@class="article"]/h2[@class="articletitle"]/a';
if (detectWeb(doc, url) == "multiple") {
var xpath = '//div[@class="article"]/h2[@class="articletitle"]/a';
var titles = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null);
var next_title = titles.iterateNext();
while (next_title) {
items[next_title.href] = next_title.textContent;
next_title = titles.iterateNext();
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles.push(url);
}
Zotero.Utilities.processDocuments(articles, function(newDoc, url) {
var newItem = new Zotero.Item("journalArticle");
newItem.repository = "Code4Lib Journal";
newItem.publicationTitle = "The Code4Lib Journal";
newItem.ISSN = "1940-5758";
newItem.url = newDoc.location.href;
newItem.title = newDoc.evaluate('//div[@class="article"]/h1[@class="articletitle"]/a', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent;
newItem.abstractNote = newDoc.evaluate('//div[@class="article"]/div[@class="abstract"]/p', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent;
var issdate = newDoc.evaluate('//p[@id="issueDesignation"]', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent;
newItem.issue = issdate.match(/([^,]*)/)[0].match(/\d+/)[0];
newItem.date = issdate.match(/,\s+(.*)$/)[1];
var axpath = '//div[@class="article"]/div[@class="entry"]/p[1]/a';
var authors = newDoc.evaluate(axpath, newDoc, null, XPathResult.ANY_TYPE, null);
var next_author = authors.iterateNext();
while (next_author) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(next_author.textContent, "author"));
next_author = authors.iterateNext();
}
newItem.attachments.push({url:newDoc.location.href, title:"Code4Lib Journal Snapshot", mimeType:"text/html"});
newItem.complete();
}, function() {Zotero.done;});
Zotero.wait();
}

View File

@ -0,0 +1,69 @@
{
"translatorID":"a75e0594-a9e8-466e-9ce8-c10560ea59fd",
"translatorType":4,
"label":"Columbia University Press",
"creator":"Michael Berkowitz",
"target":"http://www.cup.columbia.edu/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-05-15 18:30:00"
}
function detectWeb(doc, url) {
if (url.match(/book\//)) {
return "book";
} else if (doc.evaluate('//p[@class="header"]/a/span[@class="_booktitle"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
}
}
function addTag(item, tag, xpath) {
item[tag] = Zotero.Utilities.trimInternal(doc.evaluate(xpath, doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent);
}
function doWeb(doc, url) {
var n = doc.documentElement.namespaceURI;
var ns = n ? function(prefix) {
if (prefix == 'x') return n; else return null;
} : null;
var books = new Array();
if (detectWeb(doc, url) == "multiple") {
var items = new Object();
var titles = doc.evaluate('//p[@class="header"]/a', doc, ns, XPathResult.ANY_TYPE, null);
var title;
while (title = titles.iterateNext()) {
items[title.href] = title.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
books.push(i);
}
} else {
books = [url];
}
Zotero.Utilities.processDocuments(books, function(doc) {
var item = new Zotero.Item("book");
item.title = Zotero.Utilities.trimInternal(doc.evaluate('//h1[@id="_booktitle"]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent);
var authors = Zotero.Utilities.trimInternal(doc.evaluate('//p[@id="_authors"]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent);
if (authors.match(/Edited/)) {
authors = Zotero.Utilities.trimInternal(authors.replace("Edited by", ""));
var autType = "editor";
} else {
var autType = "author";
}
var auts = authors.split(/,|\band\b/);
for each (var aut in auts) {
item.creators.push(Zotero.Utilities.cleanAuthor(aut, autType));
}
item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate('//p[@id="_desc"]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent);
item.date = Zotero.Utilities.trimInternal(doc.evaluate('//span[@id="_publishDate"]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent);
item.ISBN = Zotero.Utilities.trimInternal(doc.evaluate('//span[@id="_isbn"]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent);
item.publisher = Zotero.Utilities.trimInternal(doc.evaluate('//span[@id="_publisher"]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent);
item.complete();
}, function() {Zotero.done;});
Zotero.wait();
}

166
translators/Common-Place.js Normal file
View File

@ -0,0 +1,166 @@
{
"translatorID":"c3edb423-f267-47a1-a8c2-158c247f87c2",
"translatorType":4,
"label":"Common-Place",
"creator":"Frederick Gibbs",
"target":"http://www.common-place\\.|historycooperative\\.org/journals/cp",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-06-12 19:30:00"
}
function detectWeb(doc, url) {
if(doc.title.indexOf("Previous Issues") != -1 || doc.title.indexOf("Search Site") != -1 ) {
return "multiple";
} else {
return "journalArticle";
}
}
function scrape(doc) {
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");
newItem.publicationTitle = "Common-Place";
newItem.url = doc.location.href;
//get issue year and month
//these will determine what xpaths we use for title and author
var pubDate;
var dateRe = /<a href="\/vol-[0-9]{2}\/no-[0-9]{2}\/">(.*)<\/a><\/b>/;
var m = dateRe.exec(Zotero.Utilities.trimInternal(doc.getElementsByTagName("body")[0].innerHTML));
if(m) {
//newItem.title = Zotero.Utilities.trimInternal(Zotero.Utilities.unescapeHTML(m[1]));
pubDate = m[1];
} else {
pubDate = doc.evaluate('//div[@id="container"]/div[@id="top"]/p/b/a[2]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
}
var d;
//Zotero.debug(pubDate);
pubDateVolRE = /vol. (.*) · no. /;
d = pubDateVolRE.exec(pubDate);
newItem.volume = d[1];
pubDateVolRE = /no. (.*) ·/;
d = pubDateVolRE.exec(pubDate);
newItem.issue = d[1];
pubDateVolRE = /no. [0-9] · (.*)/;
d = pubDateVolRE.exec(pubDate);
newItem.date = d[1];
//usually the page begins with the article title or book title (of reviewed book)
//some pages have an image just before them, so we need to skip it if it's there.
var pLevel;
var m=doc.evaluate('//div[@id="content"]/p[1]/img', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
//if there is an image here, offset the xpath
if (m == null) {
pLevel = '//div[@id="content"]/p[1]';
} else {
pLevel = '//div[@id="content"]/p[2]';
}
//issues before 2004 have a table based layout, so a totally different xpath.
//check to see if we have anything, then try again if we don't.
var author;
var title;
author = doc.evaluate(pLevel+'/span[1]', doc, nsResolver, XPathResult.ANY_TYPE, null);
author = author.iterateNext();
if (author != null) {
//Zotero.debug("au"+author+"au");
var title = doc.evaluate(pLevel+'/span[2]', doc, nsResolver, XPathResult.ANY_TYPE, null);
//Zotero.debug("ti"+title+"ti");
title = title.iterateNext().textContent;
//determine if we have a book review
// if so, get the publication information
if (author.textContent.indexOf("Review by") != -1 ) {
newItem.title = String.concat("Review of ", title);
newItem.author = author.textContent.substring(10);
} else {
newItem.author = author.textContent;
newItem.title = title;
}
}
else { //we have older issue
//check if we are on a review
var review = doc.evaluate('/html/body/table/tbody/tr/td[2]/p[2]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
var temp = review.textContent;
if (temp.indexOf("Review") != -1) {
title = doc.evaluate('/html/body/table/tbody/tr/td[2]/p/i', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
title = "Review of " + title;
author = review.textContent.substring(10);
} else { //for articles
title = doc.evaluate('/html/body/table/tbody/tr/td[2]/p/b', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
author = doc.evaluate('/html/body/table/tbody/tr/td[2]/p[1]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(/\n/)[1];
//Zotero.debug(author);
}
newItem.author = author;
newItem.title = title;
}
newItem.attachments.push({document:doc, title:doc.title});
newItem.complete();
}
function doWeb(doc, url) {
var type = detectWeb(doc, url);
if (type == "multiple") {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
//create list of items
//what about home page (current issue table of contents?)
//for search result links: /html/body/table[2]/tbody/tr/td[2]/li[3]/a
//for previous issues: //tr/td/p/a/b (but we need to strip out volume links (starts with 'Volume')
var link;
var title;
var items = new Object();
var searchLinks = doc.evaluate('/html/body/table[2]/tbody/tr/td[2]/li/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
while (elmt = searchLinks.iterateNext()) {
Zotero.debug(elmt.textContent);
title = elmt.textContent;
link = elmt.href;
if (title && link){
items[link] = title;
}
}
items = Zotero.selectItems(items);
if(!items) {
return true;
}
var uris = new Array();
for(var i in items) {
uris.push(i);
}
Zotero.Utilities.processDocuments(uris, function(doc) { scrape(doc) },
function() { Zotero.done(); }, null);
Zotero.wait();
} else {
scrape(doc);
}
}

92
translators/Copernicus.js Normal file
View File

@ -0,0 +1,92 @@
{
"translatorID":"a8df3cb0-f76c-4e2c-a11e-5fa283f8010c",
"translatorType":4,
"label":"Copernicus",
"creator":"Michael Berkowitz",
"target":"http://www.(adv-geosci|adv-radio-sci|ann-geophys).net/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-04-24 14:30:00"
}
function detectWeb(doc, url) {
if (doc.evaluate('//iframe', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate('//li[a[contains(text(), "Abstract")]]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
} else if (doc.title.match(/Abstract/)) {
return "journalArticle";
}
}
function scrape(doc) {
var item = new Zotero.Item("journalArticle");
item.url = doc.location.href;
item.title = doc.evaluate('//span[@class="inhaltueber_16f"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent;
item.publicationTitle = doc.evaluate('//span[@class="ueberschrift"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(/\n/)[0];
item.repository = item.publicationTitle;
var authors = doc.evaluate('//td/span[3]/b', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent;
authors = authors.replace(/\d/g, "").replace(/,,/, ",").split(/(,|and)/);
for each (var aut in authors) {
if (!(aut == "and") && (aut.match(/\w/))) {
aut = Zotero.Utilities.trimInternal(aut);
names = aut.match(/(.*)\s([^\s]+)/);
item.creators.push({firstName:names[1], lastName:names[2], creatorType:"author"});
}
}
var voliss = doc.evaluate('//tr[3]/td/span[@class="lib_small"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent;
voliss = voliss.match(/^([^,]+),([^,]+),([^,]+),([^w]+)/);
item.journalAbbreviation = voliss[1];
item.volume = Zotero.Utilities.trimInternal(voliss[2]);
item.pages = Zotero.Utilities.trimInternal(voliss[3]);
item.year = Zotero.Utilities.trimInternal(voliss[4]);
item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate('//tr[3]/td/span[4]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.substr(10));
item.attachments = [
{url:item.url, title:item.publicationTitle + " Snapshot", mimeType:"text/html"},
{url:item.url.replace(".html", ".pdf"), title:item.publicationTitle + " PDF", mimeType:"application/pdf"}
];
item.complete();
}
function doWeb(doc, url) {
var arts = new Array();
if (detectWeb(doc, url) == "multiple") {
var items = new Object();
if (doc.evaluate('//iframe', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
var link = doc.evaluate('//iframe', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src;
Zotero.Utilities.HTTP.doGet(link, function(text) {
var links = text.match(/<a\s+target=\"_top\"\s+href=\"[^"]+\">[^<]+/g);
for each (var link in links) {
link = link.match(/href=\"([^"]+)\">(.*)/);
items[link[1].replace(/\.[^\.]+$/, ".html")] = Zotero.Utilities.trimInternal(link[2]) + "...";
}
items = Zotero.selectItems(items);
for (var i in items) {
arts.push(i);
}
Zotero.Utilities.processDocuments(arts, function(doc) {
scrape(doc);
}, function() {Zotero.done;});
});
} else {
var titles = doc.evaluate('//li[a[contains(text(), "Abstract")]]/span[@class="articletitle"]', doc, null, XPathResult.ANY_TYPE, null);
var links = doc.evaluate('//li[a[contains(text(), "Abstract")]]/a[1]', doc, null, XPathResult.ANY_TYPE, null);
var title;
var link;
while ((title = titles.iterateNext()) && (link = links.iterateNext())) {
items[link.href] = title.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
arts.push(i);
}
Zotero.Utilities.processDocuments(arts, function(doc) { scrape(doc);}, function() {Zotero.done;});
}
} else {
Zotero.Utilities.processDocuments([url], function(doc) {
scrape(doc);
}, function() {Zotero.done;});
}
Zotero.wait();
}

View File

@ -0,0 +1,72 @@
{
"translatorID":"8082115d-5bc6-4517-a4e8-abed1b2a784a",
"translatorType":4,
"label":"Copernicus2",
"creator":"Michael Berkowitz",
"target":"http://www.(adv-sci-res|astrophys-space-sci-trans|atmos-chem-phys|biogeosciences(-discuss)?|clim-past|electronic-earth|hydrol-earth-syst-sci|nat-hazards-earth-syst-sci|nonlin-processes-geophys|ocean-sci|soc-geogr|surv-perspect-integr-environ-soc|the-cryosphere).net/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-06-29 21:10:00"
}
function detectWeb(doc, url) {
if (doc.evaluate('//div[@id="publisher"]/iframe', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate('//td[*[a[contains(text(), "Abstract")]]]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
} else if (doc.title.match(/Abstract/)) {
return "journalArticle";
}
}
function getRIS(link) {
Zotero.Utilities.HTTP.doGet(link, function(text) {
var translator = Zotero.loadTranslator("import");
translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
translator.setString(text);
translator.setHandler("itemDone", function(obj, item) {
item.repository = "Copernicus Online Journals";
item.attachments[0].title = item.publicationTitle + " Snapshot";
item.attachments[0].mimeType = "text/html";
item.attachments[1].title = item.publicationTitle + " PDF";
item.complete();
});
translator.translate();
});
}
function doWeb(doc, url) {
var arts = new Array();
if (detectWeb(doc, url) == "multiple") {
var items = new Object();
if (doc.evaluate('//div[@id="publisher"]/iframe', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
var link = doc.evaluate('//div[@id="publisher"]/iframe', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src;
Zotero.Utilities.HTTP.doGet(link, function(text) {
var links = text.match(/<a\s+target=\"_top\"\s+href=\"[^"]+\">[^<]+/g);
for each (var link in links) {
link = link.match(/href=\"([^"]+)\">(.*)/);
items[link[1].replace(/\.[^\.]+$/, ".ris")] = Zotero.Utilities.trimInternal(link[2]) + "...";
}
items = Zotero.selectItems(items);
for (var i in items) {
getRIS(i);
}
});
} else {
var titles = doc.evaluate('//td[*[a[contains(text(), "Abstract")]]]/span[@class="pb_toc_article_title"]', doc, null, XPathResult.ANY_TYPE, null);
var links = doc.evaluate('//td[*[a[contains(text(), "Abstract")]]]//a[1]', doc, null, XPathResult.ANY_TYPE, null);
var title;
var link;
while ((title = titles.iterateNext()) && (link = links.iterateNext())) {
items[link.href] = title.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
getRIS(i.replace(".html", ".ris"));
}
}
} else {
getRIS(url.replace('.html', '.ris'));
}
Zotero.wait();
}

208
translators/Cornell LII.js Normal file
View File

@ -0,0 +1,208 @@
{
"translatorID":"930d49bc-44a1-4c22-9dde-aa6f72fb11e5",
"translatorType":4,
"label":"Cornell LII",
"creator":"Bill McKinney",
"target":"^http://www\\.law\\.cornell\\.edu/supct/html/.+",
"minVersion":"1.0.0b4.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2007-06-18 18: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;
var liiRegexp = /http:\/\/www\.law\.cornell\.edu\/supct\/html\/.+/
if(liiRegexp.test(url)) {
return "book";
} else {
var aTags = doc.getElementsByTagName("a");
for(var i=0; i<aTags.length; i++) {
if(articleRegexp.test(aTags[i].href)) {
return "multiple";
}
}
}
}
function associateMeta(newItem, metaTags, field, zoteroField) {
var field = metaTags.namedItem(field);
if(field) {
newItem[zoteroField] = field.getAttribute("content");
}
}
function scrape(doc) {
var caselawCourt = "U.S. Supreme Court";
var caselawJurisdiction = "Federal";
var caselawSourceReporter = "U.S.";
var caselawSourceVolume = "___";
var caselawSourceStartPage = "___";
var caselawParallelSourceVolume = "___";
var caselawParallelSourceStartPage = "___";
var caselawParallelSourceReporter = "___";
var caselawDecisionYear = "";
var newItem = new Zotero.Item("case");
newItem.url = doc.location.href;
newItem.language = "en-us";
newItem.court = "U.S. Supreme Court";
newItem.reporter = "U.S.";
// LII provides a bunch of meta tags to harvest
var metaTags = doc.getElementsByTagName("meta");
associateMeta(newItem, metaTags, "CASENAME", "title");
associateMeta(newItem, metaTags, "CASENAME", "caseName");
//associateMeta(newItem, metaTags, "DOCKET", "caselawDocket");
//associateMeta(newItem, metaTags, "PARTY1", "caselawParty1");
//associateMeta(newItem, metaTags, "PARTY2", "caselawParty2");
//associateMeta(newItem, metaTags, "ARGDATE", "caselawArguedDate");
//associateMeta(newItem, metaTags, "DECDATE", "dateDecided");
associateMeta(newItem, metaTags, "COURTBELOW", "history");
//associateMeta(newItem, metaTags, "ACTION", "caselawCourtAction");
var tmpCasename = newItem.caseName;
tmpCasename = Zotero.Utilities.capitalizeTitle(tmpCasename.toLowerCase());
tmpCasename = tmpCasename.replace("V.", "v.");
newItem.caseName = tmpCasename;
newItem.shortTitle = tmpCasename;
// judge
var j = metaTags.namedItem("AUTHOR");
if(j) {
newItem.creators.push({lastName:j.getAttribute("content"), creatorType:"judge", fieldMode:true});
}
// group meta tags
for(var i=0; i<metaTags.length; i++) {
var key = metaTags[i].getAttribute("name");
var value = metaTags[i].getAttribute("content");
if (key == "GROUP") {
newItem.tags.push(value);
}
}
// parse year out of decision date
var decdateField = metaTags.namedItem("DECDATE");
if(decdateField ) {
var decisionYearRegex = /(\w+)\s+(\d+),\s+(\d+)/
var decisionDateMatch = decisionYearRegex.exec(decdateField.getAttribute("content"));
var dy;
var dm;
var dd;
if (decisionDateMatch ) {
dm = decisionDateMatch[1];
dd = decisionDateMatch[2];
dy = decisionDateMatch [3];
caselawDecisionYear = dy;
newItem.dateDecided = dy + " " + dm + " " + dd;
}
}
// create attachment to pdf
var dyRegex = /^(.+)\/html\/(.+)(\.Z\w+)\.html$/;
var dyMatch = dyRegex.exec(newItem.url);
if (dyMatch) {
var pdfUrl = dyMatch[1]+"/pdf/"+dyMatch[2]+"P"+dyMatch[3];
newItem.attachments.push({url:pdfUrl, title:"PDF version", mimeType:"application/pdf", downloadable:true});
}
// parse disposition
var dis = doc.getElementsByTagName("DISPOSITION");
if (dis.length > 0) {
var tmpDis = dis[0].innerHTML;
tmpDis = tmpDis.replace(/\s+/g, " ");
newItem.title = newItem.title + " (" + tmpDis + ")";
newItem.caseName= newItem.caseName + " (" + tmpDis + ")";
}
// parse citation into parts so that bluebook can be constructed
var cite = doc.getElementsByTagName("CASENUMBER");
if (cite.length > 0) {
var citeRegex = /([0-9]+)\s+U\.S\.\s+([0-9]+)/;
var citeMatch = citeRegex.exec(cite[0].innerHTML);
if (citeMatch) {
caselawSourceVolume = citeMatch[1];
newItem.reporterVolume = citeMatch[1];
caselawSourceStartPage = citeMatch[2];
newItem.firstPage = citeMatch[2];
}
}
// look for offcite span element
var spanTags = doc.getElementsByTagName("span");
if (spanTags.length > 0) {
for(var i=0; i<spanTags.length; i++) {
if(spanTags[i].className == "offcite") {
var citeRegex = /([0-9]+)\s+U\.S\.\s+([0-9]+)/;
var citeMatch = citeRegex.exec(spanTags[i].innerHTML);
if (citeMatch) {
caselawSourceVolume = citeMatch[1];
newItem.reporterVolume = citeMatch[1];
caselawSourceStartPage = citeMatch[2];
newItem.firstPage = citeMatch[2];
}
break;
}
}
}
// bluebook citation
var bbCite = newItem.shortTitle + ", " +
caselawSourceVolume + " " +
caselawSourceReporter + " " +
caselawSourceStartPage;
// paralell cite
if (caselawParallelSourceVolume != "___") {
bbCite = bbCite + ", " + caselawParallelSourceVolume +
" " + caselawParallelSourceReporter + " " +
caselawParallelSourceStartPage;
}
// jurisdiction and year
bbCite = bbCite + " (" + caselawDecisionYear + ")";
// closing period
bbCite = "Bluebook citation: " + bbCite + ".";
newItem.notes.push({note:bbCite});
// parse out publication notice
var notice = doc.getElementsByTagName("NOTICE");
if (notice .length > 0) {
var tmpNotice= notice [0].innerHTML;
tmpNotice= tmpNotice.replace(/\s+/g, " ");
newItem.notes.push({note:tmpNotice});
}
newItem.complete();
}
function doWeb(doc, url) {
var liiRegexp = /http:\/\/www\.law\.cornell\.edu\/supct\/html\/.+/
if(liiRegexp.test(url)) {
scrape(doc);
} else {
var items = Zotero.Utilities.getItemArray(doc, doc, liiRegexp);
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();
}
}

View File

@ -0,0 +1,64 @@
{
"translatorID":"4363275e-5cc5-4627-9a7f-951fb58a02c3",
"translatorType":4,
"label":"Cornell University Press",
"creator":"Michael Berkowitz",
"target":"http://www.cornellpress.cornell.edu/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-05-15 19:30:00"
}
function detectWeb(doc, url) {
if (url.match("detail.taf")) {
return "book";
} else if (url.match("list.taf") || url.match("listsearch.taf")) {
return "multiple";
}
}
function doWeb(doc, url) {
var n = doc.documentElement.namespaceURI;
var ns = n ? function (prefix) {
if (prefix == 'x') return n; else return null;
} : null;
var books = new Array();
if (detectWeb(doc, url) == "multiple") {
var items = new Object();
var titles = doc.evaluate('//tr/td[2]/a', doc, ns, XPathResult.ANY_TYPE, null);
var title;
while (title = titles.iterateNext()) {
if (title.textContent.match(/\w+/)) items[title.href] = Zotero.Utilities.trimInternal(title.textContent);
}
items = Zotero.selectItems(items);
for (var i in items) {
books.push(i);
}
} else {
books = [url];
}
Zotero.Utilities.processDocuments(books, function(doc) {
var item = new Zotero.Item("book");
item.title = Zotero.Utilities.capitalizeTitle(doc.evaluate('//span[@class="bktitle"]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent);
var authors = doc.evaluate('//div[@id="detail"]/table/tbody/tr/td/form/a', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(/;/);
Zotero.debug(authors);
for each (var aut in authors) {
if (aut.match(/Translator/)) {
item.creators.push(Zotero.Utilities.cleanAuthor(aut.match(/^(.*)\s+\(/)[1], "translator"));
} else if (aut.match(/Editor/)) {
item.creators.push(Zotero.Utilities.cleanAuthor(aut.match(/^(.*)\s+\(/)[1], "editor"));
} else {
item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author"));
}
}
var bits = doc.evaluate('//div[@id="detail"]/table/tbody/tr/td/form', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent;
item.ISBN = bits.match(/ISBN:\s+([\d\-]+)/)[1];
item.date = bits.match(/\d{4}/)[0];
item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate('//div[@id="description"]', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent);
item.complete();
}, function() {Zotero.done;});
Zotero.wait();
}

89
translators/CrossRef.js Normal file
View File

@ -0,0 +1,89 @@
{
"translatorID":"11645bd1-0420-45c1-badb-53fb41eeb753",
"translatorType":8,
"label":"CrossRef",
"creator":"Simon Kornblith",
"target":"http://partneraccess.oclc.org/",
"minVersion":"1.0.0b3.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2007-09-15 21:00:00"
}
function detectSearch(item) {
if(item.itemType == "journalArticle") {
return true;
}
return false;
}
function processCrossRef(xmlOutput) {
xmlOutput = xmlOutput.replace(/<\?xml[^>]*\?>/, "");
// parse XML with E4X
var qr = new Namespace("http://www.crossref.org/qrschema/2.0");
try {
var xml = new XML(xmlOutput);
} catch(e) {
return false;
}
// ensure status is valid
var status = xml.qr::query_result.qr::body.qr::query.@status.toString();
if(status != "resolved" && status != "multiresolved") {
return false;
}
var query = xml.qr::query_result.qr::body.qr::query;
var item = new Zotero.Item("journalArticle");
// try to get a DOI
item.DOI = query.qr::doi.(@type=="journal_article").text().toString();
if(!item.DOI) {
item.DOI = query.qr::doi.(@type=="book_title").text().toString();
}
if(!item.DOI) {
item.DOI = query.qr::doi.(@type=="book_content").text().toString();
}
// try to get an ISSN (no print/electronic preferences)
item.ISSN = query.qr::issn[0].text().toString();
// get title
item.title = query.qr::article_title.text().toString();
// get publicationTitle
item.publicationTitle = query.qr::journal_title.text().toString();
// get author
item.creators.push(Zotero.Utilities.cleanAuthor(query.qr::author.text().toString(), "author", true));
// get volume
item.volume = query.qr::volume.text().toString();
// get issue
item.issue = query.qr::issue.text().toString();
// get year
item.date = query.qr::year.text().toString();
// get edition
item.edition = query.qr::edition_number.text().toString();
// get first page
item.pages = query.qr::first_page.text().toString();
item.complete();
return true;
}
function doSearch(item) {
if(item.contextObject) {
var co = item.contextObject;
if(co.indexOf("url_ver=") == -1) {
co = "url_ver=Z39.88-2004&"+co;
}
} else {
var co = Zotero.Utilities.createContextObject(item);
}
Zotero.Utilities.HTTP.doGet("http://www.crossref.org/openurl?req_dat=zter:zter321&"+co+"&noredirect=true", function(responseText) {
processCrossRef(responseText);
Zotero.done();
});
Zotero.wait();
}

View File

@ -0,0 +1,87 @@
{
"translatorID":"dbfcaa3e-082a-45a4-9619-9892f49399c1",
"translatorType":4,
"label":"Cyberpresse",
"creator":"Adam Crymble",
"target":"http://www.cyberpresse.ca",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-08-06 17:00:00"
}
function detectWeb (doc, url) {
if (doc.location.href.match("article")) {
return "newspaperArticle";
}
}
//Cyberpresse translator. Code by Adam Crymble
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 tagsContent = new Array();
var fieldTitle;
var newItem = new Zotero.Item("newspaperArticle");
if (doc.title.match("|")) {
var titleStuff = doc.title.split("|");
if (titleStuff[0].match(":")) {
var authorTitle = titleStuff[0].split(":");
newItem.title = authorTitle[1];
newItem.creators.push(Zotero.Utilities.cleanAuthor(authorTitle[0], "author"));
} else {
newItem.title = titleStuff[0];
}
} else {
newItem.title = doc.title;
}
var dataTagHTML = doc.getElementsByTagName("meta");
for (var i = 0 ; i < dataTagHTML.length ; i++) {
dataTags[dataTagHTML[i].getAttribute("name")] = Zotero.Utilities.cleanTags(dataTagHTML[i].getAttribute("content"));
}
if (doc.evaluate('//div[@id="nouvelle"]/p[@class="auteur"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var author = doc.evaluate('//div[@id="nouvelle"]/p[@class="auteur"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
}
if (doc.evaluate('//div[@id="nouvelle"]/p[@class="date"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
newItem.date = doc.evaluate('//div[@id="nouvelle"]/p[@class="date"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
}
associateData (newItem, dataTags, "summary", "abstractNote");
associateData (newItem, dataTags, "mediaarticle", "publicationTitle");
newItem.url = doc.location.href;
newItem.complete();
}
function doWeb(doc, url) {
var articles = new Array();
articles = [url];
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,170 @@
{
"translatorID":"625c6435-e235-4402-a48f-3095a9c1a09c",
"translatorType":4,
"label":"DBLP Computer Science Bibliography",
"creator":"Adam Crymble",
"target":"http://(search?|dblp?).mpi-inf",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-09-02 13:40:00"
}
function detectWeb(doc, url) {
if (doc.title.match("journals")) {
return "journalArticle";
} else if (doc.title.match("conf")) {
return "conferencePaper";
} else if (doc.title.match("DBLP entry")) {
return "bookSection";
}
}
//DBLP Computer Science Database Translator. Code by Adam Crymble.
//Doesn't work for multiple entries. Site uses a different URL for the search and single entry. Multiple code attached as comment.
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) {
} : null;
var dataTags = new Object();
var mediaType = detectWeb(doc, url);
if (mediaType == "bookSection") {
var newItem = new Zotero.Item("bookSection");
} else if (mediaType == "conferencePaper") {
var newItem = new Zotero.Item("conferencePaper");
} else if (mediaType == "journalArticle") {
var newItem = new Zotero.Item("journalArticle");
}
var xPathAllData = doc.evaluate('//pre', doc, nsResolver, XPathResult.ANY_TYPE, null);
var allData = xPathAllData.iterateNext().textContent.split("},");
var cleanFirstEntry = allData[0].indexOf(",");
allData[0] = allData[0].substr(cleanFirstEntry);
var headers = new Array();
var content = new Array();
var splitAllData;
for (var i = 0; i < allData.length-2; i++) {
splitAllData = allData[i].split("=");
headers.push(splitAllData[0].replace(/^\s*|\s*$|\W*/g, ''));
content.push(splitAllData[1].replace(/^\s*|\s*$|\{*/g, ''));
fieldTitle = headers[i].replace(",", '');
if (fieldTitle == "author") {
var authors = content[i].split("and");
for (var j =0; j<authors.length; j++) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[j], "author"));
}
} else if (fieldTitle == "editor") {
var editors = content[i].split("and");
for (var j =0; j<editors.length; j++) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(editors[j], "editor"));
}
} else {
dataTags[fieldTitle] = content[i];
}
}
if (mediaType == "conferencePaper") {
associateData (newItem, dataTags, "booktitle", "conferenceName");
} else {
associateData (newItem, dataTags, "booktitle", "bookTitle");
}
newItem.url = doc.location.href;
associateData (newItem, dataTags, "year", "date");
associateData (newItem, dataTags, "pages", "pages");
associateData (newItem, dataTags, "title", "title");
associateData (newItem, dataTags, "publisher", "publisher");
associateData (newItem, dataTags, "volume", "volume");
associateData (newItem, dataTags, "isbn", "ISBN");
associateData (newItem, dataTags, "series", "series");
associateData (newItem, dataTags, "journal", "publicationTitle");
associateData (newItem, dataTags, "number", "issue");
newItem.complete();
}
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();
/* Multiple code doesn't work due to Permission denied to get property HTMLDocument.documentElement error.
if (detectWeb(doc, url) == "multiple") {
var items = new Object();
//newer interface xPaths
if (doc.title.match("DEMO")) {
var titles = doc.evaluate('//a/font', doc, nsResolver, XPathResult.ANY_TYPE, null);
var links = doc.evaluate('//dt/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
items[links.iterateNext().href] = next_title.textContent;
}
//older interface xPaths
} else {
var titles = doc.evaluate('//td[3]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var links = doc.evaluate('//td[1]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
var split1;
var split2;
while (next_title = titles.iterateNext()) {
split1 = next_title.textContent.indexOf(":");
var title = next_title.textContent.substr(split1+2);
split2 = title.indexOf(".");
title = title.substr(0, split2);
items[links.iterateNext().href] = title;
}
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
*/
articles = [url];
//}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

101
translators/DSpace.js Normal file
View File

@ -0,0 +1,101 @@
{
"translatorID":"0abd577b-ec45-4e9f-9081-448737e2fd34",
"translatorType":4,
"label":"DSpace",
"creator":"Michael Berkowitz",
"target":"(dspace|upcommons.upc.edu)",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-06-06 08:45:00"
}
function detectWeb(doc, url) {
if (doc.evaluate('//table[@class="itemDisplayTable"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "document";
} else if (doc.evaluate('//table[@class="miscTable"]//td[2]', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate('//div[@id="main"]/ul[@class="browselist"]/li/a', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
}
}
var itemTypes = {
"Article":"journalArticle",
"Book":"book",
"Thesis":"thesis",
"Working Paper":"report",
"Technical Report":"report"
}
function doWeb(doc, url) {
var records = new Array();
if (detectWeb(doc, url) == "multiple") {
var items = new Object();
if (doc.evaluate('//div[@id="main"]/ul[@class="browselist"]/li/a', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
var xpath = '//div[@id="main"]/ul[@class="browselist"]/li/a';
} else {
var xpath = '//table[@class="miscTable"]//td[2]//a';
}
var rows = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null);
var row;
while (row = rows.iterateNext()) {
items[row.href] = row.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
records.push(i + '?mode=full');
}
} else {
records = [url.match(/^([^?]+)\??/)[1] + "?mode=full"];
}
Zotero.Utilities.processDocuments(records, function(newDoc) {
var values = new Object();
var fields = newDoc.evaluate('//table[@class="itemDisplayTable"]/tbody/tr/td[1]', newDoc, null, XPathResult.ANY_TYPE, null);
var data = newDoc.evaluate('//table[@class="itemDisplayTable"]/tbody/tr/td[2]', newDoc, null, XPathResult.ANY_TYPE, null);
var field2;
var datum2;
var newItem = new Zotero.Item();
while ((field2 = fields.iterateNext()) && (datum2 = data.iterateNext())) {
var field = field2.textContent.replace(/^dc\./, "");
var datum = datum2.textContent;
if (field == "contributor.author") {
var name = datum.split(",");
newItem.creators.push({firstName:name[1], lastName:name[0], creatorType:"author"});
} else if (field == "dentifier.uri") {
newItem.url = datum;
} else if (field == "title") {
newItem.title = datum;
} else if (field == "type") {
if (itemTypes[datum]) {
newItem.itemType = itemTypes[datum];
} else {
newItem.itemType = "document";
}
} else if (field == "description.abstract") {
newItem.abstractNote = datum;
} else if (field == "date.available") {
newItem.date = datum.replace(/T.*$/, "");
} else if (field == "subject") {
newItem.tags.push(datum);
} else if (field == "publisher") {
newItem.publisher = datum;
} else if (field == "identifier.issn") {
newItem.ISSN = datum;
} else if (field == "relation.ispartofseries") {
if (datum.match(/Vol/)) {
newItem.volume = datum.match(/\d+/)[0];
} else if (datum.match(/No/)) {
newItem.issue = datum.match(/\d+/)[0];
}
} else if (field == "rights") {
newItem.rights = datum;
}
}
if (newDoc.evaluate('//td[@class="standard"]/a', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) var pdf = newDoc.evaluate('//td[@class="standard"]/a', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().href;
newItem.attachments = [{url:newDoc.location.href, title:"DSpace Snapshot", mimeType:"text/html"}];
if (pdf) {
newItem.attachments.push({url:pdf, title:"DSpace PDF", mimeType:"application/pdf"});
}
newItem.complete();
}, function() {Zotero.done;});
}

View File

@ -0,0 +1,81 @@
{
"translatorID":"8b35ab14-f18a-4f69-8472-b2df18c984da",
"translatorType":4,
"label":"Davidson College Library",
"creator":"Michael Berkowitz",
"target":"http://www.lib.davidson.edu/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-04-01 04:50:00"
}
function detectWeb(doc, url) {
if (url.indexOf("log_in") == -1) {
if (url.indexOf("screen=Record") != -1) {
return "book";
} else {
return "multiple";
}
}
}
function doWeb(doc, url) {
var books = new Array();
if (detectWeb(doc, url) == "multiple") {
var items = Zotero.Utilities.getItemArray(doc, doc, 'screen=Record.html');
items = Zotero.selectItems(items);
for (var i in items) {
books.push(i.replace("Record.html", "MARCRecord.html"));
}
} else {
books = [url.replace("Record.html", "MARCRecord.html")];
}
var translator = Zotero.loadTranslator("import");
translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973");
var marc = translator.getTranslatorObject();
Zotero.Utilities.processDocuments(books, function(newDoc) {
var uri = newDoc.location.href;
var namespace = newDoc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var nonstandard = false;
var xpath;
var xpath = '//td[@class="body"]/p/table/tbody/tr[td[3]]';
var elmts = newDoc.evaluate(xpath, newDoc, nsResolver, XPathResult.ANY_TYPE, null);
var elmt;
var record = new marc.record();
while(elmt = elmts.iterateNext()) {
var field = Zotero.Utilities.trimInternal(newDoc.evaluate('./td[1]', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent);
if(field) {
var value = newDoc.evaluate('./td[3]', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
if(field == "LDR") {
record.leader = value;
} else if(field != "FMT") {
value = value.replace(/\$([a-z]) /g, marc.subfieldDelimiter+"$1");
var code = field.substring(0, 3);
var ind = "";
if(field.length > 3) {
ind = field[3];
if(field.length > 4) {
ind += field[4];
}
}
record.addField(code, ind, value);
}
}
}
var newItem = new Zotero.Item();
record.translate(newItem);
var domain = url.match(/https?:\/\/([^/]+)/);
newItem.repository = "Davidson College Library Catalog";
newItem.complete();
}, function() {Zotero.done;});
Zotero.wait();
}

View File

@ -0,0 +1,61 @@
{
"translatorID":"bbad0221-134b-495a-aa56-d77cfaa67ab5",
"translatorType":4,
"label":"Digital Humanities Quarterly",
"creator":"Michael Berkowitz",
"target":"http://www.digitalhumanities.org/(dhq)?",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-04-16 04:45:00"
}
function detectWeb(doc, url) {
if (doc.evaluate('//div[@class="DHQarticle"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "journalArticle";
} else if (doc.evaluate('//div[@id="mainContent"]/div/p', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
}
}
function scrape(doc, xpath, xdoc) {
return Zotero.Utilities.trimInternal(doc.evaluate(xpath, xdoc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent);
}
function doWeb(doc, url) {
var articles = new Array();
if (detectWeb(doc, url) == "multiple") {
var items = new Object;
var arts = doc.evaluate('//div[@id="mainContent"]/div/p/a', doc, null, XPathResult.ANY_TYPE, null);
var art;
while (art = arts.iterateNext()) {
items[art.href] = art.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i)
}
} else {
articles = [url];
}
Zotero.debug(articles);
Zotero.Utilities.processDocuments(articles, function(newDoc) {
var item = new Zotero.Item("journalArticle");
item.url = newDoc.location.href;
item.title = scrape(newDoc, '//h1[@class="articleTitle"]', newDoc);
var voliss = scrape(newDoc, '//div[@id="pubInfo"]', newDoc);
voliss = voliss.match(/(.*)Volume\s+(\d+)\s+Number\s+(\d+)/);
item.date = voliss[1];
item.volume = voliss[2];
item.issue = voliss[3];
var authors = newDoc.evaluate('//div[@class="author"]', newDoc, null, XPathResult.ANY_TYPE, null);
var aut;
while (aut = authors.iterateNext()) {
item.creators.push(Zotero.Utilities.cleanAuthor(scrape(newDoc, './a[1]', aut), "author"));
}
item.attachments = [{url:item.url, title:"DHQ Snapshot", mimeType:"text/html"}];
item.complete();
}, function() {Zotero.done;});
}

152
translators/EBSCOhost.js Normal file
View File

@ -0,0 +1,152 @@
{
"translatorID":"d0b1914a-11f1-4dd7-8557-b32fe8a3dd47",
"translatorType":4,
"label":"EBSCOhost",
"creator":"Simon Kornblith and Michael Berkowitz",
"target":"https?://[^/]+/(?:bsi|ehost)/(?:results|detail|folder)",
"minVersion":"1.0.0b3.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-08-06 17: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;
// See if this is a search results or folder results page
var searchResult = doc.evaluate('//ul[@class="result-list" or @class="folder-list"]/li/div[@class="result-list-record" or @class="folder-item"]', doc, nsResolver,
XPathResult.ANY_TYPE, null).iterateNext();
if(searchResult) {
return "multiple";
}
/*
var xpath = '//div[@class="citation-wrapping-div"]/dl[@class="citation-fields"]/dt[starts-with(text(), "Persistent link to this record")'
+' or starts-with(text(), "Vínculo persistente a este informe")'
+' or starts-with(text(), "Lien permanent à cette donnée")'
+' or starts-with(text(), "Permanenter Link zu diesem Datensatz")'
+' or starts-with(text(), "Link permanente al record")'
+' or starts-with(text(), "Link permanente para este registro")'
+' or starts-with(text(), "本記錄固定連結")'
+' or starts-with(text(), "此记录的永久链接")'
+' or starts-with(text(), "このレコードへのパーシスタント リンク")'
+' or starts-with(text(), "레코드 링크 URL")'
+' or starts-with(text(), "Постоянная ссылка на эту запись")'
+' or starts-with(text(), "Bu kayda sürekli bağlantı")'
+' or starts-with(text(), "Μόνιμος σύνδεσμος σε αυτό το αρχείο")]';
*/
var xpath = '//input[@id="ctl00_ctl00_MainContentArea_MainContentArea_topDeliveryControl_deliveryButtonControl_lnkExportImage"]';
var persistentLink = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
if(persistentLink) {
return "journalArticle";
}
}
var customViewStateMatch = /<input type="hidden" name="__CUSTOMVIEWSTATE" id="__CUSTOMVIEWSTATE" value="([^"]+)" \/>/
var host;
function fullEscape(text) {
return escape(text).replace(/\//g, "%2F").replace(/\+/g, "%2B");
}
function generateDeliverString(nsResolver, doc){
var hiddenInputs = doc.evaluate('//input[@type="hidden" and not(contains(@name, "folderHas"))]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var hiddenInput;
var deliverString ="";
while(hiddenInput = hiddenInputs.iterateNext()) {
deliverString = deliverString+hiddenInput.name.replace(/\$/g, "%24")+"="+encodeURIComponent(hiddenInput.value) + "&";
}
var otherHiddenInputs = doc.evaluate('//input[@type="hidden" and contains(@name, "folderHas")]', doc, nsResolver, XPathResult.ANY_TYPE, null);
while(hiddenInput = otherHiddenInputs.iterateNext()) {
deliverString = deliverString+hiddenInput.name.replace(/\$/g, "%24")+"="+escape(hiddenInput.value).replace(/\//g, "%2F").replace(/%20/g, "+") + "&";
}
deliverString = deliverString
+"&ctl00%24ctl00%24MainContentArea%24MainContentArea%24topDeliveryControl%24deliveryButtonControl%24lnkExportImage.x=5"
+"&ctl00%24ctl00%24MainContentArea%24MainContentArea%24topDeliveryControl%24deliveryButtonControl%24lnkExportImage.y=14";
return deliverString;
}
/*
* given the text of the delivery page, downloads an item
*/
function downloadFunction(text) {
var postLocation = /<form name="aspnetForm" method="post" action="([^"]+)"/
var m = postLocation.exec(text);
var deliveryURL = m[1].replace(/&amp;/g, "&");
m = customViewStateMatch.exec(text);
var downloadString = "__EVENTTARGET=&__EVENTARGUMENT=&__CUSTOMVIEWSTATE="+fullEscape(m[1])+"&__VIEWSTATE=&ctl00%24ctl00%24MainContentArea%24MainContentArea%24ctl00%24btnSubmit=Save&ctl00%24ctl00%24MainContentArea%24MainContentArea%24ctl00%24BibFormat=1&ajax=enabled";
Zotero.Utilities.HTTP.doPost(host+"/ehost/"+deliveryURL,
downloadString, function(text) { // get marked records as RIS
// load translator for RIS
var test = text.match(/UR\s+\-(.*)/g);
if (test[0].match("@")) text = text.replace(/UR\s+\-(.*)/, "");
if (text.match(/AB\s\s\-/)) text = text.replace(/AB\s\s\-/, "N2 -");
var translator = Zotero.loadTranslator("import");
translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
translator.setString(text);
translator.setHandler("itemDone", function(obj, item) {
if (text.match("L3")) {
item.DOI = text.match(/L3\s+\-\s*(.*)/)[1];
}
item.itemType = "journalArticle";
item.complete();
});
translator.translate();
Zotero.done();
});
}
function doWeb(doc, url) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var hostRe = new RegExp("^(https?://[^/]+)/");
var m = hostRe.exec(url);
host = m[1];
var searchResult = doc.evaluate('//ul[@class="result-list" or @class="folder-list"]/li/div[@class="result-list-record" or @class="folder-item"]', doc, nsResolver,
XPathResult.ANY_TYPE, null).iterateNext();
if(searchResult) {
var titlex = '//div[@class="result-list-record" or @class="folder-item-detail"]/span/a';
var titles = doc.evaluate(titlex, doc, nsResolver, XPathResult.ANY_TYPE, null);
var items = new Object();
var title;
while (title = titles.iterateNext()) {
items[title.href] = title.textContent;
}
var items = Zotero.selectItems(items);
if(!items) {
return true;
}
var uris = new Array();
for(var i in items) {
uris.push(i);
}
Zotero.Utilities.processDocuments(uris, function(newDoc){
var postURL = newDoc.evaluate('//form[@name="aspnetForm"]/@action', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
postURL = host+"/ehost/"+postURL.nodeValue;
var deliverString = generateDeliverString(nsResolver, newDoc);
Zotero.Utilities.HTTP.doPost(postURL, deliverString, downloadFunction);
});
} else {
var postURL = doc.evaluate('//form[@name="aspnetForm"]/@action', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
postURL = host+"/ehost/"+postURL.nodeValue;
var deliverString = generateDeliverString(nsResolver, doc);
Zotero.Utilities.HTTP.doPost(postURL, deliverString, downloadFunction);
}
Zotero.wait();
}

109
translators/ERIC.js Normal file
View File

@ -0,0 +1,109 @@
{
"translatorID":"e4660e05-a935-43ec-8eec-df0347362e4c",
"translatorType":4,
"label":"ERIC",
"creator":"Ramesh Srigiriraju",
"target":"^http://(?:www\\.)?eric\\.ed\\.gov/",
"minVersion":"1.0.0b4.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-06-03 19:40:00"
}
function detectWeb(doc, url) {
var namespace=doc.documentElement.namespaceURI;
var nsResolver=namespace?function(prefix) {
return (prefix=="x")?namespace:null;
}:null;
var searchpath='//form[@name="searchResultsForm"][@id="searchResultsForm"]';
if(doc.evaluate(searchpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext())
return "multiple";
var singpath='//tr/td[@class="primaryHeader"][contains(text(), "Result Details")]';
if(doc.evaluate(singpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var typepath='//tr[td/strong/text()="Pub Types:"]/td[2]/text()';
var typestr=doc.evaluate(typepath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue;
var typereg=new RegExp("([^;/\-]+)");
var typearr=typereg.exec(typestr);
if(typearr[1]=="Journal Articles")
return "journalArticle";
if(typearr[1]=="Information Analyses")
return "journalArticle";
if(typearr[1]="Machine")
return "computerProgram";
if(typearr[1]="Computer Programs")
return "computerProgram";
if(typearr[1]="Dissertations")
return "thesis";
if(typearr[1]="Reports")
return "report";
if(typearr[1]="Non")
return "audioRecording";
if(typearr[1]="Legal")
return "statute";
else
return "book";
}
}
function doWeb(doc, url) {
var namespace=doc.documentElement.namespaceURI;
var nsResolver=namespace?function(prefix) {
return (prefix=="x")?namespace:null;
}:null;
var searchpath='//form[@name="searchResultsForm"][@id="searchResultsForm"]';
if(doc.evaluate(searchpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var string="http://eric.ed.gov/ERICWebPortal/custom/portlets/clipboard/performExport.jsp";
var idpath='//a[img]/@id';
var ids=doc.evaluate(idpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
var items=new Array();
var titlpath='//tr[1]/td[1]/p/a';
var titlerows=doc.evaluate(titlpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
var id;
while(id=ids.iterateNext())
items[id.nodeValue]=Zotero.Utilities.cleanTags(Zotero.Utilities.cleanString(titlerows.iterateNext().textContent));
items=Zotero.selectItems(items);
var string="http://eric.ed.gov/ERICWebPortal/custom/portlets/clipboard/performExport.jsp?";
for(var ids in items)
string+="accno="+ids+"&";
string+="texttype=endnote&citationtype=brief&Download.x=86&Download.y=14";
Zotero.Utilities.HTTP.doGet(string, function(text) {
var trans=Zotero.loadTranslator("import");
trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
trans.setString(text);
trans.setHandler("itemDone", function(obj, newItem) {
var linkpath='//tbody[tr/td/a/@id="'+newItem.itemID+'"]/tr/td/p/a[@class="action"]';
var link=doc.evaluate(linkpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
if(link)
newItem.attachments.push({url:link.href, title:newItem.title, mimeType:"application/pdf"});
newItem.complete();
});
trans.translate();
Zotero.done();
});
Zotero.wait();
}
var singpath='//tr/td[@class="primaryHeader"][contains(text(), "Result Details")]';
if(doc.evaluate(singpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var idpath='//input[@type="hidden"][@name="accno"]/@value';
var idpath2='//meta[@name="eric #"]/@content';
var id = url.match(/accno=([^&]+)/)[1];
var string="http://eric.ed.gov/ERICWebPortal/custom/portlets/clipboard/performExport.jsp?accno=";
string+= id+"&texttype=endnote&citationtype=brief&Download.x=86&Download.y=14";
Zotero.Utilities.HTTP.doGet(string, function(text) {
var trans=Zotero.loadTranslator("import");
trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
trans.setString(text);
trans.setHandler("itemDone", function(obj, newItem) {
var linkpath='//tr/td/p[img/@alt="PDF"]/a';
var link=doc.evaluate(linkpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
if(link)
newItem.attachments.push({url:link.href, title:newItem.title, mimeType:"application/pdf"});
newItem.complete();
});
trans.translate();
Zotero.done();
});
Zotero.wait();
}
}

View File

@ -0,0 +1,94 @@
{
"translatorID":"5af42734-7cd5-4c69-97fc-bc406999bdba",
"translatorType":4,
"label":"ESA Journals",
"creator":"Michael Berkowitz",
"target":"http://www.esajournals.org/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-07-10 06:15:00"
}
function detectWeb(doc, url) {
if (url.indexOf("get-toc") != -1 || url.indexOf("searchtype") != -1) {
return "multiple";
} else if (url.indexOf("get-document") != -1 || url.indexOf("get-abstract") != -1) {
return "journalArticle";
}
}
function senCase(string) {
var smallwords = Array("AND", "A", "IN", "THE", "BY", "OF");
var sen = string.split(/\b/);
for (var i = 0 ; i < sen.length; i++) {
if (sen[i].match(/\w+/)) {
if (smallwords.indexOf(sen[i]) != -1 && i != 0) {
sen[i] = sen[i].toLowerCase();
} else {
sen[i] = sen[i][0] + sen[i].substring(1).toLowerCase();
}
}
}
return sen.join("");
}
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();
var resultItems = doc.evaluate('//div[@class="nocolumn"][@id="content"]/div//*[@class="group"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_item;
while (next_item = resultItems.iterateNext()) {
var link = doc.evaluate('.//a[1]', next_item, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href;
var title = senCase(doc.evaluate('.//*[@class="title"]', next_item, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent);
items[link] = title;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles.push(url);
}
Zotero.Utilities.processDocuments(articles, function(newDoc) {
var newlink = newDoc.evaluate('//a[text() = "Create Reference"]', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href;
var itemurl = newDoc.location.href;
if (newDoc.evaluate('//a[text() = "Full Text"]', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
itemurl = newDoc.evaluate('//a[text() = "Full Text"]', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href;
}
if (newDoc.evaluate('//div[@class="doc-head"]/p[contains(text(), "DOI")][@class="info"]', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var doi = newDoc.evaluate('//div[@class="doc-head"]/p[contains(text(), "DOI")][@class="info"]', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
doi = Zotero.Utilities.trimInternal(doi.substr(4));
}
var issn = newDoc.evaluate('//div[@id="pageTitle"]/p/a', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href.match(/issn=([^&]+)/)[1];
newlink = newlink.replace('cite-builder', 'download-citation&t=refman&site=esaonline');
Zotero.Utilities.HTTP.doGet(newlink, 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) {
item.url = decodeURIComponent(itemurl);
if (doi) item.DOI = decodeURIComponent(doi);
var bits = new Array(issn, item.volume, item.issue);
var pdfurl = 'http://www.esajournals.org/archive/' + bits.join("/") + "/pdf/i" + bits.join("-") + "-" + item.pages.match(/\d+/)[0] + ".pdf";
item.attachments = [
{url:item.url, title:"ESA Journals Snapshot", mimeType:"text/html"},
{url:pdfurl, title:"ESA Full Text PDF", mimeType:"application/pdf"}
];
item.complete();
});
translator.translate();
Zotero.done();
});
}, function() {Zotero.done;});
Zotero.wait();
}

174
translators/ESpacenet.js Normal file
View File

@ -0,0 +1,174 @@
{
"translatorID":"176948f7-9df8-4afc-ace7-4c1c7318d426",
"translatorType":4,
"label":"ESpacenet",
"creator":"Gilles Poulain",
"target":"http://v3.espacenet.com/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-09-02 13:40:00"
}
function detectWeb(doc, url) {
if(doc.location.href.match("results?")) {
return "multiple";
} else if (doc.location.href.match("textdoc")) {
return "patent";
}
}
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();
var titles = doc.evaluate('//td[3]/strong/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
items[next_title.href] = next_title.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}
function getItem(reftext,re) {
var item = reftext.match(re);
return item[1];
}
function scrape(doc,url) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
//Get title
var xpath = "/html/body/form/table[2]/tbody/tr[1]/td[3]/h2";
if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){
var title = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent);
var title1 = title.split(" ");
for (var j in title1) {
title1[j] = title1[j][0].toUpperCase() + title1[j].substr(1).toLowerCase();
}
title = title1.join(" ");
}
//Get Abstract
var xpath = '//td[@id="abCell"]';
if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){
var abstract = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent);
}
//Get Applicant
var xpath = "//table[1]/tbody/tr/td[1]/table/tbody/tr[4]/td[2]";
if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){
var applicant = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent);
}
//Get application number
var xpath = "//table[1]/tbody/tr/td[1]/table/tbody/tr[8]/td[2]";
if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){
var anumber = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent);
}
//Get patent number
var xpath = "//table[1]/tbody/tr/td[1]/table/tbody/tr[1]/td[2]";
if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){
var pnumber = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent);
}
//Get CIB
var xpath = "//table[1]/tbody/tr/td[1]/table/tbody/tr[6]/td[2]";
if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){
var CIBnumber = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent);
}
//Get ECLA
var xpath = "//table[1]/tbody/tr/td[1]/table/tbody/tr[7]/td[2]";
if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){
var tmpECLAnumber = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent);
tmpECLAnumber = tmpECLAnumber.substr(24);
tmpECLAnumber = tmpECLAnumber.replace(/\)+/g, '; ');
var aus = tmpECLAnumber.split("; ");
var ECLAnumber = "";
for (var i=0; i< aus.length/2 ; i++){
ECLAnumber = ECLAnumber + aus[i] + "; "
}
}
//Get priority number
var xpath = "//table[1]/tbody/tr/td[1]/table/tbody/tr[9]/td[2]";
if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){
var prnumber = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent);
}
//Get date
var xpath = "//table[1]/tbody/tr/td[1]/table/tbody/tr[2]/td[2]";
if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){
var date = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent);
}
//Get Creators
var xpath = "//table[1]/tbody/tr/td[1]/table/tbody/tr[3]/td[2]";
if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){
var author = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent);
}
//Create Zotero Ref
var newArticle = new Zotero.Item('patent');
newArticle.url = doc.location.href;
newArticle.title = title;
newArticle.date = date;
newArticle.abstractNote = abstract;
newArticle.assignee = applicant;
newArticle.patentNumber = pnumber;
newArticle.priorityNumbers = prnumber;
newArticle.applicationNumber = anumber;
newArticle.extra = "CIB: " + CIBnumber + "\nECLA: " + ECLAnumber
var author1 = author.split("; ");
;
for (var m = 0; m< author1.length; m++) {
if (author1[m].match(/\(/)) {
author1[m] = author1[m].substr(0, author1[m].length-5);
}
words = author1[m].split(/\s/);
for (var j in words) {
words[j] = words[j][0].toUpperCase() + words[j].substr(1).toLowerCase();
}
var inventor = '';
for (var k = 1; k < words.length; k++) {
inventor = inventor +words[k] + " ";
if (k == words.length-1) {
inventor = inventor +words[0];
newArticle.creators.push(Zotero.Utilities.cleanAuthor(inventor, "inventor"));
}
}
}
newArticle.complete();
}

View File

@ -0,0 +1,73 @@
{
"translatorID":"b86bb082-6310-4772-a93c-913eaa3dfa1b",
"translatorType":4,
"label":"Early English Books Online",
"creator":"Michael Berkowitz",
"target":"http://[^/]*eebo.chadwyck.com[^/]*/search",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-02-11 19:30:00"
}
function detectWeb(doc, url) {
if (doc.title == "Search Results - EEBO") {
return "multiple";
} else if (doc.title != "Basic Search - EEBO") {
return "book";
}
}
function doWeb(doc, url) {
var eeboIDs = new Array();
var hostRegexp = new RegExp("^(https?://[^/]+)/");
var hMatch = hostRegexp.exec(url);
var host = hMatch[1];
if (doc.title == "Search Results - EEBO") {
var items = new Object();
Zotero.debug("search page");
var IDxpath = '//td[3]/script';
var Titlexpath = '//td[3]/i';
var new_ids = doc.evaluate(IDxpath, doc, null, XPathResult.ANY_TYPE, null);
var new_titles = doc.evaluate(Titlexpath, doc, null, XPathResult.ANY_TYPE, null);
var next_id = new_ids.iterateNext();
var next_title = new_titles.iterateNext();
var IDRegex = /'(\d+)'/;
while (next_id) {
items[next_id.textContent.match(IDRegex)[1]] = next_title.textContent;
next_id = new_ids.iterateNext();
next_title = new_titles.iterateNext();
}
items = Zotero.selectItems(items);
for (var i in items) {
eeboIDs.push(i);
}
} else {
var IDRegex = /&ID=(\w+)&/
var eeboid = url.match(IDRegex)[1];
if (eeboid[0] == "D") {
eeboid = eeboid.slice(7, 14);
}
eeboIDs.push(eeboid);
}
Zotero.debug(eeboIDs);
for (var i = 0 ; i < eeboIDs.length ; i++) {
var postString = 'cit_format=RIS&Print=Print&cit_eeboid=' + eeboIDs[i] + '&EeboId=' + eeboIDs[i];
var new_eeboid = eeboIDs[i]
Zotero.Utilities.HTTP.doPost(host+'/search/print', postString, function(text) {
// load translator for RIS
var translator = Zotero.loadTranslator("import");
translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
translator.setString(text.substring(17));
translator.setHandler("itemDone", function(obj, item) {
item.url = host+'/search/full_rec?SOURCE=pgimages.cfg&ACTION=ByID&ID=' + new_eeboid + '&FILE=../session/1190302085_15129&SEARCHSCREEN=CITATIONS&SEARCHCONFIG=config.cfg&DISPLAY=ALPHA';
item.complete();
});
translator.translate();
Zotero.done();
});
}
}

View File

@ -0,0 +1,95 @@
{
"translatorID":"7e51d3fb-082e-4063-8601-cda08f6004a3",
"translatorType":4,
"label":"Education Week",
"creator":"Ben Parr",
"target":"^https?://(?:www\\.|blogs\\.|www2\\.)?edweek",
"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='//meta[@name="Story_type"]/@content';
var temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext();
if(temp)
{
if(temp.value=="Blog")
{return "blogPost";}
if(temp.value.indexOf("Story")>-1)
{return "magazineArticle";}
}
}
function associateMeta(newItem, metaTags, field, zoteroField) {
if(metaTags[field]) {
newItem[zoteroField] = metaTags[field];
}
}
function scrape(doc, url) {
var newItem = new Zotero.Item("magazineArticle");
if(url&&url.indexOf("blogs.edweek.org")>-1)
{newItem.itemType="blogPost";}
newItem.url = doc.location.href;
var metaTags = new Object();
var metaTagHTML = doc.getElementsByTagName("meta");
var i;
for (i = 0 ; i < metaTagHTML.length ; i++) {
metaTags[metaTagHTML[i].getAttribute("name")]=Zotero.Utilities.cleanTags(metaTagHTML[i].getAttribute("content"));
}
associateMeta(newItem, metaTags, "Title", "title");
associateMeta(newItem, metaTags, "Cover_date", "date");
associateMeta(newItem, metaTags, "Description", "abstractNote");
associateMeta(newItem, metaTags, "ArticleID", "accessionNumber");
associateMeta(newItem,metaTags,"Source","publicationTitle");
if (metaTags["Authors"]) {
var author = Zotero.Utilities.cleanString(metaTags["Authors"]);
if (author.substr(0,3).toLowerCase() == "by ") {
author = author.substr(3);
}
var authors = author.split(" and ");
for each(var author in authors) {
var words = author.split(" ");
for (var i in words) {
words[i] = words[i][0].toUpperCase() +words[i].substr(1).toLowerCase();
}
author = words.join(" ");
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
}
}
newItem.complete();
}
function doWeb(doc,url)
{
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var xpath='//meta[@name="Story_type"]/@content';
var temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext();
if(temp)
{
if(temp.value.indexOf("Story")>-1 || temp.value=="Blog")
{scrape(doc,url);}
}
}

139
translators/Edutopia.js Normal file
View File

@ -0,0 +1,139 @@
{
"translatorID":"3f44a651-8b6b-4591-8ca4-4bfb943a13f4",
"translatorType":4,
"label":"Edutopia",
"creator":"Adam Crymble",
"target":"http://www.edutopia.org",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-06-20 20:45:00"
}
function detectWeb(doc, url) {
var blog1 = 0;
if (doc.title.match("blog")) {
blog1 = 1;
}
if (doc.location.href.match("search")) {
return "multiple";
} else if (blog1 == 0 && doc.evaluate('//h1', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "newspaperArticle";
}
}
//Edutopia.org translator. Code by Adam Crymble
function associateMeta(newItem, metaTags, field, zoteroField) {
if(metaTags[field]) {
newItem[zoteroField] = metaTags[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 author;
var authorCheck = 0;
var tagsContent = new Array();
var newItem = new Zotero.Item("newspaperArticle");
//title
var title1 = doc.title.split("|");
newItem.title = title1[0];
//author
if (doc.evaluate('//div[@id="article"]/h4/a', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
author = doc.evaluate('//div[@id="article"]/h4/a', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
authorCheck = 1;
} else if (doc.evaluate('//div[@id="pollpage"]/p/a', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
author = doc.evaluate('//div[@id="pollpage"]/p/a', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
authorCheck = 1;
} else if (doc.evaluate('//div[@class="blog"]/h4', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
author = doc.evaluate('//div[@class="blog"]/h4', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
authorCheck = 1;
}
if (authorCheck == 1) {
if (author.toLowerCase().match(/^by /)) {
author = author.substr(3);
}
Zotero.debug(author);
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
}
//abstract
if (doc.evaluate('//div[@class="dek"]/h3', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
newItem.abstractNote = (doc.evaluate('//div[@class="dek"]/h3', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent);
}
//date
if (doc.evaluate('/span[@class="blog_date"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
newItem.date = doc.evaluate('/span[@class="blog_date"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
}
var metaTags = new Object();
var metaTagHTML = doc.getElementsByTagName("meta");
for (var i = 0 ; i < metaTagHTML.length ; i++) {
metaTags[metaTagHTML[i].getAttribute("name")] = Zotero.Utilities.cleanTags(metaTagHTML[i].getAttribute("content"));
}
if (metaTags["keywords"]) {
tagsContent = (metaTags["keywords"].split(', '));
}
for (var i = 0; i < tagsContent.length; i++) {
newItem.tags[i] = tagsContent[i];
}
associateMeta (newItem, metaTags, "description", "abstractNote");
newItem.publication = "Edutopia.org"
newItem.url = doc.location.href;
newItem.complete();
}
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();
var titles = doc.evaluate('//dt[@class="title"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
items[next_title.href] = next_title.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [url];
}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,160 @@
{
"translatorID":"00ce0d68-9205-40e6-91f4-c96f7ab296c2",
"translatorType":4,
"label":"Eighteenth Century Collections Online",
"creator":"Adam Crymble",
"target":"http://galenet.galegroup.com",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-09-02 13:40:00"
}
function detectWeb(doc, url) {
if (doc.evaluate('//td[2][@class="stnd"]/a/i/b', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
} else if (doc.evaluate('//td[3]/span[@class="stnd"]/a', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "bookSection";
} else if (doc.evaluate('//span[@class="stnd"]/b', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "book";
}
}
//Eighteenth Century Collections Online translator. Code by Adam Crymble
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 tagsContent = new Array();
var fieldTitle;
var newItem = new Zotero.Item("book");
var headers = doc.evaluate('//td[1][@class="stnd"]/b', doc, nsResolver, XPathResult.ANY_TYPE, null);
var contents = doc.evaluate('//td[2][@class="stnd"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
while (fieldTitle = headers.iterateNext()) {
fieldTitle = fieldTitle.textContent.replace(/\s+/g, '');
fieldContent = contents.iterateNext().textContent;
while (fieldContent.length<2) {
if (fieldContent.match(/\d/)) {
break;
} else {
fieldContent = contents.iterateNext().textContent;
}
}
dataTags[fieldTitle] = fieldContent.replace(/^\s*|\s*$/g, '');
}
if (dataTags["Author"]) {
if (dataTags["Author"].match(/\n/)) {
var author = dataTags["Author"].split(/\n/);
dataTags["Author"] = author[0];
}
if (dataTags["Author"].match(", ")) {
var author = dataTags["Author"].split(", ");
author = author[1] + " " + author[0];
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
} else {
newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["Author"], "author"));
}
}
if (dataTags["GaleDocumentNumber"]) {
newItem.extra = "Gale Document Number: " + dataTags["GaleDocumentNumber"];
}
if (dataTags["18thCenturyMicrofilmReel#"]) {
newItem.locInArchive = "18th Century Microfilm Reel #: " + dataTags["18thCenturyMicrofilmReel#"];
}
if (dataTags["Imprint"]) {
if (dataTags["Imprint"].match(": ")) {
var place1 = dataTags["Imprint"].split(": ");
newItem.place = place1[0];
if (place1[1].match(", ")) {
var pub1 = place1[1].split(", ");
newItem.publisher = pub1[0];
newItem.date = pub1[1];
} else {
newItem.publisher = place1[1];
}
} else {
newItem.publisher = dataTags["Imprint"];
}
}
associateData (newItem, dataTags, "Title", "title");
associateData (newItem, dataTags, "Language", "language");
associateData (newItem, dataTags, "Pages", "page");
associateData (newItem, dataTags, "SourceLibrary", "repository");
associateData (newItem, dataTags, "Volume", "volume");
associateData (newItem, dataTags, "Notes", "abstractNote");
newItem.url = doc.location.href;
newItem.complete();
}
function doWeb(doc, url) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var items = new Object();
var articles1 = new Array();
if (detectWeb(doc, url) == "multiple") {
var titles = doc.evaluate('//td[2][@class="stnd"]/a/i/b', doc, nsResolver, XPathResult.ANY_TYPE, null);
var links = doc.evaluate('//td[2][@class="stnd"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
var link = links.iterateNext();
while (link.textContent!="Full Citation") {
link = links.iterateNext();
}
items[link.href] = next_title.textContent;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles1.push(i);
}
} else if (detectWeb(doc, url) == "bookSection") {
var links = doc.evaluate('//td[3]/span[@class="stnd"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var articles = links.iterateNext();
Zotero.debug(articles);
articles1.push(articles.href);
} else {
articles1 = [url];
}
Zotero.Utilities.processDocuments(articles1, scrape, function() {Zotero.done();});
Zotero.wait();
}

View File

@ -0,0 +1,66 @@
{
"translatorID":"951c027d-74ac-47d4-a107-9c3069ab7b48",
"translatorType":4,
"label":"Embedded RDF",
"creator":"Simon Kornblith",
"target":null,
"minVersion":"1.0.0b3.r1",
"maxVersion":"",
"priority":400,
"inRepository":true,
"lastUpdated":"2008-03-14 18:00:00"
}
function detectWeb(doc, url) {
if (url.indexOf("reprint") != -1) return false;
var metaTags = doc.getElementsByTagName("meta");
for(var i=0; i<metaTags.length; i++) {
var tag = metaTags[i].getAttribute("name");
if(tag && tag.substr(0, 3).toLowerCase() == "dc.") {
return "webpage";
}
}
return false;
}
function doWeb(doc, url) {
var dc = "http://purl.org/dc/elements/1.1/";
// load RDF translator, so that we don't need to replicate import code
var translator = Zotero.loadTranslator("import");
translator.setTranslator("5e3ad958-ac79-463d-812b-a86a9235c28f");
translator.setHandler("itemDone", function(obj, newItem) {
// use document title if none given in dublin core
if(!newItem.title) {
newItem.title = doc.title;
}
// add attachment
newItem.attachments.push({document:doc});
// add url
newItem.url = doc.location.href;
newItem.repository = false;
newItem.complete();
});
var rdf = translator.getTranslatorObject();
var metaTags = doc.getElementsByTagName("meta");
var foundTitle = false; // We can use the page title if necessary
for(var i=0; i<metaTags.length; i++) {
var tag = metaTags[i].getAttribute("name");
var value = metaTags[i].getAttribute("content");
if(tag && value && tag.substr(0, 3).toLowerCase() == "dc.") {
if(tag == "dc.title") {
foundTitle = true;
}
rdf.Zotero.RDF.addStatement(url, dc + tag.substr(3).toLowerCase(), value, true);
} else if(tag && value && (tag == "author" || tag == "author-personal")) {
rdf.Zotero.RDF.addStatement(url, dc + "creator", value, true);
} else if(tag && value && tag == "author-corporate") {
rdf.Zotero.RDF.addStatement(url, dc + "creator", value, true);
}
}
rdf.defaultUnknownType = "webpage";
rdf.doImport();
}

View File

@ -0,0 +1,84 @@
{
"translatorID":"79f6f9ed-537a-4d4f-8270-c4fbaafdf327",
"translatorType":4,
"label":"Emerald Publishing",
"creator":"Michael Berkowitz",
"target":"www.emeraldinsight.com/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-05-05 07:45:00"
}
function detectWeb(doc, url) {
if (url.match('searchQuickOptions.do')) {
return "multiple"
} else if (url.match('viewContentItem')) {
return "journalArticle";
}
}
var tags = {
journal:"publicationTitle",
year:"date",
volume:"volume",
issue:"issue",
page:"pages",
doi:"DOI",
// publisher:"repository",
'article url':"url",
abstract:"abstractNote"
}
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 links = doc.evaluate('//td[3][@class="resultTd"]/a[1]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var link;
while (link = links.iterateNext()) {
items[link.href] = link.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.title = Zotero.Utilities.trimInternal(doc.title.split('-')[1]);
var data = new Object();
var values = doc.evaluate('//div[@class="browseBoxGreen"]/div[@class="toc"]/p[@class="inline"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var fields = doc.evaluate('//div[@class="browseBoxGreen"]/div[@class="toc"]/h3', doc, nsResolver, XPathResult.ANY_TYPE, null);
var value;
var field;
while ((field = fields.iterateNext()) && (value = values.iterateNext())) {
data[Zotero.Utilities.trimInternal(field.textContent.toLowerCase()).replace(':', '')] = value.textContent;
}
var values = doc.evaluate('//div[@id="centerLeft"]/p[@class="inline"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var fields = doc.evaluate('//div[@id="centerLeft"]/h3[@class="inline"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
while ((field = fields.iterateNext()) && (value = values.iterateNext())) {
data[Zotero.Utilities.trimInternal(field.textContent.toLowerCase()).replace(':', '')] = value.textContent;
}
for (var tag in data) {
if (tags[tag]) item[tags[tag]] = Zotero.Utilities.trimInternal(data[tag]);
}
item.attachments = [{url:item.url, title:"Emerald Insight Snapshot", mimeType:"text/html"}];
item.tags = Zotero.Utilities.trimInternal(data['keywords']).split(/,\s+/);
var authors = data['author(s)'].split(/,\s+/);
for each (var aut in authors) {
item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author"));
}
item.complete();
}, function() {Zotero.done;});
Zotero.wait();
}

View File

@ -0,0 +1,125 @@
{
"translatorID":"1f40baef-eece-43e4-a1cc-27d20c0ce086",
"translatorType":4,
"label":"Engineering Village",
"creator":"Ben Parr",
"target":"^https?://(?:www\\.)?engineeringvillage(2)?\\.(?:com|org)",
"minVersion":"1.0.0b4.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2007-07-31 19:40: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='//a[img/@style="vertical-align: middle;"][@href]';
if(doc.evaluate(xpath, doc,
nsResolver,XPathResult.ANY_TYPE,null).iterateNext())
{ return "journalArticle";}
xpath='//input[@name="cbresult"]/@onclick';
if(doc.evaluate(xpath, doc,
nsResolver,XPathResult.ANY_TYPE,null).iterateNext())
{ return "multiple";}
return null;
}
function parseRIS(uris)
{
Zotero.Utilities.HTTP.doGet(uris, function(text){
// load translator for RIS
var translator = Zotero.loadTranslator("import");
translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
translator.setString(text);
translator.translate();
Zotero.done();
}, function() {});
Zotero.wait();
}
//creates the link to the RIS file
function createURL(EISESSION,docidlist,curURL)
{
var milli = (new Date()).getTime();
var temp = curURL.split('/');
var url = temp.slice(0,temp.length-1).join('/') + "/Controller?EISESSION="+EISESSION;
url+="&CID=downloadSelectedRecordsris&format=ris&displayformat=fullDoc&timestamp="
url+=milli;
url+="&docidlist=";
url+=docidlist;
url+="&handlelist=1";
return url;
}
function doWeb(doc, url) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var url;
var xpath='//a[img/@style="vertical-align: middle;"][@href]';
if(doc.evaluate(xpath, doc,
nsResolver,XPathResult.ANY_TYPE,null).iterateNext())
{
xpath='//a[@class="MedBlueLink"][img]/@onclick';
var temp=doc.evaluate(xpath, doc,
nsResolver,XPathResult.ANY_TYPE,null).iterateNext();
var docidlist=temp.value;
docidlist=docidlist.split("MID=")[1];
docidlist=docidlist.split("&")[0];
xpath='//a[img/@style="vertical-align: middle;"][@href]';
temp=doc.evaluate(xpath, doc,
nsResolver,XPathResult.ANY_TYPE,null).iterateNext();
var EISESSION =temp.href;
EISESSION=EISESSION.split("('")[1];
EISESSION=EISESSION.split("'")[0];
url=createURL(EISESSION,docidlist,doc.location.href);
parseRIS(url);
}
else
{
xpath='//input[@NAME="sessionid"]';
var EISESSION=doc.evaluate(xpath, doc,
nsResolver,XPathResult.ANY_TYPE,null).iterateNext().value;
xpath='//input[@name="cbresult"]/@onclick';
var items=new Array();
var rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null);
var xpath2='//a[@class="MedBlackText"]/b';
xpath2=doc.evaluate(xpath2, doc, nsResolver,XPathResult.ANY_TYPE,null);
var title;
var docidlist;
while(row=rows.iterateNext())
{
docidlist=row.value;
docidlist=docidlist.split("'")[1];
url=createURL(EISESSION,docidlist,doc.location.href);
title=xpath2.iterateNext();
title=title.textContent;
items[url]=title;
}
items = Zotero.selectItems(items);
if(!items) return true;
var dois="";
var theurls= new Array();
for(var thelink in items)
{
theurls.push(thelink);
}
parseRIS(theurls);
}
}

150
translators/Epicurious.js Normal file
View File

@ -0,0 +1,150 @@
{
"translatorID":"aee2323e-ce00-4fcc-a949-06eb1becc98f",
"translatorType":4,
"label":"Epicurious",
"creator":"Sean Takats",
"target":"^https?://www\\.epicurious\\.com/(?:tools/searchresults|recipes/food/views)",
"minVersion":"1.0.0",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-09-02 13:40: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 = '//div[@id="ingredients"]';
var multxpath = '//table[@class="search-results"]/tbody/tr';
if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){
return "document";
} else if (doc.evaluate(multxpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){
return "multiple";
}
}
function cleanText(s){
s = s.replace(/\n+/g, "\n");
s = s.replace(/(\n|\r)\t+/g, "\n");
s = s.replace(/\t+/g, " ");
s = s.replace(" ", "", "g");
return s;
}
function scrape(doc){
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var newItem = new Zotero.Item("document");
var xpath = '//title';
var title = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
title = Zotero.Utilities.trimInternal(title);
title = title.substring(0, title.indexOf(" Recipe at Epicurious.com"));
newItem.title = title;
var elmt;
xpath = '//p[@class="source"]';
var elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
if (elmt = elmts.iterateNext()){
var authordate = elmt.textContent;
var authordates = authordate.split("|");
newItem.creators.push(Zotero.Utilities.cleanAuthor(authordates[0], "contributor", true));
var datestring = authordates[1].toString();
datestring = datestring.replace("Copyright", "");
newItem.date = Zotero.Utilities.formatDate(Zotero.Utilities.strToDate(datestring));
while (elmt = elmts.iterateNext()){
Zotero.debug("looping?");
Zotero.debug(elmt.textContent);
newItem.creators.push(Zotero.Utilities.cleanAuthor(elmt.textContent, "contributor", false));
}
}
xpath = '//div[@id="recipe_intro"]/p';
if (elmt = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){
var abstract = elmt.textContent;
abstract = Zotero.Utilities.cleanString(abstract);
newItem.abstractNote = abstract;
}
xpath = '//div[@id="ingredients"]';
if (elmt = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){
var ingredients = elmt.textContent;
ingredients = Zotero.Utilities.superCleanString(ingredients);
ingredients = cleanText(ingredients);
}
xpath = '//div[@id="preparation"]';
if (elmt = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){
var prep = elmt.textContent;
prep = Zotero.Utilities.superCleanString(prep);
prep = cleanText(prep);
prep = prep.replace(/\n/g, "\n\n");
}
xpath = '//div[@id="recipe_summary"]/p';
if (elmt = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){
var serving = elmt.textContent;
serving = Zotero.Utilities.superCleanString(serving);
serving = cleanText(serving);
}
// notestring = ingredients + "\n\n" + prep + "\n\n" + serving;
// newItem.notes.push({note:notestring});
newItem.notes.push({note:ingredients});
newItem.notes.push({note:prep});
newItem.notes.push({note:serving});
var url = doc.location.href;
var snapshotURL = url.replace("/views/", "/printerfriendly/");
newItem.attachments.push({title:"Epicurious.com Snapshot", mimeType:"text/html", url:snapshotURL, snapshot:true});
newItem.url = url;
newItem.attachments.push({title:"Epicurious.com Link", snapshot:false, mimeType:"text/html", url:url});
newItem.complete();
}
function doWeb(doc, url){
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var singxpath = '//div[@id="ingredients"]';
var multxpath = '//table[@class="search-results"]/tbody/tr';
if(doc.evaluate(singxpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){
// single recipe page
scrape(doc, url);
} else if (doc.evaluate(multxpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){
var items = new Object();
var elmtxpath = '//div[@id="resultstable"]/table[@class="search-results"]/tbody/tr/td[3][@class="name"]/a[@class="hed"]';
var elmts = doc.evaluate(elmtxpath, 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();
}
}

View File

@ -0,0 +1,87 @@
{
"translatorID":"2e304579-dd7b-4770-85e9-0d724c9b49a5",
"translatorType":4,
"label":"European Educational Research Journal",
"creator":"Michael Berkowitz",
"target":"http://www.wwwords.co.uk/eerj/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-05-05 07:45:00"
}
function detectWeb(doc, url) {
if (doc.evaluate('//div[@id="maincontent"]/table[*//p[@class="articletitle"]]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
return "multiple";
}
}
function titleCase(str) {
var skipWords = ["but", "or", "yet", "so", "for", "and", "nor", "a", "an", "the", "at", "by", "from", "in", "into", "of", "on", "to", "with", "up", "down", "as"];
var words = str.toLowerCase().split(/\s+/);
var newstr = "";
for each (var word in words) {
if (skipWords.indexOf(word.replace(/[^a-zA-Z]+/, "")) != -1) {
newstr += " " + word;
} else if (word.indexOf("-") != -1) {
newword = word.split("-");
newstr += " " + newword[0][0].toUpperCase() + newword[0].substr(1) + "-" + newword[1][0].toUpperCase() + newword[1].substr(1);
} else {
newstr += " " + word[0].toUpperCase() + word.substr(1);
}
}
return Zotero.Utilities.trimInternal(newstr);
}
function doWeb(doc, url) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return false;
} : null;
var items = new Object();
var titles = doc.evaluate('//p[@class="articletitle"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var title;
while (title = titles.iterateNext()) {
var text = Zotero.Utilities.trimInternal(title.textContent);
items[text] = text;
}
items = Zotero.selectItems(items);
Zotero.debug(items);
var articles = doc.evaluate('//div[@id="maincontent"]/table[*//p[@class="articletitle"]]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var art;
while (art = articles.iterateNext()) {
var title = Zotero.Utilities.trimInternal(doc.evaluate('.//p[@class="articletitle"]', art, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent);
if (items[title]) {
var pdfurl = doc.evaluate('.//a[contains(text(), "FULL TEXT")]', art, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href;
var item = new Zotero.Item("journalArticle");
item.publicationTitle = "European Educational Research Journal";
item.ISSN = "1474-9041";
item.url = url;
item.title = title;
var voliss = doc.title.match(/\-\s+(.*)$/)[1];
voliss = voliss.match(/Volume\s+(\d+)\s+Issue\s+(\d+)\s+\((\d+)\)/);
item.volume = voliss[1];
item.issue = voliss[2];
item.date = voliss[3];
var authors = doc.evaluate('.//tr[2]/td', art, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
var ibits = doc.evaluate('.//tr[2]/td//i', art, nsResolver, XPathResult.ANY_TYPE, null);
var ibit = "";
var bit;
while (bit = ibits.iterateNext()) {
authors = authors.replace(bit.textContent, ",");
}
authors = authors.split(/\s*(,|&)\s*/);
for each (var aut in authors) {
if (aut.match(/\w/)) {
aut = titleCase(Zotero.Utilities.trimInternal(aut));
item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author"));
}
}
item.attachments = [{url:pdfurl, title:"EERJ Full Text PDF", mimeType:"application/pdf"}];
item.complete();
}
}
}

136
translators/Factiva.js Normal file
View File

@ -0,0 +1,136 @@
{
"translatorID":"7bdb79e-a47f-4e3d-b317-ccd5a0a74456",
"translatorType":4,
"label":"Factiva",
"creator":"Simon Kornblith",
"target":"https?://[^/]*global\\.factiva\\.com[^/]*/ha/default\\.aspx$",
"minVersion":"1.0.0b3.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-05-20 19:10: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('//tr[@class="headline"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
if(doc.body.className == 'articleView') {
return "newspaperArticle";
} else {
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 items = new Array();
var singlePage = doc.body.className == 'articleView';
var tableRows = doc.evaluate('//tr[@class="headline"]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var tableRow;
while(tableRow = tableRows.iterateNext()) {
var hdl = doc.evaluate('.//input[@name="hdl"]', tableRow, nsResolver, XPathResult.ANY_TYPE,
null).iterateNext().value;
if(!singlePage){
items[hdl] = Zotero.Utilities.cleanString(tableRow.getElementsByTagName("a")[0].textContent);
} else {
var m = doc.evaluate('.//td[@class="count"]', tableRow, nsResolver, XPathResult.ANY_TYPE,
null).iterateNext().textContent.match(/[0-9]+/);
items[m[0]] = hdl;
}
}
if(!singlePage) {
items = Zotero.selectItems(items);
if(!items) return true;
var hdls = new Array();
for(var hdl in items) {
hdls.push(hdl);
}
} else {
var m = doc.evaluate('//div[@class="articleHeader"][@id="artHdr1"]/span[substring(text(), 1, 7) = "Article"]',
doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/[0-9]+/);
var hdls = [items[m[0]]];
}
var post = "";
var hiddenInputs = doc.evaluate('//form[@name="PageBaseForm"]//input[@type="hidden"]', doc, nsResolver,
XPathResult.ANY_TYPE, null);
var hiddenInput;
while(hiddenInput = hiddenInputs.iterateNext()) {
// this is some weird shit, but apparently they're very picky
post = post+"&"+hiddenInput.name+"="+escape(hiddenInput.value).replace(/\+/g, "%2B").replace(/\%20/g, "+");
}
var selects = doc.evaluate('//form[@name="PageBaseForm"]//select', doc, nsResolver,
XPathResult.ANY_TYPE, null);
var select;
while(select = selects.iterateNext()) {
post = post+"&"+select.name+"="+escape(select.options[select.selectedIndex].value);
}
for each(var hdl in hdls) {
post += "&hdl="+escape(hdl);
}
post = post.substr(1);
Zotero.Utilities.HTTP.doPost("http://global.factiva.com/pps/default.aspx?pp=XML", post, function(text) {
// Remove xml parse instruction and doctype
text = text.replace(/<!DOCTYPE[^>]*>/, "").replace(/<\?xml[^>]*\?>/, "");
// kill the XML namespace, too, because we have no way of knowing what it will be, which presents a problem
text = text.replace(/<ppsArticleResponse xmlns="[^"]+">/, "<ppsArticleResponse>");
// kill hlt tags; they just make parsing harder
text = text.replace(/<\/?hlt>/g, "");
var xml = new XML(text);
// loop through articles
for each(var ppsarticle in xml[0]..ppsarticle) {
var article = ppsarticle.article;
var newItem = new Zotero.Item("newspaperArticle");
newItem.title = Zotero.Utilities.cleanString(article.headline.paragraph.text().toString());
newItem.publicationTitle = Zotero.Utilities.cleanString(article.sourceName.text().toString());
for each(var tag in article..name) {
newItem.tags.push(tag.text().toString());
}
newItem.date = Zotero.Utilities.formatDate(Zotero.Utilities.strToDate(article.publicationDate.date.text().toString()));
if(article.byline.length()) {
var byline = Zotero.Utilities.cleanString(article.byline.text().toString().replace(/By/i, ""));
var authors = byline.split(/ (?:\&|and) /i);
for each(var author in authors) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
}
}
newItem.section = article.sectionName.text().toString();
newItem.edition = article.edition.text().toString();
if(article.pages.length()) {
newItem.pages = "";
for each(var page in article.pages.page) {
newItem.pages += ","+page.text().toString();
}
newItem.pages = newItem.pages.substr(1);
}
var m = article.volume.text().toString().match(/ISSN[:\s]*([\-0-9]{8,9})/i);
if(m) newItem.ISSN = m[1];
newItem.complete();
}
Zotero.done();
});
Zotero.wait();
}

149
translators/Flickr.js Normal file
View File

@ -0,0 +1,149 @@
{
"translatorID":"5dd22e9a-5124-4942-9b9e-6ee779f1023e",
"translatorType":4,
"label":"Flickr",
"creator":"Sean Takats",
"target":"^http://(?:www\\.)?flickr\\.com/",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-06-01 17: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;
if (elmt = doc.evaluate('//h1[@property="dc:title" and starts-with(@id, "title_div")]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){
return "artwork";
} else if (doc.evaluate('//td[@class="DetailPic"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){
return "multiple";
} else if (doc.evaluate('//div[@class="StreamView"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){
return "multiple";
} else if (doc.evaluate('//div[@id="setThumbs"]/a[starts-with(@id, "set_thumb_link_")]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){
return "multiple";
} else if (doc.evaluate('//p[@class="StreamList" or @class="UserTagList"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){
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 items = new Object();
var photo_ids = new Array();
var uris = new Array();
var key = "3cde2fca0879089abf827c1ec70268b5";
var elmts;
var elmt;
// single result
if (elmt = doc.evaluate('//h1[@property="dc:title" and starts-with(@id, "title_div")]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){
var photo_id = elmt.id;
photo_id = photo_id.substr(9);
photo_ids.push(photo_id);
} else { //multiple results
var photoRe = /\/photos\/[^\/]*\/([0-9]+)\//;
//search results
if (doc.evaluate('//td[@class="DetailPic"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){
elmts = doc.evaluate('//td[@class="DetailPic"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
while (elmt = elmts.iterateNext()){
var title = elmt.title;
title = Zotero.Utilities.trimInternal(title);
var link = elmt.href;
var m = photoRe(link);
var photo_id = m[1];
items[photo_id] = title;
}
// photo stream
} else if (doc.evaluate('//div[@class="StreamView"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){
elmts = doc.evaluate('//div[@class="StreamView" and starts-with(@id, "sv_title_")]', doc, nsResolver, XPathResult.ANY_TYPE, null);
while (elmt = elmts.iterateNext()){
var title = Zotero.Utilities.trimInternal(elmt.textContent);
var photo_id = elmt.id;
photo_id = photo_id.substr(9);
items[photo_id] = title;
}
// photo set
} else if (doc.evaluate('//div[@id="setThumbs"]/a[starts-with(@id, "set_thumb_link_")]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){
elmts = doc.evaluate('//div[@id="setThumbs"]/a[starts-with(@id, "set_thumb_link_")]', doc, nsResolver, XPathResult.ANY_TYPE, null);
while (elmt = elmts.iterateNext()){
var title = Zotero.Utilities.trimInternal(elmt.title);
var photo_id = elmt.id.substr(15);
items[photo_id] = title;
}
// tagged with
} else if (doc.evaluate('//p[@class="StreamList" or @class="UserTagList"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){
var elmts = doc.evaluate('//p[@class="StreamList" or @class="UserTagList"]//a[img]', doc, nsResolver, XPathResult.ANY_TYPE, null);
while (elmt = elmts.iterateNext()){
var title = Zotero.Utilities.trimInternal(elmt.title);
var link = elmt.href;
var m = photoRe(link);
var photo_id = m[1];
items[photo_id] = title;
}
}
items = Zotero.selectItems(items);
if(!items) return true;
for(var i in items) {
photo_ids.push(i);
}
}
for each(var photo_id in photo_ids){
uris.push("http://api.flickr.com/services/rest/?method=flickr.photos.getInfo&api_key="+key+"&photo_id="+photo_id);
}
Zotero.Utilities.HTTP.doGet(uris, function(text) {
text = text.replace(/<\?xml[^>]*\?>/, "");
var xml = new XML(text);
var newItem = new Zotero.Item("artwork");
var title = "";
if (xml..title.length()){
var title = Zotero.Utilities.cleanString(xml..title[0].text().toString());
if (title == ""){
title = " ";
}
newItem.title = title;
}
for(var i=0; i<xml..tag.length(); i++) {
newItem.tags.push(Zotero.Utilities.cleanString(xml..tag[i].text().toString()));
}
if (xml..dates.length()){
var date = xml..dates[0].@taken.toString();
newItem.date = date.substr(0, 10);
}
if (xml..owner.length()){
var author = xml..owner[0].@realname.toString();
if (author == ""){
author = xml..owner[0].@username.toString();
}
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "artist"));
}
if (xml..url.length()){
newItem.url = xml..url[0].text().toString();
}
if (xml..description.length()){
newItem.abstractNote = xml..description[0].text().toString();
}
var format = xml..photo[0].@originalformat.toString();
var photo_id = xml..photo[0].@id.toString();
// get attachment code
var uri = "http://api.flickr.com/services/rest/?method=flickr.photos.getSizes&api_key="+key+"&photo_id="+photo_id;
Zotero.Utilities.HTTP.doGet(uri, function(text) {
text = text.replace(/<\?xml[^>]*\?>/, "");
var xml = new XML(text);
var last = xml..size.length() - 1;
var attachmentUri = xml..size[last].@source.toString();
newItem.attachments = [{title:title, url:attachmentUri}];
newItem.complete();
}, function(){Zotero.done();});
});
Zotero.wait();
}

Some files were not shown because too many files have changed in this diff Show More