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 |
||
| (17 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
| Linha 1: | Linha 1: | ||
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 | |||
end | |||
local function | local function normalize_url(s) | ||
return s | s = N(s) | ||
if s == '' then return '' end | |||
s = s:gsub('[\r\n\t]', '') -- tira CR/LF/TAB | |||
s = s:gsub('%s+', '') -- tira espaços internos | |||
return s | |||
end | end | ||
function p. | -- {{#invoke:Changelog|item|title=...|description=...|date=...|link=...|icon=...|color=#FCE5CD}} | ||
local | function p.item(frame) | ||
local | local parent = frame:getParent() | ||
local a = (parent and parent.args) or frame.args or {} | |||
local title = N(a.title) | |||
local link = normalize_url(a.link) | |||
local date = N(a.date) | |||
local desc = N(a.description) | |||
local icon = N(a.icon) | |||
local color = N(a.color) | |||
local | local item = mw.html.create('div'):addClass('notice-item') | ||
if has(color) then item:css('--notice-color', color) end | |||
-- Ícones sem link | |||
local overlay_icon_wikitext, inline_icon_wikitext | |||
local | if has(icon) then | ||
local | local lower = icon:lower() | ||
local is_url = lower:find('://', 1, true) ~= nil | |||
local | local is_prefixed = lower:match('^file:') or lower:match('^image:') | ||
if | if is_url then | ||
-- | overlay_icon_wikitext = string.format('<img src="%s" alt="%s" class="notice-icon notice-icon--overlay" />', icon, title) | ||
inline_icon_wikitext = string.format('<img src="%s" alt="%s" class="notice-icon notice-icon--inline" />', icon, title) | |||
elseif is_prefixed then | |||
overlay_icon_wikitext = string.format('[[%s|alt=%s|class=notice-icon notice-icon--overlay|link=]]', icon, title) | |||
inline_icon_wikitext = string.format('[[%s|alt=%s|class=notice-icon notice-icon--inline|link=]]', icon, title) | |||
else | |||
overlay_icon_wikitext = string.format('[[File:%s|alt=%s|class=notice-icon notice-icon--overlay|link=]]', icon, title) | |||
inline_icon_wikitext = string.format('[[File:%s|alt=%s|class=notice-icon notice-icon--inline|link=]]', icon, title) | |||
end | end | ||
end | |||
local content = item:tag('div'):addClass('notice-content'):css('flex', '1') | |||
local content = | -- header | ||
if has(title) or has(date) then | |||
local header = content:tag('div'):addClass('notice-header') | |||
local left = header:tag('div'):addClass('notice-header-left') | |||
local right = header:tag('div'):addClass('notice-header-right') | |||
if | if inline_icon_wikitext then left:wikitext(inline_icon_wikitext) end | ||
if | if has(title) then | ||
local holder = left:tag('span'):addClass('notice-title') | |||
holder:tag('span'):addClass('notice-title-text'):wikitext(title) | |||
end | end | ||
if | if has(date) then | ||
right:tag('span'):addClass('notice-date'):wikitext(date) | |||
end | end | ||
end | |||
if has(desc) then | |||
content:tag('p'):addClass('notice-desc'):wikitext(desc) | |||
end | |||
-- guarda o link sem exibir texto | |||
if has(link) then | |||
content:tag('span') | |||
:addClass('notice-link') | |||
:css('display', 'none') | |||
:attr('data-url', link) | |||
end | end | ||
if | if overlay_icon_wikitext then item:wikitext(overlay_icon_wikitext) end | ||
return tostring( | return tostring(item) | ||
end | end | ||
return p | return p | ||
Edição atual tal como às 14h25min de 10 de setembro de 2025
A documentação para este módulo pode ser criada em Módulo:Changelog/doc
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 normalize_url(s)
s = N(s)
if s == '' then return '' end
s = s:gsub('[\r\n\t]', '') -- tira CR/LF/TAB
s = s:gsub('%s+', '') -- tira espaços internos
return s
end
-- {{#invoke:Changelog|item|title=...|description=...|date=...|link=...|icon=...|color=#FCE5CD}}
function p.item(frame)
local parent = frame:getParent()
local a = (parent and parent.args) or frame.args or {}
local title = N(a.title)
local link = normalize_url(a.link)
local date = N(a.date)
local desc = N(a.description)
local icon = N(a.icon)
local color = N(a.color)
local item = mw.html.create('div'):addClass('notice-item')
if has(color) then item:css('--notice-color', color) end
-- Ícones sem link
local overlay_icon_wikitext, inline_icon_wikitext
if has(icon) then
local lower = icon:lower()
local is_url = lower:find('://', 1, true) ~= nil
local is_prefixed = lower:match('^file:') or lower:match('^image:')
if is_url then
overlay_icon_wikitext = string.format('<img src="%s" alt="%s" class="notice-icon notice-icon--overlay" />', icon, title)
inline_icon_wikitext = string.format('<img src="%s" alt="%s" class="notice-icon notice-icon--inline" />', icon, title)
elseif is_prefixed then
overlay_icon_wikitext = string.format('[[%s|alt=%s|class=notice-icon notice-icon--overlay|link=]]', icon, title)
inline_icon_wikitext = string.format('[[%s|alt=%s|class=notice-icon notice-icon--inline|link=]]', icon, title)
else
overlay_icon_wikitext = string.format('[[File:%s|alt=%s|class=notice-icon notice-icon--overlay|link=]]', icon, title)
inline_icon_wikitext = string.format('[[File:%s|alt=%s|class=notice-icon notice-icon--inline|link=]]', icon, title)
end
end
local content = item:tag('div'):addClass('notice-content'):css('flex', '1')
-- header
if has(title) or has(date) then
local header = content:tag('div'):addClass('notice-header')
local left = header:tag('div'):addClass('notice-header-left')
local right = header:tag('div'):addClass('notice-header-right')
if inline_icon_wikitext then left:wikitext(inline_icon_wikitext) end
if has(title) then
local holder = left:tag('span'):addClass('notice-title')
holder:tag('span'):addClass('notice-title-text'):wikitext(title)
end
if has(date) then
right:tag('span'):addClass('notice-date'):wikitext(date)
end
end
if has(desc) then
content:tag('p'):addClass('notice-desc'):wikitext(desc)
end
-- guarda o link sem exibir texto
if has(link) then
content:tag('span')
:addClass('notice-link')
:css('display', 'none')
:attr('data-url', link)
end
if overlay_icon_wikitext then item:wikitext(overlay_icon_wikitext) end
return tostring(item)
end
return p