Módulo:Icono
De MundoConan Wiki
Más acciones
La documentación para este módulo puede ser creada en Módulo:Icono/doc
-- Módulo:Icono — iconos de la interfaz de MundoConan (set Lucide, licencia ISC).
-- {{Icono|estrella}} -> insignia azul con el icono
-- {{Icono|estrella|color=dorado|tamaño=g}} -> colores: azul, rojo, dorado, verde, morado, negro, gris
-- {{Icono|estrella|estilo=plano}} -> solo el icono blanco (para fondos de color)
-- Desde otros módulos: require('Módulo:Icono').html('estrella', { color = 'dorado' })
local p = {}
-- Nombre -> archivo (Archivo:Icono-<nombre>.svg). Los alias permiten escribir variantes.
local ICONOS = {
anime = true, aviso = true, azar = true, biblioteca = true, bomba = true, buscar = true, calavera = true,
calendario = true, carpeta = true, ciencia = true, cine = true, coche = true, cohete = true, colaborar = true,
copyright = true, corazon = true, corona = true, correo = true, editar = true, escudo = true, estrella = true,
exito = true, fanfic = true, fantasma = true, flecha = true, foro = true, historial = true, huella = true,
idea = true, imagen = true, info = true, joya = true, libre = true, lista = true, llave = true, lugar = true,
manga = true, musica = true, nota = true, noticias = true, nuevo = true, obras = true, organizacion = true,
ova = true, pelicula = true, peligro = true, personaje = true, personajes = true, pregunta = true, reloj = true,
spoiler = true, tarjetas = true, trofeo = true, videojuego = true, web = true,
}
local ALIAS = {
['música'] = 'musica', ['película'] = 'pelicula', ['organización'] = 'organizacion', ['corazón'] = 'corazon',
['éxito'] = 'exito', juego = 'videojuego', videojuegos = 'videojuego', libro = 'manga', tv = 'anime',
lupa = 'buscar', dado = 'azar', usuario = 'personaje', grupo = 'personajes', destacado = 'estrella',
ayuda = 'pregunta', cuenta = 'reloj', reloj_arena = 'reloj', noticia = 'noticias', ideas = 'idea',
mapa = 'lugar', lugares = 'lugar', escritura = 'fanfic', licencia = 'copyright', disco = 'ova',
-- Emojis antiguos -> icono equivalente (para plantillas y páginas que aún los usan)
['⭐'] = 'estrella', ['🔍'] = 'buscar', ['🔎'] = 'buscar', ['🎲'] = 'azar', ['🕵️'] = 'personaje', ['📺'] = 'anime',
['📖'] = 'manga', ['📚'] = 'biblioteca', ['🎬'] = 'pelicula', ['🕶️'] = 'organizacion', ['🎵'] = 'musica',
['🎮'] = 'videojuego', ['🏙️'] = 'lugar', ['💡'] = 'idea', ['📰'] = 'noticias', ['💬'] = 'foro', ['🆕'] = 'nuevo',
['✏️'] = 'editar', ['📅'] = 'calendario', ['⏳'] = 'reloj', ['🤝'] = 'colaborar', ['ℹ️'] = 'info', ['⚠️'] = 'aviso',
['⛔'] = 'peligro', ['✅'] = 'exito', ['📂'] = 'carpeta', ['📄'] = 'copyright', ['©️'] = 'copyright',
['🆓'] = 'libre', ['🌐'] = 'web', ['✉️'] = 'correo', ['❓'] = 'pregunta', ['🚧'] = 'obras', ['📝'] = 'nota',
['📀'] = 'ova', ['🛡️'] = 'escudo', ['❤️'] = 'corazon', ['🎩'] = 'joya', ['📺️'] = 'anime',
}
local COLORES = { azul = true, rojo = true, dorado = true, verde = true, morado = true, negro = true, gris = true, claro = true }
local TAM = { p = 14, m = 18, g = 24, xg = 32 }
local function normalizar(nombre)
nombre = mw.text.trim(nombre or '')
local bajo = mw.ustring.lower(nombre)
if ICONOS[bajo] then
return bajo
end
return ALIAS[bajo] or ALIAS[nombre]
end
-- ¿Es un nombre (o emoji) que tiene icono?
function p.existe(nombre)
return normalizar(nombre) ~= nil
end
function p.html(nombre, opts)
opts = opts or {}
local n = normalizar(nombre)
if not n then
return nombre or ''
end
local clave = TAM[opts.tam or ''] and opts.tam or 'm'
local tam = TAM[clave]
local color = COLORES[opts.color or ''] and opts.color or 'azul'
local clases = 'mc-ico mc-ico--t' .. clave
if opts.estilo == 'plano' then
clases = clases .. ' mc-ico--plano'
else
clases = clases .. ' mc-ico--' .. color
end
return '<span class="' .. clases .. '">[[Archivo:Icono-' .. n .. '.svg|'
.. tam .. 'px|link=' .. (opts.enlace or '') .. '|alt=' .. (opts.alt or '') .. ']]</span>'
end
function p.icono(frame)
local a = frame:getParent().args
local nombre = a[1] or frame.args[1] or ''
if mw.text.trim(nombre) == 'AD' then
-- Compatibilidad: {{Icono|AD}} = estrella de artículo destacado junto al título
return frame:extensionTag('indicator', p.html('estrella', { color = 'dorado', tam = 'p', alt = 'Artículo destacado' }),
{ name = 'destacado' })
end
return p.html(nombre, {
color = a.color, tam = a['tamaño'] or a.tamano or a[2], estilo = a.estilo, enlace = a.enlace, alt = a.alt,
})
end
-- Lista de todos los iconos (para la documentación)
function p.lista(frame)
local nombres = {}
for n, _ in pairs(ICONOS) do
table.insert(nombres, n)
end
table.sort(nombres)
local out = { '<div class="mc-ico-lista">' }
for _, n in ipairs(nombres) do
table.insert(out, '<div>' .. p.html(n, { tam = 'g' }) .. '<code>' .. n .. '</code></div>')
end
table.insert(out, '</div>')
return table.concat(out)
end
return p