Widget:GOV2
Zur Navigation springen
Zur Suche springen
mw.loader.using(['jquery'], function () {
function fetchGenealogyData(id, container) { var url = "https://gov.genealogy.net/item/show/" + id;
$.ajax({ url: url, type: "GET", dataType: "html", success: function (response) { var parsedData = extractGenealogyData(response, id); renderWidget(container, parsedData); }, error: function () {
container.html("
Fehler beim Abrufen der Daten von gov.genealogy.net
");
} }); }
function extractGenealogyData(html, id) { var doc = new DOMParser().parseFromString(html, "text/html");
var name = doc.querySelector("h1") ? doc.querySelector("h1").textContent.trim() : "Unbekannt"; var properties = {}; var relations = []; var mapinfo = {};
// Eigenschaften extrahieren var propertyRows = doc.querySelectorAll("table tr"); propertyRows.forEach(row => { var key = row.cells[0]?.textContent.trim(); var value = row.cells[1]?.textContent.trim(); if (key && value) { properties[key] = value; } });
// Karteninfo extrahieren (falls eine Karte vorhanden ist) var mapIframe = doc.querySelector("iframe[src*='viewer-js']"); if (mapIframe) { var mapUrl = new URL(mapIframe.src); mapinfo = { latitude: mapUrl.searchParams.get("mlat"), longitude: mapUrl.searchParams.get("mlon"), zoom: mapUrl.searchParams.get("zoom") }; }
// Relationen extrahieren (übergeordnete Objekte) var relationLinks = doc.querySelectorAll("a[href*='/item/show/']"); relationLinks.forEach(link => { relations.push({ id: link.getAttribute("href").split("/").pop(), name: link.textContent.trim() }); });
return { id: id, name: name, properties: properties, mapinfo: mapinfo, relations: relations }; }
function renderWidget(container, data) {
var html = '
'; // GOV ID und Name html += ''; html += '';// Eigenschaften if (Object.keys(data.properties).length > 0) { for (var key in data.properties) {html += '';
} }
// Kartenintegration if (data.mapinfo.latitude) {html += ''; } // Relationen if (data.relations.length > 0) { html += ''; } html += '
GOV ID | <a href="https://gov.genealogy.net/item/show/' + data.id + '">' + data.id + '</a> |
Name | ' + data.name + ' |
' + key + ' | ' + data.properties[key] + ' |
Karte | ';
html += '<object data="https://www.genealogy.net/viewer-js/?mlat=' + data.mapinfo.latitude + '&mlon=' + data.mapinfo.longitude + '&zoom=' + data.mapinfo.zoom + '" width="100%" height="256"></object>';html += ' |
Übergeordnete Objekte | ';
data.relations.forEach(relation => {html += ' <a href="https://gov.genealogy.net/item/show/' + relation.id + '">' + relation.name + '</a> ';});html += ' |
';
container.html(html); }
function initWidget() { $('.genealogy-widget').each(function () { var container = $(this); var govId = container.attr('data-govid'); // GOV-ID aus MediaWiki-Widget holen if (govId) { fetchGenealogyData(govId, container); } }); }
mw.hook('wikipage.content').add(initWidget);
});