Module:Rugby box

-- Implements Template:rugby box

local p = {}

local eventschema = "http://schema.org/SportsEvent"

local labels = {

['aet'] = 'a.e.t.',

['penalties'] = 'Penalties',

['attendance'] = 'Attendance:',

['referee'] = 'Referee:',

['try'] = 'Try:',

['con'] = 'Con:',

['pen'] = 'Pen:',

['drop'] = 'Drop:',

['gfm'] = 'Goal from mark:',

['cards'] = 'Cards:'

}

local function isnotempty(s)

return s and s:match( '^%s*(.-)%s*$' ) ~= ''

end

local function trim(s)

if isnotempty(s) then

s = s:match('^[\'"%s]*(.-)[\'"%s]*$')

return isnotempty(s) and s or nil

end

return nil

end

local function getid(s)

s = trim(s or '')

if s and s ~= '' then

return s

end

return nil

end

function p.main(frame)

local getArgs = require('Module:Arguments').getArgs

local args = getArgs(frame)

local id = getid(args['id'])

-- start box

local root =

mw.html.create('div')

:attr('itemscope', '')

:attr('itemtype', eventschema)

:css('width', args['size'] or '100%')

:css('background-color', args['bg'])

:addClass('vevent summary')

:attr('id', id)

-- date/time/round

local dtr = {}

for _, v in pairs({'date', 'time', 'round'}) do

if args[v] then

table.insert(dtr, args[v])

end

end

root:tag('table')

:css('float', 'left')

:css('width', args['cw1'] or '15%')

:css('table-layout', 'fixed')

:tag('tr')

:tag('td')

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

:wikitext(table.concat(dtr, '
'))

local block = root:tag('table')

:css('float', 'left')

:css('width', args['cw2'] or '61%')

:css('table-layout', 'fixed')

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

local row = block:tag('tr')

:css('vertical-align', 'top')

:css('font-weight', 'bold')

row:tag('td')

:css('width', '39%')

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

:addClass('vcard')

:tag('span')

:addClass('fn org')

:wikitext(args['team1'] or args['home'] or args['nohome'])

row:tag('td')

:css('width', '22%')

:wikitext(args['score'] or 'v')

:wikitext(args['aet'] and ' (' .. labels['aet'] .. ')' or nil)

row:tag('td')

:css('width', '39%')

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

:addClass('vcard')

:tag('span')

:addClass('fn org')

:wikitext(args['team2'] or args['away'] or args['noaway'])

row = block:tag('tr')

:css('font-size', '85%')

:css('vertical-align', 'top')

local score = {args['homescore'] or , args['awayscore'] or }

for k = 1,2 do

if score[k] == '' then

local vals = {}

for _, v in pairs({'try', 'con', 'pen', 'drop', 'gfm', 'cards'}) do

if args[v .. k] then

table.insert(vals, '\'\'\'' .. labels[v] .. '\'\'\' ' .. args[v .. k])

end

end

score[k] = table.concat(vals, '
')

end

end

row:tag('td'):css('text-align', 'right'):wikitext(score[1])

row:tag('td'):wikitext(args['report'])

row:tag('td'):css('text-align', 'left'):wikitext(score[2])

if args['penaltyscore'] then

row = block:tag('tr')

row:tag('th')

row:tag('th'):wikitext(labels['penalties'])

row:tag('th')

row = block:tag('tr')

:css('font-size', '85%')

:css('vertical-align', 'top')

row:tag('td'):css('text-align','right'):wikitext(args['penalties1'])

row:tag('td'):css('font-weight','bold'):wikitext(args['penaltyscore'])

row:tag('td'):css('text-align','left'):wikitext(args['penalties2'])

end

-- stadium/attendance/referee

local extra = {}

if args['stadium'] then

table.insert(extra, '' .. args['stadium'] .. '')

end

if args['attendance'] then

table.insert(extra, labels['attendance'] .. ' ' .. args['attendance'])

end

if args['referee'] then

table.insert(extra, labels['referee'] .. ' ' .. args['referee'] .. '')

end

root:tag('table')

:css('float', 'left')

:css('width', args['cw3'] or '24%')

:css('table-layout', 'fixed')

:tag('tr')

:tag('td')

:css('font-size', '85%')

:wikitext(table.concat(extra, '
'))

root:tag('div'):css('clear', 'both')

local check = require('Module:Check for unknown parameters')._check

local tracking = check({

['unknown']='_VALUE_ ',

['preview']='Page using Template:Rugbybox with unknown parameter "_VALUE_"',

['ignoreblank']='y',

'aet', 'attendance', 'away', 'awayscore', 'bg', 'cards1', 'cards2',

'con1', 'con2', 'cw1', 'cw2', 'cw3', 'date', 'drop1', 'drop2',

'gfm1', 'gfm2', 'home', 'homescore', 'id', 'noaway', 'nohome',

'pen1', 'pen2', 'penalties1', 'penalties2', 'penaltyscore',

'referee', 'report', 'round', 'score', 'size', 'stadium',

'team1', 'team2', 'time', 'try1', 'try2'

}, frame:getParent().args)

return tostring(root) .. tracking

end

return p