17,230
edits
(remove LoZ and AoL from staging) |
m (fix image links to use the link in {{Main}}) |
||
(13 intermediate revisions by the same user not shown) | |||
Line 4: | Line 4: | ||
local Tabs = require( 'Module:Tabs' ).Tabs | local Tabs = require( 'Module:Tabs' ).Tabs | ||
function | -- https://www.mediawiki.org/wiki/Help:Images#Syntax | ||
-- doesn't handle 'upright' which seems like a complicated and buggy arg that I hope we're not using | |||
widths = '62px' | local fileArgKeywords = { 'border', 'frameless', 'frame', 'thumb', 'thumbnail', 'left', 'right', 'center', 'none', 'baseline', 'sub', 'super', 'top', 'text-top', 'middle', 'bottom', 'text-bottom' } | ||
function isCaption( fileArg ) | |||
fileArg = mw.text.trim( fileArg ) | |||
-- named args | |||
if fileArg:match( '=' ) then return false end | |||
-- size | |||
if fileArg:match( '^%d*x?%d+%s?px$' ) then return false end | |||
-- format and alignment | |||
for _, keyword in ipairs( fileArgKeywords ) do | |||
if fileArg == keyword then return false end | |||
end | |||
return true | |||
end | |||
function buildGallery( sections, galArgs ) | |||
galArgs.widths = galArgs.widths or '62px' | |||
galArgs.heights = galArgs.heights or '62px' | |||
local gallery = Gallery.new( galArgs ) | |||
for _, section in ipairs( sections ) do | for _, section in ipairs( sections ) do | ||
-- !!!! This may break if Template:Main is modified !!!! | -- !!!! This may break if Template:Main is modified !!!! | ||
Line 22: | Line 37: | ||
local fileParts = mw.text.split( file, '|' ) | local fileParts = mw.text.split( file, '|' ) | ||
local fileName = fileParts[1] | local fileName = fileParts[1] | ||
local fileCaption = fileParts[ | local fileCaption = nil | ||
for i = #fileParts, 2, -1 do -- start at the end and work backwards to the first arg (skip filename) | |||
if isCaption( fileParts[i] ) then | |||
fileCaption = fileParts[i] | |||
break | |||
end | |||
end | |||
gallery:addFile( fileName or 'No Image.png', '[[' .. (link or section.name) .. '|' .. (fileCaption or section.name) .. ']]', { | gallery:addFile( fileName or 'No Image.png', '[[' .. (link or section.name) .. '|' .. (fileCaption or section.name) .. ']]', { | ||
link = section.name, | link = link or section.name, | ||
alt = fileCaption or section.name | alt = fileCaption or section.name | ||
} ) | } ) | ||
Line 40: | Line 61: | ||
function Galbox.new( args ) | function Galbox.new( args ) | ||
local obj = Navbox.new( args ) | local obj = Navbox.new( args ) | ||
obj.galArgs = Args.getTable( args.gallery ) | |||
return setmetatable( obj, Galbox ) | return setmetatable( obj, Galbox ) | ||
end | end | ||
Line 45: | Line 67: | ||
-- override | -- override | ||
function Galbox:renderContent() | function Galbox:renderContent() | ||
local listing = Listing._parseListing | local listing = Listing._parseListing( self.subject ) | ||
-- If categories weren't set already (because caller used single arg), then use the ones parsed from the page. | |||
-- CODE SMELL: setting unrelated state. this only works because renderFooter is called after renderContent. | |||
if #self.categories == 0 then self.categories = listing.categories end | |||
-- test if there are no sections at all | -- test if there are no sections at all | ||
Line 53: | Line 79: | ||
local defaultGallery | local defaultGallery | ||
if #listing.topLevelLeaves > 0 then | if #listing.topLevelLeaves > 0 then | ||
defaultGallery = buildGallery( listing.topLevelLeaves ) | defaultGallery = buildGallery( listing.topLevelLeaves, self.galArgs ) | ||
end | end | ||
Line 71: | Line 97: | ||
tabs:addTabTopWithContent{ | tabs:addTabTopWithContent{ | ||
contentId = group.name, | contentId = group.name, | ||
content = buildGallery( group.sections ) | content = buildGallery( group.sections, self.galArgs ) | ||
} | } | ||
end | end | ||
Line 94: | Line 120: | ||
getParent = function() return { | getParent = function() return { | ||
args = { | args = { | ||
[1] = "The Legend of Zelda | [1] = "The Legend of Zelda Characters" | ||
} | } | ||
} end | } end |