Modul:Faktenbox/Zeilen: Unterschied zwischen den Versionen
(+ p.zeileSemantikBrowsenAbfrage_(fbdata)) |
(+ getTelUri()) |
||
| (21 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 4: | Zeile 4: | ||
local str = require("Modul:String") | local str = require("Modul:String") | ||
local wik = require("Modul:Wiki") | local wik = require("Modul:Wiki") | ||
local geo = require("Modul:Geo") | local geo = require("Modul:Geo") | ||
local que = require("Modul:Queries") | local que = require("Modul:Queries") | ||
local lfd = require("Modul:LinkFormDatum") | local lfd = require("Modul:LinkFormDatum") | ||
local wob = require("Modul:Wörterbuch") | |||
local | |||
function p.zeileKategorieSeite_(fbdata, kindex) | function p.zeileKategorieSeite_(fbdata, kindex) | ||
-- mw.log("zeileKategorieSeite_(fbdata, " .. (kindex or 1) .. ")") | -- mw.log("zeileKategorieSeite_(fbdata, " .. (kindex or 1) .. ")") | ||
-- mw.logObject(fbdata) | -- mw.logObject(fbdata, "fbdata") | ||
-- Konsolenzeile zum Debuggen: | -- Konsolenzeile zum Debuggen: | ||
-- =p.zeileKategorieSeite_({pagename="fpn",kategorie={"kat1","kat2"},klasse={"kla1","kla2"}}, 2) | -- =p.zeileKategorieSeite_({pagename="fpn",kategorie={"kat1","kat2"},kategorie_einzahl={"k1","k2"},klasse={"kla1","kla2"}}, 2) | ||
local t = "" | local t = "" | ||
t = t .. "<dt>[[:Kategorie:" .. fbdata.kategorie[kindex or 1] .. "|" .. | local kategorie_einzahl | ||
if wik. | if fbdata.kategorie_einzahl ~= nil then | ||
kategorie_einzahl = fbdata.kategorie_einzahl[kindex or 1] | |||
else | |||
kategorie_einzahl = fbdata.klasse[kindex or 1] | |||
end | |||
t = t .. "<dt>[[:Kategorie:" .. fbdata.kategorie[kindex or 1] .. "|" .. kategorie_einzahl .. "]]</dt>" | |||
if wik.pageExists("Kategorie:" .. fbdata.pagename) then | |||
t = t .. "<dd>[[:Kategorie:" .. fbdata.pagename .. "|" .. fbdata.pagename .. "]]{{#set:Seite=" .. fbdata.pagename .. "}}</dd>" | t = t .. "<dd>[[:Kategorie:" .. fbdata.pagename .. "|" .. fbdata.pagename .. "]]{{#set:Seite=" .. fbdata.pagename .. "}}</dd>" | ||
else | else | ||
t = t .. "<dd>[[Seite::" .. fbdata.pagename .. "]]</dd>" | t = t .. "<dd>[[Seite::" .. fbdata.pagename .. "]]</dd>" | ||
end | end | ||
-- mw. | -- mw.logObject(t, "t") | ||
return t | return t | ||
end | end | ||
| Zeile 58: | Zeile 33: | ||
function p.zeileStrasseHnr_(fbdata) | function p.zeileStrasseHnr_(fbdata) | ||
-- mw.log("zeileStrasseHnr_(fbdata)") | -- mw.log("zeileStrasseHnr_(fbdata)") | ||
-- mw.logObject(fbdata.strasse_hnr) | -- mw.logObject(fbdata.strasse_hnr, "fbdata.strasse_hnr") | ||
-- Konsolenzeile zum Debuggen: | -- Konsolenzeile zum Debuggen: | ||
-- =p.zeileStrasseHnr_{strasse_hnr={strasse={{name="Erlanger Straße",hausnummer={"11", "13"}},{name="XY Straße",hausnummer={}}},anzahlGebaeude=3}} | -- =p.zeileStrasseHnr_{strasse_hnr={strasse={{name="Erlanger Straße",hausnummer={"11", "13"}},{name="XY Straße",hausnummer={}}},anzahlGebaeude=3}} | ||
| Zeile 69: | Zeile 44: | ||
is = "" -- keine 1, aber 2, 3, ... für weitere Verwendung | is = "" -- keine 1, aber 2, 3, ... für weitere Verwendung | ||
end | end | ||
t = t .. " | t = t .. "Straße" | ||
if #sh.hausnummer > 0 then | if #sh.hausnummer > 0 then | ||
t = t .. " / " .. " | t = t .. " / " .. "Hausnummer" -- nur wenn Hausnummern vorhanden | ||
if #sh.hausnummer > 1 then | |||
t = t .. "n" -- Mehrzahl | |||
end | |||
end | end | ||
t = t .. "</dt><dd>[[Straße" .. is .. "::" .. sh.name .. "]]" | t = t .. "</dt><dd>[[Straße" .. is .. "::" .. sh.name .. "]]" | ||
| Zeile 79: | Zeile 57: | ||
t = t .. "," -- Kommas davor ab 2. Hausnummer | t = t .. "," -- Kommas davor ab 2. Hausnummer | ||
end | end | ||
if wik. | if wik.pageExists(strasse_hnr_) then -- Link, wenn Seite vorhanden | ||
t = t .. " [[" .. strasse_hnr_ .. "|" .. h .. "]]" | t = t .. " [[" .. strasse_hnr_ .. "|" .. h .. "]]" | ||
else | else | ||
| Zeile 89: | Zeile 67: | ||
end | end | ||
t = t .. "{{#set:AnzahlGebäude=" .. fbdata.strasse_hnr.anzahlGebaeude .. "}}" | t = t .. "{{#set:AnzahlGebäude=" .. fbdata.strasse_hnr.anzahlGebaeude .. "}}" | ||
-- mw. | -- mw.logObject(t, "t") | ||
return t | return t | ||
end | end | ||
| Zeile 95: | Zeile 73: | ||
function p.zeileAktenNr_(fbdata) | function p.zeileAktenNr_(fbdata) | ||
-- mw.log("zeileAktenNr_(fbdata)") | -- mw.log("zeileAktenNr_(fbdata)") | ||
-- mw.logObject(fbdata.pargs) | -- mw.logObject(fbdata.pargs, "fbdata.pargs") | ||
-- Konsolenzeile zum Debuggen: | -- Konsolenzeile zum Debuggen: | ||
-- =p.zeileAktenNr_{pargs={AktenNr="D-5-63-000-1464"}} | -- =p.zeileAktenNr_{pargs={AktenNr="D-5-63-000-1464"}} | ||
| Zeile 101: | Zeile 79: | ||
local aktennr = str.splitAndStrip(fbdata.pargs["AktenNr"] or "", ";") | local aktennr = str.splitAndStrip(fbdata.pargs["AktenNr"] or "", ";") | ||
if #aktennr > 0 then | if #aktennr > 0 then | ||
t = t .. "<dt>" .. " | t = t .. "<dt>" .. "Akten-Nr.</dt><dd>" | ||
for i, a in ipairs(aktennr) do | for i, a in ipairs(aktennr) do | ||
if i > 1 then | if i > 1 then | ||
| Zeile 116: | Zeile 94: | ||
t = t .. "</dd>" | t = t .. "</dd>" | ||
end | end | ||
-- mw. | -- mw.logObject(t, "t") | ||
return t | return t | ||
end | end | ||
function p.zeileGeoDaten_(fbdata) | function p.zeileGeoDaten_(fbdata) | ||
-- mw.log("zeileGeoDaten()") | -- mw.log("zeileGeoDaten(fbdata)") | ||
-- mw.logObject(fbdata) | -- mw.logObject(fbdata, "fbdata") | ||
-- Konsolenzeile zum Debuggen: | -- Konsolenzeile zum Debuggen: | ||
-- fab = require("Modul:Faktenbox"); fbdata=fab.fbdata{pargs={}}; fbdata.fullpagename="Isaak-Loewi-Straße 1, 3, 5, 7, 9, Liesl-Kießling-Straße 16"; print(p.zeileGeoDaten_(fbdata)) | -- fab = require("Modul:Faktenbox"); fbdata=fab.fbdata{pargs={}}; fbdata.fullpagename="Isaak-Loewi-Straße 1, 3, 5, 7, 9, Liesl-Kießling-Straße 16"; print(p.zeileGeoDaten_(fbdata)) | ||
| Zeile 128: | Zeile 106: | ||
local geokoordinate = que.getValues(fbdata.fullpagename, "Geokoordinate", true) | local geokoordinate = que.getValues(fbdata.fullpagename, "Geokoordinate", true) | ||
local geojson = que.getValues(fbdata.fullpagename, "GeoJson", true) | local geojson = que.getValues(fbdata.fullpagename, "GeoJson", true) | ||
if #geojson > 0 then | |||
if #geokoordinate > 0 or | geojson = geojson[1] | ||
t = t .. "<dt> | else | ||
geojson = "GeoJson:" .. fbdata.pagename | |||
if not wik.pageExists(geojson) then | |||
geojson = nil | |||
end | |||
end | |||
if #geokoordinate > 0 or geojson ~= nil then | |||
t = t .. "<dt>Geo-Daten</dt><dd>" | |||
local first = true | local first = true | ||
for _, g in ipairs(geokoordinate) do | for _, g in ipairs(geokoordinate) do | ||
| Zeile 140: | Zeile 125: | ||
t = t .. geo.osmLink(fbdata.frame, g) | t = t .. geo.osmLink(fbdata.frame, g) | ||
end | end | ||
if | if geojson ~= nil then | ||
if not first then | if not first then | ||
t = t .. ",<br>" | t = t .. ",<br>" | ||
end | end | ||
t = t .. "[[" .. geojson | t = t .. "[[" .. geojson .. "|GeoJson-Karte]]" | ||
end | end | ||
t = t .. "</dd>" | t = t .. "</dd>" | ||
end | end | ||
-- mw. | -- mw.logObject(t, "t") | ||
return t | return t | ||
end | end | ||
| Zeile 154: | Zeile 139: | ||
function p.zeileDatum_(args) | function p.zeileDatum_(args) | ||
-- mw.log("zeileDatum_(args)") | -- mw.log("zeileDatum_(args)") | ||
-- mw.logObject(args) | -- mw.logObject(args, "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"} | ||
| Zeile 160: | Zeile 145: | ||
local date = str.strip(args.date or "") | local date = str.strip(args.date or "") | ||
if date ~= "" then | if date ~= "" then | ||
t = t .. "<dt> | t = t .. "<dt>" .. (args.attr_text or args.attr_date) .. "</dt><dd>" | ||
t = t .. lfd.linkFormDate(date, args.attr_date, args.attr_day, args.attr_year) | if com.isTrue(args.val_show_only) then | ||
t = t .. lfd.linkFormDate(date) | |||
else | |||
t = t .. lfd.linkFormDate(date, args.attr_date, args.attr_day, args.attr_year) | |||
end | |||
t = t .. "</dd>" | t = t .. "</dd>" | ||
end | end | ||
-- mw. | -- mw.logObject(t, "t") | ||
return t | return t | ||
end | end | ||
| Zeile 170: | Zeile 159: | ||
function p.zeileSemantikBrowsenAbfrage_(fbdata) | function p.zeileSemantikBrowsenAbfrage_(fbdata) | ||
-- mw.log("zeileSemantikBrowsenAbfrage_(fbdata)") | -- mw.log("zeileSemantikBrowsenAbfrage_(fbdata)") | ||
-- mw.logObject(fbdata) | -- mw.logObject(fbdata, "fbdata") | ||
-- Konsolenzeile zum Debuggen: | -- Konsolenzeile zum Debuggen: | ||
-- =p.zeileSemantikBrowsenAbfrage_{fullpagename="Rathaus"} | -- =p.zeileSemantikBrowsenAbfrage_{fullpagename="Rathaus"} | ||
local t = "" | local t = "" | ||
t = t .. " | t = t .. " " | ||
t = t .. " | t = t .. "[[Bild:IconSearch.svg|16px|semantisches Browsen|link=[[Spezial:Durchsuchen/" .. fbdata.fullpagename .. "]]]]" | ||
t = t .. " | t = t .. " " | ||
if wik.pageExists("Formular:Abfrage " .. fbdata. | t = t .. "[[Spezial:Durchsuchen/" .. fbdata.fullpagename .. "|Sem. Browsen]]" | ||
t = t .. " / {{#queryformlink:form=Abfrage " .. fbdata. | if fbdata.kategorie ~= nil and wik.pageExists("Formular:Abfrage " .. fbdata.kategorie[1]) then | ||
t = t .. " / {{#queryformlink:form=Abfrage " .. fbdata.kategorie[1] .. "|link text=Abfrage}}" | |||
end | end | ||
-- mw.logObject(t, "t") | |||
-- mw.logObject( | |||
return t | return t | ||
end | end | ||
| Zeile 201: | Zeile 176: | ||
function p.zeile_(args) | function p.zeile_(args) | ||
-- mw.log("zeile(args)") | -- mw.log("zeile(args)") | ||
-- mw.logObject(args) | -- mw.logObject(args, "args") | ||
-- Konsolenzeile zum Debuggen: | -- Konsolenzeile zum Debuggen: | ||
-- =p.zeile_{attr_name="Vorgänger",attr_text="t",fbdata={pargs={["Vorgänger"]="; v11 , V12 ; v13 (a(b))"}},attr_val="; v1 ; v2, v3 (a(b))",val_prefix="pre",val_postfix="post",exclude_bracket_values=true,delimiter=","} | -- =p.zeile_{attr_name="Vorgänger",attr_text="t",fbdata={pargs={["Vorgänger"]="; v11 , V12 ; v13 (a(b))"}},attr_val="; v1 ; v2, v3 (a(b))",val_prefix="pre",val_postfix="post",exclude_bracket_values=true,delimiter=","} | ||
| Zeile 207: | Zeile 182: | ||
-- Attribut-Name/Wert aufbereiten (splitten, in table umwandeln) | -- Attribut-Name/Wert aufbereiten (splitten, in table umwandeln) | ||
local attr_name = args.attr_name | local attr_name = args.attr_name | ||
local attr_val = args.attr_val or args.fbdata.pargs[attr_name] or {} | local attr_val | ||
if args.fbdata ~= nil then | |||
attr_val = args.attr_val or args.fbdata.pargs[attr_name] or {} | |||
else | |||
attr_val = args.attr_val or {} | |||
end | |||
if type(attr_val) ~= "table" then -- Liste in table umwandeln/zerteilen | if type(attr_val) ~= "table" then -- Liste in table umwandeln/zerteilen | ||
if args.delimiter ~= nil then | if args.delimiter ~= nil then | ||
| Zeile 220: | Zeile 200: | ||
if #attr_val > 0 then | if #attr_val > 0 then | ||
-- Attribut-Text ermitteln und in Zeile übernehmen | -- Attribut-Text ermitteln und in Zeile übernehmen | ||
local attr_text = args.attr_text or | local attr_text = args.attr_text or wob.attr_text(attr_name) | ||
if #attr_val > 1 then | if #attr_val > 1 then | ||
attr_text = | attr_text = wob.mehrzahl(attr_text) -- Mehrzahl | ||
end | end | ||
t = t .. "<dt> | t = t .. "<dt>" .. attr_text .. "</dt>" | ||
-- Attribut-Werte in Zeile übernehmen | -- Attribut-Werte in Zeile übernehmen | ||
t = t .. "<dd>" | t = t .. "<dd>" | ||
| Zeile 234: | Zeile 214: | ||
t = t .. ", " -- Listen-Kommata | t = t .. ", " -- Listen-Kommata | ||
end | end | ||
if mw.smw.getPropertyType(attr_name) == "_wpg" then -- Seiten-Attribute Spezialbehandlung | if mw.smw.getPropertyType(attr_name) == "_wpg" then -- Seiten-Attribute Spezialbehandlung | ||
t = t .. p.setPageAttr(attr_name, val) | t = t .. p.setPageAttr(attr_name, val, args.val_show_only) | ||
else | else -- alle anderen Attribut-Datentypen | ||
if mw.smw.getPropertyType(attr_name) == "_tel" then -- Telefonnummer Spezialbehandlung | |||
if | val = p.getTelUri(val) | ||
end | end | ||
t = t .. p.setStandardAttr(attr_name, val, args.exclude_bracket_values, args.val_show_only) | |||
end | end | ||
end | end | ||
| Zeile 255: | Zeile 228: | ||
t = t .. "</dd>" | t = t .. "</dd>" | ||
end | end | ||
-- mw. | -- mw.logObject(t, "t") | ||
return t | return t | ||
end | end | ||
function p.setPageAttr(name, val) | function p.setPageAttr(name, val, val_show_only) | ||
local t = "" | local t = "" | ||
if string.find(val, "[#=<>%[%]%|%{%}]") ~= nil then | if string.find(val, "[#=<>%[%]%|%{%}]") ~= nil then -- problematische Wikitext/HTML-Inhalte vorhanden? | ||
t = val .. "{{#set:" .. name .. "=" .. val .. "}}" | t = t .. val -- ==> kein Link, sondern nur Attribut versteckt setzen | ||
elseif wik. | if not val_show_only then | ||
t = "[[" .. name .. "::" .. val .. "]]" | t = t .. "{{#set:" .. name .. "=" .. val .. "}}" | ||
end | |||
elseif wik.pageExists(val) then -- eine vorhandene Seite regulär verlinken bzw. setzen | |||
if val_show_only then | |||
t = t .. "[[" .. val .. "]]" | |||
else | |||
t = t .. "[[" .. name .. "::" .. val .. "]]" | |||
end | |||
else | else | ||
val_pre_bracket, val_without_bracket, val_post_bracket = str.bracketSplitAndStrip(val) -- nach Klammern suchen und aufteilen | val_pre_bracket, val_without_bracket, val_post_bracket = str.bracketSplitAndStrip(val) -- nach Klammern suchen und aufteilen | ||
if not wik. | if not wik.pageExists(val_without_bracket) then -- Seite auch ohne Klammern nicht vorhanden? | ||
t = val .. "{{#set:" .. name .. "=" .. val .. "}}" | t = t .. val -- ==> kein Link, sondern nur Attribut versteckt setzen | ||
if not val_show_only then | |||
t = t .. "{{#set:" .. name .. "=" .. val .. "}}" | |||
end | |||
else | else | ||
if val_pre_bracket ~= "" then | if val_pre_bracket ~= "" then -- Klammer-Text vor eigentlicher Seite | ||
t = t .. val_pre_bracket .. " " | t = t .. val_pre_bracket .. " " | ||
end | end | ||
t = t .. "[[" .. name .. "::" .. val_without_bracket .. "]]" | if val_show_only then | ||
if val_post_bracket ~= "" then | t = t .. "[[" .. val_without_bracket .. "]]" -- das eigentliche Attribut verlinken | ||
else | |||
t = t .. "[[" .. name .. "::" .. val_without_bracket .. "]]" -- das eigentliche Attribut-Setzen | |||
end | |||
if val_post_bracket ~= "" then -- Klammer-Text nach eigentlicher Seite | |||
t = t .. " " .. val_post_bracket | t = t .. " " .. val_post_bracket | ||
end | end | ||
end | end | ||
end | end | ||
-- mw.logObject(t, "t") | |||
return t | return t | ||
end | |||
function p.setStandardAttr(name, val, exclude_bracket_values, val_show_only) | |||
local t = "" | |||
local val_pre_bracket, val_post_bracket = "", "" | |||
if com.isTrue(exclude_bracket_values) then -- Klammer-Text separieren (kein Attribut-Wert) | |||
val_pre_bracket, val, val_post_bracket = str.bracketSplitAndStrip(val) -- nach Klammern suchen und aufteilen | |||
end | |||
if val_pre_bracket ~= "" then | |||
t = t .. val_pre_bracket .. " " | |||
end | |||
if com.isTrue(val_show_only) then | |||
t = t .. val | |||
else | |||
t = t .. "[[" .. name .. "::" .. val .. "]]" | |||
end | |||
if val_post_bracket ~= "" then | |||
t = t .. " " .. val_post_bracket | |||
end | |||
-- mw.logObject(t, "t") | |||
return t | |||
end | |||
function p.getTelUri(val) | |||
local tel = str.strip(val) -- preload default | |||
if mw.ustring.sub(tel, 1, 1) == "0" and -- beginnt mit 0zzz (z = Zahl) | |||
(tonumber(mw.ustring.sub(tel, 2, 2)) or 0) > 0 then | |||
tel = "+49 " .. mw.ustring.sub(tel, 2) | |||
elseif mw.ustring.sub(tel, 1, 3) == "+49" then -- +49 (0) ... | |||
s, e = mw.ustring.find(tel, "%(0%)") | |||
if s ~= nil then | |||
tel = mw.ustring.sub(tel, 1, s - 1) .. " " .. mw.ustring.sub(tel, e + 1) | |||
end | |||
end | |||
-- Alle unerlaubten Zeichen und mehrfache Leerzeichen ausfiltern | |||
local telUri = "" | |||
local previous_char = "" | |||
tel = tel .. " " | |||
for i = 1, mw.ustring.len(tel) do | |||
local char = mw.ustring.sub(tel, i, i) | |||
if tonumber(char) ~= nil or | |||
char == "+" or char == "-" or char == "/" or | |||
(char == " " and previous_char ~= " ") then | |||
telUri = telUri .. previous_char | |||
previous_char = char | |||
end | |||
end | |||
return telUri | |||
end | end | ||
return p | return p | ||
Aktuelle Version vom 27. November 2025, 20:35 Uhr
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
local p = {}
local com = require("Modul:Common")
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")
local wob = require("Modul:Wörterbuch")
function p.zeileKategorieSeite_(fbdata, kindex)
-- mw.log("zeileKategorieSeite_(fbdata, " .. (kindex or 1) .. ")")
-- mw.logObject(fbdata, "fbdata")
-- Konsolenzeile zum Debuggen:
-- =p.zeileKategorieSeite_({pagename="fpn",kategorie={"kat1","kat2"},kategorie_einzahl={"k1","k2"},klasse={"kla1","kla2"}}, 2)
local t = ""
local kategorie_einzahl
if fbdata.kategorie_einzahl ~= nil then
kategorie_einzahl = fbdata.kategorie_einzahl[kindex or 1]
else
kategorie_einzahl = fbdata.klasse[kindex or 1]
end
t = t .. "<dt>[[:Kategorie:" .. fbdata.kategorie[kindex or 1] .. "|" .. kategorie_einzahl .. "]]</dt>"
if wik.pageExists("Kategorie:" .. fbdata.pagename) then
t = t .. "<dd>[[:Kategorie:" .. fbdata.pagename .. "|" .. fbdata.pagename .. "]]{{#set:Seite=" .. fbdata.pagename .. "}}</dd>"
else
t = t .. "<dd>[[Seite::" .. fbdata.pagename .. "]]</dd>"
end
-- mw.logObject(t, "t")
return t
end
function p.zeileStrasseHnr_(fbdata)
-- mw.log("zeileStrasseHnr_(fbdata)")
-- mw.logObject(fbdata.strasse_hnr, "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 .. "Straße"
if #sh.hausnummer > 0 then
t = t .. " / " .. "Hausnummer" -- nur wenn Hausnummern vorhanden
if #sh.hausnummer > 1 then
t = t .. "n" -- Mehrzahl
end
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.logObject(t, "t")
return t
end
function p.zeileAktenNr_(fbdata)
-- mw.log("zeileAktenNr_(fbdata)")
-- mw.logObject(fbdata.pargs, "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>" .. "Akten-Nr.</dt><dd>"
for i, a in ipairs(aktennr) do
if i > 1 then
t = t .. ",<br>"
end
local p = que.getPages("[[:+]][[AktenNr::" .. a .. "]]", true)
if #p > 1 then
t = t .. "{{#queryformlink:form=Abfrage Denkmalschutz|link text=[[AktenNr::" .. a .. "]]|query string=Abfrage Denkmalschutz[AktenNr]=" .. a .. "&_run}}"
else
t = t .. "[[AktenNr::" .. a .. "]]"
end
t = t .. " (" .. #p .. ")" -- Anzahl der Artikel mit dieser Akten-Nr. in Klammern
end
t = t .. "</dd>"
end
-- mw.logObject(t, "t")
return t
end
function p.zeileGeoDaten_(fbdata)
-- mw.log("zeileGeoDaten(fbdata)")
-- mw.logObject(fbdata, "fbdata")
-- Konsolenzeile zum Debuggen:
-- fab = require("Modul:Faktenbox"); fbdata=fab.fbdata{pargs={}}; fbdata.fullpagename="Isaak-Loewi-Straße 1, 3, 5, 7, 9, Liesl-Kießling-Straße 16"; print(p.zeileGeoDaten_(fbdata))
local t = ""
local geokoordinate = que.getValues(fbdata.fullpagename, "Geokoordinate", true)
local geojson = que.getValues(fbdata.fullpagename, "GeoJson", true)
if #geojson > 0 then
geojson = geojson[1]
else
geojson = "GeoJson:" .. fbdata.pagename
if not wik.pageExists(geojson) then
geojson = nil
end
end
if #geokoordinate > 0 or geojson ~= nil then
t = t .. "<dt>Geo-Daten</dt><dd>"
local first = true
for _, g in ipairs(geokoordinate) do
if first then
first = false
else
t = t .. ",<br>"
end
t = t .. geo.osmLink(fbdata.frame, g)
end
if geojson ~= nil then
if not first then
t = t .. ",<br>"
end
t = t .. "[[" .. geojson .. "|GeoJson-Karte]]"
end
t = t .. "</dd>"
end
-- mw.logObject(t, "t")
return t
end
function p.zeileDatum_(args)
-- mw.log("zeileDatum_(args)")
-- mw.logObject(args, "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>" .. (args.attr_text or args.attr_date) .. "</dt><dd>"
if com.isTrue(args.val_show_only) then
t = t .. lfd.linkFormDate(date)
else
t = t .. lfd.linkFormDate(date, args.attr_date, args.attr_day, args.attr_year)
end
t = t .. "</dd>"
end
-- mw.logObject(t, "t")
return t
end
function p.zeileSemantikBrowsenAbfrage_(fbdata)
-- mw.log("zeileSemantikBrowsenAbfrage_(fbdata)")
-- mw.logObject(fbdata, "fbdata")
-- Konsolenzeile zum Debuggen:
-- =p.zeileSemantikBrowsenAbfrage_{fullpagename="Rathaus"}
local t = ""
t = t .. " "
t = t .. "[[Bild:IconSearch.svg|16px|semantisches Browsen|link=[[Spezial:Durchsuchen/" .. fbdata.fullpagename .. "]]]]"
t = t .. " "
t = t .. "[[Spezial:Durchsuchen/" .. fbdata.fullpagename .. "|Sem. Browsen]]"
if fbdata.kategorie ~= nil and wik.pageExists("Formular:Abfrage " .. fbdata.kategorie[1]) then
t = t .. " / {{#queryformlink:form=Abfrage " .. fbdata.kategorie[1] .. "|link text=Abfrage}}"
end
-- mw.logObject(t, "t")
return t
end
function p.zeile_(args)
-- mw.log("zeile(args)")
-- mw.logObject(args, "args")
-- Konsolenzeile zum Debuggen:
-- =p.zeile_{attr_name="Vorgänger",attr_text="t",fbdata={pargs={["Vorgänger"]="; v11 , V12 ; v13 (a(b))"}},attr_val="; v1 ; v2, v3 (a(b))",val_prefix="pre",val_postfix="post",exclude_bracket_values=true,delimiter=","}
local t = ""
-- Attribut-Name/Wert aufbereiten (splitten, in table umwandeln)
local attr_name = args.attr_name
local attr_val
if args.fbdata ~= nil then
attr_val = args.attr_val or args.fbdata.pargs[attr_name] or {}
else
attr_val = args.attr_val or {}
end
if type(attr_val) ~= "table" then -- Liste in table umwandeln/zerteilen
if args.delimiter ~= nil then
attr_val = str.splitAndStrip(attr_val, args.delimiter or ";")
elseif attr_val ~= "" then
attr_val = { attr_val }
else
attr_val = {}
end
end
-- Zeile zusammenbauen
if #attr_val > 0 then
-- Attribut-Text ermitteln und in Zeile übernehmen
local attr_text = args.attr_text or wob.attr_text(attr_name)
if #attr_val > 1 then
attr_text = wob.mehrzahl(attr_text) -- Mehrzahl
end
t = t .. "<dt>" .. attr_text .. "</dt>"
-- Attribut-Werte in Zeile übernehmen
t = t .. "<dd>"
if args.val_prefix ~= nil then
t = t .. args.val_prefix .. " " -- Prefix
end
for idx, val in ipairs(attr_val) do -- Werte-Liste
if idx > 1 then
t = t .. ", " -- Listen-Kommata
end
if mw.smw.getPropertyType(attr_name) == "_wpg" then -- Seiten-Attribute Spezialbehandlung
t = t .. p.setPageAttr(attr_name, val, args.val_show_only)
else -- alle anderen Attribut-Datentypen
if mw.smw.getPropertyType(attr_name) == "_tel" then -- Telefonnummer Spezialbehandlung
val = p.getTelUri(val)
end
t = t .. p.setStandardAttr(attr_name, val, args.exclude_bracket_values, args.val_show_only)
end
end
if args.val_postfix ~= nil then
t = t .. " " .. args.val_postfix -- Postfix
end
t = t .. "</dd>"
end
-- mw.logObject(t, "t")
return t
end
function p.setPageAttr(name, val, val_show_only)
local t = ""
if string.find(val, "[#=<>%[%]%|%{%}]") ~= nil then -- problematische Wikitext/HTML-Inhalte vorhanden?
t = t .. val -- ==> kein Link, sondern nur Attribut versteckt setzen
if not val_show_only then
t = t .. "{{#set:" .. name .. "=" .. val .. "}}"
end
elseif wik.pageExists(val) then -- eine vorhandene Seite regulär verlinken bzw. setzen
if val_show_only then
t = t .. "[[" .. val .. "]]"
else
t = t .. "[[" .. name .. "::" .. val .. "]]"
end
else
val_pre_bracket, val_without_bracket, val_post_bracket = str.bracketSplitAndStrip(val) -- nach Klammern suchen und aufteilen
if not wik.pageExists(val_without_bracket) then -- Seite auch ohne Klammern nicht vorhanden?
t = t .. val -- ==> kein Link, sondern nur Attribut versteckt setzen
if not val_show_only then
t = t .. "{{#set:" .. name .. "=" .. val .. "}}"
end
else
if val_pre_bracket ~= "" then -- Klammer-Text vor eigentlicher Seite
t = t .. val_pre_bracket .. " "
end
if val_show_only then
t = t .. "[[" .. val_without_bracket .. "]]" -- das eigentliche Attribut verlinken
else
t = t .. "[[" .. name .. "::" .. val_without_bracket .. "]]" -- das eigentliche Attribut-Setzen
end
if val_post_bracket ~= "" then -- Klammer-Text nach eigentlicher Seite
t = t .. " " .. val_post_bracket
end
end
end
-- mw.logObject(t, "t")
return t
end
function p.setStandardAttr(name, val, exclude_bracket_values, val_show_only)
local t = ""
local val_pre_bracket, val_post_bracket = "", ""
if com.isTrue(exclude_bracket_values) then -- Klammer-Text separieren (kein Attribut-Wert)
val_pre_bracket, val, val_post_bracket = str.bracketSplitAndStrip(val) -- nach Klammern suchen und aufteilen
end
if val_pre_bracket ~= "" then
t = t .. val_pre_bracket .. " "
end
if com.isTrue(val_show_only) then
t = t .. val
else
t = t .. "[[" .. name .. "::" .. val .. "]]"
end
if val_post_bracket ~= "" then
t = t .. " " .. val_post_bracket
end
-- mw.logObject(t, "t")
return t
end
function p.getTelUri(val)
local tel = str.strip(val) -- preload default
if mw.ustring.sub(tel, 1, 1) == "0" and -- beginnt mit 0zzz (z = Zahl)
(tonumber(mw.ustring.sub(tel, 2, 2)) or 0) > 0 then
tel = "+49 " .. mw.ustring.sub(tel, 2)
elseif mw.ustring.sub(tel, 1, 3) == "+49" then -- +49 (0) ...
s, e = mw.ustring.find(tel, "%(0%)")
if s ~= nil then
tel = mw.ustring.sub(tel, 1, s - 1) .. " " .. mw.ustring.sub(tel, e + 1)
end
end
-- Alle unerlaubten Zeichen und mehrfache Leerzeichen ausfiltern
local telUri = ""
local previous_char = ""
tel = tel .. " "
for i = 1, mw.ustring.len(tel) do
local char = mw.ustring.sub(tel, i, i)
if tonumber(char) ~= nil or
char == "+" or char == "-" or char == "/" or
(char == " " and previous_char ~= " ") then
telUri = telUri .. previous_char
previous_char = char
end
end
return telUri
end
return p