Module:Races

From the RuneScape Wiki, the wiki for all things RuneScape
Jump to navigation Jump to search
Module documentation
This documentation is transcluded from Module:Races/doc. [edit] [history] [purge]
Module:Races's function main is invoked by Template:Race.
Module:Races requires Module:Mainonly.
Module:Races loads data from Module:NPC races.
Function list
L 6 — p.main
L 26 — p._main

Parses race arguments to link to correct pages, and adds appropriate categories.


local p = {}

local onmain = require('Module:Mainonly').on_main
local racemap = mw.loadData('Module:NPC races')

function p.main(frame)
	local args = frame:getParent().args

	if args[1] and args[1] ~= '' then
		local r = p._main(args[1])
		if r ~= '' then
			return r
		else
			return args[1]
		end
	end

	local page_title = mw.title.getCurrentTitle().fullText
	local ret = 'Unknown ['.. tostring(mw.uri.fullUrl(page_title,'action=edit')) ..' edit]'
	if onmain() then
		ret = ret .. '[[Category:Needs race]]'
	end
	return ret
end

function p._main(race)
	local values = racemap[string.lower(race)]
	local r = {}
	local disp = {}
	local cats = {}
	if values then
		table.insert(r, values.racelink)
		table.insert(disp, values.racedisp or '')
		table.insert(cats, values.racecat)
		if values.addcat then
			for _, cat in ipairs(values.addcat) do
				table.insert(cats, cat)
			end
		end
	end

	for i, v in ipairs(r) do
		if (v ~= '' and disp[i] ~= '') then
			r[i] = string.format('[[%s|%s]]', v, disp[i])
		elseif (v ~= '') then
			r[i] = string.format('[[%s]]', v)
		elseif (disp[i] ~= '') then
			r[i] = string.format('%s', disp[i])
		end
	end

	if onmain() then
		for i, v in ipairs(cats) do
			if (v ~= '') then
				cats[i] = string.format('[[Category:%s]]', v)
			end
		end

		return table.concat(r, ', ')..table.concat(cats, '')
	end

	return table.concat(r, ', ')
end

return p