97 lines
2.6 KiB
JavaScript
97 lines
2.6 KiB
JavaScript
{
|
|
"translatorID":"04153a16-5f34-491c-9475-7f4093db8e3e",
|
|
"translatorType":4,
|
|
"label":"University of Michigan",
|
|
"creator":"Matt Burton",
|
|
"target":"http://mirlyn\\-classic\\.lib\\.umich\\.edu",
|
|
"minVersion":"1.0.0b3.r1",
|
|
"maxVersion":"",
|
|
"priority":100,
|
|
"inRepository":true,
|
|
"lastUpdated":"2009-11-19 05:05:00"
|
|
}
|
|
|
|
var mirlyn2zoteroTypeMap = {
|
|
"Book":"book",
|
|
"Video (DVD)":"videoRecording",
|
|
"Video (VHS)":"videoRecording",
|
|
"Audio CD":"audioRecording"
|
|
};
|
|
|
|
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("/Record/") != '-1') {
|
|
var type = doc.evaluate('//span[contains(@class,"iconlabel")]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
|
|
var zType = mirlyn2zoteroTypeMap[type];
|
|
if (zType) {
|
|
return zType;
|
|
} else { // default to book
|
|
return "book";
|
|
}
|
|
} else if (url.indexOf("/Search/") != "-1") {
|
|
return "multiple";
|
|
}
|
|
}
|
|
|
|
function doWeb (doc, url) {
|
|
var namespace = doc.documentElement.namespaceURI;
|
|
var nsResolver = namespace ? function(prefix) {
|
|
if (prefix == 'x') return namespace; else return null;
|
|
} : null;
|
|
|
|
var marcURLs = [];
|
|
|
|
if (detectWeb(doc, url) == "multiple") {
|
|
var links = doc.evaluate("//a[@class='title']", doc, nsResolver, XPathResult.ANY_TYPE, null)
|
|
var items = {}, td;
|
|
while (td = links.iterateNext()) {
|
|
items[td.href] = td.textContent;
|
|
}
|
|
|
|
items = Zotero.selectItems(items);
|
|
if (!items) {
|
|
return true;
|
|
}
|
|
for (item in items){
|
|
marcURLs.push(item + "/Export?style=MARC");
|
|
}
|
|
|
|
} else { // we have a single
|
|
marcURLs.push(url + "/Export?style=MARC");
|
|
}
|
|
Zotero.Utilities.doGet(marcURLs, function(text){
|
|
// Merlyn is serving up the controL charcters in decimal, wassup wit dat?
|
|
text = text.replace(/#([^;]*);/g, function(match, group){
|
|
// I wish I could get this more generic method to work,
|
|
// but something funky about programatically building these hex strings
|
|
// "\\x + parseInt(group).toString(16);
|
|
// do it manually instead
|
|
switch(group) {
|
|
case "29":
|
|
return "\x1d";
|
|
case "30":
|
|
return "\x1e";
|
|
case "31":
|
|
return "\x1f";
|
|
default:
|
|
return;
|
|
}
|
|
});
|
|
|
|
var marc = Zotero.loadTranslator("import");
|
|
marc.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973");
|
|
marc.setString(text);
|
|
marc.setHandler("itemDone", function(obj, item) {
|
|
item.repository = "Mirlyn Library Catalog";
|
|
item.complete();
|
|
});
|
|
marc.translate();
|
|
|
|
}, function(){Zotero.done();});
|
|
Zotero.wait();
|
|
|
|
} |