跳至內容

模組:InfoboxBackrooms

出自轻之舟百科

此模塊的文檔可以在Module:InfoboxBackrooms/doc創建

local p = {}

function p.main(frame)
    local args = frame.args
    local level = tonumber(args['等级']) or 0
    local rounded = math.floor(level + 0.2)

    local colors = {
        [0] = '#4ade80',
        [1] = '#f5c518',
        [2] = '#fb923c',
        [3] = '#f87171',
        [4] = '#ef4444',
        [5] = '#dc2626'
    }
    local color = colors[rounded] or '#f5c518'

    local html = mw.html.create('div')
    html:css('background', '#1a1a2e')
    :css('color', '#e0e0e0')
    :css('margin', '1em 0')
    :css('position', 'relative')
    :css('overflow', 'hidden')
    :css('min-height', '120px')
    :css('border-radius', '4px')

    local header = html:tag('div')
    header:css('background', 'linear-gradient(90deg, #4a4a4a 0%, ' .. color .. ' 40%, ' .. color .. ' 100%)')
    :css('padding', '10px 16px')
    :css('position', 'relative')
    :css('z-index', '2')

    local title = header:tag('div')
    title:css('font-size', '1.5em')
    :css('font-weight', 'bold')
    :css('color', '#fff')
    :css('text-shadow', '1px 1px 3px rgba(0,0,0,0.6)')
    :wikitext('生存难度:')

    local levelText = header:tag('div')
    levelText:css('font-size', '1.2em')
    :css('color', '#fff')
    :css('font-style', 'italic')
    :wikitext('等级 ' .. rounded)

    for _, pos in ipairs({{90, -35}, {55, -35}}) do
        local line = header:tag('div')
        line:css('position', 'absolute')
        :css('right', pos[1] .. 'px')
        :css('top', '-10px')
        :css('bottom', '-10px')
        :css('width', '40px')
        :css('background', '#1a1a2e')
        :css('transform', 'skewX(' .. pos[2] .. 'deg)')
    end

    local diamond = html:tag('div')
    diamond:css('position', 'absolute')
    :css('right', '-30px')
    :css('top', '-30px')
    :css('width', '160px')
    :css('height', '160px')
    :css('background', color)
    :css('transform', 'rotate(45deg)')
    :css('box-shadow', '-3px 3px 10px rgba(0,0,0,0.4)')
    :css('z-index', '1')

    local diamondInner = diamond:tag('div')
    diamondInner:css('position', 'absolute')
    :css('top', '50%')
    :css('left', '50%')
    :css('transform', 'translate(-50%, -50%) rotate(-45deg)')

    local diamondBox = diamondInner:tag('div')
    diamondBox:css('width', '55px')
    :css('height', '55px')
    :css('border', '4px solid #1a1a2e')
    :css('display', 'flex')
    :css('align-items', 'center')
    :css('justify-content', 'center')
    :css('font-size', '2em')
    :css('font-weight', 'bold')
    :css('color', '#1a1a2e')
    :css('font-family', 'serif')
    :wikitext(rounded)

    local desc = html:tag('div')
    desc:css('padding', '20px 180px 20px 24px')
    :css('line-height', '1.8')
    :css('font-size', '1.1em')
    :wikitext(args['描述'] or '◆ 信息未提供')

    return tostring(html)
end

return p