Module:Media table

From Rhythm Heaven Wiki
Revision as of 10:31, 23 September 2025 by HyperNervie (talk | contribs)
Jump to navigation Jump to search

Documentation for this module may be created at Module:Media table/doc

local p = {}

local function matchExtension(fn, ext)
	fn = mw.ustring.lower(fn)
	ext = "." .. mw.ustring.lower(ext)
	return mw.ustring.sub(fn, -#ext) == ext
end

local function mediaType(filename)
	local extensions = {"mkv", "mov", "mp4", "ogv", "webm"}
	for _, ext in ipairs(extensions) do
		if matchExtension(filename, ext) then return "Video" end
	end
	return "Audio"
end

local function bold(text)
	return mw.getCurrentFrame():expandTemplate{
		title = "Nihongo", args = {text}
	}
end

function p.makeTable(args)
	local html = mw.html.create("table")
		:addClass("wikitable")
		:addClass("mediatable")
	html:tag("caption"):wikitext(
		mw.getCurrentFrame():extensionTag{
			name = "templatestyles",
			args = {src = "Media table/styles.css"}
		}
	)
	local tbody = html:tag("tbody")
	for _, argset in ipairs(args) do
		tbody:tag("tr")
		:tag("td"):wikitext(
			"[[File:", mediaType(argset.file), ".svg|x20px|link=]] ",
			bold(argset.title),
			not argset.desc and "" or (" - " .. argset.desc),
			"<br><center>[[File:", argset.file, "]]</center>"
		):done()
		:tag("td"):wikitext(
			"[[:File:", argset.file, "|File info]]",
			"<br>", argset.length
		)
	end
	return tostring(html)
end

local function isEmpty(t)
	for k, v in pairs(t) do return false end
	return true
end

function p.main(frame)
	local parentFrame = frame:getParent()
	local args = {}
	local i = 1
	while true do
		local argset = {
			file = parentFrame.args["file" .. i],
			title = parentFrame.args["title" .. i],
			desc = parentFrame.args["desc" .. i],
			length = parentFrame.args["length" .. i]
		}
		if isEmpty(argset) then break end
		args[i] = argset
		i = i + 1
	end
	return p.makeTable(args)
end

return p