This Lua module is used on approximately 56,000 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them. |
This module depends on the following other modules: |
This module implements Template:National squad and Template:National squad no numbers to avoid articles being added to Category:Pages where post-expand include size is exceeded when the template is used many times.
-- This module implements [[Template:National squad]] and
-- [[Template:National squad no numbers]] to avoid articles being added to
-- [[:Category:Pages where template include size is exceeded]]
-- when the template is used many times.
local p = {}
local prefixes = {
'male' = ' men\'s',
'men' = ' men\'s',
'mens' = ' men\'s',
'men\'s' = ' men\'s',
'female' = ' women\'s',
'women' = ' women\'s',
'womens' = ' women\'s',
'women\'s' = ' women\'s',
'' = ''
}
function p.main(frame)
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame, {parentFirst = true})
local country = args.country or '{{{country}}}'
local coach_label = args.coach_type or 'Coach'
local comp = args.comp or '{{{comp}}}'
local sport = args.sport or 'football'
local gender = prefixesargs.gender or '' or ''
local titlestyle = 'background-color:' .. (args.bg or 'transparent') .. ';'
.. 'color:' .. (args.fg or 'inherit') .. ';'
.. 'border:1px solid ' .. (args.bordercolor or '#aaa')
local image = args.country ~= 'Unified Team' and require('Module:Flagg').luaMain(frame, {
'cxxl',
args.country or 'none',
args.flagvar,
size = '50px'
}) or frame:expandTemplate{
title = 'flagicon image',
args = {'Olympic flag.svg', size = '50px'}
}
local ospan = '<span style="color:' .. (args.fg or 'inherit') .. '">'
local cspan = '</span>'
local title = string.format('[[%s|%s%s%s]] – [[%s|%s%s%s]]',
args'team link' or (country .. gender .. ' national ' .. sport .. ' team'),
ospan, args.title or country .. ' squad', cspan,
args'comp link' or comp, ospan, comp, cspan)
local haspos = false
-- Tracking and preview warnings
local knownargs = {['bg'=1, 'fg'=1, 'bordercolor'=1, 'coach'=1, 'coach_type'=1,
'comp'=1, 'comp link'=1, 'country'=1, 'flagvar'=1, 'gender'=1,
'list'=1, 'name'=1, 'nonumbers' = 1, 'note'=1, 'sport'=1, 'team link'=1, 'title'=1}
local badargs = {}
local numlist = {}
for k, v in pairs(args) do
if knownargsk then
elseif type(k) == 'string' then
local n = tonumber(k:match('^p(%d+)$') or k:match('pos(%d+)') or '-1')
if k:match('^p%d+$') and n >= 0 and n <= 99 then
table.insert(numlist, k:match('^p(%d+)$'))
elseif args.nonumbers and (k:match('^pos%d+$') and n >= 0 and n <= 99) then
if v and v ~= '' then haspos = true end
elseif v and v ~= '' then
table.insert(badargs, k)
end
elseif v and v ~= '' then
table.insert(badargs, k)
end
end
table.sort(
numlist,
function (a, b)
return tonumber(a) < tonumber(b) or (tonumber(a) == tonumber(b) and #a > #b)
end
)
local pv = require('Module:If preview')
local preview, tracking = '', ''
if #badargs > 0 then
for k, v in pairs(badargs) do
if v == '' then v = ' ' end
v = mw.ustring.gsub(v, '[^%w\\-_ ]', '?')
preview = preview .. pv._warning({
'Page using national squad with unknown parameter "' .. v .. '".'
})
tracking = tracking .. '[[Category:Pages using national squad with unknown parameters|' .. v .. ']]'
end
end
if (args'title' == nil and args'team link' == nil and args.country == nil) or args.comp == nil then
tracking = tracking .. '[[Category:Pages using national squad with unknown parameters|!]]'
end
if not args'comp link' then
tracking = tracking .. '[[Category:Pages using national squad without comp link]]'
end
if not args'sport' then
if not args'team link' then
tracking = tracking .. '[[Category:Pages using national squad without sport or team link]]'
end
end
if sport ~= 'football' and sport ~= 'futsal' and sport ~= 'basketball' then
if not args'team link' then
local sortkey = mw.ustring.gsub(sport, '[^A-Za-z]', ' ')
tracking = tracking .. '[[Category:Pages using national squad without team link and with an atypical sport|' .. sortkey .. ' ]]'
end
end
if prefixesargs.gender or '' == nil then
tracking = tracking .. '[[Category:Pages using national squad with unsupported gender]]'
end
if args.name == nil then
tracking = tracking .. '[[Category:Pages using national squad without name]]'
end
-- if tracking ~= '' and mw.title.getCurrentTitle().namespace > 0 then tracking = '' end
local list1 = args.list or ''
if list1 == '' then
for i,k in ipairs(numlist) do
if args'p' .. k then
local n = args.nonumbers and (args'pos' .. k or '') or tostring(k)
if n ~= '' or haspos == true then
list1 = list1 .. string.format(
'*%s <span class="vcard agent"><span class="fn">%s</span></span>\n',
n, args'p' .. k])
else
list1 = list1 .. string.format(
'*<span class="vcard agent"><span class="fn">%s</span></span>\n', args'p' .. k])
end
end
end
if args.coach then
list1 = list1 .. string.format(
'*<span class="vcard agent">%s: <span class="fn">%s</span></span>',
coach_label, args.coach)
end
end
local list3 = args.note and ('' .. args.note .. '') or nil
return require('Module:Navbox')._navbox({
name = args.name,
titlestyle = titlestyle,
listclass = 'hlist', bodyclass = 'vcard', titleclass = 'fn org',
image = image, title = title, list1 = list1, list3 = list3
}) .. tracking .. preview
end
return p