Difference between revisions of "Module:SportsRankings"
Jump to navigation
Jump to search
blackwiki>Jts1882 (change test condition for new country) |
blackwiki>Jts1882 (add header and footer rows) |
||
| Line 72: | Line 72: | ||
end | end | ||
| − | --[[ the main function returning | + | --[[ the main function returning ranking and and movement with flag icon and name for a given country |
]] | ]] | ||
function p.main(frame) | function p.main(frame) | ||
| Line 117: | Line 117: | ||
end | end | ||
| + | |||
| + | -- outputs a table of the rankings | ||
local function table(frame, ranking, first,last) | local function table(frame, ranking, first,last) | ||
| Line 125: | Line 127: | ||
if templateArgs['caption'] then | if templateArgs['caption'] then | ||
caption = templateArgs['caption'] | caption = templateArgs['caption'] | ||
| − | + | p.replaceKeywords(caption) | |
end | end | ||
| − | |||
local outputString = '{| class="wikitable" style="text-align:center;' .. styleString .. '"' | local outputString = '{| class="wikitable" style="text-align:center;' .. styleString .. '"' | ||
outputString = outputString .. '\n|+' .. caption .. addReference(frame) | outputString = outputString .. '\n|+' .. caption .. addReference(frame) | ||
| + | |||
| + | local count = 0 | ||
| + | local header = {} | ||
| + | while count < 3 do | ||
| + | count = count + 1 | ||
| + | if templateArgs['header'..count] then | ||
| + | header[count] = templateArgs['header'..count] | ||
| + | p.replaceKeywords( header[count]) | ||
| + | outputString = outputString .. '\n|-\n| colspan="4" |' .. header[count] | ||
| + | end | ||
| + | end | ||
| + | |||
outputString = outputString .. '\n|-\n!Rank\n!Change\n!Team\n!Points ' | outputString = outputString .. '\n|-\n!Rank\n!Change\n!Team\n!Points ' | ||
local change,code = '', '' | local change,code = '', '' | ||
| Line 169: | Line 182: | ||
end | end | ||
end | end | ||
| + | |||
| + | count = 0 | ||
| + | local footer = {} | ||
| + | while count < 3 do | ||
| + | count = count + 1 | ||
| + | if templateArgs['footer'..count] then | ||
| + | footer[count] = templateArgs['footer'..count] | ||
| + | footer[count] = p.replaceKeywords(footer[count]) | ||
| + | outputString = outputString .. '\n|-\n| colspan="4" |' .. footer[count] | ||
| + | end | ||
| + | end | ||
| + | |||
| + | |||
outputString = outputString .. "\n|}" | outputString = outputString .. "\n|}" | ||
return outputString | return outputString | ||
| + | end | ||
| + | function p.replaceKeywords(keyword) | ||
| + | return string.gsub( keyword, "INSERT_UPDATE_DATE", getDate()) | ||
end | end | ||
Revision as of 09:01, 11 December 2018
| 26x26px | This module is rated as alpha. It is ready for third-party input, and may be used on a few pages to see if problems arise, but should be watched. Suggestions for new features or changes in their input and output mechanisms are welcome. |
Module to display sports rankings of countries in various sports. The data on the rankings is held in module subpages so the lists can be updated in one location.
Data subpages
- SportsRankings/data/BSWW World Ranking
- SportsRankings/data/FIBA World Rankings
- SportsRankings/data/FIFA Women's World Rankings
- SportsRankings/data/FIFA World Rankings
- SportsRankings/data/FIH Women's World Rankings
- SportsRankings/data/FIH World Rankings
- SportsRankings/data/IIHF World Ranking
- SportsRankings/data/UEFA Coefficient Rankings
- SportsRankings/data/World Football Elo Ratings
- SportsRankings/data/doc
Templates for single country rank (with flag and change):
|
|
Template to generate rankings table:
Usage
- Show ranking of named country with change:
{{#invoke:SportsRankings|main|country|mdy}}
- List ranking from start ranking to end ranking (default: 1-10):
{{#invoke:SportsRankings|list|FIFA World Rankings|first|last}}
- List ranking from for names country with number of countries above and below:
{{#invoke:SportsRankings|list2|FIFA World Rankings|country name|number to display above and below named country}}
- Show ranking of a confederation:
{{#invoke:SportsRankings|list|FIH World Rankings|first|last|select=confederation|rank_header=FIH}}
Country examples:
| Country examples | Code | Output | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| FIFA World Rankings for France | {{#invoke:SportsRankings|main |FIFA World Rankings|FRA}}
|
Template:Sandbox notice | ||||||||||||||||||||||||
| World Football Elo Ratings for France | {{#invoke:SportsRankings|main |World Football Elo Ratings|France}}
|
Template:World Football Elo Ratings/sandbox | ||||||||||||||||||||||||
| FIBA World Rankings for USA | {{#invoke:SportsRankings|main |FIBA World Rankings|USA}}
|
Lua error: expandTemplate: template "steady" does not exist. | ||||||||||||||||||||||||
| List example | Output | |||||||||||||||||||||||||
| FIFA World Rankings table (1-5) | {{#invoke:SportsRankings|list
|FIFA World Rankings
|1
|5
}}
|
Lua error: expandTemplate: template "steady" does not exist. | ||||||||||||||||||||||||
| FIBA World Rankings table (1-5) | {{#invoke:SportsRankings|list
|FIBA World Rankings
|1
|5
}}
|
Lua error: expandTemplate: template "steady" does not exist. | ||||||||||||||||||||||||
| FIBA Women's World Rankings table (1-5) | {{#invoke:SportsRankings|list
|FIBA Women's World Rankings
|1
|5
}}
|
Lua error in package.lua at line 80: module 'Module:SportsRankings/data/FIBA Women's World Rankings' not found. | ||||||||||||||||||||||||
| FIFA Women's World Rankings (1-5): | {{#invoke:SportsRankings|list
|FIFA Women's World Rankings
|1
|5
}}
|
Lua error: expandTemplate: template "steady" does not exist. | ||||||||||||||||||||||||
| FIH World Rankings by confederation | {{#invoke:SportsRankings|list
|FIH World Rankings
|1
|65
|select=AfHF
|rankheader=FIH
}}
|
Lua error: expandTemplate: template "steady" does not exist. | ||||||||||||||||||||||||
| World Football Elo Ratings(1-5): | {{#invoke:SportsRankings|list
|World Football Elo Ratings
|1
|5
}}
|
Lua error: expandTemplate: template "steady" does not exist. | ||||||||||||||||||||||||
| UEFA Coefficient Rankings (+/-2): | {{#invoke:SportsRankings|list2
|UEFA Coefficient Rankings
|Luxembourg
|2
}}
|
| ||||||||||||||||||||||||
| IIHF World Rankings (1-5) (with optional caption parameter): |
{{#invoke:SportsRankings|list
|IIHF World Rankings
|1
|5
caption=Men's IIHF World Rankings (INSERT_UPDATE_DATE)
}}
|
Lua error: expandTemplate: template "steady" does not exist. | ||||||||||||||||||||||||
| IIHF Women's World Rankings (1-5) (with optional caption parameter): |
{{#invoke:SportsRankings|list
|IIHF Women's World Rankings
|1
|5
caption=Women's IIHF World Rankings (INSERT_UPDATE_DATE)
}}
|
Lua error in package.lua at line 80: module 'Module:SportsRankings/data/IIHF Women's World Ranking' not found. |
Usage
- ↑ "The FIFA/Coca-Cola World Ranking". FIFA. 17 September 2020. Retrieved 17 September 2020.
- ↑ "FIBA Ranking Presented by Nike". FIBA. 18 September 2018. Retrieved 18 September 2018.
- ↑ "The FIFA/Coca-Cola Women's World Ranking". FIFA. 26 June 2020. Retrieved 26 June 2020.
- ↑ "FIH Men's and Women's World Ranking". FIH. 1 March 2020. Retrieved 1 March 2020.
- ↑ Elo rankings change compared to one year ago. "World Football Elo Ratings". eloratings.net. 16 September 2020. Retrieved 16 September 2020.
- ↑ "Member Associations-UEFA Coefficients". UEFA. 23 October 2018. Retrieved 23 October 2018.
- ↑ "IIHF Men's World Ranking". IIHF. 21 May 2018. Retrieved 21 May 2018.
require('Module:No globals');
local p = {}
local error_msg = '<span style=\"font-size:100%\" class=\"error\"><code style=\"color:inherit; border:inherit; padding:inherit;\">|_template=</code> missing or empty</span>';
-- data for various rankings held in module subpages, e.g. "Module:SportsRankings/data/FIFA World Rankings"
local data = {} --[[ parameters containing data help in three tables
data.source = {} -- parameters for using in cite web (title, url, website)
data.updated = {} -- date of latest update (month, day, year)
data.rankings = {} -- the rankings list (country code, ranking, movement)
data.alias = {} -- alias list (country code, country name [=key])
--]]
local templateArgs = {} -- contains arguments from template involking module
local function getArgs(frame)
local parents = mw.getCurrentFrame():getParent()
for k,v in pairs(parents.args) do
--check content
if v and v ~= "" then
templateArgs[k]=v --parents.args[k]
end
end
for k,v in pairs(frame.args) do
--check content
if v and v ~= "" then
templateArgs[k]=v --parents.args[k]
end
end
end
local function loadData(frame)
local source = frame.args[1] -- source of rankings e.g. FIFA World Rankings
data = require('Module:SportsRankings/data/'.. source);
end
local function getDate()
if templateArgs['mdy'] and templateArgs['mdy'] ~= "" then
return data.updated['month'] .. " " .. data.updated['day'] .. ", " .. data.updated['year']
else
return data.updated['day'] .. " " .. data.updated['month'] .. " " .. data.updated['year']
end
end
local function addCiteWeb(frame) -- use cite web template
return frame:expandTemplate{ title = 'cite web' , args = {
url = data.source['url'], --"https://www.fifa.com/fifa-world-ranking/ranking-table/men/index.html",
title = data.source['title'], -- "The FIFA/Coca-Cola World Ranking",
website = data.source['website'], --"FIFA",
['date'] = getDate(),
['access-date'] = getDate()
}}
end
local function addReference(frame)
local text = ""
if data.source['text'] then text = data.source['text'] end
return frame:expandTemplate{ title = 'refn' , args = {
name=frame.args[1], --ranking used, e.g. "FIFA World Rankings",
text .. addCiteWeb(frame)
}}
end
--[[ the main function returning ranking and and movement with flag icon and name for a given country
]]
function p.main(frame)
getArgs(frame) -- returns args table having checked for content
loadData(frame)
local outputString = ""
local country = templateArgs[2] -- country name or county code passed as parameter
local rank, move
for _,u in pairs(data.alias) do
if u[1]==country then
country = u[2] -- if alias (country code) then use country name as key
break
end
end
for _,v in pairs(data.rankings) do
if v[1]==country then
rank = v[2] -- get rank
move = v[3] -- get move from last ranking
break
end
end
if not rank then rank = 'NR' end
if rank ~= 'NR' then
outputString = outputString .. ' ' .. rank .. ' '
if move < 0 and math.abs( move ) == math.abs( rank ) then -- new teams in ranking: move = -ranking
outputString = outputString .. frame:expandTemplate{ title = 'new entry' }
elseif move == 0 then -- if no change in ranking
outputString = outputString .. frame:expandTemplate{ title = 'steady' }
elseif move < 0 then -- if ranking down
outputString = outputString .. frame:expandTemplate{ title = 'decrease' } .. ' ' .. math.abs(move)
elseif move > 0 then -- if ranking up
outputString = outputString .. frame:expandTemplate{ title = 'increase' } .. ' ' .. move
end
else
outputString = outputString .. frame:expandTemplate{ title = 'Abbr', args = { "NR", "Not ranked"} }
-- {{Abbr|NR|Not ranked}}
end
outputString = outputString .. ' <small>(' .. getDate() .. ')</small>'
outputString = outputString .. addReference(frame)
return outputString
end
-- outputs a table of the rankings
local function table(frame, ranking, first,last)
local styleString = ""
if templateArgs['style'] and templateArgs['style'] ~= "" then styleString = templateArgs['style'] end
local caption = ranking .. ' as of ' .. getDate() .. '.'
if templateArgs['caption'] then
caption = templateArgs['caption']
p.replaceKeywords(caption)
end
local outputString = '{| class="wikitable" style="text-align:center;' .. styleString .. '"'
outputString = outputString .. '\n|+' .. caption .. addReference(frame)
local count = 0
local header = {}
while count < 3 do
count = count + 1
if templateArgs['header'..count] then
header[count] = templateArgs['header'..count]
p.replaceKeywords( header[count])
outputString = outputString .. '\n|-\n| colspan="4" |' .. header[count]
end
end
outputString = outputString .. '\n|-\n!Rank\n!Change\n!Team\n!Points '
local change,code = '', ''
--while i<last do
for k,v in pairs(data.rankings) do
--v[2] = tonumber(v[2])
if v[2] >= first and v[2] <= last then
outputString = outputString .. '\n|-\n|' .. v[2] -- rank
local move = v[3]
if move < 0 and math.abs( move ) == math.abs( v[2] ) then -- new teams in ranking: move = -ranking
change = frame:expandTemplate{ title = 'new entry' }
elseif move == 0 then -- if no change in ranking
change = frame:expandTemplate{ title = 'steady' }
elseif move < 0 then -- if ranking down
change = frame:expandTemplate{ title = 'decrease' } .. ' ' .. math.abs(move)
elseif move > 0 then -- if ranking up
change = frame:expandTemplate{ title = 'increase' } .. ' ' .. move
end
outputString = outputString .. '||' .. change
for _,u in pairs(data.alias) do
if u[2]==v[1] then
code = u[1] -- if alias (country code) then use country name as key
break
end
end
local countryTemplate = data.templates['flagged_team_link'] -- template display flag icon and team link (e.g. fb, fbw, bk, ih)
--if ranking == "FIFA World Rankings" then countryTemplate = 'fb' end
--if ranking == "FIFA Women's World Rankings" then countryTemplate = 'fbw' end
--if ranking == "FIBA World Rankings" then countryTemplate = 'bk' end
--if ranking == "IIHF World Ranking" then countryTemplate = 'ih' end
outputString = outputString .. '\n|style="text-align:left"|' .. frame:expandTemplate{ title = countryTemplate, args = {code} } -- country
local points = ""
if v[4] then points = v[4] end
outputString = outputString .. '||' .. points -- country for now, later points
end
end
count = 0
local footer = {}
while count < 3 do
count = count + 1
if templateArgs['footer'..count] then
footer[count] = templateArgs['footer'..count]
footer[count] = p.replaceKeywords(footer[count])
outputString = outputString .. '\n|-\n| colspan="4" |' .. footer[count]
end
end
outputString = outputString .. "\n|}"
return outputString
end
function p.replaceKeywords(keyword)
return string.gsub( keyword, "INSERT_UPDATE_DATE", getDate())
end
function p.list(frame)
getArgs(frame) -- returns args table having checked for content
loadData(frame)
local ranking = frame.args[1]
local first, last = 1,10
first = tonumber(frame.args['2'])
last = tonumber(frame.args['3'])
return table(frame, ranking, first,last)
end
function p.list2(frame)
getArgs(frame) -- returns args table having checked for content
loadData(frame)
local ranking = frame.args[1]
local first, last = 1,10
local country = frame.args[2]
if string.len(country) == 3 then -- if three letter country code
for _,u in pairs(data.alias) do
if u[1]==country then
country = u[2] -- if country code then use country name
break
end
end
end
for k,v in pairs(data.rankings) do
if v[1] == country then
first = v[2]-frame.args[3]
last = v[2]+frame.args[3]
end
end
return table(frame, ranking, first,last)
end
return p