Vorlage:Personendaten

Aus NordhausenWiki

local p = {}

-- Hilfsfunktion: Prüft ob Parameter leer ist local function isEmpty(s)

   return s == nil or s ==  or s == false

end

-- Hilfsfunktion: Holt Parameter mit Fallback auf GROSSBUCHSTABEN local function getParam(args, name, nameAlt)

   local value = args[name]
   if isEmpty(value) and nameAlt then
       value = args[nameAlt]
   end
   return value

end

-- Hauptfunktion für Infobox function p.infobox(frame)

   local args = frame:getParent().args
   
   -- Parameter auslesen
   local vornamen = getParam(args, 'vornamen', 'VORNAMEN') or 
   local nachname = getParam(args, 'nachname', 'NACHNAME') or 
   local bild = getParam(args, 'bild', 'BILD')
   local bildalt = getParam(args, 'bildalt', 'BILDALT') or (vornamen .. ' ' .. nachname)
   local bildbeschreibung = getParam(args, 'bildbeschreibung', 'BILDBESCHREIBUNG')
   local alternativnamen = getParam(args, 'alternativnamen', 'ALTERNATIVNAMEN')
   local geburtsdatum = getParam(args, 'geburtsdatum', 'GEBURTSDATUM')
   local geburtsort = getParam(args, 'geburtsort', 'GEBURTSORT')
   local sterbedatum = getParam(args, 'sterbedatum', 'STERBEDATUM')
   local sterbeort = getParam(args, 'sterbeort', 'STERBEORT')
   local kurzbeschreibung = getParam(args, 'kurzbeschreibung', 'KURZBESCHREIBUNG')
   local sonstiges = getParam(args, 'sonstiges', 'SONSTIGES')
   local commons = getParam(args, 'commons', 'COMMONS')
   local dbndh = getParam(args, 'dbndh', 'DbNDH')
   local wikidata = getParam(args, 'wikidata', 'WIKIDATA')
   local pnd = getParam(args, 'pnd', 'PND')
   local sortierung = getParam(args, 'sortierung', 'SORTIERUNG')
   local person = getParam(args, 'person', 'PERSON')
   
   -- HTML-Builder erstellen
   local html = mw.html.create('div'):addClass('person-infobox')
   
   -- Header (Name)
   html:tag('div')
       :addClass('person-header')
       :wikitext(vornamen .. ' ' .. nachname)
   
   -- Bild
   local kategorien = {}
   if not isEmpty(bild) then
       local bildContainer = html:tag('div'):addClass('person-bild-container')
       local bildLower = string.lower(bild)
       local isExtern = string.match(bildLower, '^https?://')
       
       if isExtern then
           bildContainer:wikitext('[' .. bild .. ' <img src="' .. bild .. '" width="220" alt="' .. bildalt .. '" class="person-bild-extern" />]')
           table.insert(kategorien, )
       else
           bildContainer:wikitext('' .. bildalt .. '')
       end
       
       if not isEmpty(bildbeschreibung) then
           bildContainer:tag('div')
               :addClass('person-bildtext')
               :wikitext(bildbeschreibung)
       end
   else
       table.insert(kategorien, )
   end
   
   -- Alternativnamen
   if not isEmpty(alternativnamen) then
       html:tag('div')
           :addClass('person-alternativnamen')
           :wikitext(alternativnamen)
   end
   
   -- Daten-Tabelle
   local hasSterbedaten = not isEmpty(sterbedatum) or not isEmpty(sterbeort)
   if not isEmpty(geburtsdatum) or not isEmpty(geburtsort) or hasSterbedaten then
       local tabelle = html:tag('table'):addClass('person-daten')
       
       -- Geburt
       local geburtszeile = tabelle:tag('tr')
       geburtszeile:tag('th'):wikitext('Geboren')
       local geburtText = isEmpty(geburtsdatum) and 'unbekannt' or geburtsdatum
       if not isEmpty(geburtsort) then
           geburtText = geburtText .. ' in ' .. geburtsort
       end
       geburtszeile:tag('td'):wikitext(geburtText)
       
       -- Tod
       if hasSterbedaten then
           local todzeile = tabelle:tag('tr')
           todzeile:tag('th'):wikitext('Gestorben')
           local todText = sterbedatum or 
           if not isEmpty(sterbeort) then
               if not isEmpty(sterbedatum) then
                   todText = todText .. ' in '
               end
               todText = todText .. sterbeort
           end
           todzeile:tag('td'):wikitext(todText)
       end
   end
   
   -- Kurzbeschreibung
   if not isEmpty(kurzbeschreibung) then
       html:tag('div')
           :addClass('person-kurzbeschreibung')
           :wikitext(kurzbeschreibung)
   end
   
   -- Sonstiges
   if not isEmpty(sonstiges) then
       html:tag('div')
           :addClass('person-sonstiges')
           :wikitext(sonstiges)
   end
   
   -- Externe Links
   local links = {}
   if not isEmpty(commons) then
       table.insert(links, ' .. commons .. ' Commons')
   end
   if not isEmpty(dbndh) then
       table.insert(links, 'DbNDH: .. dbndh .. ' ' .. dbndh .. '')
   end
   if not isEmpty(wikidata) then
       table.insert(links, '.. wikidata .. ' Wikidata')
   end
   if not isEmpty(pnd) then
       table.insert(links, 'GND: .. pnd .. ' ' .. pnd .. '')
   end
   
   if #links > 0 then
       html:tag('div')
           :addClass('person-links')
           :wikitext(table.concat(links, ' • '))
   end
   
   -- Kategorisierung
   table.insert(kategorien, )
   
   -- Sortierung
   local sortKey = sortierung
   if isEmpty(sortKey) then
       sortKey = nachname
       if not isEmpty(vornamen) then
           sortKey = sortKey .. ', ' .. vornamen
       end
   end
   
   -- DEFAULTSORT Magic Word (war vorher falsch als SORTIERUNG)
   local sortierungText = 
   
   -- Person vs. Autor Kategorie
   if isEmpty(person) or person == '1' or person == 'ja' or person == 'true' then
       table.insert(kategorien, )
   else
       table.insert(kategorien, )
   end
   
   return tostring(html) .. sortierungText .. table.concat(kategorien, )

end

return p