No edit summary |
No edit summary |
||
(9 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
local util_args = require('Module:ArgsUtil') |
local util_args = require('Module:ArgsUtil') |
||
− | local |
+ | local util_table = require('Module:TableUtil') |
− | local |
+ | 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 = |
+ | short = 36, |
− | medium = |
+ | medium = 48, |
long = 60, |
long = 60, |
||
square = 123 |
square = 123 |
||
} |
} |
||
+ | |||
+ | local lang = mw.getLanguage('en') |
||
local h = {} |
local h = {} |
||
⚫ | |||
function h.getInfo(str, settings) |
function h.getInfo(str, settings) |
||
− | if str == '' or not str then str = '' end |
+ | if str == '' or not str then str = 'tbd' end |
− | settings.vars = |
+ | settings.vars = h.getFromVariableOrCache(str:gsub('_', ' ')) |
⚫ | |||
⚫ | |||
⚫ | |||
− | settings.vars = { link = str, long = str, medium = str } |
||
⚫ | |||
⚫ | |||
− | 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 |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
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 |
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 |
||
⚫ | |||
+ | 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 |
||
⚫ | |||
+ | vars = { |
||
+ | link = str, |
||
+ | long = str, |
||
+ | medium = str, |
||
⚫ | |||
⚫ | |||
+ | 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 |
||
⚫ | |||
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 |
||
⚫ | |||
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( |
||
⚫ | |||
− | + | h.image(settings, size), |
|
⚫ | |||
⚫ | |||
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]] %s'):format( |
||
⚫ | |||
⚫ | |||
− | settings.size or SIZES[size], |
||
⚫ | |||
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 [[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], |
||
⚫ | |||
) |
) |
||
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 [[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) |
||
⚫ | |||
⚫ | |||
+ | 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 |
||
⚫ | |||
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( |
+ | 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) |
||
⚫ | |||
+ | end |
||
+ | |||
+ | function p.linkifexists(str, settings) |
||
+ | if not settings then settings = {} end |
||
+ | h.getInfo(str, settings) |
||
⚫ | |||
+ | 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) |
||
⚫ | |||
− | 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) |
||
⚫ | |||
+ | 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) |
||
⚫ | |||
− | 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 (' |
+ | 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 ('⁠[[File:%slogo %s.png|%spx|link=%s%s]]⁠'):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