More actions
Content deleted Content added
mNo edit summary |
mNo edit summary |
||
Line 40:
:setColumns{
{ name = 'jacket', header = 'Jacket art', data_fields = { 'Songs.image' }, func = formatImage },
{ name = 'name', header = 'Song
{ name = 'unit', header = 'Unit(s)', data_fields = { 'Songs.unit' }, func = formatUnit },
{ name = 'version', header = 'Version', data_fields = { 'Song_Vocal_Versions.version' } },
|
Revision as of 01:38, 22 December 2021
This module depends on the following other modules: |
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', 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['versions'],
',',
'OR'
)
:addWhereList(
'Song_Vocal_Versions.singers',
'HOLDS',
args['singers'],
',',
args['singers op'] or 'OR'
)
:setJoinOn('Song_Vocal_Versions._pageID = Songs._pageID')
:setOrderBy(args['order by'] or 'Songs.song_id ASC')
:setLimit(args['limit'] or 500)
return datatable:tostring()
end
return p