Module:Map credits

From Team Fortress Wiki
Jump to: navigation, search

Documentation for this module may be created at Module:Map credits/doc

local p = {}

local creditsData = require("Module:Map credits/data")

function format_credit(link, link_type, link_name)
    local if_lang = mw.getCurrentFrame():expandTemplate{title="If lang"}
    local qmark_langs = {
        ["/ar"] = { opening = " «", closing = "» " },
        ["/cs"] = { opening = " „", closing = "“ " },
        ["/es"] = { opening = " «", closing = "» " },
        ["/de"] = { opening = " „", closing = "“ " },
        ["/fr"] = { opening = " « ", closing = " » " },
        ["/ja"] = { opening = "「", closing = "」" },
        ["/pl"] = { opening = " „", closing = "” " },
        ["/ro"] = { opening = " „", closing = '” ' },
        ["/ru"] = { opening = " «", closing = "» " }
    }

    local qmark = qmark_langs[if_lang]
    if qmark then
        local openingMark = qmark.opening
        local closingMark = qmark.closing
        local openingIndex, closingIndex = link_name:find(' "'), link_name:find('" ', 2)

        if openingIndex and closingIndex then
            link_name = link_name:gsub(' "', openingMark, 1)
            link_name = link_name:gsub('" ', closingMark, 1)
        end
    end

    -- Link types
    local formats = {
        ["nolink"] = link_name,
        ["yeslink"] = link,
        ["wikitext"] = "[[%s" .. if_lang .. "|%s]]",
        ["steam"] = "[https://steamcommunity.com/profiles/%s %s]",
        ["external"] = "[%s %s]",
        ["wikipedia"] = "[[w:%s|%s]]"  -- TODO: figure out how to make this thing translatable. Use dictionary?
    }

    local format = formats[link_type] or link_name

    return string.format(format, link, link_name)
end

function p.credits(f)
    local args = f.args
    local map = args[1]
    local separator = args.separator ~= "" and args.separator or "<br>"
    local options = args.options ~= "" and args.options or ""
    local override = args.override ~= "" and args.override or ""
    local credits = creditsData
    local map_credits = credits[map] or credits._default
    local num_credits = #map_credits
    local output = ""

    for i, credit in ipairs(map_credits) do
        local name = override ~= "" and override or credit[1]
        local link = credit[2] or ""
        local link_type = options == "nolink" and "nolink" or (credit[3] or "")

        output = output .. format_credit(link, link_type, name)
        output = output .. (i < num_credits and separator or "")
    end

    return output
end

return p