模块: Navbox
此模块的文档可以在模块:Navbox/doc创建
local getArgs = require('Module:Arguments').getArgs local p = {} function p.main(frame) local args = getArgs(frame) return p._main(args) end local function build_grid(title) local grid = mw.html.create('div') :addClass('navbox') :css('display', 'grid') :css('margin-top', '2em') :css('font-size', '16px') :css('grid-template-columns', 'fit-content(33%) fit-content(33%) 1fr') if title then grid:tag('div') :css('padding', '0 12px') :css('grid-column', '1/-1') :css('background', '#fff1a3') :css('text-align', 'center') :css('font-size', '18px') :css('font-weight', 'bold') :wikitext(title) end return grid end local function build_row_header(grid, row, column, text, background) grid:tag('div') :css('grid-column', column) :css('grid-row', row) :css('margin', '2px 2px 0 0') :css('padding', '0 12px') :css('background', background or '#fffad2') :css('text-align', 'center') :css('display', 'flex') :css('justify-content', 'center') :css('align-items', 'center') :css('font-weight', 'bold') :tag('div') :wikitext(text) end local function build_cell(grid, row, column, text, background) grid:tag('div') :css('grid-column', column) :css('grid-row', row) :css('margin', '2px 0 0 0') :css('padding', '0 12px') :css('text-align', 'left') :css('background', background or 'transparent') :tag('div') :wikitext(text) end local function build_back_link(grid, row, name, text) grid:tag('div') :css('text-align', 'right') :css('font-size', '90%') :css('grid-row', row) :css('grid-column', '1/-1') :css('position', 'relative') :css('top', '-.3em') :wikitext('[[[模板:' .. name .. '|' .. text .. ']]]') -- ZWSP between first and second brackets end function p._main(args) local grid = build_grid(args['title']) local i = 1 local row = 1 while args['list' .. i] or args['list' .. i .. '.1'] do if args['list' .. i .. '.1'] then local j = 1 while args['list' .. i .. '.' .. (j + 1)] do j = j + 1 end build_row_header( grid, row + 1 .. '/' .. (row + j + 1), 1, args['group' .. i]) for k = 1, j do local column = '2/-1' if args['group' .. i .. '.' .. k] then column = '3' build_row_header( grid, row + k, 2, args['group' .. i .. '.' .. k]) end local background = 'transparent' if math.fmod(row + k, 2) == 1 then background = '#f8f9fa' end build_cell(grid, row + k, column, args['list' .. i .. '.' .. k], background) end row = row + j else local column = '1/-1' if args['group' .. i] then column = '2/-1' build_row_header(grid, row + 1, 1, args['group' .. i]) end local background = 'transparent' if math.fmod(row + 1, 2) == 1 then background = '#f8f9fa' end build_cell(grid, row + 1, column, args['list' .. i], background) row = row + 1 end i = i + 1 end -- Link to template at bottom if args['name'] then build_back_link(grid, row + 1, args['name'], '查看模板') row = row + 1 end return tostring(grid) end return p