打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

Module:GFInfobox:修订间差异

来自OGAS数据中枢
弃权者留言 | 贡献
无编辑摘要
弃权者留言 | 贡献
无编辑摘要
 
(未显示同一用户的1个中间版本)
第4行: 第4行:
     if not s then return nil end
     if not s then return nil end
     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
     if s == '' then return nil end
end
 
local function processMixedContent(s)
    s = cleanParam(s)
    if not s then return nil end
     s = s:gsub('^%s*<p[^>]*>', ''):gsub('</p>%s*$', '')
     s = s:gsub('^%s*<p[^>]*>', ''):gsub('</p>%s*$', '')
    s = s:gsub('\n', '<br/>')
     return s
     return s
end
end
第26行: 第20行:
     if image then
     if image then
         imgContainer:wikitext(string.format('[[File:%s|280px]]', image))
         imgContainer:wikitext(string.format('[[File:%s|280px]]', image))
         if cleanParam(args['图片说明']) then
         local caption = cleanParam(args['图片说明'])
             imgContainer:tag('div'):css('font-size', '0.9em'):wikitext(args['图片说明'])
        if caption then
             imgContainer:tag('div'):css('font-size', '0.9em'):wikitext(caption)
         end
         end
     end
     end
第36行: 第31行:
     local fields = {
     local fields = {
         {'本名', cleanParam(args['本名'])},
         {'本名', cleanParam(args['本名'])},
         {'别名', processMixedContent(args['别名'])},
         {'别名', cleanParam(args['别名'])},
         {'发色', p.formatColor(args['多种发色'] or args['发色'], 'Hair', frame)},
         {'发色', p.formatColor(args['多种发色'] or args['发色'], 'Hair', frame)},
         {'瞳色', p.formatColor(args['多种瞳色'] or args['瞳色'], 'Eye', frame)},
         {'瞳色', p.formatColor(args['多种瞳色'] or args['瞳色'], 'Eye', frame)},
         {'声优', cleanParam(args['多位声优'] or args['声优'])},
         {'声优', cleanParam(args['多位声优'] or args['声优'])},
         {'萌点', processMixedContent(args['萌点'])},
         {'萌点', cleanParam(args['萌点'])},
         {'类型', cleanParam(args['类型'])},
         {'类型', cleanParam(args['类型'])},
         {'稀有度', p.formatRarity(cleanParam(args['稀有度']))},
         {'稀有度', p.formatRarity(cleanParam(args['稀有度']))},
第60行: 第55行:
     end
     end
      
      
     local related = processMixedContent(args['相关人士'])
     local related = cleanParam(args['相关人士'])
     if related then
     if related then
         html:tag('div'):addClass('gf-section'):wikitext('亲属或相关人')
         html:tag('div'):addClass('gf-section'):wikitext('亲属或相关人')

2026年5月8日 (五) 23:16的最新版本

此模块的文档可以在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]+$', '')
    if s == '' then return nil end
    s = s:gsub('^%s*<p[^>]*>', ''):gsub('</p>%s*$', '')
    return s
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))
        local caption = cleanParam(args['图片说明'])
        if caption then
            imgContainer:tag('div'):css('font-size', '0.9em'):wikitext(caption)
        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