Difference between revisions of "Module:TableBuilder"

From Minetest Wiki
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