Module:Lilytest

From TestWiki

Documentation for this module may be created at Module:Lilytest/doc

local p = {}
local t = require('Module:Arguments')
--{{#invoke:Lilytest|xxx|...}}

function p.urltest(frame)
	--{{#invoke:Lilytest|getid|seite=|ns=}}
	local was = frame.args.seite or frame:getParent().args.seite or 'Lua'  -- Seitentitel
	local ns  = frame.args.ns or frame:getParent().args.ns or ''           -- Namensraum
	local namesp = trim(ns) or 'Artikel'
	local seite = mw.title.new(was, ns)
	local myserver = mw.site.server 
	local mypath   = mw.site.scriptPath
	local myuri = mw.uri.fullUrl( seite.text )
	local myurl = myuri.protocol .. myuri.host .. myuri.path .. ' tostring ' .. tostring(myuri)
	local myns = seite.namespace
	if myns == 0 then return 'im Artkelnamensraum'
		else return 'nicht im AR ' .. myns .. ' *** ' .. ns
	end
	
	if 1 then
		return '\nserver: ' .. myserver .. '\nPfad: ' .. mypath .. '\nfullurl: ' .. myurl
	end
	
	local _ = seite.id
	if _ == 0 then return 'Seite ' .. was .. ' existiert nicht im Namensraum ' .. namesp end
	namesp = seite.nsText
	local fulln = seite.prefixedText 
	--return 'Die Seite ' .. fulln .. ' hat die ID ' ..  _
end

function p.dpl(frame)
	-- https://www.mediawiki.org/wiki/Extension:DynamicPageList_(Wikimedia)
	-- wertet die Erweiterung <dynamicpagelist> </dynamicpagelist>  aus
	-- {{#invoke:Lilytest|dpl}}
	local a = frame.args              -- direkt per #invoke: übergeben
	if empty(a) then a = frame:getParent().args or { } end
	
	local ns = mw.title.getCurrentTitle().namespace
	--if ns ~= 0 then return '' end -- nur im Artikelnamensraum
	
	local taga = '<dynamicpagelist>'  -- das Tag <dynamicpagelist> wird ausgewertet
	local tagb = '</dynamicpagelist>' -- muss anders erfolgen, da andere Logik
	-- Parameter, die mit c beginnen: category
	-- Patameter, die mit n beginnen: notcategory
	-- alle anderen Parameter wie gewohnt
	local parm, fletter, ausgabe, tag = '', '', '', ''

	for k, v in pairs(a) do                         -- alle Parameter werden gesammelt und in die tagparms Tabelle übergeben
		parm = trim(v)
		fletter  = parm:sub(1,1):lower()  -- Anfangsbuchstaben
		ausgabe = ausgabe .. '<br>index: ' .. k .. ' inhalt: ' .. fletter    -- für Testzwecke
		if fletter == 'c' then     -- Kategorie
			tag = tag .. '\ncategory = ' .. parm
		elseif fletter == 'n' then -- Not Kategorie
			tag = tag .. '\nnotcategory = ' .. parm
		else -- anderer Parameter
			tag = tag .. '\n' .. k .. ' = ' .. parm
		end
	end

	--ausgabe = 'Parameterliste: ' .. table.concat(tagparms, ", ")
	return tag -- frame:extensionTag { name = tag, content = content, args = tagparms }
end

function p.monat(frame)
	local a = frame.args              -- direkt per #invoke: übergeben
	local b = frame:getParent().args  -- an die Vorlage übergebene Parameter
	local myname = mw.title.getCurrentTitle().text:lower()
	local moname = { 'Jänner', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember' }
	local monat = ''
	local jahr = string.match(myname, ('%d%d%d%d'))
	if jahr == '' then return 'kein Jahr gefunden in ' .. myname end -- kein Jahr gefunden
	for i = 1, 12 do
		monat = moname[i]
		if string.find(myname, monat:lower()) then
			--break
			return '[[Category:' .. jahr .. '|-' .. string.format("%02d", i) .. ']]'
		end
	end
	return ''
end

function p.nsliste(frame)
	--{{#invoke:Lilytest|nsliste|ab=}}
	--erzeugt eine Tabelle mit Seitennummer und Namen in einem Namensraum
	--sehr teuer in der Ausführung, daher werden nur 100 Listeneinträge
	--inzwischen habe ich die Zahl der zulässigen Aufrufe in der LocalSettings.php auf 20000 erhöht, also praktisch unlimitiert
	--Parameter: ab/abwo, Zahl ab der gestartet wird
	local a = frame.args              -- direkt per #invoke: übergeben
	if empty(a) then a = mw.getCurrentFrame().args end  -- an die Vorlage übergebene Parameter	

	local _ = ''
	local seite, sname, ns, nstitel
	
	local abwo   = tonumber(a.ab or a.abwo) or 1
	local bishin = tonumber(a.bis or a.bishin) or 100
	local myns   = string.lower(trim(a.ns) or '')
	local __ = '\nmyns: ' .. myns
	
	for i = abwo, bishin do
		seite = mw.title.new(i)
		
		if seite then
			nstitel = string.lower(seite.nsText)
			ns      = tostring(seite.namespace)
			if myns == nstitel or myns == ns then
				_ = _ .. '<tr><td>' .. i .. '</td><td>[[:' .. seite.prefixedText .. '|' .. seite.text .. ']]</td></tr>\n'
			end
			--__ = __ .. '\nns: ' .. ns .. ' nstitel: ' .. nstitel
		end
	end
	_ = '<table class="cute"><tr><th>ID</th><th>Name</th></tr>' .. _ .. '</table>'
	return _ --.. __
end

function p.nrliste(frame)
	--{{#invoke:Lilytest|nrliste|ab=}}
	--erzeugt eine Tabelle mit Seitennummer und Namen
	--sehr teuer in der Ausführung, daher werden nur 100 Listeneinträge
	--inzwischen habe ich die Zahl der zulässigen Aufrufe in der LocalSettings.php auf 20000 erhöht, also praktisch unlimitiert
	--Parameter: ab/abwo, Zahl ab der gestartet wird
	local a = frame.args              -- direkt per #invoke: übergeben
	if empty(a) then a = mw.getCurrentFrame().args end  -- an die Vorlage übergebene Parameter	

	local _ = ''
	local seite, sname, ns, nstitel
	
	local abwo = tonumber(a.ab or a.abwo) or 1

	for i = abwo, abwo + 98 do
		seite = mw.title.new(i)
		
		if seite then
			nstitel=seite.nsText
			if nstitel == '' then nstitel = 'Artikel' end
			_ = _ .. '<tr><td>' .. i .. '</td><td>[[:' .. seite.prefixedText .. '|' .. seite.text .. ']]</td><td>' .. nstitel .. '</td></tr>\n'
		end
	end
	_ = '<table class="cute"><tr><th>ID</th><th>Name</th><th>Namensraum</th></tr>' .. _ .. '</table>'
	return _
end

function p.getid(frame)
	--{{#invoke:Lilytest|getid|seite=|ns=}}
	local was = frame.args.seite or frame:getParent().args.seite or 'Lua'  -- Seitentitel
	local ns  = frame.args.ns or frame:getParent().args.ns or ''           -- Namensraum
	local namesp = trim(ns) or 'Artikel'
	local seite = mw.title.new(was, ns)
	
	local _ = seite.id
	if _ == 0 then return 'Seite ' .. was .. ' existiert nicht im Namensraum ' .. namesp end
	namesp = seite.nsText
	local fulln = seite.prefixedText 
	return 'Die Seite ' .. fulln .. ' hat die ID ' ..  _
end
-- {{#invoke:Lilytest|html}}
function p.html(frame)
	local mylink = mw.html.create( 'a' ) 
	mylink
	:attr( 'id', 'testdiv' )
	:attr( 'href', 'https://publictestwiki.com')
	:attr('target', '_blank')
	:wikitext( 'Link Testtext' )
	return tostring( mylink )
end

function p.htmlx(frame)
	local mylink = mw.html.create( 'a' ) 
	mylink
	:attr( 'id', 'testdiv' )
	:attr( 'href', 'https://publictestwiki.com')
	:attr('target', '_blank')
	:wikitext( 'Link Testtext' )
	return mylink
end

function p.simple(frame)
	return '<a href="https://publictestwiki.com" target="_blank">Link Testtext</a>'
end

function empty (self)
	-- es gibt keine eingebaute Funktion, um zu überprüfen, ob eine Tabelle leer ist
	-- diese Funktion liefert true, wenn die Tabelle leer ist
	-- hilfreich bei frame.args oder frame:parent().args etc.
    for _, _ in pairs(self) do
        return false
    end
    return true
end

function trim(s)
  -- entfernt Weißraum an den beiden Enden des Strings
  -- wenn kein String als Parameter übergeben wird, wird die Eingabe unverändert zurück gegeben
  if type(s) ~= 'string' then return s end  -- falls kein string
  return (s:gsub("^%s*(.-)%s*$", "%1"))
end

return p