Module:User:Manuela/Dok
CodeDiscussionEditHistoryLinksLink count Subpages:DocumentationTestsResultsSandboxLive code All modules
Modul für Vorlagendokumentation
[edit]Dieser Modul ist zur Verwendung in Vorlagen gedacht und soll die Dokumentation von Vorlagen so weit wie möglich automatisieren.
Innerhalb der Vorlage wird der erzeugende Wikitext angezeigt (mit gewissen Einschränkungen, die in XML-Notation geschriebene Tags und dadurch erzeugte Strip Markers betreffen), sodass man den Inhalt der Vorlage analysieren kann, ohne die Bearbeiten-Seite aufrufen zu müssen.
Die eigentliche Dokumentation wird von einer Unterseite der Vorlage eingebunden, die standardmäßig doc
genannt wird, dieser Wert kann mit dem Paramter doc
geändert werden. Wenn ich nachfolgend von der Dokumentationsseite
rede, ist diese Unterseite gemeint. Wird keine Dokumentationsseite gewünscht oder gebraucht, kann das Einblenden der Links zu Anlegen der Dokumentationsseite mit der Angabe doc=none
unterdrückt werden, es wird dann nur der reine Vorlageninhalt angezeigt.
Die Vorlagendokumentation kommt ohne zusätzliche Vorlagen, Module oder sonstige Wiki-Elemente aus. Einzige Ausnahme sind zwei Icons im PNG-Format, die vorhanden sein sollten: und , wie diese konkrekt aussehen sollen, bleibt dir überlassen.
In die Dokumentationsseite können Anwendungsbeispiele der Vorlage eingebunden werden, die sich beim Ändern der Vorlage automatisch aktualisieren. Auf der Vorlagenseite werden diese Beispiele angezeigt, sodass die Vorlage zugleich die Auswirkungen anzeigt. Ich empfehle, die Vorlage so zu gestalten, dass beim Fehlen von Eingabeparametern eine sinnvolle Ausgabe erzeugt wird.
Die Dokumentationsseite besteht aus mehreren Abschnitten. Zunächst wird die Wirkungsweise der Vorlage erklärt, anschließend wird eine Übersichtstabelle mit den Parametern generiert sowie eine Kopiervorlage mit einer Auflistung aller Parameter. Danach folgen Anwendungsbeispiele, der Wikicode der Vorlage sowie Links zur Vorlagenverwendung und -unterseiten.
DAs Anlegen einer Preloadseite für die Dokumentation erleichtert die Erstellung der Dokumentationsseite, ist aber nicht zwingend erforderlich.
Einbindung in die Vorlage
[edit]Das Einbinden des nachfolgenden Codes erzeugt eine automatisierte Vorlagendokumentation.
{{#invoke:Dok|doc}}
mit mehr Parametern:
{{#invoke:Dok|doc|doc=none|preload=|cat=|show=1}}
- Parameterliste
Name | Beschreibung | Standard | Status | |
---|---|---|---|---|
vorlage | Name der Vorlage | aufrufende Seite | optional | |
preload | Name des Vorlagenmusters für die Neuerstellung der Dokumentationsseite | Documentation/preload-doc | optional | |
doc | Name der Unterseite, die die Dokumentation enthält | doc | optional | |
doc=none wenn keine Dokumentationsunterseite gewünscht/gebraucht wird | ||||
cat | Kategorie, in die die Vorlage eingeordnet wird | Vorlagen | optional | |
alternativ: kat, kategorie (in dieser Reihenfolge) | ||||
nocat | wenn keine automatische Kategorisierung erfolgen soll | false | optional | |
alternativ: nokat | ||||
show | wenn die Vorlage nicht verborgen wird, show=1 | false | optional | |
alternativ: zeigen=1 |
Einbindung in die Dokumentationsunterseite
[edit]In die passend benannte Unterseite der Dokumentation (Parameter doc
) folgenden Code einfügen:
{{#invoke:Dok|dokuseite}} <onlyinclude> {{#invoke:User:Manuela/Dok|doku |text=erzeugt eine sinnvolle Vorlage |count=3 |rubrik= |p1=|t1=|d1=|m1=1 |... je nachdem wie viele Parameter (count) |aw1= ... Anwendungsbeispiel 1 |aw2= ... Anwendungsbeispiel 2 (derzeit bis zu 10 Stück möglich) |... weitere Parameter lt. Parameterliste }}</onlyinclude>
- Parameterliste
Name | Beschreibung | Standard | Status | |
---|---|---|---|---|
count | höchster verwendeter Index n für Parameter, es dürfen Lücken in der Numerierung vorkommen | 0 | optional | |
vorlage | Name der Vorlage | aufrufende Rootseite | optional | |
text | Beschreibungstext | sinnfreier Leertext | optional | |
trennzeichen | Trennzeichen für Vorlagenaufruf z.B. * | ; oder , | optional | |
noexpand | Indikator | false | optional | |
mit einem beliebigen Inhalt versehen, wenn der Vorlageninhalt nicht als Wikitext angezeigt werden soll | ||||
norender | Indikator, wenn die Vorlage nicht ausgeführt werden woll | false | optional | |
beide Indikatoren setzen würde wenig Sinn ergeben, ist aber möglich | ||||
omp | nur mit Parameter, omp=1 kein Aufruf ohne Parameter | leer | optional | |
rubrik | Vorlagengruppe | AlleListen | optional | |
es wird eine (parameterlose) Vorlage mit diesem Namen in die Dokumentation eingefügt (sofern sie existiert), diese kann z.B. eine automatische Kategorisierung sowie eine Liste aller Vorlagen in dieser Gruppe enthalten | ||||
aw1 | Anwendungsbeispiel 1; aw1=name=bumsti, familienname=muster, plz=4711 | leer | optional | |
wird ausgeführt als {{vorlage|name=bumsti|familienname=muster|plz=4711}} | ||||
das Trennzeichen wird in das magische Zeichen | umgewandelt und die Vorlage entsprechend dieser Eingabe aufgerufen, dadurch ist weitgehende Flexibiliät möglich; aw1, aw2, ... , aw10 derzeit implementiert; | innerhalb von Parametern müssen als ! dargestellt werden; im Raw-Format: „|“ als „!“, „{{“ als „{“ und „}}“ als „}“ | ||||
pn | Parameter n, n kann eine beliebige ganze Zahl sein | optional | ||
tn | Beschreibung des Parameters n, alternativ: descn | Beschreibung fehlt | optional | |
dn | Voreinstellung des Parameters n, alternativ: defn | leer | optional | |
mn | Parameter n erforderlich: mn=1, alternativ: mdtn | optional | optional | |
fn | Fortsetzungszeile zur Parameterbeschreibung, alternativ: fortn | leer | optional | |
gn | 2. Fortsetzungszeile zur Parameterbeschreibung, alternativ: gortn | leer | optional | |
expandn | mit expandn/noexpandn kann expand erwungen/unterdrückt werden | leer | optional | |
rendern | mit rendern/norendern kann render erwungen/unterdrückt werden | leer | optional | |
rawn | Parameterinhalt als komplette Vorlage übernehmen | leer | optional | |
Doppelklammern müssen einfach geschrieben werden | ||||
das Pipe-Zeichen | muss durch Rufzeichen ersetzt werden, sonst wird die Vorlage zu früh ausgeführt | ||||
klappbar | Indikator wenn Vorlageninhalt eingeklappt können werden soll | false | optional | |
tabwidth | Gesamtbreite der Parametertabelle | 80% | optional | |
parmwidth | Breite der Namensspalte | 14% | optional | |
descwidth | Breite der Beschreibungsspalte | 50% | optional | |
defwidth | Breite der Spalte mit der Voreinstellung | 25% | optional | |
mandwidth | Breite der Statusspalte (optional/erforderlich) | 16% | optional |
Vorschlag für die Preload-Seite
[edit]Der Name der Vorlagenseite (die durch die Vereinfachung per Lua beinahe schon überflüssig geworden ist) für die Dokumentationsunterseite kann per Parameter gewählt werden und lautet standardmäßig [[Template:Documentation/preload-doc]]. Nachfolgend ein Vorschlag für eine mögliche Vorbelegung.
Vorlage für die Vorlagendokumentations-Unterseite Vorlage:Documentation/preload-doc
<includeonly><onlyinclude>
{{#invoke:User:Manuela/Dok|dokuseite}}
<only<includeonly/>include>{{#invoke:Dok|doku
<!-- |vorlage={{subst:BASEPAGENAME}} sollte automatisch eruiert werden-->
|p1=1|t1=|d1=|m1=|f1=
|p2=2|t2=|d2=|m2=|f2=
|count=
|omp=
|text=erzeugt
|aw1=parameter wie in der Liste angeführt getrennt durch , oder ;
|rubrik=AlleListen
|tabwidth=
|descwidth=
|namewidth=
|defwidth=
|mandwidth=
|norender=
|noexpand=}}
</only<noinclude></noinclude>include></onlyinclude></includeonly>
<includeonly><onlyinclude>[[Category:Dokumentation]]</onlyinclude></includeonly>
{{#invoke:Dok|showme}}
Code
local p = {} -- p stands for package
local ruler = '<hr style="background-color:#b3b7ff; clear:both; height:.7ex; margin:1em 0;" />'
--local template = mw.site.namespaces.Template.name .. ':'
local anzeige = '<div style="background-color: #aaa;width:90%; border-radius: 1em; box-shadow: 0.1em 0.1em 0.5em rgba(0,0,0,0.75);;padding:0.5em;"><div style="background-color: #fff;padding:1em; border-radius: 0.5em;"><code style="white-space:pre-wrap">'
local anzeige_ = '</code></div></div>'
function p.doc(frame)
-- dieser Modul ersetzt die Vorlage documentation
-- und ist abwärtskompatibel, d.h. alte bestehende Dokumentationsseiten werden eingebunden
-- wenn die Dokumentationsunterseite existiert, wird sie eingebunden
-- wenn nicht, wird ein Hinweis mit entsprechender Input-Box erzeugt
local ns = frame.args.ns or mw.title.getCurrentTitle().nsText -- or mw.site.namespaces.Template.name
local vorlage = frame.args.vorlage or mw.title.getCurrentTitle().text
local template = ns .. ':' -- Namespace der aufrufenden Vorlage inklusive Doppelpunkt
local doc = frame.args.doc or 'doc' --- Möglichkeit die Dokumentationsunterseite anders zu benennen
local preload = frame.args.preload or template .. 'Documentation/preload-doc'
local cat = frame.args.cat or frame.args.kat or frame.args.kategorie or 'Vorlagen'
local nocat = frame.args.nocat or frame.args.nokat or frame.args.keinekat or frame.args.ns -- wenn anderer Namensraum, dann nicht kategorisieren
local hidden = not(frame.args.show or frame.args.zeigen) -- Vorlage ist verborgen
local _vorlage = template .. vorlage
local __vorlage = _vorlage
local dievorlage = p.gibts(vorlage,ns)
-- wenn die zu dokumentierende Vorlage nicht existiert, dann Programm beenden
if not dievorlage then return "Die Vorlage " .. vorlage .. " existiert nicht" end
if ns == mw.site.namespaces.Template.name then -- im Vorlagennamensraum ohne NS-Präfix
__vorlage = vorlage
end
local dok = vorlage .. '/' .. doc -- Name ohne Namespace
local _doc = template .. dok -- mit Namespaceprefix
local _, mycat, result = '', '', ''
local verborgen = (hidden and '<div>Die Vorlage <code style="background-color:yellow;padding:0 0.5em">' .. __vorlage .. '</code> ist nur auf eingebundenen Seiten voll sichtbar und auf dieser Seite versteckt.</div>' ) or ''
local duhast = 'Du hast die Vorlagendokumentation mit dem Befehl <code>{{#invoke:Dok|doc|...}}</code> eingebunden und willst die Dokumentation von der Unterseite <code>' .. dok .. '</code> einbinden. Über mögliche Parameter und ihre Verwendung kannst du [[Modul:User:Manuela/Dok/Doku| in der Dokumentation zum aufgerufenen Modul <i>Dok</i> nachlesen.]]'
local diedokumentationsunterseite = '<div class="messagebox" style="margin-top:1em; clear: both; border: 2px dotted #666666; padding: 0.6em; background-color: #ccffff; text-align: center; ">Die Dokumentationsunterseite <code>{{[[' .. _doc .. '|' .. dok..']]}}</code> ist nicht vorhanden.</div>'
local damitdie = 'Damit die Dokumentation wie vorgesehen funktioniert, ist es erforderlich, dass du für deine Vorlage <code>{{[[' .. _vorlage .. '|' .. __vorlage .. ']]}}</code> die Unterseite <code>{{[[' .. _doc .. '|' .. dok..']]}}</code> anlegst.\nDas kannst du mit der Eingabebox unterhalb dieses Text durchführen, dadurch wird eine vorausgefüllte Seite basierend auf der Seite <code>{{[[' .. preload .. ']]}}</code> erzeugt. Eine leere Seite kannst du mit dem (vermutlich) roten Link anlegen.\n\n'
local input = '<div style="float:left" class="neu"><inputbox>\ntype=create\nbreak=no\nwidth=40em\nbuttonlabel=Dokumentationsunterseite anlegen\ndefault=' .. _doc .. '\npreload=' .. preload .. '\n</inputbox></div><div style="clear:both;"></div>'
local inputbox = frame:preprocess('\n\n' .. input)
local subpages = frame:preprocess('\n==Eine Liste der bereits vorhandenen Unterseiten==\n{{:Special:PrefixIndex/' .. _vorlage .. '/}}')
local docu_info = '{| class="plainlinks" id="Dokumentation.Info" style="border-collapse:collapse; margin:2px 0;"\n' .. '| class="noviewer" style="padding:5px; vertical-align:top; width:40px;" | [[Datei:Info-Icon.png|30px]]\n' .. '| style="padding:0; width:100%;" |<ul>' .. '{{Special:PrefixIndex/' .. template .. vorlage .. '/}}'
local dokgibts = p.gibts(dok,ns)
if dokgibts then -- Unterseite doc gibts
local doku, layout, bearbeiten
local linkliste = frame:preprocess('[{{fullurl:Spezial:Linkliste/' .. _vorlage .. '|hideredirs=1&hidelinks=1}} Verwendungen]') .. ' dieser Vorlage'
local Unterseiten = frame:preprocess('[[Special:Prefixindex/' .. _vorlage .. '/|Liste der Unterseiten]]')
doku = frame:expandTemplate{ title = _doc, args = {} }
layout = p.layout(frame)
bearbeiten = p.bearbeiten(_vorlage)
-- Link zu Verwendungen der Vorlage und Unterseiten (Parameter zum Einbinden vorsehen?)
local docu_info = frame:preprocess('<references />') .. ruler .. '\n{| class="plainlinks" id="Dokumentation.Info" style="border-collapse:collapse; margin:2px 0;"\n' .. '| class="noviewer" style="padding:5px; vertical-align:top; width:40px;" | [[Datei:Info-Icon.png|30px]]\n' .. '| style="padding:0; width:100%;" |<ul><li>' .. Unterseiten .. '</li><li>Diese Dokumentation befindet sich [[' .. _doc .. '|auf einer eingebundenen Unterseite]] <span style="font-size:85%; margin-left:1em;">[[' .. tostring(mw.uri.fullUrl( _doc, 'action=edit')) .. ' Bearbeiten]]</span>.</li><li>' .. linkliste .. '</li></ul>\n|}'
result = bearbeiten .. verborgen .. ruler .. layout .. doku .. docu_info
else
local mytitel = frame:preprocess('\n==Vorlageninhalt==\n')
local ShowMe = p.wrap(p.Inhalt(vorlage,ns))
if doc == 'none' then -- keine Dokumentationsunterseite gewünscht
duhast = ''
diedokumentationsunterseite = ''
damitdie = ''
inputbox = ''
end
result = duhast .. diedokumentationsunterseite .. damitdie .. inputbox .. mytitel .. ShowMe .. subpages
end -- Unterseite doc gibts
-- Kategorisieren tun wir hier nicht
if not nocat then -- die Vorlage soll kategorisiert werden
mycat = '[[category:' .. cat ..']]'
mycat = ''
end
return result .. mycat
end
function p.bearbeiten(vorlage)
-- dieser Modul erzeugt ein Kästchen mit punktiertem Rahmen
-- mit Links zu verschiedenen Anzeigemöglichkeiten der Vorlage, bearbeiten, Versionsgeschichte etc.
local frame = mw.getCurrentFrame()
local _vorlage = vorlage
local divspan = '<div style="margin: 0.5em;border: 2px dotted #666666; padding: 0.5em;display:inline-block"><span class="mw-editsection plainlinks" style="padding:0em 1em 0em 0em;" >'
local edit = mw.uri.fullUrl( _vorlage, 'action=edit' )
local history = mw.uri.fullUrl( _vorlage, 'action=history' )
local purge = mw.uri.fullUrl( _vorlage, 'action=purge' )
local qqx = mw.uri.fullUrl( _vorlage, 'uselang=qqx' )
local info = mw.uri.fullUrl( _vorlage, 'action=info' )
local result = '[' .. tostring(edit) .. ' Bearbeiten] · [' .. tostring(history) .. ' Versionen] · [' .. tostring(purge) .. ' Cache leeren] · [' .. tostring(qqx) .. ' Messages] · [' .. tostring(info) .. ' Seiteninformation]'
result = divspan .. result .. '</span></div>\n'
return result
end
function p.layout(frame)
-- dieser Modul erzeugt das blaue Hinweiskästchen mit der Überschrift "Vorlagendokumentation"
-- dem Hinweisicon File:Template-info.png
-- und den Links zum Bearbeiten der Dokumentationsunterseite
local frame = mw.getCurrentFrame()
--local vorlage = frame.args.vorlage or mw.title.getCurrentTitle().rootText
local doc = frame.args.doc or 'doc' --- Möglichkeit die Dokumentationsunterseite umzubenennen
--local ns = frame.args.ns or mw.site.namespaces.Template.name
local ns = frame.args.ns or mw.title.getCurrentTitle().nsText -- or mw.site.namespaces.Template.name
local vorlage = frame.args.vorlage or mw.title.getCurrentTitle().text
local template = ns .. ':'
local _vorlage = template .. vorlage
local dok = vorlage .. '/' .. doc -- Name ohne Namespace
local _doc = template .. dok -- mit Namespaceprefix
local divspan = '<div style="margin:1em; clear: both; border: 2px dotted #666666; padding: 0.6em; background-color:#ccffff;"><div style="padding-bottom:3px; border-bottom:1px solid #aaa; margin-bottom:1em;"><span style="font-size:150%">[[File:Test Template Info-Icon.svg|50px]] Vorlagendokumentation</span><span class="mw-editsection plainlinks">'
local edit = mw.uri.fullUrl( _doc, 'action=edit' )
local history = mw.uri.fullUrl( _doc, 'action=history' )
local purge = mw.uri.fullUrl( _doc, 'action=purge' )
local info = mw.uri.fullUrl( _doc, 'action=info' )
local result = ' [' .. tostring(edit) .. ' Bearbeiten] · [' .. tostring(history) .. ' Versionen] · [' .. tostring(purge) .. ' Cache leeren] · [' .. tostring(info) .. ' Seiteninformation]'
result = divspan .. result .. '</span></div>\n\n'
local small = "''<small>Diese [[Module:Dok/Doku|Vorlagendokumentation]] wird von der Seite [[" .. _doc .. "]] eingebunden.</small>''</div>"
return result .. small
end
function p.ptab(frame)
-- erstellen der Parametertabelle einer Vorlage
-- einziger Unterschied zum Unterprogramm: das 2. Ergebnis wird verworfen
local _
_ = p.tabelle(frame)
return _
end
function p.dokuseite(frame)
-- dieser Modul wird in die Dokumentationsunterseite eingebunden
-- aber nicht in die Vorlage inkludiert
-- erzeugt einen Link zur Vorlage und ein Bearbeiten-Kästchen
-- und kategorisiert die Seite in die Kategorie Dokumentation
local ns = frame.args.ns or mw.title.getCurrentTitle().nsText -- or mw.site.namespaces.Template.name
local _vorlage = frame.args.vorlage or mw.title.getCurrentTitle().text
local vorlage = ns .. ':' .. _vorlage
local dok = frame.args.dok or 'doc'
local _dok = vorlage .. '/' .. dok
local rohhtml = '<table style="border-style:solid; margin-bottom:2px; margin-top:2px; border-color:MediumSlateBlue"><tr><td>[[File:Info-Icon.png|30px]]</td><td style="width: 100%;">Diese Seite ist die Dokumentations-Unterseite der [[' .. vorlage .. '|<b>Vorlage ' .. _vorlage .. '</b>]]</td></tr></table>'
local divspan = '<div style="margin-bottom: 0.5em;border: 2px dotted #666666; padding: 0.5em;display:inline-block"><span class="mw-editsection plainlinks" style="padding:0em 1em 0em 0em;" >'
local edit = mw.uri.fullUrl( _dok, 'action=edit' )
local history = mw.uri.fullUrl( _dok, 'action=history' )
local purge = mw.uri.fullUrl( _dok, 'action=purge' )
local qqx = mw.uri.fullUrl( _dok, 'uselang=qqx' )
local info = mw.uri.fullUrl( _dok, 'action=info' )
local editv = mw.uri.fullUrl( vorlage, 'action=edit' )
local infov = mw.uri.fullUrl( vorlage, 'action=info' )
local result = '[' .. tostring(edit) .. ' Bearbeiten] · [' .. tostring(history) .. ' Versionen] · [' .. tostring(purge) .. ' Cache leeren] · [' .. tostring(qqx) .. ' Messages] · [' .. tostring(info) .. ' Seiteninformation] · [' .. tostring(editv) .. ' Vorlage bearbeiten] · [' .. tostring(infov) .. ' Seiteninformation Vorlage]'
result = divspan .. result .. '</span></div>\n'
return result .. rohhtml -- .. ' [[category:Dokumentation]]' keine Kategorisierung
end
function p.doku(frame)
-- dieser Modul konstruiert die Dokumentationsunterseite vorlage/doc
-- Parameter mit Voreinstellungen
local count = frame.args.count or 0
local ns = frame.args.ns or mw.title.getCurrentTitle().nsText -- or mw.site.namespaces.Template.name
local vorlage = frame.args.vorlage or mw.title.getCurrentTitle().text
local erzeugt = frame.args.text or "erzeugt etwas Tolles, sonst gäbe es sie nicht."
local rubrik = frame.args.rubrik or "AlleListen"
local trnzn = string.gsub(frame.args.trennzeichen or ',;','%p', '%%%0') -- Trennzeichenliste für die Verwendungsbeispiele
local klappbar = frame.args.klappbar
local geklappt = frame.args.geklappt
-- Parameter ohne Voreinstellungen, werden nur schlagend, wenn sie angegeben werden
local expand = not frame.args.noexpand -- wenn das Expandieren unterdrückt werden soll, diesen Parameter angeben, Inhalt (derzeit) egal
local render = not frame.args.norender -- wenn das Rendern unterdrückt werden soll, z.B. wegen unerwünschter Kategorisierung
-- Variablen für Formatierung
local div_blue = '<div style="width:100%;margin-top:1em; clear: both; border: 2px solid blue; padding: 0.6em">'
local div_inlineblock = '<div><div style="display:inline-block;background:#acf;color:black;padding: 0.1em 0.8em;width:auto">'
local div_dotted = '</div></div><div style="width:95%;margin-top:1em; clear: both; border: 2px dotted #666666; padding: 0.6em">'
local ergibt_gerendert = div_inlineblock .. 'ergibt angewendet:' .. div_dotted
local ergibt_expandiert = div_inlineblock .. 'ergibt als Wikitext expandiert:' .. div_dotted
-- zusammengesetzte Texte
if ns == mw.site.namespaces.Template.name then -- Vorlage ohne "Vorlage:"
vorlage_ns = vorlage
else
vorlage_ns = ns .. ':' .. vorlage
end
local tl = '<span style="font-family:"Consolas", monospace;">{{[[' .. ns .. ':' .. vorlage .. '|' .. vorlage_ns .. ']]' .. '}}</span> '
local diese_vorlage='__NOTOC__\nDie Vorlage ' .. tl .. erzeugt
local _vorlage = '{{' .. vorlage_ns -- Vorlage mit geschweiften Klammern zu Beginn und Namespace
local _vorlage_ = _vorlage .. '}}' -- Vorlage von geschweiften Klammern umschlossen
-- lokale Parameter
local vorlagenliste, i, template,ShowMe = ''
local parametertabelle, muster, anw0, kopiervorlage = '', '', '', ''
local expanded, rendered
-- wenn die zu dokumentierende Vorlage nicht existiert, dann Programm beenden
local dievorlage = p.gibts(vorlage,ns)
if not dievorlage then return "Die Vorlage " .. vorlage .. " existiert nicht" end
ShowMe = frame:preprocess('\n==Code==\n') .. p.wrap(p.Inhalt(vorlage,ns)) -- Vorlageninhalt anzeigen
if p.gibts(rubrik) then vorlagenliste = '<div>' .. frame:expandTemplate{ title = rubrik, args = { } } .. '</div>' end
--erster Abschnitt, Beschreibung der Funktion der Vorlage
local vorlagen_intro = diese_vorlage .. vorlagenliste
--Parameterliste abarbeiten
parametertabelle, kopiervorlage = p.tabelle()
parametertabelle = frame:preprocess('\n==Parameter==\n') .. parametertabelle
kopiervorlage = frame:preprocess('\n==Kopiervorlage==\n<code>') .. _vorlage .. kopiervorlage .. "}}</code>" -- Kopiervorlage zur Dokumentationsanwendung mit Auflistung aller Parameter
-- Vorlagenanwendung mit Defaulteinstellungen
local nurmit = frame.args.omp -- Vorlage nur mit Parameter aufrufen omp=1
if not nurmit then
anw0 = frame:preprocess('\n==Anwendung==\n') .. p.anwendung(_vorlage_,render,expand,klappbar, geklappt)
end
-- Anwendungsbeispiele
-- alle Parameterwerte mit Beistrich oder Strichpunkt getrennt
-- wie im Vorlagenaufruf, nur mit einem anderen Trennzeichen
for i=1,10 do -- mehr als 10 Anwendungsbeispiele werden kaum sinnvoll sein
local u, liste, expd, rndr, ergibt, anwendung = frame.args["aw" .. i], '', '', '', ''
local diese_anwendung
if u and u~="" then -- Anwendungsbeispiel mit Index i gefunden
local raw = frame.args['raw' .. i] -- die i-te Anwendung im Rohformat ausführen
local noexpd = frame.args['noexpand' .. i]
local norndr = frame.args['norender' .. i]
local expd = frame.args['expand' .. i]
local rndr = frame.args['render' .. i]
local lrender = render
local lexpand = expand
if render then -- Indikator zum Ausführen der Vorlage lokal überschreiben
if norndr then lrender = false end
else
if rndr then lrender = true end
end
if expand then -- Indikator zum Expandieren der Vorlage lokal überschreiben
if noexpd then lexpand = false end
else
if expd then lexpand = true end
end
if raw then
local _ = u:gsub('!','|')
_ = _:gsub('{','{{')
_ = _:gsub('}','}}')
diese_anwendung = _
else
liste = '|' .. string.gsub(u, '[' .. trnzn .. ']','|') .. '}}' -- Trennzeichen in senkrechte Striche umwandeln, default ist ',' oder ';', als Pattern %,%;
diese_anwendung = _vorlage .. liste
end
--if 1 then return diese_anwendung end
anwendung = p.anwendung(diese_anwendung,lrender,lexpand,klappbar, geklappt)
muster = muster .. anwendung
-- if 1 then return '<code><nowiki>anwendung ' .. anwendung .. '</nowiki></code>' end
end -- u and u~=""
end -- for i=1,10 do
return vorlagen_intro .. parametertabelle .. kopiervorlage .. anw0 .. muster .. ShowMe --vorlagen_intro .. parm_table .. anw0
end
function p.anwendung(vorlage, xender, xxpand, klappbar, geklappt)
-- dieser Modul wertet die Vorlage "vorlage" aus
-- der Parameter vorlage enthält den kompletten Aufruftext inklusiver sämtlicher Parameter
-- wie er in einer Wikiseite normalerweise auftritt
-- z.B. {{vorlagenname|parameter1=wert1|parameter2=wert2|...}}
-- das Ergebnis der ausgewerteten Vorlage wird in der lokalen Variablen "processed" gespeichert
-- anschließend werden alle Wikicode-Zeichen mittels mw.text.nowiki in HTML-Entitäten umgewandelt und in der Variablen "expanded" gespeichert
-- https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.text.nowiki
-- folgende Zeichen: '"', '&', "'", '<', '=', '>', '[', ']', '{', '|', '}'
-- weitere Ersetzungen siehe Manual
-- render und expand steuern, ob das Ergebnis der Vorlagenauswertung als expandierter Wikitext und als Vorlageneinbindung angezeigt werden soll
-- klappbar und geklappt erzeugen einklappbare Abschnitte
-- Rückgabewert: ausgewertete Vorlage:
local frame = mw.getCurrentFrame()
local processed, class = frame:preprocess(vorlage), '>'
local expanded, gerendert, _ = '', '', ''
if klappbar or geklappt then
if klappbar then class= class .. ' class =" mw-collapsible' end
if geklappt then class = class .. ' class =" mw-collapsible mw-collapsed' end
class = class .. '">'
end
-- Variablen für die Formatierung
local div_blue = '<div style="width:100%;margin-top:1em; clear: both; border: 2px solid blue; padding: 0.6em"><code>' .. vorlage .. '</code>'
local div_inlineblock = '<div><div style="display:inline-block;background:#acf;color:black;padding: 0.1em 0.8em;width:auto">'
local div_dotted = '<div style="width:95%;margin-top:1em; clear: both; border: 2px dotted #666666; padding: 0.6em "'
local ergibt_gerendert = 'angewendet:' .. '</div></div>' .. div_dotted .. '>'
local ergibt_expandiert = div_inlineblock .. 'ergibt als Wikitext expandiert:' .. '</div></div>' .. div_dotted .. class
if not xxpand then
ergibt_gerendert= 'ergibt ' .. ergibt_gerendert
end
ergibt_gerendert= div_inlineblock .. ergibt_gerendert
expanded = '<code style="white-space: pre-wrap;">' .. mw.text.nowiki(processed) .. '</code></div>'
gerendert = processed .. '</div>'
if xxpand then _ = ergibt_expandiert .. expanded end
if xender then _ = _ .. ergibt_gerendert .. gerendert end
return div_blue .. _ .. '</div>' --'ergibt gerendert:' .. ergibt_gerendert
end
function p.tabelle(frame)
-- dieser Modul erzeugt eine Tabelle mit den Parameterwerten
-- zu jedem Parameter sollte ein Beschreibungstext angegeben werden
-- es können beliebig viele Parameter eingetragen werden: count
-- als zweiter Rückgabewert wird eine Kopiervorlage mit einer Liste aller vorhandenen Parameter übermittelt
-- weiters kann die Breite der Tabelle sowie der Spalten geändert werden
local pframe, xxx, parm_table = mw.getCurrentFrame(), '', '' --:getParent()
local count = tonumber(pframe.args.count) or 0
local tabwidth = pframe.args.tabwidth -- ändern der Breiteneinstellungen
local descwidth = pframe.args.descwidth
local namewidth = pframe.args.parmwidth
local defwidth = pframe.args.defwidth
local mandwidth = pframe.args.mandwidth
-- Konstante für Formatierung
local table_header = '<table style="width:80%;margin-left: 0;border: 0px;border-bottom: 1px solid #666;border-collapse: collapse;text-align: left;padding: 0.5em 0 0 0;box-shadow: 4px 4px 4px #ccc;"><caption style="background-color:#666; border-radius: 1em 1em 0 0;color:#666;font-family: serif;font-size: 0.4em;border:1px solid #666;padding: 0.5em 0 0 0;>x</caption><tr style="background-color: #666;color: #fff;font-size:1.2em;font-family: serif;border:1px solid #666e;padding: 0.5em 0 0 0;"><th style="width:14%;padding-left:0.5em">Name</th><th style="width:50%;" colspan="2">Beschreibung</th><th style="width:25%">Standard</th><th style="width:16%">Status</th></tr>'
local table_end ='</table>'
-- Änderungen der Tabellenbreite für die Parameterliste
if tabwidth then table_header = table_header:gsub('width:80%%', 'yidth:' .. p.string2pattern(tabwidth),1) end
if descwidth then table_header = table_header:gsub('width:50%%', 'yidth:' .. p.string2pattern(descwidth),1) end
if namewidth then table_header = table_header:gsub('width:14%%', 'yidth:' .. p.string2pattern(namewidth),1) end
if defwidth then table_header = table_header:gsub('width:25%%', 'yidth:' .. p.string2pattern(defwidth),1) end
if mandwidth then table_header = table_header:gsub('width:16%%', 'yidth:' .. p.string2pattern(mandwidth),1) end
table_header = table_header:gsub('yidth:', 'width:')
--Parameterliste abarbeiten
for i = 1,count do
local _, u, j, x, desc, def, mand, fort
j = tostring(i)
x = pframe.args["p" .. j]
if x and x ~= '' then -- es gibt einen Eintrag pi
desc = pframe.args["desc" .. j] or pframe.args["t" .. j] or 'Beschreibung fehlt' -- Parameterbeschreibung
def = pframe.args["def" .. j] or pframe.args["d" .. j] or 'leer' -- Standardeinstellung
mand = pframe.args["mdt" .. j] or pframe.args["m" .. j] -- verpflichtende Eingabe ja/nein
fort = pframe.args["fort" .. j] or pframe.args["f" .. j] -- Fortsetzungszeile der Beschreibung
gort = pframe.args["gort" .. j] or pframe.args["g" .. j] -- Fortsetzungszeile der Beschreibung
zeile = p.zeile(x, desc, def, mand, fort, gort)
parm_table = parm_table .. zeile
xxx = xxx .. '|' .. x .. '=' -- <br>' kein Zeilenumbruch in der Kopiervorlage mehr (=lästig!)
end
end -- for i = 1,count do
if count == 0 or count == "0" then -- Abschnitt Parametertabelle fertigstellen
parm_table ='<div style=\"font-weight:bold\">keine</div>'
else
parm_table = table_header .. parm_table .. table_end
end
return parm_table, xxx
end
function p.gibts(name, namespace)
local name = name
local space = namespace or mw.title.getCurrentTitle().nsText
local titel = mw.title.new(space .. ":" .. name)
if titel.exists then return titel end
return false
end
function p.Show(titel)
-- titel: muss eine Wiki-Seite sein
-- diese Funktion liefert den Inhalt der Seite zurück, wobei alle Sonderzeichen in HTML-Entitäten umgewandelt werden
-- sodass nur der Rohinhalt angezeigt wird, aber keine Inhalte geparst werden
local titel = titel
if titel.exists then
return mw.text.nowiki(titel:getContent())
else
return
end
end
function p.Inhalt(titel,ns)
-- titel: Titel einer Seite (default: übergeordnete Seite)
-- ns: Namespace (default: Namensraum der aufrufenden Seite)
local space = ns or mw.title.getCurrentTitle().nsText
local text = titel or mw.title.getCurrentTitle().baseText -- direkt übergeordnete Seite
local wseite = mw.title.new(titel, space) -- Wikiseite als title-Objekt
if wseite.exists then
return mw.text.nowiki(wseite:getContent())
else
return
end
end
function p.string2pattern(str)
return string.gsub(str, "%%", "%%%%")
end
function p.zeile(pname, beschreibung, default, optional,fort,gort)
-- erzeugt eine Tabellenzeile für die Parameterliste
local _ = ""
local pname = pname
local beschreibung = beschreibung
local default = default or "leer"
local optional = optional
if optional == nil or optional=="" then optional="optional" else optional="erforderlich" end
local teil1 = [[<tr style="background-image: linear-gradient(#f9f9f9, #e3e3e3); border:none; border-left: 1px solid #666; border-right: 1px solid #666;">
<td style="font-family: monospace;font-size:1.2em;padding-left:0.5em; border:none;">]]
local teil2 = '</td><td colspan="2" style="border:none;">'
local teil3 = '</td><td style="border:none;"><span style="color:#777; font-variant:small-caps">'
local teil4 = '</span></td><td style="border:none;">'
local teilf = '</td><td colspan="4" style="border:none;">'
local teil5 = '</td></tr>'
_ = teil1 .. pname .. teil2 .. beschreibung .. teil3 .. default .. teil4 .. optional .. teil5
if fort and fort ~="" then -- Fortsetzungszeile
_ = _ .. teil1 .. teilf .. fort .. teil5
end
if gort and gort ~="" then -- 2. Fortsetzungszeile
_ = _ .. teil1 .. teilf .. gort .. teil5
end
return _
end
function p.showme(frame)
local vorlage = frame.args.vorlage or (mw.title.getCurrentTitle().nsText .. ':' .. mw.title.getCurrentTitle().text)
local _
_ = frame:preprocess(anzeige .. vorlage .. anzeige_)
return _
end
function p.wrap(s)
return anzeige .. tostring(s) .. anzeige_
end
return p