Difference between revisions of "Module:TableBuilder"
Jump to navigation
Jump to search
(Created page with "local TableBuilder = {} local HtmlBuilder = require('Module:HtmlBuilder') local buildAttributes = HtmlBuilder.buildAttributes local buildStyles = HtmlBuilder.buildStyles loca...") |
m |
||
Line 30: | Line 30: | ||
end | end | ||
− | local function addCell(t, mark) | + | local function addCell(t, mark, ...) |
local builder = createBuilder(cellmetatable, t) | local builder = createBuilder(cellmetatable, t) | ||
builder.attributes = {} | builder.attributes = {} | ||
builder.styles = {} | builder.styles = {} | ||
builder.mark = mark | builder.mark = mark | ||
+ | if ... then | ||
+ | builder:wikitext(...) | ||
+ | end | ||
return builder | return builder | ||
end | end | ||
Line 82: | Line 85: | ||
__index = { | __index = { | ||
_build = buildRow, | _build = buildRow, | ||
− | addHeader = function(t) return addCell(t, "!") end, | + | addHeader = function(t, ...) return addCell(t, "!", ...) end, |
− | addData = function(t) return addCell(t, "|") end, | + | addData = function(t, ...) return addCell(t, "|", ...) end, |
done = methodtable.done, | done = methodtable.done, | ||
allDone = methodtable.allDone | allDone = methodtable.allDone |
Revision as of 03:44, 11 April 2017
local TableBuilder = {}
local HtmlBuilder = require('Module:HtmlBuilder') local buildAttributes = HtmlBuilder.buildAttributes local buildStyles = HtmlBuilder.buildStyles local buildNodes = HtmlBuilder.buildNodes 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 addRow(t)
return createBuilder(rowmetatable, t)
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 buildTable(t, ret)
table.insert(ret, '{|') buildAttributes(t, ret) buildStyles(t, ret) buildNodes(t, ret) table.insert(ret, '\n|}')
end
local function buildRow(t, ret)
table.insert(ret, '\n|-') buildNodes(t, ret)
end
local function buildCell(t, ret)
table.insert(ret, '\n' .. t.mark) buildAttributes(t, ret) buildStyles(t, ret) table.insert(ret, '|') buildNodes(t, ret)
end
local function tostring(t)
local ret = {} t:_build(ret) return table.concat(ret)
end
tablemetatable = {
__tostring = tostring, __index = { _build = buildTable, addRow = addRow, getAttr = methodtable.getAttr, attr = methodtable.attr, addClass = methodtable.addClass, css = methodtable.css, cssText = methodtable.cssText }
}
rowmetatable = {
__tostring = tostring, __index = { _build = buildRow, 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 = buildCell, wikitext = methodtable.wikitext, getAttr = methodtable.getAttr, attr = methodtable.attr, css = methodtable.css, cssText = methodtable.cssText, done = methodtable.done, allDone = methodtable.allDone }
}
return TableBuilder