Modul:LinkFormDatum: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
| Zeile 17: | Zeile 17: | ||
mw.smw.set({[attr_date] = date}) | mw.smw.set({[attr_date] = date}) | ||
if isEmpty(date_array[2]) then | if c.isEmpty(date_array[2]) then | ||
-- When datestring contained no "/" | -- When datestring contained no "/" | ||
if isInteger(date_array[1]) then | if p.isInteger(date_array[1]) then | ||
-- When dateformat is just YYYY | -- When dateformat is just YYYY | ||
return "[[" .. attr_year .. "::" .. date_array[1] .. "]]" | return "[[" .. attr_year .. "::" .. date_array[1] .. "]]" | ||
| Zeile 27: | Zeile 27: | ||
return mda[1] .. " [[" .. attr_year .. "::" .. mda[2] .. "]]" | return mda[1] .. " [[" .. attr_year .. "::" .. mda[2] .. "]]" | ||
end | end | ||
elseif isEmpty(date_array[3]) then | elseif c.isEmpty(date_array[3]) then | ||
-- Datestring contained one "/" | -- Datestring contained one "/" | ||
local mn = months[tonumber(date_array[2])] | local mn = months[tonumber(date_array[2])] | ||
| Zeile 47: | Zeile 47: | ||
function p.format_date(date) | function p.format_date(date) | ||
local date_array = str.split(date, " ") | local date_array = str.split(date, " ") | ||
if isEmpty(date_array[2]) then | if c.isEmpty(date_array[2]) then | ||
-- When datestring contained no " ", thus is year | -- When datestring contained no " ", thus is year | ||
return "[[" .. date_array[1] .. "]]" | return "[[" .. date_array[1] .. "]]" | ||
elseif isEmpty(date_array[3]) then | elseif c.isEmpty(date_array[3]) then | ||
-- When datestring contains monthname and year | -- When datestring contains monthname and year | ||
return date_array[1] .. " [[" .. date_array[2] .. "]]" | return date_array[1] .. " [[" .. date_array[2] .. "]]" | ||
| Zeile 69: | Zeile 69: | ||
function p.human_to_form_date(date) | function p.human_to_form_date(date) | ||
local date_array=str.split(date, " ") | local date_array=str.split(date, " ") | ||
if isEmpty(date_array[2]) then | if c.isEmpty(date_array[2]) then | ||
-- When datestring contained no " ", thus is year | -- When datestring contained no " ", thus is year | ||
return date_array[1] | return date_array[1] | ||
elseif isEmpty(date_array[3]) then | elseif c.isEmpty(date_array[3]) then | ||
-- When datestring contains monthname and year | -- When datestring contains monthname and year | ||
return date_array[1].." "..date_array[1] | return date_array[1].." "..date_array[1] | ||
Version vom 24. August 2025, 09:09 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
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 c = require( "Module:Common" )
local str = require("Modul:String")
function p.LinkFormDate(frame)
local args = frame.args
local date = args[1]
local attr_date = args[2]
local attr_day = args[3]
local attr_year = args[4]
return p.link_form_date(date, attr_date, attr_day, attr_year)
end
function p.link_form_date(date, attr_date, attr_day, attr_year)
local months=getMonthList()
local date_array=str.split(date, "/")
mw.smw.set({[attr_date] = date})
if c.isEmpty(date_array[2]) then
-- When datestring contained no "/"
if p.isInteger(date_array[1]) then
-- When dateformat is just YYYY
return "[[" .. attr_year .. "::" .. date_array[1] .. "]]"
else
-- Dateformat is <monthname> YYYY
local mda = str.split(date_array[1])
return mda[1] .. " [[" .. attr_year .. "::" .. mda[2] .. "]]"
end
elseif c.isEmpty(date_array[3]) then
-- Datestring contained one "/"
local mn = months[tonumber(date_array[2])]
return mn .. " [[" .. attr_year .. "::" .. date_array[1] .. "]]"
else
-- Dateformat should be YYYY/MM/DD
local mn = months[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.FormatDate(frame)
local args = frame.args
return p.format_date(args[1])
end
function p.format_date(date)
local date_array = str.split(date, " ")
if c.isEmpty(date_array[2]) then
-- When datestring contained no " ", thus is year
return "[[" .. date_array[1] .. "]]"
elseif c.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
local day = string.gsub(date_array[1], "%.", "")
return "[[" .. day .. ". " .. date_array[2] .. "]] " ..
"[[" .. date_array[3] .. "]]"
end
end
function p.HumanToFormDate(frame)
-- Converts a human date (3. Februar 1955) to 1955/02/03, like SMW needs
local args = frame.args
return p.human_to_form_date(args[1])
end
function p.human_to_form_date(date)
local date_array=str.split(date, " ")
if c.isEmpty(date_array[2]) then
-- When datestring contained no " ", thus is year
return date_array[1]
elseif c.isEmpty(date_array[3]) then
-- When datestring contains monthname and year
return date_array[1].." "..date_array[1]
else
local day = string.gsub(date_array[1], "%.", "")
day = string.format("%02d", day)
local mnr = getMonthnr(date_array[2])
mnr = string.format("%02d", mnr)
return date_array[2] .. "/" .. mnr .. "/" .. day
end
end
return p