Module:GFInfobox:修订间差异
来自OGAS数据中枢
更多操作
创建页面,内容为“local p = {} -- 武器类型映射 local weaponTypes = { ['手枪'] = '手枪', ['冲锋枪'] = '冲锋枪', ['步枪'] = '步枪', ['突击步枪'] = '突击步枪', ['机枪'] = '机枪', ['霰弹枪'] = '霰弹枪' } -- 稀有度颜色 local rarityColors = { [2] = '#777', [3] = '#33566f', [4] = '#7b813f', [5] = '#a7753b', [6] = '#ad4229' } function p.main(frame) local args = frame.args local html = mw.…” |
无编辑摘要 |
||
| 第1行: | 第1行: | ||
local p = {} | local p = {} | ||
function p.main(frame) | function p.main(frame) | ||
local args = frame.args | local args = frame.args | ||
local html = mw.html.create('div') | local html = mw.html.create('div') | ||
:addClass('gf-infobox') | :addClass('moe-infobox gf-infobox') | ||
-- 标题 | -- 标题 | ||
html:tag('div') | html:tag('div') | ||
:addClass('gf-title') | :addClass('gf-title') | ||
:wikitext(title) | :wikitext(args['标题'] or args['名字'] or mw.title.getCurrentTitle().subpageText) | ||
-- 图片 | -- 图片 | ||
local image = args['image | local image = args['image'] | ||
if image and image ~= '' then | if image and image ~= '' then | ||
local | local imgContainer = html:tag('div') | ||
:addClass('gf-image-container') | :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 | end | ||
else | else | ||
| 第55行: | 第32行: | ||
:wikitext('基础资料') | :wikitext('基础资料') | ||
-- | -- 信息字段列表 | ||
local fields = { | local fields = { | ||
{'本名', args['本名']}, | {'本名', args['本名']}, | ||
| 第97行: | 第74行: | ||
:addClass('gf-section') | :addClass('gf-section') | ||
:wikitext('亲属或相关人') | :wikitext('亲属或相关人') | ||
html:tag('div') | html:tag('div') | ||
:addClass('gf- | :addClass('gf-value') | ||
:cssText('padding: 2px 5px;') | |||
:wikitext(related) | :wikitext(related) | ||
end | end | ||
| 第134行: | 第91行: | ||
local hairColor = args['发色'] | local hairColor = args['发色'] | ||
if hairColor then | if hairColor and hairColor ~= '' then | ||
return | return frame:preprocess('{{Hair_color|' .. hairColor .. '}}') | ||
end | end | ||
| 第149行: | 第106行: | ||
local eyeColor = args['瞳色'] | local eyeColor = args['瞳色'] | ||
if eyeColor then | if eyeColor and eyeColor ~= '' then | ||
return | return frame:preprocess('{{Eye_color|' .. eyeColor .. '}}') | ||
end | end | ||
| 第173行: | 第130行: | ||
-- 格式化武器类型 | -- 格式化武器类型 | ||
function formatWeaponType(weaponType) | function formatWeaponType(weaponType) | ||
local weaponTypes = { | |||
['手枪'] = '手枪', | |||
['冲锋枪'] = '冲锋枪', | |||
['步枪'] = '步枪', | |||
['突击步枪'] = '突击步枪', | |||
['机枪'] = '机枪', | |||
['霰弹枪'] = '霰弹枪' | |||
} | |||
if weaponType and weaponTypes[weaponType] then | if weaponType and weaponTypes[weaponType] then | ||
return weaponTypes[weaponType] | return weaponTypes[weaponType] | ||
| 第182行: | 第148行: | ||
-- 格式化稀有度 | -- 格式化稀有度 | ||
function formatRarity(rarity) | function formatRarity(rarity) | ||
if not rarity then | if not rarity or rarity == '' then | ||
return nil | return nil | ||
end | end | ||
local rarityColors = { | |||
[2] = '#777777', | |||
[3] = '#33566f', | |||
[4] = '#7b813f', | |||
[5] = '#a7753b', | |||
[6] = '#ad4229' | |||
} | |||
-- 处理数字 | -- 处理数字 | ||
| 第196行: | 第170行: | ||
end | end | ||
-- | -- 处理星星 | ||
local starCount = | local starCount = 0 | ||
rarity:gsub('★', function() starCount = starCount + 1 end) | |||
if starCount > 0 then | if starCount > 0 then | ||
local color = rarityColors[starCount] | local color = rarityColors[starCount] | ||
| 第203行: | 第178行: | ||
return string.format('<span style="color:%s">%s</span>', color, rarity) | return string.format('<span style="color:%s">%s</span>', color, rarity) | ||
end | end | ||
return rarity | |||
end | end | ||
2026年5月8日 (五) 15:59的版本
此模块的文档可以在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)},
{'瞳色', formatEyeColor(args)},
{'声优', 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-value')
:cssText('padding: 2px 5px;')
:wikitext(related)
end
return tostring(html)
end
-- 格式化发色
function formatHairColor(args)
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)
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