Fortnite Esports Wiki
No edit summary
No edit summary
 
(15 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
local util_args = require('Module:ArgsUtil')
 
local util_args = require('Module:ArgsUtil')
local LOOKUP = mw.loadData('Module:Teamnames')
+
local util_table = require('Module:TableUtil')
local lang = mw.getLanguage('en')
+
local util_text = require('Module:TextUtil')
  +
local util_vars = require('Module:VarsUtil')
  +
local cache = require('mw.ext.LuaCache')
  +
local PREFIX = 'teamnames_09_'
 
local SIZES = {
 
local SIZES = {
short = 38,
+
short = 36,
medium = 45,
+
medium = 48,
 
long = 60,
 
long = 60,
 
square = 123
 
square = 123
 
}
 
}
  +
  +
local lang = mw.getLanguage('en')
   
 
local h = {}
 
local h = {}
 
local p = {}
   
 
function h.getInfo(str, settings)
 
function h.getInfo(str, settings)
 
if str == '' or not str then str = 'tbd' end
 
if str == '' or not str then str = 'tbd' end
settings.vars = util_args.lookupVars(str, LOOKUP, true)
+
settings.vars = h.getFromVariableOrCache(str:gsub('_', ' '))
if settings.vars then
 
settings.file = settings.vars.link
 
else
 
settings.vars = { link = str, long = str, medium = str }
 
if settings.short then
 
settings.vars.short = settings.short
 
else
 
-- if we don't have actual variables defined for this team then
 
-- other than 'Team ', the shortname will be the first 4 characters of the long name
 
settings.vars.short = lang:uc(str:gsub('Team ',''):sub(1, 4))
 
end
 
settings.file = ''
 
end
 
 
if settings.suffix then
 
if settings.suffix then
settings.link = settings.vars.link .. '/' .. settings.suffix
+
settings.link = settings.link or (settings.vars.link .. '/' .. settings.suffix)
 
else
 
else
settings.link = settings.vars.link
+
settings.link = settings.link or settings.vars.link
 
end
 
if settings.short then
 
settings.vars.short = settings.short
 
end
 
end
 
settings.linked = not settings.vars.exception
 
settings.linked = not settings.vars.exception
 
return
 
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
 
end
   
Line 39: Line 72:
 
if not linked then
 
if not linked then
 
return display
 
return display
else
 
return ('[[%s|%s]]'):format(link, display)
 
 
end
 
end
  +
if (link or display) and (not link or not display) then
  +
error(('Incomplete Teamnames data for %s'):format(link or display))
  +
elseif not link or not display then
  +
error('Missing Teamnames data for a recent entry')
  +
end
 
return ('[[%s|%s]]'):format(link, display)
 
end
 
end
   
 
function h.right(settings, size)
 
function h.right(settings, size)
  +
return ('<span class="team"><span class="teamimage-right">%s</span><span class="teamname">%s</span></span>'):format(
return ('[[File:%slogo std.png|%spx|link=%s]]&nbsp;%s'):format(
 
settings.file,
+
h.image(settings, size),
settings.size or SIZES[size],
 
settings.linked and settings.link or '',
 
 
settings.vars[size]
 
settings.vars[size]
 
)
 
)
Line 54: Line 89:
   
 
function h.rightlinked(settings, size)
 
function h.rightlinked(settings, size)
  +
return ('<span class="team"><span class="teamimage-right">%s</span><span class="teamname">%s</span></span>'):format(
return ('[[File:%slogo std.png|%spx|link=%s]]&nbsp;%s'):format(
 
 
h.image(settings, size),
settings.file,
 
settings.size or SIZES[size],
 
settings.linked and settings.link or '',
 
 
h.linkedDisplay(settings.linked, settings.link, settings.vars[size])
 
h.linkedDisplay(settings.linked, settings.link, settings.vars[size])
 
)
 
)
Line 63: Line 96:
   
 
function h.left(settings, size)
 
function h.left(settings, size)
  +
return ('<span class="team"><span class="teamname">%s</span><span class="teamimage-left">%s</span></span>'):format(
return ('%s&nbsp;[[File:%slogo std.png|%spx|link=%s]]'):format(
 
 
settings.vars[size],
 
settings.vars[size],
  +
h.image(settings, size)
settings.file,
 
settings.size or SIZES[size],
 
settings.linked and settings.link or ''
 
 
)
 
)
 
end
 
end
   
 
function h.leftlinked(settings, size)
 
function h.leftlinked(settings, size)
  +
return ('<span class="team"><span class="teamname">%s</span><span class="teamimage-left">%s</span></span>'):format(
return ('%s&nbsp;[[File:%slogo std.png|%spx|link=%s]]'):format(
 
 
h.linkedDisplay(settings.linked, settings.link, settings.vars[size]),
 
h.linkedDisplay(settings.linked, settings.link, settings.vars[size]),
  +
h.image(settings, size)
settings.file,
 
 
)
  +
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.size or SIZES[size],
settings.linked and settings.link or ''
+
settings.linked and settings.link or '',
  +
settings.vars.class and ('|class=%s-logo-std'):format(settings.vars.class) or ''
 
)
 
)
 
end
 
end
   
local p = {}
 
 
function p.main(frame)
 
function p.main(frame)
 
-- this should NEVER be called from Lua, only invoked from MW
 
-- this should NEVER be called from Lua, only invoked from MW
local args = util_args.merge(true)
+
local args = util_args.merge()
 
if not args[1] then
 
if not args[1] then
 
return ''
 
return ''
Line 95: Line 133:
 
if not settings then settings = {} end
 
if not settings then settings = {} end
 
h.getInfo(str, settings)
 
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
 
return settings.link
 
end
 
end
Line 119: Line 166:
 
if not settings then settings = {} end
 
if not settings then settings = {} end
 
h.getInfo(str, settings)
 
h.getInfo(str, settings)
 
settings.linked = false
return ('[[File:%slogo std.png|%spx|link=]]'):format(
 
  +
return h.image(settings, 'long')
settings.file,
 
  +
end
settings.size or SIZES.long
 
  +
)
 
  +
function p.onlyimageshort(str, settings)
  +
if not settings then settings = {} end
  +
h.getInfo(str, settings)
 
settings.linked = false
  +
return h.image(settings, 'short')
 
end
 
end
   
Line 128: Line 180:
 
if not settings then settings = {} end
 
if not settings then settings = {} end
 
h.getInfo(str, settings)
 
h.getInfo(str, settings)
  +
return h.image(settings, 'long')
return ('[[File:%slogo std.png|%spx|link=%s]]'):format(
 
  +
end
settings.file,
 
  +
settings.size or SIZES.long,
 
  +
function p.onlyimagelinkedmedium(str, settings)
settings.linked and settings.link or ''
 
  +
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
 
end
   
Line 138: Line 198:
 
if not settings then settings = {} end
 
if not settings then settings = {} end
 
h.getInfo(str, settings)
 
h.getInfo(str, settings)
 
settings.linked = false
return ('[[File:%slogo square.png|%spx|link=]]'):format(
 
  +
return h.image(settings, 'square', 'square')
settings.file,
 
settings.size or SIZES.square
 
)
 
 
end
 
end
   
Line 147: Line 205:
 
if not settings then settings = {} end
 
if not settings then settings = {} end
 
h.getInfo(str, settings)
 
h.getInfo(str, settings)
return ('[[File:%slogo square.png|%spx|link=%s]]'):format(
+
return h.image(settings, 'square', 'square')
settings.file,
 
settings.size or SIZES.square,
 
settings.linked and settings.link or ''
 
)
 
 
end
 
end
   

Latest revision as of 21:43, 9 August 2021

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

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_09_'
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
	end
	if (link or display) and (not link or not display) then
		error(('Incomplete Teamnames data for %s'):format(link or display))
	elseif not link or not display then
		error('Missing Teamnames data for a recent entry')
	end
	return ('[[%s|%s]]'):format(link, display)
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