全站通知:

模块:Items

来自星露谷物语维基
跳到导航 跳到搜索
[ 创建 | 刷新 ]文档页面
当前模块文档缺失,需要扩充。
local utils = require("Module:Utils")

local zh = {
    nameById = mw.loadData("Module:Items/zh/ids/name"),
    idByName = mw.loadData("Module:Items/zh/name/ids"),
    descById = mw.loadData("Module:Items/zh/id/desc"),
    descByName = mw.loadData("Module:Items/zh/name/desc"),
    nameByUniqueId = mw.loadData("Module:Items/zh/id/name")
}

local en = {
    nameById = mw.loadData("Module:Items/en/ids/name"),
    idByName = mw.loadData("Module:Items/en/name/ids"),
    nameByUniqueId = mw.loadData("Module:Items/en/id/name")
}

local overrides = {
    name = mw.loadData("Module:Items/overrides/name"),
    desc = mw.loadData("Module:Items/overrides/description"),
    uniqueId = mw.loadData("Module:Items/overrides/id"),
    itemId = mw.loadData("Module:Items/overrides/items")
}

local p = {}

function p.getEnglishName(input)
    local text = utils.normalizeKey(utils.getArg(input))
    if not text then return "" end
    local id = zh.idByName[text]
    return id and en.nameById[id] or ""
end

function p.getChineseName(input)
    local text = utils.normalizeKey(utils.getArg(input))
    if not text then return "" end
    if overrides.name[text] then return overrides.name[text] end
    local id = en.idByName[text]
    return id and zh.nameById[id] or ""
end

function p.getDescription(input)
    local text = utils.normalizeKey(utils.getArg(input))
    if not text then return "" end
    if overrides.desc[text] then return overrides.desc[text] end
    if zh.descByName[text] then return zh.descByName[text] end
    local id = en.idByName[text]
    if id then
        local chineseName = zh.nameById[id]
        if chineseName and zh.descByName[chineseName] then
            return zh.descByName[chineseName]
        end
    end
    if zh.descById[text] then return zh.descById[text] end
    return ""
end

function p.getChineseNameById(input)
    local text = utils.normalizeKey(utils.getArg(input))
    return text and (overrides.uniqueId[text] or zh.nameByUniqueId[text]) or ""
end

function p.getEnglishNameById(input)
    local text = utils.normalizeKey(utils.getArg(input))
    if not text then return "" end
    return text and en.nameByUniqueId[text] or ""
end

function p.getId(input)
    local text = utils.normalizeKey(utils.getArg(input))
    if not text then return "" end
    local result = en.idByName[text] or zh.idByName[text] or overrides.itemId[text] or ""
    return result
end

function p.getItemId(input)
    local result = p.getId(input)
    result = result:gsub("\\", "<br />")
    return result
end

function p.renderName(frame)
    local args = frame.args
    if frame == mw.getCurrentFrame() then
        args = require('Module:Arguments').getArgs(frame,
                                                   {wrappers = 'Template:Name'})
    end

    local inputName = args[1] or ""
    local description = args[2] or ""
    local size = args.size or "24"
    local link = args.link
    local alt = args.alt
    local class = args.class

    local imageName = inputName
    if not utils.fileExists(inputName .. ".png") then
        local englishName = p.getEnglishName(inputName)
        if englishName and englishName ~= "" and
            utils.fileExists(englishName .. ".png") then
            imageName = englishName
        else
            imageName = "Blank icon"
        end
    end

    local linkText
    if link then
        linkText = "[[" .. link .. "]]"
    elseif alt then
        linkText = "[[" .. alt .. "]]"
    else
        local chineseName = p.getChineseName(inputName)
        if chineseName and chineseName ~= "" then
            linkText = "[[" .. chineseName .. "]]"
        else
            linkText = "[[" .. inputName .. "]]"
        end
    end

    local cssClass = "nametemplate"
    if class == "inline" then cssClass = cssClass .. "inline" end

    local result = string.format(
                       '<span class="%s">[[File:%s.png|%spx|link=]] %s%s</span>',
                       cssClass, imageName, size, linkText,
                       description ~= "" and "(" .. description .. ")" or "")

    return result
end

function p.renderDescription(frame)
    local args = frame.args
    if frame == mw.getCurrentFrame() then
        args = require('Module:Arguments').getArgs(frame, {
            wrappers = 'Template:Description'
        })
    end

    local itemType = args[1] or ""
    local itemName = args[2] or ""

    local itemTypeLower = itemType:lower()

    local specialDescriptions = {
        recipe = "一个用于制作" .. itemName .. "的配方",
        ["食谱"] = "一个用于制作" .. itemName .. "的配方",
        ["配方"] = "一个用于制作" .. itemName .. "的配方",
        blueprint = "用于制造" .. itemName .. "的设计图",
        ["图纸"] = "用于制造" .. itemName .. "的设计图"
    }

    return specialDescriptions[itemTypeLower] or p.getDescription(itemType)
end

return p