Module:Costume datatable

From Sekaipedia

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
Cookies help us deliver our services. By using our services, you agree to our use of cookies.