Módulo:SpeciesInfobox: mudanças entre as edições
De Cronicas Eternas Wiki
Sem resumo de edição |
Sem resumo de edição |
||
(3 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
local p = {} | local p = {} | ||
-- Lista de valores que indicam ausência de informação | |||
local ignoredValues = { | |||
["Unknown"] = true, | |||
["None"] = true, | |||
["Nenhum"] = true, | |||
["-"] = true, | |||
["--"] = true, | |||
[""] = true | |||
} | |||
function p.infobox(frame) | function p.infobox(frame) | ||
Linha 5: | Linha 15: | ||
local sections = { | local sections = { | ||
{ | |||
title = "INFORMAÇÃO BÁSICA", | |||
fields = { | |||
{"Nome", args["name"]}, | |||
{"Tamanho", args["size"]}, | |||
{"Tipo", args["type"]}, | |||
{"Subtipo", args["subtype"]}, | |||
{"Alinhamento", args["alignment"]}, | |||
{"Nível de Desafio", args["challenge_rating"]}, | |||
{"Divindade Padroeira", args["patron_deity"]}, | |||
{"Movimento", args["movement"]}, | |||
{"Visão", args["vision"]}, | |||
{"Ciclo Ativo", args["active_cycle"]}, | |||
{"Dieta", args["diet"]}, | |||
{"Tempo de Vida", args["lifespan"]}, | |||
{"Localidade", args["locality"]}, | |||
{"Linguagens", args["languages"]}, | |||
{"Subespécies", args["subspecies"]}, | |||
{"Clima", args["climate"]}, | |||
{"Terreno", args["terrain"]}, | |||
}, | |||
}, | }, | ||
{ | |||
title = "APARÊNCIA", | |||
fields = { | |||
{"Altura", args["height"]}, | |||
{"Comprimento", args["length"]}, | |||
{"Envergadura da Asa", args["wingspan"]}, | |||
{"Peso", args["weight"]}, | |||
{"Cor da Pele", args["skin_color"]}, | |||
{"Cor do Cabelo", args["hair_color"]}, | |||
{"Tipo de Cabelo", args["hair_type"]}, | |||
{"Penas", args["feathers"]}, | |||
{"Cor de Olho", args["eye_color"]}, | |||
{"Tipo Corporal", args["body_type"]}, | |||
}, | |||
}, | }, | ||
} | } | ||
-- | -- Início da infobox | ||
local infobox = | local infobox = '<div style="width:22em; background:#f9f9f9; border:1px solid #aaa; float:right; padding:5px; font-size:90%;">' | ||
-- Adiciona a imagem no topo, se fornecida | |||
if args["image"] and args["image"] ~= "" then | if args["image"] and args["image"] ~= "" then | ||
infobox = infobox .. string.format( | infobox = infobox .. string.format( | ||
'<div style="text-align:center; margin- | '<div style="text-align:center; margin-bottom:10px;">%s</div>', | ||
frame:preprocess(string.format('[[File:%s|center|frameless]]', args["image"])) | frame:preprocess(string.format('[[File:%s|center|frameless|200px]]', args["image"])) | ||
) | ) | ||
end | end | ||
-- Adiciona o nome da espécie | |||
infobox = infobox .. string.format( | |||
'<div style="text-align:center; background:#ccc; font-size:120%%; padding:4px;">%s</div>', | |||
args["name"] or "NOME DA ESPÉCIE" | |||
) | |||
-- Adiciona as seções e os campos | |||
for _, section in ipairs(sections) do | |||
local sectionContent = {} | |||
-- Monta os campos com conteúdo da seção | |||
for _, field in ipairs(section.fields) do | |||
local label, value = field[1], field[2] | |||
-- Verifica se o valor é válido (não está na lista de ignorados) | |||
if value and not ignoredValues[value:match("^%s*(.-)%s*$")] then | |||
table.insert(sectionContent, string.format('<div style="padding:2px 5px;"><strong>%s:</strong> %s</div>', label, value)) | |||
end | |||
end | |||
-- Adiciona a seção somente se tiver conteúdo | |||
if #sectionContent > 0 then | |||
infobox = infobox .. string.format('<div style="text-align:center; background:#ddd; font-size:110%%; padding:4px; margin-top:5px;">%s</div>', section.title) | |||
infobox = infobox .. table.concat(sectionContent) | |||
end | |||
end | |||
infobox = infobox .. '</div>' | infobox = infobox .. '</div>' |
Edição atual tal como às 00h11min de 24 de novembro de 2024
A documentação para este módulo pode ser criada em Módulo:SpeciesInfobox/doc
local p = {}
-- Lista de valores que indicam ausência de informação
local ignoredValues = {
["Unknown"] = true,
["None"] = true,
["Nenhum"] = true,
["-"] = true,
["--"] = true,
[""] = true
}
function p.infobox(frame)
local args = frame:getParent().args
local sections = {
{
title = "INFORMAÇÃO BÁSICA",
fields = {
{"Nome", args["name"]},
{"Tamanho", args["size"]},
{"Tipo", args["type"]},
{"Subtipo", args["subtype"]},
{"Alinhamento", args["alignment"]},
{"Nível de Desafio", args["challenge_rating"]},
{"Divindade Padroeira", args["patron_deity"]},
{"Movimento", args["movement"]},
{"Visão", args["vision"]},
{"Ciclo Ativo", args["active_cycle"]},
{"Dieta", args["diet"]},
{"Tempo de Vida", args["lifespan"]},
{"Localidade", args["locality"]},
{"Linguagens", args["languages"]},
{"Subespécies", args["subspecies"]},
{"Clima", args["climate"]},
{"Terreno", args["terrain"]},
},
},
{
title = "APARÊNCIA",
fields = {
{"Altura", args["height"]},
{"Comprimento", args["length"]},
{"Envergadura da Asa", args["wingspan"]},
{"Peso", args["weight"]},
{"Cor da Pele", args["skin_color"]},
{"Cor do Cabelo", args["hair_color"]},
{"Tipo de Cabelo", args["hair_type"]},
{"Penas", args["feathers"]},
{"Cor de Olho", args["eye_color"]},
{"Tipo Corporal", args["body_type"]},
},
},
}
-- Início da infobox
local infobox = '<div style="width:22em; background:#f9f9f9; border:1px solid #aaa; float:right; padding:5px; font-size:90%;">'
-- Adiciona a imagem no topo, se fornecida
if args["image"] and args["image"] ~= "" then
infobox = infobox .. string.format(
'<div style="text-align:center; margin-bottom:10px;">%s</div>',
frame:preprocess(string.format('[[File:%s|center|frameless|200px]]', args["image"]))
)
end
-- Adiciona o nome da espécie
infobox = infobox .. string.format(
'<div style="text-align:center; background:#ccc; font-size:120%%; padding:4px;">%s</div>',
args["name"] or "NOME DA ESPÉCIE"
)
-- Adiciona as seções e os campos
for _, section in ipairs(sections) do
local sectionContent = {}
-- Monta os campos com conteúdo da seção
for _, field in ipairs(section.fields) do
local label, value = field[1], field[2]
-- Verifica se o valor é válido (não está na lista de ignorados)
if value and not ignoredValues[value:match("^%s*(.-)%s*$")] then
table.insert(sectionContent, string.format('<div style="padding:2px 5px;"><strong>%s:</strong> %s</div>', label, value))
end
end
-- Adiciona a seção somente se tiver conteúdo
if #sectionContent > 0 then
infobox = infobox .. string.format('<div style="text-align:center; background:#ddd; font-size:110%%; padding:4px; margin-top:5px;">%s</div>', section.title)
infobox = infobox .. table.concat(sectionContent)
end
end
infobox = infobox .. '</div>'
return infobox
end
return p