查看“模块:Infobox”的源代码
←
模块:Infobox
跳转到导航
跳转到搜索
因为以下原因,你没有权限 编辑此页:
你请求的操作仅限属于此用户组的用户执行:
用户
你可以查看和复制此页面的源代码。
-- Load necessary modules. require('strict') local getArgs local yesno = require('Module:Yesno') local p = { } -------------------------------------------------------------------------------- -- Helper functions -------------------------------------------------------------------------------- local function union(t1, t2) local temp = {} for _, v in pairs(t1) do temp[v] = true end for _, v in pairs(t2) do temp[v] = true end local ret = {} for k in pairs(temp) do table.insert(ret, k) end table.sort(ret) return ret end local function getArgNums(args, prefix) local ret = { } for k in pairs(args) do local num = string.match(k, "^" .. prefix .. "(%d*)$") if num then table.insert(ret, tonumber(num)) end end table.sort(ret) return ret end -------------------------------------------------------------------------------- -- Box class definition -------------------------------------------------------------------------------- local Infobox = {} Infobox.__index = Infobox function Infobox.new(args) args = args or {} local obj = {} -- Set the arguments obj.args = args mw.logObject(obj) return setmetatable(obj, Infobox) end function Infobox:setParameters() local args = self.args self.child = yesno(args.child) self.title = args.title self.above = args.above self.autoheaders = yesno(args.autoheaders) if self.autoheaders then self:removeLoneHeaders() end self.subheaders = self:setSubheaders() self.images = self:setImages() self.rows = self:setRows() self.below = args.below end function Infobox:setSubheaders() local args = self.args local nums = getArgNums(args, 'subheader') local t = { } if args.subheader then table.insert(t, args.subheader) end for _,v in pairs(nums) do table.insert(t, args['subheader' .. v]) end return t end function Infobox:setImages() local args = self.args local nums = union(getArgNums(args, 'image'), getArgNums(args, 'caption')) local t = { } if args.image or args.caption then table.insert(t, { image = args.image, caption = args.caption }) end for _,v in pairs(nums) do table.insert(t, { image = args['image' .. v], caption = args['caption' .. v] }) end return t end function Infobox:removeLoneHeaders() local args = self.args local nums = union(getArgNums(args, 'header'), getArgNums(args, 'data')) table.sort(nums) local lastHeader for _, v in pairs(nums) do if args['header' .. v] then if lastHeader then args['header' .. lastHeader] = nil end lastHeader = v else lastHeader = nil end end if lastHeader then args['header' .. lastHeader] = nil end end function Infobox:setRows() local args = self.args local nums = { } nums = union(nums, getArgNums(args, 'header')) nums = union(nums, getArgNums(args, 'label')) nums = union(nums, getArgNums(args, 'data')) local t = { } for _,v in pairs(nums) do table.insert(t, { header = args['header' .. v], label = args['label' .. v], data = args['data' .. v] }) end return t end function Infobox:export() local root = mw.html.create() if not self.child then root = root:tag('table') root:addClass('infobox') end if self.title then local title = root:tag('caption') title :addClass('ib-title') :wikitext(self.title) end if self.above then local above = root:tag('tr'):tag('td') above :attr('colspan', 2) :addClass('ib-above') :wikitext(self.above) end for _,v in ipairs(self.subheaders) do local subheader = root:tag('tr'):tag('td') subheader :attr('colspan', 2) :addClass('ib-subheader') :wikitext(v) end for _,v in ipairs(self.images) do if v.image then local cell = root:tag('tr'):tag('td') :attr('colspan', 2) :addClass('ib-image') :wikitext(v.image) if v.caption then cell :tag('div') :addClass('ib-image-caption') :wikitext(v.caption) end end end for _,v in ipairs(self.rows) do if v.header then if v.header ~= '_BLANK_' then local header = root:tag('tr'):tag('th') header:attr('colspan', 2) header:addClass('ib-header') header:wikitext(v.header) end else if v.label and v.data then local row = root:tag('tr') local label = row:tag('th') label:addClass('ib-label') label:wikitext(v.label) local data = row:tag('td') data:addClass('ib-data') data:wikitext(v.data) end if v.data and not v.label then local data = root:tag('tr'):tag('td') data:attr('colspan', 2) data:addClass('ib-data') data:wikitext(v.data) end end end if self.below then local below = root:tag('tr'):tag('td') below :attr('colspan', 2) :addClass('ib-below') :wikitext(self.below) end local templateStyle = mw.getCurrentFrame():extensionTag( 'templatestyles', '', { src = 'Template:Infobox/styles.css' } ); return templateStyle .. tostring(root) end -------------------------------------------------------------------------------- -- Exports -------------------------------------------------------------------------------- function p.infobox(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end local box = Infobox.new(getArgs(frame)) box:setParameters() return box:export() end return p
此页使用的模板:
模块:Infobox/doc
(
查看源代码
)
返回
模块:Infobox
。
导航菜单
个人工具
登录
命名空间
模块
讨论
English
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
批量上传文件
WinStory 门户
深色模式
工具
链入页面
相关更改
特殊页面
页面信息
获取短URL