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/Gulag Many Days, Many Lives.js
Find file
Copy path
Fetching contributors…
Cannot retrieve contributors at this time
{ | |
"translatorID": "c41c9c66-8540-4216-b138-7c00532748c9", | |
"label": "Gulag: Many Days, Many Lives", | |
"creator": "Adam Crymble", | |
"target": "^https?://gulaghistory\\.org", | |
"minVersion": "1.0.0b4.r5", | |
"maxVersion": "", | |
"priority": 100, | |
"inRepository": true, | |
"translatorType": 4, | |
"browserSupport": "gcsibv", | |
"lastUpdated": "2012-01-30 22:49:27" | |
} | |
function detectWeb(doc, url) { | |
if (doc.evaluate('//div[@class="field"][@id="citation"]/p', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { | |
return "book"; | |
} else if (doc.evaluate('//h3/a', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { | |
return "multiple"; | |
} | |
} | |
//Gulag: Many Days, Many Lives translator; Code by Adam Crymble | |
function scrape(doc, url) { | |
var namespace = doc.documentElement.namespaceURI; | |
var nsResolver = namespace ? function(prefix) { | |
if (prefix == 'x') return namespace; else return null; | |
} : null; | |
var newItem = new Zotero.Item("book"); | |
if (doc.evaluate('//div[@class="field"][@id="description"]/div', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { | |
var abstract1 = doc.evaluate('//div[@class="field"][@id="description"]/div', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; | |
newItem.abstractNote = abstract1.replace(/^\s+|\s*$/g, ''); | |
} | |
if (doc.evaluate('//div[@class="field"][@id="source"]/p', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { | |
var rights1 = doc.evaluate('//div[@class="field"][@id="source"]/p', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; | |
newItem.rights = rights1.replace(/^\s+|\s*$/g, ''); | |
} | |
var cite = doc.evaluate('//div[@class="field"][@id="citation"]/p', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; | |
var checkForAuthor = cite.indexOf('"'); | |
if (cite.match("Gulag: Many Days, Many Lives")) { | |
var split1 = new Array(); | |
var split2 = new Array(); | |
var split3 = new Array(); | |
var split4 = new Array(); | |
var split5 = new Array(); | |
if (checkForAuthor == 0) { | |
split1[1] = cite; | |
} else { | |
//author | |
split1 = cite.split(', "'); | |
var authorWords = split1[0].split(/\b\s/); | |
if (authorWords.length > 3) { | |
newItem.creators.push({lastName: split1[0], creatorType: "creator"}); | |
} else { | |
newItem.creators.push(Zotero.Utilities.cleanAuthor(split1[0], "author")); | |
} | |
} | |
//title | |
split2 = split1[1].split('." '); | |
newItem.title = split2[0]; | |
//repository | |
split3 = split2[1].split("Lives, "); | |
//object number | |
split4 = split3[1].split(" ("); | |
newItem.callNumber = split4[0]; | |
//date posted and URL | |
split5 = split4[1].split(")<"); | |
newItem.date = split5[0]; | |
} else { | |
var split1 = cite.split(". "); | |
//Zotero.debug(split1); | |
//author | |
var author = split1[0].split(/\, /); | |
author = author[1] + ' ' + author[0]; | |
//Zotero.debug(author); | |
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); | |
//title | |
newItem.title = split1[1]; | |
//place | |
var place1 = split1[2].split(":"); | |
newItem.place = place1[0]; | |
//date | |
var date1 = split1[2].split (", "); | |
newItem.date = date1[1]; | |
//publisher | |
newItem.publisher = date1[0].replace(place1[0], '').substr(2); | |
} | |
newItem.url = doc.location.href; | |
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(); | |
if (detectWeb(doc, url) == "multiple") { | |
var items = new Object(); | |
var titles = doc.evaluate('//h3/a', doc, nsResolver, XPathResult.ANY_TYPE, null); | |
var next_title; | |
while (next_title = titles.iterateNext()) { | |
items[next_title.href] = next_title.textContent; | |
} | |
items = Zotero.selectItems(items); | |
for (var i in items) { | |
articles.push(i); | |
} | |
} else { | |
articles = [url]; | |
} | |
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); | |
Zotero.wait(); | |
} | |
/** BEGIN TEST CASES **/ | |
var testCases = [ | |
{ | |
"type": "web", | |
"url": "http://gulaghistory.org/items/browse?search=Siberia&submit_search=Search", | |
"items": "multiple" | |
}, | |
{ | |
"type": "web", | |
"url": "http://gulaghistory.org/items/show/47", | |
"items": [ | |
{ | |
"itemType": "book", | |
"creators": [ | |
{ | |
"firstName": "Thomas", | |
"lastName": "Sgovio", | |
"creatorType": "author" | |
} | |
], | |
"notes": [], | |
"tags": [], | |
"seeAlso": [], | |
"attachments": [], | |
"abstractNote": "Map of Thomas Sgovio's two journeys. One journey took him from Moscow to Magadan, the other from Moscow beyond the Ural Mountains to Boguchani in Siberia.", | |
"title": "Dear America! Why I Turned Against Communism", | |
"place": "Kenmore, NY", | |
"date": "NY: Partners' Press", | |
"publisher": "nmore", | |
"url": "http://gulaghistory.org/items/show/47", | |
"libraryCatalog": "Gulag: Many Days, Many Lives", | |
"accessDate": "CURRENT_TIMESTAMP" | |
} | |
] | |
} | |
] | |
/** END TEST CASES **/ |