{ "translatorID": "330f283f-12e9-4421-aa59-e17ec5f4aa37", "label": "Glenbow Library", "creator": "Adam Crymble", "target": "^https?://ww2\\.glenbow\\.org/", "minVersion": "1.0.0b4.r5", "maxVersion": "", "priority": 100, "inRepository": true, "translatorType": 4, "browserSupport": "gcsibv", "lastUpdated": "2012-03-12 01:00:30" } function detectWeb(doc, url) { if (doc.title.match("Library Main Catalogue Search Results") && doc.location.href.match("GET_RECORD")) { return "book"; } else if (doc.title.match("Library Map Collection Search Results") && doc.location.href.match("GET_RECORD")) { return "map"; } else if (doc.title.match("Library Main Catalogue Search Results") && !(doc.location.href.match("GET_RECORD"))) { return "multiple"; } else if (doc.title.match("Map Collection Search Results") && !(doc.location.href.match("GET_RECORD"))) { return "multiple"; } } //Translator for the Glenbow Museum Collection. Code by Adam Crymble //Only works for Library Main Catalogue and Map Collection. The other categories do not have stable URLs for individual entries. function associateContent (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape (doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { } : null; var fieldTitle = new Array(); var tagsContent = new Array(); if (detectWeb(doc, url) == "book") { newItem = new Zotero.Item("book"); authorType= "author"; } else if (detectWeb(doc, url) == "map") { newItem = new Zotero.Item("map"); authorType= "cartographer"; } var dataTags= new Object(); var authorType; var organizeName; if (doc.evaluate('//tr/td/p', doc, nsResolver, XPathResult.ANY_TYPE, null)) { var xPathContent = doc.evaluate('//tr/td/p', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate('count (//tr/td/p)', doc, nsResolver, XPathResult.ANY_TYPE, null); for (var i = 0; i < xPathCount.numberValue; i++) { fieldTitle= xPathContent.iterateNext().textContent; var separate = fieldTitle.indexOf(":"); var fieldTitle1 = fieldTitle.substr(0, separate); fieldTitle1 = fieldTitle1.replace(/\s+/g, ''); var fieldContent = fieldTitle.substr(separate + 2); dataTags[fieldTitle1] = (fieldContent); } //names start if (dataTags["Names"]) { //if there are multiple authors: if (dataTags["Names"].match("\n")) { var multipleNames = dataTags["Names"].split("\n"); for (j = 0; j < multipleNames.length; j++) { if (detectWeb(doc, url) == "book") { multipleNames[j] = multipleNames[j].substr(3); } else if (detectWeb(doc, url) == "map") { multipleNames[j] = multipleNames[j]; } if (multipleNames[j].match(/\,/)) { organizeName = multipleNames[j].split(","); organizeName = (organizeName[1] + (" ") + organizeName[0]); newItem.creators.push(Zotero.Utilities.cleanAuthor(organizeName, authorType)); } else { newItem.creators.push({lastName: multipleNames[j], creatorType: authorType}); } } //if there is 1 human author } else if (dataTags["Names"].match(/\,/)) { if (detectWeb(doc, url) == "book") { var organizeName = dataTags["Names"].substr(3).split(","); } else if (detectWeb(doc, url) == "map") { var organizeName = dataTags["Names"].split(","); } organizeName = (organizeName[1] + (" ") + organizeName[0]); newItem.creators.push(Zotero.Utilities.cleanAuthor(organizeName,authorType)); //if there is 1 corporate author } else { if (detectWeb(doc, url) == "book") { newItem.creators.push({lastName: dataTags["Names"].substr(3), creatorType: authorType}); } else if (detectWeb(doc, url) == "map") { newItem.creators.push({lastName: dataTags["Names"], creatorType: authorType}); } } } //tags start if (dataTags["Subjects"]) { if (dataTags["Subjects"].match("\n")) { var multipleSubjects= dataTags["Subjects"].split("\n"); for (j = 0; j < multipleSubjects.length; j++) { multipleSubjects[j] = multipleSubjects[j].substr(3); tagsContent.push(Zotero.Utilities.cleanTags(multipleSubjects[j])); } } else { dataTags["Subjects"] = dataTags["Subjects"].substr(3); tagsContent.push(Zotero.Utilities.cleanTags(dataTags["Subjects"])); } for (var y = 0; y < tagsContent.length; y++) { newItem.tags[y] = tagsContent[y]; } } //book publisher info start if (dataTags["PublishingInformation"]) { dataTags["PublishingInformation"] = dataTags["PublishingInformation"].replace(/\[|\]*/g, ''); var pubLoc= dataTags["PublishingInformation"].split(":"); if (pubLoc[1]) { dataTags["Place"] = pubLoc[0]; var pubAndDate = pubLoc[1].split(","); dataTags["Publisher"] = pubAndDate[0]; dataTags["Date"] = pubAndDate[1]; } else { associateContent (newItem, dataTags, "PublishingInformation", "date"); } } //accession number start if (dataTags["Accessionnumber"]) { dataTags["Accessionnumber"] = ("Accession number: " + dataTags["Accessionnumber"]); } if (dataTags["CallNumber"]) { if (dataTags["CallNumber"] == ' ') { dataTags["CallNumber"] = "None"; Zotero.debug(dataTags["CallNumber"]); } } } associateContent (newItem, dataTags, "CallNumber", "callNumber"); associateContent (newItem, dataTags, "Title", "title"); associateContent (newItem, dataTags, "Place", "place"); associateContent (newItem, dataTags, "Publisher", "publisher"); associateContent (newItem, dataTags, "Date", "date"); associateContent (newItem, dataTags, "Description", "pages"); associateContent (newItem, dataTags, "Edition", "edition"); associateContent (newItem, dataTags, "Notes", "abstractNote"); associateContent (newItem, dataTags, "Accessionnumber", "extra"); associateContent (newItem, dataTags, "Scale", "scale"); newItem.url = doc.location.href; if (!newItem.title) newItem.title = "New Search Terms Suggested" 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(); var dataTags = new Object(); var titleList = new Array(); var uris = new Array(); var next_title= new Array(); if (detectWeb(doc, url) == "multiple") { //checks multiple entries for a link to a single entry page. if (doc.evaluate('//td/div[@class="floatRight"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null)) { var items = new Object(); var titles = doc.evaluate('//td/p', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathMultiCount = doc.evaluate('count (//td/p)', doc, nsResolver, XPathResult.ANY_TYPE, null); for (var i = 0; i < xPathMultiCount.numberValue; i++) { articles= titles.iterateNext().textContent; var separateMulti = articles.indexOf(":"); var articles1 = articles.substr(0, separateMulti); articles1 = articles1.replace(/\s+/g, ''); var multiContent = articles.substr(separateMulti + 2); dataTags[articles1] = (multiContent); if (articles1 == "Title") { titleList.push(dataTags["Title"]); } if (articles1 == "See") { titleList.push("skip"); } } var links = doc.evaluate('//td/div[@class="floatRight"]/a', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathLinksCount = doc.evaluate('count (//td/div[@class="floatRight"]/a)', doc, nsResolver, XPathResult.ANY_TYPE, null); for (i=0; i no tests