Module:Booruuser

From Soyjak Wiki, the free ensoyclopedia
Jump to navigationJump to search



local m = {}

-- reverse lookup cache
local userClassMap

local function getMap()
	if userClassMap then
		return userClassMap
	end

	local title = mw.title.new("Template:Booruuser/users.json")
	local content = title and title:getContent() or "{}"
	local data = mw.text.jsonDecode(content)

	userClassMap = {}

	for class, users in pairs(data) do
		if type(users) == "table" then
			for _, u in ipairs(users) do
				if type(u) == "string" then
					userClassMap[string.lower(u)] = class
				end
			end
		end
	end

	return userClassMap
end

function m.main(frame)
	local args = frame.args

	local user = args[1] or "user"
	local label = args.label or user
	local overrideClass = args.class

	local userKey = string.lower(user)
	local class = overrideClass or getMap()[userKey] or "user"

	local colorMap = {
		blocked   = "#383838",
		user      = "#828282",
		trusted   = "#3F9E3A",
		approver  = "#ff760d",
		janitor   = "#f1c40f",
		moderator = "#4287f5",
		admin     = "#ef4444"
	}

	local weightMap = {
		approver  = "bold",
		janitor   = "bold",
		moderator = "bold",
		admin     = "bold"
	}

	local color = colorMap[class] or "#000000"
	local weight = weightMap[class] or "normal"
	local deco = (class == "blocked") and "line-through" or ""

	return string.format(
		'<span class="plainlinks">[https://soybooru.com/user/%s <span style="color:%s;font-weight:%s;text-decoration:%s">%s</span>]</span>',
		user,
		color,
		weight,
		deco,
		label
	)
end

return m