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/Antikvarium.hu.js
Find file
Copy path
Fetching contributors…
Cannot retrieve contributors at this time
{ | |
"translatorID": "68a54283-67e0-4e1c-ad3d-5b699868b194", | |
"label": "Antikvarium.hu", | |
"creator": "Velősy Péter Kristóf", | |
"target": "^https?://(www\\.)?antikvarium\\.hu/", | |
"minVersion": "3.0", | |
"maxVersion": "", | |
"priority": 100, | |
"inRepository": true, | |
"translatorType": 4, | |
"browserSupport": "gcsibv", | |
"lastUpdated": "2017-11-11 15:26:37" | |
} | |
/* | |
***** BEGIN LICENSE BLOCK ***** | |
Copyright © 2017 Velősy Péter Kristóf | |
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 ***** | |
*/ | |
//Zotero attr() and text() functions: | |
function attr(docOrElem,selector,attr,index){var elem=index?docOrElem.querySelectorAll(selector).item(index):docOrElem.querySelector(selector);return elem?elem.getAttribute(attr):null;}function text(docOrElem,selector,index){var elem=index?docOrElem.querySelectorAll(selector).item(index):docOrElem.querySelector(selector);return elem?elem.textContent:null;} | |
function detectWeb(doc, url) { | |
if (url.includes('konyv')) { | |
return "book"; | |
} else if (url.includes('index.php?type=search') && getSearchResults(doc, true)){ | |
return "multiple"; | |
} | |
} | |
function getSearchResults(doc, checkOnly) { | |
var items = {}; | |
var found = false; | |
var rows = doc.querySelectorAll('.src-result-book'); | |
for (var i=0; i<rows.length; i++) { | |
var href = attr(rows[i], '#searchResultKonyv-csempes', 'href'); | |
var title = ZU.trimInternal(text(rows[i], '.book-title-src')); | |
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('book'); | |
newItem.title = text(doc, '[itemprop=name]', 0).trim(); | |
var subtitle = text(doc, '[itemprop=alternateName]', 0) ? text(doc, '[itemprop=alternateName]', 0).trim() : null; | |
if (subtitle) { | |
newItem.title = newItem.title + ': ' + capitalizeHungarianTitle(subtitle, true); | |
} | |
var authors = Array.from(doc.querySelectorAll('[itemprop=author]')).map(x => cleanHungarianAuthor(x.innerText)); | |
authors.forEach(x => newItem.creators.push(x)); | |
var abstract = text(doc, 'fulszovegFull', 0) || text(doc, 'eloszoFull', 0); | |
if (abstract) { | |
newItem.abstractNote = abstract.replace(' Vissza', '').trim(); | |
} | |
var seriesElement = doc.getElementById('konyvAdatlapSorozatLink'); | |
if (seriesElement && seriesElement.length) { | |
newItem.series = seriesElement.innerText; | |
newItem.seriesNumber = getElementByInnerText('th', 'Kötetszám:').parentElement.children[1].innerText; | |
newItem.volume = newItem.seriesNumber; | |
} | |
var publisherElement = doc.querySelector('[itemprop=publisher]'); | |
if (publisherElement) { | |
var publisherName = text(publisherElement, '[itemprop=name]', 0); | |
if (publisherName) { | |
newItem.publisher = publisherName; | |
} | |
var publisherPlace = text(publisherElement, '[itemprop=address]', 0); | |
if (publisherPlace) { | |
newItem.place = publisherPlace.replace('(', '').replace(')', ''); | |
} | |
} | |
newItem.date = text(doc, '[itemprop=datePublished]'); | |
newItem.numPages = text(doc, '[itemprop=numberOfPages]', 0); | |
newItem.language = text(doc, '[itemprop=inLanguage]', 0); | |
var isbnElement = getElementByInnerText(doc, 'th', 'ISBN:'); | |
if (isbnElement) { | |
newItem.ISBN = isbnElement.parentElement.children[1].innerText; | |
} | |
var contentsElement = doc.getElementById('tartalomFull'); | |
if (contentsElement) { | |
newItem.notes.push({note: contentsElement.innerText}); | |
} | |
newItem.attachments.push({document: doc, title: "Antikvarium.hu Snapshot", mimeType: "text/html" }); | |
newItem.complete(); | |
} | |
function getElementByInnerText(doc, elementType, innerText) { | |
var tags = doc.getElementsByTagName(elementType); | |
for (var i = 0; i < tags.length; i++) { | |
if (tags[i].textContent == innerText) { | |
return tags[i]; | |
} | |
} | |
return null; | |
} | |
function cleanHungarianAuthor(authorName) { | |
if (authorName.includes(',')) { | |
return Zotero.Utilities.cleanAuthor(authorName, 'author', true); | |
} else { | |
var author = Zotero.Utilities.cleanAuthor(authorName, 'author', false); | |
var firstName = author.lastName; | |
var lastName = author.firstName; | |
author.firstName = firstName; | |
author.lastName = lastName; | |
return author; | |
} | |
} | |
function capitalizeHungarianTitle(title) { | |
title = title[0].toUpperCase() + title.substring(1).toLowerCase(); | |
var words = title.split(/[ !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]/); | |
words.forEach(w => { | |
if (isRomanNumeral(w)) { | |
title = title.replace(w, w.toUpperCase()); | |
} | |
}); | |
return title; | |
} | |
function isRomanNumeral(word) { | |
var romanRegex = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/; | |
return word.toUpperCase().match(romanRegex) ? true : false; | |
} | |
/** BEGIN TEST CASES **/ | |
var testCases = [ | |
{ | |
"type": "web", | |
"url": "https://www.antikvarium.hu/konyv/erdei-janos-atlasz-almai-82276", | |
"items": [ | |
{ | |
"itemType": "book", | |
"title": "Atlasz álmai: Borges a szovjetunióban/az öröklét előszobája és egyéb történetek", | |
"creators": [ | |
{ | |
"firstName": "János", | |
"lastName": "Erdei", | |
"creatorType": "author" | |
} | |
], | |
"date": "1991", | |
"language": "Magyar", | |
"libraryCatalog": "Antikvarium.hu", | |
"numPages": "140", | |
"place": "Budapest", | |
"publisher": "Aero & Rádió Kft.", | |
"shortTitle": "Atlasz álmai", | |
"attachments": [ | |
{ | |
"title": "Antikvarium.hu Snapshot", | |
"mimeType": "text/html" | |
} | |
], | |
"tags": [], | |
"notes": [ | |
{ | |
"note": "TARTALOM\nElőszó\t5\nMásodik ébredés\t7\nMegvilágosodás\t9\nSzemelvények Gusavson műveiből\t17\nHalvány kétkedés\t17\nMegjegyzés\t20\nJótékony hazugság\t21\nA föltámadt Krisztus dilemmája\t23\nÁbrahám\t24\nSzerelmes ébredés és álom\t27\nRáébredés: a rabszolga\t33\nDacos ébredés, avagy az ötödik evangélista\t35\nElalvás előtt I.\t40\nKét álmodó\t40\nElalvás előtt II.\t43\nA kivégzési jegy\t45\nGyújtópont\t53\nFelvillanás\t55\nAngyali üdvözlet\t63\nA fellendülés okai\t65\nFéreg által homályosan\t71\nBorges a Szovjetunióban\t81\nA nevetés köve\t89\nA Nagy Rendszer\t93\nTúl az álmokon: az igazhitű\t97\nAz öröklét előszobája\t101\nElragadottság\t109\nA legvidámabb eretnek\t113\nÚjabb fejlemények az Oidipusz-ügyben\t117\nVisszahívták a Szfinxet!\t121\nAz egyetlen lehetőség\t125\nZavaros álom: letisztulás\t127\nN. és a tenger\t135\nUtószó\t137" | |
} | |
], | |
"seeAlso": [] | |
} | |
] | |
}, | |
{ | |
"type": "web", | |
"url": "https://www.antikvarium.hu/index.php?type=search&ksz=atlasz&reszletes=0&newSearch=1&searchstart=ksz&interfaceid=101", | |
"items": "multiple" | |
} | |
] | |
/** END TEST CASES **/ |