转跳到内容

新人(?)报个到


只显示该作者

只有该作者的内容显示中。 返回到主题

推荐贴

11 小时前, 攸薩 说道:

:YangTuo_u:如果有几百个连结好像还是可以展开的表格比较好吗

嗯...主要是mediawiki的表格只能上下折叠不能左右折叠...作为折衷的话我给整个表格加了一个Caption(表格最上面的标题/描述?那样的东西),把折叠放在那里了;

然后出于清晰考虑,这个表格的总标题的自定义参数名称变成了title(...|titile=表格的标题|...),而每行起始的抬头自定义参数名称变成了header(...|header2=第二行抬头|...)

剧透
local p = {}
local prefix                = {'a', 'i', 'e'}
local title                 = "表格默认标题"
local header                = {'作者', '主题', '简介'}
local color                 = {'#004B97', '#0066CC', '#0066CC'}
local bg_color              = {'#FF9224', '#FFDCB9', '#FFE4CA'}
local border_color          = {
                                '#FF9224 #D26900 #D26900 #D26900',
                                '#FFDCB9 #D26900 #FF9224 #D26900',
                                '#D26900 #D26900 #FF9224 #D26900',
                              }
local header_border_color   = {
                                '#FF9224 #D26900 #D26900 #D26900',
                                '#FFAD86 #D26900 #FFAD86 #D26900',
                                '#D26900 #D26900 #FF9224 #D26900',
                            }
local header_color          = {'#004B97', '#0066CC', '#0066CC'}
local header_bg_color       = {'#FF9224', '#FFAD86', '#FFAD86'}
local row_top               = {'double', 'double', 'double'}
local row_bottom            = {'double', 'double', 'double'}
local row_left              = {'dashed', 'dashed', 'dashed'}
local row_right             = {'double', 'double', 'double'}
local header_top            = {'double', 'double', 'double'}
local header_bottom         = {'double', 'double', 'double'}
local header_left           = {'double', 'double', 'double'}
local header_right          = {'dashed', 'dashed', 'dashed'}
local display               = {'true', 'true', 'true'}
 
function renderRow(row_id, args, valid_a, tbl)
    local row = tbl:tag('tr')
    
    local header_th = row:tag('th')

    header_th
        :wikitext(header[row_id])
        :css('color'                , header_color[row_id])
        :css('padding'              ,'10px')
        :css('background-color'     , header_bg_color[row_id])
        :css('border-width'         , '1px 3px 1px 5px')
        :css('border-color'         , header_border_color[row_id])
        :css('border-top-style'     , header_top   [row_id])
        :css('border-bottom-style'  , header_bottom[row_id])
        :css('border-left-style'    , header_left  [row_id])
        :css('border-right-style'   , header_right [row_id])
    
        
    for i, anum in ipairs(valid_a) do
        local info = row:tag('td')
        info
            :wikitext(args[prefix[row_id] .. anum]) --单元格样式
            :css('color'                , color[row_id])
            :css('padding'              , '10px')
            :css('background-color'     , bg_color[row_id])
            :css('border-width'         , '1px 3px 1px 5px')
            :css('border-color'         , border_color[row_id])
            :css('border-top-style'     , row_top   [row_id])
            :css('border-bottom-style'  , row_bottom[row_id])
            :css('border-left-style'    , row_left  [row_id])
            :css('border-right-style'   , row_right [row_id])
    end
end
 
--处理表格
function renderMainTable(args, valid_a)
    local tbl = mw.html.create('table')
        :addClass('wikitable')
        :addClass('mw-collapsible')
        :addClass('mw-collapsed')
        :addClass('plainrowheaders')
    
    if args['title'] then
        title = args['title']
    end
    
    local caption = tbl:tag('caption')
    caption
        :wikitext(title)
        :css('white-space', 'nowrap')
    
    for i=1,3 do
        if args['title' .. i] then
            title[i] = args['title' .. i]
        end
        if args['color' .. i] then
            color[i] = args['color' .. i]
        end
        if args['bg_color' .. i] then
            bg_color[i] = args['bg_color' .. i]
        end
        if args['border_color' .. i] then
            border_color[i] = args['border_color' .. i]
        end
        if args['header_border_color' .. i] then
            header_border_color[i] = args['header_border_color' .. i]
        end
        if args['header_color' .. i] then
            header_color[i] = args['header_color' .. i]
        end
        if args['header_bg_color' .. i] then
            header_bg_color[i] = args['header_bg_color' .. i]
        end
        if args['row_top' .. i] then
            row_top[i] = args['row_top' .. i]
        end
        if args['row_bottom' .. i] then
            row_bottom[i] = args['row_bottom' .. i]
        end
        if args['row_left' .. i] then
            row_left[i] = args['row_left' .. i]
        end
        if args['row_right' .. i] then
            row_right[i] = args['row_right' .. i]
        end
        if args['header_top' .. i] then
            header_top[i] = args['header_top' .. i]
        end
        if args['header_bottom' .. i] then
            header_bottom[i] = args['header_bottom' .. i]
        end
        if args['header_left' .. i] then
            header_left[i] = args['header_left' .. i]
        end
        if args['header_right' .. i] then
            header_right[i] = args['header_right' .. i]
        end
        if args['display' .. i] then
            display[i] = args['display' .. i]
        end
        if args['header' .. i] then
            header[i] = args['header' .. i]
        end
 
        if display[i] == "true" then
            renderRow(i, args, valid_a, tbl)
        end
    end
 
    return tbl
end
 
function p._historicalActivity(args)
    local valid_a = {}
    
    for k, v 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)
 
    --处理表格
    local tb1 = renderMainTable(args, valid_a)
 
    local res = mw.html.create()
    res:node(tb1)
 
    return tostring(res)
end
 
function p.historicalActivity(frame)
    local args = {}
    local parent_args = frame:getParent().args;--获取页面传来得参数,而不是模板的参数
 
    -- Out of order parsing bug.
    -- 不懂
    -- local temp;
    -- for i = 1, 50 do
    --     temp = parent_args["a" .. tostring(i)];
    --     temp = parent_args["i" .. tostring(i)];
    --     temp = parent_args["e" .. tostring(i)];
    -- end
    
    --将获取的参数传给args
    for k, v in pairs(parent_args) do
        if v ~= '' then
            args[k] = v
        end
    end
    return p._historicalActivity(args)
end
 
return p

举个栗子的话,看起来会变成这样...

(点击展开之前)

image.png.fe43e3659c34faf7a4e1559ad71024b9.png

(点击展开之后)

image.png.980de029f763e312b1bb88bb183247c8.png

嗯....应该是这样吧(

链接到点评

创建帐号或登入才能点评

您必须成为用户才能点评

创建帐号

在我们社区注册个新的帐号。非常简单!

注册新帐号

登入

已有帐号? 登入

现在登入
×
×
  • 新建...

重要消息

为使您更好地使用该站点,请仔细阅读以下内容: 使用条款