Content added Content deleted
mNo edit summary |
(deleted 'singer(s)' row [lines 103 through 107]) |
||
(13 intermediate revisions by 2 users not shown) | |||
Line 38: | Line 38: | ||
local qb = QueryBuilder.new() |
local qb = QueryBuilder.new() |
||
qb |
qb |
||
:setTables(' |
:setTables('song_versions, songs') |
||
:setFields([[ |
:setFields([[ |
||
songs._pageName, |
|||
songs.song_name, |
|||
songs.jacket, |
|||
songs.units, |
|||
song_versions.version |
|||
Song_Vocal_Versions.singers |
|||
]]) |
]]) |
||
:setJoinOn(' |
:setJoinOn('song_versions._pageID = songs._pageID') |
||
:addWhere(' |
:addWhere('songs.song_id', '>', '0') |
||
qb |
qb |
||
:addWhereList( |
:addWhereList( |
||
' |
'songs.units', |
||
'HOLDS', |
'HOLDS', |
||
args['unit'], |
args['unit'], |
||
Line 58: | Line 57: | ||
) |
) |
||
:addWhereList( |
:addWhereList( |
||
' |
'song_versions.version', |
||
'=', |
'=', |
||
args['versions'], |
args['versions'], |
||
Line 65: | Line 64: | ||
) |
) |
||
:addWhereList( |
:addWhereList( |
||
' |
'song_versions.singers', |
||
'HOLDS', |
'HOLDS', |
||
args['singers'], |
args['singers'], |
||
Line 71: | Line 70: | ||
args['singers op'] or 'OR' |
args['singers op'] or 'OR' |
||
) |
) |
||
:setOrderBy(args['order by'] or ' |
:setOrderBy(args['order by'] or 'songs.song_id ASC') |
||
:setLimit(args['limit'] or 500) |
:setLimit(args['limit'] or 500) |
||
Line 80: | Line 79: | ||
name = 'jacket', |
name = 'jacket', |
||
header = 'Jacket art', |
header = 'Jacket art', |
||
dataFields = { ' |
dataFields = { 'songs.jacket' }, |
||
func = formatJacket, |
func = formatJacket, |
||
css = { ['width'] = '64px' }, |
css = { ['width'] = '64px' }, |
||
Line 88: | Line 87: | ||
name = 'name', |
name = 'name', |
||
header = 'Song', |
header = 'Song', |
||
dataFields = { ' |
dataFields = { 'songs._pageName', 'songs.song_name' }, |
||
func = formatName |
func = formatName |
||
}, |
}, |
||
Line 94: | Line 93: | ||
name = 'unit', |
name = 'unit', |
||
header = 'Unit(s)', |
header = 'Unit(s)', |
||
dataFields = { ' |
dataFields = { 'songs.units' }, |
||
func = formatUnit |
func = formatUnit |
||
}, |
}, |
||
Line 100: | Line 99: | ||
name = 'version', |
name = 'version', |
||
header = 'Version', |
header = 'Version', |
||
dataFields = { ' |
dataFields = { 'song_versions.version' } |
||
}, |
|||
{ |
|||
name = 'singer', |
|||
header = 'Singer(s)', |
|||
dataFields = { 'Song_Vocal_Versions.singers' } |
|||
} |
} |
||
} |
} |
Latest revision as of 16:33, 22 April 2024
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_versions, songs')
:setFields([[
songs._pageName,
songs.song_name,
songs.jacket,
songs.units,
song_versions.version
]])
:setJoinOn('song_versions._pageID = songs._pageID')
:addWhere('songs.song_id', '>', '0')
qb
:addWhereList(
'songs.units',
'HOLDS',
args['unit'],
';',
'OR'
)
:addWhereList(
'song_versions.version',
'=',
args['versions'],
',',
'OR'
)
:addWhereList(
'song_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.jacket' },
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.units' },
func = formatUnit
},
{
name = 'version',
header = 'Version',
dataFields = { 'song_versions.version' }
}
}
:setData(qb:query())
return datatable:tostring()
end
return p