模块:Test:修订间差异

来自SS唯基
跳到导航 跳到搜索
无编辑摘要
无编辑摘要
第1行: 第1行:
--
-- This module will implement {{Navbox}}
--
local p = {}
local p = {}
local HtmlBuilder = require('Module:HtmlBuilder')
local Navbar = require('Module:Navbar')


local args = {}
local params = {}
local origArgs
params["prefix"                ] = {'a', 'i', 'e'}
local root
params["display_title"          ] = {'false'}
local frame
params["title"                  ] = "表格默认标题"
local tableRowAdded = false
params["width"                  ] = "60%"
local border
params["item_per_tab"          ] = "50"
local listnums = {}
params["header"                ] = {'作者', '主题', '简介'}
params["color"                  ] = {'#004B97', '#0066CC', '#0066CC'}
function trim(s)
params["bg_color"              ] = {'#FF9224', '#FFDCB9', '#FFE4CA'}
    return (mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1"))
params["color_alt"              ] = {'#004B97', '#0066CC', '#0066CC'}
end
params["bg_color_alt"          ] = {'#FF9224', '#FFDCB9', '#FFE4CA'}
params["header_color"          ] = {'#004B97', '#0066CC', '#0066CC'}
params["header_bg_color"        ] = {'#FF9224', '#FFAD86', '#FFAD86'}
params["display"                ] = {'true', 'true', 'true'}
params["col_width"              ] = {'5%', '25%', '35%'}
params["border_color"          ] = {
    '#D26900 #FF9224 #D26900 #D26900',
    '#D26900 #FFDCB9 #D26900 #FF9224',
    '#D26900 #D26900 #D26900 #FF9224',
}
params["header_border_color"   ] = {
    '#D26900 #FF9224 #D26900 #D26900',
    '#D26900 #FFAD86 #D26900 #FFAD86',
    '#D26900 #D26900 #D26900 #FF9224',
}
params["border_style"          ] = {
    "dashed solid double double",
    "dashed double double solid",
    "dashed double double solid",
}
params["header_border_style"    ] = {
    "double solid dashed double",
    "double double dashed solid",
    "double double dashed solid",
}
params["border_width"          ] = {
    "5px 1px 3px 5px",
    "5px 1px 3px 1px",
    "5px 5px 3px 1px",
}
params["header_border_width"    ] = {
    "5px 1px 3px 5px",
    "5px 1px 3px 1px",
    "5px 5px 3px 1px",
}


function addTableRow(tbl)
local global_param_list = {
     -- If any other rows have already been added, then we add a 2px gutter row.
     "title",
     if tableRowAdded then
     "display_title",
        tbl
     "width",
            .tag('tr')
     "item_per_tab"
                .css('height', '2px')
}
                .tag('td')
    end
   
    tableRowAdded = true
      
     return tbl.tag('tr')
end


local col_param_list = {
    "header"                ,
    "color"                ,
    "bg_color"              ,
    "color_alt"            ,
    "bg_color_alt"          ,
    "header_color"          ,
    "header_bg_color"      ,
    "display"              ,
    "col_width"            ,
    "border_color"          ,
    "header_border_color"  ,
    "border_style"          ,
    "header_border_style"  ,
    "border_width"          ,
    "header_border_width"  ,
}


--
function renderHeader(tbl)
--  Title row
     local row = tbl:tag('tr')
--
    for i=1,3 do
function renderTitleRow(tbl)
        if params["display"][i] == "true" then  
    if not args.title then return end
             local header_th = row:tag('th')
            header_th
     local titleRow = addTableRow(tbl)
                 :wikitext(params["header"][i])
   
                :css('padding'             ,'10px')
    if args.titlegroup then
                 :css('width'               , params["col_width"            ][i])
        titleRow
                 :css('color'                , params["header_color"        ][i])
             .tag('th')
                 :css('background-color'    , params["header_bg_color"      ][i])
                 .attr('scope', 'row')
                 :css('border-width'         , params["header_border_width"  ][i])
                 .addClass('navbox-group')
                :css('border-color'         , params["header_border_color"  ][i])
                 .addClass(args.titlegroupclass)
                :css('border-style'         , params["header_border_style"  ][i])
                 .cssText(args.basestyle)
        end
                 .cssText(args.groupstyle)
                .cssText(args.titlegroupstyle)
                .wikitext(args.titlegroup)
    end
   
    local titleCell = titleRow.tag('th').attr('scope', 'col')
           
    if args.titlegroup then
        titleCell
            .css('border-left', '2px solid #fdfdfd')
            .css('width', '100%')
     end
     end
   
    local titleColspan = 2
    if args.imageleft then titleColspan = titleColspan + 1 end
    if args.image then titleColspan = titleColspan + 1 end
    if args.titlegroup then titleColspan = titleColspan - 1 end
   
    titleCell
        .cssText(args.basestyle)
        .cssText(args.titlestyle)
        .addClass('navbox-title')
        .attr('colspan', titleColspan)
    renderNavBar(titleCell)
    titleCell
        .tag('div')
            .addClass(args.titleclass)
            .css('font-size', '110%')
            .newline()
            .wikitext(args.title)
end
end


function renderNavBar(titleCell)
function renderRow(row_id, args, tbl)
    -- Depending on the presence of the navbar and/or show/hide link, we may need to add a spacer div on the left
     local row = tbl:tag('tr')
    -- or right to keep the title centered.
     local spacerSide = nil


     if args.navbar == 'off' then
     for i=1,3 do
        -- No navbar, and client wants no spacer, i.e. wants the title to be shifted to the left. If there's
         if params["display"][i] == "true" then  
        -- also no show/hide link, then we need a spacer on the right to achieve the left shift.
            local info = row:tag('td')
         if args.state == 'plain' then spacerSide = 'right' end
            info
    elseif args.navbar == 'plain' or args.navbar == 'off' or (not args.name and (border == 'subgroup' or border == 'child' or border == 'none')) then
                :wikitext(args[params["prefix"][i] .. row_id]) --单元格样式
        -- No navbar. Need a spacer on the left to balance out the width of the show/hide link.
                :css('padding'             ,'10px')
        if args.state ~= 'plain' then spacerSide = 'left' end
                :css('width'               , params["col_width"     ][i])
     else
                :css('border-width'        , params["border_width"  ][i])
        -- Will render navbar (or error message). If there's no show/hide link, need a spacer on the right
                :css('border-color'         , params["border_color"  ][i])
        -- to balance out the width of the navbar.
                :css('border-style'        , params["border_style"  ][i])
        if args.state == 'plain' then spacerSide = 'right' end
            if row_id % 2 == 0 then
 
                info
         titleCell.wikitext(Navbar.navbar({
                    :css('color'           , params["color"        ][i])
            args.name,  
                    :css('background-color' , params["bg_color"      ][i])
            mini = 1,
            else
            fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') ..  ';background:none transparent;border:none;'
                 info
         }))
                    :css('color'           , params["color_alt"    ][i])
    end
                    :css('background-color' , params["bg_color_alt"  ][i])
   
            end
    -- Render the spacer div.
        end
    if spacerSide then
        titleCell
            .tag('span')
                .css('float', spacerSide)
                 .css('width', '6em')
                .wikitext(' ')
     end
     end
end
end


 
--处理表格
--
function renderTable(args, row_ids)
--  Above/Below rows
     local tbl = mw.html.create('table')
--
         :addClass('wikitable')
function renderAboveRow(tbl)
        :addClass('mw-collapsible')
     if not args.above then return end
        :addClass('mw-collapsed')
        :addClass('plainrowheaders')
    addTableRow(tbl)
        :css('display', 'block')
         .tag('td')
        :css('overflow-x', 'auto')
            .addClass('navbox-abovebelow')
        :css('width', params["width"])
            .addClass(args.aboveclass)
            .cssText(args.basestyle)
            .cssText(args.abovestyle)
            .attr('colspan', getAboveBelowColspan())
            .tag('div')
                .newline()
                .wikitext(args.above)
end
 
function renderBelowRow(tbl)
    if not args.below then return end
      
      
     addTableRow(tbl)
     if params["display_title"] == "true" then
         .tag('td')
         local caption = tbl:tag('caption')
            .addClass('navbox-abovebelow')
        caption
             .addClass(args.belowclass)
             :wikitext(title)
             .cssText(args.basestyle)
             :css('white-space', 'nowrap')
            .cssText(args.belowstyle)
    end
            .attr('colspan', getAboveBelowColspan())
            .tag('div')
                .newline()
                .wikitext(args.below)
end


function getAboveBelowColspan()
     renderHeader(tbl)
     local ret = 2
    if args.imageleft then ret = ret + 1 end
    if args.image then ret = ret + 1 end
    return ret
end
--
--  List rows
--
function renderListRow(tbl, listnum)
    local row = addTableRow(tbl)
      
      
     if listnum == 1 and args.imageleft then
     if next(row_ids) ~= nil then
        row
         for _, a in ipairs(row_ids) do
            .tag('td')
             renderRow(a, args, tbl)
                .addClass('navbox-image')
                .addClass(args.imageclass)
                .css('width', '0%')
                .css('padding', '0px 2px 0px 0px')
                .cssText(args.imageleftstyle)
                .attr('rowspan', 2 * #listnums - 1)
                .tag('div')
                    .newline()
                    .wikitext(args.imageleft)
    end
    if args['group' .. listnum] then
         local groupCell = row.tag('th')
       
        groupCell
              .attr('scope', 'row')
              .addClass('navbox-group')
              .addClass(args.groupclass)
              .cssText(args.basestyle)
             
        if args.groupwidth then
             groupCell.css('width', args.groupwidth)
         end
         end
         
        groupCell
            .cssText(args.groupstyle)
            .cssText(args['group' .. listnum .. 'style'])
            .wikitext(args['group' .. listnum])
     end
     end
   
    local listCell = row.tag('td')


     if args['group' .. listnum] then
     return tbl
        listCell
end
            .css('text-align', 'left')
 
            .css('border-left-width', '2px')
function renderTabs(args)
            .css('border-left-style', 'solid')
    -- extract row_ids in each tables
     else
    -- i hate lua why array subscribtion starts at 1
        listCell.attr('colspan', 2)
     local tabs_row_ids = {}
     end
    local item_per_tab = tonumber(params["item_per_tab"])
   
     for k, _ in pairs(args) do
    if not args.groupwidth then
         local anum = ('' .. k):match('^a(%d+)$')
         listCell.css('width', '100%')
        if anum then  
    end
            if tabs_row_ids[anum / item_per_tab + 1] == nil then
   
                tabs_row_ids[anum / item_per_tab + 1] = {}
    local isOdd = (listnum % 2) == 1
            end
    local rowstyle = args.evenstyle
            table.insert(tabs_row_ids[anum / item_per_tab + 1], tonumber(anum))
    if isOdd then rowstyle = args.oddstyle end
         end
    local evenOdd
    if args.evenodd == 'swap' then
        if isOdd then evenOdd = 'even' else evenOdd = 'odd' end
    else
         if isOdd then evenOdd = args.evenodd or 'odd' else evenOdd = args.evenodd or 'even' end
     end
     end
      
     table.sort(tabs_row_ids)
    listCell
        .css('padding', '0px')
        .cssText(args.liststyle)
        .cssText(rowstyle)
        .cssText(args['list' .. listnum .. 'style'])
        .addClass('navbox-list')
        .addClass('navbox-' .. evenOdd)
        .addClass(args.listclass)
        .tag('div')
            .css('padding', (listnum == 1 and args.list1padding) or args.listpadding or '0em 0.25em')
            .newline()
            .wikitext(args['list' .. listnum])


     if listnum == 1 and args.image then
     -- if only one table is needed...
        row
    local tab_count = tableLength(tabs_row_ids)
            .tag('td')
    if tab_count == 1 then
                .addClass('navbox-image')
        return renderTable(args, tabs_row_ids[1])
                .addClass(args.imageclass)
                .css('width', '0%')
                .css('padding', '0px 0px 0px 2px')
                .cssText(args.imagestyle)
                .attr('rowspan', 2 * #listnums - 1)
                .tag('div')
                    .newline()
                    .wikitext(args.image)
     end
     end
end


    -- create tabs-container
    local tabs_div = mw.html.create('div')
    tabs_div:addClass("tabs-container")


--
    -- create tab ui list
--  Tracking categories
    local tab_list = tabs_div:tag("ul")
--
    tab_list
function renderTrackingCategories(builder)
        :addClass("tabs-pages")
    local frame = mw.getCurrentFrame()
        :css("margin", "0")
      
      
     if not frame then return end
     for i, _ in ipairs(tabs_row_ids) do
   
        local list_ele = tab_list:tag("li")
    local s = frame:preprocess('{{#ifeq:{{NAMESPACE}}|{{ns:10}}|1|0}}{{SUBPAGENAME}}')
        if i == 1 then
    if mw.ustring.sub(s, 1, 1) == '0' then return end -- not in template space
            list_ele:addClass("active")
    local subpage = mw.ustring.lower(mw.ustring.sub(s, 2))
        end
    if subpage == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end
        list_ele
   
            :addClass("tab")
    for i, cat in ipairs(getTrackingCategories()) do
            :tag("strong")
        builder.wikitext('[[Category:' .. cat .. ']]')  
                :wikitext(tostring(i*(item_per_tab-1)+1).."~"..tostring(i*item_per_tab))
     end
     end
end
function getTrackingCategories()
    local cats = {}
    if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end
    if hasBackgroundColors() then table.insert(cats, 'Navboxes using background colours') end
    return cats
end


function needsHorizontalLists()
    -- create actual tables
     if border == 'child' or border == 'subgroup'  or args.tracking == 'no' then return false end
    local tables_list = tabs_div:tag("div")
     tables_list:addClass("tabs-contents")
      
      
    local listClasses = {'plainlist', 'hlist', 'hlist hnum', 'hlist hwrap', 'hlist vcard', 'vcard hlist'}
     for i, row_id in ipairs(tabs_row_ids) do
     for i, cls in ipairs(listClasses) do
        local table_ele = tables_list:tag("div")
         if args.listclass == cls or args.bodyclass == cls then
        table_ele:addClass("tab-c")
             return false
         if i == 1 then
             table_ele:addClass("active")
         end
         end
        local inner_content = table_ele:tag("div")
        inner_content
            :addClass("inner-content")
        local content_tbl = renderTable(args, row_id)
        inner_content:node(content_tbl)
     end
     end
    return true
end
end


function hasBackgroundColors()
function tableLength(t)
     return args.titlestyle or args.groupstyle
    local count = 0
end
    for _ in pairs(t) do count = count + 1 end
     return count
  end


function p._historicalActivity(args)
    -- deal with params
    for _, key in ipairs(global_param_list) do
        if args[key] then
            params[key] = args[key]
        end
    end


--
     for _, key in ipairs(col_param_list) do
--  Main navbox tables
         for i=1,3 do
--
             if args[key..tostring(i)] then
function renderMainTable()
                params[key][i] = args[key..tostring(i)]
     local tbl = HtmlBuilder.create('table')
             end
        .attr('cellspacing', 0)
         end
        .addClass('nowraplinks')
         .addClass(args.bodyclass)
           
    if args.title and (args.state ~= 'plain' and args.state ~= 'off') then
        tbl
             .addClass('collapsible')
            .addClass(args.state or 'autocollapse')
    end
    tbl.css('border-spacing', 0)
    if border == 'subgroup' or border == 'child' or border == 'none' then
        tbl
            .addClass('navbox-subgroup')
            .cssText(args.bodystyle)
             .cssText(args.style)
    else -- regular navobx - bodystyle and style will be applied to the wrapper table
         tbl
            .addClass('navbox-inner')
            .css('background', 'transparent')
            .css('color', 'inherit')
     end
     end
    tbl.cssText(args.innerstyle)
    renderTitleRow(tbl)
    renderAboveRow(tbl)
    for i, listnum in ipairs(listnums) do
        renderListRow(tbl, listnum)
    end
    renderBelowRow(tbl)
   
    return tbl
end


function p._navbox(navboxArgs)
     --处理表格
     args = navboxArgs
     local tb1 = renderTabs(args)
      
    for k, v in pairs(args) do
        local listnum = ('' .. k):match('^list(%d+)$')
        if listnum then table.insert(listnums, tonumber(listnum)) end
    end
    table.sort(listnums)
    border = trim(args.border or args[1] or '')


     -- render the main body of the navbox
     local res = mw.html.create()
     local tbl = renderMainTable()
     res:node(tb1)


    -- render the appropriate wrapper around the navbox, depending on the border param
    local res = HtmlBuilder.create()
    if border == 'none' then
        res.node(tbl)
    elseif border == 'subgroup' or border == 'child' then
        -- We assume that this navbox is being rendered in a list cell of a parent navbox, and is
        -- therefore inside a div with padding:0em 0.25em. We start with a </div> to avoid the
        -- padding being applied, and at the end add a <div> to balance out the parent's </div>
        res
            .tag('/div', {unclosed = true})
                .done()
            .node(tbl)
            .tag('div', {unclosed = true})
    else
        res
            .tag('table')
                .attr('cellspacing', 0)
                .addClass('navbox')
                .css('border-spacing', 0)
                .cssText(args.bodystyle)
                .cssText(args.style)
                .tag('tr')
                    .tag('td')
                        .css('padding', '2px')
                        .node(tbl)
    end
    renderTrackingCategories(res)
     return tostring(res)
     return tostring(res)
end
end
 
function p.navbox(frame)
function p.historicalActivity(frame)
    -- ParserFunctions considers the empty string to be false, so to preserve the previous
    -- behavior of {{navbox}}, change any empty arguments to nil, so Lua will consider
    -- them false too.
     local args = {}
     local args = {}
     local parent_args = frame:getParent().args;
     local parent_args = frame:getParent().args;--获取页面传来得参数,而不是模板的参数
 
    -- Out of order parsing bug.
    local temp;
    temp = parent_args.title;
    temp = parent_args.above;
    for i = 1, 20 do
        temp = parent_args["group" .. tostring(i)];
        temp = parent_args["list" .. tostring(i)];
    end   
    temp = parent_args.below;
      
      
    --将获取的参数传给args
     for k, v in pairs(parent_args) do
     for k, v in pairs(parent_args) do
         if v ~= '' then
         if v ~= '' then
第404行: 第247行:
         end
         end
     end
     end
     return p._navbox(args)
     return p._historicalActivity(args)
end
end
 
return p
return p

2022年1月31日 (一) 11:22的版本

Documentation icon 模块文档 [-查看-] [编辑] [历史] [刷新]

这个模块是干什么用的?

该模块用于测试,测试完请清空模块内的内容

基本用法

local p = {}

function p.函数名()
return '返回内容'
end

function p.函数名2()
return '返回内容2'
end

return

以上为最基本的用法,其他请自行学习Lua语言

其他

同样也有一个用于测试模板的模板,点这里进入


local p = {}

local params = {}
params["prefix"                 ] = {'a', 'i', 'e'}
params["display_title"          ] = {'false'}
params["title"                  ] = "表格默认标题"
params["width"                  ] = "60%"
params["item_per_tab"           ] = "50"
params["header"                 ] = {'作者', '主题', '简介'}
params["color"                  ] = {'#004B97', '#0066CC', '#0066CC'}
params["bg_color"               ] = {'#FF9224', '#FFDCB9', '#FFE4CA'}
params["color_alt"              ] = {'#004B97', '#0066CC', '#0066CC'}
params["bg_color_alt"           ] = {'#FF9224', '#FFDCB9', '#FFE4CA'}
params["header_color"           ] = {'#004B97', '#0066CC', '#0066CC'}
params["header_bg_color"        ] = {'#FF9224', '#FFAD86', '#FFAD86'}
params["display"                ] = {'true', 'true', 'true'}
params["col_width"              ] = {'5%', '25%', '35%'}
params["border_color"           ] = {
    '#D26900 #FF9224 #D26900 #D26900',
    '#D26900 #FFDCB9 #D26900 #FF9224',
    '#D26900 #D26900 #D26900 #FF9224',
}
params["header_border_color"    ] = {
    '#D26900 #FF9224 #D26900 #D26900',
    '#D26900 #FFAD86 #D26900 #FFAD86',
    '#D26900 #D26900 #D26900 #FF9224',
}
params["border_style"           ] = {
    "dashed solid double double",
    "dashed double double solid",
    "dashed double double solid",
}
params["header_border_style"    ] = {
    "double solid dashed double",
    "double double dashed solid",
    "double double dashed solid",
}
params["border_width"           ] = {
    "5px 1px 3px 5px",
    "5px 1px 3px 1px",
    "5px 5px 3px 1px",
}
params["header_border_width"    ] = {
    "5px 1px 3px 5px",
    "5px 1px 3px 1px",
    "5px 5px 3px 1px",
}

local global_param_list = {
    "title",
    "display_title",
    "width",
    "item_per_tab"
}

local col_param_list = {
    "header"                ,
    "color"                 ,
    "bg_color"              ,
    "color_alt"             ,
    "bg_color_alt"          ,
    "header_color"          ,
    "header_bg_color"       ,
    "display"               ,
    "col_width"             ,
    "border_color"          ,
    "header_border_color"   ,
    "border_style"          ,
    "header_border_style"   ,
    "border_width"          ,
    "header_border_width"   ,
}

function renderHeader(tbl)
    local row = tbl:tag('tr')
    for i=1,3 do
        if params["display"][i] == "true" then 
            local header_th = row:tag('th')
            header_th
                :wikitext(params["header"][i])
                :css('padding'              ,'10px')
                :css('width'                , params["col_width"            ][i])
                :css('color'                , params["header_color"         ][i])
                :css('background-color'     , params["header_bg_color"      ][i])
                :css('border-width'         , params["header_border_width"  ][i])
                :css('border-color'         , params["header_border_color"  ][i])
                :css('border-style'         , params["header_border_style"  ][i])
        end
    end
end

function renderRow(row_id, args, tbl)
    local row = tbl:tag('tr')

    for i=1,3 do
        if params["display"][i] == "true" then 
            local info = row:tag('td')
            info
                :wikitext(args[params["prefix"][i] .. row_id]) --单元格样式
                :css('padding'              ,'10px')
                :css('width'                , params["col_width"     ][i])
                :css('border-width'         , params["border_width"  ][i])
                :css('border-color'         , params["border_color"  ][i])
                :css('border-style'         , params["border_style"  ][i])
            if row_id % 2 == 0 then
                info
                    :css('color'            , params["color"         ][i])
                    :css('background-color' , params["bg_color"      ][i])
            else
                info
                    :css('color'            , params["color_alt"     ][i])
                    :css('background-color' , params["bg_color_alt"  ][i])
            end
        end
    end
end

--处理表格
function renderTable(args, row_ids)
    local tbl = mw.html.create('table')
        :addClass('wikitable')
        :addClass('mw-collapsible')
        :addClass('mw-collapsed')
        :addClass('plainrowheaders')
        :css('display', 'block')
        :css('overflow-x', 'auto')
        :css('width', params["width"])
    
    if params["display_title"] == "true" then
        local caption = tbl:tag('caption')
        caption
            :wikitext(title)
            :css('white-space', 'nowrap')
    end

    renderHeader(tbl)
    
    if next(row_ids) ~= nil then
        for _, a in ipairs(row_ids) do 
            renderRow(a, args, tbl)
        end
    end

    return tbl
end

function renderTabs(args)
    -- extract row_ids in each tables
    -- i hate lua why array subscribtion starts at 1
    local tabs_row_ids = {}
    local item_per_tab = tonumber(params["item_per_tab"])
    for k, _ in pairs(args) do
        local anum = ('' .. k):match('^a(%d+)$')
        if anum then 
            if tabs_row_ids[anum / item_per_tab + 1] == nil then
                tabs_row_ids[anum / item_per_tab + 1] = {}
            end
            table.insert(tabs_row_ids[anum / item_per_tab + 1], tonumber(anum)) 
        end
    end
    table.sort(tabs_row_ids)

    -- if only one table is needed...
    local tab_count = tableLength(tabs_row_ids)
    if tab_count == 1 then
        return renderTable(args, tabs_row_ids[1])
    end

    -- create tabs-container
    local tabs_div = mw.html.create('div')
    tabs_div:addClass("tabs-container")

    -- create tab ui list
    local tab_list = tabs_div:tag("ul")
    tab_list
        :addClass("tabs-pages")
        :css("margin", "0")
    
    for i, _ in ipairs(tabs_row_ids) do
        local list_ele = tab_list:tag("li")
        if i == 1 then
            list_ele:addClass("active")
        end
        list_ele
            :addClass("tab")
            :tag("strong")
                :wikitext(tostring(i*(item_per_tab-1)+1).."~"..tostring(i*item_per_tab))
    end

    -- create actual tables
    local tables_list = tabs_div:tag("div")
    tables_list:addClass("tabs-contents")
    
    for i, row_id in ipairs(tabs_row_ids) do
        local table_ele = tables_list:tag("div")
        table_ele:addClass("tab-c")
        if i == 1 then
            table_ele:addClass("active")
        end
        local inner_content = table_ele:tag("div")
        inner_content
            :addClass("inner-content")
        local content_tbl = renderTable(args, row_id)
        inner_content:node(content_tbl)
    end
end

function tableLength(t)
    local count = 0
    for _ in pairs(t) do count = count + 1 end
    return count
  end

function p._historicalActivity(args)
    -- deal with params
    for _, key in ipairs(global_param_list) do
        if args[key] then
            params[key] = args[key]
        end
    end

    for _, key in ipairs(col_param_list) do
        for i=1,3 do
            if args[key..tostring(i)] then
                params[key][i] = args[key..tostring(i)]
            end
        end
    end

    --处理表格
    local tb1 = renderTabs(args)

    local res = mw.html.create()
    res:node(tb1)

    return tostring(res)
end

function p.historicalActivity(frame)
    local args = {}
    local parent_args = frame:getParent().args;--获取页面传来得参数,而不是模板的参数
    
    --将获取的参数传给args
    for k, v in pairs(parent_args) do
        if v ~= '' then
            args[k] = v
        end
    end
    return p._historicalActivity(args)
end

return p