该模块实现{{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,
["LDC"] = true,
["ldc"] = true,
["author"] = true,
["anchor"] = true,
["授权信息"] = 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 ipairs(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 or "transparent") .. " 1px solid")
cell:wikitext(args["list" .. k])
row:node(tostring(cell))
mainTable:node(tostring(row))
end
for k, v in pairs(parsed[""]) 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(k)
row:node(tostring(cell))
cell = mw.html.create("td")
cell:css("border", (args.rbdcolor or args.lbgcolor or "transparent") .. " 1px solid")
cell:wikitext(v)
row:node(tostring(cell))
mainTable:node(tostring(row))
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"] = {}, [""] = {}}
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