Content added Content deleted
mNo edit summary |
mNo edit summary |
||
Line 1: | Line 1: | ||
local getArgs = require('Module:Arguments').getArgs |
local getArgs = require('Module:Arguments').getArgs |
||
local |
local DatatableBuilder = require('Module:DatatableBuilder') |
||
local QueryBuilder = require('Module:QueryBuilder') |
|||
local p = {} |
local p = {} |
||
Line 17: | Line 18: | ||
end |
end |
||
local function |
local function formatJacket(jacket) |
||
return string.format('[[File:%s|64px]]', |
return string.format('[[File:%s|64px]]', jacket) |
||
end |
end |
||
local function formatName( |
local function formatName(pageName, songName) |
||
return string.format('[[%s|%s]]', |
return string.format('[[%s|%s]]', pageName, songName) |
||
end |
end |
||
Line 35: | Line 36: | ||
local args = getArgs(frame) |
local args = getArgs(frame) |
||
local |
local qb = QueryBuilder.new() |
||
qb |
|||
⚫ | |||
⚫ | |||
{ name = 'jacket', header = 'Jacket art', data_fields = { 'Songs.image' }, func = formatImage }, |
|||
⚫ | |||
{ name = 'unit', header = 'Unit(s)', data_fields = { 'Songs.unit' }, func = formatUnit }, |
|||
⚫ | |||
⚫ | |||
⚫ | |||
:setHeaders{ |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
datatable |
|||
:setTables('Song_Vocal_Versions, Songs') |
:setTables('Song_Vocal_Versions, Songs') |
||
:setFields([[ |
:setFields([[ |
||
Line 63: | Line 47: | ||
Song_Vocal_Versions.singers |
Song_Vocal_Versions.singers |
||
]]) |
]]) |
||
⚫ | |||
:addWhere('Songs.song_id', '>', '0') |
:addWhere('Songs.song_id', '>', '0') |
||
qb |
|||
:addWhereList('Songs.unit', 'HOLDS', args['unit'], ';', 'OR') |
|||
:addWhereList( |
|||
⚫ | |||
'HOLDS', |
|||
args['unit'], |
|||
⚫ | |||
'OR' |
|||
) |
|||
:addWhereList( |
:addWhereList( |
||
'Song_Vocal_Versions.version', |
'Song_Vocal_Versions.version', |
||
Line 79: | Line 71: | ||
args['singers op'] or 'OR' |
args['singers op'] or 'OR' |
||
) |
) |
||
⚫ | |||
:setOrderBy(args['order by'] or 'Songs.song_id ASC') |
:setOrderBy(args['order by'] or 'Songs.song_id ASC') |
||
:setLimit(args['limit'] or 500) |
:setLimit(args['limit'] or 500) |
||
⚫ | |||
local datatable = DatatableBuilder.new() |
|||
⚫ | |||
⚫ | |||
{ |
|||
⚫ | |||
header = 'Jacket art', |
|||
dataFields = { 'Songs.image' }, |
|||
func = formatJacket, |
|||
css = { ['width'] = '64px' }, |
|||
sortable = false |
|||
}, |
|||
{ |
|||
name = 'name', |
|||
header = 'Song', |
|||
⚫ | |||
func = formatName |
|||
}, |
|||
{ |
|||
name = 'unit', |
|||
header = 'Unit(s)', |
|||
dataFields = { 'Songs.unit' }, |
|||
func = formatUnit |
|||
}, |
|||
{ |
|||
⚫ | |||
header = 'Version', |
|||
⚫ | |||
}, |
|||
{ |
|||
⚫ | |||
header = 'Singer(s)', |
|||
⚫ | |||
⚫ | |||
⚫ | |||
:setData(qb:query()) |
|||
return datatable:tostring() |
return datatable:tostring() |
Revision as of 21:46, 3 February 2022
This module depends on the following other modules: |
To generate {{Vocal datatable}}, invoke using the main function.
local getArgs = require('Module:Arguments').getArgs
local DatatableBuilder = require('Module:DatatableBuilder')
local QueryBuilder = require('Module:QueryBuilder')
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 formatJacket(jacket)
return string.format('[[File:%s|64px]]', jacket)
end
local function formatName(pageName, songName)
return string.format('[[%s|%s]]', pageName, songName)
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 qb = QueryBuilder.new()
qb
:setTables('Song_Vocal_Versions, Songs')
:setFields([[
Songs._pageName,
Songs.song_name,
Songs.image,
Songs.unit,
Song_Vocal_Versions.version,
Song_Vocal_Versions.singers
]])
:setJoinOn('Song_Vocal_Versions._pageID = Songs._pageID')
:addWhere('Songs.song_id', '>', '0')
qb
: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'
)
:setOrderBy(args['order by'] or 'Songs.song_id ASC')
:setLimit(args['limit'] or 500)
local datatable = DatatableBuilder.new()
datatable
:setColumns{
{
name = 'jacket',
header = 'Jacket art',
dataFields = { 'Songs.image' },
func = formatJacket,
css = { ['width'] = '64px' },
sortable = false
},
{
name = 'name',
header = 'Song',
dataFields = { 'Songs._pageName', 'Songs.song_name' },
func = formatName
},
{
name = 'unit',
header = 'Unit(s)',
dataFields = { 'Songs.unit' },
func = formatUnit
},
{
name = 'version',
header = 'Version',
dataFields = { 'Song_Vocal_Versions.version' }
},
{
name = 'singer',
header = 'Singer(s)',
dataFields = { 'Song_Vocal_Versions.singers' }
}
}
:setData(qb:query())
return datatable:tostring()
end
return p