跳转到内容

模組:Vital articles

本页使用了标题或全文手工转换
被永久保护的模块
维基百科,自由的百科全书

这是本页的一个历史版本,由A2569875留言 | 贡献2024年1月8日 (一) 12:27 (改成以個位數)编辑。这可能和当前版本存在着巨大的差异。

local p = {}
local lib_PJBS = require("Module:PJBSClass/main")

function p.getDataPage(input_data)
	--相依 : 進制模板
	local convertBase, convertBaseT = require("Module:BaseConvert").convert, mw.title.new("Template:進制"):getContent()
	local subject_page = lib_PJBS.subjectPageTitle(input_data)
	subject_page = (type(subject_page.fullText) == type(nil)) and mw.title.new(subject_page) or subject_page
	if type(subject_page) == type(nil) then return {exists=false} end
	local first_char = mw.ustring.upper(mw.ustring.sub(subject_page.fullText, 1, 1)) -- get first letter of article name
	local codepoint = mw.ustring.codepoint(first_char, 1, 1)
	local base36 = convertBase({n = codepoint, base = 36})
	local page = base36:sub(-1,-1)
	if (tonumber(page) or 10) < 10 then page = "其他" end
	local data_page = mw.title.new('Wikipedia:基礎條目/資料/' .. page .. '.json')
	return data_page
end

function p.getVitalData(input_data)
	local subject_page = lib_PJBS.subjectPageTitle(input_data)
	subject_page = (type(subject_page.fullText) == type(nil)) and mw.title.new(subject_page) or subject_page
	if type(subject_page) == type(nil) then return nil end
	local data_page = p.getDataPage(input_data)
	if data_page.exists then
		local index = tonumber(subject_page.fullText) or subject_page.fullText --convert to number if page is numerical, otherwise loadJsonData does not work
		local data = mw.loadJsonData(data_page.fullText)[index]
		return data
	end
	return nil
end

function p.getTopic(input_data)
	local subject_page = lib_PJBS.subjectPageTitle(input_data)
	subject_page = (type(subject_page.fullText) == type(nil)) and mw.title.new(subject_page) or subject_page
	if type(subject_page) == type(nil) then return "" end
	local data = p.getVitalData(input_data)
	if type(data) ~= type(nil) then
		return data.topic or ""
	end
	return ""
end

function p.getLevel(input_data)
	local subject_page = lib_PJBS.subjectPageTitle(input_data)
	subject_page = (type(subject_page.fullText) == type(nil)) and mw.title.new(subject_page) or subject_page
	if type(subject_page) == type(nil) then return "" end
	local data = p.getVitalData(input_data)
	if type(data) ~= type(nil) then
		return data.level or -1
	end
	return -1
end

function p.getSublist(input_data)
	local subject_page = lib_PJBS.subjectPageTitle(input_data)
	subject_page = (type(subject_page.fullText) == type(nil)) and mw.title.new(subject_page) or subject_page
	if type(subject_page) == type(nil) then return "" end
	local data = p.getVitalData(input_data)
	if type(data) ~= type(nil) then
		return data.sublist or ''
	end
	return ''
end

function p.getSection(input_data)
	local subject_page = lib_PJBS.subjectPageTitle(input_data)
	subject_page = (type(subject_page.fullText) == type(nil)) and mw.title.new(subject_page) or subject_page
	if type(subject_page) == type(nil) then return "" end
	local data = p.getVitalData(input_data)
	if type(data) ~= type(nil) then
		return data.section or ''
	end
	return ''
end

function p.getLink(input_data)
	local subject_page = lib_PJBS.subjectPageTitle(input_data)
	subject_page = (type(subject_page.fullText) == type(nil)) and mw.title.new(subject_page) or subject_page
	if type(subject_page) == type(nil) then return "" end
	local data = p.getVitalData(input_data)
	if type(data) ~= type(nil) then
		local level = tostring(data.level)
		local level_name = ({'一','二','三','四','五','六','七','八','九','十',[0]='零'})[data.level]
		if level and level_name then
			local link = 'Wikipedia:基礎條目'
			if level~='3' then
				if level=='4' then
					link = link .. '/擴展'
				else
					link = link .. '/第' .. level_name ..'級'
				end
			end
			if (level=='4' or level=='5') and data.topic then
				link = link .. '/' .. data.topic
			end
			if data.sublist then
				link = link .. '/' .. data.sublist
			end
			if data.section then
				link = link .. '#' .. data.section
			end
			if not mw.title.new(link).exists then -- add tracking category if link does not exist
				--addCategory('Wikipedia vital articles needing attention', 'L')
			end
			return link
		end
	end
	return ''
end

return p