zotero/translators/Project MUSE.js

144 lines
5.1 KiB
JavaScript

{
"translatorID": "c54d1932-73ce-dfd4-a943-109380e06574",
"label": "Project MUSE",
"creator": "Simon Kornblith, Avram Lyon",
"target": "^https?://[^/]*muse\\.jhu\\.edu[^/]*/(?:journals/[^/]+/[^/]+/[^/]+\\.html|search/results)",
"minVersion": "1.0.0b4.r1",
"maxVersion": "",
"priority": 100,
"inRepository": "1",
"translatorType": 4,
"lastUpdated": "2011-03-02 23:38:17"
}
function detectWeb(doc, url) {
var searchRe = new RegExp("(^https?://[^/]+/search/results|/search/save|/toc/)");
if(searchRe.test(url)) {
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 searchRe = new RegExp("^https?://[^/]+/search/results|/search/save");
if(detectWeb(doc, url) == "multiple") {
var items = new Array();
var attachments = new Array();
var pdfRe = /PDF/;
var htmlRe = /HTML/;
if (searchRe.test(url)) {
// Search results
var tableRows = doc.evaluate('//save_form//tr[@class="resultsrow"]',
doc, nsResolver, XPathResult.ANY_TYPE, null);
var tableRow;
// Go through table rows
while(tableRow = tableRows.iterateNext()) {
var input = doc.evaluate('.//div[@class="links"]//a[last()]', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
var title = doc.evaluate('.//div[@class="title"]', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
if(input && input.href && title && title.textContent) {
items[input.href] = title.textContent;
}
}
} else if (url.match(/\/toc\//)) {
//Zotero.debug("here");
var results = doc.evaluate('//div[@class="article"]',
doc, nsResolver, XPathResult.ANY_TYPE, null);
var result;
while(result = results.iterateNext()) {
//Zotero.debug(result.textContent);
var link = doc.evaluate('.//div[@class="links"]/p//a[last()]', result, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
var title = doc.evaluate('.//div[@class="title"]', result, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
//Zotero.debug(link.textContent);
if(link && link.href && title && title.textContent) {
items[link.href] = title.textContent;
//Zotero.debug(link.href);
}
}
// Some journals have old-style TOCs for back issues
// Ex. http://muse.jhu.edu/journals/eighteenth-century_studies/toc/ecs33.4.html
if (items.length == 0) {
var articles = doc.evaluate('//ul', doc, nsResolver, XPathResult.ANY_TYPE, null);
var article;
while (article = articles.iterateNext()) {
var link = doc.evaluate('./li/a[contains(@href,".html")]', article, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
var title = doc.evaluate('./li/i', article, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
//Zotero.debug(link.textContent);
if(link && link.href && title && title.textContent) {
items[link.href] = title.textContent;
//Zotero.debug(link.href);
}
}
}
}
items = Zotero.selectItems(items);
if(!items) {
return true;
}
var i;
var urls = [];
for (i in items) {urls.push(i);};
Zotero.Utilities.processDocuments(urls, scrapeOne, function() {Zotero.done();});
} else scrapeOne(doc);
Zotero.wait();
}
// Given an article page, get the RIS and open it
function scrapeOne(doc) {
var url = doc.location.href;
//Zotero.debug("scrapeOne has "+doc.location.href)
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var hostRe = new RegExp("^(http://[^/]+)/");
var m = hostRe.exec(url);
var host = m[1];
var getPDF = doc.evaluate('//a[text() = "PDF Version"]', doc,
nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
var DOI = doc.evaluate('//div[@class="doi"]', doc,
nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
var abstract = doc.evaluate('//abstract', doc,
nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
var newUrl = url.replace(host, host+"/metadata/zotero").replace("/summary/","/");;
//Zotero.debug(newUrl);
Zotero.Utilities.HTTP.doGet(newUrl, function(text) {
var translator = Zotero.loadTranslator("import");
//set RIS translator
translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
translator.setString(text);
Zotero.debug(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;
}
item.attachments.splice(0);
item.attachments.push({document:doc, title:"Project MUSE Snapshot"});
if(getPDF) {
item.attachments.push({title:"Project MUSE Full Text PDF", mimeType:"application/pdf",
url:getPDF.href});
}
if(DOI) {
item.DOI = DOI.textContent.replace(/^DOI: /,"");
}
if(abstract) {
item.abstract = abstract.textContent;
}
item.complete();
});
translator.translate();
});
}