Editing Module:Gallery

From The Wandering Inn Wiki
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
-- This module implements {{gallery}}
-- this module implements [[template:gallery]]
 
local p = {}
local p = {}


local templatestyles = 'Template:Gallery/styles.css'
function p.main(frame)
local yesno = require('Module:Yesno')
local getArgs = require('Module:Arguments').getArgs
 
local args = getArgs(frame)
local function trim(s)
return mw.ustring.gsub(mw.ustring.gsub(s, '%s', ' '), '^%s*(.-)%s*$', '%1')
end


local tracking, preview
local width = args.width or '150'


local function checkarg(k,v)
local items = {}
if k and type(k) == 'string' then
for k, v in pairs(args) do
if k == 'align' or k == 'state' or k == 'style' or k == 'title' or
if k ~= nil and tonumber(k) and math.fmod(k,2) == 1 then
k == 'width' or k == 'height' or k == 'lines' or k == 'whitebg' or
local i = math.floor(k/2) + 1
k == 'mode' or k == 'footer' or k == 'perrow' or k == 'noborder' or
local item = mw.html.create('li')
k:match('^alt%d+$') or k:match('^%d+$') then
:addClass('gallerybox')
-- valid
:css('width', (args['width' .. k] or width)+5 .. 'px')
elseif k == 'captionstyle' then
local itemdiv = item:tag('div'):css('width', (args['width' .. k] or width)+5 .. 'px')
if not v:match('^text%-align%s*:%s*center[;%s]*$') then
itemdiv:tag('div')
table.insert(tracking, '[[Category:Pages using gallery with the captionstyle parameter]]')
:addClass('thumb')
:css('width', (args['width' .. k] or width) .. 'px')
:css('text-align', args['itemalign'])
:wikitext('<div style="margin:0px auto">' .. args[k] .. '</div>')
if args[tonumber(k)+1] then
itemdiv
:tag('div')
:addClass('gallerytext')
:css('text-align', args['captionalign'])
:wikitext('<p>' .. args[tonumber(k)+1] .. '</p>')
end
end
else
items[i] = tostring(item) .. ' '
-- 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
end
end
end
local root = mw.html.create('ul')
 
:addClass('gallery mw-gallery-nolines gallery-items')
function p.gallery(frame)
:addClass(args.class)
-- If called via #invoke, use the args passed into the invoking template.
:cssText(args.style)
-- Otherwise, for testing purposes, assume args are being passed directly in.
:wikitext(table.concat(items))
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
if (args.mode or '') == 'packed' and (args.align or '') == '' then
args.align = 'center'
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' .. (args.noborder and '' or ' bordered-images')
gargs['widths'] = tonumber(args.width) or 180
gargs['heights'] = tonumber(args.height) or 180
gargs['style'] = args.captionstyle
gargs['perrow'] = args.perrow
gargs['mode'] = args.mode
if yesno(args.whitebg or 'yes') then
gargs['class'] = gargs['class'] .. ' whitebg'
end
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
 
local trackstr = (#tracking > 0) and table.concat(tracking, '') or ''
if #preview > 0 then
trackstr = require('Module:If preview')._warning({
'Unknown parameters ' .. table.concat(preview, '; ') .. '.'
}) .. trackstr
end
return frame:extensionTag{ name = 'templatestyles', args = { src = templatestyles} } .. tostring(tbl) .. trackstr
return frame:extensionTag {name = 'templatestyles', args = {src = 'Gallery/styles.css'}} .. frame:extensionTag{ name = 'gallery', args = {mode = 'nolines'}} .. tostring(root)
end
end


return p
return p
Please note that all contributions to The Wandering Inn Wiki are considered to be released under the Creative Commons attribution – non commercial – share alike (see The Wandering Inn Wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!
Cancel Editing help (opens in new window)

Template used on this page: