Modul:Faktenbox
Seiten-Übersicht
| 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:
- Wenn
valproblematische Wikitext/HTML-Inhalte enthält, dann wirdval1:1 angezeigt und ggf. gerendert (nicht innerhalb[[Attribut::Wert]])- Attribut
namemitvalper{{#set:Attribut=Wert}}unsichtbar im Hintergrund gesetzt, auch wenn das Verarbeitungsfehler provoziert (gewollt)
- Ansonsten wenn
valals Seite existiert, wird diese 1:1 gesetzt und angezeigt ([[Attribut::Wert]]) - Ansonsten wenn
valKlammerungen 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. - Ansonsten wird
val1:1 angezeigt und ggf. gerendert (nicht innerhalb[[Attribut::Wert]])- Attribut
namemitvalper{{#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=framevonFaktenbox(frame)fbdata.pargs=frame:getParent().args. Beispiel:fbdata.pargs["Ehemals"]oderfbdata.pargs.Ehemalsfbdata.klasseKlassen-table. Beispiel Kirche:fbdata.klasse = {"Kirche", "Gebäude"}("Kirche" ist primäre und "Gebäude" sekundäre Klasse)fbdata.kategorieKategorien-table. Beispiel Kirche:fbdata.kategorie = {"Kirchen", "Gebäude"}("Kirchen" ist primäre und "Gebäude" sekundäre Kategorie)fbdata.kategorie_einzahlEinzahl-Kategorien-table als Alternative zufbdata.klasse. Beispiel Kirche:fbdata.kategorie_einzahl = {"Kirche", "Gebäude"}("Kirche" ist primäre und "Gebäude" sekundäre Kategorie)fbdata.formularFormular- Pagesnames
frame.fullpagenameframe.pagenameframe.subpagename
frame.strasse_hnrUntertabelle für Straße/Hausnummer-Datenframe.strasse_hnr.strasseUntertabelle für Straßenframe.strasse_hnr.strasse.nameStraßennameframe.strasse_hnr.strasse.hausnummerHausnummern-table dieser Straßeframe.strasse_hnr.strasse.suspektSuspekte Formular-Werte dieser Straße
frame.strasse_hnr.suspektSuspekte Formular-Werte aller Straßenframe.strasse_hnr.anzahlGebaeudeAnzahl 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 str = require("Modul:String")
local wik = require("Modul:Wiki")
local geo = require("Modul:Geocode")
local que = require("Modul:Queries")
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.zeileKategorieSeite(kategorie)
-- mw.log("zeileKategorieSeite(" .. kategorie .. ")")
local t = ""
local fullpagename = wik.fullpagename()
t = t .. "<dt>[[:Kategorie:" .. kategorie .. "|" .. kategorie .. "]]</dt><dd>[[Seite::" .. fullpagename .. "]]</dd>"
-- mw.log("t = " .. t)
return t
end
function p.zeileStrasseHnr(strasseHnr)
-- mw.log("zeileStrasseHnr(strasseHnr)")
-- mw.logObject(strasseHnr)
-- Konsolenzeile zum Debuggen als Startpunkt:
-- =p.zeileStrasseHnr({strasse = {{name = "Erlanger Straße", hausnummer = {"11", "13"}}, {name = "XY Straße" , hausnummer = {}}}})
local t = ""
for is, sh in ipairs(strasseHnr.strasse) do -- Straßen/Hausnummer-Kombis durchiterieren
t = t .. "<dt>"
if is > 1 then
t = t .. is .. ". " -- Numerierungsanzeige "2., "3." usw.
end
t = t .. "[[Attribut:Straße|Straße]]"
if #sh.hausnummer > 0 then
t = t .. " / " .. "[[Attribut:Hausnummer|Hausnummer]]" -- nur wenn Hausnummern vorhanden
end
t = t .. "</dt><dd>[[Straße::" .. sh.name .. "]]"
for ih, h in ipairs(sh.hausnummer) do -- Hausnummern durchiterieren
local strasseHnr_ = sh.name .. " " .. h
if ih > 1 then
t = t .. "," -- Kommas davor ab 2. Hausnummer
end
if wik.pageexists(strasseHnr_) then -- Link, wenn Seite vorhanden
t = t .. " [[" .. strasseHnr_ .. "|" .. h .. "]]"
else
t = t .. " " .. h
end
mw.smw.set({["Hausnummer"] = h, ["StraßeHnr"] = strasseHnr_}) -- Attribute setzen
-- das Setzen von Hausnummer ist etwas sinnbefreit...
-- P.S. so sind Kommas und Gleichheitszeichen auch unproblematisch
end
t = t .. "</dd>"
end
mw.smw.set({["AnzahlGebäude"] = strasseHnr.anzahlGebaeude})
-- mw.log("t = " .. t)
return t
end
function p.zeilenDenkmalschutz(denkmalstatusbesteht, aktennr)
-- mw.log("zeilenDenkmalschutz(" .. (denkmalstatusbesteht or "nil") .. ", " .. (aktennr or "nil") .. ")")
-- Konsolenzeile zum Debuggen als Startpunkt:
-- =p.zeilenDenkmalschutz("Ja","D-5-63-000-1464")
local t = ""
if com.isTrue(denkmalstatusbesteht) then
t = t .. p.zeile("DenkmalstatusBesteht", denkmalstatusbesteht, "Denkmalstatus besteht")
aktennr = str.splitAndStrip(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}}"
p = que.getPages("[[:+]][[AktenNr::" .. a .. "]]", true)
t = t .. " (" .. #p .. ")"
end
t = t .. "</dd>"
end
end
-- mw.log("t=" .. t)
return t
end
function p.zeileGeokoordinate(frame, noframe)
-- mw.log("zeileGeokoordinate()")
local t = ""
local fullpagename = wik.fullpagename()
local geokoordinate = que.getValues(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
if noframe then
t = t .. g
else
t = t .. geo.osmLink(frame, g)
end
end
t = t .. "</dd>"
end
-- mw.log("t = " .. t)
return t
end
function p.faktenboxSemantikBrowsen()
-- mw.log("faktenboxSemantikBrowsen()")
local t = ""
t = t .. "<dl class = 'dataTable'>"
t = t .. "<dt>[[Bild:IconSearch.svg|16px|semantisches Browsen|link=[[Spezial:Durchsuchen/{{FULLPAGENAME}}]]]]</dt>"
t = t .. "<dd>[[Spezial:Durchsuchen/{{FULLPAGENAME}}|semantisches Browsen]]</dd>"
t = t .. "</dl>"
-- mw.log("t = " .. t)
return t
end
function p.bildTab(bild, seite)
-- mw.log("bild(" .. (bild or "nil") .. ", " .. (seite or "nil") .. ")")
local t = ""
local beschreibung = que.getValues("Datei:" .. (bild or ""), "Beschreibung")
local beschreibung = beschreibung[1] or ""
if not com.isEmpty(bild) and wik.pageexists("Bild:" .. bild) then
t = t .. '{| class = "factbox_imagetable" border = "0" cellpadding = "0" cellspacing = "0" width = "100%"\n'
t = t .. '|-\n'
t = t .. '|[[Bild::Datei:' .. bild .. '|768px|link=' .. (seite or '') .. ']]\n'
if beschreibung ~= "" then
t = t .. '|-\n'
t = t .. '|' .. beschreibung .. '\n'
end
t = t .. '|}'
end
-- mw.log("t = " .. t)
return t
end
function p.common(args)
-- mw.log("common(args)")
-- mw.logObject(args)
-- Konsolenzeile zum Debuggen als Startpunkt:
-- =p.common{formular="Gebäude/Work",bild="Angie Oeckl.JPG",klasse="Klasse",kategorie="Gebäude",strasseHnr={suspekt=true},ehemals="Ja",denkmalstatusbesteht="Ja",stadtteil="Ronhof; Nordstadt "}
local t = ""
-- Formular
t = t .. "{{#default_form:" .. args.formular .. "}}"
-- Kategorien
if com.isTrue(args.ehemals) then
t = t .. "[[Kategorie:" .. args.kategorie .. " (ehemals)]]"
else
t = t .. "[[Kategorie:" .. args.kategorie .. "]]"
end
if com.isTrue(args.denkmalstatusbesteht) then
t = t .. "[[Kategorie:Denkmalliste]]"
end
local stadtteil = str.splitAndStrip(args.stadtteil or "", ";")
for _, s in ipairs(stadtteil) do
s = str.strip(tostring(s or ""))
t = t .. "[[Kategorie:" .. s .. "]]"
end
-- Wartungs-Kategorien
if com.isEmpty(args.bild) then
t = t .. "[[Kategorie:" .. args.kategorie .. " ohne Bild]]"
elseif not wik.pageexists("Bild:" .. args.bild) then
t = t .. "[[Kategorie:Bild nicht gefunden]]"
end
local pagename = wik.pagename()
if string.find(pagename, ";") ~= nil then
t = t .. "[[Kategorie:Hat Semikolon]]"
end
if string.find(pagename, "/") ~= nil then
t = t .. "[[Kategorie:Hat Slash]]"
end
if args.strasseHnr.suspekt then
t = t .. "[[Kategorie:Gebäude mit verdächtiger Straße-Hausnummer-Kombination]]"
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 com.isTrue(args.ehemals) then
t = t .. "[[Kategorie:" .. args.kategorie .. " (ehemals) ohne Position]]"
else
t = t .. "[[Kategorie:" .. args.kategorie .. " ohne Position]]"
end
end
-- mw.log("t = " .. t)
return t
end
return p