Module:Template documentation

local p = {} -- p stands for package

local ruler   = '' --local template = mw.site.namespaces.Template.name .. ':'

local anzeige = '  '

function p.doc(frame) -- this function creates the documentation page on templates -- the documentation is included from the subpage /doc -- if the subpage does not exist a hint is displayes local a = frame.args             -- direkt per #invoke: übergeben local b = frame:getParent.args -- an die Vorlage übergebene Parameter local ns      = a.ns or b.ns or mw.site.namespaces.Template.name local vorlage = a.vorlage or b.vorlage or mw.title.getCurrentTitle.rootText local template = ns .. ':'  -- namespace of calling page include colons local doc     = a.doc or b.doc or 'doc' --- rename documentation subpate local preload = a.preload or b.preload or 'Template:Documentation/preload' local cat     = a.cat or a.kat or a.kategorie or b.cat or b.kat or b.kategorie or 'Templates' local nocat   = a.nocat or a.nokat or a.keinekat or a.ns or b.nocat or b.nokat or b.keinekat or b.ns-- wenn anderer Namensraum, dann nicht kategorisieren local hidden  = not(a.show or a.zeigen or b.show or b.zeigen) -- template is hidden

local _vorlage = template .. vorlage local dok     = vorlage .. '/' .. doc  -- name without namespace local _doc    = template .. dok        -- name with namespace prefix -- end of page link local seitenende = 'bottom ' 	.. ' '

local _, mycat, result = , , ''

local verborgen = (hidden and ' The template ' .. vorlage .. ' is hidden and visible only in embedding pages. ' ) or ''

local duhast = 'The template documentation has been included by the command  using subpage. The documentation of Template documentation contains more information about using the module and its paramters.' local diedokumentationsunterseite = 'The subpage for template documentation  does not exist. '	local damitdie = 'Creating the documentation subpage  for the template   per link or input box below.\n\n' local input = ' ' local inputbox = frame:preprocess('\n\n' .. input) local subpages = frame:preprocess('\n==Subpages==\n')

local docu_info = '{| class="plainlinks" style="border-collapse:collapse; margin:2px 0;"\n' .. '| class="noviewer" style="padding:5px; vertical-align:top; width:40px;" | \n' .. '| style="padding:0; width:100%;" |' .. ''   local dokgibts = p.gibts(dok,ns) if dokgibts then -- Unterseite doc gibts local doku, layout, bearbeiten local linkliste = frame:preprocess('[ template usage]') local Unterseiten = ' Subpages ' .. frame:preprocess('') 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(' '

local divspan = ' ' 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) .. ' edit] · [' .. tostring(history) .. ' history] · [' .. tostring(purge) .. ' refresh] · [' .. tostring(qqx) .. ' system messages] · [' .. tostring(info) .. ' page infos] · [' .. tostring(editv) .. ' edit template] · [' .. tostring(infov) .. ' template page information]' result = divspan .. result .. ' \n'

return result .. rohhtml .. ' ' end

function p.doku(frame) -- dieser Modul konstruiert die Dokumentationsunterseite vorlage/doc -- this is the main modul for constructing the documentation subpage

local myns     = mw.title.getCurrentTitle.namespace -- for namespage template only if myns ~= 10 then return end -- if not template ns do nothing -- parameters with default values local count   = frame.args.count or 0 local vorlage = frame.args.vorlage or mw.title.getCurrentTitle.text local ns      = frame.args.ns or mw.site.namespaces.Template.name local erzeugt = frame.args.text or "misses a description" local rubrik  = frame.args.rubrik or "AlleListen" local trnzn   = string.gsub(frame.args.trennzeichen or ',;','%p', '%%%0')  -- list of delimiter symbols local klappbar = frame.args.klappbar local geklappt = frame.args.geklappt

-- parameters without defaults local expand = not frame.args.noexpand  -- supresses the expanding of the template noexpand=y local render = not frame.args.norender  -- supresses the rendering of the template norender=y -- Variablen für Formatierung local div_blue = ' ' local div_inlineblock = ' ' local div_dotted = ' ' local ergibt_gerendert = div_inlineblock .. 'rendered:' .. div_dotted local ergibt_expandiert = div_inlineblock .. 'unfolds as wikitext:' .. div_dotted

local mytoc = ' ' if vorlage:match('%a+$') == 'doc' then vorlage = vorlage:match('(.+)%/%a+$') end -- when docu sub then remove doc -- zusammengesetzte Texte if ns == mw.site.namespaces.Template.name then -- Vorlage ohne "Vorlage:" vorlage_ns = vorlage else vorlage_ns = ns .. ':' .. vorlage end local tl = ' ' local diese_vorlage = mytoc .. '\nThe template ' .. tl .. erzeugt local _vorlage = ''           -- Vorlage von geschweiften Klammern umschlossen -- lokale Parameter local vorlagenliste, i, template,ShowMe = '' local parametertabelle, muster, anw0, kopiervorlage = , , ,  local expanded, rendered ShowMe = frame:preprocess('\n==Wikitext==\n') .. p.wrap(p.Inhalt(vorlage,ns)) -- Vorlageninhalt anzeigen --if 1 then return vorlage .. mw.title.getCurrentTitle.baseText .. mw.title.getCurrentTitle.text end if p.gibts(rubrik) then vorlagenliste = ' ' .. frame:expandTemplate{ title = rubrik, args = { } } .. ' ' 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 list==\n') .. parametertabelle kopiervorlage = frame:preprocess('\n==Copy&paste==\n " -- 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==Application==\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 ' ' 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) -- this procedure renders the template -- der Parameter vorlage enthält den kompletten Aufruftext inklusiver sämtlicher Parameter -- wie er in einer Wikiseite normalerweise auftritt -- z.B. 	-- 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

-- variables for formatting local div_blue = ' ' local div_inlineblock = ' ' local div_dotted = ''	local ergibt_expandiert = div_inlineblock .. 'unfolds as wikitext:' .. ' ' .. div_dotted .. class

if not xxpand then ergibt_gerendert= ergibt_gerendert end ergibt_gerendert= div_inlineblock .. ergibt_gerendert expanded = ' ' gerendert = processed .. ' '	if xxpand then _ = ergibt_expandiert .. expanded end if xender then _ = _ .. ergibt_gerendert .. gerendert end

return div_blue .. _ .. ' ' 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 = ' ' -- change column widths of the table 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 'description missing' -- Parameterbeschreibung def = pframe.args["def" .. j] or pframe.args["d" .. j] or 'empty'              -- 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 .. '=' -- ' 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 ='none ' 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 = mw.title.new(space .. ":" .. name) if titel == nil then return false end 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: aufrufende Root-Seite) -- ns: Namespace (default: Template) local space    = ns or mw.site.namespaces.Template.name local text     = titel or mw.title.getCurrentTitle.baseText 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 "empty" local optional = optional if optional == nil or optional=="" then optional="optional" else optional="mandatory" end

local teil1 = ' local teil3 = '  ' local teil4 = ' ' local teilf = ' ' local teil5 = ' '

_ = 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