Modul:Több kép
Megjelenés
Több kép[mi ez?] • [dokumentáció: mutat, ] • [tesztek: létrehozás]
local p = {}
local function getArgs(frame)
local images = {}
function processNumbered(typ, i, v)
i = tonumber(i)
if not typ or not i then
return
end
if type(images[i]) == 'table' then
images[i][typ] = v
else
images[i] = { [typ] = v }
end
end
local arguments = require('Modul:Arguments').getArgs(frame)
local args = {
config = {
align = arguments['igazítás'],
vertical = (arguments['irány'] and arguments['irány'] ~= 'vízszintes'),
width = tonumber(arguments['szélesség']),
},
header = nil,
footer = nil,
images = {}
}
if arguments['fejléc'] then
args.header = {
text = arguments['fejléc'],
align = arguments['fejléc_igazítás'] or 'center',
background = arguments['fejléc_háttér']
}
end
if arguments['lábléc'] then
args.footer = {
text = arguments['lábléc'],
align = arguments['lábléc_igazítás'] or 'left',
background = arguments['lábléc_háttér']
}
end
for n, v in pairs(arguments) do
local i
i = string.match(n, '^kép(%d+)$')
if i then
processNumbered('file', i, v)
end
i = string.match(n, '^szélesség(%d+)$')
if i then
processNumbered('width', i, v)
end
i = string.match(n, '^szöveg(%d+)$')
if i then
processNumbered('caption', i, v)
end
end
for _, v in ipairs(images) do
if args.config.width then
v.width = args.config.width
end
if v.file and v.width then
table.insert(args.images, v)
end
end
return args
end
local function fixArgs(args)
if type(args) ~= 'table' then
args = {}
end
if type(args.config) ~= 'table' then
args.config = {}
end
if type(args.images) ~= 'table' then
args.images = {}
end
if args.header and not args.header.text then
args.header = nil
end
if args.header and not args.header.align then
args.header.align = 'center'
end
if args.footer and not args.footer.text then
args.footer = nil
end
if args.footer and not args.footer.align then
args.footer.align = 'left'
end
local images = args.images
args.images = {}
for _, v in ipairs(images) do
if not v.width then
v.width = args.config.width
end
if v.file and v.width then
table.insert(args.images, v)
end
end
return args
end
function createBox(content, args)
local outerClasses = {
left = 'tleft',
center = 'tnone',
centre = 'tnone',
right = 'tright'
}
local box_width = 0
if args.config.vertical then
if args.config.width then
box_width = args.config.width + 12
else
box_width = args.images[1].width + 12
end
else
if args.config.width then
box_width = ((args.config.width + 4) * #args.images) + 8
else
box_width = (#args.images + 2) * 4
for _, v in ipairs(args.images) do
box_width = box_width + v.width
end
end
end
local outer = mw.html.create('div')
outer
:addClass('thumb')
:addClass(outerClasses[args.config.align] or outerClasses.right)
:css('width', box_width .. 'px')
if args.config.align == 'center' or args.config.align == 'centre' then
outer:css('margin', '0 auto')
end
local inner = mw.html.create('div')
inner:addClass('thumbinner')
for _, v in ipairs(content) do
inner:node(v)
end
outer:node(inner)
return outer:done()
end
function image(data, config)
local outer = mw.html.create('div')
if not config.vertical then
outer:css('float', 'left')
end
outer:css{
margin = '1px',
width = (data.width + 2) .. 'px'
}
local image = mw.html.create('div')
image
:addClass('thumbimage')
:wikitext(string.format('[[Fájl:%s|%dpx|%s]]', data.file, data.width, data.caption or ''))
outer:node(image)
local caption
if data.caption then
caption = mw.html.create('div')
caption
:addClass('thumbcaption')
:css('clear', 'left')
:wikitext(data.caption)
outer:node(caption)
end
return outer
end
local function main(args, wikitext)
if #args.images < 2 then
if wikitext then
return '<strong class="error">{{[[Sablon:Több kép|Több kép]]}}: nincs elég kép</strong>'
else
return error('{{[[Sablon:Több kép|Több kép]]}}: nincs elég kép')
end
end
local content = {}
if args.header then
local header = mw.html.create('div')
header
:css{
clear = 'both',
['font-weight'] = 'bold',
['text-align'] = args.header.align,
background = args.header.background
}
:wikitext(args.header.text)
table.insert(content, header)
end
for _, v in ipairs(args.images) do
table.insert(content, image(v, args.config))
end
if args.footer then
local footer = mw.html.create('div')
footer
:addClass('thumbcaption')
:css{
clear = 'left',
['text-align'] = args.footer.align,
background = args.footer.background
}
:wikitext(args.footer.text)
table.insert(content, footer)
end
return createBox(content, args)
end
function p._main(args, wikitext)
args = fixArgs(args)
return main(args, wikitext)
end
function p.main(frame)
local args = getArgs(frame)
return main(args, true)
end
return p