Modul:Common: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
| Zeile 16: | Zeile 16: | ||
local args = frame.args | local args = frame.args | ||
local title = mw.title.getCurrentTitle().text | local title = mw.title.getCurrentTitle().text | ||
local tag, monat = | local tag, monat = p.ist_jahrestag(title) | ||
if tag and monat then | if tag and monat then | ||
| Zeile 25: | Zeile 25: | ||
end | end | ||
function | function p.ist_jahrestag(s) | ||
s = s or "" | s = s or "" | ||
-- Prüfe auf ein-/zweistellige Zahl durch Punkt gefolgt, opt. Leerzeichen | -- Prüfe auf ein-/zweistellige Zahl durch Punkt gefolgt, opt. Leerzeichen | ||
| Zeile 35: | Zeile 35: | ||
local title = mw.title.getCurrentTitle().text | local title = mw.title.getCurrentTitle().text | ||
if | if p.ist_jahreszahl(title) then | ||
return args[1] or "true" | return args[1] or "true" | ||
else | else | ||
| Zeile 42: | Zeile 42: | ||
end | end | ||
function | function p.ist_jahreszahl(s) | ||
s = s or "" | s = s or "" | ||
-- Prüfe auf Formate wie: 2024, -44, 44 v. Chr., 800 n. Chr. | -- Prüfe auf Formate wie: 2024, -44, 44 v. Chr., 800 n. Chr. | ||
| Zeile 60: | Zeile 60: | ||
end | end | ||
function getMonthList() | function p.getMonthList() | ||
-- Returns a numbered List of all monthnames | -- Returns a numbered List of all monthnames | ||
return { | return { | ||
| Zeile 77: | Zeile 77: | ||
end | end | ||
function getMonthnr(name) | function p.getMonthnr(name) | ||
-- Returns the number of the given monthname | -- Returns the number of the given monthname | ||
local months = getMonthList() | local months = getMonthList() | ||
| Zeile 91: | Zeile 91: | ||
end | end | ||
function len(t) | function p.len(t) | ||
-- Überprüfe, ob es ein String ist | -- Überprüfe, ob es ein String ist | ||
if type(t) == "string" then | if type(t) == "string" then | ||
| Zeile 110: | Zeile 110: | ||
return nil -- Falls der Typ nicht unterstützt wird | return nil -- Falls der Typ nicht unterstützt wird | ||
end | end | ||
end | end | ||
| Zeile 126: | Zeile 116: | ||
end | end | ||
function get_key_for_value( t, value ) | function p.get_key_for_value( t, value ) | ||
for k, v in pairs(t) do | for k, v in pairs(t) do | ||
if v==value then return k end | if v==value then return k end | ||
| Zeile 133: | Zeile 123: | ||
end | end | ||
function | function p.merge_arrays(t1, t2) | ||
-- merge tables that are arrays: {1,2,3} and {3,4,5} | -- merge tables that are arrays: {1,2,3} and {3,4,5} | ||
local result = {} | local result = {} | ||
| Zeile 163: | Zeile 135: | ||
end | end | ||
function merge_tables(t1, t2) | function p.merge_tables(t1, t2) | ||
-- merge tables that are key-value: {a=1, b=2} and {c=3, d=4} | -- merge tables that are key-value: {a=1, b=2} and {c=3, d=4} | ||
local result={} | local result={} | ||
| Zeile 173: | Zeile 145: | ||
end | end | ||
return result | return result | ||
end | end | ||
| Zeile 196: | Zeile 156: | ||
end | end | ||
function tableToString(tbl, indent) | function p.tableToString(tbl, indent) | ||
-- Prints a LUA-Table as string. Very useful if you want to see whats inside | -- Prints a LUA-Table as string. Very useful if you want to see whats inside | ||
indent = indent or 0 | indent = indent or 0 | ||
Version vom 24. August 2025, 09:17 Uhr
Das Commons-Modul ist ein reines Import-Modul, welches immer wieder kehrende Funktionen beinhaltet, die über das Ganze Projekt hinweg immer wieder gebraucht werden.
istJahrestag()
Überprüft den Namen des beinhaltenden Artikels auf:
- mit 1 oder 2 Ziffern beginnt (
%d%d?) - gefolgt ist von einem Punkt (
%.) - optionalem Leerzeichen (
%s*), - und einem Monatsnamen (
%a+= Buchstaben).
Wenn das zutreffend ist, wird das erste Argument zurückgegeben. Wenn nicht, wird das zweite Argument zurückgegeben. Sind keine Argumente gegeben, wird true oder "" zurückgegeben.
istJahreszahl()
Überprüft den Namen des beinhaltenden Artikels auf:
- Ist der Artikelname eine Ganzzahl, positiv oder negativ? (
^%-?%d+$) - Oder ist der Artikelname eine positive Ganzzahl, gefolgt von "v. Chr." oder "n. Chr." (
^%d+%s+[vn]%.%s+Chr%.$)
Wenn das zutreffend ist, wird das erste Argument zurückgegeben. Wenn nicht, wird das zweite Argument zurückgegeben. Sind keine Argumente gegeben, wird "" oder true zurückgegeben.
shallowcopy()
Erzeugt eine echte Kopie einer Tabelle.
TemplateTranscludeWithArgs()
Diese Funktion erlaubt es einer Vorlage, eine beliebige andere Vorlage aufzurufen und dabei alle Parameter (frame) implizit zu vererben. Zusätzlich können dabei weitere Parameter (dem frame) hinzugefügt werden.
Beispiele
Anmerkung: Die Vorlage:TemplateTranscludeWithArgsTest1 Vorlage:TemplateTranscludeWithArgsTest2 dienen nur der Anzeige, mit welchen Parametern es aufgerufen wurde (verwendet print_template_args() von Modul:Development).
{{#invoke:{{#replace:{{PAGENAME}}|/Doku|}}|TemplateTranscludeWithArgs|TemplateTranscludeWithArgsTest1|22|33|44=44|Test=55}}ergibt folgende Vorlagen-Einbettung:Skriptfehler: Die Funktion „TemplateTranscludeWithArgs“ ist nicht vorhanden.- Der Aufruf von
{{#invoke:{{#replace:{{PAGENAME}}|/Doku|}}|TemplateTranscludeWithArgs|TemplateTranscludeWithArgsTest1|22|33|44=44|Test=55}}mit zuvor gesetzten|a=aaa|B=BbBergibt folgende Vorlagen-Einbettung:Skriptfehler: Die Funktion „TemplateTranscludeWithArgs“ ist nicht vorhanden.
isTrue()
Testet String auf True-Werte verschiedenster Schreibweisen.
returnStringCheck()
Setzt Attribut:LuaReturnLength und gibt Kategorie:Lua-String-Länge problematisch zurück, wenn String-Länge potenziell problematische Größe erreicht. Kann direkt vor ein return einer obersten Lua-Funktion eingefügt werden, die String an ein #invoke: rückgibt.
Unterseiten
local p = {}
function p.AttributeTable(args)
-- Draws a simple Table that contains all arguments that are fed from the
-- template to the scribunto-model. For debugging only!
local t='<table class="wikitable">'
for i, v in pairs(args) do
t = t .. '<tr><td>[[Attribut:' .. i .. '|' .. i .. ']]</td>' ..
'<td>' .. v .. '</td></tr>'
end
t = t .. '</table>'
return t
end
function p.istJahrestag(frame)
local args = frame.args
local title = mw.title.getCurrentTitle().text
local tag, monat = p.ist_jahrestag(title)
if tag and monat then
return frame.args[1] or "true"
else
return frame.args[2] or ""
end
end
function p.ist_jahrestag(s)
s = s or ""
-- Prüfe auf ein-/zweistellige Zahl durch Punkt gefolgt, opt. Leerzeichen
return s:match("^(%d%d?)%.%s*(%a+)$")
end
function p.istJahreszahl(frame)
local args = frame.args
local title = mw.title.getCurrentTitle().text
if p.ist_jahreszahl(title) then
return args[1] or "true"
else
return args[2] or ""
end
end
function p.ist_jahreszahl(s)
s = s or ""
-- Prüfe auf Formate wie: 2024, -44, 44 v. Chr., 800 n. Chr.
return s:match("^%-?%d+$") or s:match("^%d+%s+[vn]%.%s+Chr%.$")
end
function p.getPageName(frame)
-- This is for unlinking semantic attributes with datatype site.
local p = frame.args[1] or ""
-- Throw away all text after |
local t = mw.ustring.match(p, "([^|]+)")
-- Throw away everything before [[:
t = mw.ustring.match(t, "%[%[:(.+)")
-- Next line was to check, what that span of subobjects does
--t = '<span class="smw-subobject-entity">'..t..'</span>'
return t
end
function p.getMonthList()
-- Returns a numbered List of all monthnames
return {
[1] = "Januar",
[2] = "Februar",
[3] = "März",
[4] = "April",
[5] = "Mai",
[6] = "Juni",
[7] = "Juli",
[8] = "August",
[9] = "September",
[10] = "Oktober",
[11] = "November",
[12] = "Dezember"}
end
function p.getMonthnr(name)
-- Returns the number of the given monthname
local months = getMonthList()
for nr, mn in pairs(months) do
if mn == name then
return nr
end
end
end
function p.isEmpty(a)
return a == '' or a == nil
end
function p.len(t)
-- Überprüfe, ob es ein String ist
if type(t) == "string" then
local count = 0
-- Zähle jedes Zeichen im String
for _ in string.gmatch(t, ".") do
count = count + 1
end
return count
-- Überprüfe, ob es eine Tabelle ist
elseif type(t) == "table" then
local count = 0
for _ in pairs(t) do
count = count + 1
end
return count
else
return nil -- Falls der Typ nicht unterstützt wird
end
end
function p.isInteger(str)
return not (str == "" or str:find("%D"))
end
function p.get_key_for_value( t, value )
for k, v in pairs(t) do
if v==value then return k end
end
return nil
end
function p.merge_arrays(t1, t2)
-- merge tables that are arrays: {1,2,3} and {3,4,5}
local result = {}
for i = 1, #t1 do
table.insert(result, t1[i])
end
for i = 1, #t2 do
table.insert(result, t2[i])
end
return result
end
function p.merge_tables(t1, t2)
-- merge tables that are key-value: {a=1, b=2} and {c=3, d=4}
local result={}
for k, v in pairs(t1) do
result[k] = v
end
for k, v in pairs(t2) do
result[k] = v
end
return result
end
function p.spaces(frame)
local n = tonumber(frame.args[1])
local s = ""
for i=0, n do
s = s .. ' '
end
return s
end
function p.tableToString(tbl, indent)
-- Prints a LUA-Table as string. Very useful if you want to see whats inside
indent = indent or 0
local toprint = string.rep(" ", indent) .. "{\n"
indent = indent + 2
for k, v in pairs(tbl) do
toprint = toprint .. string.rep(" ", indent)
if type(k) == "number" then
toprint = toprint .. "[" .. k .. "] = "
elseif type(k) == "string" then
toprint = toprint .. k .. " = "
end
if type(v) == "number" then
toprint = toprint .. v .. ",\n"
elseif type(v) == "string" then
toprint = toprint .. "\"" .. v .. "\",\n"
elseif type(v) == "table" then
toprint = toprint .. tableToString(v, indent + 2) .. ",\n"
else
toprint = toprint .. "\"" .. tostring(v) .. "\",\n"
end
end
toprint = toprint .. string.rep(" ", indent - 2) .. "}"
return toprint
end
function p.shallowcopy(orig)
local orig_type = type(orig)
local copy
if orig_type == 'table' then
copy = {}
for orig_key, orig_value in pairs(orig) do
copy[orig_key] = orig_value
end
else -- number, string, boolean, etc
copy = orig
end
return copy
end
return p