Module:Vital article

local p = {}

-- Copy from Module:Section link local function normalizeTitle(title) title = mw.ustring.gsub(mw.ustring.gsub(title, "'", ""), '"', '')	title = mw.ustring.gsub(title, "%b<>", "")	return mw.title.new(title).prefixedText end

local getLink = function(page) local subpage = mw.ustring.upper(mw.ustring.sub(page, 1, 1)) -- get first letter of article name local codepoint = mw.ustring.codepoint(page, 1, 1) if codepoint 90 then --first letter is not between A-Z subpage = 'others' end local data_page = 'Wikipedia:Vital articles/data/' .. subpage .. '.json' local page2 = tostring(tonumber(page))==page and tonumber(page) or page --convert to number if page is numerical, otherwise loadJsonData does not work local data = mw.loadJsonData(data_page)[page2] if data then local level = tostring(data.level) if level then local link = 'Wikipedia:Vital articles/Level/' .. level 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 return link, level end end end

p.link = function(frame) local page = frame.args.page~='' and frame.args.page or mw.title.getCurrentTitle.subjectPageTitle.text local link, level = getLink(page) return  .. page ..  .. (link and ' ' .. level ..  or ) end

p.isVital = function(frame) local page = frame.args.page~='' and frame.args.page or mw.title.getCurrentTitle.subjectPageTitle.text local _, level = getLink(page) return level or '' end

local top = function(container, frame) return (container and '' or frame:expandTemplate{title = 'Possibly empty category'}) .. frame:expandTemplate{title = 'Wikipedia category', args = {container = container}} .. frame:expandTemplate{title = 'CatAutoTOC'} end

p.header = function(frame) local pargs = frame:getParent.args local cat = pargs.category~='' and pargs.category or mw.title.getCurrentTitle.subjectPageTitle.text local topic, class, level topic = cat:match('^Vital articles in ([%a ]+) by quality$') if topic then -- Category:Vital articles in TOPIC by quality return top(true, frame) .. 			..		end class = cat:match('^([%a-]+) vital articles by topic$') if class then -- Category:CLASS vital articles by topic return top(true, frame) .. 			.. 	end topic = cat:match('^Wikipedia vital articles in ([%a ]+) by level$') if topic then -- Category:Wikipedia vital articles in TOPIC by level return top(true, frame) .. 			.. 	end level = cat:match('^Wikipedia level%-(%w+) vital articles by topic$') if level then -- Category:Wikipedia level-LEVEL vital articles by topic return top(true, frame) .. 			.. 	end class = cat:match('^([%a-]+) vital articles by level$') if class then -- Category:CLASS vital articles by level return top(true, frame) .. 			.. 	end level = cat:match('^Level%-(%w+) vital articles by quality$') if level then -- Category:Level-LEVEL vital articles by quality return top(true, frame) .. 			.. 	end topic = cat:match('^Wikipedia vital articles in ([%a ]+)$') if topic then -- Category:Wikipedia vital articles in TOPIC return top(false, frame) .. ''	end level = cat:match('^Wikipedia level%-(%w+) vital articles$') if level then -- Category:Wikipedia level-LEVEL vital articles return top(true, frame) .. ''	end class, level = cat:match('^([%a%-]+) level%-(%w+) vital articles$') if class and level then -- Category:CLASS level-LEVEL vital articles return top(false, frame) .. 			.. 	end class = cat:match('^([%a-]+) vital articles$') if class then -- Category:CLASS vital articles class = class:match('(%a+)-Class') or class return top(true, frame) .. frame:expandTemplate{title = 'cat class', args = {topic = 'vital', class = class}} end level, topic = cat:match('^Wikipedia level%-(%w+) vital articles in ([%a ]+)$') if level and topic then -- Category:Wikipedia level-LEVEL vital articles in TOPIC return top(false, frame) .. 			.. 	end class, topic = cat:match('^([%a-]+) vital articles in ([%a ]+)$') if class and topic then -- Category:CLASS vital articles in TOPIC return top(false, frame) .. 			.. 	end end

return p