This module depends on the following other modules: |
To generate {{Costume thumbnails}}, invoke using the main function.
local getArgs = require('Module:Arguments').getArgs
local ProcessingFns = require('Module:ProcessingFunctions')
local p = {}
local function convertAndFilter(array)
local validValues = {}
local keys = {}
for _, value in ipairs(array) do
if value == 'default' then
value = 0
end
value = tonumber(value)
if value ~= nil and value >= 0 and validValues[value] == nil then
validValues[value] = true
end
end
for key, _ in pairs(validValues) do
table.insert(keys, key)
end
return keys
end
local function renderHeaderRow(
hasCostumeVariants,
hasAccessoryVariants,
hasUniqueAccessoryVariants
)
local row = mw.html.create('tr')
row:tag('th')
:wikitext('Variant')
:done()
if hasCostumeVariants then
row:tag('th')
:wikitext('Costume')
end
if hasAccessoryVariants then
row:tag('th')
:wikitext('Accessory')
:done()
end
if hasUniqueAccessoryVariants then
row:tag('th')
:wikitext('Unique accessory')
:done()
end
return row
end
local function renderRow(
basePath,
hasCostumeVariants,
hasAccessoryVariants,
hasUniqueAccessoryVariants,
variant,
hasCostume,
hasAccessory,
hasUniqueAccessory
)
local row = mw.html.create('tr')
if variant == 0 then
variantText = 'Default'
costumeFileName = string.format(
'%s %s',
basePath,
'body'
)
accessoryFileName = string.format(
'%s %s',
basePath,
'head'
)
uniqueAccessoryFileName = string.format(
'%s %s',
basePath,
'unique head'
)
else
variantText = string.format('Variant %d', variant)
costumeFileName = string.format(
'%s %s 0%d',
basePath,
'body',
variant
)
accessoryFileName = string.format(
'%s %s 0%d',
basePath,
'head',
variant
)
uniqueAccessoryFileName = string.format(
'%s %s 0%d',
basePath,
'unique head',
variant
)
end
row
:tag('td')
:wikitext(variantText)
:done()
if hasCostumeVariants then
costumeFile = ''
if hasCostume then
costumeFile = string.format(
'[[File:%s.png]]',
costumeFileName
)
end
row:tag('td')
:wikitext(costumeFile)
:done()
end
if hasAccessoryVariants then
accessoryFile = ''
if hasAccessory then
accessoryFile = string.format(
'[[File:%s.png]]',
accessoryFileName
)
end
row:tag('td')
:wikitext(accessoryFile)
:done()
end
if hasUniqueAccessoryVariants then
uniqueAccessoryFile = ''
if hasUniqueAccessory then
uniqueAccessoryFile = string.format(
'[[File:%s.png]]',
uniqueAccessoryFileName
)
end
row:tag('td')
:wikitext(uniqueAccessoryFile)
:done()
end
return row
end
local function renderTable(
base,
costumeVariants,
accessoryVariants,
uniqueAccessoryVariants
)
local hasCostumeVariants = #costumeVariants > 0
local hasAccessoryVariants = #accessoryVariants > 0
local hasUniqueAccessoryVariants = #uniqueAccessoryVariants > 0
local data = {}
for _, variant in ipairs(costumeVariants) do
if data[variant] == nil then
data[variant] = {}
end
data[variant]['costume'] = true
end
for _, variant in ipairs(accessoryVariants) do
if data[variant] == nil then
data[variant] = {}
end
data[variant]['accessory'] = true
end
for _, variant in ipairs(uniqueAccessoryVariants) do
if data[variant] == nil then
data[variant] = {}
end
data[variant]['uniqueAccessory'] = true
end
local variantKeys = {}
for key, _ in pairs(data) do
table.insert(variantKeys, key)
end
table.sort(variantKeys)
local tbl = mw.html.create('table')
:addClass('wikitable')
tbl:node(renderHeaderRow(
hasCostumeVariants,
hasAccessoryVariants,
hasUniqueAccessoryVariants
))
for _, key in ipairs(variantKeys) do
value = data[key]
tbl:node(renderRow(
base,
hasCostumeVariants,
hasAccessoryVariants,
hasUniqueAccessoryVariants,
key,
value['costume'] or false,
value['accessory'] or false,
value['uniqueAccessory'] or false
))
end
return tbl
end
local split = ProcessingFns.stringToArray(',')
function p.main(frame)
local args = getArgs(frame)
local basePath = args['base path']
local costumeVariants = convertAndFilter(
split(args['costumes']) or {}
)
local accessoryVariants = convertAndFilter(
split(args['accessories']) or {}
)
local uniqueAccessoryVariants = convertAndFilter(
split(args['unique accessories']) or {}
)
tbl = renderTable(
basePath,
costumeVariants,
accessoryVariants,
uniqueAccessoryVariants
)
return tostring(tbl)
end
return p