模块:Vertical header

来自决策链云智库
Zeroclanzhang讨论 | 贡献2024年1月25日 (四) 16:51的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

Implements {{Vertical header}}


local p = {}

function p._vertical_header(args)

    local text = args.text
    local maxWidth = args.maxWidth
    local rows = 1
    local width = 0
    if maxWidth ~= "" then
        width = maxWidth
    else
        for eachMatch in text:gmatch("<[bB][rR] */? *>") do
            rows = rows + 1
        end
        width = rows * 0.875
        width = width .. "em"
    end

    local wikiText = "class = \"nowrap"
    local sortPadding = args.sortPadding
    if sortPadding == "" then
        wikiText = wikiText .. " unsortable"
    end

    local vertAlign = args.vertAlign
    wikiText = wikiText .. "\" style=\"line-height:99%;vertical-align:" .. vertAlign .. ";padding:"
    if sortPadding == "" then
        wikiText = wikiText .. ".4em"
    else
        wikiText = wikiText .. "21px"
    end
    wikiText = wikiText .. " .4em .2em;background-position:50% .4em !important;"

    local cellStyle = args.cellstyle:gsub("\"", "&quot;")
    wikiText = wikiText .. "min-width:" .. width .. ";max-width:" .. width .. ";width:" .. width .. ";overflow:hidden;" .. cellStyle .. "\""
    wikiText = wikiText .. " | <div style=\"vertical-rl=-webkit-writing-mode: vertical-rl; -o-writing-mode: vertical-rl; -ms-writing-mode: tb-rl;writing-mode: tb-rl; writing-mode: vertical-rl; layout-flow: vertical-ideographic;transform:rotate(0deg);display:inline-block;padding-left:1px;text-align:"

    local normalAlign = ""
    if vertAlign == "top" then
        normalAlign = "right"
    elseif vertAlign == "middle" then
        normalAlign = "center"
    else
        normalAlign = "left"
    end
    wikiText = wikiText .. normalAlign .. ";"

    local style = args.style:gsub("\"", "&quot;")
    wikiText = wikiText .. style .. "\">"

    local noBold = args.noBold
    if noBold == "" then
        wikiText = wikiText .. text
    else
        wikiText = wikiText .. mw.getCurrentFrame():preprocess("{{nobold|1=" .. text .. "}}")
    end
    wikiText = wikiText .. "</div>"
    return wikiText
end

function p.cell(frame)
    local args = frame.args
    return p._vertical_header(args)
end

return p