User:Lilyuserin/Vorlagendokumentation

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search

Contact

Email Usertalk

This is a Wikimedia Commons user page. If you find this page on any site other than Wikimedia Commons, you are viewing a mirror site. Be aware that the page may be outdated, and that the user this page belongs to may have no personal affiliation with any site other than Wikimedia Commons itself. The original page is located at https://commons.wikimedia.org/wiki/User:Lilyuserin/Vorlagendokumentation.

العربية  azərbaycanca  беларуская (тарашкевіца)  български  বাংলা  čeština  Deutsch  Deutsch (Sie-Form)  English  Esperanto  español  فارسی  suomi  français  Frysk  galego  עברית  हिन्दी  magyar  հայերեն  Bahasa Indonesia  italiano  日本語  ქართული  한국어  ລາວ  македонски  മലയാളം  Bahasa Melayu  မြန်မာဘာသာ  Nederlands  polski  português  português do Brasil  русский  sicilianu  slovenščina  shqip  svenska  ไทย  Tagalog  Türkçe  українська  Tiếng Việt  简体中文  繁體中文  正體中文(臺灣)  +/−

Wikimedia Commons
Wikimedia Commons

Alle hier beschriebenen Funktionen einer Vorlagendokumentation werden von einem Lua-Modul übernehmen.

Den nachstehenden Text in die Moduldokumentation kopieren:

== Vorlagendokumentation ==
=== Einbindung in die Vorlage ===
Das Einbinden des nachfolgenden Codes erzeugt eine automatisierte Vorlagendokumentation.
<div>In die Vorlage folgenden Code einfügen:</div>
<code><nowiki>{{#invoke:Dok|doc}}</nowiki></code>
<div>Es können Parameter ergänzt werden.</div>
;Parameterliste
{{#invoke:Dok|ptab|count=6
|p1=vorlage|t1=Name der Vorlage|d1=aufrufende Seite
|p2=preload|t2=Name des Vorlagenmusters für die Neuerstellung der|f2=Dokumentationsunterseite|d2=Documentation/preload-doc
|p3=doc|t3=Name der Unterseite, die die Dokumentation enthält|d3=doc
|p4=cat|t4=Kategorie, in die die Vorlage eingeordnet wird|d4=Vorlagen|f4=alternativ: kat, kategorie (in dieser Reihenfolge)
|p5=nocat|t5=wenn keine automatische Kategorisierung erfolgen soll|d5=false|f5=alternativ: nokat
|p6=show|t6=wenn die Vorlage nicht verborgen wird, show=1|d6=false|f6=alternativ: zeigen=1
}}
=== Einbindung in die Dokumentationsunterseite ===
In die passend benannte Unterseite der Dokumentation (Parameter <code>doc</code>) folgenden Code einfügen:
<pre><nowiki>__NOTOC__
&#123;&#123;#invoke:Dok|dokuseite&#125;&#125;
<onlyinclude>
&#123;&#123;#invoke:Dok|doku
|text=erzeugt eine sinnvolle Vorlage
|count=3
|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
&#125;&#125;
</onlyinclude</nowiki>></pre>
;Parameterliste
{{#invoke:Dok|ptab|count=19
|tabwidth=95%|descwidth=60%|defwidth=20%|mandwidth=20%
|p1=count|t1=Anzahl der Parameter|d1=0
|p2=vorlage|t2=Name der Vorlage|d2=aufrufende Rootseite
|p3=text|t3=Beschreibungstext|d3=sinnfreier Leertext
|p4=trennzeichen|t4=Trennzeichen für Vorlagenaufruf z.B. *|d4=; oder ,
|p7=klappbar|t7=Indikator wenn Vorlageninhalt eingeklappt können werden soll|d7=false
|p5=noexpand|t5=Indikator|f5=mit einem beliebigen Inhalt versehen, wenn der Vorlageninhalt nicht als Wikitext angezeigt werden soll|d5=false
|p6=norender|t6=Indikator, wenn die Vorlage nicht ausgeführt werden woll|d6=false|f6=beide Indikatoren setzen würde wenig Sinn ergeben, ist aber möglich
|p8=rubrik|t8=Vorlagengruppe|d8=AlleListen|f8=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
|p10=aw1|t10=Anwendungsbeispiel 1; <code>aw1=name=bumsti, familienname=muster, plz=4711</code>|f10=wird ausgeführt als <code>&#123;&#123;vorlage{{!}}name=bumsti{{!}}familienname=muster{{!}}plz=4711&#125;&#125;</code>
|g10=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
|p15=tabwidth|t15=Gesamtbreite der Parametertabelle|d15=80%
|p17=descwidth|t17=Breite der Beschreibungsspalte|d17=50%
|p16=parmwidth|t16=Breite der Namensspalte|d16=14%
|p18=defwidth|t18=Breite der Spalte mit der Voreinstellung|d18=25%
|p19=mandwidth|t19=Breite der Statusspalte (optional/erforderlich)|d19=16%
}}

Vorlagendokumentationsmodul Dok

[edit]
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">{{msgnw:'

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 doc     = frame.args.doc or 'doc' --- Möglichkeit die Dokumentationsunterseite anders zu benennen
	local preload = frame.args.preload or template .. 'Documentation/preload-doc'
	local vorlage = frame.args.vorlage or mw.title.getCurrentTitle().rootText
	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
	local hidden  = not(frame.args.show or frame.args.zeigen) -- Vorlage ist  verborgen
	
	local _vorlage = template .. vorlage
	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 dieVorlagendokumentation mit dem Befehl <code">{{#invoke:Dok|doc}}</code> eingebunden '
	
	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, das kannst du mit der Box unterhalb dieses Text durchführen, es wird eine vorausgefüllte Seite basierend auf der Seite <code>{{[[' .. preload .. ']]}}</code> erzeugt. Eine leere Seite kannst du mit dem 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/Template:' .. 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 .. '/}}'
    
	if p.gibts(dok) then -- Unterseite doc gibts
		local doku, layout, bearbeiten
		local linkliste = frame:preprocess('[{{fullurl:Spezial:Linkliste/Template:' .. 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 = 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;">&#91;[' .. tostring(mw.uri.fullUrl( _doc, 'action=edit')) .. ' Bearbeiten]&#93;</span>.</li><li>' .. linkliste .. '</li></ul>\n|}'		
		result = bearbeiten .. verborgen .. ruler .. layout .. doku .. docu_info
	else
		local ShowMe = frame:preprocess('\n==Vorlageninhalt==\n' .. anzeige .. vorlage .. '}}</code></div></div>')
		result = duhast .. diedokumentationsunterseite .. damitdie .. inputbox .. ShowMe .. subpages
	end -- Unterseite doc gibts
	
	-- Kategorisieren
	if not nocat then -- die Vorlage soll kategorisiert werden
		mycat = '[[category:' .. cat ..']]'
	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, 'uselang=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 _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:Template-info.png|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]&nbsp;·&nbsp;[' .. tostring(history) .. ' Versionen]&nbsp;·&nbsp;[' .. tostring(purge) .. ' Cache leeren]&nbsp;·&nbsp;[' .. tostring(info) .. ' Seiteninformation]'
	result = divspan .. result .. '</span></div>\n\n'
	
	local small = "''<small>Diese [[Template:Vorlagendokumentation|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

   local _vorlage = frame.args.vorlage or mw.title.getCurrentTitle().rootText
   local vorlage = 'Template:' .. _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 
end

function p.doku(frame)
	
	-- dieser Modul konstruiert die Dokumentationsunterseite vorlage/doc

	-- Parameter mit Voreinstellungen
	local count    = frame.args.count or 0 
	local vorlage  = frame.args.vorlage or mw.title.getCurrentTitle().rootText
	local erzeugt  = frame.args.text or "erzeugt etwas Tolles, sonst gäbe es sie nicht."
	local rubrik   = frame.args.rubrik or "AlleListen"
	local trnzn    = frame.args.trennzeichen or '%,%;'  -- 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 gerendert:' .. div_dotted
	local ergibt_expandiert = div_inlineblock .. 'ergibt expandiert:' .. div_dotted

	-- zusammengesetzte Texte
	local tl = '<span style="font-family:&quot;Consolas&quot;, monospace;">{{[[Vorlage:' .. vorlage .. '|' .. vorlage .. ']]' .. '}}</span> '
	local diese_vorlage='Die Vorlage ' .. tl .. erzeugt
	local _vorlage = '{{' .. vorlage -- Vorlage mit geschweiften Klammern zu Beginn
	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
	if not p.gibts(vorlage) then return "Die Vorlage " .. vorlage .. " existiert nicht" end
	ShowMe = frame:preprocess('\n==Code==\n' .. anzeige .. vorlage .. '}}</code></div></div>') -- 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
	
	anw0 = frame:preprocess('\n==Anwendung==\n') .. p.anwendung(_vorlage_,render,expand,klappbar, geklappt)

	-- 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
			--liste = p.split(u) or {} 
			--argtab = p.zuweisen(paramlist,liste) obsolet
			liste = '|' .. string.gsub(u, '[' .. trnzn .. ']','|') .. '}}'  -- Trennzeichen in senkrechte Striche umwandeln, default ist ',' oder ';', als Pattern %,%;
			diese_anwendung = _vorlage .. liste
			anwendung = p.anwendung(diese_anwendung,render,expand,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,render,expand,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 = 'gerendert:' .. '</div></div>' .. div_dotted .. '>'
	local ergibt_expandiert = div_inlineblock .. 'ergibt expandiert:' .. '</div></div>' .. div_dotted .. class

	if not expand 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 expand then _ = ergibt_expandiert .. expanded end
	if render 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 = 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>'
		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 "template"
  local titel = space .. ":" .. name

  if mw.title.new(titel).exists then return true end
  return false
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 teil5 = '</td></tr>'

  _ = teil1 .. pname .. teil2 .. beschreibung .. teil3 .. default .. teil4 .. optional .. teil5
  if fort and fort ~="" then -- Fortsetzungszeile
    _ = _ .. teil1 .. teil2 .. fort .. teil3 .. teil4 .. teil5
  end
  if gort and gort ~="" then -- 2. Fortsetzungszeile
    _ = _ .. teil1 .. teil2 .. gort .. teil3 .. teil4 .. teil5
  end
  return _
end

return p