Bước tới nội dung

Mô đun:PHL sports team

Bách khoa toàn thư mở Wikipedia

require('strict')local p = { isalias = false }local yesno = require('Mô đun:Yesno')local constants = {	CODE_LEN = 3, SPACE = '&nbsp;', SHORT = 'short', INST = 'inst' }local function makeInvokeFunc(funcName, league)	return function (frame)		local args = (frame.args[1] ~= nil) and frame.args or frame:getParent().args		args['league'] = args['league'] or league or 'collegiate'		return p[funcName](args)	endendlocal function stripwhitespace(text) return text:match("^%s*(.-)%s*$") endlocal function load_data(args)	local data_module = 'Mô đun:PHL sports team/' .. args['league']	return mw.loadData(data_module)endlocal function get_key_by_code(code, data)	if (data[code] ~= nil and type(data[code]) == 'string') then		p.isalias = true		return data[code]	elseif (string.len(code) == constants.CODE_LEN) then		for k,v in pairs(data) do			if v[1]==code then return k end		end	end	return codeendlocal function get_icon(team, size, alt_team)	local icon = '[[Tập tin:%s colors.svg|%s|border|Màu sắc trường học %s|link=]]'	return string.format(icon, team, size or '11px', alt_team or team)endlocal 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 endendlocal function show_empty_param(param)	return mw.html.create('span'):css('color', 'red'):cssText('style'):wikitext(string.format('Giá trị cho tham số \'%s\' không được cung cấp.', param))endlocal function get_link_by_evt(args, div, divLt, text, team)	local evt = { bk = 'basketball', vb = 'volleyball', ft = 'football' }	local mRdr = require('Mô đun:Redirect')	evt = evt[args[2]] or evt[args[3]] or evt[args['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, divLt[div-2], evt)	if (args['yr'] ~= nil) then return args['yr'] .. ' ' .. evt_link .. ' team' end	return mRdr.getTarget(evt_link) or evt_linkendlocal function get_name_by_year(team, year)	if not year then return team[1] 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 team[1]endlocal function add_link(args, team, name, div, divLt, text)	local evt_link = get_link_by_evt(args, div, divLt, team[div] or team[3], team[3])	if (type(div) == 'number' and div >= 3 and div <= 6) then		if ((args['inst'] or name) ~= nil or args[3] == constants.SHORT)				then return string.format('[[%s|%s]]', evt_link or team[div], not p.isalias and team[args['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 team[3], text)endlocal function add_link_generic(args, team, text)	local mRdr = require('Mô đun: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 = team[args['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)endfunction p._main(args)	local data = load_data(args)	local in_team = stripwhitespace(args[1] 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(args[2] or '')	local in_name = args['name']	local key = get_key_by_code(in_team, data)	local team = data[key]	if (team == nil) then return error(string.format('Đội không hợp lệ: %s', in_team)) end		local out	local divLt = { "nam", "nữ", "nam trẻ'", "nữ trẻ'" }		if (in_div ~= constants.SHORT) then		local div = { inst = 2, men = 3, women = 4, junior = 5, boys = 5, girls = 6 }		in_div = div[in_div] or tonumber(in_div:match('[2-6]') or '3')		if (args[3] == constants.INST or args['inst'] ~= nil or in_div == 2) then out = p.isalias and team[in_team] or team[div['inst']]			elseif (args[3] == constants.SHORT) then out = team[7] or key or in_team			else out = in_name or team[in_div] end		if (out == nil) then return error('Không có đội ' .. divLt[in_div-2] .. '') end	else		out = team[7] 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 outendfunction p._rt(args)	args['rt'] = 'y'	return p._main(args)endfunction p._name(args)	args['icon'] = 'n'	return p._main(args)endfunction p._color(args)	local data = load_data(args)	local in_team = stripwhitespace(args[1] or '')	local no_img = string.format('[[Tập tin: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 ((data[in_team] or data[key]) == nil) then		return no_img .. note	end	return get_icon(key or in_team, args['size'], args[2]) .. noteendfunction p._generic(args)	local data = load_data(args)	local code, name, out = stripwhitespace(args[1] or ''), args['name']	local team = data[code]		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 = data[alias[1]]		name = name or alias[2]	end		if not team then return error(string.format('Đội không hợp lệ: %s', code)) end	if args[2] == constants.SHORT then out = team[2] or code		elseif name then out = team[name] 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)endfunction p._athlete(args)	local athl_1 = args['athl']	local athl_2 = args['athl2']		if athl_1 == nil then return error('Vận động viên không hợp lệ: không có giá trị') 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 args[3] = 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		args[2] = args[1]		return p._color(args) .. constants.SPACE .. lbl	else return lbl	endendfunction p._athlete_bc(args)	if (args['athl'] == nil) then	    -- reassign arguments for backward compatibility --	    args['athl'] = args[2]		args[2] = args[3] or ''		args[3] = args[4] or ''	end	return p._athlete(args)endp.main = makeInvokeFunc('_main')p.rt = makeInvokeFunc('_rt')p.name = makeInvokeFunc('_name')p.color = makeInvokeFunc('_color')p.pba = makeInvokeFunc('_generic', 'PBA')p.athlete = makeInvokeFunc('_athlete_bc')return p