Module:Sandbox

Jump to navigation Jump to search

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

local getArgument = require('Module:Arguments').getArgument
require('Module:Tools')

local p = {}

-- 1 CELL STRUCTURE
function format(s, c)
	local output = ''
	if c then
		output = output .. '|class="stat-' .. c .. '"'
	end
	output = output .. '|' .. s .. '\n'
	return output
end

-- 2 ATTRIBUTE FUNCTIONS
local var -- Single variable declaration used for all of the functions
-- 2.1 NAME
function name(s, a)
	if s.name then
		if a[0] then
			var = s.name .. ' ' .. a[0] -- From SMT5 Skill Potential
		else
			var = s.name
		end
		return format(var)
	else
		error('"name" does not exist for given skill')
	end
end

-- 2.2 COST
function cost(s, a)
	if s.cost then
		if s.cost ~= '' or s.cost ~= '—' then
			local costtype = ''
			if s.costtype then
				costtype = ' ' .. s.costtype
			end
			var = s.cost .. costtype
		else
			var = '—'
		end
		return format(var, 'cost')
	else
		return ''
	end
end

-- 2.3 RANGE
function range(s)
	if s.range then
		var = s.range
		return format(var)
	else
		return ''
	end
end

-- 2.4 DESCRIPTION
function description(s)
	if s.description then
		var = s.description
		return format(var, 'align-left')
	else
		return ''
	end
end

-- 2.5 LEVEL
function level(s, a)
	if a[3] and a[3] ~= '-' then
		var = a[3]
	else
		var = 'Innate'
	end
	return format(var, 'level')
end

-- 2.6 RANK
function rank(s, a)
	if a[3] then
		var = a[3]
		return format(var, 'rank')
	else
		error('Rank/Inheritance value must be set using parameter 3')
	end
end

-- 2.7 INHERITANCE
function inherit(s, a)
	if a[3] then
		if a[3]:lower() == 'y' then
			var = '<span style="color:lime;">✔</span>'
		else
			var = '<span style="color:red;">✘</span>'
		end
		return format(var, 'inherit')
	else
		error('Rank/Inheritance value must be set using parameter 3')
	end
end

-- 2.8 FUSION
function fusion(s)
	if s.fusion then
		var = s.fusion
		return format(var, 'fusion')
	else
		return ''
	end
end

-- 2.9 PREREQUISITE
function prerequisite(s)
	if args[4] then
		var = args[4]
		return format(var)
	else
		return ''
	end
end

-- 3 IMPLEMENTATION
-- 3.1 INDEX TABLE
local indexTable = {
	['smt1'] = 1,
	['smt5'] = 1,
	['mip'] = 3,
	['p3'] = 2
}

-- 3.2 TYPE TABLE
local typeTable = {
	{ -- 1
		name,
		cost,
		description,
		level
	},
	{ -- 2
		name,
		cost,
		description,
		level,
		fusion
	},
	{ -- 3
		name,
		cost,
		range,
		description,
		rank,
		inherit
	},
}

-- 3.3 MAIN FUNCTION
function p.Main(frame)
	local args = frame.args
	local output = ''
	
	if args[1] then
		if args[2] then
			local skill = mw.loadData('Module:Data/Skill/' .. args[1]:lower()).skill
			if string.sub(args[2], -2, -2) == '+' or string.sub(args[2], -2, -2) == '-' then -- For SMT5 Skill Potential
					args[0] = string.sub(args[2], -2, -1) -- Passes to args[0] as a message for name and cost functions
					args[2] = trim(string.sub(args[2]:lower(), 1, -3))
			end
			if skill[args[2]:lower()] then
				skill = skill[args[2]:lower()]
				local passTable = typeTable[indexTable[args[1]:lower()]]
				local i = 0
		
				while i < #passTable do
					output = output .. passTable[i+1](skill, args)
					i = i + 1
				end
				return output
			else
				error('The skill "' .. args[2]:lower() .. '" does not exist at Module:Data/Skill/' .. args[1]:lower())
			end
		else
			error("No skill argument was passed")
		end
	else
		error("No arguments were passed")
	end
end

return p