Modul:Faktenbox: Unterschied zwischen den Versionen

Aus FürthWiki

(Geo anstelle Geocode)
(rework fbdata)
Zeile 1: Zeile 1:
p = {}
p = {}
local com = require("Modul:Common")
local com = require("Modul:Common")
local dev = require("Modul:Development")
local str = require("Modul:String")
local str = require("Modul:String")
local wik = require("Modul:Wiki")
local wik = require("Modul:Wiki")
Zeile 30: Zeile 31:
end
end


function p.zeileKategorieSeite(klasse, kategorie)
function p.zeilePargs(fbdata, attr_names)
-- mw.log("zeileKategorieSeite(" .. kategorie .. ")")
-- mw.log("zeilePargs(fbdata, " .. (attr_name or "nil") .. ", " .. (attr_text or "nil") .. ")")
-- mw.logObject(fbdata.pargs or {})
-- Konsolenzeile zum Debuggen:
-- =p.zeilePargs({pargs={test=123,TeilDesEnsembles="bla"}}, {"test","TeilDesEnsembles","Blub"})
local t = ""
local attr_text = {
["TeilDesEnsembles"]="Teil des Ensembles",
["TeilDesAreals"]="Teil des Areals",
["TeilDesGebäudeKomplexes"]="Teil des Gebäude-Komplexes",
["DenkmalstatusBesteht"]="Denkmalstatus besteht"
}
for _, a in ipairs(attr_names) do
t = t .. p.zeile(a, fbdata.pargs[a], attr_text[a])
end
-- mw.log("t = " .. t)
return t
end
 
function p.zeileKategorieSeite(fbdata, kindex)
-- mw.log("zeileKategorieSeite(fbdata, " .. (kindex or 1) .. ")")
-- mw.logObject(fbdata)
-- Konsolenzeile zum Debuggen:
-- =p.zeileKategorieSeite({fullpagename="fpn",kategorie={"kat1","kat2"},klasse={"kla1","kla2"}}, 2)
local t = ""
local t = ""
local fullpagename = wik.fullpagename()
t = t .. "<dt>[[:Kategorie:" .. fbdata.kategorie[kindex or 1] .. "|" .. fbdata.klasse[kindex or 1] .. "]]</dt><dd>[[Seite::" .. fbdata.fullpagename .. "]]</dd>"
t = t .. "<dt>[[:Kategorie:" .. kategorie .. "|" .. klasse .. "]]</dt><dd>[[Seite::" .. fullpagename .. "]]</dd>"
-- mw.log("t = " .. t)
-- mw.log("t = " .. t)
return t
return t
end
end


function p.zeileStrasseHnr(strasse_hnr)
function p.zeileStrasseHnr(fbdata)
-- mw.log("zeileStrasseHnr(strasse_hnr)")
-- mw.log("zeileStrasseHnr(fbdata)")
-- mw.logObject(strasse_hnr)
-- mw.logObject(fbdata.strasse_hnr)
-- Konsolenzeile zum Debuggen:
-- Konsolenzeile zum Debuggen:
-- =p.zeileStrasseHnr({strasse = {{name = "Erlanger Straße", hausnummer = {"11", "13"}}, {name = "XY Straße" , hausnummer = {}}}})
-- =p.zeileStrasseHnr{strasse_hnr={strasse={{name="Erlanger Straße",hausnummer={"11", "13"}},{name="XY Straße",hausnummer={}}},anzahlGebaeude=3}}
local t = ""
local t = ""
for is, sh in ipairs(strasse_hnr.strasse) do -- Straßen/Hausnummer-Kombis durchiterieren
for is, sh in ipairs(fbdata.strasse_hnr.strasse) do -- Straßen/Hausnummer-Kombis durchiterieren
t = t .. "<dt>"
t = t .. "<dt>"
if is > 1 then
if is > 1 then
t = t .. is .. ". " -- Numerierungsanzeige "2., "3." usw.
t = t .. is .. ". " -- Numerierungsanzeige "2., "3." usw.
else
else
is = "" -- kein 2, 3, ... für weitere Verwendung
is = "" -- keine 1, aber 2, 3, ... für weitere Verwendung
end
end
t = t .. "[[Attribut:Straße|Straße]]"
t = t .. "[[Attribut:Straße" .. is .. "|Straße]]"
if #sh.hausnummer > 0 then
if #sh.hausnummer > 0 then
t = t .. " / " .. "[[Attribut:Hausnummer|Hausnummer]]" -- nur wenn Hausnummern vorhanden
t = t .. " / " .. "[[Attribut:Hausnummer" .. is .. "|Hausnummer]]" -- nur wenn Hausnummern vorhanden
end
end
t = t .. "</dt><dd>[[Straße" .. is .. "::" .. sh.name .. "]]"
t = t .. "</dt><dd>[[Straße" .. is .. "::" .. sh.name .. "]]"
Zeile 67: Zeile 89:
t = t .. " " .. h
t = t .. " " .. h
end
end
mw.smw.set({["Hausnummer" .. is] = h, ["StraßeHnr"] = strasse_hnr_})
t = t .. "{{#set:Hausnummer" .. is .. "=" .. h .. "|StraßeHnr=" .. strasse_hnr_ .. "}}"
end
end
t = t .. "</dd>"
t = t .. "</dd>"
end
end
mw.smw.set({["AnzahlGebäude"] = strasse_hnr.anzahlGebaeude})
t = t .. "{{#set:AnzahlGebäude=" .. fbdata.strasse_hnr.anzahlGebaeude .. "}}"
-- mw.log("t = " .. t)
-- mw.log("t = " .. t)
return t
return t
end
end


function p.zeilenDenkmalschutz(denkmalstatusbesteht, aktennr)
function p.zeileAktenNr(fbdata)
-- mw.log("zeilenDenkmalschutz(" .. (denkmalstatusbesteht or "nil") .. ", " .. (aktennr or "nil") .. ")")
-- mw.log("zeileAktenNr(fbdata)")
-- Konsolenzeile zum Debuggen: =p.zeilenDenkmalschutz("Ja","D-5-63-000-1464")
-- mw.logObject(fbdata.pargs)
-- Konsolenzeile zum Debuggen:
-- =p.zeileAktenNr{pargs={AktenNr="D-5-63-000-1464"}}
local t = ""
local t = ""
if com.isTrue(denkmalstatusbesteht) then
local aktennr = str.splitAndStrip(fbdata.pargs.AktenNr or "", ";")
t = t .. p.zeile("DenkmalstatusBesteht", denkmalstatusbesteht, "Denkmalstatus besteht")
if #aktennr > 0 then
aktennr = str.splitAndStrip(aktennr or "", ";")
t = t .. "<dt>" .. "[[Attribut:AktenNr|Akten-Nr.]]</dt><dd>"
if #aktennr > 0 then
for i, a in ipairs(aktennr) do
t = t .. "<dt>" .. "[[Attribut:AktenNr|Akten-Nr.]]</dt><dd>"
if i > 1 then
for i, a in ipairs(aktennr) do
t = t .. ",<br>"
if i > 1 then
t = t .. ",<br>"
end
t = t .. "{{#queryformlink:form=Abfrage Denkmalschutz|link text=[[AktenNr::" .. a .. "]]|query string=Abfrage Denkmalschutz[AktenNr]=" .. a .. "&_run}}"
p = que.getPages("[[:+]][[AktenNr::" .. a .. "]]", true)
t = t .. " (" .. #p .. ")"
end
end
t = t .. "</dd>"
t = t .. "{{#queryformlink:form=Abfrage Denkmalschutz|link text=[[AktenNr::" .. a .. "]]|query string=Abfrage Denkmalschutz[AktenNr]=" .. a .. "&_run}}"
local p = que.getPages("[[:+]][[AktenNr::" .. a .. "]]", true)
t = t .. " (" .. #p .. ")" -- Anzahl der Artikel mit dieser Akten-Nr. in Klammern
end
end
t = t .. "</dd>"
end
end
-- mw.log("t=" .. t)
-- mw.log("t=" .. t)
Zeile 100: Zeile 121:
end
end


function p.zeileGeokoordinate(frame, noframe)
function p.zeileGeokoordinate(fbdata)
-- mw.log("zeileGeokoordinate()")
-- mw.log("zeileGeokoordinate()")
-- mw.logObject(fbdata)
-- Konsolenzeile zum Debuggen:
-- fbdata=p.fbdata{pargs={}}; fbdata.fullpagename="Isaak-Loewi-Straße 1, 3, 5, 7, 9, Liesl-Kießling-Straße 16"; print(p.zeileGeokoordinate(fbdata))
local t = ""
local t = ""
local fullpagename = wik.fullpagename()
local geokoordinate = que.getValues(fbdata.fullpagename, "Geokoordinate", true)
local geokoordinate = que.getValues(fullpagename, "Geokoordinate", true)
if #geokoordinate > 0 then
if #geokoordinate > 0 then
t = t .. "<dt>[[Attribut:Geokoordinate|Geokoordinate]]</dt><dd>"
t = t .. "<dt>[[Attribut:Geokoordinate|Geokoordinate]]</dt><dd>"
Zeile 111: Zeile 134:
t = t .. ",<br>"
t = t .. ",<br>"
end
end
if noframe then
t = t .. geo.osmLink(fbdata.frame, g)
t = t .. g
else
t = t .. geo.osmLink(frame, g)
end
end
end
t = t .. "</dd>"
t = t .. "</dd>"
Zeile 127: Zeile 146:
-- mw.logObject(args)
-- mw.logObject(args)
-- Konsolenzeile zum Debuggen:
-- Konsolenzeile zum Debuggen:
-- =p.zeileDatum({attr_date="Weihedatum",date="1959/11/15",attr_day="Weihetag",attr_year="Weihejahr"})
-- =p.zeileDatum{attr_date="Weihedatum",date="1959/11/15",attr_day="Weihetag",attr_year="Weihejahr"}
local t = ""
local t = ""
local date = str.strip(args.date or "")
local date = str.strip(args.date or "")
Zeile 139: Zeile 158:
end
end


function p.faktenboxSemantikBrowsen()
function p.faktenboxSemantikBrowsen(fbdata)
-- mw.log("faktenboxSemantikBrowsen()")
-- mw.log("faktenboxSemantikBrowsen(fbdata)")
-- mw.logObject(fbdata)
-- Konsolenzeile zum Debuggen:
-- =p.faktenboxSemantikBrowsen{pargs={Bild="Erloeserkirche.jpg"}}
local t = ""
local t = ""
t = t .. "<dl class = 'dataTable'>"
t = t .. "<dl class = 'dataTable'>"
t = t .. "<dt>[[Bild:IconSearch.svg|16px|semantisches Browsen|link=[[Spezial:Durchsuchen/{{FULLPAGENAME}}]]]]</dt>"
t = t .. "<dt>[[Bild:IconSearch.svg|16px|semantisches Browsen|link=[[Spezial:Durchsuchen/" .. fbdata.fullpagename .. "]]]]</dt>"
t = t .. "<dd>[[Spezial:Durchsuchen/{{FULLPAGENAME}}|semantisches Browsen]]</dd>"
t = t .. "<dd>[[Spezial:Durchsuchen/" .. fbdata.fullpagename .. "|Semantisches Browsen]]</dd>"
t = t .. "</dl>"
t = t .. "</dl>"
-- mw.log("t = " .. t)
-- mw.log("t = " .. t)
Zeile 150: Zeile 172:
end
end


function p.bildTab(bild, seite)
function p.bildTab(fbdata, seite)
-- mw.log("bild(" .. (bild or "nil") .. ", " .. (seite or "nil") .. ")")
-- mw.log("bild(fbdata, " .. (seite or "nil") .. ")")
-- mw.logObject(fbdata.pargs)
-- Konsolenzeile zum Debuggen:
-- =p.bildTab{pargs={Bild="Erloeserkirche.jpg"}}
local t = ""
local t = ""
local beschreibung = que.getValues("Datei:" .. (bild or ""), "Beschreibung")
local beschreibung = que.getValues("Datei:" .. (fbdata.pargs.Bild or ""), "Beschreibung")
local beschreibung = beschreibung[1] or ""
local beschreibung = beschreibung[1] or ""
if not com.isEmpty(bild) and wik.pageexists("Bild:" .. bild) then
if not com.isEmpty(fbdata.pargs.Bild) and wik.pageexists("Bild:" .. fbdata.pargs.Bild) then
t = t .. '{| class = "factbox_imagetable" border = "0" cellpadding = "0" cellspacing = "0" width = "100%"\n'
t = t .. '{| class = "factbox_imagetable" border = "0" cellpadding = "0" cellspacing = "0" width = "100%"\n'
t = t .. '|-\n'
t = t .. '|-\n'
t = t .. '|[[Bild::Datei:' .. bild .. '|768px|link=' .. (seite or '') .. ']]\n'
t = t .. '|[[Bild::Datei:' .. fbdata.pargs.Bild .. '|768px|link=' .. (seite or '') .. ']]\n'
if beschreibung ~= "" then
if beschreibung ~= "" then
t = t .. '|-\n'
t = t .. '|-\n'
Zeile 171: Zeile 196:
end
end


function p.common(args)
function p.common(fbdata, positionscheck)
-- mw.log("common(args)")
mw.log("common(fbdata)")
-- mw.logObject(args)
mw.logObject(fbdata)
-- Konsolenzeile zum Debuggen:
-- Konsolenzeile zum Debuggen:
-- =p.common{formular="Gebäude/Work",bild="Angie Oeckl.JPG",klasse="Klasse",kategorie="Gebäude",strasse_hnr={suspekt=true},ehemals="Ja",denkmalstatusbesteht="Ja",stadtteil="Ronhof; Nordstadt "}
-- =p.common{formular="Gebäude/Work",klasse={"Gebäude","Kirche"},kategorie={"Gebäude","Kirchen"},strasse_hnr={suspekt=true},positionscheck=true,pargs={Bild="Angie Oeckl.JPG",Ehemals="Ja",DenkmalstatusBesteht="Ja",Stadtteil="Ronhof; Nordstadt ",location="bla"},pagename="Test/Test;Test"}
local t = ""
local t = ""
 
-- Klasse
t = t .. "{{#set:KlassenName=" .. fbdata.klasse[1] .. "}}"
-- Formular
-- Formular
t = t .. "{{#default_form:" .. args.formular .. "}}"
t = t .. "{{#default_form:" .. fbdata.formular .. "}}"
 
-- Kategorien
-- Kategorien
if com.isTrue(args.ehemals) then
local ehemals_text = ""
t = t .. "[[Kategorie:" .. args.kategorie .. " (ehemals)]]"
if com.isTrue(fbdata.pargs.Ehemals) then
else
ehemals_text = " (ehemals)"
t = t .. "[[Kategorie:" .. args.kategorie .. "]]"
end
end
if args.kategorie2 ~= nil then
for _, k in ipairs(fbdata.kategorie) do
if com.isTrue(args.ehemals) then
t = t .. "[[Kategorie:" .. k .. ehemals_text .. "]]"
t = t .. "[[Kategorie:" .. args.kategorie2 .. " (ehemals)]]"
else
t = t .. "[[Kategorie:" .. args.kategorie2 .. "]]"
end
end
end
if com.isTrue(args.denkmalstatusbesteht) then
if com.isTrue(fbdata.pargs.DenkmalstatusBesteht) then
t = t .. "[[Kategorie:Denkmalliste]]"
t = t .. "[[Kategorie:Denkmalliste]]"
end
end
local stadtteil = str.splitAndStrip(args.stadtteil or "", ";")
local stadtteil = str.splitAndStrip(fbdata.pargs.Stadtteil or "", ";")
for _, s in ipairs(stadtteil) do
for _, s in ipairs(stadtteil) do
s = str.strip(tostring(s or ""))
s = str.strip(tostring(s or ""))
t = t .. "[[Kategorie:" .. s .. "]]"
t = t .. "[[Kategorie:" .. s .. "]]"
end
end
-- Wartungs-Kategorien
-- Wartungs-Kategorien
if com.isEmpty(args.bild) then
if com.isEmpty(fbdata.pargs.Bild) then
t = t .. "[[Kategorie:" .. args.kategorie .. " ohne Bild]]"
t = t .. "[[Kategorie:" .. fbdata.kategorie[1] .. " ohne Bild]]"
elseif not wik.pageexists("Bild:" .. args.bild) then
elseif not wik.pageexists("Bild:" .. fbdata.pargs.Bild) then
t = t .. "[[Kategorie:Bild nicht gefunden]]"
t = t .. "[[Kategorie:Bild nicht gefunden]]"
end
end
local pagename = wik.pagename()
if string.find(fbdata.pagename, ";") ~= nil then
if string.find(pagename, ";") ~= nil then
t = t .. "[[Kategorie:Hat Semikolon]]"
t = t .. "[[Kategorie:Hat Semikolon]]"
end
end
if string.find(pagename, "/") ~= nil then
if string.find(fbdata.pagename, "/") ~= nil then
t = t .. "[[Kategorie:Hat Slash]]"
t = t .. "[[Kategorie:Hat Slash]]"
end
end
if args.strasse_hnr.suspekt then
if fbdata.strasse_hnr.suspekt then
t = t .. "[[Kategorie:Gebäude mit verdächtiger Straße-Hausnummer-Kombination]]"
t = t .. "[[Kategorie:Gebäude mit verdächtiger Straße-Hausnummer-Kombination]]"
end
end
if positionscheck and (args.lat or "") == "" and (args.lon or "") == "" and (args.location or "") == "" and not wik.pageexists("GeoJson:" .. (args.location or pagename)) then
if fbdata.positionscheck and (fbdata.pargs.lat or "") == "" and (fbdata.pargs.lon or "") == "" and
if com.isTrue(args.ehemals) then
  (fbdata.pargs.location or "") == "" and not wik.pageexists("GeoJson:" .. (fbdata.pargs.geojson or fbdata.pagename)) then
t = t .. "[[Kategorie:" .. args.kategorie .. " (ehemals) ohne Position]]"
t = t .. "[[Kategorie:" .. fbdata.kategorie[1] .. ehemals_text .. " ohne Position]]"
else
t = t .. "[[Kategorie:" .. args.kategorie .. " ohne Position]]"
end
end
end
-- mw.log("t = " .. t)
-- mw.log("t = " .. t)
Zeile 233: Zeile 248:
-- mw.log("tab(t)")
-- mw.log("tab(t)")
-- mw.logObject(t)
-- mw.logObject(t)
t = str.strip(t)
if t ~= "" then
if t ~= "" then
t = "<tab name = ".. name .. ">" .. t .. "</tab>"
t = "<tab name = ".. name .. ">" .. t .. "</tab>"
Zeile 238: Zeile 254:
-- mw.log("t = " .. t)
-- mw.log("t = " .. t)
return t
return t
end
function p.fbdata(frame)
-- mw.log("fbdata(frame)")
-- mw.logObject(frame)
-- Konsolenzeile zum Debuggen:
-- =p.fbdata{pargs={a=1}}
local fbdata = {}
fbdata.frame, fbdata.pargs = dev.GetFrameAndParentArgs(frame)
wik.setPagenames(fbdata)
-- mw.logObject(fbdata)
return fbdata
end
end


return p
return p

Version vom 14. Oktober 2025, 12:42 Uhr

Seiten-Übersicht

Zur Klasse Faktenbox gehörende Seiten:
Hauptseite Unterseiten
Allgemein
Faktenbox Vorlagen
Formulare
Module
Abfrage Vorlagen


Formulare


Sonstige


Dieses Modul enthält gemeinsame Funktionen, um eine Faktenbox zu füllen

Funktionen Modul:Faktenbox

Faktenbox()

Universelle Faktenbox ohne Formular/Klasse/Gebäude. Sie kann als zusätzliche Faktenboxen auf einer Seite eingebaut werden ähnlich Vorlage:Tabbox. Sie setzt ebenso Attribute wie die regulären Faktenboxen z.B. von Gebäuden, Straßen, Personen usw.

Funktionen Modul:Faktenbox/Tabs

universalDatenTab()

Universeller Daten-Tab zeigt alle seine übergebenen Parameter außer die für Karte und Bild an.

bildTab()

Selbsterklärend...

benennungenTab()

Tab mit Liste der Benennungen.

tab()

Vervollständigt Tab-Inhalt zu einem Tab.

Funktionen Modul:Faktenbox/Tabs/Karte

kartenTab()

Selbsterklärend...

getKartenArgs()

Karten-Argumente übernehmen und aufbereiten.

Funktionen Modul:Faktenbox/Tabs/Adressen

adressenTab()

Tab mit Liste der Adressen. Die Adressen werden bestmöglich chronologisch aufsteigend sortiert.

p.sortIndex() und p.smwDate2SortIndex()

Erstellen Sortierindizes anhand Datum und Schlüsselwörtern (z.B. Geburtshaus ganz oben) für chronologische Sortierung.

Funktionen Modul:Faktenbox/Zeilen

zeileKategorieSeite()

Diese Zeile ist die oberste Zeile eines Daten-Tabs, welche nochmal den Namen des Objekts und einen Link zur Klassen-Kategorie anzeigt und das Attribut:Seite setzt.

zeileStrasseHnr()

Wie zeile(attr, attrText, val), aber speziell ausgrichtet, um Attribut:Straße, Attribut:Hausnummer, Attribut:StraßeHnr und Attribut:AnzahlGebäude zu setzen und anzuzeigen.

zeileAktenNr()

Wie zeile(attr, attrText, val), aber speziell ausgrichtet, um Attribut:AktenNr zu setzen und anzuzeigen. Die AktenNr werden als Query-Link und mit Seitenanzahl mit dieser AktenNr angezeigt.

zeileGeoDaten()

Zeile um alle Attribut:Geokoordinaten mit OSM-Link und die Attribut:GeoJson-Karte zu anzuzeigen.

zeileDatum()

Zeile um ein Datum standardisiert per linkFormDate() anzuzeigen.

zeileSemantikBrowsenAbfrage()

Zeile mit Link zum semantischen Browsen (Datensicht) und zur Abfrage.

zeile()

Standard-Zeile um ein Attribut zu setzen und anzuzeigen. Wenn es sich beim Attribut-Wert um eine Liste mit mehreren Elementen handelt, wird vom Attribut-Anzeigetext automatisch die Mehrzahl gebildet.

Parameter Beschreibung
attr_name Attribut-Name
attr_text Optionaler Attribut-Anzeigetext. Default: attr_name. Siehe auch attr_text_anzeige
attr_val Attribut-Wert. Wenn nicht übergeben, werden die von der #invoke:-Vorlage übergegebenen Parameter (fbdata.pargs) verwendet.
fbdata fbdata-Daten-table mit von der #invoke:-Vorlage übergegebenen Parameter (fbdata.pargs).
delimiter Trennzeichen bei Werte-Listen. Bei Nicht-Übergabe wird Attribut-Wert auch nicht als Liste behandelt.
val_prefix Attribut-Wert-Prefix z.B. "ca."
val_postfix Attribut-Wert-Postfix z.B. "km"
val_show_only Attribut-Wert nur anzeigen, aber nicht setzen

setPageAttr()

Setzen eines Attributs vom Datentyp Seite in folgender Prüf- und Setzreihenfolge:

  1. Wenn val problematische Wikitext/HTML-Inhalte enthält, dann wird
    • val 1:1 angezeigt und ggf. gerendert (nicht innerhalb [[Attribut::Wert]])
    • Attribut name mit val per {{#set:Attribut=Wert}} unsichtbar im Hintergrund gesetzt, auch wenn das Verarbeitungsfehler provoziert (gewollt)
  2. Ansonsten wenn val als Seite existiert, wird diese 1:1 gesetzt und angezeigt ([[Attribut::Wert]])
  3. Ansonsten wenn val Klammerungen am Anfang oder am Ende enthält (Beispiel: "(BlaBlub) Rathaus (BlaBla)"), wird geprüft, ob eine Seite ohne die Klammerungen (also Rathaus) existiert. Wenn ja, wird "(BlaBlub) Rathaus (BlaBla)" angezeigt und das Attribut mit nur "Rathaus" gesetzt.
  4. Ansonsten wird
    • val 1:1 angezeigt und ggf. gerendert (nicht innerhalb [[Attribut::Wert]])
    • Attribut name mit val per {{#set:Attribut=Wert}} unsichtbar im Hintergrund gesetzt, auch wenn das Verarbeitungsfehler provoziert (gewollt)

setStandardAttr()

Setzen eines Standard-Attributs (nicht Datentyp Seite). Klammerwerte werden optional abgetrennt und Attribut-Wert wird optional nur angezeigt, aber nicht gesetzt.

Funktionen Modul:Faktenbox/Common

common()

Sonstige gemeinsame Dinge anfügen

  • Klasse
  • Formular
  • Kategorien
  • Wartung

fbdata()

Erstellt Faktenbox-Daten-Tabelle.

fbdata-Daten-table

Um die Parameter-Übergabe zu obigen Funktionen zu vereinfachen wird die fbdata-Daten-table verwendet, in der folgende Daten abgelegt werden:

  • fbdata.frame = frame von Faktenbox(frame)
  • fbdata.pargs = frame:getParent().args. Beispiel: fbdata.pargs["Ehemals"] oder fbdata.pargs.Ehemals
  • fbdata.klasse Klassen-table. Beispiel Kirche: fbdata.klasse = {"Kirche", "Gebäude"} ("Kirche" ist primäre und "Gebäude" sekundäre Klasse)
  • fbdata.kategorie Kategorien-table. Beispiel Kirche: fbdata.kategorie = {"Kirchen", "Gebäude"} ("Kirchen" ist primäre und "Gebäude" sekundäre Kategorie)
  • fbdata.kategorie_einzahl Einzahl-Kategorien-table als Alternative zu fbdata.klasse. Beispiel Kirche: fbdata.kategorie_einzahl = {"Kirche", "Gebäude"} ("Kirche" ist primäre und "Gebäude" sekundäre Kategorie)
  • fbdata.formular Formular
  • Pagesnames
    • frame.fullpagename
    • frame.pagename
    • frame.subpagename
  • frame.strasse_hnr Untertabelle für Straße/Hausnummer-Daten
    • frame.strasse_hnr.strasse Untertabelle für Straßen
      • frame.strasse_hnr.strasse.name Straßenname
      • frame.strasse_hnr.strasse.hausnummer Hausnummern-table dieser Straße
      • frame.strasse_hnr.strasse.suspekt Suspekte Formular-Werte dieser Straße
    • frame.strasse_hnr.suspekt Suspekte Formular-Werte aller Straßen
    • frame.strasse_hnr.anzahlGebaeude Anzahl aller gültigen Straße/Hausnummer-Kombinationen
  • Ggf. weitere Klassen-abhängige Einträge

attr_text_anzeige

Sofern kein attr_text angegeben, wird i. A. attr_name angezeigt. Jedoch wird bei manchen attr_name-Attributen stattdessen automatisch die ausgeschriebene Version angezeigt.

Beispiel: Beim Attribut:TeilDesEnsembles wird anhand der table attr_text_anzeige "Teil des Ensembles" angezeigt.

Diese Übersetzung von attr_name zur Anzeige-Version ist in attr_text_anzeige abgelegt und erfolgt global bei allen Faktenboxen.

Unterseiten

Siehe auch


p = {}
local com = require("Modul:Common")
local dev = require("Modul:Development")
local str = require("Modul:String")
local wik = require("Modul:Wiki")
local geo = require("Modul:Geo")
local que = require("Modul:Queries")
local lfd = require("Modul:LinkFormDatum")

function p.zeile(attr_name, val, attr_text)
--	mw.log("zeile(" .. (attr_name or "nil") .. ", val, " .. (attr_text or "nil") .. ")")
--	mw.logObject(val or {})
	local t = ""
	if mw.smw.getPropertyType(attr_name) ~= nil then
		if type(val) ~= "table" then
			val = str.splitAndStrip(val or "", ";")
		end
		if #val > 0 then
			t = t .. "<dt>" .. "[[Attribut:" .. attr_name .. "|" .. (attr_text or attr_name) .. "]]</dt><dd>"
			for i, v in ipairs(val) do
				if i > 1 then
					t = t .. ", "
				end
				t = t .. "[[" .. attr_name .. "::" .. v .. "]]"
			end
			t = t .. "</dd>"
		end
	end
--	mw.log("t = " .. t)
	return t
end

function p.zeilePargs(fbdata, attr_names)
--	mw.log("zeilePargs(fbdata, " .. (attr_name or "nil") .. ", " .. (attr_text or "nil") .. ")")
--	mw.logObject(fbdata.pargs or {})
	-- Konsolenzeile zum Debuggen:
	-- =p.zeilePargs({pargs={test=123,TeilDesEnsembles="bla"}}, {"test","TeilDesEnsembles","Blub"})
	local t = ""
	local attr_text = {
		["TeilDesEnsembles"]="Teil des Ensembles",
		["TeilDesAreals"]="Teil des Areals",
		["TeilDesGebäudeKomplexes"]="Teil des Gebäude-Komplexes",
		["DenkmalstatusBesteht"]="Denkmalstatus besteht"
	}
	for _, a in ipairs(attr_names) do
		t = t .. p.zeile(a, fbdata.pargs[a], attr_text[a])
	end
--	mw.log("t = " .. t)
	return t
end

function p.zeileKategorieSeite(fbdata, kindex)
--	mw.log("zeileKategorieSeite(fbdata, " .. (kindex or 1) .. ")")
--	mw.logObject(fbdata)
	-- Konsolenzeile zum Debuggen:
	-- =p.zeileKategorieSeite({fullpagename="fpn",kategorie={"kat1","kat2"},klasse={"kla1","kla2"}}, 2)
	local t = ""
	t = t .. "<dt>[[:Kategorie:" .. fbdata.kategorie[kindex or 1] .. "|" .. fbdata.klasse[kindex or 1] .. "]]</dt><dd>[[Seite::" .. fbdata.fullpagename .. "]]</dd>"
--	mw.log("t = " .. t)
	return t
end

function p.zeileStrasseHnr(fbdata)
--	mw.log("zeileStrasseHnr(fbdata)")
--	mw.logObject(fbdata.strasse_hnr)
	-- Konsolenzeile zum Debuggen:
	-- =p.zeileStrasseHnr{strasse_hnr={strasse={{name="Erlanger Straße",hausnummer={"11", "13"}},{name="XY Straße",hausnummer={}}},anzahlGebaeude=3}}
	local t = ""
	for is, sh in ipairs(fbdata.strasse_hnr.strasse) do -- Straßen/Hausnummer-Kombis durchiterieren
		t = t .. "<dt>"
		if is > 1 then
			t = t .. is .. ". " -- Numerierungsanzeige "2., "3." usw.
		else
			is = "" -- keine 1, aber 2, 3, ... für weitere Verwendung
		end
		t = t .. "[[Attribut:Straße" .. is .. "|Straße]]"
		if #sh.hausnummer > 0 then
			t = t .. " / " .. "[[Attribut:Hausnummer" .. is .. "|Hausnummer]]" -- nur wenn Hausnummern vorhanden
		end
		t = t .. "</dt><dd>[[Straße" .. is .. "::" .. sh.name .. "]]"
		for ih, h in ipairs(sh.hausnummer) do -- Hausnummern durchiterieren
			local strasse_hnr_ = sh.name .. " " .. h
			if ih > 1 then
				t = t .. "," -- Kommas davor ab 2. Hausnummer
			end
			if wik.pageexists(strasse_hnr_) then -- Link, wenn Seite vorhanden
				t = t .. " [[" .. strasse_hnr_ .. "|" .. h .. "]]"
			else
				t = t .. " " .. h
			end
			t = t .. "{{#set:Hausnummer" .. is .. "=" .. h .. "|StraßeHnr=" .. strasse_hnr_ .. "}}"
		end
		t = t .. "</dd>"
	end
	t = t .. "{{#set:AnzahlGebäude=" .. fbdata.strasse_hnr.anzahlGebaeude .. "}}"
--	mw.log("t = " .. t)
	return t
end

function p.zeileAktenNr(fbdata)
--	mw.log("zeileAktenNr(fbdata)")
--	mw.logObject(fbdata.pargs)
	-- Konsolenzeile zum Debuggen:
	-- =p.zeileAktenNr{pargs={AktenNr="D-5-63-000-1464"}}
	local t = ""
	local aktennr = str.splitAndStrip(fbdata.pargs.AktenNr or "", ";")
	if #aktennr > 0 then
		t = t .. "<dt>" .. "[[Attribut:AktenNr|Akten-Nr.]]</dt><dd>"
		for i, a in ipairs(aktennr) do
			if i > 1 then
				t = t .. ",<br>"
			end
			t = t .. "{{#queryformlink:form=Abfrage Denkmalschutz|link text=[[AktenNr::" .. a .. "]]|query string=Abfrage Denkmalschutz[AktenNr]=" .. a .. "&_run}}"
			local p = que.getPages("[[:+]][[AktenNr::" .. a .. "]]", true)
			t = t .. " (" .. #p .. ")" -- Anzahl der Artikel mit dieser Akten-Nr. in Klammern
		end
		t = t .. "</dd>"
	end
--	mw.log("t=" .. t)
	return t
end

function p.zeileGeokoordinate(fbdata)
--	mw.log("zeileGeokoordinate()")
--	mw.logObject(fbdata)
	-- Konsolenzeile zum Debuggen:
	-- fbdata=p.fbdata{pargs={}}; fbdata.fullpagename="Isaak-Loewi-Straße 1, 3, 5, 7, 9, Liesl-Kießling-Straße 16"; print(p.zeileGeokoordinate(fbdata))
	local t = ""
	local geokoordinate = que.getValues(fbdata.fullpagename, "Geokoordinate", true)
	if #geokoordinate > 0 then
		t = t .. "<dt>[[Attribut:Geokoordinate|Geokoordinate]]</dt><dd>"
		for i, g in ipairs(geokoordinate) do
			if i > 1 then
				t = t .. ",<br>"
			end
			t = t .. geo.osmLink(fbdata.frame, g)
		end
		t = t .. "</dd>"
	end
--	mw.log("t = " .. t)
	return t
end

function p.zeileDatum(args)
--	mw.log("zeileDatum(args)")
--	mw.logObject(args)
	-- Konsolenzeile zum Debuggen:
	-- =p.zeileDatum{attr_date="Weihedatum",date="1959/11/15",attr_day="Weihetag",attr_year="Weihejahr"}
	local t = ""
	local date = str.strip(args.date or "")
	if date ~= "" then
		t = t .. "<dt>" .. "[[Attribut:" .. args.attr_date .. "|" .. args.attr_date .. "]]</dt><dd>"
		t = t .. lfd.linkFormDate(date, args.attr_date, args.attr_day, args.attr_year)
		t = t .. "</dd>"
	end
--	mw.log("t = " .. t)
	return t
end

function p.faktenboxSemantikBrowsen(fbdata)
--	mw.log("faktenboxSemantikBrowsen(fbdata)")
--	mw.logObject(fbdata)
	-- Konsolenzeile zum Debuggen:
	-- =p.faktenboxSemantikBrowsen{pargs={Bild="Erloeserkirche.jpg"}}
	local t = ""
	t = t .. "<dl class = 'dataTable'>"
	t = t .. "<dt>[[Bild:IconSearch.svg|16px|semantisches Browsen|link=[[Spezial:Durchsuchen/" .. fbdata.fullpagename .. "]]]]</dt>"
	t = t .. "<dd>[[Spezial:Durchsuchen/" .. fbdata.fullpagename .. "|Semantisches Browsen]]</dd>"
	t = t .. "</dl>"
--	mw.log("t = " .. t)
	return t
end

function p.bildTab(fbdata, seite)
--	mw.log("bild(fbdata, " .. (seite or "nil") .. ")")
--	mw.logObject(fbdata.pargs)
	-- Konsolenzeile zum Debuggen:
	-- =p.bildTab{pargs={Bild="Erloeserkirche.jpg"}}
	local t = ""
	local beschreibung = que.getValues("Datei:" .. (fbdata.pargs.Bild or ""), "Beschreibung")
	local beschreibung = beschreibung[1] or ""
	if not com.isEmpty(fbdata.pargs.Bild) and wik.pageexists("Bild:" .. fbdata.pargs.Bild) then
		t = t .. '{| class = "factbox_imagetable" border = "0" cellpadding = "0" cellspacing = "0" width = "100%"\n'
		t = t .. '|-\n'
		t = t .. '|[[Bild::Datei:' .. fbdata.pargs.Bild .. '|768px|link=' .. (seite or '') .. ']]\n'
		if beschreibung ~= "" then
			t = t .. '|-\n'
			t = t .. '|' .. beschreibung .. '\n'
		end
		t = t .. '|}'
	end
	-- Tab draus machen
	t = p.tab(t, "Bild")
--	mw.log("t = " .. t)
	return t
end

function p.common(fbdata, positionscheck)
	mw.log("common(fbdata)")
	mw.logObject(fbdata)
	-- Konsolenzeile zum Debuggen:
	-- =p.common{formular="Gebäude/Work",klasse={"Gebäude","Kirche"},kategorie={"Gebäude","Kirchen"},strasse_hnr={suspekt=true},positionscheck=true,pargs={Bild="Angie Oeckl.JPG",Ehemals="Ja",DenkmalstatusBesteht="Ja",Stadtteil="Ronhof; Nordstadt ",location="bla"},pagename="Test/Test;Test"}
	local t = ""
	-- Klasse
	t = t .. "{{#set:KlassenName=" .. fbdata.klasse[1] .. "}}"
	-- Formular
	t = t .. "{{#default_form:" .. fbdata.formular .. "}}"
	-- Kategorien
	local ehemals_text = ""
	if com.isTrue(fbdata.pargs.Ehemals) then
		ehemals_text = " (ehemals)"
	end
	for _, k in ipairs(fbdata.kategorie) do
		t = t .. "[[Kategorie:" .. k .. ehemals_text .. "]]"
	end
	if com.isTrue(fbdata.pargs.DenkmalstatusBesteht) then
		t = t .. "[[Kategorie:Denkmalliste]]"
	end
	local stadtteil = str.splitAndStrip(fbdata.pargs.Stadtteil or "", ";")
	for _, s in ipairs(stadtteil) do
		s = str.strip(tostring(s or ""))
		t = t .. "[[Kategorie:" .. s .. "]]"
	end
	-- Wartungs-Kategorien
	if com.isEmpty(fbdata.pargs.Bild) then
		t = t .. "[[Kategorie:" .. fbdata.kategorie[1] .. " ohne Bild]]"
	elseif not wik.pageexists("Bild:" .. fbdata.pargs.Bild) then
		t = t .. "[[Kategorie:Bild nicht gefunden]]"
	end
	if string.find(fbdata.pagename, ";") ~= nil then
		t = t .. "[[Kategorie:Hat Semikolon]]"
	end
	if string.find(fbdata.pagename, "/") ~= nil then
		t = t .. "[[Kategorie:Hat Slash]]"
	end
	if fbdata.strasse_hnr.suspekt then
		t = t .. "[[Kategorie:Gebäude mit verdächtiger Straße-Hausnummer-Kombination]]"
	end
	if fbdata.positionscheck and (fbdata.pargs.lat or "") == "" and (fbdata.pargs.lon or "") == "" and
	   (fbdata.pargs.location or "") == "" and not wik.pageexists("GeoJson:" .. (fbdata.pargs.geojson or fbdata.pagename)) then
		t = t .. "[[Kategorie:" .. fbdata.kategorie[1] .. ehemals_text .. " ohne Position]]"
	end
--	mw.log("t = " .. t)
	return t
end

function p.tab(t, name)
--	mw.log("tab(t)")
--	mw.logObject(t)
	t = str.strip(t)
	if t ~= "" then
		t = "<tab name = ".. name .. ">" .. t .. "</tab>"
	end
--	mw.log("t = " .. t)
	return t
end

function p.fbdata(frame)
--	mw.log("fbdata(frame)")
--	mw.logObject(frame)
	-- Konsolenzeile zum Debuggen:
	-- =p.fbdata{pargs={a=1}}
	local fbdata = {}
	fbdata.frame, fbdata.pargs = dev.GetFrameAndParentArgs(frame)
	wik.setPagenames(fbdata)
--	mw.logObject(fbdata)
	return fbdata
end

return p