Permanently protected module
From Wikipedia, the free encyclopedia


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("-", "&ndash;")

	

	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&nbsp;<span style="font-size:90%%;">(%s,&nbsp;%s)</span>', link, lbl, string.lower(sport))

	else lbl = string.format('%s&nbsp;<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