![]() | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is semi-protected from editing. |
{{#invoke:PHL sports team|function_name}}
Philippine Basketball Association (PBA) teams, includes PBA D–League
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
require('strict')
local p = { isalias = false }
local yesno = require('Module:Yesno')
local constants = { CODE_LEN = 3, SPACE = ' ', SHORT = 'short', INST = 'inst' }
local function makeInvokeFunc(funcName, league)
return function (frame)
local args = (frame.args1 ~= nil) and frame.args or frame:getParent().args
args'league' = args'league' or league or 'collegiate'
return pfuncName](args)
end
end
local function stripwhitespace(text) return text:match("^%s*(.-)%s*$") end
local function load_data(args)
local data_module = 'Module:PHL sports team/' .. args'league'
return mw.loadData(data_module)
end
local function get_key_by_code(code, data)
if (datacode ~= nil and type(datacode]) == 'string') then
p.isalias = true
return datacode
elseif (string.len(code) == constants.CODE_LEN) then
for k,v in pairs(data) do
if v1==code then return k end
end
end
return code
end
local function get_icon(team, size, alt_team)
local icon = '[[File:%s colors.svg|%s|border|%s school colors|link=]]'
return string.format(icon, team, size or '11px', alt_team or team)
end
local function get_athlete_link(link, athl_name)
if mw.title.new(link or athl_name, '').exists == true then return string.format('[[%s|%s]]', link or athl_name, athl_name) else return athl_name end
end
local function show_empty_param(param)
return mw.html.create('span'):css('color', 'red'):cssText('style'):wikitext(string.format('Value for parameter \'%s\' not provided.', param))
end
local function get_link_by_evt(args, div, divLt, text, team)
local evt = { bk = 'basketball', vb = 'volleyball', ft = 'football' }
local mRdr = require('Module:Redirect')
evt = evtargs2]] or evtargs3]] or evtargs'evt']]
if evt == nil then
if type(div) == 'number' and div < 3 then
return mRdr.getTarget(team)
else return mRdr.getTarget(text) end
end
if (type(div) == 'string') then div = 3 end
local evt_link = string.format('%s %s %s', text, divLtdiv-2], evt)
if (args'yr' ~= nil) then return args'yr' .. ' ' .. evt_link .. ' team' end
return mRdr.getTarget(evt_link) or evt_link
end
local function get_name_by_year(team, year)
if not year then return team1 end
for k, v in pairs(team) do
if mw.ustring.find(k, "%d%d%d%dthru%d%d%d%d$") then
local start_year, end_year = mw.ustring.match(k, "(%d%d%d%d)thru(%d%d%d%d)$")
if (tonumber(start_year) <= tonumber(year)) and (tonumber(year) <= tonumber(end_year)) then
return v
end
end
end
return team1
end
local function add_link(args, team, name, div, divLt, text)
local evt_link = get_link_by_evt(args, div, divLt, teamdiv or team3], team3])
if (type(div) == 'number' and div >= 3 and div <= 6) then
if ((args'inst' or name) ~= nil or args3 == constants.SHORT)
then return string.format('[[%s|%s]]', evt_link or teamdiv], not p.isalias and teamargs'inst']] or text)
elseif (evt_link ~= nil) then return string.format('[[%s|%s]]', evt_link, text)
else return string.format('[[%s]]', text) end
end
return string.format('[[%s|%s]]', evt_link or team3], text)
end
local function add_link_generic(args, team, text)
local mRdr = require('Module:Redirect')
local tln = team.link or get_name_by_year(team, args'season' or args'team'])
local dab = team.dab and (tln .. ' (' .. team.dab .. ')') or nil
local fln = dab or tln
if args'name' then fln = teamargs'name']] or dab or tln end
if args'season' then fln = args'season' .. ' ' .. tln .. ' season'
elseif args'team' then fln = args'team' .. ' ' .. tln .. ' team'
else fln = mRdr.getTarget(fln) end
return string.format('[[%s|%s]]', fln or dab or tln, text)
end
function p._main(args)
local data = load_data(args)
local in_team = stripwhitespace(args1 or '')
if (in_team:match('^{{{.*}}}$') ~= nil) then return show_empty_param(in_team) elseif (in_team == '' or nil) then return '—' end
local in_div = stripwhitespace(args2 or '')
local in_name = args'name'
local key = get_key_by_code(in_team, data)
local team = datakey
if (team == nil) then return tostring(mw.html.create('span'):css('color', 'red'):cssText('style'):wikitext(string.format('Invalid team: %s', in_team))) end
local out
local divLt = { "men's", "women's", "boys'", "girls'" }
if (in_div ~= constants.SHORT) then
local div = { inst = 2, men = 3, women = 4, junior = 5, boys = 5, girls = 6 }
in_div = divin_div or tonumber(in_div:match('[2-6]') or '3')
if (args3 == constants.INST or args'inst' ~= nil or in_div == 2) then out = p.isalias and teamin_team or teamdiv'inst']]
elseif (args3 == constants.SHORT) then out = team7 or key or in_team
else out = in_name or teamin_div end
if (out == nil) then return mw.html.create('span'):css('color', 'red'):cssText('style'):wikitext('No ' .. divLtin_div-2 .. ' team') end
else
out = team7 or key or in_team
end
out = out:gsub("-", "–")
if yesno(args'add_link' or 'y') then
out = add_link(args, team, in_name, in_div, divLt, out)
end
if yesno(args'icon' or 'y') then
local icon = get_icon(key or in_team, args'iconsize'])
out = yesno(args'rt' or 'n') and out .. constants.SPACE .. icon or icon .. constants.SPACE .. out
end
return out
end
function p._rt(args)
args'rt' = 'y'
return p._main(args)
end
function p._name(args)
args'icon' = 'n'
return p._main(args)
end
function p._color(args)
local data = load_data(args)
local in_team = stripwhitespace(args1 or '')
local no_img = string.format('[[File:No image.svg|%s|link=]]', args'size' or '11px')
local note = ''
if in_team and in_team:match('[%*]$') then
note = mw.ustring.gsub(in_team, '^(.-)([%*]*)$', '%2')
in_team = mw.ustring.gsub(in_team, '^(.-)([%*]*)$', '%1')
end
if (in_team:match('^{{{.*}}}$') ~= nil) then
return show_empty_param(in_team) .. note
elseif (in_team == '' or nil) then return no_img .. note end
local key = get_key_by_code(in_team, data)
if ((datain_team or datakey]) == nil) then
return no_img .. note
end
return get_icon(key or in_team, args'size'], args2]) .. note
end
function p._generic(args)
local data = load_data(args)
local code, name, out = stripwhitespace(args1 or ''), args'name'
local team = datacode
if (code:match('^{{{.*}}}$') ~= nil) then return show_empty_param(code) elseif (code == '' or nil) then return '—' end
if type(team) == 'string' then
local alias = mw.text.split(team, '%s*|%s*')
team = dataalias1]]
name = name or alias2
end
if not team then return mw.html.create('span'):css('color', 'red'):cssText('style'):wikitext(string.format('Invalid team: %s', code)) end
if args2 == constants.SHORT then out = team2 or code
elseif name then out = teamname or name
else out = get_name_by_year(team, args'season' or args'team' or args'yr'])
end
return add_link_generic(args, team, out)
end
function p._athlete(args)
local athl_1 = args'athl'
local athl_2 = args'athl2'
if athl_1 == nil then return mw.html.create('span'):css('color', 'red'):cssText('style'):wikitext('Invalid athlete: no value') end
local link = get_athlete_link(args'link'], athl_1)
if (athl_2 ~= nil) then link = link .. ' and ' .. get_athlete_link(args'link2'], athl_2) end
local showicon = yesno(args'icon'])
local sport = args'sp'
if (showicon) then args3 = constants.SHORT end
args'add_link' = 'n'
local lbl = p._name(args)
if (sport ~= nil) then
lbl = string.format('%s <span style="font-size:90%%;">(%s, %s)</span>', link, lbl, string.lower(sport))
else lbl = string.format('%s <span style="font-size:90%%;">(%s)</span>', link, lbl)
end
if (showicon) then
args2 = args1
return p._color(args) .. constants.SPACE .. lbl
else return lbl
end
end
function p._athlete_bc(args)
if (args'athl' == nil) then
-- reassign arguments for backward compatibility --
args'athl' = args2
args2 = args3 or ''
args3 = args4 or ''
end
return p._athlete(args)
end
p.main = makeInvokeFunc('_main')
p.rt = makeInvokeFunc('_rt')
p.name = makeInvokeFunc('_name')
p.color = makeInvokeFunc('_color')
p.pba = makeInvokeFunc('_generic', 'PBA')
p.mpbl = makeInvokeFunc('_generic', 'MPBL')
p.athlete = makeInvokeFunc('_athlete_bc')
return p