zotero/translators/Cell Press.js

139 lines
4.4 KiB
JavaScript

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