249 lines
9.6 KiB
JavaScript
249 lines
9.6 KiB
JavaScript
{
|
|
"translatorID": "8381bf68-11fa-418c-8530-2e00284d3efd",
|
|
"label": "IRIS",
|
|
"creator": "Chad Mills and Michael Berkowitz",
|
|
"target": "^https?://[^/]*www[\\.\\-]iris[\\.\\-]rutgers[\\.\\-]edu[^/]*/",
|
|
"minVersion": "1.0.0b4.r5",
|
|
"maxVersion": "",
|
|
"priority": 90,
|
|
"inRepository": true,
|
|
"translatorType": 4,
|
|
"browserSupport": "gcsibv",
|
|
"lastUpdated": "2013-06-08 12:14:42"
|
|
}
|
|
|
|
function detectWeb(doc, url) {
|
|
if (doc.evaluate('//div[@class="content_container"]/div[@class="content"]/form[@id="hitlist"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
|
|
return "multiple";
|
|
} else if (doc.evaluate('//div[@class="content_container item_details"]/div[@class="content"]/ul[contains(@class, "detail_page")]/li/div/table', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
|
|
return "book";
|
|
}
|
|
}
|
|
|
|
function scrape(doc) {
|
|
|
|
var xpath = '//div[@class="content_container item_details"]/div[@class="content"]/ul[contains(@class, "detail_page")]/li/div/table//tr[th[@class="viewmarctags1"]][td[@class="viewmarctags"]]';
|
|
|
|
var elmts = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null);
|
|
|
|
var elmt = elmts.iterateNext();
|
|
|
|
if (!elmt) {
|
|
return false;
|
|
}
|
|
|
|
var newItem = new Zotero.Item("book");
|
|
newItem.extra = "";
|
|
|
|
newItem.series = "";
|
|
var seriesItemCount = 0;
|
|
|
|
while (elmt) {
|
|
try {
|
|
var node = doc.evaluate('./TD[1]/A[1]/text()[1]', elmt, null, XPathResult.ANY_TYPE, null).iterateNext();
|
|
if (!node) {
|
|
var node = doc.evaluate('./TD[1]/text()[1]', elmt, null, XPathResult.ANY_TYPE, null).iterateNext();
|
|
}
|
|
if (node) {
|
|
var casedField = Zotero.Utilities.superCleanString(doc.evaluate('./TH[1]/text()', elmt, null, XPathResult.ANY_TYPE, null).iterateNext().nodeValue);
|
|
field = casedField.toLowerCase();
|
|
|
|
var value = Zotero.Utilities.superCleanString(node.nodeValue);
|
|
|
|
if (field == "publisher") {
|
|
newItem.publisher = value;
|
|
} else if (field == "pub date") {
|
|
var re = /[0-9]+/;
|
|
var m = re.exec(value);
|
|
newItem.date = m[0];
|
|
} else if (field == "isbn") {
|
|
var re = /^[0-9](?:[0-9X]+)/;
|
|
var m = re.exec(value);
|
|
newItem.ISBN = m[0];
|
|
} else if (field == "title") {
|
|
Zotero.debug(value);
|
|
var titleParts = value.split(" / ");
|
|
re = /\[(.+)\]/i;
|
|
if (re.test(titleParts[0])) {
|
|
var ar = re.exec(titleParts[0]);
|
|
var itype = ar[1].toLowerCase();
|
|
if (itype == "phonodisc" || itype == "sound recording") {
|
|
newItem.itemType = "audioRecording";
|
|
} else if (itype == "videorecording") {
|
|
newItem.itemType = "videoRecording";
|
|
} else if (itype == "electronic resource") {
|
|
newItem.itemType = "webPage";
|
|
}
|
|
}
|
|
newItem.title = Zotero.Utilities.capitalizeTitle(titleParts[0]);
|
|
} else if (field == "series") { //push onto item, delimit with semicolon when needed
|
|
if (seriesItemCount != 0) {
|
|
newItem.series += "; " + value;
|
|
} else if (seriesItemCount == 0) {
|
|
newItem.series = value;
|
|
}
|
|
seriesItemCount++; //bump counter
|
|
} else if (field == "dissertation note") {
|
|
newItem.itemType = "thesis";
|
|
var thesisParts = value.split("--");
|
|
var uniDate = thesisParts[1].split(", ");
|
|
newItem.university = uniDate[0];
|
|
newItem.date = uniDate[1];
|
|
} else if (field == "edition") {
|
|
newItem.edition = value;
|
|
} else if (field == "physical descrip") {
|
|
//support
|
|
var physParts = value.split(" : ");
|
|
var physParts = physParts[0].split(" ; ");
|
|
//determine pages, split on " p."
|
|
var physPages = value.split(" p.");
|
|
//break off anything in the beginning before the numbers
|
|
var pageParts = physPages[0].split(" ");
|
|
newItem.numPages = pageParts[pageParts.length - 1];
|
|
} else if (field == "publication info") {
|
|
var pubParts = value.split(" : ");
|
|
newItem.place = pubParts[0];
|
|
//drop off first part of array and recombine
|
|
pubParts.shift();
|
|
var i;
|
|
var publisherInfo;
|
|
for (i in pubParts) {
|
|
if (i == 0) {
|
|
publisherInfo = pubParts[i] + " : ";
|
|
} else {
|
|
publisherInfo = publisherInfo + pubParts[i] + " : ";
|
|
}
|
|
} //END for
|
|
//drop off last colon
|
|
publisherInfo = publisherInfo.substring(0, (publisherInfo.length - 3));
|
|
//break apart publication parts into Publisher and Date
|
|
var publisherParts = publisherInfo.split(",");
|
|
newItem.publisher = publisherParts[0];
|
|
//check that first character isn't a 'c', if so drop it
|
|
if (publisherParts[1].substring(1, 2) == "c") {
|
|
newItem.date = publisherParts[1].substring(2);
|
|
} else {
|
|
newItem.date = publisherParts[1];
|
|
}
|
|
} else if (field == "personal author") {
|
|
newItem.creators.push(Zotero.Utilities.cleanAuthor(value, "author", true));
|
|
} else if (field == "performer") {
|
|
newItem.creators.push(Zotero.Utilities.cleanAuthor(value, "performer", true));
|
|
} else if (field == "author") {
|
|
newItem.creators.push(Zotero.Utilities.cleanAuthor(value, "author", true));
|
|
} else if (field == "added author") {
|
|
newItem.creators.push(Zotero.Utilities.cleanAuthor(value, "contributor", true));
|
|
} else if (field == "conference author" || field == "corporate author") {
|
|
newItem.creators.push(value);
|
|
} else if (field == "subject" || field == "corporate subject" || field == "geographic term") {
|
|
var subjects = value.split("--");
|
|
newItem.tags = newItem.tags.concat(subjects);
|
|
} else if (field == "personal subject") {
|
|
var subjects = value.split(", ");
|
|
newItem.tags = newItem.tags.push(value[0] + ", " + value[1]);
|
|
} else if (value && field != "http") {
|
|
newItem.extra += casedField + ": " + value + "\n";
|
|
}
|
|
}
|
|
} catch (e) {}
|
|
elmt = elmts.iterateNext();
|
|
} //END if node
|
|
if (newItem.extra) {
|
|
newItem.extra = newItem.extra.substr(0, newItem.extra.length - 1);
|
|
}
|
|
|
|
var callNumber = doc.evaluate('//tr/td[1][@class="holdingslist"]/strong/text()', doc, null, XPathResult.ANY_TYPE, null).iterateNext();
|
|
|
|
if (callNumber && callNumber.nodeValue) {
|
|
newItem.callNumber = callNumber.nodeValue;
|
|
}
|
|
|
|
newItem.libraryCatalog = "IRIS";
|
|
newItem.complete();
|
|
return true;
|
|
} //END try
|
|
function doWeb(doc, url) {
|
|
if (!scrape(doc)) {
|
|
var checkboxes = new Array();
|
|
var urls = new Array();
|
|
var availableItems = new Array();
|
|
//pull items
|
|
var tableRows = doc.evaluate('//ul[@class="hit_list"]/li/ul[contains(@class, "hit_list_row")][//input[@value="Details"]]', doc, null, XPathResult.ANY_TYPE, null);
|
|
|
|
// Go through table rows
|
|
while (tableRow = tableRows.iterateNext()) {
|
|
var input = doc.evaluate('.//input[@value="Details"]', tableRow, null, XPathResult.ANY_TYPE, null).iterateNext();
|
|
var text = doc.evaluate('.//strong', tableRow, null, XPathResult.ANY_TYPE, null).iterateNext().textContent;
|
|
if (text) {
|
|
availableItems[input.name] = text;
|
|
}
|
|
} //END while
|
|
var items = Zotero.selectItems(availableItems);
|
|
if (!items) {
|
|
return true;
|
|
}
|
|
var hostRe = new RegExp("^http(?:s)?://[^/]+");
|
|
var m = hostRe.exec(doc.location.href);
|
|
Zotero.debug("href: " + doc.location.href);
|
|
var hitlist = doc.forms.namedItem("hitlist");
|
|
var baseUrl = m[0] + hitlist.getAttribute("action") + "?first_hit=" + hitlist.elements.namedItem("first_hit").value + "&last_hit=" + hitlist.elements.namedItem("last_hit").value;
|
|
var uris = new Array();
|
|
for (var i in items) {
|
|
uris.push(baseUrl + "&" + i + "=Details");
|
|
}
|
|
Zotero.Utilities.processDocuments(uris, function (doc) {
|
|
scrape(doc)
|
|
}, function () {
|
|
Zotero.done()
|
|
}, null);
|
|
Zotero.wait();
|
|
} //END if not scrape(doc)
|
|
} //END scrape function
|
|
/** BEGIN TEST CASES **/
|
|
var testCases = [
|
|
{
|
|
"type": "web",
|
|
"url": "https://www-iris-rutgers-edu.proxy.libraries.rutgers.edu/uhtbin/cgisirsi/0/0/0/123?srchfield1=&searchdata1=4835224%7bCKEY%7d&library=",
|
|
"items": [
|
|
{
|
|
"itemType": "book",
|
|
"creators": [
|
|
{
|
|
"firstName": "Kōzō",
|
|
"lastName": "Yamamura",
|
|
"creatorType": "contributor"
|
|
},
|
|
{
|
|
"firstName": "Wolfgang",
|
|
"lastName": "Streeck",
|
|
"creatorType": "contributor"
|
|
}
|
|
],
|
|
"notes": [],
|
|
"tags": [
|
|
"Capitalism",
|
|
"Capitalism",
|
|
"Economic policy",
|
|
"Economic policy",
|
|
"Germany",
|
|
"Germany",
|
|
"Japan",
|
|
"Japan"
|
|
],
|
|
"seeAlso": [],
|
|
"attachments": [],
|
|
"extra": "Contents: Convergence or diversity? : stability and change in German and Japanese capitalism / Wolfgang Streeck and Kozo Yamamura -- Germany and Japan : binding versus autonomy / Erica R. Gould and Stephen D. Krasner -- Regional states : Japan and Asia, Germany in Europe / Peter J. Katzenstein -- Germany and Japan in a new phase of capitalism / Kozo Yamamura -- The embedded innovation systems of Germany and Japan / Robert Boyer -- The future of nationally embedded capitalism / Kathleen Thelen and Ikuo Kume -- Transformation and interaction / Ulrich Jürgens -- From banks to markets / Sigurt Vitols -- Corporate governance in Germany and Japan / Gregory Jackson -- The re-organization of organized capitalism / Steven K. Vogel -- Competitive party democracy and political-economic reform in Germany and Japan / Herbert Kitschelt\nSecondary subject: Capitalisme--Allemagne\nSecondary subject: Capitalisme--Japon\nSecondary subject: Allemagne--Politique économique\nSecondary subject: Japon--Politique économique\n: e!Cr, 耕造\nRelated info: Book review (H-Net) http://www.h-net.org/review/hrev-a0e5q7-aa",
|
|
"series": "Cornell studies in political economy; Cornell studies in political economy",
|
|
"title": "The end of diversity?: prospects for German and Japanese capitalism",
|
|
"place": "Ithaca",
|
|
"publisher": "Cornell University Press",
|
|
"date": "2003",
|
|
"numPages": "401",
|
|
"callNumber": "HC286.8.E39 2003",
|
|
"libraryCatalog": "IRIS",
|
|
"shortTitle": "The end of diversity?"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
/** END TEST CASES **/ |