Module:TableBuilder

From Minetest Wiki
Revision as of 03:31, 11 April 2017 by MrIbby (talk | contribs) (Created page with "local TableBuilder = {} local HtmlBuilder = require('Module:HtmlBuilder') local buildAttributes = HtmlBuilder.buildAttributes local buildStyles = HtmlBuilder.buildStyles loca...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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
   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