Module:Sports roster/NBA

local pp = {}

local basketball_positions = {

['PG'] = 'PG',

['G'] = 'G',

['SG'] = 'SG',

['PG/SG'] = 'CG', ['PG-SG'] = 'CG', ['SG/PG'] = 'CG', ['SG-PG'] = 'CG', ['CG'] = 'CG', ['C-G'] = 'CG',

['CG'] = 'C/G',

['SG/SF'] = 'GF', ['SG-SF'] = 'GF', ['SF/SG'] = 'GF', ['SF-SG'] = 'GF', ['G/F'] = 'GF', ['G-F'] = 'GF', ['F/G'] = 'GF', ['F-G'] = 'GF',

['GF'] = 'G/F',

['SF'] = 'SF',

['SF/PF'] = 'CM', ['SF-PF'] = 'CM', ['PF/SF'] = 'CM', ['PF-SF'] = 'CM', ['C/M'] = 'CM', ['C-M'] = 'CM',

['CM'] = 'C/M',

['F'] = 'F',

['PF'] = 'PF',

['PF/C'] = 'PF/C',

['PG/SF'] = 'PTF', ['PG/PF'] = 'PTF', ['PG-SF'] = 'PTF', ['PG-PF'] = 'PTF', ['PT/F'] = 'PTF', ['PT-F'] = 'PTF',

['PTF'] = 'PT/F',

['F/C'] = 'FC', ['F-C'] = 'FC', ['C/F'] = 'FC', ['C-F'] = 'FC', ['CF'] = 'FC',

['FC'] = 'F/C',

['C'] = 'C'

}

local ice_hockey_positions = {

['G'] = 'G',

['D'] = 'D',

['C'] = 'C',

['LW'] = 'LW',

['RW'] = 'RW'

}

local status_called = {}

-- Roster format

function pp.headings(args, keys)

local h = mw.html.create('tr')

if keys['pos'] then

h:tag('th'):tag('abbr'):attr('title', 'Position'):wikitext('Pos.')

end

if keys['num'] then

h:tag('th'):tag('abbr'):attr('title', 'Number'):wikitext('No.')

end

if keys['nat'] then

h:tag('th'):tag('abbr'):attr('title', 'Nationality'):wikitext('Nat.')

end

h:tag('th'):wikitext('Name')

if keys['sg'] then

h:tag('th'):tag('abbr'):attr('title', 'Shot/Glove'):wikitext('S/G')

end

if keys['ft'] or keys['in'] then

h:tag('th'):wikitext('Height')

end

if keys['lbs'] then

h:tag('th'):wikitext('Weight')

end

if keys['DOB'] or keys['birthyear'] then

h:tag('th'):tag('abbr'):attr('title', 'Date of birth'):wikitext('DOB')

end

if keys['acq'] then

h:tag('th'):wikitext('Acquired')

end

if keys['college'] or keys['school'] or keys['from'] or keys['birthplace'] then

h:tag('th'):wikitext('From')

end

if keys['yrs'] then

h:tag('th'):tag('abbr'):attr('title', 'Years'):wikitext('Yrs')

end

return tostring(h)

end

function pp.players_roster(args, players, keys, frame)

local tracking = ''

local res = mw.html.create('')

for k,v in ipairs(players) do

local r = res:tag('tr'):css('text-align', 'center')

if keys['pos'] then

local pos = v['pos']

if args['sport'] == "ice hockey" then

if ice_hockey_positions[pos] then

pos = ice_hockey_positions[pos]

if ice_hockey_positions[pos] then

pos = ice_hockey_positions[pos]

end

end

else

if basketball_positions[pos] then

pos = basketball_positions[pos]

if basketball_positions[pos] then

pos = basketball_positions[pos]

end

end

end

r:tag('td'):wikitext(pos or '')

end

if keys['num'] then

r:tag('td'):wikitext(v['num'] or '')

end

if keys['nat'] then

r:tag('td'):wikitext(v['nat'] or '')

end

local name_string = v['name'] or ''

if (v['inj'] or 'no') == 'yes' then

name_string = name_string .. ' File:Cruz Roja.svg'

end

if v['note'] then

name_string = name_string .. ' ' .. "(" .. v['note'] .. ")"

end

-- Insert status when needed

local status_string = ''

local status_local = v['note'] or nil

local strTwo = require('Module:String2')

local status_let_first = true

-- Only if it is defined

if status_local then

local status_list = mw.text.split(status_local, ",")

for i, s in ipairs(status_list) do

if status_let_first then

status_string = s

table.insert(status_called, s)

status_let_first = false

else

status_string = status_string..', '..s

table.insert(status_called, s)

end

-- end

end

if not status_let_first then

status_string = ' ('..status_string..')'

end

end

r:tag('td'):css('text-align', 'left'):wikitext(name_string)

if keys['sg'] then

local sg = v['sg'] or ''

r:tag('td'):wikitext(sg)

end

if keys['ft'] or keys['in'] then

local h = ''

if v['ft'] and tonumber(v['ft']) then

local inches = 12*tonumber(v['ft']) + (tonumber(v['in']) or 0)

local cm = math.floor(2.54*inches + 0.5)

h = ''

.. tonumber(v['ft']) .. '\' ' .. (tonumber(v['in']) or 0) .. '"'

.. ' (' .. (cm / 100) .. 'm)'

end

r:tag('td')

:css('text-align', 'right')

:css('white-space', 'nowrap')

:wikitext(h)

end

if keys['lbs'] then

local w = ''

if v['lbs'] and tonumber(v['lbs']) then

local kg = math.floor(0.45359237*tonumber(v['lbs']) + 0.5)

w = tonumber(v['lbs']) .. ' lb '

.. ' (' .. kg .. 'kg)'

end

r:tag('td')

:css('text-align', 'right')

:css('white-space', 'nowrap')

:wikitext(w)

end

if keys['birthyear'] then

local DOB = v['birthyear'].."-"..v['birthmonth'].."-"..v['birthday'] or ''

DOB = mw.ustring.gsub(DOB, '^%s*(%d)%-(%d%d?)%-(%d%d%d%d)%s*$', '0%1-%2-%3')

DOB = mw.ustring.gsub(DOB, '^%s*(%d%d?)%-(%d)%-(%d%d%d%d)%s*$', '%1-0%2-%3')

DOB = mw.ustring.gsub(DOB, '^%s*(%d%d)%-(%d%d)%-(%d%d%d%d)%s*$', '%3-%1-%2')

DOB = mw.ustring.gsub(DOB, '^%s*(%d%d%d%d)%-(%d)%-(%d%d?)%s*$', '%1-0%2-%3')

DOB = mw.ustring.gsub(DOB, '^%s*(%d%d%d%d)%-(%d%d?)%-(%d)%s*$', '%1-%2-0%3')

local age = frame:expandTemplate{title = 'age', args = { v['birthyear'], v['birthmonth'], v['birthday']}}

DOB = DOB..' (age '..age..')'

r:tag('td'):wikitext(DOB)

end

if keys['DOB'] then

local DOB = v['DOB'] or ''

DOB = mw.ustring.gsub(DOB, '^%s*(%d)%-(%d%d?)%-(%d%d%d%d)%s*$', '0%1-%2-%3')

DOB = mw.ustring.gsub(DOB, '^%s*(%d%d?)%-(%d)%-(%d%d%d%d)%s*$', '%1-0%2-%3')

DOB = mw.ustring.gsub(DOB, '^%s*(%d%d)%-(%d%d)%-(%d%d%d%d)%s*$', '%3-%1-%2')

DOB = mw.ustring.gsub(DOB, '^%s*(%d%d%d%d)%-(%d)%-(%d%d?)%s*$', '%1-0%2-%3')

DOB = mw.ustring.gsub(DOB, '^%s*(%d%d%d%d)%-(%d%d?)%-(%d)%s*$', '%1-%2-0%3')

local age = frame:expandTemplate{title = 'age', args = { v['DOB']}}

DOB = DOB..' (age '..age..')'

r:tag('td'):wikitext(DOB)

end

if keys['acq'] then

r:tag('td'):wikitext(v['acq'])

end

if keys['college'] or keys['school'] or keys['from'] or keys['birthplace'] then

if v['college'] or v['school'] then

r:tag('td'):css('text-align', 'left'):wikitext(v['college'] or v['school'])

elseif v['from'] then

r:tag('td'):css('text-align', 'left'):wikitext('' .. v['from'] .. '')

elseif v['birthplace'] then

r:tag('td'):css('text-align', 'left'):wikitext(v['birthplace'])

else

r:tag('td')

end

end

if keys['yrs'] then

if v['yrs'] == 'R' then

r:tag('td'):wikitext('R')

else

r:tag('td'):wikitext(v['yrs'])

end

end

end

return tostring(res) .. tracking

end

function pp.coaches_roster(coaches)

local res = ''

local role = ''

for k,v in ipairs(coaches) do

if v['role'] ~= role then

role = v['role']

res = res .. '\n; ' .. role

end

res = res .. '\n: ' .. (v['nat'] or ) .. ' ' .. (v['name'] or )

if v['note'] then

res = res .. ' ' .. "(" .. v['note'] .. ")"

end

if v['college'] then

res = res .. ' (' .. v['college'] .. ')'

elseif v['from'] then

res = res .. ' (' .. v['from'] .. ')'

end

end

return res

end

function pp.staff_roster(staff)

local res = ''

local role = ''

for k,v in ipairs(staff) do

if v['role'] ~= role then

role = v['role']

res = res .. '\n; ' .. role

end

res = res .. '\n: ' .. (v['nat'] or ) .. ' ' .. (v['name'] or )

if v['college'] then

res = res .. ' (' .. v['college'] .. ')'

elseif v['from'] then

res = res .. ' (' .. v['from'] .. ')'

end

end

return res

end

function pp.legend(args)

local status_code = {}

status_code = {C = 'Team captain', DP = 'Unsigned draft pick', FA = 'Free agent', S = 'Suspended'}

local status_letters = (args['status_order'] or '') .. 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

for l in mw.text.gsplit(status_letters, '') do

status_called[l] = false

status_code[l] = status_code[l] or '?'

status_letters = mw.ustring.gsub(status_letters, '(' .. l ..'.-)' .. l, '%1')

if args['status_text_' .. l] then

status_code[l] = args['status_text_' .. l]

end

end

-- Now for the named status

local status_exist = false

local status_string = ''

local curr_status

for k,v in ipairs(status_called) do

status_string = status_string..'('..v..') '..status_code['T']..'; '

status_exist = true

end

local res = '\n----'

res = res .. '\n;Legend\n'.. status_string

for k,v in ipairs({

{'C', 'Team captain'},

{'DP', 'Unsigned draft pick'},

{'FA', 'Free agent'},

{'S', 'Suspended'}

}) do

res = res .. "\n*(" .. v[1] .. ") " .. v[2]

end

if args['otherlegend'] then

res = res .. '\n*' .. args['otherlegend']

end

if args['otherlegend2'] then

res = res .. '\n*' .. args['otherlegend2']

end

if args['otherlegend3'] then

res = res .. '\n*' .. args['otherlegend3']

end

res = res .. '\n*File:Cruz Roja.svg Injured'

local team = args['rosterteam']

if not team then

team = string.lower(args['team'])

team = mw.ustring.gsub(team, '^.*%s(%S+)%s*$', '%1')

end

if args['update'] then

res = res .. '\n----\n Updated to transactions as of ' .. args['update'] .. '.'

end

if team and not args['update'] then

res = res .. '\n----\n  [http://nba.com/' .. team .. '/roster Roster]'

elseif team then

if args['source'] then

res = res .. '\n Source: ' .. args['source']

else

res = res .. '\n  [http://nba.com/' .. team .. '/roster Roster]'

end

end

if args['notes'] then

res = res .. ';Notes\n' .. args['notes']

end

return res

end

function pp.above(args, keys)

return '' .. args['team'] .. ' roster'

end

function pp.abovestyle(frame, args, keys)

local sportscolor = require('Module:Sports color')

return sportscolor.colorcell({['args'] = {args['team'], ['width'] = '5', ['sport'] = args['sport'] or 'basketball'}})

end

function pp.headingstyle(frame, args, keys)

local sportscolor = require('Module:Sports color')

return sportscolor.colorcell2({['args'] = {args['team'], ['width'] = '5', ['sport'] = args['sport'] or 'basketball'}})

end

function pp.footer(args, keys)

return ""

end

function pp.footerstyle(frame, args, keys)

return 'border:1px #aaa solid;'

end

-- Navbox format

function pp.players_list(args, players, keys)

local r = ''

for k,v in ipairs(players) do

r = r .. '\n*' .. (v['num'] or ) .. ' ' .. (v['name'] or )

end

return r

end

function pp.coaches_list(coaches)

local res = ''

local role = ''

for k,v in ipairs(coaches) do

if v['role'] ~= role then

role = v['role']

res = res .. '\n; ' .. role

end

res = res .. '\n: ' .. (v['name'] or '')

end

return res

end

function pp.title(args, keys)

return '' .. args['team'] .. ' current roster'

end

function pp.titlestyle(frame, args, keys)

local sportscolor = require('Module:Sports color')

return sportscolor.colorcell({['args'] = {args['team'], ['width'] = '5', ['sport'] = args['sport'] or 'basketball'}})

end

function pp.below(args, keys)

return pp.footer(args, keys)

end

function pp.belowstyle(frame, args, keys)

return 'background:transparent; border-top:1px #aaa solid;'

end

return pp