Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:Lyrics: Difference between revisions

From Sekaipedia
Content added Content deleted
(temporary way to get in labels)
(add column definition safety)
Line 14: Line 14:
local columnOrder = args['column order']
local columnOrder = args['column order']
local columns = stringToArray(',')(columnOrder)
local splitColumns = stringToArray(',')(columnOrder)
local definedColumns = {}
for i,column in ipairs(columns) do
columns[i] = mw.text.trim(column)
local columns = {}
for _,column in ipairs(splitColumns) do
local columnTrimmed = mw.text.trim(column)
if columnTrimmed ~= '' then
if definedColumns[columnTrimmed] then
error('Column already defined')
end
table.insert(columns, columnTrimmed)
end
end
end
Line 31: Line 41:
local row = mw.html.create('tr')
local row = mw.html.create('tr')
:addClass('lyrics-row')
:addClass('lyrics-row')
local columns = stringToArray(',')(columnOrder)
for _,column in ipairs(columns) do
for _,column in ipairs(columns) do
row:tag('th')
row:tag('th')

Revision as of 13:24, 14 April 2023

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

local getArgs   = require('Module:Arguments').getArgs
local stringToArray = require('Module:ProcessingFunctions').stringToArray
local VariablesLua = mw.ext.VariablesLua

local p = {}

local columnOrderVariableKey = 'lyrics_column_order'


function p.head(frame)
	local args = getArgs(frame)
	
	local id = args['id'] or '1'
	local columnOrder = args['column order']
	
	local splitColumns = stringToArray(',')(columnOrder)
	local definedColumns = {}
	local columns = {}
	for _,column in ipairs(splitColumns) do
		local columnTrimmed = mw.text.trim(column)
		
		if columnTrimmed ~= '' then
			if definedColumns[columnTrimmed] then
				error('Column already defined')
			end
			
			table.insert(columns, columnTrimmed)
		end
	end
	
	local lyricsOptions = mw.html.create('div')
		:addClass('lyrics-options')
		:attr('data-id', id)
		:attr('data-languages', table.concat(columns, ','))
		:attr('data-labels', mw.text.jsonEncode({
			['japanese'] = 'Japanese',
			['romaji'] = 'Romaji',
			['english'] = 'English'
		}))
	
	local row = mw.html.create('tr')
		:addClass('lyrics-row')
	for _,column in ipairs(columns) do
		row:tag('th')
			:addClass('lyrics-' .. column)
			:attr('width', math.floor(100 / #columns) .. '%')
			:wikitext(args[column])
	end
	
	VariablesLua.vardefine(columnOrderVariableKey, table.concat(columns, ','))
	return tostring(lyricsOptions) ..
		string.format('<table class="wikitable" id="lyrics-%s">', id) ..
		tostring(row)
end

function p.line(frame)
	local function formatArg(arg)
		if arg and arg ~= '' then
			return table.concat(stringToArray('\n')(arg), '<br>')
		else
			return '<br>'
		end
	end

	local args = getArgs(frame)
	
	local root = mw.html.create('tr'):addClass('lyrics-row')
	
	local columnOrder = VariablesLua.var(columnOrderVariableKey, '')
	local columns = stringToArray(',')(columnOrder)
	
	for _,column in ipairs(columns) do
		root:tag('td')
			:addClass('lyrics-' .. column)
			:wikitext(formatArg(args[column])
		)
	end
	
	return tostring(root)
end

function p.tail(frame)
	local args = getArgs(frame)
	
	if args[1] then
		local columnOrder = VariablesLua.var(columnOrderVariableKey, '')
		local columns = stringToArray(',')(columnOrder)
		
		local row = mw.html.create('tr')
			:tag('th')
			:attr('colspan', #columns)
			:wikitext(args[1])
	
		return tostring(row) .. '</table>'
	end
	
	return '</table>'
end

return p
Cookies help us deliver our services. By using our services, you agree to our use of cookies.