Module:Songs

From Umamusume Wiki
Revision as of 19:57, 2 October 2024 by Kanade (talk | contribs)
Jump to navigation Jump to search

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.songs(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_title ASC"
	}
	local fields = {'song_title', 'album', 'type'}
	local results = cargo.query('Album_Songs', table.concat(fields, ','), query)
	
	local table = '{| class="wikitable sortable mw-collapsible"\n! Song !! Album !! Type\n'
	
	for _, row in ipairs(results) do
		if row.song_title and row.song_title ~= "" and not string.find(row.song_title, "% Size%)") and not string.find(row.song_title, "% Remix%)") then
            if not row.type or row.type == "solover" or row.type == "solo" then
				if row.type == "solover" then
                    type = "'''" .. horseName .. " ver.'''"
                elseif row.type == "solo" then
                    type = "'''Solo'''"
                else
                    type = "Group"
                end            	
                table = table .. '|-\n| [[' .. row.song_title .. ']] || [[' .. row.album .. ']] || ' .. type .. '\n'
            end
    	end
	end

    table = table .. '|}'
    
    return table
end
return p