17,273
edits
(instead of parsing raw content and then expanding some templates within the content, just expand the whole content as a template) |
(support single arg ("The Legend of Zelda Characters" instead of "The Legend of Zelda|Characters"), and parse categories from the listing page) |
||
Line 53: | Line 53: | ||
until not contentBackfillSection | until not contentBackfillSection | ||
return currentSection | -- determine if line is a category | ||
local cat = string.match( line, '^%s*%[%[Category:(.-)]]%s*$' ) | |||
cat = cat and mw.text.split( cat, '|' )[1] | |||
return currentSection, cat | |||
end | end | ||
Line 61: | Line 65: | ||
function Navbox.new( args ) | function Navbox.new( args ) | ||
local subject = args[1] .. ' ' .. args[2] | local subject = args[2] and (args[1] .. ' ' .. args[2]) or args[1] | ||
args.class = 'navbox' | args.class = 'navbox' | ||
args.title = '[[' .. subject .. ']]' | args.title = '[[' .. subject .. ']]' | ||
Line 68: | Line 72: | ||
local obj = Box.new( 'light', args ) | local obj = Box.new( 'light', args ) | ||
obj.subject = subject | obj.subject = subject | ||
obj.categories = { args[1], subject, args[2] } | obj.categories = args[2] and { args[1], subject, args[2] } or {} -- will be set later when parsing the page | ||
return setmetatable( obj, Navbox ) | return setmetatable( obj, Navbox ) | ||
end | end | ||
Line 84: | Line 88: | ||
summary = "", | summary = "", | ||
sections = {}, | sections = {}, | ||
categories = {}, | |||
topLevelLeaves = {}, -- i.e. L2 sections with no children | topLevelLeaves = {}, -- i.e. L2 sections with no children | ||
groups = {} -- i.e. L2 sections that have children | groups = {} -- i.e. L2 sections that have children | ||
} | } | ||
local currentSection = root | local currentSection = root | ||
local cat = nil | |||
-- can't think of a regex to split sections so go line by line | -- can't think of a regex to split sections so go line by line | ||
for line in gsplit( pageContent, '\n' ) do | for line in gsplit( pageContent, '\n' ) do | ||
currentSection = handleLine( line, currentSection ) | currentSection, cat = handleLine( line, currentSection ) | ||
if cat and cat ~= "Listings" then root.categories[#root.categories + 1] = cat end | |||
end | end | ||