zotero/translators/Artefacts Canada.js

192 lines
6.5 KiB
JavaScript
Raw Normal View History

2024-08-27 21:48:20 -05:00
{
"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 **/