This module depends on the following other modules: |
To generate {{Costume datatable}}, invoke using the main function.
local getArgs = require('Module:Arguments').getArgs
local DatatableBuilder = require('Module:DatatableBuilder')
local QueryBuilder = require('Module:QueryBuilder')
local Yesno = require('Module:Yesno')
local DisplayFns = require('Module:DisplayFunctions')
local ProcessingFns = require('Module:ProcessingFunctions')
local p = {}
local function formatName(pageName, costumeName)
return string.format('[[%s|%s]]', pageName, costumeName)
end
local function formatStringList(strList)
local arr = ProcessingFns.stringToArray(',')(strList)
return DisplayFns.list('unbulleted')(arr)
end
local function formatBoolean(value)
return DisplayFns.yesAndNo(Yesno(value))
end
function p.main(frame)
local args = getArgs(frame)
local qb = QueryBuilder.new()
qb
:setTables('costumes')
:setFields([[
_pageName,
thumbnail,
costume_name,
gender,
release_date,
acquire,
accessory,
unique_accessory,
unique_hair,
]])
:addWhere('costumes.costume_id', '!=', '')
qb
:addWhere('costumes.gender', '=', args['gender'])
:addWhere('costumes.acquire', 'HOLDS', args['acquire'])
:addWhere('costumes.accessory', '=', args['accessory'])
:addWhere('costumes.unique_accessory', '=', args['unique accessory'])
:addWhere('costumes.unique_hair', '=', args['unique hair'])
:addWhere('costumes.release_date', '>=', args['released after'])
:addWhere('costumes.release_date', '<=', args['released before'])
:setOrderBy(args['order by'] or 'costumes.costume_id ASC')
:setLimit(args['limit'] or 500)
local datatable = DatatableBuilder.new()
datatable
:setColumns{
{
name = 'thumbnail',
header = 'Thumbnail',
dataFields = { 'thumbnail' },
func = DisplayFns.image('64px'),
css = { ['width'] = '64px' },
sortable = false
},
{
name = 'name',
header = 'Costume name',
dataFields = { '_pageName', 'costume_name' },
func = formatName
},
{
name = 'gender',
header = 'Gender',
dataFields = { 'gender' }
},
{
name = 'date',
header = 'Release date',
dataFields = { 'release_date' }
},
{
name = 'acquire',
header = 'Acquisition method(s)',
dataFields = { 'acquire' },
func = formatStringList
},
{
name = 'accessory',
header = 'Accessory',
dataFields = { 'accessory' },
func = formatBoolean
},
{
name = 'unique accessory',
header = 'Unique accessory',
dataFields = { 'unique_accessory' },
func = formatBoolean
},
{
name = 'unique hair',
header = 'Unique hair',
dataFields = { 'unique_hair' },
func = formatBoolean
}
}
:setData(qb:query())
return datatable:tostring()
end
return p