Module:Gallery
Revision as of 18:30, 4 November 2018 by blackwiki>Frietjes (ignore captionstyle = text-align:center as harmless)
| This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
Script error: No such module "Uses TemplateStyles". Implements {{gallery}}
-- This module implements {{gallery}}
local p = {}
local templatestyles = 'Template:Gallery/styles.css'
local function trim(s)
return mw.ustring.gsub(mw.ustring.gsub(s, '%s', ' '), '^%s*(.-)%s*$', '%1')
end
local tracking, preview = '', ''
local function checkarg(k)
if k and type(k) == 'string' then
if k == 'align' or k == 'state' or k == 'style' or k == 'title' or
k == 'width' or k == 'height' or k == 'lines' or
k == 'mode' or k == 'footer' or k == 'perrow' or
k:match('^alt%d+$') or k:match('^%d+$') then
-- valid
elseif k == 'captionstyle' then
if not v:match('^text%-align%s*:%s*center[;%s]*$') then
tracking = tracking .. '[[Category:Pages using gallery with the captionstyle parameter]]'
end
else
-- invalid
local vlen = mw.ustring.len(k)
k = mw.ustring.sub(k, 1, (vlen < 25) and vlen or 25)
k = mw.ustring.gsub(k, '[^%w\-_ ]', '?')
tracking = tracking .. '[[Category:Pages using gallery with unknown parameters|' .. k .. ']]'
preview = preview .. 'Unknown: "' .. k .. '"<br>'
end
end
return t
end
function p.gallery(frame)
-- If called via #invoke, use the args passed into the invoking template.
-- Otherwise, for testing purposes, assume args are being passed directly in.
local origArgs = (type(frame.getParent) == 'function') and frame:getParent().args or frame
-- 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
checkarg(k)
end
end
local tbl = mw.html.create('div'):css('display', 'table')
tbl:addClass('mw-module-gallery')
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('div'):css('display', 'table-row')
:tag('div'):css('display', 'table-cell')
:css('text-align', 'center')
:css('font-weight', 'bold')
:wikitext(args.title)
end
local gargs = {}
gargs['class'] = 'nochecker bordered-images'
gargs['widths'] = tonumber(args.width) or 180
gargs['heights'] = tonumber(args.height) or 180
gargs['style'] = 'line-height:130%;' .. (args['captionstyle'] or '')
gargs['perrow'] = args.perrow
gargs['mode'] = args.mode
local gallery = {}
local imageCount = math.ceil(#args / 2)
for i = 1, imageCount do
local img = trim(args[i*2 - 1] or '')
local caption = trim(args[i*2] or '')
local alt = trim(args['alt' .. i] or '')
if img ~= '' then
table.insert(gallery, img .. (alt ~= '' and ('|alt=' .. alt) or '') .. '|' .. caption )
end
end
tbl:tag('div')
:css('display', 'table-row')
:tag('div')
:css('display', 'table-cell')
:wikitext(
frame:extensionTag{ name = 'gallery', content = '\n' .. table.concat(gallery,'\n'), args = gargs}
)
if args.footer then
tbl
:tag('div'):css('display', 'table-row')
:tag('div'):css('display', 'table-cell')
:css('text-align', 'right')
:css('font-size', '80%')
:css('line-height', '1em')
:wikitext(args.footer)
end
if preview ~= '' then
if frame:preprocess( "{{REVISIONID}}" ) == "" then
tracking = preview
end
end
return frame:extensionTag{ name = 'templatestyles', args = { src = templatestyles} } .. tostring(tbl) .. tracking
end
return p