Module:GFInfobox:修订间差异
来自OGAS数据中枢
更多操作
无编辑摘要 |
无编辑摘要 |
||
| 第5行: | 第5行: | ||
s = s:gsub('^[%s\n\r\t]+', ''):gsub('[%s\n\r\t]+$', '') | s = s:gsub('^[%s\n\r\t]+', ''):gsub('[%s\n\r\t]+$', '') | ||
return s ~= '' and s or nil | return s ~= '' and s or nil | ||
end | end | ||
function p.main(frame) | function p.main(frame) | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
local html = mw.html.create('div') | local html = mw.html.create('div'):addClass('gf-infobox') | ||
local name = cleanParam(args['标题']) or cleanParam(args['名字']) or mw.title.getCurrentTitle().subpageText | local name = cleanParam(args['标题']) or cleanParam(args['名字']) or mw.title.getCurrentTitle().subpageText | ||
html:tag('div') | html:tag('div'):addClass('gf-title'):wikitext(name) | ||
local image = cleanParam(args['image']) | local image = cleanParam(args['image']) | ||
local imgContainer = html:tag('div'):addClass('gf-image-container') | local imgContainer = html:tag('div'):addClass('gf-image-container') | ||
if image then | if image then | ||
imgContainer:wikitext(string.format('[[File:%s|280px | imgContainer:wikitext(string.format('[[File:%s|280px]]', image)) | ||
if cleanParam(args['图片说明']) then | |||
imgContainer:tag('div'):css('font-size', '0.9em'):wikitext(args['图片说明']) | |||
imgContainer:tag('div') | |||
end | end | ||
end | end | ||
html:tag('div'):addClass('gf-section'):wikitext('基础资料') | html:tag('div'):addClass('gf-section'):wikitext('基础资料') | ||
local tableDom = html:tag('div'):addClass('gf-table') | |||
local fields = { | local fields = { | ||
{'本名', cleanParam(args['本名'])}, | {'本名', cleanParam(args['本名'])}, | ||
{'别名', | {'别名', cleanParam(args['别名'])}, | ||
{'发色', p. | {'发色', p.formatColor(args['多种发色'] or args['发色'], 'Hair', frame)}, | ||
{'瞳色', p. | {'瞳色', p.formatColor(args['多种瞳色'] or args['瞳色'], 'Eye', frame)}, | ||
{'声优', | {'声优', cleanParam(args['多位声优'] or args['声优'])}, | ||
{'萌点', | {'萌点', cleanParam(args['萌点'])}, | ||
{'类型', cleanParam(args['类型'])}, | {'类型', cleanParam(args['类型'])}, | ||
{'稀有度', p.formatRarity(cleanParam(args['稀有度']))}, | {'稀有度', p.formatRarity(cleanParam(args['稀有度']))}, | ||
{' | {'团体', cleanParam(args['所属团体'])}, | ||
{' | {'状态', cleanParam(args['个人状态'])} | ||
} | } | ||
for _, field in ipairs(fields) do | for _, field in ipairs(fields) do | ||
if field[2] then | |||
local row = tableDom:tag('div'):addClass('gf-row') | |||
local row = | row:tag('div'):addClass('gf-label'):wikitext(field[1]) | ||
row:tag('div'):addClass('gf-label'):wikitext( | local val = row:tag('div'):addClass('gf-value') | ||
row:tag('div'):addClass('gf-value'):wikitext( | if field[1] == '声优' then val:wikitext('[[' .. field[2] .. ']]') | ||
else val:wikitext(field[2]) end | |||
end | end | ||
end | end | ||
local related = | local related = cleanParam(args['相关人士']) | ||
if related then | if related then | ||
html:tag('div'):addClass('gf-section'):wikitext('亲属或相关人') | html:tag('div'):addClass('gf-section'):wikitext('亲属或相关人') | ||
| 第73行: | 第58行: | ||
end | end | ||
function p. | function p.formatColor(v, cType, frame) | ||
v = cleanParam(v) | |||
if not v then return nil end | if not v then return nil end | ||
return frame:preprocess('{{ | return frame:preprocess('{{' .. cType .. '_color|' .. v .. '}}') | ||
end | end | ||
function p.formatRarity(rarity) | function p.formatRarity(rarity) | ||
if not rarity then return nil end | if not rarity then return nil end | ||
local | local colors = {[2]='#777', [3]='#33566f', [4]='#7b813f', [5]='#a7753b', [6]='#ad4229'} | ||
local num = tonumber(rarity) or (rarity:find('★') and #rarity/3) | |||
local num = tonumber(rarity) | 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))) | |||
if num and | |||
return string.format('<span style="color:%s">%s</span>', | |||
end | end | ||
return rarity | return rarity | ||
2026年5月8日 (五) 23:03的版本
此模块的文档可以在Module:GFInfobox/doc创建
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]+$', '')
return s ~= '' and s or nil
end
function p.main(frame)
local args = frame:getParent().args
local html = mw.html.create('div'):addClass('gf-infobox')
local name = cleanParam(args['标题']) or cleanParam(args['名字']) or mw.title.getCurrentTitle().subpageText
html:tag('div'):addClass('gf-title'):wikitext(name)
local image = cleanParam(args['image'])
local imgContainer = html:tag('div'):addClass('gf-image-container')
if image then
imgContainer:wikitext(string.format('[[File:%s|280px]]', image))
if cleanParam(args['图片说明']) then
imgContainer:tag('div'):css('font-size', '0.9em'):wikitext(args['图片说明'])
end
end
html:tag('div'):addClass('gf-section'):wikitext('基础资料')
local tableDom = html:tag('div'):addClass('gf-table')
local fields = {
{'本名', cleanParam(args['本名'])},
{'别名', cleanParam(args['别名'])},
{'发色', p.formatColor(args['多种发色'] or args['发色'], 'Hair', frame)},
{'瞳色', p.formatColor(args['多种瞳色'] or args['瞳色'], 'Eye', frame)},
{'声优', cleanParam(args['多位声优'] or args['声优'])},
{'萌点', cleanParam(args['萌点'])},
{'类型', cleanParam(args['类型'])},
{'稀有度', p.formatRarity(cleanParam(args['稀有度']))},
{'团体', cleanParam(args['所属团体'])},
{'状态', cleanParam(args['个人状态'])}
}
for _, field in ipairs(fields) do
if field[2] then
local row = tableDom:tag('div'):addClass('gf-row')
row:tag('div'):addClass('gf-label'):wikitext(field[1])
local val = row:tag('div'):addClass('gf-value')
if field[1] == '声优' then val:wikitext('[[' .. field[2] .. ']]')
else val:wikitext(field[2]) end
end
end
local related = cleanParam(args['相关人士'])
if related then
html:tag('div'):addClass('gf-section'):wikitext('亲属或相关人')
html:tag('div'):addClass('gf-related'):wikitext(related)
end
return tostring(html)
end
function p.formatColor(v, cType, frame)
v = cleanParam(v)
if not v then return nil end
return frame:preprocess('{{' .. cType .. '_color|' .. v .. '}}')
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 #rarity/3)
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)))
end
return rarity
end
return p