Halo Esports Wiki
Advertisement

To edit the documentation or categories for this module, click here.


local lang = mw.getLanguage('en')
local util_args = require('Module:ArgsUtil')
local LOOKUP = mw.loadData('Module:Rolenames')
local util_table = require('Module:TableUtil')

local h = {}

function h.getInfo(str, settings)
	if str == '' then str = nil end
	if settings.sub then
		settings.div = true
		if str then
			settings.sortnumber = 20
			settings.modifysub = true
		else
			settings.sortnumber = 10
			str = 'substitute'
		end
	else
		if str then
			settings.sortnumber = 10
		else
			str = ''
		end
	end
	local default = {
		adjective = str,
		short = str,
		role = str,
		rolelc = lang:lc(str or ''),
		sentence = (str or '') .. ' for',
		article = 'a',
		sortnumber = 70
	}
	settings.vars = util_args.lookupVars(str, LOOKUP, settings.allowdefault) or default
	return
end

function h.sortnumber(tbl, n, doanything)
	if not doanything then return end
	tbl:tag('span')
		:cssText('display:none;')
		:wikitext(n)
	return
end

function h.addImage(tbl, settings)
	local function addImage(tbl, role, size)
		tbl:wikitext(('[[File:%srole icon.png|%s|link=]]'):format(role, size or '15px'))
	end
	
	tbl:attr('title',settings.vars.role)
		:addClass('role-icon')
	
	if settings.sub then
		local img = tbl:tag('div')
			:addClass('role-icon-sub-image')
		addImage(img, settings.vars.role, settings.size)
		tbl:tag('div'):addClass('role-icon-sub-s'):wikitext('S')
	else
		addImage(tbl, settings.vars.role, settings.size)
	end
	
	return tbl
end

local p = {}

function p.main(frame)
	-- this should NEVER be called from Lua, only invoked from MW
	local args = util_args.merge(true)
	
	if not args[1] and not args.sub then
		return ''
	end
	
	local style = args[2] or 'rolename'
	
	return p[style](args[1], args)
end

function p.onlyimage(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	local tbl = mw.html.create('div')
	if settings.sorted then
		tbl:wikitext(h.sortnumber(settings.vars.sortnumber + settings.sortnumber))
	end
		
	return tostring(h.addImage(tbl, settings))
end

function p.sentencemultiple(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	local tbl = {
		settings.vars.article,
		settings.modifysub and 'substitute',
		settings.vars.sentence
	}
	return util_table.concat(tbl, ' ')
end

function p.rolelc(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	return settings.vars.rolelc
end

function p.sentence(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	local tbl = {
		settings.modifysub and 'substitute',
		settings.vars.sentence
	}
	return util_table.concat(tbl, ' ')
end

function p.roleonly(str, settings)
	-- Ignores whether it's a sub or not
	if not settings then settings = {} end
	h.getInfo(str, settings)
	local tbl = mw.html.create()
	h.sortnumber(tbl, settings.vars.sortnumber, settings.sorted)
	tbl:wikitext(settings.vars.role)
	return tostring(tbl)
end

function p.shortname(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	local tbl = mw.html.create()
	h.sortnumber(tbl, settings.vars.sortnumber, settings.sorted)
	tbl:wikitext(settings.vars.short)
	return tostring(tbl)
end

function p.rolename(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	local tbl = mw.html.create()
	h.sortnumber(tbl, settings.vars.sortnumber, settings.sorted)
	if settings.modifysub then
		tbl:wikitext(('Sub/%s'):format(settings.vars.short))
	else
		tbl:wikitext(settings.vars.role)
	end
	return tostring(tbl)
end

function p.default(str, settings)
	-- deprecated, do not use pls ty
	return p.rolename(str, settings)
end

return p
Advertisement