Модул:Gallery — разлика између измена
Пређи на навигацију
Пређи на претрагу
мНема описа измене |
м (1 измена увезена) |
||
| (Нису приказане 2 међуизмене 2 корисника) | |||
| Ред 2: | Ред 2: | ||
local p = {} | local p = {} | ||
local function trim(s) | local function trim(s) | ||
return | return (mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1")) | ||
end | end | ||
function p.gallery(frame) | function p.gallery(frame) | ||
local origArgs | |||
-- If called via #invoke, use the args passed into the invoking template. | -- If called via #invoke, use the args passed into the invoking template. | ||
-- Otherwise, for testing purposes, assume args are being passed directly in. | -- Otherwise, for testing purposes, assume args are being passed directly in. | ||
if type(frame.getParent) == 'function' then | |||
origArgs = frame:getParent().args | |||
else | |||
origArgs = frame | |||
end | |||
-- ParserFunctions considers the empty string to be false, so to preserve the previous | -- ParserFunctions considers the empty string to be false, so to preserve the previous | ||
| Ред 42: | Ред 21: | ||
-- them false too. | -- them false too. | ||
local args = {} | local args = {} | ||
for k, v in pairs(origArgs) do | for k, v in pairs(origArgs) do | ||
if v ~= '' then | if v ~= '' then | ||
args[k] = v | args[k] = v | ||
end | end | ||
end | end | ||
local tbl = mw.html.create(' | local tbl = mw.html.create('table') | ||
if args.state then | if args.state then | ||
tbl | tbl | ||
: | :css('width', '100%') | ||
:addClass('collapsible') | :addClass('collapsible') | ||
:addClass(args.state) | :addClass(args.state) | ||
| Ред 67: | Ред 39: | ||
tbl:cssText(args.style) | tbl:cssText(args.style) | ||
else | else | ||
tbl: | tbl | ||
:css('background', 'transparent') | |||
:css('margin-top', '0.5em') | |||
end | end | ||
if args.align then | if args.align then | ||
tbl: | if args.align == 'center' then | ||
tbl | |||
:css('margin-left', 'auto') | |||
:css('margin-right', 'auto') | |||
else | |||
tbl:css('float', args.align) | |||
end | |||
end | end | ||
if args.title then | if args.title then | ||
tbl:tag(' | tbl | ||
:tag('tr') | |||
:tag('th') | |||
:css('text-align', 'center') | |||
:css('font-weight', 'bold') | |||
:wikitext(args.title) | :wikitext(args.title) | ||
end | end | ||
local | local mainCell = tbl:tag('tr'):tag('td') | ||
local imageCount = math.ceil(#args / 2) | local imageCount = math.ceil(#args / 2) | ||
local cellWidth = tonumber(args.cellwidth) or tonumber(args.width) or 180 | |||
local imgHeight = tonumber(args.height) or 180 | |||
local lines = tonumber(args.lines) or 2 | |||
local captionstyle = args.captionstyle | |||
for i = 1, imageCount do | for i = 1, imageCount do | ||
local img = trim(args[i*2 - 1] or '') | local img = trim(args[i*2 - 1] or '') | ||
local caption = trim(args[i*2] or '') | local caption = trim(args[i*2] or '') | ||
local alt = | local imgWidth = tonumber(args['width' .. i]) or tonumber(args.width) or 180 | ||
local alt = args['alt' .. i] or '' | |||
local textWidth | |||
if cellWidth < 30 then | |||
textWidth = imgHeight + 27 | |||
else | |||
textWidth = cellWidth + 7 | |||
end | |||
if img ~= '' then | if img ~= '' then | ||
table. | local imgTbl = mainCell:tag('table') | ||
imgTbl | |||
:css('width', (cellWidth + 20) .. 'px') | |||
:css('float', 'left') | |||
:css('border-collapse', 'collapse') | |||
:css('margin', '3px') | |||
:tag('tr') | |||
:tag('td') | |||
:css('height', (imgHeight + 20) .. 'px') | |||
:css('border', '1px solid #CCCCCC') | |||
:css('background-color', '#F8F8F8') | |||
:css('padding', '0px') | |||
:css('text-align', 'center') | |||
:wikitext(string.format('[[%s|center|border|%dx%dpx|alt=%s|%s]]', img, imgWidth, imgHeight, alt, mw.text.unstrip(caption))) | |||
:done() | |||
:done() | |||
:tag('tr') | |||
:css('vertical-align', 'top') | |||
:tag('td') | |||
:css('display', 'block') | |||
:css('font-size', '1em') | |||
:css('padding', '0px') | |||
:tag('div') | |||
:addClass('gallerytext') | |||
:css('min-height', (0.1 + 1.5*lines) .. 'em') | |||
:css('width', textWidth .. 'px') | |||
:css('line-height', '1.3em') | |||
:css('padding', '2px 6px 1px 6px') | |||
:css('margin', '0px') | |||
:css('border', 'none') | |||
:css('border-width', '0px') | |||
:cssText(captionstyle) | |||
:wikitext(caption .. ' ') | |||
end | end | ||
end | end | ||
if args.footer then | if args.footer then | ||
tbl:tag(' | tbl | ||
:tag('tr') | |||
:tag('td') | |||
:css('text-align', 'right') | |||
:css('font-size', '80%') | |||
:css('line-height', '1em') | |||
:wikitext(args.footer) | :wikitext(args.footer) | ||
end | |||
if args.perrow then | |||
tbl:css('width', 8 + (cellWidth + 20 + 6)*tonumber(args.perrow) .. 'px') | |||
end | end | ||
return tostring(tbl) | |||
return | |||
end | end | ||
return p | return p | ||
Тренутна верзија на датум 5. фебруар 2021. у 13:49
Документацију овог модула можете да направите на страници Модул:Gallery/док
-- This module implements {{gallery}}
local p = {}
local function trim(s)
return (mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1"))
end
function p.gallery(frame)
local origArgs
-- If called via #invoke, use the args passed into the invoking template.
-- Otherwise, for testing purposes, assume args are being passed directly in.
if type(frame.getParent) == 'function' then
origArgs = frame:getParent().args
else
origArgs = frame
end
-- ParserFunctions considers the empty string to be false, so to preserve the previous
-- behavior of {{gallery}}, change any empty arguments to nil, so Lua will consider
-- them false too.
local args = {}
for k, v in pairs(origArgs) do
if v ~= '' then
args[k] = v
end
end
local tbl = mw.html.create('table')
if args.state then
tbl
:css('width', '100%')
:addClass('collapsible')
:addClass(args.state)
end
if args.style then
tbl:cssText(args.style)
else
tbl
:css('background', 'transparent')
:css('margin-top', '0.5em')
end
if args.align then
if args.align == 'center' then
tbl
:css('margin-left', 'auto')
:css('margin-right', 'auto')
else
tbl:css('float', args.align)
end
end
if args.title then
tbl
:tag('tr')
:tag('th')
:css('text-align', 'center')
:css('font-weight', 'bold')
:wikitext(args.title)
end
local mainCell = tbl:tag('tr'):tag('td')
local imageCount = math.ceil(#args / 2)
local cellWidth = tonumber(args.cellwidth) or tonumber(args.width) or 180
local imgHeight = tonumber(args.height) or 180
local lines = tonumber(args.lines) or 2
local captionstyle = args.captionstyle
for i = 1, imageCount do
local img = trim(args[i*2 - 1] or '')
local caption = trim(args[i*2] or '')
local imgWidth = tonumber(args['width' .. i]) or tonumber(args.width) or 180
local alt = args['alt' .. i] or ''
local textWidth
if cellWidth < 30 then
textWidth = imgHeight + 27
else
textWidth = cellWidth + 7
end
if img ~= '' then
local imgTbl = mainCell:tag('table')
imgTbl
:css('width', (cellWidth + 20) .. 'px')
:css('float', 'left')
:css('border-collapse', 'collapse')
:css('margin', '3px')
:tag('tr')
:tag('td')
:css('height', (imgHeight + 20) .. 'px')
:css('border', '1px solid #CCCCCC')
:css('background-color', '#F8F8F8')
:css('padding', '0px')
:css('text-align', 'center')
:wikitext(string.format('[[%s|center|border|%dx%dpx|alt=%s|%s]]', img, imgWidth, imgHeight, alt, mw.text.unstrip(caption)))
:done()
:done()
:tag('tr')
:css('vertical-align', 'top')
:tag('td')
:css('display', 'block')
:css('font-size', '1em')
:css('padding', '0px')
:tag('div')
:addClass('gallerytext')
:css('min-height', (0.1 + 1.5*lines) .. 'em')
:css('width', textWidth .. 'px')
:css('line-height', '1.3em')
:css('padding', '2px 6px 1px 6px')
:css('margin', '0px')
:css('border', 'none')
:css('border-width', '0px')
:cssText(captionstyle)
:wikitext(caption .. ' ')
end
end
if args.footer then
tbl
:tag('tr')
:tag('td')
:css('text-align', 'right')
:css('font-size', '80%')
:css('line-height', '1em')
:wikitext(args.footer)
end
if args.perrow then
tbl:css('width', 8 + (cellWidth + 20 + 6)*tonumber(args.perrow) .. 'px')
end
return tostring(tbl)
end
return p