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/SORA.js
Find file
Copy path
Fetching contributors…
Cannot retrieve contributors at this time
{ | |
"translatorID": "83d2ed27-40a5-4dc7-bd87-baddc8fb35da", | |
"label": "SORA", | |
"creator": "Philipp Zumstein", | |
"target": "^https?://sora\\.unm\\.edu/(node/|search/node/|advancedsearch\\?)", | |
"minVersion": "3.0", | |
"maxVersion": "", | |
"priority": 100, | |
"inRepository": true, | |
"translatorType": 4, | |
"browserSupport": "gcsbv", | |
"lastUpdated": "2017-06-24 15:08:40" | |
} | |
/* | |
***** BEGIN LICENSE BLOCK ***** | |
Copyright © 2014 Philipp Zumstein | |
This file is part of Zotero. | |
Zotero is free software: you can redistribute it and/or modify | |
it under the terms of the GNU Affero General Public License as published by | |
the Free Software Foundation, either version 3 of the License, or | |
(at your option) any later version. | |
Zotero is distributed in the hope that it will be useful, | |
but WITHOUT ANY WARRANTY; without even the implied warranty of | |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
GNU Affero General Public License for more details. | |
You should have received a copy of the GNU Affero General Public License | |
along with Zotero. If not, see <http://www.gnu.org/licenses/>. | |
***** END LICENSE BLOCK ***** | |
*/ | |
var mapping = { | |
"journal" : "publicationTitle", | |
"volume" : "volume", | |
"issue" : "issue", | |
"year" : "date", | |
"pages" : "pages", | |
"section" : "extra" | |
} | |
function detectWeb(doc, url) { | |
if ( ZU.xpath(doc, '//div[contains(@class, "content")]/fieldset/legend').length ) { // Publication Information | |
if (getSearchResults(doc, true)) { | |
return "multiple"; | |
} else { | |
return "journalArticle"; | |
} | |
} | |
if (url.indexOf('search')>-1 && getSearchResults(doc, true)) { | |
return "multiple"; | |
} | |
} | |
function getSearchResults(doc, checkOnly) { | |
var items = {}; | |
var found = false; | |
var rows = ZU.xpath(doc, '//div[contains(@class, "content")]//dt//a|//div[contains(@class, "content")]//h3[contains(@class, "title")]/a|//span[contains(@class, "field-content")]/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 = new Array(); | |
for (var i in items) { | |
articles.push(i); | |
} | |
ZU.processDocuments(articles, scrape); | |
}); | |
} else { | |
scrape(doc, url); | |
} | |
} | |
function scrape(doc, url) { | |
var item = new Zotero.Item(detectWeb(doc, url)); | |
//title | |
var title = ZU.xpathText(doc, '//h1[contains(@class, "title")]'); | |
item.title = title; | |
//authors | |
//Examples: | |
//Edward H. Burtt, Jr. | |
//James Hengeveld, Keith A. Mcmullen, Geoffrey A. Williamson | |
//==> The author string is splitted by ',' into the individual | |
//authors, but for suffixes this will be corrected again by | |
//some heuristic. This heuristic seperates another autor | |
//from a suffix by checking if the string consists any space | |
//and its length is less than 5. | |
var authors = ZU.xpathText(doc, '//div[contains(@class, "content")]/div[contains(@class, "field-name-field-authors")]/div/div/text()'); | |
if (authors) { | |
var authorsSplit = authors.split(','); | |
var index = 0; | |
for (var m=0; m<authorsSplit.length; m++) { | |
var value = ZU.trim(authorsSplit[m]); | |
if (value != '') { | |
if (value.indexOf(' ') == -1 && value.length<5 && index>0) { | |
item.creators[index-1].firstName += ', ' + value;//Jr. or III. | |
} else { | |
item.creators.push( ZU.cleanAuthor( value, "author") ); | |
index++; | |
} | |
} | |
} | |
} | |
//other fields | |
var fields = ZU.xpath(doc, '//div[contains(@class, "content")]/fieldset/div/div'); | |
for (var k=0; k<fields.length; k++) { | |
var fieldName = ZU.xpathText(fields[k], './div[contains(@class, "field-label")]').replace(':','').toLowerCase().trim(); | |
var fieldValue = ZU.xpathText(fields[k], './div[contains(@class, "field-items")]').replace(',','').trim(); | |
if (mapping[fieldName]) { | |
item[ mapping[fieldName] ] = fieldValue; | |
} else { | |
Z.debug('Unrecognized field: ' + fieldName); | |
} | |
} | |
var pdfLink = ZU.xpath(doc, '//div[contains(@class, "field-name-upload")]//a[contains(@type, "application/pdf")]'); | |
if (pdfLink.length>0) { | |
item.attachments.push({ | |
title : "Full Text PDF", | |
url : pdfLink[0].href, | |
mimeType : "application/pdf" | |
}); | |
} | |
//link to SORA entry | |
item.attachments.push({ | |
title : "SORA Entry", | |
url : url, | |
mimeType : "text/html", | |
snapshot : false | |
}); | |
item.complete(); | |
}/** BEGIN TEST CASES **/ | |
var testCases = [ | |
{ | |
"type": "web", | |
"url": "https://sora.unm.edu/node/99151", | |
"items": [ | |
{ | |
"itemType": "journalArticle", | |
"title": "The Passing of Coragyps Shastensis Miller", | |
"creators": [ | |
{ | |
"firstName": "Loye", | |
"lastName": "Miller", | |
"creatorType": "author" | |
} | |
], | |
"date": "1941", | |
"issue": "3 (May-June)", | |
"libraryCatalog": "SORA", | |
"pages": "140-141", | |
"publicationTitle": "Condor", | |
"volume": "43", | |
"attachments": [ | |
{ | |
"title": "Full Text PDF", | |
"mimeType": "application/pdf" | |
}, | |
{ | |
"title": "SORA Entry", | |
"mimeType": "text/html", | |
"snapshot": false | |
} | |
], | |
"tags": [], | |
"notes": [], | |
"seeAlso": [] | |
} | |
] | |
}, | |
{ | |
"type": "web", | |
"url": "https://sora.unm.edu/node/2035", | |
"items": "multiple" | |
}, | |
{ | |
"type": "web", | |
"url": "https://sora.unm.edu/node/116567", | |
"items": [ | |
{ | |
"itemType": "journalArticle", | |
"title": "Illinois and Indiana", | |
"creators": [ | |
{ | |
"firstName": "James", | |
"lastName": "Hengeveld", | |
"creatorType": "author" | |
}, | |
{ | |
"firstName": "Keith A.", | |
"lastName": "Mcmullen", | |
"creatorType": "author" | |
}, | |
{ | |
"firstName": "Geoffrey A.", | |
"lastName": "Williamson", | |
"creatorType": "author" | |
} | |
], | |
"date": "2006", | |
"issue": "3", | |
"libraryCatalog": "SORA", | |
"pages": "376-378", | |
"publicationTitle": "North American Birds", | |
"volume": "60", | |
"attachments": [ | |
{ | |
"title": "Full Text PDF", | |
"mimeType": "application/pdf" | |
}, | |
{ | |
"title": "SORA Entry", | |
"mimeType": "text/html", | |
"snapshot": false | |
} | |
], | |
"tags": [], | |
"notes": [], | |
"seeAlso": [] | |
} | |
] | |
}, | |
{ | |
"type": "web", | |
"url": "https://sora.unm.edu/node/162", | |
"items": [ | |
{ | |
"itemType": "journalArticle", | |
"title": "An Analysis of Physical, Physiological, and Optical Aspects of Avian Coloration with Emphasis on Wood-Warblers", | |
"creators": [ | |
{ | |
"firstName": "Edward H., Jr.", | |
"lastName": "Burtt", | |
"creatorType": "author" | |
} | |
], | |
"date": "1986", | |
"issue": "38", | |
"libraryCatalog": "SORA", | |
"pages": "1-126", | |
"publicationTitle": "Ornithological Monographs", | |
"attachments": [ | |
{ | |
"title": "Full Text PDF", | |
"mimeType": "application/pdf" | |
}, | |
{ | |
"title": "SORA Entry", | |
"mimeType": "text/html", | |
"snapshot": false | |
} | |
], | |
"tags": [], | |
"notes": [], | |
"seeAlso": [] | |
} | |
] | |
}, | |
{ | |
"type": "web", | |
"url": "https://sora.unm.edu/advancedsearch?field_authors_value=&title=condor&field_fulltext_value=&field_year_value=", | |
"items": "multiple" | |
}, | |
{ | |
"type": "web", | |
"url": "https://sora.unm.edu/search/node/eagle%20type%3Aarticle", | |
"items": "multiple" | |
}, | |
{ | |
"type": "web", | |
"url": "https://sora.unm.edu/node/53338", | |
"items": [ | |
{ | |
"itemType": "journalArticle", | |
"title": "A Comparison of Home Range Estimates for a Bald Eagle Wintering in New Mexico", | |
"creators": [ | |
{ | |
"firstName": "Dale W.", | |
"lastName": "Stahlecker", | |
"creatorType": "author" | |
}, | |
{ | |
"firstName": "Timothy G.", | |
"lastName": "Smith", | |
"creatorType": "author" | |
} | |
], | |
"date": "1993", | |
"extra": "Short Communications", | |
"issue": "1 (March)", | |
"libraryCatalog": "SORA", | |
"pages": "42-45", | |
"publicationTitle": "Journal of Raptor Research", | |
"volume": "27", | |
"attachments": [ | |
{ | |
"title": "Full Text PDF", | |
"mimeType": "application/pdf" | |
}, | |
{ | |
"title": "SORA Entry", | |
"mimeType": "text/html", | |
"snapshot": false | |
} | |
], | |
"tags": [], | |
"notes": [], | |
"seeAlso": [] | |
} | |
] | |
} | |
] | |
/** END TEST CASES **/ |