2023年政策修订增补工作正在进行中,欢迎参与!
Module:Sandbox/willson0v0/LinearTable
跳转到导航
跳转到搜索
local p = {}
local params = {}
params["prefix" ] = {'a', 'i', 'e'}
params["display_title" ] = {'false'}
params["title" ] = "表格默认标题"
params["width" ] = "60%"
params["header" ] = {'作者', '主题', '简介'}
params["color" ] = {'#004B97', '#0066CC', '#0066CC'}
params["bg_color" ] = {'#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 single_param_list = {
"title",
"display_title",
"width"
}
local col_param_list = {
"header" ,
"color" ,
"bg_color" ,
"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('color' , params["color" ][i])
:css('background-color' , params["bg_color" ][i])
:css('border-width' , params["border_width" ][i])
:css('border-color' , params["border_color" ][i])
:css('border-style' , params["border_style" ][i])
end
end
end
--处理表格
function renderMainTable(args)
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)
local valid_a = {}
for k, _ in pairs(args) do --计算有效行
local anum = ('' .. k):match('^a(%d+)$')
if anum then table.insert(valid_a, tonumber(anum)) end
end
table.sort(valid_a)
if next(valid_a) ~= nil then
for _, a in ipairs(valid_a) do
renderRow(a, args, tbl)
end
end
return tbl
end
function p._historicalActivity(args)
-- deal with params
for _, key in ipairs(single_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 = renderMainTable(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