Module:Càstia fintzas

Documentation for this module may be created at Module:Càstia fintzas/doc

--[[
* Mòdulu chi implementat su template {{Càstia fintzas}}.
]]

require('Module:No globals')

-- Parsificat un argumentu de su template (rapresentat su tìtulu de una pàgina) e frunit su wikilink.
--
-- @param {string} arg
-- @return {string}
local function parseArg(arg)
	local dest, count, obj, content

	-- frunit un'errore cun wikilinks a categorias
	if arg:match('^%s*:%s*[Cc][Aa][Tt]') then
		return '<span class="error">(impreare su [[Template:Càstia categoria]])</span>'
	end

	-- boga pipes inseridas pro mèdiu de {{!}} eventuales
	arg = arg:match('(.-)|') or arg
	-- remplasat sas entidades HTML (a esèmpiu &#39; ingendradu dae {{PAGENAME}} cando su tìtulu cuntenet s'apòstrofu)
	arg = mw.text.decode(arg)
	-- crea ogetu pro su tìtulu
	obj = mw.title.new(mw.uri.decode(arg, 'PATH'))
	-- remplasat # con §, si benit agatadu creat unu piped wikilink
	dest = arg
	arg, count = arg:gsub('#', ' § ')
	dest = count == 1 and (dest .. '|') or ''

	-- cunvertet sa prima lìtera in maiùscola o minùscola sighinde su fatu chi s'artìculu tèngiat su template Tìtulu minùsculu
	content = obj and obj:getContent()
	if content and content:match('{{%s*[Tt]ìtulu minùsculu%s*[|}]') then
		arg = mw.getContentLanguage():lcfirst(arg)
	else
		arg = mw.getContentLanguage():ucfirst(arg)
	end

	return string.format("'''[[%s%s]]'''", dest, arg)
end

-- Fraigat s'HTML pro cuntènnere sos wikilinks a sas pàginas.
--
-- @param {string} wikitext
-- @return {string}
local function buildHTML(wikitext)
	local tableNode = mw.html.create('table')
	tableNode
		:addClass('càstia-fintzas noprint')
		:tag('tr')
			:tag('td')
				:wikitext('[[File:Magnifying glass icon mgx2.svg|20px|class=noviewer|link=]]')
				:done()
			:tag('td')
				:wikitext(string.format("''Su matessi argumentu a sa minuda: %s''.", wikitext))
				:done()

	return tostring(tableNode)
end

-- =============================================================================
--                            Funtziones esportadas
-- =============================================================================

local p = {}

-- Funtziones pro su template {{Càstia fintzas}}.
function p.main(frame)
	local lastArg, conjunction
	local styles = 'Module:Càstia fintzas/styles.css'
	local args = {}

	for _, val in ipairs(frame:getParent().args) do
		if mw.text.trim(val) ~= '' then
			table.insert(args, parseArg(val))
			lastArg = val
		end
	end
	if #args > 1 and lastArg then
		conjunction = mw.ustring.lower(lastArg:sub(1, 1)) == 'e' and 'ed' or 'e'
		conjunction = '&#32;' .. conjunction .. '&#32;'
	end

	return frame:extensionTag{
			name = 'templatestyles',
			args = {src = styles}
		} .. buildHTML(mw.text.listToText(args, ',&#32;', conjunction))
end

return p