15.082
Bearbeitungen
K (HeikoBot verschob die Seite Modul:FaktenboxZeilen nach Modul:Faktenbox/Zeilen, ohne dabei eine Weiterleitung anzulegen) |
(+ getTelUri()) |
||
| (28 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
p = {} | local p = {} | ||
local com = require("Modul:Common") | local com = require("Modul:Common") | ||
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") | |||
function p.zeileKategorieSeite_(fbdata, kindex) | |||
-- mw.log("zeileKategorieSeite_(fbdata, " .. (kindex or 1) .. ")") | |||
-- mw.logObject(fbdata, "fbdata") | |||
function p. | |||
-- mw.log(" | |||
-- mw.logObject(fbdata) | |||
-- Konsolenzeile zum Debuggen: | -- Konsolenzeile zum Debuggen: | ||
-- =p. | -- =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 | ||
function p. | function p.zeileStrasseHnr_(fbdata) | ||
-- mw.log(" | -- mw.log("zeileStrasseHnr_(fbdata)") | ||
-- mw.logObject(fbdata.strasse_hnr) | -- mw.logObject(fbdata.strasse_hnr, "fbdata.strasse_hnr") | ||
-- Konsolenzeile zum Debuggen: | -- Konsolenzeile zum Debuggen: | ||
-- =p. | -- =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(fbdata.strasse_hnr.strasse) do -- Straßen/Hausnummer-Kombis durchiterieren | for is, sh in ipairs(fbdata.strasse_hnr.strasse) do -- Straßen/Hausnummer-Kombis durchiterieren | ||
| Zeile 68: | 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 78: | 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 88: | 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 | ||
function p. | function p.zeileAktenNr_(fbdata) | ||
-- mw.log(" | -- mw.log("zeileAktenNr_(fbdata)") | ||
-- mw.logObject(fbdata.pargs) | -- mw.logObject(fbdata.pargs, "fbdata.pargs") | ||
-- Konsolenzeile zum Debuggen: | -- Konsolenzeile zum Debuggen: | ||
-- =p. | -- =p.zeileAktenNr_{pargs={AktenNr="D-5-63-000-1464"}} | ||
local t = "" | local t = "" | ||
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 115: | Zeile 94: | ||
t = t .. "</dd>" | t = t .. "</dd>" | ||
end | end | ||
-- mw. | -- mw.logObject(t, "t") | ||
return t | return t | ||
end | end | ||
function p. | 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. | -- 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 t = "" | ||
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 139: | 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 | ||
function p. | function p.zeileDatum_(args) | ||
-- mw.log(" | -- mw.log("zeileDatum_(args)") | ||
-- mw.logObject(args) | -- mw.logObject(args, "args") | ||
-- Konsolenzeile zum Debuggen: | -- Konsolenzeile zum Debuggen: | ||
-- =p. | -- =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 "") | ||
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 | ||
function p. | 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.log("zeile(args)") | ||
-- mw.logObject(args) | -- mw.logObject(args, "args") | ||
-- Konsolenzeile zum Debuggen: | -- Konsolenzeile zum Debuggen: | ||
-- =p. | -- =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 = "" | local t = "" | ||
-- 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 188: | 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 202: | 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 223: | 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 | |||
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 | 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 | ||