Mudanças entre as edições de "Módulo:Skillbox"
Ir para navegação
Ir para pesquisar
| Linha 2: | Linha 2: | ||
-- Lê uma skill formatada com Nome, Descrição, Vídeo | -- Lê uma skill formatada com Nome, Descrição, Vídeo | ||
function parseSkill(text) | local function parseSkill(text) | ||
local skill = { nome = '', descricao = '', video = '' } | local skill = { nome = '', descricao = '', video = '' } | ||
for line in mw.text.gsplit(text, '\n', true) do | for line in mw.text.gsplit(text, '\n', true) do | ||
local chave, valor = line:match("^%s*(.-)%s*=%s*(.-)%s*$") | local chave, valor = line:match("^%s*(.-)%s*=%s*(.-)%s*$") | ||
| Linha 19: | Linha 18: | ||
end | end | ||
end | end | ||
return skill | return skill | ||
end | end | ||
function p.exibir(frame) | function p.exibir(frame) | ||
local | local raw = frame:getParent().args | ||
local skills = {} | local skills = {} | ||
for | -- Agora usamos ipairs para pegar cada bloco |skill=... | ||
if type( | for i, block in ipairs(raw) do | ||
table.insert(skills, parseSkill( | if type(block) == "string" and block:find("nome%s*=") then | ||
table.insert(skills, parseSkill(block)) | |||
end | end | ||
end | end | ||
local html = mw.html.create("div") | local html = mw.html.create("div"):addClass("skillbox-container") | ||
local tabs = html:tag("div"):addClass("skillbox-tabs") | local tabs = html:tag("div"):addClass("skillbox-tabs") | ||
local content = html:tag("div"):addClass("skillbox-content") | local content = html:tag("div"):addClass("skillbox-content") | ||
| Linha 42: | Linha 39: | ||
local id = "skill" .. i | local id = "skill" .. i | ||
-- Aba | |||
tabs:tag("button") | tabs:tag("button") | ||
:addClass("skillbox-tab") | :addClass("skillbox-tab") | ||
| Linha 48: | Linha 46: | ||
:wikitext(skill.nome or ("Skill " .. i)) | :wikitext(skill.nome or ("Skill " .. i)) | ||
-- Painel | |||
local panel = content:tag("div") | local panel = content:tag("div") | ||
:addClass("skillbox-panel") | :addClass("skillbox-panel") | ||
| Linha 59: | Linha 58: | ||
if skill.video and skill.video ~= "" then | if skill.video and skill.video ~= "" then | ||
local src = mw.text.trim(skill.video) | local src = mw.text.trim(skill.video) | ||
panel:tag("video") | panel:tag("video") | ||
:addClass("skillbox-video") | :addClass("skillbox-video") | ||
:attr("controls", "true") | :attr("controls", "true") | ||
:tag("source") | :tag("source") | ||
:attr("src", "https://wiki.gla.com.br/index.php/Special:FilePath/" .. src) | |||
:attr("type", "video/mp4") | |||
end | end | ||
end | end | ||
Edição das 02h59min de 23 de maio de 2025
A documentação para este módulo pode ser criada em Módulo:Skillbox/doc
local p = {}
-- Lê uma skill formatada com Nome, Descrição, Vídeo
local function parseSkill(text)
local skill = { nome = '', descricao = '', video = '' }
for line in mw.text.gsplit(text, '\n', true) do
local chave, valor = line:match("^%s*(.-)%s*=%s*(.-)%s*$")
if chave and valor then
chave = mw.text.trim(chave:lower())
valor = mw.text.trim(valor)
if chave == "nome" then
skill.nome = valor
elseif chave == "descrição" or chave == "descricao" then
skill.descricao = valor
elseif chave == "vídeo" or chave == "video" then
skill.video = valor
end
end
end
return skill
end
function p.exibir(frame)
local raw = frame:getParent().args
local skills = {}
-- Agora usamos ipairs para pegar cada bloco |skill=...
for i, block in ipairs(raw) do
if type(block) == "string" and block:find("nome%s*=") then
table.insert(skills, parseSkill(block))
end
end
local html = mw.html.create("div"):addClass("skillbox-container")
local tabs = html:tag("div"):addClass("skillbox-tabs")
local content = html:tag("div"):addClass("skillbox-content")
for i, skill in ipairs(skills) do
local id = "skill" .. i
-- Aba
tabs:tag("button")
:addClass("skillbox-tab")
:addClass(i == 1 and "active" or "")
:attr("data-target", id)
:wikitext(skill.nome or ("Skill " .. i))
-- Painel
local panel = content:tag("div")
:addClass("skillbox-panel")
:addClass(i == 1 and "active" or "")
:attr("id", id)
panel:tag("div")
:addClass("skillbox-desc")
:wikitext(skill.descricao or "")
if skill.video and skill.video ~= "" then
local src = mw.text.trim(skill.video)
panel:tag("video")
:addClass("skillbox-video")
:attr("controls", "true")
:tag("source")
:attr("src", "https://wiki.gla.com.br/index.php/Special:FilePath/" .. src)
:attr("type", "video/mp4")
end
end
return tostring(html)
end
return p