Moduuli:Ryhmätaulu
Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:Ryhmätaulu/ohje
-- This module implements {{Ryhmätaulu}} and {{Ryhmätaulu/ala}}.
local p = {}
local function formatItem( data )
if data == nil then
return ''
end
if not type( data ) == 'string' then
return ''
end
return mw.ustring.format( '%s', data )
end
local function isempty(s)
return s == nil or s == ''
end
local function addrow(parent, thstyle, tdstyle, rhead, lcontent, iscol)
if (isempty(rhead) == true and isempty(lcontent) == true) then
return
end
local row = parent:tag('tr')
if (isempty(rhead) == false) then
local thead = row:tag('th')
-- if header is full length (c == 1)
-- should align text to center but also apply other styles from normal heads
if (isempty(thstyle) == false) then
thead:cssText(thstyle)
end
-- col-header not in "ala"-table?
if (iscol == true) then
thead:attr('colspan', 2)
end
thead:wikitext(rhead)
-- don't add cell if row is full length heading
if (iscol == false) then
local tcell = row:tag('td')
if (isempty(tdstyle) == false) then
tcell:cssText(tdstyle)
end
tcell:wikitext(lcontent)
end
end
end
local function buildList( args )
local rootnode = mw.html.create()
local listataulu = rootnode:tag('table')
if args['luokka'] then
listataulu
:addClass(args['luokka'])
end
local tyylit = args['tyylit'] or ''
listataulu:cssText('text-align: left;' .. tyylit)
if args['leveys'] then
listataulu:attr('width', args['leveys'])
end
if args['reunus'] then
listataulu:attr('border', args['reunus'])
end
-- spacing and padding should not be necessary any more
if args['spacing'] then
listataulu:attr('cellspacing', args['spacing'] or 0)
end
if args['padding'] then
listataulu:attr('cellpadding', args['padding'] or 0)
end
-- otsikko koko luettelolle jos annettu
if (args['otsikko']) then
local otsikko = listataulu:tag('tr')
otsikko
:tag('caption')
:wikitext(args['otsikko'])
end
local thstyle = args['th'] or ''
local tdstyle = args['td'] or ''
local rivi = 1
while (rivi <= 50) do
local rn = args['r' .. tostring(rivi)] or ''
local ln = args['l' .. tostring(rivi)] or ''
local cn = args['c' .. tostring(rivi)] or ''
-- skip empty rows
if (isempty(rn) == false or isempty(ln) == false ) then
local iscol = false
if (isempty(cn) == false) then
iscol = true
end
addrow(listataulu, thstyle, tdstyle, rn, ln, iscol)
end
rivi = rivi +1
end
return tostring(rootnode)
end
function p.main( frame )
local origArgs
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
for k, v in pairs( frame.args ) do
origArgs = frame.args
break
end
else
origArgs = frame
end
local args = {}
for k, v in pairs( origArgs ) do
if type( k ) == 'number' or v ~= '' then
args[ k ] = v
end
end
return buildList( args )
end
-- for "ryhmätaulu/ala" if necessary
function p.ala( frame )
return p.main( frame )
end
return p