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 ''
-- create the root table
local style = args['style'] or ''
local root = mw.html.create('table')
local leftright = args['leftright'] or ''
 
local fullwidth = args['fullwidth'] or ''
-- add table style for fullwidth
if isnotempty(args['fullwidth']) then
if leftright ~= '' then
root
:css('width', '100%')
:css('border-collapse', 'collapse')
:css('border-spacing', '0px 0px')
:css('border', 'none')
end
 
-- add table classes
if isnotempty(args['class']) then
root:addClass(args['class'])
end
 
-- add table 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[1] = 'text-align:left;'
colstyle[2] = 'text-align:right;'
colstyle[2] = 'text-align:right;'
    end
if fullwidth ~= '' then
style = 'width:100%; border-collapse: collapse; border-spacing: 0px; border:none;' .. style
end
end
if isnotempty(args['rightleft']) then
if class ~= '' then
colstyle[1] = 'text-align:right;'
class = ' class="' .. class .. '"'
colstyle[2] = 'text-align:left;'
end
end
if style ~= '' then
style = ' style="' .. style .. '"'
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 colclass[i] ~= '' then
if args['rowclass' .. tostring(j)] then
tdstyle = tdstyle .. ' class="' .. colclass[i] .. '"'
cell:addClass(args['rowclass' .. tostring(j)])
elseif args['row' .. tostring(j) .. 'class'] then
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 colstyle[i] ~= '' then
if args['rowstyle' .. tostring(j)] then
tdstyle = tdstyle .. ' style="' .. colstyle[i] .. '"'
cell:cssText(args['rowstyle' .. tostring(j)])
end
elseif args['rowevenstyle'] and math.fmod(j,2) == 0 then
entries[ k ] = '<td' .. tdstyle .. '>' .. v .. '</td>'
cell:cssText(args['rowevenstyle'])
if i == 1 then
elseif args['rowoddstyle'] and math.fmod(j,2) == 1 then
entries[ k ] = '<tr style="vertical-align:top">' .. entries[ k ]
cell:cssText(args['rowoddstyle'])
end
elseif args['row' .. tostring(j) .. 'style'] then
if i == cols then
cell:cssText(args['row' .. tostring(j) .. 'style'])
entries[ k ] = entries[k] .. '</tr>'
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 '')
        end
end
    end
end
    return '<table' .. class .. style ..'>\n' .. table.concat( entries, '\n' ) .. '\n</table>'
-- return the root table
   
return tostring(root)
end
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: