Widget:GOV2

aus GenWiki, dem genealogischen Lexikon zum Mitmachen.
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);

});