Modul:Faktenbox/Zeilen: Unterschied zwischen den Versionen

+ getTelUri()
(fix zeileSemantikBrowsenAbfrage_())
(+ getTelUri())
 
(15 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 mez = require("Modul:Mehrzahl")
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 attr_text_anzeige = {
["AbweichendeNamensform"] = "Abw. Namen",
["AngebotVegetarisch"] = "Vegetarische Speisen",
["Ausfuehrung"] = "Ausführung",
["BestandArchivFuerthWiki"] = "Bestand Archiv FürthWiki",
["BietetKartenzahlung"] = "Kartenzahlung möglich",
["DenkmalstatusBesteht"] = "Denkmalstatus besteht",
["GastroBetreiber"] = "Betreiber",
["GastroGenre"] = "Genre",
["GewässerlängeStadtgebiet"] = "Länge im Stadtgebiet",
["Gewässermündung"] = "Mündung bzw. Austritt aus Stadtgebiet",
["Gewässerquelle"] = "Quelle bzw. Eintritt ins Stadtgebiet",
["GewässerRegimetyp"] = "Wasserführung",
["Gewässerstatus"] = "Status/Lage",
["Gewässerstellung"] = "Stellung",
["Gewässerursprung"] = "Ursprung",
["HatAußenplätze"] = "Außenplätze vorhanden",
["HatFassbier"] = "Fassbier-Ausschank",
["HatNebenraum"] = "Nebenraum vorhanden",
["ISBNnr"] = "ISBN-Nr.",
["IstBarrierefrei"] = "Barrierefrei",
["Nachfolger"] = "nachher dort",
["PLZ"] = "Postleitzahl",
["StatistischerBezirk"] = "Statistischer Bezirk",
["StatistischerDistrikt"] = "Statistischer Distrikt",
["TeilDesAreals"] = "Teil des Areals",
["TeilDesEnsembles"] = "Teil des Ensembles",
["TeilDesGebäudeKomplexes"] = "Teil des Gebäude-Komplexes",
["Vorgänger"] = "vorher dort"
}


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] .. "|" .. fbdata.klasse[kindex or 1] .. "]]</dt>"
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
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>"
Zeile 52: Zeile 27:
t = t .. "<dd>[[Seite::" .. fbdata.pagename .. "]]</dd>"
t = t .. "<dd>[[Seite::" .. fbdata.pagename .. "]]</dd>"
end
end
-- mw.log("t = " .. t)
-- 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 .. "[[Attribut:Straße" .. is .. "|Straße]]"
t = t .. "Straße"
if #sh.hausnummer > 0 then
if #sh.hausnummer > 0 then
t = t .. " / " .. "[[Attribut:Hausnummer" .. is .. "|Hausnummer]]" -- nur wenn Hausnummern vorhanden
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 89: Zeile 67:
end
end
t = t .. "{{#set:AnzahlGebäude=" .. fbdata.strasse_hnr.anzahlGebaeude .. "}}"
t = t .. "{{#set:AnzahlGebäude=" .. fbdata.strasse_hnr.anzahlGebaeude .. "}}"
-- mw.log("t = " .. t)
-- 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>" .. "[[Attribut:AktenNr|Akten-Nr.]]</dt><dd>"
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.log("t=" .. t)
-- 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 #geokoordinate > 0 or #geojson > 0 then
if #geojson > 0 then
t = t .. "<dt>[[Attribut:Geokoordinate|Geo-Daten]]</dt><dd>"
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
local first = true
for _, g in ipairs(geokoordinate) do
for _, g in ipairs(geokoordinate) do
Zeile 139: Zeile 125:
t = t .. geo.osmLink(fbdata.frame, g)
t = t .. geo.osmLink(fbdata.frame, g)
end
end
if #geojson > 0 then
if geojson ~= nil then
if not first then
if not first then
t = t .. ",<br>"
t = t .. ",<br>"
end
end
t = t .. "[[" .. geojson[1] .. "|GeoJson-Karte]]"
t = t .. "[[" .. geojson .. "|GeoJson-Karte]]"
end
end
t = t .. "</dd>"
t = t .. "</dd>"
end
end
-- mw.log("t = " .. t)
-- mw.logObject(t, "t")
return t
return t
end
end
Zeile 153: 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 159: 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>" .. "[[Attribut:" .. args.attr_date .. "|" .. (args.attr_text or args.attr_date) .. "]]</dt><dd>"
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.log("t = " .. t)
-- mw.logObject(t, "t")
return t
return t
end
end
Zeile 169: 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 .. "<dl class = 'dataTable'>"
t = t .. "&nbsp;"
t = t .. "<dt>[[Bild:IconSearch.svg|16px|semantisches Browsen|link=[[Spezial:Durchsuchen/" .. fbdata.fullpagename .. "]]]]</dt>"
t = t .. "[[Bild:IconSearch.svg|16px|semantisches Browsen|link=[[Spezial:Durchsuchen/" .. fbdata.fullpagename .. "]]]]"
t = t .. "<dd>[[Spezial:Durchsuchen/" .. fbdata.fullpagename .. "|Sem. Browsen]]"
t = t .. "&nbsp;&nbsp;&nbsp;"
t = t .. "[[Spezial:Durchsuchen/" .. fbdata.fullpagename .. "|Sem. Browsen]]"
if fbdata.kategorie ~= nil and wik.pageExists("Formular:Abfrage " .. fbdata.kategorie[1]) then
if fbdata.kategorie ~= nil and wik.pageExists("Formular:Abfrage " .. fbdata.kategorie[1]) then
t = t .. " / {{#queryformlink:form=Abfrage " .. fbdata.kategorie[1] .. "|link text=Abfrage}}"
t = t .. " / {{#queryformlink:form=Abfrage " .. fbdata.kategorie[1] .. "|link text=Abfrage}}"
end
end
t = t .. "</dd></dl>"
-- mw.logObject(t, "t")
-- mw.log("t = " .. t)
return t
return t
end
end
Zeile 186: 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 192: 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 205: 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 attr_text_anzeige[attr_name] or attr_name
local attr_text = args.attr_text or wob.attr_text(attr_name)
if #attr_val > 1 then
if #attr_val > 1 then
attr_text = mez.mehrzahl(attr_text) -- Mehrzahl
attr_text = wob.mehrzahl(attr_text) -- Mehrzahl
end
end
t = t .. "<dt>" .. "[[Attribut:" .. attr_name .. "|" .. attr_text .. "]]</dt>"
t = t .. "<dt>" .. attr_text .. "</dt>"
-- Attribut-Werte in Zeile übernehmen
-- Attribut-Werte in Zeile übernehmen
t = t .. "<dd>"
t = t .. "<dd>"
Zeile 219: 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 -- alle anderen Attribut-Datentypen
else -- alle anderen Attribut-Datentypen
local val_pre_bracket, val_post_bracket = "", ""
if mw.smw.getPropertyType(attr_name) == "_tel" then -- Telefonnummer Spezialbehandlung
if com.isTrue(args.exclude_bracket_values) then -- Klammer-Text separieren (kein Attribut-Wert)
val = p.getTelUri(val)
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
t = t .. "[[" .. attr_name .. "::" .. val .. "]]"
if val_post_bracket ~= "" then
t = t .. " " .. val_post_bracket
end
end
t = t .. p.setStandardAttr(attr_name, val, args.exclude_bracket_values, args.val_show_only)
end
end
end
end
Zeile 240: Zeile 228:
t = t .. "</dd>"
t = t .. "</dd>"
end
end
-- mw.log("t = " .. t)
-- 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 -- problematische Wikitext/HTML-Inhalte vorhanden?
if string.find(val, "[#=<>%[%]%|%{%}]") ~= nil then -- problematische Wikitext/HTML-Inhalte vorhanden?
t = val .. "{{#set:" .. name .. "=" .. val .. "}}" -- ==> kein Link, sondern nur Attribut versteckt setzen
t = t .. val -- ==> kein Link, sondern nur Attribut versteckt setzen
elseif wik.pageExists(val) then -- eine vorhandene Seite regulär setzen
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.pageExists(val_without_bracket) then -- Seite auch ohne Klammern nicht vorhanden?
if not wik.pageExists(val_without_bracket) then -- Seite auch ohne Klammern nicht vorhanden?
t = val .. "{{#set:" .. name .. "=" .. val .. "}}" -- ==> kein Link, sondern nur Attribut versteckt setzen
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 -- Klammer-Text vor eigentlicher Seite
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 .. "]]" -- das eigentliche Attribut-Setzen
if val_show_only then
if val_post_bracket ~= "" then -- Klammer-Text nach eigentlicher Seite
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