Module:Infobox song

local p = {}

function p._track_listing(song, album) local cargo = mw.ext.cargo local results = cargo.query(		'track_listings',		'track, song, song_page_title',		{			where = 'work = "' .. album .. '" AND main_listing = 1',			orderBy = 'track_listings._ID ASC'		}	)

local root = mw.html.create local olRoot = root:tag('ol') local has_match = false

for r = 1, #results do		local result = results[r] local page = mw.title.new(result['song_page_title'])

wikitext = result['song'] if page.exists then wikitext =  .. result['song'] ..  end

olRoot:tag('li') :attr('value', result['track']) :wikitext(wikitext)

if result['song'] == song then has_match = true end end if has_match then return tostring(root) end return ''

-- local tableRoot = root:tag('table')

-- for r = 1, #results do	-- 	local row = tableRoot:tag('tr') -- 	local result = results[r] -- 	row:tag('td') -- 		:css('padding-right', '5px') -- 		:wikitext(result['track'] .. '.') -- 	row:tag('td'):wikitext( .. result['song'] .. ) -- end end

function p.track_listing(frame) local song = frame.args[1] local album = frame.args[2] return p._track_listing(song, album) end

function p._studio_sessions(song) local cargo = mw.ext.cargo local results = cargo.query(		'studio_sessions, recordings, songs',		'studio_sessions._pageName=page',		{			where = 'songs.name = "' .. song .. '"',			join = 'recordings.song=songs.name,studio_sessions._pageName=recordings._pageName',			groupBy = 'studio_sessions._pageName'		}	)

local root = mw.html.create local ulRoot = root:tag('ul') :addClass('studio-sessions')

local sessions = {} for r = 1, #results do		local page = results[r]['page']

if r == result then root:wikitext( .. page .. ) return tostring(root) elseif page ~= nil and page ~= '' then ulRoot:tag('li') :wikitext( .. page .. ) end end

return tostring(root) -- return table.concat(sessions, ' &bull; ') end

function p.studio_sessions(frame) local album = frame.args[1] return p._studio_sessions(album) end

return p