打开/关闭搜索
搜索
打开/关闭菜单
14
6636
42
1.1万
OGAS数据中枢
导航
首页
最近更改
随机页面
特殊页面
上传文件
少女前线
简介
战术人形
装备图鉴
BGM
任务
打开/关闭外观设置菜单
通知
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。
user-interface-preferences
个人工具
注册
登录
查看“︁模块:GFInfobox”︁的源代码
来自OGAS数据中枢
更多操作
←
模块:GFInfobox
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
管理员
您可以查看和复制此页面的源代码。
local p = {} local function cleanParam(s) if not s then return nil end s = s:gsub('^[%s\n\r\t]+', ''):gsub('[%s\n\r\t]+$', '') if s == '' then return nil end s = s:gsub('^%s*<p[^>]*>', ''):gsub('</p>%s*$', '') return s end -- 递归展开模板和wikitext local function expandWikitext(frame, text) if not text then return nil end -- 先展开所有模板 local expanded = text -- 处理 {{ruby|文字|注音}} 模板 expanded = expanded:gsub('{{ruby|([^|]+)|([^}]+)}}', function(base, ruby) return frame:expandTemplate{ title = 'ruby', args = { base, ruby } } end) -- 处理 {{黑幕|文字}} 模板 expanded = expanded:gsub('{{黑幕|([^}]+)}}', function(content) return frame:expandTemplate{ title = '黑幕', args = { content } } end) -- 处理 {{lang|语言|文字}} 模板(如果有) expanded = expanded:gsub('{{lang|([^|]+)|([^}]+)}}', function(lang, text) return frame:expandTemplate{ title = 'lang', args = { lang, text } } end) -- 如果有其他常用模板,可以继续添加 return expanded end -- 安全展开不含用户输入的模板(如颜色模板) local function expandSafe(frame, s) if not s then return nil end return frame:preprocess(s) end function p.formatRarity(rarity) if not rarity then return nil end local colors = { [2] = '#777', [3] = '#33566f', [4] = '#7b813f', [5] = '#a7753b', [6] = '#ad4229', } local num = tonumber(rarity) or (rarity:find('★') and select(2, rarity:gsub('★', '★'))) if num and colors[math.floor(num)] then return string.format( '<span style="color:%s">%s</span>', colors[math.floor(num)], string.rep('★', math.floor(num)) ), false end return rarity, false end function p.main(frame) local parentFrame = frame:getParent() local args = parentFrame.args local name = cleanParam(args['标题']) or cleanParam(args['名字']) or mw.title.getCurrentTitle().subpageText -- 颜色字段:由 Lua 构造模板调用字符串,用 preprocess 展开,安全 local function fmtColor(rawColor, cType) rawColor = cleanParam(rawColor) if not rawColor then return nil end return expandSafe(frame, '{{' .. cType .. '_color|' .. rawColor .. '}}') end local hairColor = fmtColor(args['多种发色'] or args['发色'], 'Hair') local eyeColor = fmtColor(args['多种瞳色'] or args['瞳色'], 'Eye') local rarity = p.formatRarity(cleanParam(args['稀有度'])) -- 声优字段 local function fmtVoice() local v = cleanParam(args['多位声优'] or args['声优']) if not v then return nil end if v:find('%[%[') then return v end return '[[' .. v .. ']]' end -- 获取字段值并展开其中的模板 local function getField(key) local raw = cleanParam(args[key]) if not raw then return nil end return expandWikitext(frame, raw) end ---------- 拼 wikitext + HTML 混合字符串 ---------- local parts = {} local function push(s) parts[#parts + 1] = s end push('<div class="gf-infobox">') push('<div class="gf-title">' .. name .. '</div>') local image = cleanParam(args['image']) push('<div class="gf-image-container">') if image then push('[[File:' .. image .. '|280px]]') local caption = getField('图片说明') if caption then push('<div style="font-size:0.9em;">' .. caption .. '</div>') end end push('</div>') push('<div class="gf-section">基础资料</div>') push('<div class="gf-table">') local fields = { { '本名', getField('本名') }, { '别名', getField('别名') }, { '发色', hairColor }, { '瞳色', eyeColor }, { '声优', fmtVoice() }, { '萌点', getField('萌点') }, { '类型', getField('类型') }, { '稀有度', rarity }, { '团体', getField('所属团体') }, { '状态', getField('个人状态') }, } for _, field in ipairs(fields) do local label, value = field[1], field[2] if value then push('<div class="gf-row">') push('<div class="gf-label">' .. label .. '</div>') push('<div class="gf-value">' .. value .. '</div>') push('</div>') end end push('</div>') -- gf-table local related = getField('相关人士') if related then push('<div class="gf-section">亲属或相关人</div>') push('<div class="gf-related">' .. related .. '</div>') end push('</div>') -- gf-infobox return table.concat(parts, '\n') end return p
该页面嵌入的页面:
模块:GFInfobox/doc
(
查看源代码
)
返回
模块:GFInfobox
。
查看“︁模块:GFInfobox”︁的源代码
来自OGAS数据中枢