Module:Songs: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
No edit summary |
||
Line 71: | Line 71: | ||
if result.type == "solover" then | if result.type == "solover" then | ||
type = "'''" .. horseName .. " ver.'''" | type = "'''" .. horseName .. " ver.'''" | ||
elseif | elseif result.type == "remix" then | ||
type = " | type = "Group (Remix)" | ||
elseif not result.type then | elseif not result.type then | ||
type = "Group" | if #singers == 1 then | ||
type = "'''Solo'''" | |||
else | |||
type = "Group" | |||
end | |||
end | end | ||
Revision as of 01:20, 3 October 2024
Documentation for this module may be created at Module:Songs/doc
local p = {}
local cargo = mw.ext.cargo
function p.albums(frame)
local songName = mw.text.decode(frame.args[1])
if not songName then return end
local escaped = string.gsub(songName, "'", "\\'")
local query = {
join = "Album_Songs.album=Albums.title",
where = "Album_Songs.song_page='" .. escaped .. "'",
groupBy = "Albums.title",
orderBy = "Albums.release_date ASC"
}
local fields = {
'Albums._pageTitle=album_page',
'Album_Songs.singers=singers'
}
local events = cargo.query('Albums, Album_Songs',
table.concat(fields, ','), query)
local text = ''
for _, ev in ipairs(events) do
text = text .. frame:expandTemplate {
title = 'Song Albums/Entry',
args = ev
} .. '\n'
end
return text
end
function p.events(frame)
local songName = mw.text.decode(frame.args[1])
if not songName then return end
local escaped = string.gsub(songName, "'", "\\'")
local query = {
join = "Setlist_Event._pageID=Setlist_Songs._pageID",
where = "song_page='" .. escaped .. "'",
orderBy = "event_order ASC, leg_order ASC, day ASC",
}
local fields = { 'event_page', 'leg_name', 'day', 'cast' }
local events = cargo.query('Setlist_Event, Setlist_Songs',
table.concat(fields, ','), query)
local text = ''
for _, ev in ipairs(events) do
text = text .. frame:expandTemplate {
title = 'Song Events/Entry',
args = ev
} .. '\n'
end
return text
end
function p.characterSongs(frame)
local horseName = mw.text.decode(frame.args[1])
if not horseName then return end
local escaped = string.gsub(horseName, "'", "\\'")
local query = {
limit = '1000',
where = 'Album_Songs.singers HOLDS "' .. escaped .. '"',
orderBy = "Album_Songs.song_page ASC"
}
local fields = { 'song_page', 'album', 'type', 'singers' }
local results = cargo.query('Album_Songs', table.concat(fields, ','), query)
local groups = {}
for _, result in ipairs(results) do
local singers = mw.text.split(result.singers, ",")
local type = nil
if result.type == "solover" then
type = "'''" .. horseName .. " ver.'''"
elseif result.type == "remix" then
type = "Group (Remix)"
elseif not result.type then
if #singers == 1 then
type = "'''Solo'''"
else
type = "Group"
end
end
if type ~= nil then
if not groups[result.song_page] then groups[result.song_page] = {} end
table.insert(groups[result.song_page], { album = result.album, type = type })
end
end
local text = '{| class="wikitable sortable mw-collapsible"\n! Song !! Album !! Type\n'
for song, rows in pairs(groups) do
local rowspan = #rows
local head = table.remove(rows, 1)
text = text ..
string.format('|-\n| rowspan=%d|[[%s]] || [[%s]] || %s\n', rowspan, song, head.album, head.type)
for _, row in ipairs(rows) do
text = text ..
string.format('|-\n| [[%s]] || %s\n', row.album, row.type)
end
end
text = text .. '|}'
return text
end
return p