Module:PlayerInfobox

From nUSA Wiki Archive
Jump to navigation Jump to search

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

local categorization = require("Module:Categorization")
local utils = require("Module:Utils")
local i18n = require('Dev:I18n').loadMessages('Module:PlayerInfobox/i18n')
local infobox_utils = require('Module:InfoboxUtils')
local yesno = require('Dev:Yesno')
local staffData = require('Module:RobloxStaff')
local names = require('Module:Names')

local categorize = categorization.categorize_in_namespaces('Community')

local p = {}

function p._format_activity(args)
	local activity = args.activity:lower()
	if activity == "permanently banned" or activity == "deleted" then
		activity = "terminated"
	end
	return i18n:msg("activity-" .. activity) .. categorize(i18n:msg("cat-activity-" .. activity))
end

p.format_activity = utils.make_wrapper_function(p._format_activity)

function p._format_month_joined(args)
	local lang = mw.getContentLanguage()
	local year = tonumber(lang:formatDate("Y", args["month joined"]))
	if year < 2004 then
		return error(i18n:msg("error-early-year", year))
	end
	return lang:formatDate("F Y", args["month joined"]) .. categorize(i18n:msg("cat-year-users", year))
end

p.format_month_joined = utils.make_wrapper_function(p._format_month_joined)

function p._format_staff(args)
	local t = staffData.getRole(args.name or mw.title.getCurrentTitle().text)
	if not t then return "" end
	if args.name == "Shedletsky" then
	    return "[[File:Epic Face Icon.png|30px|link=Administrator]] Former administrator" .. categorize("Former administrators")
	end
	local rString = ""
	for i,job in pairs(t) do
	    if job == "Admin" then
            rString = rString.. "[[File:Admin2.png|30px|link=Administrator]] Administrator" .. categorize("Administrators")
       elseif job == "Former_Admin" then
           rString = rString.. "[[File:Admin2.png|30px|link=Administrator]] Former administrator" .. categorize("Former administrators")
    	elseif job == "Intern" then
    	   rString = rString.. "[[File:Intern2.png|30px|link=Intern]] Intern" .. categorize("Interns")
       elseif job == "Former_Intern" then
           rString = rString.. "[[File:Intern2.png|30px|link=Intern]] Former intern" .. categorize("Former interns")
       elseif job == "Accelerator" then
           rString = rString.. "[[File:Intern2.png|30px|link=Intern]] Accelerator" .. categorize("Accelerators")
       elseif job == "Incubator" then
           rString = rString.. "[[File:Intern2.png|30px|link=Intern]] Incubator" .. categorize("Incubators")
       elseif job == "Former_Accelerator" then
           rString = rString.. "[[File:Intern2.png|30px|link=Intern]] Former accelerator" .. categorize("Former accelerators")
       elseif job == "Former_Incubator" then
           rString = rString.. "[[File:Intern2.png|30px|link=Intern]] Former incubator" .. categorize("Former incubators")
       elseif job == "Community_Champion" then
           rString = rString.." [[File:Community Champion.png|30px|link=Community Champions]] Former Community Champion" .. categorize("Community Champions")
       elseif job == "Top_Contributor" then
           rString = rString .. " [[File:TopContributor.png|30px|link=Top Contributor]] Former Top Contributor" .. categorize("Top Contributors")
        elseif job == "Community_Sage" then
            rString = rString .. "[[File:CommunitySage.png|30px|link=Community Sage]] Former Community Sage" .. categorize("Community Sages")
       elseif job == "Video_Star" then
           rString = rString .. "[[File:Video Star.png|30px|link=Roblox Video Stars Program]] Video Star" .. categorize("Video Stars")
       elseif job == "Former_Video_Star" then
           rString = rString .. "[[File:Former Video Star.png|30px|link=Roblox Video Stars Program]] Former Video Star" .. categorize("Former Video Stars")
       elseif job == "Former_Moderator" then
           rString = rString.." [[File:Super Moderator.png|30px|link=Moderator]] Former moderator" .. categorize("Former moderators")
       elseif job == "QA_Tester" then
           rString = rString.." [[File:QA logo.png|30px|link=Valiant Community QA Team]] Former QA tester" .. categorize("QA testers")
       elseif job == "UGC_Creator" then
           rString = rString.." [[File:UGC.png|30px|link=User-generated content]] UGC creator" .. categorize("UGC creators")
       elseif job == "Event_Organizer" then
           rString = rString.." [[File:Event Organizer.png|30px|link=]] Event Organizer" .. categorize("Event Organizers")
        elseif job:sub(1,7) == "Custom:" then
            local data = mw.text.split(job,":",true)
            rString = rString .. (data[3] and " [[File:" .. data[3] .. "|30px|link=]] " or "") .. data[2]
    	end
    	rString = rString .. "<br>"
    end
    return rString
end
 
p.format_staff = utils.make_wrapper_function(p._format_staff)

function p._format_rname(args)
    if names[(args.name or mw.title.getCurrentTitle().text):lower()] then
        return names[(args.name or mw.title.getCurrentTitle().text):lower()]
    end
end

p.format_rname = utils.make_wrapper_function(p._format_rname)

function p._format_staff_position_label(args)
    local t = staffData.getRole(args.name or mw.title.getCurrentTitle().text)
    if not t then return "Position" end
    for i,job in pairs(t) do
        if job == "Admin" then
            return "Position"
        elseif job == "Former_Admin" then
            return "Former position"
        end
    end
end

p.format_staff_position_label = utils.make_wrapper_function(p._format_staff_position_label)

function p._format_staff_position(args)
	local t = staffData.getStaffPosition(args.name or mw.title.getCurrentTitle().text)
	if not t then return "" end
	local rString = ""
	if #t == 1 then
		rString = t[1]
	else
		for i,v in pairs(t) do
			rString = rString.."*"..v.."\n"
		end
	end
	if t[1] == "Shared staff account" then
		rString = rString .. categorize("Shared staff accounts")
	end
	return rString
end

p.format_staff_position = utils.make_wrapper_function(p._format_staff_position)

function p._format_membership(args)
	local membership = args.membership:lower()
	if membership == 'premium' or membership == 'p' then
		return '[[File:PremiumIcon.png|20px|link=Roblox Premium]] [[Roblox Premium|Premium]]' .. categorize("Premium players")
	elseif membership == "none" then
		return "None"
	else
		return infobox_utils.error_message("<code>membership</code> must be “premium” or “none”")
	end
end

p.format_membership = utils.make_wrapper_function(p._format_membership)

function p._format_visits(args)
	local visits = args.visits or args["place visits"]
	if not visits then
		return
	end
    if visits == "0" then
        return 'None <span style="display:none">FLAG::SUSPECTED_NCU</span>'..categorize("Players with less than 2000000 place visits")
    else
        return "Around "..infobox_utils.format_number(visits, 10000,"Players with less than 2000000 place visits", 2000000, "SUSPECTED_NCU")
    end
end

p.format_visits = utils.make_wrapper_function(p._format_visits)

local social_media_list = {
    {"twitter","External Twitter.png","https://twitter.com/%s"},
    {"youtube","External YouTube.png","https://www.youtube.com/%s"},
    {"tiktok","External TikTok.png","https://www.tiktok.com/@%s"},
    {"facebook","External Facebook.png","https://www.facebook.com/%s"},
    {"instagram","External Instagram.png","https://instagram.com/%s"},
    {"twitch","External Twitch.png","https://www.twitch.tv/%s"},
    {"guilded","External Guilded.png","https://www.guilded.gg/%s"},
    {"deviantart","External DA.png","https://www.deviantart.com/%s"},
    {"artstation","External ArtStation.png","https://www.artstation.com/%s"},
    {"rwiki","External RWikia.png","https://roblox.fandom.com/wiki/User:%s"},
}

function p._format_social_media(args)
    local retString = ""
    for i,v in pairs(social_media_list) do
        if args[v[1]] then
            retString = retString .. " [[File:" .. v[2] .. "|30px|link=" .. v[3]:format(args[v[1]]) .. "|" .. (args.name or mw.title.getCurrentTitle().text) .. "'s " .. v[1] .. "]]"
        end
    end
    if retString ~= "" then retString = retString .. categorize("Pages with social links") end
    return retString
end

p.format_social_media = utils.make_wrapper_function(p._format_social_media,true)

return p