Módulo:Conquistas
Ir para navegação
Ir para pesquisar
A documentação para este módulo pode ser criada em Módulo:Conquistas/doc
local p = {}
local VALID_TAGS = {
geral = true,
personagens = true,
missao = true,
bau = true,
navegacao = true,
pvp = true,
pve = true,
coliseu = true,
poneglyph = true,
indicacao = true,
celular = true,
bossrush = true,
}
local function trim(s)
return mw.text.trim(s or "")
end
local function normalizeTag(tag)
local t = trim(tag):lower()
if t == "" or not VALID_TAGS[t] then
return "geral"
end
return t
end
local function normalizeImageName(name)
local clean = trim(name)
if clean == "" then return "conquistafoosha.png" end
if clean:match("%.%w+$") then return clean end
return clean .. ".png"
end
local function parseRewardString(s)
local entries = {}
s = trim(s)
if s == "" then return entries end
for entry in mw.text.gsplit(s, ";", true) do
local clean = trim(entry)
if clean ~= "" then
local ident, qtdStr = clean:match("^(.-)%s*:%s*(%-?%d+)$")
if ident and qtdStr then
ident = trim(ident)
local qtd = tonumber(qtdStr)
if ident ~= "" and qtd then
table.insert(entries, { ident = ident, qtd = qtd })
end
end
end
end
return entries
end
local function toRewardItensFormat(list)
local parts = {}
for _, e in ipairs(list) do
table.insert(parts, e.ident .. ";" .. tostring(e.qtd))
end
return table.concat(parts, ", ")
end
local function getArgs(frame)
local args = frame.args or {}
if not next(args) and frame:getParent() then
args = frame:getParent().args or {}
end
return args
end
function p.card(frame)
local args = getArgs(frame)
local name = trim(args.name)
local cardType = trim(args.type)
local tag = normalizeTag(cardType ~= "" and cardType or args.tag)
local icon = normalizeImageName(args.icon)
local desc = trim(args.desc)
local reward = trim(args.reward)
local lang = trim(args.lang)
if lang == "" then lang = "pt" end
if name == "" then name = "Titulo da Conquista" end
if desc == "" then desc = "Descricao da conquista." end
local card = mw.html.create("div")
:addClass("gla-item")
:attr("data-tab", tag)
local left = card:tag("div"):addClass("gla-item-left")
left:tag("div")
:addClass("gla-item-icon")
:wikitext(string.format("[[File:%s|56px|alt=%s|link=]]", icon, name))
local textWrap = left:tag("div")
textWrap:tag("div"):addClass("gla-item-title"):wikitext(name)
textWrap:tag("div"):addClass("gla-item-desc"):wikitext(desc)
local rewardList = parseRewardString(reward)
if #rewardList > 0 then
local itensStr = toRewardItensFormat(rewardList)
local rewardWiki = string.format("{{Reward|itens=%s|lang=%s}}", itensStr, lang)
local rewardHtml = frame:preprocess(rewardWiki)
card:tag("div")
:addClass("gla-item-reward")
:wikitext("Recompensa: " .. rewardHtml)
end
return tostring(card)
end
-- Compatibilidade com chamadas antigas
p.render = p.card
return p