zotero/translators/Electronic Colloquium on Computational Complexity.js
2010-03-29 15:01:31 +00:00

114 lines
3.2 KiB
JavaScript

{
"translatorID":"09a9599e-c20e-a405-d10d-35ad4130a426",
"translatorType":4,
"label":"Electronic Colloquium on Computational Complexity",
"creator":"Jonas Schrieb",
"minVersion":"1.0.0b3.r1",
"target":"http://(www.)?eccc.(uni-trier|hpi-web).de/",
"maxVersion":"",
"priority":100,
"inRepository":false,
"lastUpdated":"2010-03-03 15:00:00"
}
function detectWeb(doc, url) {
var singleRe = /^http:\/\/(www\.)?eccc\.(uni-trier|hpi-web)\.de\/report\/\d{4}\/\d{3}/;
var multipleRe = /^http:\/\/(www\.)?eccc\.(uni-trier|hpi-web)\.de\/(title|year|keyword)\//;
if(singleRe.test(url)) {
return "report";
} else if(multipleRe.test(url)) {
return "multiple";
}
}
function scrape(doc) {
var newItem = new Zotero.Item("report");
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 tmp = url.match(/\/(\d{4})\/(\d{3})\/$/);
newItem.date = tmp[1];
newItem.reportNumber = tmp[2];
newItem.url = url;
var titleXPath = "id('box')//h4";
newItem.title = doc.evaluate(titleXPath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
var authorsXPath = "id('box')//a[contains(@href,'author')]";
var authors = doc.evaluate(authorsXPath, doc, nsResolver, XPathResult.ANY_TYPE, null);
var nextAuthor;
while (nextAuthor = authors.iterateNext()) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(nextAuthor.textContent, "author"));
}
var keywordsXPath = "id('box')//a[contains(@href,'keyword')]";
var keywords = doc.evaluate(keywordsXPath, doc, nsResolver, XPathResult.ANY_TYPE, null);
var nextKeyword;
var i = 0;
while (nextKeyword = keywords.iterateNext()) {
newItem.tags[i++] = nextKeyword.textContent;
}
var abstractXPath = "id('box')/text()";
var abstractLines = doc.evaluate(abstractXPath, doc, nsResolver, XPathResult.ANY_TYPE, null);
newItem.abstractNote = "";
var nextLine;
while(nextLine = abstractLines.iterateNext()) {
newItem.abstractNote += nextLine.textContent;
}
newItem.attachments = [
{url:url, title:"ECCC Snapshot", mimeType:"text/html"},
{url:url+"download", title:"ECCC Full Text PDF", mimeType:"application/pdf"}
];
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 items = new Object();
var nextTitle;
if (detectWeb(doc, url) == "multiple") {
var titleXPath = "//a[starts-with(@href,'/report/')]/h4";
var linkXPath = "//a[starts-with(@href,'/report/')][h4]";
var titles = doc.evaluate(titleXPath, doc, nsResolver, XPathResult.ANY_TYPE, null);
var links = doc.evaluate(linkXPath, doc, nsResolver, XPathResult.ANY_TYPE, null);
while (nextTitle = titles.iterateNext()) {
nextLink = links.iterateNext();
items[nextLink.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();
}