diff --git a/translators/National Library of Australia (new catalog).js b/translators/National Library of Australia (new catalog).js index fa7a3fe9c1..3c87d1b692 100644 --- a/translators/National Library of Australia (new catalog).js +++ b/translators/National Library of Australia (new catalog).js @@ -2,128 +2,130 @@ "translatorID":"54ac4ec1-9d07-45d3-9d96-48bed3411fb6", "translatorType":4, "label":"National Library of Australia (new catalog)", - "creator":"Mark Triggs and Steve McPhillips", + "creator":"Mark Triggs, Steve McPhillips and Matt Burton", "target":"catalogue.nla.gov.au", "minVersion":"1.0.0b4.r5", "maxVersion":"", "priority":100, "inRepository":true, - "lastUpdated":"2009-02-08 22:10:00" + "lastUpdated":"2009-04-12 10:10:00" } function detectWeb(doc, url) { - if (url.match("/Record/[0-9]+")) { - var format = Zotero.Utilities.cleanString(doc.getElementById("myformat").textContent); - - if (format == "Audio") { - return "audioRecording"; - } - else if (format == "Book") { - return "book"; - } - else if (format == "Journal/Newspaper") { - return "journalArticle"; - } - else if (format == "Manuscript") { - return "manuscript"; - } - else if (format == "Map") { - return "map"; - } - else if (format == "Music") { - return "audioRecording"; - } - else if (format == "Online") { - return "webpage"; - } - else if (format == "Picture") { - return "artwork"; - } - else if (format == "Video") { - return "videoRecording"; - } - else { - return "book"; - } - } else if (url.match ("/Search/Home") && - doc.getElementById ("resultItemLine1")) { - return "multiple"; - } + if (url.match("/Record/[0-9]+")) { + var format = doc.getElementById("myformat").textContent; + return computeFormat(format); + + } else if (url.match ("/Search/Home") && doc.getElementById ("resultItemLine1")) { + return "multiple"; + } } -function as_array(obj) { - if (obj instanceof Array) { - return obj; - } else { - return [obj]; - } +// map the nla formats to zotero formats +function computeFormat(format){ + // clean up whitespace and remove commas from items with multiple formats + format = Zotero.Utilities.trimInternal(format.replace(',', '')); + + if (format == "Audio") { + return "audioRecording"; + } + else if (format == "Book") { + return "book"; + } + else if (format == "Journal/Newspaper") { + return "journalArticle"; + } + else if (format == "Manuscript") { + return "manuscript"; + } + else if (format == "Map") { + return "map"; + } + else if (format == "Music") { + return "audioRecording"; + } + else if (format == "Online") { + return "webpage"; + } + else if (format == "Picture") { + return "artwork"; + } + else if (format == "Video") { + return "videoRecording"; + } + else { + return "book"; + } + } +function load_item(responseText, url, format) { + + var metadata = eval("(" + Zotero.Utilities.trimInternal(responseText) + ")"); + var bibid = url.match("^.*\/Record/([0-9]+)")[1]; + var newItem = new Zotero.Item(format[bibid]); -function load_item(responseText, requestObject, format) { - var metadata = JSON.parse(Zotero.Utilities.cleanString(responseText)); - var newItem = new Zotero.Item(format); + /* load in our authors */ + if (metadata.authors) { + for (var i=0; i< metadata.authors.length ; i++) { + newItem.creators.push(Zotero.Utilities.cleanAuthor + (metadata.authors[i], "author", true)); + } + } - /* load in our authors */ - if (metadata.authors) { - for (var i=0; i< metadata.authors.length ; i++) { - newItem.creators.push(Zotero.Utilities.cleanAuthor - (metadata.authors[i], "author", true)); - } - } + /* and our tags */ + if (metadata.tags) { + for (var i=0; i< metadata.tags.length ; i++) { + newItem.tags.push(metadata.tags[i]); + } + } + + /* and our summary */ + if (metadata.notes) { + newItem.notes.push ({"note": metadata.notes}); + } - /* and our tags */ - if (metadata.tags) { - for (var i=0; i< metadata.tags.length ; i++) { - newItem.tags.push(metadata.tags[i]); - } - } - - /* and our summary */ - if (metadata.notes) { - newItem.notes.push ({"note": metadata.notes}); - } - - /* and everything else */ - for (var attr in metadata) { - if (!newItem[attr]) { - newItem[attr] = metadata[attr]; - } - } - newItem.repository = "National Library of Australia"; - newItem.complete(); + /* and everything else */ + for (var attr in metadata) { + if (!newItem[attr]) { + newItem[attr] = metadata[attr]; + } + } + newItem.repository = "National Library of Australia"; + newItem.complete(); } function doWeb(doc, url) { - format = detectWeb(doc, url); - - items = []; - if (format == "multiple") { - for (var url in Zotero.selectItems((Zotero.Utilities.getItemArray - (doc, doc, "/Record/[0-9]+")))) { - items.push(url); - } - } else { - items.push(url); - } - - if (items.length > 0) { - Zotero.Utilities.processDocuments(items, function(onedoc) { - handleDocument(onedoc); - }, function() { Zotero.done(); }); - - Zotero.wait(); - } + var format = detectWeb(doc, url); + var items = {}; + // does javascript have an easy way to test if object has properties? + var itemsHasProperties = false; + if (format == "multiple") { + for (var url in Zotero.selectItems((Zotero.Utilities.getItemArray + (doc, doc, "/Record/[0-9]+")))) { + var bibid = url.match("^.*\/Record/([0-9]+)")[1]; + // grab the item type for that bibid so we don't have to make a processDocuments call for each + var xpath = "//div[contains(./div/a/@href, '"+bibid+"')]/div[@id = 'resultItemLine3']/span/text()"; + var nlaFormat = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; + // populate an associative array with bibid -> format for the doGet + items[bibid] = computeFormat(nlaFormat); + itemsHasProperties = true; // items has stuff + } + } else { + var bibid = url.match("^.*\/Record/([0-9]+)")[1]; + items[bibid] = format; + itemsHasProperties = true; // items has stuff + } + // only continue if there are items to create + if (itemsHasProperties) { + var urls = []; + for (var bibid in items) { + urls.push("http://catalogue.nla.gov.au/Record/" + bibid + "/Export?style=zotero"); + } + // the bibid->format associative array prevents the need for a doGet nested in processDocs + Zotero.Utilities.HTTP.doGet(urls, + function(text, obj, url) { load_item(text, url, items);}, + function(){ Zotero.done();}); + Zotero.wait(); + } } - - -function handleDocument(doc) { - bibid = doc.location.href.match("^.*\/Record/([0-9]+)")[1]; - format = detectWeb(doc, doc.location.href); - Zotero.Utilities.HTTP.doGet("http://catalogue.nla.gov.au/Record/" + - bibid + - "/Export?style=zotero", - function(text, obj) { - load_item(text, obj, format); - }); -} \ No newline at end of file