Mudanças entre as edições de "Módulo:Info"

De Wiki Gla
Ir para navegação Ir para pesquisar
m
m
 
(45 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 1: Linha 1:
-- Módulo:Info — resolve metadados e skills (robusto)
-- Módulo:Info — resolve metadados e skills (com Subskill e cores inline)
-- Este módulo re-exporta funções dos submódulos para manter compatibilidade
local p = {}
local p = {}


-- ===== util =====
-- Importar submódulos
local function trim(s) return (tostring(s or ""):gsub("^%s+",""):gsub("%s+$","")) end
local utils = require("Módulo:Info.Utils")
local function safeArgs(node) return (node and node.args) or {} end
local skills = require("Módulo:Info.Skills")
local expand = require("Módulo:Info.Expand")


-- tenta require em Módulo: e, se falhar, em Module:
-- Re-exportar funções de utils (para compatibilidade caso alguém use diretamente)
local function requireCharacterModule(charName)
p.trim = utils.trim
  charName = trim(charName)
p.safeArgs = utils.safeArgs
  if charName == "" then return nil end
p.collectJsonObjects = utils.collectJsonObjects
  local ok, data = pcall(function() return require("Módulo:" .. charName) end)
p.requireCharacterModule = utils.requireCharacterModule
  if ok and type(data) == "table" then return data end
p.resolveCharFromFrames = utils.resolveCharFromFrames
  ok, data = pcall(function() return require("Module:" .. charName) end)
p.colorize = utils.colorize
  if ok and type(data) == "table" then return data end
p.I18N = utils.I18N
  return nil
p.COLOR = utils.COLOR
end


-- sobe na árvore de frames para tentar achar |nome= da Predef:Character
-- Re-exportar funções de skills
local function resolveCharFromFrames(frame, a)
p.skill = skills.skill
  -- 1) explícito na própria Skill
p.subskill = skills.subskill
  if a.char and trim(a.char) ~= "" then return trim(a.char) end
p.emote = skills.emote
p.weapon = skills.weapon


  -- 2) pai imediato
-- Re-exportar funções de expand
  local p1 = frame:getParent()
p.getTier = expand.getTier
  if p1 then
p.getTags = expand.getTags
    local ap1 = safeArgs(p1)
p.expandTier = expand.expandTier
    if ap1.char and trim(ap1.char) ~= "" then return trim(ap1.char) end
p.expandTags = expand.expandTags
    if ap1.nome and trim(ap1.nome) ~= "" then return trim(ap1.nome) end
 
    -- 3) avô (a Predef:Character costuma estar aqui)
    -- >>> FIX AQUI: usar ponto para checar existência do método
    local p2 = p1.getParent and p1:getParent()
    if p2 then
      local ap2 = safeArgs(p2)
      if ap2.char and trim(ap2.char) ~= "" then return trim(ap2.char) end
      if ap2.nome and trim(ap2.nome) ~= "" then return trim(ap2.nome) end
    end
  end
 
  -- 4) fallback final: título da página (ex.: "Kalifa")
  local title = mw.title.getCurrentTitle()
  return title and trim(title.text) or ""
end
 
-- paleta de cores pros marcadores
local COLOR = {
  debuff = "#ff5252", -- vermelho
  atk    = "#ffcc00", -- laranja
  def    = "#64b5f6", -- azul (defesa)
  ms    = "#43a047", -- verde (move speed)
  hp    = "#42a5f5", -- azul claro (vida/shield/heal)
  sec    = "#ffcc00", -- tempo
}
 
local function colorize(txt)
  if not txt or txt == "" then return "" end
  return (txt:gsub("{{(%a+):([^}]+)}}", function(tag, inner)
    local hex = COLOR[tag]
    if not hex then return "{{" .. tag .. ":" .. inner .. "}}" end
    return string.format('<span style="color:%s;">%s</span>', hex, inner)
  end))
end
 
-- ===== API =====
 
function p.getTier(frame)
  local a    = safeArgs(frame)
  local char = resolveCharFromFrames(frame, a)
  local data = requireCharacterModule(char) or {}
  return trim(data.tier or "")
end
 
function p.getTags(frame)
  local a    = safeArgs(frame)
  local char = resolveCharFromFrames(frame, a)
  local data = requireCharacterModule(char) or {}
  local tags = data.tags or {}
  if type(tags) ~= "table" then return "" end
  return trim(table.concat(tags, " / "))
end
 
-- Gera o JSON de UMA skill (usado por Predef:Skill)
function p.skill(frame)
  local a    = safeArgs(frame)
  local m    = tonumber(a.M) or 0
  local lang  = trim((a.lang or (frame:getParent() and frame:getParent().args.lang) or "pt"):lower())
  local char  = resolveCharFromFrames(frame, a)
 
  local data  = requireCharacterModule(char) or {}
  local order = data.order or {}
  local key  = order[m] or ""              -- ex.: "Kick"
  local sk    = (data.skills or {})[key] or {}
 
  -- name/desc multilíngue
  local name  = trim(sk.name or key or "")
  local desc  = ""
  if type(sk.desc) == "table" then
    desc = sk.desc[lang] or sk.desc["pt"] or ""
  else
    desc = sk.desc or ""
  end
  desc = colorize(desc)
 
  -- monta objeto final juntando com os NÚMEROS vindos da predef
  local function nz(v) v = v or "" return (trim(v) ~= "" and v or nil) end
  local obj = {
    name    = name,
    icon    = (trim(a.icon or "")  ~= "" and a.icon  or "Nada.png"),
    level    = (trim(a.level or "") ~= "" and a.level or "NIVEL"),
    desc    = desc,
    energy  = nz(a.energy),
    powerpve = nz(a.powerpve),
    powerpvp = nz(a.powerpvp),
    cooldown = nz(a.cooldown),
    video    = a.video or "",
  }
 
  return mw.text.jsonEncode(obj)
end


return p
return p

Edição atual tal como às 00h18min de 27 de novembro de 2025

A documentação para este módulo pode ser criada em Módulo:Info/doc

-- Módulo:Info — resolve metadados e skills (com Subskill e cores inline)
-- Este módulo re-exporta funções dos submódulos para manter compatibilidade
local p = {}

-- Importar submódulos
local utils = require("Módulo:Info.Utils")
local skills = require("Módulo:Info.Skills")
local expand = require("Módulo:Info.Expand")

-- Re-exportar funções de utils (para compatibilidade caso alguém use diretamente)
p.trim = utils.trim
p.safeArgs = utils.safeArgs
p.collectJsonObjects = utils.collectJsonObjects
p.requireCharacterModule = utils.requireCharacterModule
p.resolveCharFromFrames = utils.resolveCharFromFrames
p.colorize = utils.colorize
p.I18N = utils.I18N
p.COLOR = utils.COLOR

-- Re-exportar funções de skills
p.skill = skills.skill
p.subskill = skills.subskill
p.emote = skills.emote
p.weapon = skills.weapon

-- Re-exportar funções de expand
p.getTier = expand.getTier
p.getTags = expand.getTags
p.expandTier = expand.expandTier
p.expandTags = expand.expandTags

return p