willson-v- 发布于一月 29, 2022 分享 发布于一月 29, 2022 11 小时前, 攸薩 说道: 如果有几百个连结好像还是可以展开的表格比较好吗 嗯...主要是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 举个栗子的话,看起来会变成这样... (点击展开之前) (点击展开之后) 嗯....应该是这样吧( 链接到点评
推荐贴