Difference between revisions of "Module:Gallery"
Jump to navigation
Jump to search
blackwiki>Frietjes (update to sandbox version for mobile view per discussion on the talk page; please revert if this causes script errors or other complete failure) |
blackwiki>Frietjes (ignore captionstyle = text-align:center as harmless) |
||
| Line 19: | Line 19: | ||
-- valid | -- valid | ||
elseif k == 'captionstyle' then | elseif k == 'captionstyle' then | ||
| − | tracking = tracking .. '[[Category:Pages using gallery with the captionstyle parameter]]' | + | if not v:match('^text%-align%s*:%s*center[;%s]*$') then |
| + | tracking = tracking .. '[[Category:Pages using gallery with the captionstyle parameter]]' | ||
| + | end | ||
else | else | ||
-- invalid | -- invalid | ||
Revision as of 18:30, 4 November 2018
| 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