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.
(remove MC from staging, add SS and LBW (leaving WW for now because it needs work))
(remove TP and ST from staging, remove WW except Enemies which needs work, remove LBW Items (it's already done), add FSA, TFH, and HW)
Line 26: Line 26:
-- override
-- override
function Listbox:renderContent()
function Listbox:renderContent()
   local listing = Listing._parseListing( (self.categories[1] == 'Twilight Princess' or self.categories[1] == 'Spirit Tracks' or self.categories[1] == 'The Wind Waker' or self.categories[1] == 'Skyward Sword' or self.categories[1] == 'A Link Between Worlds') and self.subject .. '/Staging' or self.subject )
   local listing = Listing._parseListing( ((self.categories[1] == 'The Wind Waker' and self.categories[3] == 'Enemies') or self.categories[1] == 'Skyward Sword' or (self.categories[1] == 'A Link Between Worlds' and self.categories[3] ~= 'Items') or self.categories[1] == 'Four Swords Adventures' or self.categories[1] == 'Tri Force Heroes' or self.categories[1] == 'Hyrule Warriors') and self.subject .. '/Staging' or self.subject )


   local content = mw.html.create( 'table' )
   local content = mw.html.create( 'table' )

Revision as of 20:44, August 9, 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
    -- !!!! This may break if Template:Main is modified !!!!
    local expandedMainTemplate = section.summary:match( 'Main article: %[%[(.-)]]' )
    local link = expandedMainTemplate and mw.text.split( expandedMainTemplate, '|' )[1]
    list:tag( 'li' )
      :wikitext( '[[' .. (link or section.name) .. '|' .. 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( ((self.categories[1] == 'The Wind Waker' and self.categories[3] == 'Enemies') or self.categories[1] == 'Skyward Sword' or (self.categories[1] == 'A Link Between Worlds' and self.categories[3] ~= 'Items') or self.categories[1] == 'Four Swords Adventures' or self.categories[1] == 'Tri Force Heroes' or self.categories[1] == 'Hyrule Warriors') and self.subject .. '/Staging' or 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] = "Locations"
    }
  } end
}

return p