×
创建新页面
在此填写您的页面标题:
我们当前在Undertale社区维基上拥有187个页面。请在上方输入您的页面名称或点击以下任意标题来开始编写页面!



Undertale社区维基
欢迎来到Undertale社区维基(*`∀´*)ノ亻,如果想要参与条目创建或编辑,请先登录

可在模块:信息框/doc创建此模块的帮助文档

local p = {}
local b = require("Module:Basic")
function p.core(data)
    local html = mw.html.create()
    mw.log("data")
    mw.logObject(data)
    local tableElem = html:tag('table')
        :addClass(data.class or 'infobox')
        :css('align', data.align or 'right')
        :css('display', 'table')
        :css('font-size', '89%')
        :css('text-align', data.textalign or 'center')
        :css('max-width', data.maxwidth or '100%')
        :css('float', data.float or 'right')
        :css('background-color', b.empty(data.bgcolor) or '')

    if b.empty(data["image"]) then
        local row = tableElem:tag('tr')
        local wikitext = ""

        if not (mw.ustring.find(data["image"], "[[", 1, true) or mw.ustring.find(data["image"], "{{", 1, true)) then
            wikitext = "[[file:" .. data["image"] .. "|" .. (b.empty(data["图片大小"]) or '250px') .. "]]"
        else
            wikitext = data["image"]
        end

        if b.empty(data["图片信息"]) then
            wikitext = wikitext .. "<br>" .. data["图片信息"]
        end
        row:tag('td'):attr("colspan", 2):wikitext(wikitext)
    end

    for i, row_data in ipairs(data) do
        if row_data[2] ~= "" and row_data[2] ~= nil and type(row_data[1]) ~= "number" then
            local row = tableElem:tag('tr')
            row:tag('td'):wikitext(row_data[1]):css('min-width', '80px'):css('color',
                b.empty(data.lefttextcolor) or '#FFFFFF'):css('background-color',
                b.empty(data.leftcolumncolor) or '#0050AD')
            row:tag('td'):wikitext("<span>" .. b.trim(row_data[2]) .. "</span>")
        end
    end

    local result = tostring(html) .. "<templatestyles src=\"模板:infobox/style.css\" />"
    return result
end

--
function p.au(frame)
    local result = frame:preprocess(tostring(p.parser(frame.args,
        { "名称", "原名", "常用译名", "人物", "创始者", "现持有者", "参与制作者", "日期", "发布日期", "主页", "背景", "风格", "类型", "状态" },
        { "名称", "人物", "主页", "背景", "风格", "类型", "状态" }, "au")))
    return result
end

--
function p.location(frame)
    local result = frame:preprocess(tostring(p.parser(frame.args, { "名称", "坐落于", "居民", "包含地区", "背景音乐" },
        { "名称", "坐落于", "居民", "包含地区", "背景音乐" }, "location")))
    return result
end

function p.music(frame)
    local result = frame:preprocess(tostring(p.parser(frame.args, { "名称", "原名", "常用译名", "音乐集编号", "时长", "主旋律", "人物", "制作者", "文件名", "播放处", "BPM", "调号", "拍号", "曲目格式", "音乐风格", "状态", "发行时间", "所属", "相关角色"},
        { "名称", "音乐集编号", "时长", "主旋律", "人物", "文件名", "播放处", "BPM", "调号", "拍号", "曲目格式", "音乐风格", "状态", "所属", "相关角色"}, "music")))
    return result
end

function p.game(frame)
    local result = frame:preprocess(tostring(p.parser(frame.args, { "名称", "原名", "常用译名", "人物", "制作者", "开发", "发布", "总监", "制作", "设计", "程序", "美工", "编剧", "音乐", "系列", "引擎", "平台", "主页", "所属",  "状态", "发行时间", "类型", "模式"},
        { "名称", "人物", "系列", "引擎", "平台", "主页", "所属", "状态", "类型", "模式"}, "game")))
    return result
end

function p.battle(frame)
    local result = frame:preprocess(tostring(p.parser(frame.args, { "播放音乐", "HP", "ATK", "DEF", "击杀获得的EXP", "胜利获得的G", "可执行的行动", "击杀获得的EXP" },
        { "播放音乐", "HP", "ATK", "DEF", "击杀获得的EXP", "胜利获得的G", "可执行的行动", "击杀获得的EXP" }, "battle")))
    return result
end

--
function p.parser(args, be_data_list, classic_be_data_list, classify)
    local temp_time = ""
    temp_time = temp_time .. (args["发布日期"] or "")
    temp_time = temp_time .. (args["日期"] or "")

    local data = {}
    local data_list = {}
    local o_args = mw.clone(args)

    for key, value in pairs(o_args) do
        args[key] = b.empty(value)
    end

    for key, _ in pairs(args) do
        table.insert(data_list, key)
    end

    for key, value in pairs(args) do
        if b.is_include_value(key, be_data_list) then
            for i, be_data_value in ipairs(be_data_list) do
                if key == be_data_value then
                    data[i] = { key, b.trim(value) }
                    break
                end
            end
        else
            if type(key) ~= "number" then
                data[key] = value
            end
        end
    end

    for key, value in pairs(args) do
        if type(key) == "number" then
            for _, s_value in ipairs(classic_be_data_list) do
                local now_key = 1
                for i_key, i_value in ipairs(be_data_list) do
                    if s_value == i_value then
                        now_key = i_key
                        break
                    end
                end
                if (not b.empty(args[s_value])) and ((s_value == "名称" and not b.empty(args["原名"]) and not b.empty(args["常用译名"])) or (s_value == "人物" and not b.empty(args["创始者"]) and not b.empty(args["现持有者"]) and not b.empty(args["参与制作者"]) and not b.empty(args["制作者"])) or (s_value == "日期" and not b.empty(args["发布日期"])) or (s_value ~= "名称" and s_value ~= "人物" and s_value ~= "日期")) then
                    if mw.ustring.find(value, ("模板:" .. s_value)) then
                        data[now_key] = { s_value, b.trim(value) }
                    end
                end
            end
        end
    end

    for key, value in pairs(data) do
        if type(key) == "number" then
            p.smw_assign(value[1], value[2], classify)
        else
            p.smw_assign(key, value, classify)
        end
    end

    for key, value in ipairs(data) do
        if value[1] == "状态" and b.empty(temp_time) then
            data[key][2] = temp_time .. "<br>" .. data[key][2]
        end
        if value[1] == "发布日期" then
            data[key] = ""
        end
        if value[1] == "日期" then
            data[key] = ""
        end
    end

    local result = p.core(data)
    return result
end

--
function p.smw_assign(key, value, classify)
    local smwset_table = {}

    if classify == "au" then
        if key == "image" and not (mw.ustring.find(value, "[[", 1, true) or mw.ustring.find(value, "{{", 1, true)) then
            table.insert(smwset_table, '头图=' .. value)
        elseif key == "类型" and not mw.ustring.find(value, "模板:" .. key) then
            local list = b.str_split(value, "、")
            for _, s_value in ipairs(list) do
                table.insert(smwset_table, '类型组=' .. s_value .. ";;;")
            end
        elseif key == "风格" and not mw.ustring.find(value, "模板:" .. key) then
            local list = b.str_split(value, "、")
            for _, s_value in ipairs(list) do
                table.insert(smwset_table, '风格组=' .. s_value .. ";;;")
            end
        elseif key == "背景" and not mw.ustring.find(value, "模板:" .. key) then
            local list = b.str_split(value, "、")
            for _, s_value in ipairs(list) do
                table.insert(smwset_table, '背景组=' .. s_value .. ";;;")
            end
        elseif key == "状态" and not mw.ustring.find(value, "模板:" .. key) then
            table.insert(smwset_table, '状态组=' .. value .. ";;;")
        end
    end
    if #smwset_table ~= 0 then
        mw.smw.set(smwset_table)
    end
end

--
return p