Mudanças entre as edições de "Módulo:Larifk"
Ir para navegação
Ir para pesquisar
Etiqueta: Revertido |
|||
| Linha 9: | Linha 9: | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
local nome = mw.text.trim(args['nome'] or '') | local nome = mw.text.trim(args['nome'] or '') | ||
local uid = 'lk' .. math.random(10000, 99999) | |||
local root = mw.html.create('div'):attr('class', 'lk-wrap') | local root = mw.html.create('div'):attr('class', 'lk-wrap') | ||
| Linha 27: | Linha 28: | ||
if #baus == 0 then return tostring(root) end | if #baus == 0 then return tostring(root) end | ||
-- Radio inputs ocultos para tabs principais | |||
for idx, n in ipairs(baus) do | |||
local radio = root:tag('input') | |||
:attr('type', 'radio') | |||
:attr('name', uid .. '-tab') | |||
:attr('id', uid .. '-tab-' .. n) | |||
:attr('class', 'lk-radio') | |||
if idx == 1 then radio:attr('checked', 'checked') end | |||
end | |||
-- Tab labels | |||
local tabs = root:tag('div'):attr('class', 'lk-tabs') | local tabs = root:tag('div'):attr('class', 'lk-tabs') | ||
for idx, n in ipairs(baus) do | for idx, n in ipairs(baus) do | ||
local tipo = mw.text.trim(args['bau' .. n .. 'tipo'] or '') | local tipo = mw.text.trim(args['bau' .. n .. 'tipo'] or '') | ||
local tabImg = BAU_IMAGENS[tipo] or '' | local tabImg = BAU_IMAGENS[tipo] or '' | ||
local | local label = tabs:tag('label') | ||
:attr('class', | :attr('class', 'lk-tab') | ||
:attr(' | :attr('for', uid .. '-tab-' .. n) | ||
if tabImg ~= '' then | if tabImg ~= '' then | ||
label:node(mw.html.create(''):wikitext('[[File:' .. tabImg .. '|20px|link=]]')) | |||
end | end | ||
label:tag('span'):wikitext('Baú ' .. string.format('%02d', n)) | |||
end | end | ||
-- Painéis | |||
for idx, n in ipairs(baus) do | for idx, n in ipairs(baus) do | ||
local px | local px = 'bau' .. n | ||
local tipo | local tipo = mw.text.trim(args[px .. 'tipo'] or '') | ||
local video | local video = mw.text.trim(args[px .. 'video'] or '') | ||
local rota | local rota = mw.text.trim(args[px .. 'rota'] or '') | ||
local panel = root:tag('div') | local panel = root:tag('div') | ||
:attr('class', | :attr('class', 'lk-panel') | ||
:attr(' | :attr('id', uid .. '-panel-' .. n) | ||
-- Recompensas | |||
local rsec = panel:tag('div') | local rsec = panel:tag('div') | ||
rsec:tag('div'):attr('class', 'lk-slabel'):wikitext('Recompensas') | rsec:tag('div'):attr('class', 'lk-slabel'):wikitext('Recompensas') | ||
| Linha 77: | Linha 91: | ||
end | end | ||
-- Seção "Como chegar" | |||
if video ~= '' or rota ~= '' then | if video ~= '' or rota ~= '' then | ||
panel:tag('div'):attr('class', 'lk-divider') | panel:tag('div'):attr('class', 'lk-divider') | ||
local csec = panel:tag('div') | local csec = panel:tag('div'):attr('class', 'lk-media-section') | ||
csec:tag('div'):attr('class', 'lk-slabel'):wikitext('Como chegar') | csec:tag('div'):attr('class', 'lk-slabel'):wikitext('Como chegar') | ||
local subuid = uid .. 'c' .. n | |||
-- Sub-radios | |||
if video ~= '' then | |||
local vr = csec:tag('input') | |||
:attr('type', 'radio') | |||
:attr('name', subuid) | |||
:attr('id', subuid .. '-v') | |||
:attr('class', 'lk-radio') | |||
:attr('checked', 'checked') | |||
end | |||
if rota ~= '' and video == '' then | |||
csec:tag('input') | |||
:attr('type', 'radio') | |||
:attr('name', subuid) | |||
:attr('id', subuid .. '-r') | |||
:attr('class', 'lk-radio') | |||
:attr('checked', 'checked') | |||
elseif rota ~= '' then | |||
csec:tag('input') | |||
:attr('type', 'radio') | |||
:attr('name', subuid) | |||
:attr('id', subuid .. '-r') | |||
:attr('class', 'lk-radio') | |||
end | |||
local ctabs = csec:tag('div'):attr('class', 'lk-ctabs') | local ctabs = csec:tag('div'):attr('class', 'lk-ctabs') | ||
if video ~= '' then | if video ~= '' then | ||
ctabs:tag(' | ctabs:tag('label') | ||
:attr('class', 'lk-ctab | :attr('class', 'lk-ctab') | ||
:attr(' | :attr('for', subuid .. '-v') | ||
:wikitext('Vídeo') | :wikitext('Vídeo') | ||
end | end | ||
if rota ~= '' then | if rota ~= '' then | ||
ctabs:tag(' | ctabs:tag('label') | ||
:attr('class', | :attr('class', 'lk-ctab') | ||
:attr(' | :attr('for', subuid .. '-r') | ||
:wikitext('Imagem') | :wikitext('Imagem') | ||
end | end | ||
| Linha 98: | Linha 139: | ||
if video ~= '' then | if video ~= '' then | ||
local vpanel = csec:tag('div') | local vpanel = csec:tag('div') | ||
:attr('class', 'lk-cpanel | :attr('class', 'lk-cpanel') | ||
:attr(' | :attr('id', subuid .. '-vp') | ||
vpanel:tag('div'):attr('class', 'lk-media-wrap') | |||
:tag('iframe') | |||
:attr('src', 'https://www.youtube.com/embed/' .. video) | |||
:attr('allowfullscreen', '') | |||
:attr('frameborder', '0') | |||
end | end | ||
if rota ~= '' then | if rota ~= '' then | ||
local rpanel = csec:tag('div') | local rpanel = csec:tag('div') | ||
:attr('class', | :attr('class', 'lk-cpanel') | ||
:attr(' | :attr('id', subuid .. '-rp') | ||
local slider = rpanel:tag('div'):attr('class', 'lk-slider') | local slider = rpanel:tag('div'):attr('class', 'lk-slider') | ||
local track = slider:tag('div'):attr('class', 'lk-slider-track') | local track = slider:tag('div'):attr('class', 'lk-slider-track') | ||
local imgs = mw.text.split(rota, '%s*,%s*') | local imgs = mw.text.split(rota, '%s*,%s*') | ||
local total = 0 | local total = 0 | ||
| Linha 122: | Linha 165: | ||
end | end | ||
end | end | ||
-- Nota: slider prev/next ainda precisa JS, mas as imagens aparecem | |||
if total > 1 then | if total > 1 then | ||
slider:tag('span') | slider:tag('span') | ||
:attr('class', 'lk-slide-counter') | :attr('class', 'lk-slide-counter') | ||
:wikitext('1 / ' .. total) | :wikitext('1 / ' .. total) | ||
end | end | ||
Edição das 21h11min de 16 de março de 2026
A documentação para este módulo pode ser criada em Módulo:Larifk/doc
local p = {}
local BAU_IMAGENS = {
comum = 'CommonChest.png',
ouro = 'GoldChest.png'
}
function p.render(frame)
local args = frame:getParent().args
local nome = mw.text.trim(args['nome'] or '')
local uid = 'lk' .. math.random(10000, 99999)
local root = mw.html.create('div'):attr('class', 'lk-wrap')
if nome ~= '' then
root:tag('div'):attr('class', 'lk-titulo'):wikitext(nome)
end
local baus = {}
local i = 1
while true do
local tipo = mw.text.trim(args['bau' .. i .. 'tipo'] or '')
if tipo == '' then break end
baus[#baus + 1] = i
i = i + 1
end
if #baus == 0 then return tostring(root) end
-- Radio inputs ocultos para tabs principais
for idx, n in ipairs(baus) do
local radio = root:tag('input')
:attr('type', 'radio')
:attr('name', uid .. '-tab')
:attr('id', uid .. '-tab-' .. n)
:attr('class', 'lk-radio')
if idx == 1 then radio:attr('checked', 'checked') end
end
-- Tab labels
local tabs = root:tag('div'):attr('class', 'lk-tabs')
for idx, n in ipairs(baus) do
local tipo = mw.text.trim(args['bau' .. n .. 'tipo'] or '')
local tabImg = BAU_IMAGENS[tipo] or ''
local label = tabs:tag('label')
:attr('class', 'lk-tab')
:attr('for', uid .. '-tab-' .. n)
if tabImg ~= '' then
label:node(mw.html.create(''):wikitext('[[File:' .. tabImg .. '|20px|link=]]'))
end
label:tag('span'):wikitext('Baú ' .. string.format('%02d', n))
end
-- Painéis
for idx, n in ipairs(baus) do
local px = 'bau' .. n
local tipo = mw.text.trim(args[px .. 'tipo'] or '')
local video = mw.text.trim(args[px .. 'video'] or '')
local rota = mw.text.trim(args[px .. 'rota'] or '')
local panel = root:tag('div')
:attr('class', 'lk-panel')
:attr('id', uid .. '-panel-' .. n)
-- Recompensas
local rsec = panel:tag('div')
rsec:tag('div'):attr('class', 'lk-slabel'):wikitext('Recompensas')
local grid = rsec:tag('div'):attr('class', 'lk-rewards')
local j = 1
while true do
local qty = mw.text.trim(args[px .. 'reward' .. j] or '')
local rimg = mw.text.trim(args[px .. 'rewardimg' .. j] or '')
if qty == '' and rimg == '' then break end
local item = grid:tag('div'):attr('class', 'lk-reward')
local sprite = item:tag('div'):attr('class', 'lk-rsprite')
if rimg ~= '' then
sprite:node(mw.html.create(''):wikitext('[[File:' .. rimg .. '|36px|link=]]'))
end
if qty ~= '' then
local num, sufixo = qty:match('^(%d+)(.*)')
if num then
local qspan = item:tag('span'):attr('class', 'lk-rqty')
qspan:tag('span'):attr('class', 'lk-rqty-num'):wikitext(num)
qspan:tag('span'):attr('class', 'lk-rqty-x'):wikitext(sufixo ~= '' and sufixo or 'x')
else
item:tag('span'):attr('class', 'lk-rqty'):wikitext(qty)
end
end
j = j + 1
end
-- Seção "Como chegar"
if video ~= '' or rota ~= '' then
panel:tag('div'):attr('class', 'lk-divider')
local csec = panel:tag('div'):attr('class', 'lk-media-section')
csec:tag('div'):attr('class', 'lk-slabel'):wikitext('Como chegar')
local subuid = uid .. 'c' .. n
-- Sub-radios
if video ~= '' then
local vr = csec:tag('input')
:attr('type', 'radio')
:attr('name', subuid)
:attr('id', subuid .. '-v')
:attr('class', 'lk-radio')
:attr('checked', 'checked')
end
if rota ~= '' and video == '' then
csec:tag('input')
:attr('type', 'radio')
:attr('name', subuid)
:attr('id', subuid .. '-r')
:attr('class', 'lk-radio')
:attr('checked', 'checked')
elseif rota ~= '' then
csec:tag('input')
:attr('type', 'radio')
:attr('name', subuid)
:attr('id', subuid .. '-r')
:attr('class', 'lk-radio')
end
local ctabs = csec:tag('div'):attr('class', 'lk-ctabs')
if video ~= '' then
ctabs:tag('label')
:attr('class', 'lk-ctab')
:attr('for', subuid .. '-v')
:wikitext('Vídeo')
end
if rota ~= '' then
ctabs:tag('label')
:attr('class', 'lk-ctab')
:attr('for', subuid .. '-r')
:wikitext('Imagem')
end
if video ~= '' then
local vpanel = csec:tag('div')
:attr('class', 'lk-cpanel')
:attr('id', subuid .. '-vp')
vpanel:tag('div'):attr('class', 'lk-media-wrap')
:tag('iframe')
:attr('src', 'https://www.youtube.com/embed/' .. video)
:attr('allowfullscreen', '')
:attr('frameborder', '0')
end
if rota ~= '' then
local rpanel = csec:tag('div')
:attr('class', 'lk-cpanel')
:attr('id', subuid .. '-rp')
local slider = rpanel:tag('div'):attr('class', 'lk-slider')
local track = slider:tag('div'):attr('class', 'lk-slider-track')
local imgs = mw.text.split(rota, '%s*,%s*')
local total = 0
for _, imgname in ipairs(imgs) do
imgname = mw.text.trim(imgname)
if imgname ~= '' then
local slide = track:tag('div'):attr('class', 'lk-slide')
slide:node(mw.html.create(''):wikitext('[[File:' .. imgname .. '|link=]]'))
total = total + 1
end
end
-- Nota: slider prev/next ainda precisa JS, mas as imagens aparecem
if total > 1 then
slider:tag('span')
:attr('class', 'lk-slide-counter')
:wikitext('1 / ' .. total)
end
end
end
end
return tostring(root)
end
return p