|
|
| 第1行: |
第1行: |
| local p = {} | | local p = {} |
| | local getArgs = require('Module:Arguments').getArgs |
|
| |
|
| function p.main(frame) | | function p.main(frame) |
| local args = frame.args | | local args = getArgs(frame) |
| local html = mw.html.create('div') | | local nav = mw.html.create('div'):addClass('gfl-nav-compact') |
| :addClass('moe-infobox gf-infobox')
| |
| | | |
| -- 标题 | | if args.LOGO then |
| html:tag('div')
| | nav:tag('div'):addClass('gfl-logo-box'):wikitext(args.LOGO) |
| :addClass('gf-title')
| |
| :wikitext(args['标题'] or args['名字'] or mw.title.getCurrentTitle().subpageText)
| |
|
| |
| -- 图片
| |
| local image = args['image']
| |
| if image and image ~= '' then
| |
| local imgContainer = html:tag('div')
| |
| :addClass('gf-image-container')
| |
| imgContainer:wikitext(string.format('[[File:%s|280px|class=infobox-image]]', image))
| |
| if args['图片说明'] and args['图片说明'] ~= '' then
| |
| imgContainer:tag('br'):done()
| |
| imgContainer:wikitext(args['图片说明'])
| |
| end
| |
| else
| |
| html:tag('div')
| |
| :addClass('gf-image-container')
| |
| :wikitext('啊嘞?!<br />怎么回事<br />这个妹子怎么没有头的样子……')
| |
| end
| |
|
| |
| -- 基础资料
| |
| html:tag('div')
| |
| :addClass('gf-section')
| |
| :wikitext('基础资料')
| |
|
| |
| -- 信息字段列表
| |
| local fields = {
| |
| {'本名', args['本名']},
| |
| {'别名', args['别名']},
| |
| {'发色', formatHairColor(args, frame)},
| |
| {'瞳色', formatEyeColor(args, frame)},
| |
| {'声优', formatVoiceActor(args)},
| |
| {'萌点', args['萌点']},
| |
| {'类型', formatWeaponType(args['类型'])},
| |
| {'稀有度', formatRarity(args['稀有度'])},
| |
| {'原产国', args['原产国']},
| |
| {'研发者', args['研发者']},
| |
| {'研发商', args['研发商']},
| |
| {'研发日期', args['研发日期']},
| |
| {'生产商', args['生产商']},
| |
| {'生产日期', args['生产日期']},
| |
| {'服役期间', args['服役期间']},
| |
| {'出身地区', args['出身地区']},
| |
| {'活动范围', args['活动范围']},
| |
| {'所属团体', args['所属团体']},
| |
| {'个人状态', args['个人状态']}
| |
| }
| |
|
| |
| for _, field in ipairs(fields) do
| |
| local label, value = field[1], field[2]
| |
| if value and value ~= '' then
| |
| local row = html:tag('div'):addClass('gf-row')
| |
| row:tag('div')
| |
| :addClass('gf-label')
| |
| :wikitext(label)
| |
| row:tag('div')
| |
| :addClass('gf-value')
| |
| :wikitext(value)
| |
| end | |
| end
| |
|
| |
| -- 亲属或相关人
| |
| local related = args['相关人士']
| |
| if related and related ~= '' then
| |
| html:tag('div')
| |
| :addClass('gf-section')
| |
| :wikitext('亲属或相关人')
| |
| html:tag('div')
| |
| :addClass('gf-related')
| |
| :wikitext(related)
| |
| end
| |
|
| |
| return tostring(html)
| |
| end
| |
| | |
| -- 格式化发色
| |
| function formatHairColor(args, frame)
| |
| local multiColor = args['多种发色']
| |
| if multiColor and multiColor ~= '' then
| |
| return multiColor
| |
| end
| |
|
| |
| local hairColor = args['发色']
| |
| if hairColor and hairColor ~= '' then
| |
| return frame:preprocess('{{Hair_color|' .. hairColor .. '}}')
| |
| end | | end |
|
| |
| return nil
| |
| end
| |
|
| |
|
| -- 格式化瞳色 | | local i = 1 |
| function formatEyeColor(args, frame)
| | while args['标题' .. i] do |
| local multiColor = args['多种瞳色']
| | local item = nav:tag('div'):addClass('gfl-item'):attr('tabindex', '0') |
| if multiColor and multiColor ~= '' then
| | item:tag('div'):addClass('gfl-title'):wikitext(mw.text.trim(args['标题' .. i])) |
| return multiColor | | |
| end
| | local content = item:tag('div'):addClass('gfl-content') |
|
| | local wrap = content:tag('div'):addClass('gfl-links-wrap') |
| local eyeColor = args['瞳色']
| | |
| if eyeColor and eyeColor ~= '' then
| | local rawContent = args['栏目' .. i] or '' |
| return frame:preprocess('{{Eye_color|' .. eyeColor .. '}}') | | wrap:wikitext(mw.text.trim(rawContent)) |
| | |
| | i = i + 1 |
| end | | end |
|
| |
| return nil
| |
| end
| |
|
| |
|
| -- 格式化声优
| | return tostring(nav) |
| function formatVoiceActor(args)
| |
| local multiVA = args['多位声优']
| |
| if multiVA and multiVA ~= '' then
| |
| return multiVA
| |
| end
| |
|
| |
| local voiceActor = args['声优']
| |
| if voiceActor and voiceActor ~= '' then
| |
| return string.format('[[%s]]', voiceActor)
| |
| end
| |
|
| |
| return nil
| |
| end
| |
| | |
| -- 格式化武器类型
| |
| function formatWeaponType(weaponType)
| |
| local weaponTypes = {
| |
| ['手枪'] = '手枪',
| |
| ['冲锋枪'] = '冲锋枪',
| |
| ['步枪'] = '步枪',
| |
| ['突击步枪'] = '突击步枪',
| |
| ['机枪'] = '机枪',
| |
| ['霰弹枪'] = '霰弹枪'
| |
| }
| |
|
| |
| if weaponType and weaponTypes[weaponType] then
| |
| return weaponTypes[weaponType]
| |
| end
| |
|
| |
| return weaponType
| |
| end
| |
| | |
| -- 格式化稀有度
| |
| function formatRarity(rarity)
| |
| if not rarity or rarity == '' then | |
| return nil
| |
| end
| |
|
| |
| local rarityColors = {
| |
| [2] = '#777777',
| |
| [3] = '#33566f',
| |
| [4] = '#7b813f',
| |
| [5] = '#a7753b',
| |
| [6] = '#ad4229'
| |
| }
| |
|
| |
| -- 处理数字
| |
| local num = tonumber(rarity)
| |
| if num then
| |
| local color = rarityColors[num]
| |
| if color then
| |
| return string.format('<span style="color:%s">%s</span>', color, string.rep('★', num))
| |
| end
| |
| return rarity
| |
| end
| |
|
| |
| -- 处理星星
| |
| local starCount = 0
| |
| rarity:gsub('★', function() starCount = starCount + 1 end)
| |
| if starCount > 0 then
| |
| local color = rarityColors[starCount]
| |
| if color then
| |
| return string.format('<span style="color:%s">%s</span>', color, rarity)
| |
| end
| |
| return rarity
| |
| end
| |
|
| |
| -- 处理箭头
| |
| return rarity:gsub('%s*→%s*', ' → '):gsub('%s*->%s*', ' → ')
| |
| end | | end |
|
| |
|
| return p | | return p |
此模块的文档可以在Module:GFInfobox/doc创建
local p = {}
local getArgs = require('Module:Arguments').getArgs
function p.main(frame)
local args = getArgs(frame)
local nav = mw.html.create('div'):addClass('gfl-nav-compact')
if args.LOGO then
nav:tag('div'):addClass('gfl-logo-box'):wikitext(args.LOGO)
end
local i = 1
while args['标题' .. i] do
local item = nav:tag('div'):addClass('gfl-item'):attr('tabindex', '0')
item:tag('div'):addClass('gfl-title'):wikitext(mw.text.trim(args['标题' .. i]))
local content = item:tag('div'):addClass('gfl-content')
local wrap = content:tag('div'):addClass('gfl-links-wrap')
local rawContent = args['栏目' .. i] or ''
wrap:wikitext(mw.text.trim(rawContent))
i = i + 1
end
return tostring(nav)
end
return p