209 lines
6.8 KiB
JavaScript
209 lines
6.8 KiB
JavaScript
{
|
|
"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":"2011-06-14 04:31:00"
|
|
}
|
|
|
|
/* Provides support for databases of Cambridge Scientific Abstracts
|
|
Tested with CSA Illumina, http://www.csa.com/
|
|
CSA does not provide stable URLs
|
|
*/
|
|
|
|
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.trimInternal(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") {
|
|
var untitled = !newItem.publicationTitle;
|
|
if(untitled || (content.length > newItem.publicationTitle.length
|
|
&& content.substr(0, newItem.publicationTitle.length) == newItem.publicationTitle)
|
|
|| content.indexOf(newItem.publicationTitle)) {
|
|
if (content.indexOf(newItem.publicationTitle) > 4) {
|
|
// This means we probably have a book author or editor first
|
|
var m = content.match(/^([^\.]+)\./);
|
|
if (m) newItem.creators.push(
|
|
Zotero.Utilities.cleanAuthor(m[1], "bookAuthor", true));
|
|
}
|
|
var m = content.match(/\)\. ([^:()]+): ([^,0-9]+)/);
|
|
if(m) {
|
|
if (untitled) {
|
|
var n = content.match(/\([0-9]{4}\)([^(]*)/);
|
|
if (n) newItem.publicationTitle = n[1];
|
|
}
|
|
newItem.place = m[1];
|
|
newItem.publisher = m[2];
|
|
}
|
|
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;
|
|
}
|
|
} else if(heading == "pages") { // This is for book sections
|
|
newItem.pages = content;
|
|
} else if(heading == "language") {
|
|
newItem.language = 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);
|
|
}
|
|
}
|