缺氧 wiki 编辑团队提示:注册账号并登录后体验更佳,且可通过参数设置定制优化您的浏览体验!
该站点为镜像站点,如果你想帮助这个由玩家志愿编辑的 wiki 站点,请前往原站点参与编辑,
同时欢迎加入编辑讨论群 851803695 与其他编辑者一起参与建设!
全站通知:
模块:信息框
刷
历
编
跳到导航
跳到搜索
文档
程序包函数
p.genNode(t, args)
(函数)- 参数:
p.genNode.collapsible(args)
(函数)- 生成可折叠块
- 参数:
p.genNode.panel(data)
(函数)- 生成多个 pannel
- 参数:
- 返回:mw.html 构造器(表)
p.genNode.infobox(title, content, raw)
(函数)- 生成一个信息框形式的table
- 参数:
- 返回:生成的信息框(表)
子页面模块
- 模块:信息框/doc
- 模块:信息框/元素
- 模块:信息框/小动物
- 模块:信息框/小动物/doc
- 模块:信息框/小行星
- 模块:信息框/小行星/doc
- 模块:信息框/建筑
- 模块:信息框/建筑/doc
- 模块:信息框/房间
- 模块:信息框/房间/doc
- 模块:信息框/技术
- 模块:信息框/技术/doc
- 模块:信息框/技能
- 模块:信息框/技能/doc
- 模块:信息框/星群
- 模块:信息框/星群/doc
- 模块:信息框/植物
- 模块:信息框/植物/doc
- 模块:信息框/流星
- 模块:信息框/流星雨
- 模块:信息框/流星雨/doc
- 模块:信息框/版本
- 模块:信息框/版本/doc
- 模块:信息框/物品
- 模块:信息框/物品/doc
- 模块:信息框/生态
- 模块:信息框/生态/doc
- 模块:信息框/用户信息框
- 模块:信息框/疾病
- 模块:信息框/疾病/doc
- 模块:信息框/病菌
- 模块:信息框/病菌/doc
- 模块:信息框/装备
- 模块:信息框/装备/doc
- 模块:信息框/遗迹
- 模块:信息框/间歇泉
- 模块:信息框/间歇泉/doc
- 模块:信息框/食物
- 模块:信息框/食物/doc
-- Module:信息框
local p = {}
local fstr = mw.ustring.format -- shortcut for formattig a string
-- 生成group中children的内容
function p.genchlidNode(t, args)
local node = mw.html.create('div'):css('min-height',"30px"):css('border-bottom','1px solid rgb(101,60,92)')
if t.label ~= nil then
node:css('display', 'grid')
node:css('grid-template-columns', '100px auto')
local label = node:tag('div'):css('min-height',"30px"):addClass("infobox-th"):wikitext(t.label)
if t.source ~= nil then
if args[t.source] == nil then return nil end
local data = node:tag("div"):css('min-height',"30px"):addClass("infobox-td"):wikitext(args[t.source])
end
elseif t.source ~= nil then
if args[t.source] ~= nil then
local source = node:tag('div'):css("padding-left",'10px'):css("padding-right",'10px')
if t.source == "描述" then source:css('text-align','center')
else source:css('text-align','left') end
source:wikitext(args[t.source])
else return nil
end
end
return node
end
-- 生成table中一行(即<tr>标签)的内容
--
-- @function p.genNode
-- @param {table} t 标签模板
-- @param {table} t.tag 标签名称,比如 data、image 等
-- @param[opt] {table} t.attr 标签属性键值对
-- @param[opt] {table} t.source 从 args 中获取信息时所用的键
-- @param[opt] {table} t.header header 文本,用于 group 标签
-- @param[opt] {table} t.label label 文本,用于 section 标签
-- @param[opt] {table} t.children 内部的元素
-- @param[opt] {table} t.children[i] 内部的一个元素,格式与 t 一致(递归)
-- @param {table} args 填入标签的信息,为键值对
function p.genNode(t, args)
local node = mw.html.create('tr')
if t.tag == 'image' then
local img = node:tag('td'):attr('colspan', 2):css('text-align','center')
if t.source ~= nil then
if args[t.source] == nil then return nil end
img:wikitext('[[file:'..args[t.source]..'|150px]]')
end
if t.children ~= nil then
local child = img:tag('div'):css('font-size','75%'):css('padding','4px')
if t.children[1].source ~= nil then
if args[t.children[1].source] == nil then return nil end
child:wikitext(args[t.children[1].source])
end
end
elseif t.tag == 'group' and t.children ~= nil then
local nodechild = {}
for _, c in ipairs(t.children) do table.insert(nodechild,p.genchlidNode(c, args)) end
if #nodechild ~= 0 then
local group = node:tag('td'):attr('colspan', 2):css('text-align','center'):tag('div')
group:css('text-align','center'):css('background','none')
group:addClass("mw-collapsible bg-primary mw-made-collapsible")
if t.attr ~= nil and t.attr.collapse == 'open' then
group:node('<span class="mw-collapsible-toggle mw-collapsible-toggle-default mw-collapsible-toggle-expanded" role="button" tabindex="0" aria-expanded="true"><a class="mw-collapsible-text">折叠</a></span>')
else
group:addClass("mw-collapsed")
group:node('<span class="mw-collapsible-toggle mw-collapsible-toggle-default mw-collapsible-toggle-collapsed" role="button" tabindex="0" aria-expanded="false"><a class="mw-collapsible-text">展开</a></span>')
end
local title = group:tag('p'):css('background',"rgb(123,70,103)"):wikitext(t.header)
local data = group:tag('div'):addClass("mw-collapsible-content"):css('text-align','left')
if t.attr ~= nil and t.attr.collapse == 'open' then --do nothing
else data:css('display','none') end
for _, c in ipairs(nodechild) do
data:wikitext(tostring(c)) end
else return nil end
elseif t.label ~= nil then
local label = node:tag("th"):attr('scope', "row"):addClass("infobox-th")
label:wikitext(t.label)
if t.source ~= nil then
if args[t.source] == nil then return nil end
local data = node:tag("td"):addClass("infobox-td"):wikitext(args[t.source])
end
elseif t.source ~= nil then
if args[t.source] ~= nil then
local source = node:tag('th'):attr('colspan', 2)
if t.source == "描述" then source:css('text-align','center')
else source:css('text-align','left') end
source:wikitext(args[t.source])
end
else return nil end
return node
end
--- 生成可折叠块
--
-- @function p.collapsible
-- @param {table} args 参数
-- @param[opt] {bool} args.collapsed 初始折叠,默认为否
-- @param[opt] {string} args.expandText 展开按钮的文本
-- @param[opt] {string} args.collapseText 收起按钮的文本
-- @param[opt] {string} args.showText 始终显示的文本
-- @param {string} args.node 可以被折叠的文本
function p.collapsible(args)
local node = mw.html.create('div')
node:addClass('mw-collapsible')
if args.collapsed then node:addClass('mw-collapsed') end
node:css('width', '100%')
if args.expandText ~= nil then
node:attr('data-expandtext', args.expandText)
end
if args.collapseText ~= nil then
node:attr('data-collapsetext', args.collapseText)
end
if args.showText ~= nil then node:wikitext(args.showText) end
local inner = node:tag('div'):addClass('mw-collapsible-content')
inner:tag('small'):css({
['display'] = 'grid',
['grid-template-columns'] = 'repeat(5, auto)',
['justify-content'] = 'start'
}):wikitext(args.hideText)
mw.log(node)
return node
end
--- 生成多个 pannel
--
-- @function p.panel
-- @param {table} data 数据
-- @param {table} data[i].label 对应 panel 的标签
-- @param {table} data[i].content 对应 panel 的内容
-- @param {table} data[i].content[i] 对应 panel 的内容的各个元素
-- @return {table} mw.html 构造器
function p.panel(data)
local a = 1
local b = 1
local panel = mw.html.create('div'):addClass('main-line-wrap'):css('float',"right"):css('width',"350px")
local labeldiv = panel:tag('div'):addClass("resp-tabs"):css('background',"rgb(47,36,62)")
local ul = labeldiv:tag('ul'):addClass('resp-tabs-list clearfix')
for _, pData in ipairs(data) do
local li = ul:tag('li')
if a ~= nil then li:addClass("active bili-list-style") a = nil
else li:addClass("bili-list-style") end
local span = li:tag('span'):addClass("tab-panel"):css('width','80px'):css('color','white'):css('font-size','90%')
span:wikitext(pData.label)
end
local condiv = labeldiv:tag('div'):addClass("resp-tabs-container")
for _, pData in ipairs(data) do
local datadiv = condiv:tag('div'):addClass("resp-tab-content")
if b ~= nil then datadiv:css("display",'block') b = nil end
datadiv:node(p.infobox(pData.label, pData.content))
end
return panel
end
--- 生成一个信息框形式的table
--
-- @function p.infobox
-- @param {string} title 信息框标题
-- @param {table} content 信息框内容
-- @param {table} content[i] 信息框内容中的某一个元素
-- @param[opt] {bool} raw 是否输出原始 mw.html 构造器。如否则输出预处理后的结果
-- @return {table} 生成的信息框
function p.infobox(title, content, raw, theme,style)
if #content == 1 then return content[1] end
local infobox = mw.html.create('table'):attr('cellspacing',"3"):addClass("infobox")
if theme ~= nil then infobox:attr{theme = theme} end
if style ~= nil then infobox:css(style) end
if title ~= nil then
local titleth = infobox:tag('tr'):tag('th')
titleth:attr('colspan', 2):css('text-align','center'):css('background',"rgb(123,70,103)"):css('font-size',"200%"):wikitext(title)
end
for _, n in ipairs(content or {}) do
infobox:node(n)
end
if not raw then
infobox = mw.getCurrentFrame():preprocess(tostring(infobox))
end
return infobox..'<div class="visible-xs">'..mw.getCurrentFrame():expandTemplate({title="clear"})..'</div>'
end
return p