Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:Vocal datatable

From Sekaipedia
Revision as of 22:31, 18 December 2021 by ChaoticShadow (talk | contribs) (ChaoticShadow moved page Module:Another vocal datatable to Module:Vocal datatable without leaving a redirect)


To generate {{Vocal datatable}}, invoke using the main function.


local getArgs        = require('Module:Arguments').getArgs
local CargoDatatable = require('Module:CargoDatatable')

local p = {}

local function string_to_list(str, delim)
	if str then
		local list = mw.text.split(str, delim)
		for i,v in ipairs(list) do
			list[i] = mw.text.trim(v)
		end
		
		return list
	end
	
	return {}
end

local function formatImage(image)
	return string.format('[[File:%s|64px]]', image)
end

local function formatName(page_name, card_name)
	return string.format('[[%s|%s]]', page_name, card_name)
end

local function formatUnit(unit)
	local units = string_to_list(unit, ';')
	
	return table.concat(units, '<br>')
end


function p.main(frame)
	local args = getArgs(frame)
	
	local datatable = CargoDatatable.new()
	
	datatable
		:setColumns{
			{ name = 'jacket', header = 'Jacket art', data_fields = { 'Songs.image' }, func = formatImage },
			{ name = 'name', header = 'Song name', data_fields = { 'Songs._pageName', 'Songs.song_name' }, func = formatName },
			{ name = 'unit', header = 'Unit(s)', data_fields = { 'Songs.unit' }, func = formatUnit },
			{ name = 'version', header = 'Version', data_fields = { 'Song_Vocal_Versions.version' } },
			{ name = 'singer', header = 'Singer(s)', data_fields = { 'Song_Vocal_Versions.singers' } }
		}
		:setHeaders{
			'jacket',
			'name',
			'unit',
			'version',
			'singer'
		}
	
	datatable
		:setTables('Song_Vocal_Versions, Songs')
		:setFields([[
			Songs._pageName,
			Songs.song_name,
			Songs.image,
			Songs.unit,
			Song_Vocal_Versions.version,
			Song_Vocal_Versions.singers
		]])
		:addWhere('Songs.song_id', '>', '0')
		:addWhereList('Songs.unit', 'HOLDS', args['unit'], ';', 'OR')
		:addWhereList(
			'Song_Vocal_Versions.version',
			'=',
			args['version'],
			',',
			'OR'
		)
		:addWhereList(
			'Song_Vocal_Versions.singers',
			'HOLDS',
			args['singer'],
			',',
			'OR'
		)
		:setJoinOn('Song_Vocal_Versions._pageID = Songs._pageID')
		:setOrderBy('Songs.date DESC')
		:setLimit(500)
	
	return datatable:tostring()
end

return p
Cookies help us deliver our services. By using our services, you agree to our use of cookies.