zotero/translators/PEI Archival Information Network.js

173 lines
5.0 KiB
JavaScript

{
"translatorID":"6871e8c5-f935-4ba1-8305-0ba563ce3941",
"translatorType":4,
"label":"PEI Archival Information Network",
"creator":"Adam Crymble",
"target":"http://www.archives.pe.ca",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-08-11 20: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;
if (doc.evaluate('//td[2]/table/tbody/tr/td/p', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.match("Search")) {
return "multiple";
} else if (doc.evaluate('//td[2]/table/tbody/tr/td/p', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.match("Display")){
return "book";
}
}
//PEI Archival Information Network translator: Code by Adam Crymble
var authors;
function associateData (newItem, dataTags, field, zoteroField) {
if (dataTags[field]) {
newItem[zoteroField] = dataTags[field];
}
}
function authors1() {
for (var k = 0; k< authors.length; k++) {
if (authors[k].match(", ")) {
var author = authors[k].split(", ");
authors[k] = (author[1] + (" ") + author[0].replace(/^\s*|\s*$/g, ''));
newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[k], "author"));
} else {
newItem.creators.push({lastName: authors[k], creatorType: "creator"});
}
}
}
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 tagsContent = new Array();
newItem = new Zotero.Item("book");
var xPathHeadings = doc.evaluate('//small/b', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathContents = doc.evaluate('//dd', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathCount = doc.evaluate('count (//small/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 (fieldTitle == "AccessPoints") {
//creates Author
dataTags["Author"] = (contents.substr(11).replace(/^\s*|\s*$/g, ''));
contents = xPathContents.iterateNext().textContent;
authors = dataTags["Author"].split(/\n/);
authors1();
//creates Other Authors (if any)
dataTags["OtherAuthor"] = (contents.substr(13).replace(/^\s*|\s*$/g, ''));
contents = xPathContents.iterateNext().textContent;
if (dataTags["OtherAuthor"].match("no Other Author access points found")) {
} else {
authors = dataTags["OtherAuthor"].split(/\n/);
authors1();
}
//creates tags
dataTags["subject"] = (contents);
var tags;
var tagLinks = doc.evaluate('//dd/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var tagsLinksCount = doc.evaluate('count (//dd/a)', doc, nsResolver, XPathResult.ANY_TYPE, null);
for (j = 0; j < tagsLinksCount.numberValue; j++) {
tags = tagLinks.iterateNext();
if (tags.href.match("subject")) {
tagsContent.push(tags.textContent);
}
}
} else {
dataTags[fieldTitle] = (contents.replace(/^\s*|\s*$/g, ''));
}
}
for (var i = 0; i < tagsContent.length; i++) {
newItem.tags[i] = tagsContent[i];
}
associateData (newItem, dataTags, "NameofRepository", "repository");
associateData (newItem, dataTags, "DatesofCreation", "date");
associateData (newItem, dataTags, "Identifier", "callNumber");
associateData (newItem, dataTags, "PhysicalDescription", "extra");
associateData (newItem, dataTags, "ScopeAndContent", "abstractNote");
associateData (newItem, dataTags, "Title/StmntofResponsibility", "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 xPathTitles = doc.evaluate('//td/ul', doc, nsResolver, XPathResult.ANY_TYPE, null);
var linkContent = xPathTitles.iterateNext().textContent.split(/\n/);
var linkContent1;
var linkHref = new Array();
var xPathLinks= doc.evaluate('//ul/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var xPathLinksCount = doc.evaluate('count (//ul/a)', doc, nsResolver, XPathResult.ANY_TYPE, null);
for (i=0; i< xPathLinksCount.numberValue; i++) {
linkHref.push(xPathLinks.iterateNext().href);
var y = (i + 1);
linkContent1 = linkContent[y].split("- ");
items[linkHref[i]] = linkContent1[1];
}
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();
}