Editing Module:Aligned table

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. Read the Privacy Policy to learn what information we collect about you and how we use it.

If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
-- This module implements {{aligned table}}
-- This module implements {{aligned table}}
local p = {}
local p = {}
local function isnotempty(s)
return s and s:match( '^%s*(.-)%s*$' ) ~= ''
end


function p.table(frame)
function p.table(frame)
Line 12: Line 9:
local colstyle = {}
local colstyle = {}
local cols = tonumber(args['cols']) or 2
local cols = tonumber(args['cols']) or 2
local class = args['class'] or ''
local style = args['style'] or ''
local leftright = args['leftright'] or ''
local fullwidth = args['fullwidth'] or ''
if leftright ~= '' then
colstyle[1] = 'text-align:left;'
colstyle[2] = 'text-align:right;'
end


-- create the root table
local root = mw.html.create('table')
local root = mw.html.create('table')
 
-- add table style for fullwidth
if fullwidth ~= '' then
if isnotempty(args['fullwidth']) then
root
root
:css('width', '100%')
:css('width', '100%')
:css('border-collapse', 'collapse')
:css('border-collapse', 'collapse')
:css('border-spacing', '0px 0px')
:css('border-spacing', '0px')
:css('border', 'none')
:css('border', 'none')
end
end
 
if class ~= '' then
-- add table classes
root:addClass(class)
if isnotempty(args['class']) then
root:addClass(args['class'])
end
end
 
if style ~= '' then
-- add table style
root:cssText(style)
if isnotempty(args['style']) then
root:cssText(args['style'])
end
 
-- build arrays with the column styles and classes
if isnotempty(args['leftright']) then
colstyle[1] = 'text-align:left;'
colstyle[2] = 'text-align:right;'
end
if isnotempty(args['rightleft']) then
colstyle[1] = 'text-align:right;'
colstyle[2] = 'text-align:left;'
end
end
for i = 1,cols do
for i = 1,cols do
colclass[ i ] = colclass[ i ] or ''
colclass[ i ] = colclass[ i ] or ''
colstyle[ i ] = colstyle[ i ] or ''
colstyle[ i ] = colstyle[ i ] or ''
if isnotempty(args['colstyle']) then
if args['align' .. tostring(i)] then
colstyle[ i ] = args['colstyle'] .. ';' .. colstyle[ i ]
end
if isnotempty(args['colalign' .. tostring(i)]) then
colstyle[ i ] = 'text-align:' .. args['colalign' .. tostring(i)] .. ';' .. colstyle[ i ]
elseif isnotempty(args['col' .. tostring(i) .. 'align']) then
colstyle[ i ] = 'text-align:' .. args['col' .. tostring(i) .. 'align'] .. ';' .. colstyle[ i ]
elseif isnotempty(args['align' .. tostring(i)]) then
colstyle[ i ] = 'text-align:' .. args['align' .. tostring(i)] .. ';' .. colstyle[ i ]
colstyle[ i ] = 'text-align:' .. args['align' .. tostring(i)] .. ';' .. colstyle[ i ]
end
end
if isnotempty(args['colnowrap' .. tostring(i)]) then
if args['nowrap' .. tostring(i)] and args['nowrap' .. tostring(i)] ~= '' then
colstyle[ i ] = 'white-space:nowrap;' .. colstyle[ i ]
elseif isnotempty(args['col' .. tostring(i) .. 'nowrap']) then
colstyle[ i ] = 'white-space:nowrap;' .. colstyle[ i ]
elseif isnotempty(args['nowrap' .. tostring(i)]) then
colstyle[ i ] = 'white-space:nowrap;' .. colstyle[ i ]
colstyle[ i ] = 'white-space:nowrap;' .. colstyle[ i ]
end
end
if isnotempty(args['colwidth' .. tostring(i)]) then
if args['style' .. tostring(i)] then
colstyle[ i ] = 'width:' .. args['colwidth' .. tostring(i)] .. ';' .. colstyle[ i ]
elseif isnotempty(args['col' .. tostring(i) .. 'width']) then
colstyle[ i ] = 'width:' .. args['col' .. tostring(i) .. 'width'] .. ';' .. colstyle[ i ]
elseif isnotempty(args['colwidth']) then
colstyle[ i ] = 'width:' .. args['colwidth'] .. ';' .. colstyle[ i ]
end
if isnotempty(args['colstyle' .. tostring(i)]) then
colstyle[ i ] = colstyle[ i ] .. args['colstyle' .. tostring(i)]
elseif isnotempty(args['col' .. tostring(i) .. 'style']) then
colstyle[ i ] = colstyle[ i ] .. args['col' .. tostring(i) .. 'style']
elseif isnotempty(args['style' .. tostring(i)]) then
colstyle[ i ] = colstyle[ i ] .. args['style' .. tostring(i)]
colstyle[ i ] = colstyle[ i ] .. args['style' .. tostring(i)]
end
end
if isnotempty(args['colclass' .. tostring(i)]) then
if args['class' .. tostring(i)] then
colclass[ i ] =  args['colclass' .. tostring(i)]
elseif isnotempty(args['col' .. tostring(i) .. 'class']) then
colclass[ i ] =  args['col' .. tostring(i) .. 'class']
elseif isnotempty(args['class' .. tostring(i)]) then
colclass[ i ] =  args['class' .. tostring(i)]
colclass[ i ] =  args['class' .. tostring(i)]
end
end
end
end
-- compute the maximum cell index
local cellcount = 0
for k, v in pairs( args ) do
for k, v in pairs( args ) do
if type( k ) == 'number' then
if type( k ) == 'number' then
cellcount = math.max(cellcount, k)
i = math.fmod(k-1,cols) + 1
end
local j = (k - i) / cols + 1
end
local tdstyle = ''
-- compute the number of rows
local rows = math.ceil(cellcount / cols)
 
-- build the table content
if isnotempty(args['title']) then
local caption = root:tag('caption')
caption:cssText(args['titlestyle'])
caption:wikitext(args['title'])
end
if isnotempty(args['above']) then
local row = root:tag('tr')
local cell = row:tag('th')
cell:attr('colspan', cols)
cell:cssText(args['abovestyle'])
cell:wikitext(args['above'])
end
for j=1,rows do
-- start a new row
local row = root:tag('tr')
if isnotempty(args['rowstyle']) then
row:cssText(args['rowstyle'])
else
row:css('vertical-align', 'top')
end
if isnotempty(args['rowclass']) then
row:addClass(args['rowclass'])
end
-- loop over the cells in the row
for i=1,cols do
local cell
if isnotempty(args['row' .. tostring(j) .. 'header']) then
cell = row:tag('th'):attr('scope','col')
elseif isnotempty(args['col' .. tostring(i) .. 'header']) then
cell = row:tag('th'):attr('scope','row')
else
cell = row:tag('td')
end
if args['class' .. tostring(j) .. '.' .. tostring(i)] then
if args['class' .. tostring(j) .. '.' .. tostring(i)] then
cell:addClass(args['class' .. tostring(j) .. '.' .. tostring(i)])
tdstyle = tdstyle .. ' class="' .. args['class' .. tostring(j) .. '.' .. tostring(i)] .. '"'
else
elseif args['rowclass' .. tostring(j)] then
if args['rowclass' .. tostring(j)] then
tdstyle = tdstyle .. ' class="' .. args['rowclass' .. tostring(j)] .. '"'
cell:addClass(args['rowclass' .. tostring(j)])
elseif colclass[i] ~= '' then
elseif args['row' .. tostring(j) .. 'class'] then
tdstyle = tdstyle .. ' class="' .. colclass[i] .. '"'
cell:addClass(args['row' .. tostring(j) .. 'class'])
elseif args['rowevenclass'] and math.fmod(j,2) == 0 then
cell:addClass(args['rowevenclass'])
elseif args['rowoddclass'] and math.fmod(j,2) == 1 then
cell:addClass(args['rowoddclass'])
end
if colclass[i] ~= '' then
cell:addClass(colclass[i])
end
end
end
if args['style' .. tostring(j) .. '.' .. tostring(i)] then
if args['style' .. tostring(j) .. '.' .. tostring(i)] then
cell:cssText(args['style' .. tostring(j) .. '.' .. tostring(i)])
tdstyle = tdstyle .. ' style="' .. args['style' .. tostring(j) .. '.' .. tostring(i)] .. '"'
else
elseif args['rowstyle' .. tostring(j)] then
if args['rowstyle' .. tostring(j)] then
tdstyle = tdstyle .. ' style="' .. args['rowstyle' .. tostring(j)] .. '"'
cell:cssText(args['rowstyle' .. tostring(j)])
elseif colstyle[i] ~= '' then
elseif args['rowevenstyle'] and math.fmod(j,2) == 0 then
tdstyle = tdstyle .. ' style="' .. colstyle[i] .. '"'
cell:cssText(args['rowevenstyle'])
end
elseif args['rowoddstyle'] and math.fmod(j,2) == 1 then
entries[ k ] = '<td' .. tdstyle .. '>' .. v .. '</td>'
cell:cssText(args['rowoddstyle'])
if i == 1 then
elseif args['row' .. tostring(j) .. 'style'] then
entries[ k ] = '<tr style="vertical-align:top">' .. entries[ k ]
cell:cssText(args['row' .. tostring(j) .. 'style'])
end
if isnotempty(colstyle[i]) then
cell:cssText(colstyle[i])
end
end
end
cell:wikitext(mw.ustring.gsub(args[cols*(j - 1) + i] or '', '^(.-)%s*$', '%1') or '')
if i == cols then
end
entries[ k ] = entries[k] .. '</tr>'
end
end
-- return the root table
        end
return tostring(root)
    end
end
    root:wikitext(table.concat( entries, '\n' ))
 
    return tostring(root)
end


return p
return p
Please note that all contributions to Nonbinary Wiki are considered to be released under the Creative Commons Attribution-ShareAlike (see Nonbinary Wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!
Cancel Editing help (opens in new window)

Template used on this page: