Editing Module:Aligned table

From MINR.ORG WIKI

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. 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 save 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
+
colstyle[1] = 'text-align:left;'
:css('width', '100%')
+
colstyle[2] = 'text-align:right;'
:css('border-collapse', 'collapse')
+
    end
:css('border-spacing', '0px 0px')
+
if fullwidth ~= '' then
:css('border', 'none')
+
style = 'width:100%; border-collapse: collapse; border-spacing: 0px; border:none;' .. style
end
 
 
 
-- add table classes
 
if isnotempty(args['class']) then
 
root:addClass(args['class'])
 
 
end
 
end
 
+
if class ~= '' then
-- add table style
+
class = ' class="' .. class .. '"'
if isnotempty(args['style']) then
 
root:cssText(args['style'])
 
 
end
 
end
 
+
if style ~= '' then
-- build arrays with the column styles and classes
+
style = ' style="' .. style .. '"'
if isnotempty(args['leftright']) then
 
colstyle[1] = 'text-align:left;'
 
colstyle[2] = 'text-align:right;'
 
 
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 ]
 
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 ]
 
end
 
if isnotempty(args['colwidth' .. 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
 
end
if isnotempty(args['colstyle' .. tostring(i)]) then
+
if args['style' .. 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
 
-- 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['row' .. tostring(j) .. 'style'] then
+
tdstyle = tdstyle .. ' style="' .. colstyle[i] .. '"'
cell:cssText(args['row' .. tostring(j) .. 'style'])
+
end
end
+
entries[ k ] = '<td' .. tdstyle .. '>' .. v .. '</td>'
if isnotempty(colstyle[i]) then
+
if i == 1 then
cell:cssText(colstyle[i])
+
entries[ k ] = '<tr style="vertical-align:top">' .. entries[ k ]
end
+
end
 +
if i == cols then
 +
entries[ k ] = entries[k] .. '</tr>'
 
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 MINR.ORG WIKI may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, 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 (see MINR.ORG WIKI:Copyrights for details). Do not submit copyrighted work without permission!

Cancel Editing help (opens in new window)