Module:VOCALOID Songbox Introduction

H萌娘,万物皆可H的百科全书!
imported>=海豚=2021年7月19日 (一) 20:45的版本 (创建页面,内容为“-- Module:VOCALOID Songbox Introduction -- Made with ♥ by User:Leranjun -- This module implements {{tl|VOCALOID Songbox Introduction}}. -- Please refrain from inv…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

该模块实现{{VOCALOID Songbox Introduction}}的功能。

请不要直接调用此模块。


-- Module:VOCALOID Songbox Introduction
-- Made with ♥ by User:Leranjun

-- This module implements {{tl|VOCALOID Songbox Introduction}}.
-- Please refrain from invoking this module directly.

local p = {}

local getArgs = require("Module:Arguments").getArgs
local KW = {
    ["lbgcolor"] = true,
    ["ltcolor"] = true,
    ["rbdcolor"] = true,
    ["args"] = true
}

local function startsWith(s, t)
    return (mw.ustring.sub(s, 1, mw.ustring.len(t)) == t)
end

function p.main(frame)
    return p._main(
        getArgs(
            frame,
            {
                valueFunc = function(k, v)
                    if (KW[k]) then
                        return mw.text.trim(v)
                    elseif v then
                        v = mw.text.trim(v)
                        if v ~= "" then
                            return v
                        end
                    end
                    return nil
                end
            }
        )
    )
end

function p._main(args)
    local parsed = p.parse(args)

    local wrapper = mw.html.create("div")
    wrapper:css("text-align", "left")
    local mainTable = mw.html.create("table")
    mainTable:cssText("margin-left: 0.5em; float: right;")

    for k, v in pairs(parsed.group) do
        local row = mw.html.create("tr")
        local cell = mw.html.create("td")
        cell:cssText("vertical-align: middle; padding: 0 2px;"):css("background-color", args.lbgcolor or "transparent"):css(
            "color",
            args.ltcolor or "#0645ad"
        )
        cell:wikitext(v)
        row:node(tostring(cell))

        cell = mw.html.create("td")
        cell:css("border", (args.rbdcolor or args.lbgcolor) .. " 1px solid")
        cell:wikitext(args["list" .. k])
        row:node(tostring(cell))

        mainTable:node(tostring(row))
    end

    for _, k in pairs(parsed.args) do
        if (parsed[""][k]) then
            local v = parsed[""][k]
            local row = mw.html.create("tr")
            local cell = mw.html.create("td")
            cell:cssText("vertical-align: middle; padding: 0 2px;"):css(
                "background-color",
                args.lbgcolor or "transparent"
            ):css("color", args.ltcolor or "#0645ad")
            cell:wikitext(k)
            row:node(tostring(cell))

            cell = mw.html.create("td")
            cell:css("border", (args.rbdcolor or args.lbgcolor) .. " 1px solid")
            cell:wikitext(v)
            row:node(tostring(cell))

            mainTable:node(tostring(row))
        end
    end

    wrapper:node(mainTable)

    local clear = mw.html.create("div")
    clear:addClass("mobileonly"):css("clear", "both")
    wrapper:node(clear)
    return tostring(wrapper)
end

function p.parse(args)
    local r = {["group"] = {}, [""] = {}}

    r.args = mw.text.split(args.args, ";")

    for k, v in pairs(args) do
        if (startsWith(k, "group")) then
            r["group"][tonumber(mw.ustring.sub(k, 6, mw.ustring.len(k)))] = v
        elseif ((not KW[k]) and (not startsWith(k, "list"))) then -- 屏蔽已存在的项目
            r[""][k] = v
        end
    end

    return r
end

return p