Module:GFInfobox:修订间差异
来自OGAS数据中枢
更多操作
无编辑摘要 |
标签:撤销 |
||
| 第1行: | 第1行: | ||
local p = {} | local p = {} | ||
function p.main(frame) | function p.main(frame) | ||
local args = | local args = frame.args | ||
local | local html = mw.html.create('div') | ||
:addClass('moe-infobox gf-infobox') | |||
if args | -- 标题 | ||
html:tag('div') | |||
: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 | -- 格式化瞳色 | ||
function formatEyeColor(args, frame) | |||
local multiColor = args['多种瞳色'] | |||
if multiColor and multiColor ~= '' then | |||
return multiColor | |||
end | |||
local eyeColor = args['瞳色'] | |||
if eyeColor and eyeColor ~= '' then | |||
return frame:preprocess('{{Eye_color|' .. eyeColor .. '}}') | |||
end | end | ||
return nil | |||
end | |||
return | -- 格式化声优 | ||
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 | ||
2026年5月8日 (五) 21:50的版本
此模块的文档可以在Module:GFInfobox/doc创建
local p = {}
function p.main(frame)
local args = frame.args
local html = mw.html.create('div')
:addClass('moe-infobox gf-infobox')
-- 标题
html:tag('div')
: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
return nil
end
-- 格式化瞳色
function formatEyeColor(args, frame)
local multiColor = args['多种瞳色']
if multiColor and multiColor ~= '' then
return multiColor
end
local eyeColor = args['瞳色']
if eyeColor and eyeColor ~= '' then
return frame:preprocess('{{Eye_color|' .. eyeColor .. '}}')
end
return nil
end
-- 格式化声优
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
return p