Module:Listbox: Difference between revisions

From Zelda Dungeon Wiki
Jump to navigation Jump to search
Want an adless experience? Log in or Create an account.
m (Locke moved page Module:Navbox to Module:Listbox without leaving a redirect: swapping names so that Galbox and Listbox extend Navbox)
(rename to Listbox)
Line 11: Line 11:
end
end


local Listbox = Listing.Listbox
local Navbox = Listing.Navbox


local Navbox = setmetatable( {}, Listbox )
local Listbox = setmetatable( {}, Navbox )
Navbox.__index = Navbox
Listbox.__index = Listbox


function Navbox.new( args )
function Listbox.new( args )
   local obj = Listbox.new( args )
   local obj = Navbox.new( args )
   return setmetatable( obj, Navbox )
   return setmetatable( obj, Listbox )
end
end


-- override
-- override
function Navbox:renderContent()
function Listbox:renderContent()
   local listing = Listing._parseListing( 'User:Locke/Sandbox/Listing' ) -- TODO self.subject )
   local listing = Listing._parseListing( 'User:Locke/Sandbox/Listing' ) -- TODO self.subject )


Line 52: Line 52:


function p.main( frame )
function p.main( frame )
   local navbox = Navbox.new( Args.fromFrame( frame ) )
   local listbox = Listbox.new( Args.fromFrame( frame ) )
   return navbox:render()
   return listbox:render()
end
end



Revision as of 00:33, July 26, 2020

Documentation for this module may be created at Module:Listbox/doc

local Args = require( 'Module:Args' )
local Listing = require( 'Module:Listing' )

function buildHList( parent, sections )
  local list = parent:addClass( 'hlist' )
    :tag( 'ul' )
  for _, section in ipairs( sections ) do
    list:tag( 'li' )
      :wikitext( '[[' .. section.name .. ']]' )
  end
end

local Navbox = Listing.Navbox

local Listbox = setmetatable( {}, Navbox )
Listbox.__index = Listbox

function Listbox.new( args )
  local obj = Navbox.new( args )
  return setmetatable( obj, Listbox )
end

-- override
function Listbox:renderContent()
  local listing = Listing._parseListing( 'User:Locke/Sandbox/Listing' ) -- TODO self.subject )

  local content = mw.html.create( 'table' )
  if #listing.topLevelLeaves > 0 then
    local defaultCell = content:tag( 'tr' )
      :tag( 'td' )
      :addClass( 'odd' )
      :attr( 'colspan', '2' )
      :css( 'text-align', 'center' )
    buildHList( defaultCell, listing.topLevelLeaves )
  end
  if #listing.groups > 0 then
    for index, group in ipairs( listing.groups ) do
      local row = content:tag( 'tr' )
      row:tag( 'th' )
        :addClass( 'label' )
        :wikitext( group.name )
      local cell = row:tag( 'td' )
        :addClass( (index + (#listing.topLevelLeaves > 0 and 1 or 0)) % 2 == 0 and 'even' or 'odd' )
      buildHList( cell, group.sections )
    end
  end

  return content
end

local p = {}

function p.main( frame )
  local listbox = Listbox.new( Args.fromFrame( frame ) )
  return listbox:render()
end

-- for use in the debug console:
-- =p.main(p.debugframe)
p.debugframe = {
  args = {},
  getParent = function() return {
    args = {
      [1] = "The Legend of Zelda",
      [2] = "Enemies"
    }
  } end
}

return p