Modul:LinkFormDatum: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
(+ linkFormDateAttrList()) |
||
| (25 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
local p = {} | local p = {} | ||
local com = require("Modul:Common") | |||
local str = require("Modul:String") | |||
local kal = require("Modul:Kalender") | |||
local smw = require("Modul:SMW") | |||
function p.LinkFormDate(frame) | |||
-- #invoke wrapper | |||
local args = frame.args | |||
return p.linkFormDate(args[1], args[2], args[3], args[4]) | |||
end | |||
function p.linkFormDate(date, attr_date, attr_day, attr_year) | |||
local date_array | |||
local mda | |||
local mn -- monthname | |||
if string.find(date, "/") ~= nil then -- regular case YYYY/MM/DD | |||
date_array = str.split(date, "/") | |||
else -- ISO-P case YYYY-MM-DD | |||
date_array = str.split(date, "-") | |||
end | |||
-- wenn keine Attribute übergeben, werden keine gesetzt, sondern nur Links eingebaut | |||
mw.smw.set({[attr_date] = date}) | if attr_day ~= nil then | ||
if isEmpty(date_array[ | attr_day = attr_day .. "::" | ||
else | |||
attr_day = "" | |||
end | |||
if attr_year ~= nil then | |||
attr_year = attr_year .. "::" | |||
else | |||
attr_year = "" | |||
end | |||
if attr_date ~= nil then | |||
mw.smw.set({[attr_date] = date}) | |||
end | |||
if com.isEmpty(date_array[2]) then | |||
-- When datestring contained no "/" | -- When datestring contained no "/" | ||
if isInteger(date_array[0]) then | if com.isInteger(date_array[1]) then | ||
-- When dateformat is just YYYY | |||
return "[[" .. attr_year .. date_array[1] .. "]]" | |||
else | |||
-- Dateformat is <monthname> YYYY | |||
mda = str.split(date_array[1]) | |||
return mda[1] .. " [[" .. attr_year .. mda[2] .. "]]" | |||
end | |||
elseif com.isEmpty(date_array[3]) then | |||
-- Datestring contained one "/" | |||
mn = kal.month_names[tonumber(date_array[2])] | |||
return mn .. " [[" .. attr_year .. date_array[1] .. "]]" | |||
else | |||
-- Dateformat should be YYYY/MM/DD or YYYY-MM-DD | |||
mn = kal.month_names[tonumber(date_array[2])] | |||
date_array[3] = date_array[3]:gsub('0*', '', 1) | |||
return "[[" .. attr_day .. date_array[3] .. ". " .. mn .. "]]" .. | |||
" [[" .. attr_year .. date_array[1] .. "]]" | |||
end | |||
end | |||
function p.linkFormDateAttrList(args) | |||
-- wie linkFormDate, aber zu setzende Attribute werden in Attribute-Liste eingetragen | |||
-- Kommandozeile zum Debuggen: | |||
-- attr_list={}; print(p.linkFormDateAttrList{date="2026/02/10", attr_list=attr_list, attr_date="Datum", attr_day="Tag", attr_year="Jahr"}); mw.logObject(attr_list) | |||
-- attr_list={}; print(p.linkFormDateAttrList{date="2026-02-10", attr_list=attr_list, attr_date="Datum", attr_day="Tag", attr_year="Jahr"}); mw.logObject(attr_list) | |||
-- attr_list={}; print(p.linkFormDateAttrList{date="2026", attr_list=attr_list, attr_date="Datum", attr_day="Tag", attr_year="Jahr"}); mw.logObject(attr_list) | |||
-- attr_list={}; print(p.linkFormDateAttrList{date="April 2026", attr_list=attr_list, attr_date="Datum", attr_day="Tag", attr_year="Jahr"}); mw.logObject(attr_list) | |||
-- attr_list={}; print(p.linkFormDateAttrList{date="2026/02", attr_list=attr_list, attr_date="Datum", attr_day="Tag", attr_year="Jahr"}); mw.logObject(attr_list) | |||
local t = "" | |||
-- date zerteilen | |||
local date_array | |||
if string.find(args.date, "/") ~= nil then -- regular case YYYY/MM/DD | |||
date_array = str.split(args.date, "/") | |||
else -- ISO-P case YYYY-MM-DD | |||
date_array = str.split(args.date, "-") | |||
end | |||
-- Fälle unterscheiden | |||
local day, month, year | |||
if com.isEmpty(date_array[2]) then -- "2026" oder "April 2026" | |||
-- When datestring contained no "/" => only year | |||
if com.isInteger(date_array[1]) then | |||
-- When dateformat is just YYYY | -- When dateformat is just YYYY | ||
year = date_array[1] | |||
t = "[[" .. year .. "]]" | |||
else | else | ||
-- Dateformat is <monthname> YYYY | -- Dateformat is <monthname> YYYY | ||
mda = split(date_array[ | local mda = str.split(date_array[1]) | ||
year = mda[2] | |||
t = mda[1] .. " [[" .. year .. "]]" | |||
end | end | ||
elseif isEmpty(date_array[ | elseif com.isEmpty(date_array[3]) then -- "2026/02" | ||
-- Datestring contained one "/" | -- Datestring contained one "/" | ||
month = kal.month_names[tonumber(date_array[2])] | |||
year = date_array[1] | |||
t = month .. " [[" .. year .. "]]" | |||
else | else | ||
-- Dateformat should be YYYY/MM/DD | -- Dateformat should be YYYY/MM/DD or YYYY-MM-DD | ||
month = kal.month_names[tonumber(date_array[2])] | |||
date_array[ | date_array[3] = date_array[3]:gsub('0*', '', 1) | ||
day = date_array[3] .. ". " .. month | |||
year = date_array[1] | |||
t = "[[" .. day .. "]]" .. " [[" .. year .. "]]" | |||
end | end | ||
-- Werte in Attributeliste eintragen. Bei nil wird nix eingetragen | |||
smw.addAttrToList(args.attr_list, args.attr_date, args.date) | |||
smw.addAttrToList(args.attr_list, args.attr_date .. "Lfd", t) | |||
smw.addAttrToList(args.attr_list, args.attr_day, day) | |||
smw.addAttrToList(args.attr_list, args.attr_year, year) | |||
return t | |||
end | |||
function p.FormatDate(frame) | |||
-- #invoke wrapper | |||
return p.formatDate(frame.args[1]) | |||
end | end | ||
function p. | function p.formatDate(date) | ||
local date_array = str.split(date, " ") | |||
local day | |||
if com.isEmpty(date_array[2]) then | |||
if isEmpty(date_array[ | |||
-- When datestring contained no " ", thus is year | -- When datestring contained no " ", thus is year | ||
return "[[" .. date_array[ | return "[[" .. date_array[1] .. "]]" | ||
elseif isEmpty(date_array[ | elseif com.isEmpty(date_array[3]) then | ||
-- When datestring contains monthname and year | -- When datestring contains monthname and year | ||
return date_array[ | return date_array[1] .. " [[" .. date_array[2] .. "]]" | ||
else | else | ||
-- When datestring contains day, monthname and year | -- When datestring contains day, monthname and year | ||
return "[[" .. | day = string.gsub(date_array[1], "%.", "") | ||
"[[" .. date_array[ | return "[[" .. day .. ". " .. date_array[2] .. "]] " .. | ||
"[[" .. date_array[3] .. "]]" | |||
end | end | ||
end | end | ||
function p.HumanToFormDate (frame) | function p.HumanToFormDate(frame) | ||
-- #invoke wrapper | |||
return p.humanToFormDate(frame.args[1]) | |||
end | |||
function p.humanToFormDate(date) | |||
mw.log("p.humanToFormDate(date)") | |||
mw.logObject(date) | |||
-- Converts a human date (3. Februar 1955) to 1955/02/03, like SMW needs | -- Converts a human date (3. Februar 1955) to 1955/02/03, like SMW needs | ||
local date_array=str.split(date, " ") | |||
local day | |||
local mnr -- monthnr | |||
if com.isEmpty(date_array[2]) then | |||
if isEmpty(date_array[ | |||
-- When datestring contained no " ", thus is year | -- When datestring contained no " ", thus is year | ||
return date_array[1] | |||
return date_array[ | elseif com.isEmpty(date_array[3]) then | ||
elseif isEmpty(date_array[ | |||
-- When datestring contains monthname and year | -- When datestring contains monthname and year | ||
return date_array[1].." "..date_array[2] | |||
else | else | ||
day = string.gsub(date_array[ | day = string.gsub(date_array[1], "%.", "") | ||
day = string.format("%02d", day) | day = string.format("%02d", day) | ||
mnr = | mnr = kal.month_numbers[date_array[2]] | ||
mnr = string.format("%02d", mnr) | mnr = string.format("%02d", mnr) | ||
return date_array[3] .. "/" .. mnr .. "/" .. day | |||
end | end | ||
end | end | ||
return p | return p | ||
Aktuelle Version vom 10. Februar 2026, 10:26 Uhr
LinkFormDate
Funktion, welche die Datumsfelder der Formulare zur Visualisierung in den Faktenboxen abbildet. Hierbei werden die Datumsangaben gleichzeitig semantisiert.
Die von der Vorlage übergebenen Parameter lauten:
- 1 = Datum, z. B. das Geburtsdatum in beliebigem Format
- 2 = Name des Hauptattributs, z. B.
Geburtsdatum - 3 = Name des Tagesattributes, z. B.
Geburtstag - 4 = Name des Jahresattributes, z. B.
Geburtsjahr
linkFormDateAttrList
Wie LinkFormDate, aber dass die Attribute in Attribute-Liste eingetragen werden.
FormatDate
Bringt ein semantisches Datum (z. B. 20 Januar 2008) in die Übliche Darstellung (20. Januar 2008), so dass Jahr und Jahrestag klickbar sind und in die entsprechenden Artikel verlinken. Es funktioniert auch, wenn der Tag mit Punkt übergeben wird (also 20. Januar 2008).
HumanToFormDate
Bringt ein Menschenlesbares Datum wie "23. Februar 1985" in die semantische Form "1985/02/23". Die Konvertierung gelingt auch, wenn der Tag oder Tag und Monat fehlen. Das nun maschinenlesbare Format kann mit der Funktion LinkFormDate wieder semantisiert und in die Datenbank eingetragen werden (unter Nennung der Attribute, siehe dort).
Unterseiten
local p = {}
local com = require("Modul:Common")
local str = require("Modul:String")
local kal = require("Modul:Kalender")
local smw = require("Modul:SMW")
function p.LinkFormDate(frame)
-- #invoke wrapper
local args = frame.args
return p.linkFormDate(args[1], args[2], args[3], args[4])
end
function p.linkFormDate(date, attr_date, attr_day, attr_year)
local date_array
local mda
local mn -- monthname
if string.find(date, "/") ~= nil then -- regular case YYYY/MM/DD
date_array = str.split(date, "/")
else -- ISO-P case YYYY-MM-DD
date_array = str.split(date, "-")
end
-- wenn keine Attribute übergeben, werden keine gesetzt, sondern nur Links eingebaut
if attr_day ~= nil then
attr_day = attr_day .. "::"
else
attr_day = ""
end
if attr_year ~= nil then
attr_year = attr_year .. "::"
else
attr_year = ""
end
if attr_date ~= nil then
mw.smw.set({[attr_date] = date})
end
if com.isEmpty(date_array[2]) then
-- When datestring contained no "/"
if com.isInteger(date_array[1]) then
-- When dateformat is just YYYY
return "[[" .. attr_year .. date_array[1] .. "]]"
else
-- Dateformat is <monthname> YYYY
mda = str.split(date_array[1])
return mda[1] .. " [[" .. attr_year .. mda[2] .. "]]"
end
elseif com.isEmpty(date_array[3]) then
-- Datestring contained one "/"
mn = kal.month_names[tonumber(date_array[2])]
return mn .. " [[" .. attr_year .. date_array[1] .. "]]"
else
-- Dateformat should be YYYY/MM/DD or YYYY-MM-DD
mn = kal.month_names[tonumber(date_array[2])]
date_array[3] = date_array[3]:gsub('0*', '', 1)
return "[[" .. attr_day .. date_array[3] .. ". " .. mn .. "]]" ..
" [[" .. attr_year .. date_array[1] .. "]]"
end
end
function p.linkFormDateAttrList(args)
-- wie linkFormDate, aber zu setzende Attribute werden in Attribute-Liste eingetragen
-- Kommandozeile zum Debuggen:
-- attr_list={}; print(p.linkFormDateAttrList{date="2026/02/10", attr_list=attr_list, attr_date="Datum", attr_day="Tag", attr_year="Jahr"}); mw.logObject(attr_list)
-- attr_list={}; print(p.linkFormDateAttrList{date="2026-02-10", attr_list=attr_list, attr_date="Datum", attr_day="Tag", attr_year="Jahr"}); mw.logObject(attr_list)
-- attr_list={}; print(p.linkFormDateAttrList{date="2026", attr_list=attr_list, attr_date="Datum", attr_day="Tag", attr_year="Jahr"}); mw.logObject(attr_list)
-- attr_list={}; print(p.linkFormDateAttrList{date="April 2026", attr_list=attr_list, attr_date="Datum", attr_day="Tag", attr_year="Jahr"}); mw.logObject(attr_list)
-- attr_list={}; print(p.linkFormDateAttrList{date="2026/02", attr_list=attr_list, attr_date="Datum", attr_day="Tag", attr_year="Jahr"}); mw.logObject(attr_list)
local t = ""
-- date zerteilen
local date_array
if string.find(args.date, "/") ~= nil then -- regular case YYYY/MM/DD
date_array = str.split(args.date, "/")
else -- ISO-P case YYYY-MM-DD
date_array = str.split(args.date, "-")
end
-- Fälle unterscheiden
local day, month, year
if com.isEmpty(date_array[2]) then -- "2026" oder "April 2026"
-- When datestring contained no "/" => only year
if com.isInteger(date_array[1]) then
-- When dateformat is just YYYY
year = date_array[1]
t = "[[" .. year .. "]]"
else
-- Dateformat is <monthname> YYYY
local mda = str.split(date_array[1])
year = mda[2]
t = mda[1] .. " [[" .. year .. "]]"
end
elseif com.isEmpty(date_array[3]) then -- "2026/02"
-- Datestring contained one "/"
month = kal.month_names[tonumber(date_array[2])]
year = date_array[1]
t = month .. " [[" .. year .. "]]"
else
-- Dateformat should be YYYY/MM/DD or YYYY-MM-DD
month = kal.month_names[tonumber(date_array[2])]
date_array[3] = date_array[3]:gsub('0*', '', 1)
day = date_array[3] .. ". " .. month
year = date_array[1]
t = "[[" .. day .. "]]" .. " [[" .. year .. "]]"
end
-- Werte in Attributeliste eintragen. Bei nil wird nix eingetragen
smw.addAttrToList(args.attr_list, args.attr_date, args.date)
smw.addAttrToList(args.attr_list, args.attr_date .. "Lfd", t)
smw.addAttrToList(args.attr_list, args.attr_day, day)
smw.addAttrToList(args.attr_list, args.attr_year, year)
return t
end
function p.FormatDate(frame)
-- #invoke wrapper
return p.formatDate(frame.args[1])
end
function p.formatDate(date)
local date_array = str.split(date, " ")
local day
if com.isEmpty(date_array[2]) then
-- When datestring contained no " ", thus is year
return "[[" .. date_array[1] .. "]]"
elseif com.isEmpty(date_array[3]) then
-- When datestring contains monthname and year
return date_array[1] .. " [[" .. date_array[2] .. "]]"
else
-- When datestring contains day, monthname and year
day = string.gsub(date_array[1], "%.", "")
return "[[" .. day .. ". " .. date_array[2] .. "]] " ..
"[[" .. date_array[3] .. "]]"
end
end
function p.HumanToFormDate(frame)
-- #invoke wrapper
return p.humanToFormDate(frame.args[1])
end
function p.humanToFormDate(date)
mw.log("p.humanToFormDate(date)")
mw.logObject(date)
-- Converts a human date (3. Februar 1955) to 1955/02/03, like SMW needs
local date_array=str.split(date, " ")
local day
local mnr -- monthnr
if com.isEmpty(date_array[2]) then
-- When datestring contained no " ", thus is year
return date_array[1]
elseif com.isEmpty(date_array[3]) then
-- When datestring contains monthname and year
return date_array[1].." "..date_array[2]
else
day = string.gsub(date_array[1], "%.", "")
day = string.format("%02d", day)
mnr = kal.month_numbers[date_array[2]]
mnr = string.format("%02d", mnr)
return date_array[3] .. "/" .. mnr .. "/" .. day
end
end
return p