VALORANT Esports Wiki
Register
Advertisement

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


local util_args = require('Module:ArgsUtil')
local util_table = require('Module:TableUtil')
local util_text = require('Module:TextUtil')
local util_vars = require('Module:VarsUtil')
local cache = require('mw.ext.LuaCache')
local PREFIX = 'teamnames_08_'
local SIZES = {
	short = 36,
	medium = 48,
	long = 60,
	square = 123
}

local lang = mw.getLanguage('en')

local h = {}
local p = {}

function h.getInfo(str, settings)
	if str == '' or not str then str = 'tbd' end
	settings.vars = h.getFromVariableOrCache(str:gsub('_', ' '))
	if settings.suffix then
		settings.link = settings.link or (settings.vars.link .. '/' .. settings.suffix)
	else
		settings.link = settings.link or settings.vars.link
	end
	if settings.short then
		settings.vars.short = settings.short
	end
	settings.linked = not settings.vars.exception
	return
end

function h.getFromVariableOrCache(str)
	local key = PREFIX .. lang:lc(str)
	return util_vars.getObject(key) or h.getFromCacheOrTeamnames(str, key)
end

function h.getFromCacheOrTeamnames(str, key)
	local vars = cache.get(key) or h.getFromTeamnames(str, key)
	if vars.exists == nil then
		vars.exists = true
	end
	util_vars.setObject(key, vars)
	return vars
end

function h.getFromTeamnames(str, key)
	local vars_init = util_args.lookupVars(str, mw.loadData('Module:Teamnames'), true)
	local vars
	if vars_init then
		vars = util_table.shallowClone(vars_init)
		vars.file = vars.link or ''
		vars.exception = util_args.nilToFalse(vars.exception)
		vars.exists = true
	else
		vars = {
			link = str,
			long = str,
			medium = str,
			short = mw.ustring.upper(mw.ustring.sub(str:gsub('Team ',''), 1, 4)),
			file = '',
			exception = false,
			exists = false,
		}
	end
	cache.set(key, vars)
	return vars
end

function h.linkedDisplay(linked, link, display)
	if not linked then
		return display
	else
		return ('[[%s|%s]]'):format(link, display)
	end
end

function h.right(settings, size)
	return ('<span class="team"><span class="teamimage-right">%s</span><span class="teamname">%s</span></span>'):format(
		h.image(settings, size),
		settings.vars[size]
	)
end

function h.rightlinked(settings, size)
	return ('<span class="team"><span class="teamimage-right">%s</span><span class="teamname">%s</span></span>'):format(
		h.image(settings, size),
		h.linkedDisplay(settings.linked, settings.link, settings.vars[size])
	)
end

function h.left(settings, size)
	return ('<span class="team"><span class="teamname">%s</span><span class="teamimage-left">%s</span></span>'):format(
		settings.vars[size],
		h.image(settings, size)
	)
end

function h.leftlinked(settings, size)
	return ('<span class="team"><span class="teamname">%s</span><span class="teamimage-left">%s</span></span>'):format(
		h.linkedDisplay(settings.linked, settings.link, settings.vars[size]),
		h.image(settings, size)
	)
end

function h.image(settings, size, shape)
	return ('&#8288;[[File:%slogo %s.png|%spx|link=%s%s]]&#8288;'):format(
		settings.vars.file,
		shape or 'std',
		settings.size or SIZES[size],
		settings.linked and settings.link or '',
		settings.vars.class and ('|class=%s-logo-std'):format(settings.vars.class) or ''
	)
end

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

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

function p.linkifexists(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	if not settings.vars.exists then
		return nil
	end
	return settings.link
end

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

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

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

function p.onlyimage(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	settings.linked = false
	return h.image(settings, 'long')
end

function p.onlyimageshort(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	settings.linked = false
	return h.image(settings, 'short')
end

function p.onlyimagelinked(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	return h.image(settings, 'long')
end

function p.onlyimagelinkedmedium(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	return h.image(settings, 'medium')
end

function p.onlyimagelinkedshort(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	return h.image(settings, 'short')
end

function p.square(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	settings.linked = false
	return h.image(settings, 'square', 'square')
end

function p.squarelinked(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	return h.image(settings, 'square', 'square')
end

function p.mediumplainlinked(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	return h.linkedDisplay(settings.linked, settings.link, settings.vars.medium)
end

function p.plainlinked(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	return h.linkedDisplay(settings.linked, settings.link, settings.vars.long)
end

function p.rightshort(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	return h.right(settings, 'short')
end

function p.rightmedium(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	return h.right(settings, 'medium')
end

function p.rightlong(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	return h.right(settings, 'long')
end

function p.rightshortlinked(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	return h.rightlinked(settings, 'short')
end

function p.rightmediumlinked(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	return h.rightlinked(settings, 'medium')
end

function p.rightlonglinked(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	return h.rightlinked(settings, 'long')
end

function p.leftshort(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	return h.left(settings, 'short')
end

function p.leftmedium(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	return h.left(settings, 'medium')
end

function p.leftlong(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	return h.left(settings, 'long')
end

function p.leftshortlinked(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	return h.leftlinked(settings, 'short')
end

function p.leftmediumlinked(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	return h.leftlinked(settings, 'medium')
end

function p.leftlonglinked(str, settings)
	if not settings then settings = {} end
	h.getInfo(str, settings)
	return h.leftlinked(settings, 'long')
end

function p.table(str, settings)
	return settings.vars
end

return p
Advertisement