Naar inhoud springen

Module:Zandbak

Uit Wikisource

Documentatie voor deze module kan aangemaakt worden op de volgende pagina: Module:Zandbak/doc

-- Deze pagina is een zandbak om Lua scripten op te testen en oefenen.
--require('strict')

local getArgs = require('Module:Arguments').getArgs

local p = {}

function p.koptekst(frame)
    local args = getArgs(frame)
    return koptekst(args)
end

function koptekst(args)
	local html = mw.html.create()
	local koptekst = html:tag('div')
		:addClass('ws-koptekst')

	koptekst:node(formatteer(args.auteur, 'auteur'))
	
	local titel_div = koptekst:tag('div'):addClass('ws-koptekst-volledige-titel')
	titel_div:node(formatteer(args.titel, 'titel'))
	titel_div:node(formatteer(args.ondertitel, 'ondertitel'))

	koptekst:node(formatteer(args.redacteur, 'redacteur', 'Redactie door '))
	koptekst:node(formatteer(args.vertaler, 'vertaler', 'Vertaald door '))
	koptekst:node(formatteer(args.illustrator, 'illustrator', 'Geïllustreerd door '))
	koptekst:node(formatteer(args.publicatie_info, 'publicatie-info'))
	
	return html
end

function formatteer(wikitext, eigenschap, voorzetsel)
	if not wikitext then
		return nil
	end

	if eigenschap then
		wikitext = linkMetEigenschap(wikitext, eigenschap)
	end
	if voorzetsel then
		wikitext = voorzetsel .. wikitext
	end
	
	local div = mw.html.create('div')
	if eigenschap then
		div:addClass('ws-koptekst-' .. eigenschap)
	end
	div:node(wikitext)
	
	return div
end

function linkMetEigenschap(wikitext, eigenschap)
	if not mw.ustring.match(wikitext, '%[%[.*%]%]') then
		return tekstMetEigenschap(wikitext, eigenschap)
	end

	wikitext = mw.ustring.gsub(wikitext, '%[%[([^|]*)|(.*)%]%]', function(pagina, link_tekst)
        return '[[' .. pagina .. '|' .. tekstMetEigenschap(link_tekst, eigenschap) .. ']]'
	end)
	wikitext = mw.ustring.gsub(wikitext, '%[%[([^|]*)%]%]', function(pagina)
		return '[[' .. pagina .. '|' .. tekstMetEigenschap(pagina, eigenschap) .. ']]'
	end)
	return wikitext
end

function tekstMetEigenschap(tekst, eigenschap)
	return tostring(mw.html.create('span')
		:attr('itemprop', eigenschap)
		:wikitext(tekst))
end

return p