Module:Listing: Difference between revisions

Want an adless experience? Log in or Create an account.
support single arg ("The Legend of Zelda Characters" instead of "The Legend of Zelda|Characters"), and parse categories from the listing page
(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