Mudanças entre as edições de "Módulo:Changelog"
Ir para navegação
Ir para pesquisar
(Criou página com '-- Módulo:Changelog — gera HTML do changelog a partir de itemN_* params local p = {} local function getArgs(frame) -- pega args do parent quando chamado via predef loc...') |
m |
||
| Linha 1: | Linha 1: | ||
-- Módulo:Changelog — | -- Módulo:Changelog — renderiza UMA linha do changelog (sem limite de quantidade) | ||
local p = {} | local p = {} | ||
local function | local function N(s) return s and mw.text.trim(tostring(s)) or '' end | ||
local function has(s) return N(s) ~= '' end | |||
local function param(args, ...) | |||
return | for i = 1, select('#', ...) do | ||
local k = select(i, ...) | |||
if has(args[k]) then return N(args[k]) end | |||
end | |||
return '' | |||
end | end | ||
function p.item(frame) | |||
local args = frame:getParent() and frame:getParent().args or frame.args | |||
local title = param(args, 'title','titulo','título') | |||
local args = | local link = param(args, 'link','url') | ||
local | local date = param(args, 'date','data') | ||
local desc = param(args, 'description','desc','descricao','descrição') | |||
local icon = param(args, 'icon','icone','ícone','image') | |||
local color = param(args, 'color','cor') | |||
local item = mw.html.create('div') | |||
:addClass('notice-item') | |||
:css('display','flex') | |||
:css('align-items','flex-start') | |||
:css('background','#fff') | |||
:css('border','1px solid #ddd') | |||
:css('border-radius','6px') | |||
:css('margin-bottom','10px') | |||
:css('padding','8px 10px') | |||
:css('box-sizing','border-box') | |||
:css('border-left','5px solid var(--notice-color, #f5b700)') | |||
if has(color) then item:css('--notice-color', color) end | |||
local content = item:tag('div'):addClass('notice-content'):css('flex','1') | |||
if | if has(title) then | ||
local titleNode | |||
if has(link) then | |||
titleNode = content:tag('a') | |||
:addClass('notice-title') | :addClass('notice-title') | ||
:attr(' | :attr('href', link):attr('target','_blank') | ||
:css('text-decoration','none') | |||
else | |||
titleNode = content:tag('span'):addClass('notice-title') | |||
end | end | ||
titleNode | |||
:css('display','block') | |||
:css('font-size','1.3em') | |||
:css('font-weight','bold') | |||
:css('color','#333') | |||
:css('margin','0') | |||
:wikitext(title) | |||
end | |||
if has(date) then | |||
content:tag('div') | |||
:addClass('notice-date') | |||
:css('font-size','0.9em') | |||
:css('color','#888') | |||
:css('margin','-5px 0') | |||
:wikitext(date) | |||
end | |||
if has(desc) then | |||
content:tag('p') | |||
:addClass('notice-desc') | |||
:css('color','#555') | |||
:css('line-height','1.3') | |||
:css('margin','0') | |||
:wikitext(desc) | |||
end | end | ||
if | if has(icon) then | ||
- | item:tag('img') | ||
:addClass('notice-icon') | |||
:css(' | :attr('src', icon) | ||
: | :attr('alt', title or '') | ||
:css('object-fit','contain') | |||
:css('flex-shrink','0') | |||
end | end | ||
return tostring( | return tostring(item) | ||
end | end | ||
return p | return p | ||
Edição das 18h21min de 2 de setembro de 2025
A documentação para este módulo pode ser criada em Módulo:Changelog/doc
-- Módulo:Changelog — renderiza UMA linha do changelog (sem limite de quantidade)
local p = {}
local function N(s) return s and mw.text.trim(tostring(s)) or '' end
local function has(s) return N(s) ~= '' end
local function param(args, ...)
for i = 1, select('#', ...) do
local k = select(i, ...)
if has(args[k]) then return N(args[k]) end
end
return ''
end
function p.item(frame)
local args = frame:getParent() and frame:getParent().args or frame.args
local title = param(args, 'title','titulo','título')
local link = param(args, 'link','url')
local date = param(args, 'date','data')
local desc = param(args, 'description','desc','descricao','descrição')
local icon = param(args, 'icon','icone','ícone','image')
local color = param(args, 'color','cor')
local item = mw.html.create('div')
:addClass('notice-item')
:css('display','flex')
:css('align-items','flex-start')
:css('background','#fff')
:css('border','1px solid #ddd')
:css('border-radius','6px')
:css('margin-bottom','10px')
:css('padding','8px 10px')
:css('box-sizing','border-box')
:css('border-left','5px solid var(--notice-color, #f5b700)')
if has(color) then item:css('--notice-color', color) end
local content = item:tag('div'):addClass('notice-content'):css('flex','1')
if has(title) then
local titleNode
if has(link) then
titleNode = content:tag('a')
:addClass('notice-title')
:attr('href', link):attr('target','_blank')
:css('text-decoration','none')
else
titleNode = content:tag('span'):addClass('notice-title')
end
titleNode
:css('display','block')
:css('font-size','1.3em')
:css('font-weight','bold')
:css('color','#333')
:css('margin','0')
:wikitext(title)
end
if has(date) then
content:tag('div')
:addClass('notice-date')
:css('font-size','0.9em')
:css('color','#888')
:css('margin','-5px 0')
:wikitext(date)
end
if has(desc) then
content:tag('p')
:addClass('notice-desc')
:css('color','#555')
:css('line-height','1.3')
:css('margin','0')
:wikitext(desc)
end
if has(icon) then
item:tag('img')
:addClass('notice-icon')
:attr('src', icon)
:attr('alt', title or '')
:css('object-fit','contain')
:css('flex-shrink','0')
end
return tostring(item)
end
return p