Aller au contenu

Module:Symbole

De Wikivoyage

 Documentation[voir] [modifier] [historique] [purger]

Voir aussi

[modifier]

Catégories générées

[modifier]

--[[
	Source script:	https://fr.wikivoyage.org/wiki/Module:Symbole
	Maintainer:		Andyrom75
]]
local i18n = require( 'Module:Symbole/i18n' )

local function _templateStyle( frame, src )
   return frame:extensionTag( 'templatestyles', '', { src = src } )
end

local function _isDefined(s)
	return s ~= '' and s
end

local function _errMsg(errCode, additionalText)
	local errMsg = mw.html.create( 'span' )
		:addClass('debuginfo')
		:wikitext( i18n.errorMsg[errCode] .. (additionalText or ''))
	return '[[Category:' .. i18n.categories[errCode] .. ']]' .. tostring(errMsg)
end

local function _ucfirst(str)
    return (str:gsub("^%l", string.upper))
end

local function _trim(str)
    return (str:gsub("^%s*(.-)%s*$", "%1"))
end

local function _Symbole(frame)
	local args = frame.args
	local output = ''
	local maxPositionalArg = 0 -- conterrà il numero max di parametri posizionali anche se ci sono nil nel mezzo
	for nextPosArg in pairs(args) do
		if type(nextPosArg) == "number" and nextPosArg > maxPositionalArg then
			maxPositionalArg = nextPosArg
		end
	end

	for pos = 1, maxPositionalArg do
		local key = args and args[pos] and _trim(string.lower(args[pos])) or ''
		if key == '' then 
			output = output .. _errMsg('noInput')
		else
			local values = i18n.symboleValues[key]
			if not _isDefined(values) then 
				output = output .. _errMsg('wrongPar', ': <b>' .. key .. '</b>')
			else
				local image = values[1] or i18n.icons.wrongPar
				local class = values[2] or ''
				-- i parametri taille, lien e description, li uso solo se ho un solo simbolo da mostrare, altrimenti li applicherei erroneamente a tutti
				local px = (maxPositionalArg == 1) and args.taille or _isDefined(values[3]) or '20px'
				local link = (maxPositionalArg == 1) and args.lien or _isDefined(values[4]) or ''
				local description = (maxPositionalArg == 1) and args.description and _ucfirst(args.description) or _isDefined(values[5]) or _ucfirst(args[1])
				output = output .. ((pos>1) and ' ' or '') .. '[[File:' ..  image .. (_isDefined(class) and ("|class=" .. class) or '') .. '|'
					.. px .. (_isDefined(link) and ("|link=" .. link) or '') .. '|' .. description .. ']]'
			end
		end
	end

    return _templateStyle( frame, 'Symbole/styles.css' ) .. output
end

local p = {}

function p.SymboleTemplate(frame)
	return _Symbole(frame:getParent())
end

function p.SymboleInvoke(frame)
	return _Symbole(frame)
end

function p.SymboleModule(frame)
	local Cframe = mw.getCurrentFrame()
	Cframe.args = frame.args
	return _Symbole(Cframe)
end

return p