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/Artefacts Canada.js
Find file
Copy path
Fetching contributors…
Cannot retrieve contributors at this time
{ | |
"translatorID": "661fc39a-2500-4710-8285-2d67ddc00a69", | |
"label": "Artefacts Canada", | |
"creator": "Adam Crymble", | |
"target": "^https?://(www\\.)?pro\\.rcip-chin\\.gc\\.ca", | |
"minVersion": "1.0", | |
"maxVersion": "", | |
"priority": 100, | |
"inRepository": true, | |
"translatorType": 4, | |
"browserSupport": "gcsibv", | |
"lastUpdated": "2013-09-16 00:25:18" | |
} | |
function detectWeb(doc, url) { | |
var multi1 = ''; | |
var single1 = ''; | |
if (doc.evaluate('//div[@id="mainContent"]/table/tbody/tr/td[1]/h1', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { | |
multi1 = doc.evaluate('//div[@id="mainContent"]/table/tbody/tr/td[1]/h1', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; | |
} | |
var xpath = '//tbody/tr[1]/td[2]/span'; | |
if (doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { | |
single1 = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; | |
} | |
if (multi1.match("Search Results") || multi1.match("Résultats de recherche")) { | |
return "multiple"; | |
} else if (single1.match("Document") || single1.match("Enregistrement")) { | |
return "artwork"; | |
} | |
} | |
function associateData (newItem, dataTags, field, zoteroField) { | |
if (dataTags[field]) { | |
newItem[zoteroField] = dataTags[field]; | |
} | |
} | |
function scrape(doc, url) { | |
var dataTags = new Object(); | |
var tagsContent = new Array(); | |
var fieldTitle; | |
var newItem = new Zotero.Item("artwork"); | |
var headers = doc.evaluate('//td[1][@class="leftResTitle"]', doc, null, XPathResult.ANY_TYPE, null); | |
var contents = doc.evaluate('//td[2][@class="pageText"]', doc, null, XPathResult.ANY_TYPE, null); | |
while (fieldTitle = headers.iterateNext()) { | |
fieldTitle = fieldTitle.textContent.replace(/\s+/g, ''); | |
if (fieldTitle == "Titre:") { | |
fieldTitle = "Title:"; | |
} else if (fieldTitle == "Nomdel'objet:") { | |
fieldTitle = "NameofObject:"; | |
} else if (fieldTitle == "Sujetouimage:") { | |
fieldTitle = "Subject/Image:"; | |
} else if (fieldTitle == "Numérod'accession:") { | |
fieldTitle = "AccessionNumber:"; | |
} else if (fieldTitle == "Artisteouartisan:") { | |
fieldTitle = "Artist/Maker:"; | |
} else if (fieldTitle == "Fabricant:") { | |
fieldTitle = "Manufacturer:"; | |
} | |
dataTags[fieldTitle] = contents.iterateNext().textContent.replace(/^\s*|\s*$/g, '') | |
} | |
Zotero.debug(dataTags); | |
if (dataTags["Artist/Maker:"]) { | |
if (dataTags["Artist/Maker:"].match(", ")) { | |
var authors = dataTags["Artist/Maker:"].split(", "); | |
authors = authors[0] + ' ' + authors[1]; | |
newItem.creators.push(authors, "creator"); | |
} else { | |
newItem.creators.push(dataTags["Artist/Make:"], "creator"); | |
} | |
} | |
if (dataTags["Manufacturer:"]) { | |
newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["Manufacturer:"], "creator")); | |
} | |
if (dataTags["AccessionNumber:"]) { | |
newItem.locInArchive = "Accession Number: " + dataTags["AccessionNumber:"]; | |
} | |
if (dataTags["Subject/Image:"]) { | |
if (dataTags["Subject/Image:"].match(/\n/)) { | |
var subjects = dataTags["Subject/Image:"].split(/\n/); | |
for (var i = 0; i < subjects.length; i++) { | |
newItem.tags[i] = subjects[i]; | |
} | |
} else { | |
newItem.tags[0] = dataTags["Subject/Image:"].match(/\n/); | |
} | |
} | |
if (dataTags["Title:"]) { | |
associateData (newItem, dataTags, "Title:", "title"); | |
associateData (newItem, dataTags, "NameofObject:", "medium"); | |
} else if (dataTags["NameofObject:"]) { | |
associateData (newItem, dataTags, "NameofObject:", "title"); | |
} else { | |
newItem.title = "No Title Found"; | |
} | |
associateData (newItem, dataTags, "LatestProductionDate:", "date"); | |
associateData (newItem, dataTags, "Datedefindeproduction:", "date"); | |
associateData (newItem, dataTags, "Institution:", "repository"); | |
associateData (newItem, dataTags, "Établissement:", "repository"); | |
associateData (newItem, dataTags, "Description:", "description"); | |
associateData (newItem, dataTags, "Medium:", "medium"); | |
associateData (newItem, dataTags, "Médium:", "medium"); | |
newItem.url = doc.location.href; | |
newItem.complete(); | |
} | |
function doWeb(doc, url) { | |
var articles = new Array(); | |
if (detectWeb(doc, url) == "multiple") { | |
var items = new Object(); | |
var titles = doc.evaluate('//tr[1]/td[2][@class="pageText"]', doc, null, XPathResult.ANY_TYPE, null); | |
var links = doc.evaluate('//td/a[contains(@class, "moreInfoink")]', doc, null, XPathResult.ANY_TYPE, null); | |
var next_title; | |
while (next_title = titles.iterateNext()) { | |
items[links.iterateNext().href] = next_title.textContent; | |
} | |
Zotero.selectItems(items, function (items) { | |
if (!items) { | |
return true; | |
} | |
for (var i in items) { | |
articles.push(i); | |
} | |
Zotero.Utilities.processDocuments(articles, scrape, function (){}); | |
}); | |
} else { | |
scrape(doc, url) | |
} | |
} | |
/** BEGIN TEST CASES **/ | |
var testCases = [ | |
{ | |
"type": "web", | |
"url": "http://www.pro.rcip-chin.gc.ca/bd-dl/artefacts-eng.jsp?emu=en.artefacts:/Proxac/ws/human/user/www/ResultSet&w=NATIVE(%27(WAT%20ph%20is%20%27%27montreal%27%27%20or%20WHAIR%20ph%20is%20%27%27montreal%27%27%20or%20WHOO%20ph%20is%20%27%27montreal%27%27%20or%20WEN%20ph%20is%20%27%27montreal%27%27%20or%20HOUU%20ph%20is%20%27%27montreal%27%27)%27)&upp=0&currLang=English", | |
"items": "multiple" | |
}, | |
{ | |
"type": "web", | |
"url": "http://www.pro.rcip-chin.gc.ca/bd-dl/artefacts-eng.jsp?emu=en.artefacts:/Proxac/ws/human/user/www/Record;jsessionid=hb7jhiecd1&upp=0&m=13&w=NATIVE%28%27%28WAT%20ph%20is%20%27%27montreal%27%27%20or%20WHAIR%20ph%20is%20%27%27montreal%27%27%20or%20WHOO%20ph%20is%20%27%27montreal%27%27%20or%20WEN%20ph%20is%20%27%27montreal%27%27%20or%20HOUU%20ph%20is%20%27%27montreal%27%27%29%27%29", | |
"items": [ | |
{ | |
"itemType": "artwork", | |
"creators": [ | |
{ | |
"firstName": "", | |
"lastName": "Bourbon", | |
"creatorType": "creator" | |
} | |
], | |
"notes": [], | |
"tags": [], | |
"seeAlso": [], | |
"attachments": [], | |
"locInArchive": "Accession Number: 2005.385", | |
"title": "Canada 1976", | |
"medium": "porte-clefs", | |
"date": "1976", | |
"description": "Porte-clefs en métal doré décoré d'un médaillon en acrylique clair présentant le logo des Jeux olympiques de Montréal.", | |
"url": "http://www.pro.rcip-chin.gc.ca/bd-dl/artefacts-eng.jsp?emu=en.artefacts:/Proxac/ws/human/user/www/Record;jsessionid=hb7jhiecd1&upp=0&m=13&w=NATIVE%28%27%28WAT%20ph%20is%20%27%27montreal%27%27%20or%20WHAIR%20ph%20is%20%27%27montreal%27%27%20or%20WHOO%20ph%20is%20%27%27montreal%27%27%20or%20WEN%20ph%20is%20%27%27montreal%27%27%20or%20HOUU%20ph%20is%20%27%27montreal%27%27%29%27%29", | |
"libraryCatalog": "Centre d'histoire de Montréal", | |
"accessDate": "CURRENT_TIMESTAMP" | |
} | |
] | |
} | |
] | |
/** END TEST CASES **/ |