跳转到内容

模組:Vgclass

维基百科,自由的百科全书
--- Supplementary module for [[Template:Vgc]].

require("strict")

local getArgs = require("Module:Arguments").getArgs

local DEFAULT_PROJECT = "电子游戏"
local ICON_CLASS = "vgc-class"
local ICON_STYLE = "padding-right: 0.167em;"

--- @alias AssessmentScale "class" | "importance"

--- Get an assessment value from [[Special:PageAssessments]].
---
--- @param page table @An `mw.title` object.
--- @param project string @WikiProject name; Chinese-variant-sensitive.
--- @param scale AssessmentScale @Either "class" or "importance".
--- @return string? @Usually simplified Chinese, if exists.
local function get_raw_assessment(page, project, scale)
	local assessments = page.pageAssessments
	local assessment = assessments[project]
	if assessment then
		return assessment[scale]
	else
		return nil
	end
end

--- Build an icon for an assessment class.
---
--- @param class string | nil @Assessment class grade.
--- @return string icon @Rendered icon markup, or an empty string.
local function build_class_icon(class)
	if class == nil then
		return ""
	end
	-- Avoid confusion with the DYK icon; see [[Template:Vgc#说明]].
	if class == "未评" then
		return mw.ustring.format(
			'<span class="%s" style="%s">[[File:%s|%s|class=noviewer|alt=%s]]</span>',
			ICON_CLASS,
			ICON_STYLE,
			"Symbol dot dot dot gray.svg",
			"16x16px",
			"未评级"
		)
	end
	return mw.getCurrentFrame():expandTemplate({
		title = "Class/icon",
		args = {class, ["style"] = ICON_STYLE, ["css-class"] = ICON_CLASS},
	})
end


local p = {}

--- Render the module entry point.
---
--- @param frame table @Invocation frame.
--- @return string wikitext @Rendered wikitext.
function p.main(frame)
	local args = getArgs(frame)
	return p._main(args)
end

--- Render a page link with its project assessment icon.
---
--- @param args table @Template arguments.
--- @return string wikitext @Page link with an optional icon.
function p._main(args)
	local title = args[1]
	local project = DEFAULT_PROJECT

	local page = mw.title.new(title)
	local class = get_raw_assessment(page, project, "class")
	mw.logObject(class)
	local icon = build_class_icon(class)

	return mw.ustring.format("%s[[:%s|%s]]", icon, page.fullText, page.text)
end

return p