模块:Html

来自乐园数据管理室
ヒカリ​(留言 | 贡献)2019年4月23日 (二) 16:23的版本

wikitable

wikitable(schema, data)

  • schema: 表头
  • data: 表格数据

Example

数组方式

 wikitable(
   {"col1", "col2", "col3"},
   {
     {1, 2, 3},
     {4, 5, 6},
     {7, 8, 9}
   }
 )

字典方式

 wikitable(
   {
     {
       ["scope"] = "a",
       ["label"] = "col1"
     },
     {
       ["scope"] = "b",
       ["label"] = "col2"
     },
     {
       ["scope"] = "c",
       ["label"] = "col3"
     }
   },
   {
     {["a"] = 1, ["b"] = 2, ["c"] = 3},
     {["a"] = 4, ["b"] = 5, ["c"] = 6},
     {["a"] = 7, ["b"] = 8, ["c"] = 9}
   }
 )

local p = {}

function p.wikitable(schema, data, transpose)
  transpose = transpose or nil
  local out = ""

  if schema[1]["scope"] then
    -- 数据为dict形式
    if transpose then
      -- 转置
      for _, field in ipairs(schema) do
        local rowHtml = ""
        rowHtml = rowHtml .. "<th>" .. field.label .. "</th>"

        for _, row in ipairs(data) do
          rowHtml = rowHtml .. "<td>" .. row[field.scope] .. "</td>"
        end
        rowHtml = "<tr>" .. rowHtml .. "</tr>"
        out = out .. rowHtml
      end
    else
      for _, field in ipairs(schema) do
        out = out .. "<th>" .. field["label"] .. "</th>"
      end
      out = "<tr>" .. out .. "</tr>"

      for _, row in ipairs(data) do
        local rowHtml = ""

        for _, field in ipairs(schema) do
          rowHtml = rowHtml .. "<td>" .. row[field.scope] .. "</td>"
        end
        rowHtml = "<tr>" .. rowHtml .. "</tr>"
        out = out .. rowHtml
      end
    end
  else
    -- 数据为array形式

    if transpose then
      -- 转置
      for i, label in ipairs(schema) do
        local rowHtml = ""
        rowHtml = rowHtml .. "<th>" .. label .. "</th>"

        for _, row in ipairs(data) do
          rowHtml = rowHtml .. "<td>" .. row[i] .. "</td>"
        end
        rowHtml = "<tr>" .. rowHtml .. "</tr>"
        out = out .. rowHtml
      end
    else
      for _, label in ipairs(schema) do
        out = out .. "<th>" .. label .. "</th>"
      end
      out = "<tr>" .. out .. "</tr>"

      for _, row in ipairs(data) do
        local rowHtml = ""

        for i, _ in ipairs(schema) do
          rowHtml = rowHtml .. "<td>" .. row[i] .. "</td>"
        end
        rowHtml = "<tr>" .. rowHtml .. "</tr>"
        out = out .. rowHtml
      end
    end
  end

  out = '<table class="wikitable">' .. out .. "</table>\n"
  return out
end

function p.h2(text)
  return "<h2>" .. text .. "</h2>"
end

function p.h3(text)
  return "<h3>" .. text .. "</h3>"
end

function p.h4(text)
  return "<h4>" .. text .. "</h4>"
end

return p