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/Common-Place.js
Find file
Copy path
Fetching contributors…
Cannot retrieve contributors at this time
{ | |
"translatorID": "c3edb423-f267-47a1-a8c2-158c247f87c2", | |
"label": "Common-Place", | |
"creator": "Frederick Gibbs, Philipp Zumstein", | |
"target": "^https?://(www\\.)?(common-place\\.org/|common-place-archives\\.org/)", | |
"minVersion": "3.0", | |
"maxVersion": "", | |
"priority": 100, | |
"inRepository": true, | |
"translatorType": 4, | |
"browserSupport": "gcsibv", | |
"lastUpdated": "2016-09-10 09:34:34" | |
} | |
function detectWeb(doc, url) { | |
if (getSearchResults(doc, true)) {//multiples works only on search pages | |
return "multiple"; | |
} else if (doc.body.className.indexOf("single-article")>-1 || url.indexOf("common-place-archives.org")>-1) { | |
return "journalArticle"; | |
} | |
} | |
function getSearchResults(doc, checkOnly) { | |
var items = {}; | |
var found = false; | |
var rows = ZU.xpath(doc, '//h3[contains(@class, "article-title")]/a|//h2/a'); | |
for (var i=0; i<rows.length; i++) { | |
var href = rows[i].href; | |
var title = ZU.trimInternal(rows[i].textContent); | |
if (!href || !title) continue; | |
if (checkOnly) return true; | |
found = true; | |
items[href] = title; | |
} | |
return found ? items : false; | |
} | |
function doWeb(doc, url) { | |
if (detectWeb(doc, url) == "multiple") { | |
Zotero.selectItems(getSearchResults(doc, false), function (items) { | |
if (!items) { | |
return true; | |
} | |
var articles = []; | |
for (var i in items) { | |
articles.push(i); | |
} | |
ZU.processDocuments(articles, scrape); | |
}); | |
} else { | |
scrape(doc, url); | |
} | |
} | |
function scrape(doc, url) { | |
var newItem = new Zotero.Item("journalArticle"); | |
newItem.publicationTitle = "Common-Place"; | |
newItem.url = url; | |
if (doc.body.className.indexOf("single-article")>-1) { | |
newItem.title = ZU.xpathText(doc, '//article/h1'); | |
var author = ZU.xpathText(doc, '//article/h1/following-sibling::p'); | |
if (author) { | |
newItem.creators.push(ZU.cleanAuthor(author, "author")); | |
} | |
newItem.abstractNote = ZU.xpathText(doc, '//article/div[contains(@class, "entry-excerpt")]'); | |
newItem.date = ZU.strToISO(ZU.trimInternal(ZU.xpathText(doc, '//article/ol[contains(@class, "breadcrumb")]/li/text()'))); | |
var volno = ZU.xpathText(doc, '//article/ol[contains(@class, "breadcrumb")]/li[1]/a'); | |
var m = volno.match(/Vol\. (\d+) No\. (\d+)/); | |
if (m) { | |
newItem.volume = m[1]; | |
newItem.issue = m[2]; | |
} | |
} else { | |
//get issue year and month | |
//these will determine what xpaths we use for title and author | |
//e.g. <a href="/vol-12/no-01/">vol. 12 · no. 1 · October 2011</a> | |
var dateRe = /<a href="\/vol-(\d+)\/no-(\d+)\/">([^<]*)<\/a>/; | |
var m = dateRe.exec(ZU.trimInternal(doc.getElementsByTagName("body")[0].innerHTML)); | |
if (m) { | |
newItem.volume = m[1]; | |
newItem.issue = m[2]; | |
var n = m[3].match(/· ([\w\s]+)$/); | |
if (n) { | |
newItem.date = ZU.strToISO(n[1]); | |
} | |
} | |
var author = ZU.xpathText(doc, '//div[@id="content"]/p/span[1]'); | |
var title = ZU.xpathText(doc, '//div[@id="content"]/p/span[2]'); | |
if (author) { | |
//determine if we have a book review | |
// if so, get the publication information | |
if (author.indexOf("Review by") != -1 ) { | |
title = String.concat("Review of ", title); | |
author = author.substring(10); | |
} | |
newItem.creators.push(ZU.cleanAuthor(author, "author")); | |
} else { //we have older issue | |
//check if we are on a review | |
var review = ZU.xpathText(doc, '/html/body/table/tbody/tr/td[2]/p[2]'); | |
if (review.indexOf("Review") != -1) { | |
title = ZU.xpathText(doc, '/html/body/table/tbody/tr/td[2]/p/i'); | |
title = "Review of " + title; | |
author = review.substring(10); | |
} else { //for articles | |
title = ZU.xpathText(doc, '/html/body/table/tbody/tr/td[2]/p/b'); | |
author = ZU.xpathText(doc, '/html/body/table/tbody/tr/td[2]/p[1]').split(/\n/)[1];; | |
} | |
newItem.creators.push(ZU.cleanAuthor(author, "author")); | |
} | |
newItem.title = title; | |
} | |
newItem.attachments.push({document:doc, title:doc.title}); | |
newItem.complete(); | |
} | |
/** BEGIN TEST CASES **/ | |
var testCases = [ | |
{ | |
"type": "web", | |
"url": "http://www.common-place-archives.org/vol-12/no-01/tales/", | |
"items": [ | |
{ | |
"itemType": "journalArticle", | |
"title": "Looking for Limbs in all the Right Places", | |
"creators": [ | |
{ | |
"firstName": "Megan Kate", | |
"lastName": "Nelson", | |
"creatorType": "author" | |
} | |
], | |
"date": "2011-10", | |
"issue": "01", | |
"libraryCatalog": "Common-Place", | |
"publicationTitle": "Common-Place", | |
"url": "http://www.common-place-archives.org/vol-12/no-01/tales/", | |
"volume": "12", | |
"attachments": [ | |
{ | |
"title": "Common-place: Tales from the Vault" | |
} | |
], | |
"tags": [], | |
"notes": [], | |
"seeAlso": [] | |
} | |
] | |
}, | |
{ | |
"type": "web", | |
"url": "http://www.common-place-archives.org/vol-03/no-03/mccaffrey/", | |
"items": [ | |
{ | |
"itemType": "journalArticle", | |
"title": "American Originals", | |
"creators": [ | |
{ | |
"firstName": "Katherine Stebbins", | |
"lastName": "McCaffrey", | |
"creatorType": "author" | |
} | |
], | |
"date": "2003-04", | |
"issue": "03", | |
"libraryCatalog": "Common-Place", | |
"publicationTitle": "Common-Place", | |
"url": "http://www.common-place-archives.org/vol-03/no-03/mccaffrey/", | |
"volume": "03", | |
"attachments": [ | |
{ | |
"title": "Common-place: American Originals" | |
} | |
], | |
"tags": [], | |
"notes": [], | |
"seeAlso": [] | |
} | |
] | |
}, | |
{ | |
"type": "web", | |
"url": "http://common-place.org/book/alive-with-the-sound-of-music/", | |
"items": [ | |
{ | |
"itemType": "journalArticle", | |
"title": "Alive with the Sound of Music", | |
"creators": [ | |
{ | |
"firstName": "Douglas", | |
"lastName": "Shadle", | |
"creatorType": "author" | |
} | |
], | |
"date": "2008-04", | |
"abstractNote": "Next to Stephen Foster, William Henry Fry was arguably the most important American composer working before the Civil War.", | |
"issue": "3", | |
"libraryCatalog": "Common-Place", | |
"publicationTitle": "Common-Place", | |
"url": "http://common-place.org/book/alive-with-the-sound-of-music/", | |
"volume": "08", | |
"attachments": [ | |
{ | |
"title": "Alive with the Sound of Music - Common-placeCommon-place: The Journal of early American Life" | |
} | |
], | |
"tags": [], | |
"notes": [], | |
"seeAlso": [] | |
} | |
] | |
} | |
] | |
/** END TEST CASES **/ |