Difference between revisions of "Module:TableBuilder"
Jump to navigation
Jump to search
m (Added addClass to table cells) |
m (Updated references to helper methods) |
||
Line 2: | Line 2: | ||
local HtmlBuilder = require('Module:HtmlBuilder') | local HtmlBuilder = require('Module:HtmlBuilder') | ||
− | |||
− | |||
− | |||
local methodtable = getmetatable(HtmlBuilder.create()).__index | local methodtable = getmetatable(HtmlBuilder.create()).__index | ||
local tablemetatable, rowmetatable, cellmetatable | local tablemetatable, rowmetatable, cellmetatable | ||
Line 48: | Line 45: | ||
_build = function(t, ret) | _build = function(t, ret) | ||
table.insert(ret, '{|') | table.insert(ret, '{|') | ||
− | + | t:_buildAttributes(ret) | |
− | + | t:_buildStyles(ret) | |
− | + | t:_buildNodes(ret) | |
table.insert(ret, '\n|}') | table.insert(ret, '\n|}') | ||
end, | end, | ||
Line 68: | Line 65: | ||
_build = function(t, ret) | _build = function(t, ret) | ||
table.insert(ret, '\n|-') | table.insert(ret, '\n|-') | ||
− | + | t:_buildNodes(ret) | |
end, | end, | ||
addHeader = function(t, ...) return addCell(t, "!", ...) end, | addHeader = function(t, ...) return addCell(t, "!", ...) end, | ||
Line 82: | Line 79: | ||
_build = function(t, ret) | _build = function(t, ret) | ||
table.insert(ret, '\n' .. t.mark) | table.insert(ret, '\n' .. t.mark) | ||
− | + | t:_buildAttributes(ret) | |
− | + | t:_buildStyles(ret) | |
table.insert(ret, '|') | table.insert(ret, '|') | ||
− | + | t:_buildNodes(ret) | |
end, | end, | ||
node = methodtable.node, | node = methodtable.node, |
Revision as of 05:40, 12 April 2017
local TableBuilder = {}
local HtmlBuilder = require('Module:HtmlBuilder') local methodtable = getmetatable(HtmlBuilder.create()).__index local tablemetatable, rowmetatable, cellmetatable
local function createBuilder(metatable, parent)
local builder = {} setmetatable(builder, metatable) builder.nodes = {} if parent then builder.parent = parent table.insert(parent.nodes, builder) end return builder
end
function TableBuilder.create()
local builder = createBuilder(tablemetatable) builder.attributes = {} builder.styles = {} return builder
end
local function addCell(t, mark, ...)
local builder = createBuilder(cellmetatable, t) builder.attributes = {} builder.styles = {} builder.mark = mark if ... then builder:wikitext(...) end return builder
end
local function tostring(t)
local ret = {} t:_build(ret) return table.concat(ret)
end
tablemetatable = {
__tostring = tostring, __index = { _build = function(t, ret) table.insert(ret, '{|') t:_buildAttributes(ret) t:_buildStyles(ret) t:_buildNodes(ret) table.insert(ret, '\n|}') end, addCaption = function(t, ...) return addCell(t, "|+", ...) end, addRow = function(t) return createBuilder(rowmetatable, t) end, getAttr = methodtable.getAttr, attr = methodtable.attr, addClass = methodtable.addClass, css = methodtable.css, cssText = methodtable.cssText }
}
rowmetatable = {
__tostring = tostring, __index = { _build = function(t, ret) table.insert(ret, '\n|-') t:_buildNodes(ret) end, addHeader = function(t, ...) return addCell(t, "!", ...) end, addData = function(t, ...) return addCell(t, "|", ...) end, done = methodtable.done, allDone = methodtable.allDone }
}
cellmetatable = {
__tostring = tostring, __index = { _build = function(t, ret) table.insert(ret, '\n' .. t.mark) t:_buildAttributes(ret) t:_buildStyles(ret) table.insert(ret, '|') t:_buildNodes(ret) end, node = methodtable.node, wikitext = methodtable.wikitext, tag = methodtable.tag, getAttr = methodtable.getAttr, attr = methodtable.attr, addClass = methodtable.addClass, css = methodtable.css, cssText = methodtable.cssText, done = methodtable.done, allDone = methodtable.allDone }
}
return TableBuilder