Permalink
Join GitHub today
GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.
Sign up
translators/Library Catalog (Dynix).js
Find file
Copy path
Fetching contributors…
Cannot retrieve contributors at this time
{ | |
"translatorID": "774d7dc2-3474-2684-392c-f787789ec63d", | |
"label": "Library Catalog (Dynix)", | |
"creator": "Simon Kornblith and Sylvain Machefert", | |
"target": "ipac\\.jsp\\?.*(uri=(link|full)=[0-9]|menu=search|term=)", | |
"minVersion": "2.1", | |
"maxVersion": "", | |
"priority": 260, | |
"inRepository": true, | |
"translatorType": 4, | |
"browserSupport": "gcsbv", | |
"lastUpdated": "2014-08-26 03:59:09" | |
} | |
function detectWeb(doc, url) { | |
// make sure there are multiple results | |
if (getSearchResults(doc).length) { | |
return "multiple"; | |
} else if (url.match(/[&?]uri=[^&#]+/)) { //single item entries have a ui parameter | |
return "book"; | |
} | |
} | |
function getSearchResults(doc) { | |
//search result | |
var res = ZU.xpath(doc, '(//center[1])/table/tbody/tr/td\ | |
/table//td[1]/a[starts-with(@href,"javascript:buildNewList")]'); | |
//search results, different format (see porbase.bnportugal.pt test cases) | |
if (!res.length) { | |
res = ZU.xpath(doc, 'html/body/table/tbody/tr[1]/td/table[5]/tbody/tr/td\ | |
/table/tbody/tr/td[2]/a[@href]'); | |
} | |
return res; | |
} | |
function doWeb(doc, url) { | |
var uri = doc.location.href; | |
var detailsRe = new RegExp('ipac\.jsp\?.*uri=(?:full|link)=[0-9]'); | |
var uris = new Array(); | |
if (detectWeb(doc,uri) == "book") { | |
if (uri.indexOf("#") !== -1) { | |
uris.push(uri.replace(/#/,'&fullmarc=true#')); | |
} else { | |
uris.push(uri+'&fullmarc=true'); | |
} | |
marcscrape(uris); | |
} else { | |
var results = getSearchResults(doc); | |
var items = {}; | |
for (var i=0, n=results.length; i<n; i++) { | |
items[results[i].href] = results[i].textContent; | |
} | |
Zotero.selectItems(items, function (items) { | |
if (!items) { | |
return true; | |
} | |
var uriRe = new RegExp("^javascript:buildNewList\\('([^']+)"); | |
var uris = new Array(); | |
for (var i in items) { | |
var m = uriRe.exec(i); | |
if (m) { | |
uris.push(unescape(m[1]) + '&fullmarc=true'); | |
} else { | |
uris.push(i+'&fullmarc=true'); | |
} | |
} | |
marcscrape(uris); | |
}); | |
} | |
} | |
function marcscrape(uris){ | |
var translator = Zotero.loadTranslator("import"); | |
translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973"); | |
translator.getTranslatorObject(function (marc) { | |
Zotero.Utilities.processDocuments(uris, function (newDoc) { | |
scrape(newDoc, marc); | |
}, function() {}, null); | |
}); | |
} | |
function scrape(newDoc, marc) { | |
var elmts = ZU.xpath(newDoc, '//form/table[@class="tableBackground"]/tbody/tr/td/table[@class="tableBackground"]/tbody/tr[td[1]/a[@class="normalBlackFont1"]]'); | |
if (!elmts.length) elmts = ZU.xpath(newDoc, '//form/table[@class="tableBackground"]/tbody/tr/td/table[@class="tableBackground"]/tbody/tr[td[1]/a[@class="boldBlackFont1"]]'); | |
var record = new marc.record(); | |
for (var i=0, n=elmts.length; i<n; i++) { | |
var elmt = elmts[i]; | |
var field = ZU.superCleanString(ZU.xpathText(elmt, './TD[1]/A[1]/text()[1]') || ''); | |
var value = (ZU.xpathText(elmt, './TD[2]/TABLE[1]/TBODY[1]/TR[1]/TD/A[1]', null, '') || '').trim(); | |
// Sometimes, the field contains "LDR: ", "001: ". We can delete these extra characters | |
field = field.replace(/[\s:]/g, ""); | |
if (field == "LDR"){ | |
record.leader = value; | |
} else if (field != "FMT") { | |
// In french catalogs (in unimarc), the delimiter isn't the $ but \xA4 is used. Added there | |
// Also added the fact that subfield codes can be numerics | |
value = value.replace(/[\xA4\$]([a-z0-9]) ?/g, marc.subfieldDelimiter+"$1"); | |
var code = field.substring(0, 3); | |
var ind = ""; | |
if (field.length > 3) { | |
ind = field[3]; | |
if (field.length > 4) { | |
ind += field[4]; | |
} | |
} | |
record.addField(code, ind, value); | |
} | |
} | |
var newItem = new Zotero.Item(); | |
record.translate(newItem); | |
var uri = newDoc.location.href; | |
var domain = uri.match(/https?:\/\/([^/]+)/); | |
newItem.libraryCatalog = domain[1]+" Library Catalog"; | |
// 20091210 : We try to get a permalink on the record | |
var perma = uri.match(/(https?:\/\/[^/]+.*ipac\.jsp\?).*(uri\=[^&]*)/); | |
var profile = uri.match(/(profile\=[^&]*)/); | |
if (perma && perma[1] && perma[2]) | |
{ | |
var permalink = perma[1] + perma[2]; | |
// Sometimes, for libraries with multiple profiles, it can be useful | |
// to store the permalink with the profile used | |
if (profile) | |
{ | |
permalink = permalink + "&" + profile[1]; | |
} | |
newItem.attachments = [{url:permalink, title:"Original record", mimeType:"text/html", snapshot:false}]; | |
} | |
else | |
{ | |
Zotero.debug("Unable to create permalink on " + uri); | |
} | |
newItem.complete(); | |
} | |
/** BEGIN TEST CASES **/ | |
var testCases = [ | |
{ | |
"type": "web", | |
"url": "http://siris-libraries.si.edu/ipac20/ipac.jsp?&profile=all&source=~!silibraries&uri=full=3100001~!820431~!0#focus", | |
"items": [ | |
{ | |
"itemType": "book", | |
"creators": [ | |
{ | |
"lastName": "Pennsylvania Academy of the Fine Arts", | |
"fieldMode": true | |
}, | |
{ | |
"firstName": "Thomas", | |
"lastName": "Eakins", | |
"creatorType": "editor" | |
}, | |
{ | |
"firstName": "Susan Macdowell", | |
"lastName": "Eakins", | |
"creatorType": "editor" | |
}, | |
{ | |
"firstName": "Benjamin", | |
"lastName": "Eakins", | |
"creatorType": "editor" | |
}, | |
{ | |
"firstName": "Charles", | |
"lastName": "Bregler", | |
"creatorType": "editor" | |
}, | |
{ | |
"firstName": "Kathleen A.", | |
"lastName": "Foster", | |
"creatorType": "editor" | |
} | |
], | |
"notes": [ | |
{ | |
"note": "Reproduces the full texts of the manuscripts in Bregler's collection Fully co-ordinated with and cross-referenced to a companion volume, Writing about Eakins, which contains biographical and critical essays, chronologies, lists of all the manuscripts and an index to microfiche locations At head of title: Archives, Pennsylvania Academy of the Fine Arts Title on information label issued with set: Microfiche edition of the manuscripts in Charles Bregler's Thomas Eakins Collection" | |
}, | |
{ | |
"note": "Series 1. The papers of Thomas Eakins -- (12 microfiches) Series 2. The papers of Susan Macdowell Eakins (8 microfiches) -- Series 3. Benjamin Eakins and Macdowell family papers (1 microfiche) -- Series 4. The papers of Charles Bregler (16 microfiches)" | |
} | |
], | |
"tags": [ | |
"Eakins, Thomas", | |
"Eakins, Susan Macdowell", | |
"Eakins, Benjamin", | |
"Bregler, Charles", | |
"Bregler, Charles", | |
"Library", | |
"McDowell family", | |
"Manuscripts", | |
"Private collections", | |
"Pennsylvania Philadelphia" | |
], | |
"seeAlso": [], | |
"attachments": [ | |
{ | |
"title": "Original record", | |
"mimeType": "text/html", | |
"snapshot": false | |
} | |
], | |
"ISBN": "0812282248", | |
"title": "Charles Bregler's Thomas Eakins collection", | |
"place": "Philadelphia, PA", | |
"publisher": "University of Pennsylvania Press", | |
"date": "1989", | |
"numPages": "37", | |
"callNumber": "mfc 000652", | |
"medium": "microform", | |
"libraryCatalog": "siris-libraries.si.edu Library Catalog" | |
} | |
] | |
}, | |
{ | |
"type": "web", | |
"url": "http://siris-libraries.si.edu/ipac20/ipac.jsp?session=Y3X077P415286.52120&menu=search&aspect=Keyword&npp=20&ipp=20&spp=20&profile=liball&ri=&term=&index=GW&x=0&y=0&aspect=Keyword&term=smith&index=AW&term=&index=TW&term=&index=SW&term=&index=.JW", | |
"items": "multiple" | |
}, | |
{ | |
"type": "web", | |
"url": "http://porbase.bnportugal.pt/ipac20/ipac.jsp?session=13544929K8D9M.93320&profile=porbase&uindex=TL&term=La%20exportaci%C3%B3n%20del%20jam%C3%B3n%20y%20otros%20derivados%20c%C3%A1rnicos%20:%20requisitos%20t%C3%A9cnicos&aspect=subtab11&menu=search&source=~!bnp", | |
"items": "multiple" | |
}, | |
{ | |
"type": "web", | |
"url": "http://porbase.bnportugal.pt/ipac20/ipac.jsp?session=13544Q6S70C55.90629&menu=search&aspect=subtab11&npp=20&ipp=20&spp=20&profile=porbase&ri=&term=jamon&index=.GW&x=0&y=0&aspect=subtab11", | |
"items": "multiple" | |
}, | |
{ | |
"type": "web", | |
"url": "http://catalogolx.cm-lisboa.pt/ipac20/ipac.jsp?uri=full=3100024~!135303~!415&ri=6", | |
"items": [ | |
{ | |
"itemType": "book", | |
"creators": [ | |
{ | |
"firstName": "Jorge", | |
"lastName": "Calado", | |
"creatorType": "author" | |
}, | |
{ | |
"lastName": "Fundação Eugénio de Almeida", | |
"creatorType": "contributor", | |
"fieldMode": true | |
} | |
], | |
"notes": [], | |
"tags": [], | |
"seeAlso": [], | |
"attachments": [ | |
{ | |
"title": "Original record", | |
"mimeType": "text/html", | |
"snapshot": false | |
} | |
], | |
"ISBN": "972-8517-13-0", | |
"language": "por eng", | |
"title": "Terra bendita: fotografias da FSA e afins", | |
"place": "Évora", | |
"publisher": "Fundação Eugénio de Almeida", | |
"date": "2000", | |
"callNumber": "908(73)(084.121)", | |
"libraryCatalog": "catalogolx.cm-lisboa.pt Library Catalog", | |
"shortTitle": "Terra bendita" | |
} | |
] | |
}, | |
{ | |
"type": "web", | |
"url": "http://catalogolx.cm-lisboa.pt/ipac20/ipac.jsp?uri=full=3100024~!73588~!2", | |
"items": [ | |
{ | |
"itemType": "book", | |
"creators": [ | |
{ | |
"firstName": "Luther S.", | |
"lastName": "Luedtke", | |
"creatorType": "author" | |
} | |
], | |
"notes": [], | |
"tags": [], | |
"seeAlso": [], | |
"attachments": [ | |
{ | |
"title": "Original record", | |
"mimeType": "text/html", | |
"snapshot": false | |
} | |
], | |
"language": "eng", | |
"title": "Making America: the society and culture of the United States", | |
"place": "Washington", | |
"publisher": "United States Information Agency", | |
"date": "1987", | |
"callNumber": "316.7(73)", | |
"libraryCatalog": "catalogolx.cm-lisboa.pt Library Catalog", | |
"shortTitle": "Making America" | |
} | |
] | |
} | |
] | |
/** END TEST CASES **/ |