Модуль:PageHero
Для документации этого модуля может быть создана страница Модуль:PageHero/doc
-- Module:PageHero
-- Generates hero header data for SiberiaSkin.
-- Usage: {{#invoke:PageHero|hero|kicker=...|title-before=...|...}}
local p = {}
-- Split a string by newline, trim each part, skip empty
local function splitLines( s )
local result = {}
for line in s:gmatch( '[^\n]+' ) do
local trimmed = mw.text.trim( line )
if trimmed ~= '' then
result[#result + 1] = trimmed
end
end
return result
end
function p.hero( frame )
local args = frame.args
-- fall back to parent (template) args
if not args.kicker then
args = frame:getParent().args
end
local accent = args['accent-color'] or '#ff6677'
local titleBefore = mw.text.trim( args['title-before'] or '' )
local titleAccent = mw.text.trim( args['title-accent'] or '' )
local titleAfter = mw.text.trim( args['title-after'] or '' )
-- Hidden data div (consumed by JS)
local out = '<div class="ss-hero-data"'
if args.kicker then
out = out .. ' data-kicker="' .. mw.text.trim( args.kicker ) .. '"'
end
if args.lede then
out = out .. ' data-lede="' .. mw.text.trim( args.lede ) .. '"'
end
out = out .. ' data-accent="' .. accent .. '"'
if titleBefore ~= '' then
out = out .. ' data-title-before="' .. titleBefore .. '"'
end
if titleAccent ~= '' then
out = out .. ' data-title-accent="' .. titleAccent .. '"'
end
if titleAfter ~= '' then
out = out .. ' data-title-after="' .. titleAfter .. '"'
end
out = out .. '></div>\n'
-- Dossier panel (if header provided)
if args['dossier-header'] then
out = out .. '<div class="ss-hero-dossier">\n'
out = out .. '<div class="ss-dossier-stripe"></div>\n'
out = out .. '<div class="ss-dossier-head">'
out = out .. '<span>' .. mw.text.trim( args['dossier-header'] ) .. '</span>'
if args['dossier-level'] then
out = out .. '<span class="ss-dossier-level">'
.. mw.text.trim( args['dossier-level'] ) .. '</span>'
end
out = out .. '</div>\n'
-- Rows: key and val are multi-line strings, paired by line number
local rawKey = args.key or ''
local rawVal = args.val or ''
local keys = splitLines( rawKey )
local vals = splitLines( rawVal )
local count = math.max( #keys, #vals )
if count > 0 then
out = out .. '<div class="ss-dossier-body">\n'
for i = 1, count do
local k = keys[i] or ''
local v = vals[i] or ''
out = out .. '<div class="ss-ds-row">'
out = out .. '<div class="ss-ds-k">' .. k .. '</div>'
out = out .. '<div class="ss-ds-v">' .. v .. '</div>'
out = out .. '</div>\n'
end
out = out .. '</div>\n'
end
out = out .. '</div>\n'
end
return out
end
return p