Module:Listing: Difference between revisions
Jump to navigation
Jump to search
Want an adless experience? Log in or Create an account.
(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 | ||