commit translators as separate files, combine CiteBase translators, and modify SPIE translator
This commit is contained in:
parent
b32ed05971
commit
51bfbbc42a
48
translators/A Contra Corriente.js
Normal file
48
translators/A Contra Corriente.js
Normal 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();
|
||||
}
|
||||
}
|
141
translators/ABC-CLIO Serials Web.js
Normal file
141
translators/ABC-CLIO Serials Web.js
Normal 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
138
translators/ACM.js
Normal 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();
|
||||
}
|
126
translators/ACS Publications.js
Normal file
126
translators/ACS Publications.js
Normal 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
258
translators/AGU Journals.js
Normal 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
84
translators/AJHG.js
Normal 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();
|
||||
|
||||
}
|
79
translators/AMS Journals.js
Normal file
79
translators/AMS Journals.js
Normal 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();
|
||||
}
|
98
translators/AMS MathSciNet.js
Normal file
98
translators/AMS MathSciNet.js
Normal 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();
|
||||
});
|
||||
}
|
293
translators/AMS Online Journals - Allenpress.js
Normal file
293
translators/AMS Online Journals - Allenpress.js
Normal 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);
|
||||
}
|
82
translators/APA PsycNET.js
Normal file
82
translators/APA PsycNET.js
Normal 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();
|
||||
}
|
169
translators/ARTFL Encyclopedie.js
Normal file
169
translators/ARTFL Encyclopedie.js
Normal 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("&", "&", "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
257
translators/ARTstor.js
Normal 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
76
translators/ASCE.js
Normal 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();
|
||||
|
||||
}
|
91
translators/AcademicJournals.net.js
Normal file
91
translators/AcademicJournals.net.js
Normal 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
117
translators/AdvoCAT.js
Normal 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();
|
||||
}
|
71
translators/African Journals Online.js
Normal file
71
translators/African Journals Online.js
Normal 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
87
translators/AfroEuropa.js
Normal 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();
|
||||
}
|
65
translators/Agencia del ISBN.js
Normal file
65
translators/Agencia del ISBN.js
Normal 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();
|
||||
}
|
197
translators/Alexander Street Press.js
Normal file
197
translators/Alexander Street Press.js
Normal 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
182
translators/AlterNet.js
Normal 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
191
translators/Aluka.js
Normal 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
208
translators/Amazon.com.js
Normal 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();
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
235
translators/Ancestry.com US Federal Census.js
Normal file
235
translators/Ancestry.com US Federal Census.js
Normal 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
157
translators/Archeion.js
Normal 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();
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
148
translators/Archives Canada-France.js
Normal file
148
translators/Archives Canada-France.js
Normal 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();
|
||||
}
|
126
translators/Archives Canada.js
Normal file
126
translators/Archives Canada.js
Normal 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();
|
||||
}
|
152
translators/Archives Network of Alberta.js
Normal file
152
translators/Archives Network of Alberta.js
Normal 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();
|
||||
}
|
160
translators/Artefacts Canada.js
Normal file
160
translators/Artefacts Canada.js
Normal 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();
|
||||
}
|
80
translators/AustLII and NZLII.js
Normal file
80
translators/AustLII and NZLII.js
Normal 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();
|
||||
}
|
||||
}
|
78
translators/Australian Dictionary of Biography.js
Normal file
78
translators/Australian Dictionary of Biography.js
Normal 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
106
translators/BAILII.js
Normal 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
116
translators/BBC.js
Normal 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) }
|
||||
}
|
||||
|
||||
|
||||
}
|
147
translators/BC Archival Information Network.js
Normal file
147
translators/BC Archival Information Network.js
Normal 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
66
translators/BIBSYS.js
Normal 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
97
translators/BIUM.js
Normal 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();
|
||||
}
|
84
translators/Berkeley Electronic Press.js
Normal file
84
translators/Berkeley Electronic Press.js
Normal 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();
|
||||
}
|
95
translators/Berkeley Library Catalog.js
Normal file
95
translators/Berkeley Library Catalog.js
Normal 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
1993
translators/BibTeX.js
Normal file
File diff suppressed because it is too large
Load Diff
125
translators/Biblio.com.js
Normal file
125
translators/Biblio.com.js
Normal 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();
|
||||
}
|
234
translators/Bibliotheque UQAM.js
Normal file
234
translators/Bibliotheque UQAM.js
Normal 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();
|
||||
}
|
|
@ -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();
|
||||
}
|
264
translators/Bibliothèque et Archives nationales du Québec.js
Normal file
264
translators/Bibliothèque et Archives nationales du Québec.js
Normal 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
121
translators/BioInfoBank.js
Normal 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();
|
||||
});
|
||||
}
|
140
translators/BioMed Central and More.js
Normal file
140
translators/BioMed Central and More.js
Normal 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
66
translators/BioOne.js
Normal 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();
|
||||
}
|
68
translators/Blackwell Compass.js
Normal file
68
translators/Blackwell Compass.js
Normal 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();
|
||||
}
|
91
translators/Blackwell Synergy.js
Normal file
91
translators/Blackwell Synergy.js
Normal 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
127
translators/Blogger.js
Normal 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();
|
||||
}
|
171
translators/Bracero History Archive.js
Normal file
171
translators/Bracero History Archive.js
Normal 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();
|
||||
}
|
85
translators/Bryn Mawr Classical Review.js
Normal file
85
translators/Bryn Mawr Classical Review.js
Normal 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();
|
||||
}
|
67
translators/Business Standard.js
Normal file
67
translators/Business Standard.js
Normal 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(" ")[1]);
|
||||
newItem.complete();
|
||||
});
|
||||
}
|
||||
}, function() {Zotero.done;});
|
||||
Zotero.wait();
|
||||
}
|
58
translators/BusinessWeek.js
Normal file
58
translators/BusinessWeek.js
Normal 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();
|
||||
}
|
132
translators/CABI - CAB Abstracts.js
Normal file
132
translators/CABI - CAB Abstracts.js
Normal 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();
|
||||
}
|
121
translators/CARLABRC OAI Harvester.js
Normal file
121
translators/CARLABRC OAI Harvester.js
Normal 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
189
translators/COinS.js
Normal 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);
|
||||
}
|
||||
}
|
71
translators/CSIRO Publishing.js
Normal file
71
translators/CSIRO Publishing.js
Normal 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();
|
||||
}
|
90
translators/Cambridge Journals Online.js
Normal file
90
translators/Cambridge Journals Online.js
Normal 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();
|
||||
}
|
187
translators/Cambridge Scientific Abstracts.js
Normal file
187
translators/Cambridge Scientific Abstracts.js
Normal 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
112
translators/CanLII.js
Normal 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
153
translators/Canada.com.js
Normal 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();
|
||||
}
|
124
translators/Canadian Letters and Images.js
Normal file
124
translators/Canadian Letters and Images.js
Normal 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();
|
||||
}
|
180
translators/Canadiana.org.js
Normal file
180
translators/Canadiana.org.js
Normal 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
139
translators/Cell Press.js
Normal 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();
|
||||
}
|
167
translators/Champlain Society - Collection.js
Normal file
167
translators/Champlain Society - Collection.js
Normal 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();
|
||||
}
|
150
translators/Christian Science Monitor.js
Normal file
150
translators/Christian Science Monitor.js
Normal 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
67
translators/CiNii.js
Normal 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
94
translators/CiteBase.js
Normal 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
111
translators/CiteSeer.js
Normal 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
58
translators/CiteULike.js
Normal 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();
|
||||
}
|
132
translators/Civilization.ca.js
Normal file
132
translators/Civilization.ca.js
Normal 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();
|
||||
}
|
68
translators/Code4Lib Journal.js
Normal file
68
translators/Code4Lib Journal.js
Normal 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();
|
||||
}
|
69
translators/Columbia University Press.js
Normal file
69
translators/Columbia University Press.js
Normal 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
166
translators/Common-Place.js
Normal 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
92
translators/Copernicus.js
Normal 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();
|
||||
}
|
72
translators/Copernicus2.js
Normal file
72
translators/Copernicus2.js
Normal 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
208
translators/Cornell LII.js
Normal 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();
|
||||
}
|
||||
}
|
64
translators/Cornell University Press.js
Normal file
64
translators/Cornell University Press.js
Normal 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
89
translators/CrossRef.js
Normal 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();
|
||||
}
|
87
translators/Cyberpresse.js
Normal file
87
translators/Cyberpresse.js
Normal 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();
|
||||
}
|
170
translators/DBLP Computer Science Bibliography.js
Normal file
170
translators/DBLP Computer Science Bibliography.js
Normal 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
101
translators/DSpace.js
Normal 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;});
|
||||
}
|
81
translators/Davidson College Library.js
Normal file
81
translators/Davidson College Library.js
Normal 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();
|
||||
}
|
61
translators/Digital Humanities Quarterly.js
Normal file
61
translators/Digital Humanities Quarterly.js
Normal 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
152
translators/EBSCOhost.js
Normal 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(/&/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
109
translators/ERIC.js
Normal 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();
|
||||
}
|
||||
}
|
94
translators/ESA Journals.js
Normal file
94
translators/ESA Journals.js
Normal 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
174
translators/ESpacenet.js
Normal 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();
|
||||
}
|
73
translators/Early English Books Online.js
Normal file
73
translators/Early English Books Online.js
Normal 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();
|
||||
});
|
||||
}
|
||||
}
|
95
translators/Education Week.js
Normal file
95
translators/Education Week.js
Normal 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
139
translators/Edutopia.js
Normal 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();
|
||||
}
|
160
translators/Eighteenth Century Collections Online.js
Normal file
160
translators/Eighteenth Century Collections Online.js
Normal 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();
|
||||
}
|
66
translators/Embedded RDF.js
Normal file
66
translators/Embedded RDF.js
Normal 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();
|
||||
}
|
84
translators/Emerald Publishing.js
Normal file
84
translators/Emerald Publishing.js
Normal 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();
|
||||
}
|
125
translators/Engineering Village.js
Normal file
125
translators/Engineering Village.js
Normal 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×tamp="
|
||||
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
150
translators/Epicurious.js
Normal 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();
|
||||
}
|
||||
}
|
87
translators/European Educational Research Journal.js
Normal file
87
translators/European Educational Research Journal.js
Normal 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
136
translators/Factiva.js
Normal 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
149
translators/Flickr.js
Normal 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
Loading…
Reference in New Issue
Block a user