Difference between revisions of "Module:Gallery"
Jump to navigation
Jump to search
blackwiki>Frietjes |
blackwiki>Frietjes (more templatestyles) |
||
| Line 9: | Line 9: | ||
end | end | ||
| − | local tracking, preview | + | local tracking, preview |
local function checkarg(k,v) | local function checkarg(k,v) | ||
| Line 20: | Line 20: | ||
elseif k == 'captionstyle' then | elseif k == 'captionstyle' then | ||
if not v:match('^text%-align%s*:%s*center[;%s]*$') then | if not v:match('^text%-align%s*:%s*center[;%s]*$') then | ||
| − | tracking | + | table.insert(tracking, '[[Category:Pages using gallery with the captionstyle parameter]]') |
end | end | ||
else | else | ||
| Line 27: | Line 27: | ||
k = mw.ustring.sub(k, 1, (vlen < 25) and vlen or 25) | k = mw.ustring.sub(k, 1, (vlen < 25) and vlen or 25) | ||
k = mw.ustring.gsub(k, '[^%w\-_ ]', '?') | k = mw.ustring.gsub(k, '[^%w\-_ ]', '?') | ||
| − | tracking | + | table.insert(tracking, '[[Category:Pages using gallery with unknown parameters|' .. k .. ']]') |
| − | preview | + | table.insert(preview, '"' .. k .. '"') |
end | end | ||
end | end | ||
| Line 43: | Line 43: | ||
-- them false too. | -- them false too. | ||
local args = {} | local args = {} | ||
| + | tracking, preview = {}, {} | ||
for k, v in pairs(origArgs) do | for k, v in pairs(origArgs) do | ||
if v ~= '' then | if v ~= '' then | ||
| Line 50: | Line 51: | ||
end | end | ||
| − | local tbl = mw.html.create('div | + | local tbl = mw.html.create('div') |
| − | tbl:addClass(' | + | tbl:addClass('mod-gallery') |
if args.state then | if args.state then | ||
tbl | tbl | ||
| − | : | + | :addClass('mod-gallery-collapsible') |
:addClass('collapsible') | :addClass('collapsible') | ||
:addClass(args.state) | :addClass(args.state) | ||
| Line 63: | Line 64: | ||
tbl:cssText(args.style) | tbl:cssText(args.style) | ||
else | else | ||
| − | tbl | + | tbl:addClass('mod-gallery-default') |
| − | |||
| − | |||
end | end | ||
if args.align then | if args.align then | ||
| − | + | tbl:addClass('mod-gallery-' .. args.align:lower()) | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
if args.title then | if args.title then | ||
| − | tbl | + | tbl:tag('div') |
| − | + | :addClass('title') | |
| − | :tag('div | + | :tag('div') |
| − | |||
| − | |||
:wikitext(args.title) | :wikitext(args.title) | ||
end | end | ||
| Line 109: | Line 100: | ||
tbl:tag('div') | tbl:tag('div') | ||
| − | : | + | :addClass('main') |
:tag('div') | :tag('div') | ||
| − | |||
:wikitext( | :wikitext( | ||
frame:extensionTag{ name = 'gallery', content = '\n' .. table.concat(gallery,'\n'), args = gargs} | frame:extensionTag{ name = 'gallery', content = '\n' .. table.concat(gallery,'\n'), args = gargs} | ||
| Line 117: | Line 107: | ||
if args.footer then | if args.footer then | ||
| − | tbl | + | tbl:tag('div') |
| − | + | :addClass('footer') | |
| − | :tag('div | + | :tag('div') |
| − | |||
| − | |||
| − | |||
:wikitext(args.footer) | :wikitext(args.footer) | ||
end | end | ||
| − | + | tracking = (#tracking > 0) and table.concat(tracking, '') or '' | |
| − | + | if #preview > 0 and frame:preprocess( "{{REVISIONID}}" ) == "" then | |
| − | + | tracking = mw.html.create('div') | |
| − | + | :addClass('hatnote') | |
| + | :css('color','red') | ||
| + | :tag('strong'):wikitext('Warning:'):done() | ||
| + | :wikitext('Unknown parameters: ' .. table.concat(preview, '; ')) | ||
end | end | ||
Revision as of 14:01, 5 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,v)
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
table.insert(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\-_ ]', '?')
table.insert(tracking, '[[Category:Pages using gallery with unknown parameters|' .. k .. ']]')
table.insert(preview, '"' .. k .. '"')
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 = {}
tracking, preview = {}, {}
for k, v in pairs(origArgs) do
if v ~= '' then
args[k] = v
checkarg(k,v)
end
end
local tbl = mw.html.create('div')
tbl:addClass('mod-gallery')
if args.state then
tbl
:addClass('mod-gallery-collapsible')
:addClass('collapsible')
:addClass(args.state)
end
if args.style then
tbl:cssText(args.style)
else
tbl:addClass('mod-gallery-default')
end
if args.align then
tbl:addClass('mod-gallery-' .. args.align:lower())
end
if args.title then
tbl:tag('div')
:addClass('title')
:tag('div')
: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')
:addClass('main')
:tag('div')
:wikitext(
frame:extensionTag{ name = 'gallery', content = '\n' .. table.concat(gallery,'\n'), args = gargs}
)
if args.footer then
tbl:tag('div')
:addClass('footer')
:tag('div')
:wikitext(args.footer)
end
tracking = (#tracking > 0) and table.concat(tracking, '') or ''
if #preview > 0 and frame:preprocess( "{{REVISIONID}}" ) == "" then
tracking = mw.html.create('div')
:addClass('hatnote')
:css('color','red')
:tag('strong'):wikitext('Warning:'):done()
:wikitext('Unknown parameters: ' .. table.concat(preview, '; '))
end
return frame:extensionTag{ name = 'templatestyles', args = { src = templatestyles} } .. tostring(tbl) .. tracking
end
return p