Module:Gallery:修订间差异
跳到导航
跳到搜索
无编辑摘要
imported>Irukaza 无编辑摘要 |
imported>Irukaza 无编辑摘要 |
||
| 第1行: | 第1行: | ||
-- This module implements {{gallery}} | |||
local p = {} | local p = {} | ||
local templatestyles = 'Template:Gallery/styles.css' | |||
return | local function trim(s) | ||
return (mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1")) | |||
end | end | ||
function p. | function p.gallery(frame) | ||
local | local origArgs | ||
local | -- If called via #invoke, use the args passed into the invoking template. | ||
local | -- 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 | |||
:addClass('gallery-mod-collapsible') | |||
:addClass('collapsible') | |||
:addClass(args.state) | |||
:addClass(args.class) | |||
end | |||
if args.style then | |||
tbl:cssText(args.style) | |||
else | |||
tbl | |||
:addClass('gallery-mod') | |||
end | end | ||
if args.align then | |||
if args.align == 'center' then | |||
tbl | |||
: | :addClass('gallery-mod-center') | ||
else | |||
tbl:css('float', args.align) | |||
end | |||
end | |||
return tostring( | -- <gallery>把packed的边框也取消了,所以这里给packed也设置不加边框 | ||
if (args.mode or '') == 'nolines' or (args.mode or '') == 'packed' then | |||
tbl:addClass('gallery-mod-nolines') | |||
end | |||
if args.title then | |||
tbl | |||
:tag('tr') | |||
:tag('th') | |||
:addClass('gallery-mod-title') | |||
: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 = args['width' .. i] or args.width or '180' | |||
local alt = args['alt' .. i] or '' | |||
if (args.mode or '') == 'packed' then imgWidth = '' end | |||
local textWidth | |||
if cellWidth < 30 then | |||
textWidth = imgHeight + 27 | |||
else | |||
textWidth = cellWidth + 7 | |||
end | |||
if img ~= '' then | |||
local imgTbl = mainCell:tag('table') | |||
local img_wikitext = function() | |||
if frame:callParserFunction{ name = 'filepath', args = { img:gsub('^%s-[Ff][Ii][Ll][Ee]:', '') } } ~= '' then | |||
-- 内部图片 | |||
return string.format('[[%s|center|%sx%dpx|alt=%s|%s]]', img, imgWidth, imgHeight, alt, mw.text.unstrip(caption)) | |||
else | |||
-- 外部图片 | |||
return string.format('<img src="%s" alt="%s" style="max-width:%spx; max-height:%dpx" >', img, alt, imgWidth, imgHeight) | |||
end | |||
end | |||
imgTbl | |||
:css('width', (cellWidth + 20) .. 'px') | |||
:addClass('gallery-mod-box') | |||
:tag('tr') | |||
:tag('td') | |||
:addClass('thumb') | |||
:css('height', (imgHeight + 20) .. 'px') | |||
:wikitext(img_wikitext()) | |||
:done() | |||
:done() | |||
:tag('tr') | |||
:addClass('gallery-mod-text') | |||
:tag('td') | |||
:addClass('core') | |||
:tag('div') | |||
:addClass('caption') | |||
:css('min-height', (0.1 + 1.5*lines) .. 'em') | |||
:css('width', textWidth .. 'px') | |||
:cssText(captionstyle) | |||
:wikitext(caption .. ' ') | |||
end | |||
end | |||
if args.footer then | |||
tbl | |||
:tag('tr') | |||
:tag('td') | |||
:addClass('gallery-mod-footer') | |||
:wikitext(args.footer) | |||
end | |||
if args.perrow then | |||
tbl:css('width', 8 + (cellWidth + 20 + 6)*tonumber(args.perrow) .. 'px') | |||
end | |||
return frame:extensionTag{ name = 'templatestyles', args = { src = templatestyles} } .. tostring(tbl) | |||
end | end | ||
return p | return p | ||