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
(created lyrics module)
 
mNo edit summary
 
(21 intermediate revisions by the same user not shown)
Line 1: Line 1:
local getArgs = require('Module:Arguments').getArgs
local stringToArray = require('Module:ProcessingFunctions').stringToArray
local VariablesLua = mw.ext.VariablesLua

local p = {}
local p = {}


local tableIdKey = 'lyrics_table_id'
function p.main(frame)
local columnVariableKey = 'lyrics_columns'
local args = frame:getParent().args


local root = mw.html.create('table'):addClass('wikitable')


function p.head(frame)
languages = {
local args = getArgs(frame)
{
name = "Japanese Lyrics",
pattern = "^japanese[0-9]+$",
lyrics = {}
},
{
name = "Romaji Lyrics",
pattern = "^romaji[0-9]+$",
lyrics = {}
},
{
name = " English Translation",
pattern = "^english[0-9]+$",
lyrics = {}
}
}
local previousId = tonumber(VariablesLua.var(tableIdKey)) or 0
for k,v in pairs(args) do
for _,lang in ipairs(languages) do
local id = args['id'] or tostring(previousId + 1)
if string.match(k, lang.pattern) then
local columnsStr = args['columns'] or ''
ind = tonumber(string.match(k, "[0-9]+"))
local splitColumns = stringToArray(',')(columnsStr)
lang.lyrics[ind] = v
local definedColumns = {}
break
local columns = {}
for _,column in ipairs(splitColumns) do
local columnTrimmed = mw.text.trim(column)
if columnTrimmed ~= '' then
if definedColumns[columnTrimmed] then
error(string.format(
'Column "%s" already defined',
columnTrimmed
))
end
end
table.insert(columns, columnTrimmed)
definedColumns[columnTrimmed] = true
end
end
end
end
local maxLen = 0
local labels = {}
for _,lang in pairs(languages) do
for _,column in ipairs(columns) do
local label = args[column]
maxLen = math.max(maxLen, #lang.lyrics)
if label and label ~= '' then
labels[column] = label
else
error(string.format(
'Column "%s" needs a header',
column
))
end
end
end
local _row = root:tag('tr')
local lyricsOptions = mw.html.create('div')
:addClass('lyrics-options')
for _,lang in ipairs(languages) do
:attr('data-id', id)
_row:tag('th'):css('width', string.format("%d\%%", 100 / #languages)):wikitext(lang.name)
:attr('data-languages', table.concat(columns, ','))
:attr('data-labels', mw.text.jsonEncode(labels))
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) .. '%')
:css('min-width', '150px')
:wikitext(args[column])
end
end
if tonumber(id) ~= nil then
for i=1,maxLen,1 do
VariablesLua.vardefine(tableIdKey, id)
local _row = root:tag('tr')
end
VariablesLua.vardefine(columnVariableKey, table.concat(columns, ','))
local nextContent = nil
return '<div>' ..
for _,lang in ipairs(languages) do
tostring(lyricsOptions) ..
local content = "<br />"
string.format('<table class="wikitable" id="lyrics-%s">', id) ..
if lang.lyrics[i] and lang.lyrics[i] ~= "''" and lang.lyrics[i] ~= '""' then
tostring(row)
content = lang.lyrics[i]
end
end

function p.line(frame)
_row:tag('td'):wikitext(content)
local function formatArg(arg)
if arg and arg ~= '' then
nextContent = lang.lyrics[i+1] or nextContent
return table.concat(stringToArray('\n')(arg), '<br>')
end
else
return '<br>'
if nextContent == nil then
break
end
end
end
end


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

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



Latest revision as of 03:22, 15 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 tableIdKey = 'lyrics_table_id'
local columnVariableKey = 'lyrics_columns'


function p.head(frame)
	local args = getArgs(frame)
	
	local previousId = tonumber(VariablesLua.var(tableIdKey)) or 0
	
	local id = args['id'] or tostring(previousId + 1)
	local columnsStr = args['columns'] or ''
	
	local splitColumns = stringToArray(',')(columnsStr)
	local definedColumns = {}
	local columns = {}
	for _,column in ipairs(splitColumns) do
		local columnTrimmed = mw.text.trim(column)
		
		if columnTrimmed ~= '' then
			if definedColumns[columnTrimmed] then
				error(string.format(
					'Column "%s" already defined',
					columnTrimmed
				))
			end
			
			table.insert(columns, columnTrimmed)
			definedColumns[columnTrimmed] = true
		end
	end
	
	local labels = {}
	for _,column in ipairs(columns) do
		local label = args[column]
		
		if label and label ~= '' then
			labels[column] = label
		else
			error(string.format(
				'Column "%s" needs a header',
				column
			))
		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(labels))
	
	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) .. '%')
			:css('min-width', '150px')
			:wikitext(args[column])
	end
	
	if tonumber(id) ~= nil then
		VariablesLua.vardefine(tableIdKey, id)
	end
	VariablesLua.vardefine(columnVariableKey, table.concat(columns, ','))
	return '<div>' ..
		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(columnVariableKey, '')
	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(columnVariableKey, '')
		local columns = stringToArray(',')(columnOrder)
		
		local row = mw.html.create('tr')
			:tag('th')
			:attr('colspan', #columns)
			:wikitext(args[1])
	
		return tostring(row) .. '</table>' .. '</div>'
	end
	
	return '</table>'
end

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