This Lua module is used on approximately 3,200 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them. |
This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
See {{ rugbybox}}
-- Implements [[Template:rugby box]]
local p = {}
local eventschema = "http://schema.org/SportsEvent"
local labels = {
'aet' = '[[Overtime (sports)#Rugby union|a.e.t.]]',
'penalties' = '[[Penalty shootout#Rugby union|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 argsv then
table.insert(dtr, argsv])
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, '<br/>'))
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 scorek == '' then
local vals = {}
for _, v in pairs({'try', 'con', 'pen', 'drop', 'gfm', 'cards'}) do
if argsv .. k then
table.insert(vals, '\'\'\'' .. labelsv .. '\'\'\' ' .. argsv .. k])
end
end
scorek = table.concat(vals, '<br />')
end
end
row:tag('td'):css('text-align', 'right'):wikitext(score1])
row:tag('td'):wikitext(args'report'])
row:tag('td'):css('text-align', 'left'):wikitext(score2])
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, '<span class="location">' .. args'stadium' .. '</span>')
end
if args'attendance' then
table.insert(extra, labels'attendance' .. ' ' .. args'attendance'])
end
if args'referee' then
table.insert(extra, labels'referee' .. ' <span class="attendee">' .. args'referee' .. '</span>')
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, '<br/>'))
root:tag('div'):css('clear', 'both')
local check = require('Module:Check for unknown parameters')._check
local tracking = check({
'unknown'='[[Category:Pages using Rugby box with unknown parameters|_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
This Lua module is used on approximately 3,200 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them. |
This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
See {{ rugbybox}}
-- Implements [[Template:rugby box]]
local p = {}
local eventschema = "http://schema.org/SportsEvent"
local labels = {
'aet' = '[[Overtime (sports)#Rugby union|a.e.t.]]',
'penalties' = '[[Penalty shootout#Rugby union|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 argsv then
table.insert(dtr, argsv])
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, '<br/>'))
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 scorek == '' then
local vals = {}
for _, v in pairs({'try', 'con', 'pen', 'drop', 'gfm', 'cards'}) do
if argsv .. k then
table.insert(vals, '\'\'\'' .. labelsv .. '\'\'\' ' .. argsv .. k])
end
end
scorek = table.concat(vals, '<br />')
end
end
row:tag('td'):css('text-align', 'right'):wikitext(score1])
row:tag('td'):wikitext(args'report'])
row:tag('td'):css('text-align', 'left'):wikitext(score2])
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, '<span class="location">' .. args'stadium' .. '</span>')
end
if args'attendance' then
table.insert(extra, labels'attendance' .. ' ' .. args'attendance'])
end
if args'referee' then
table.insert(extra, labels'referee' .. ' <span class="attendee">' .. args'referee' .. '</span>')
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, '<br/>'))
root:tag('div'):css('clear', 'both')
local check = require('Module:Check for unknown parameters')._check
local tracking = check({
'unknown'='[[Category:Pages using Rugby box with unknown parameters|_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