FANDOM


local InfoboxBuilder = {}
 
-- Define dependecies
local HF   = require("Module:HF")
local View = require("Module:InfoboxBuilderView")
 
-- Define var for custom user's module
local CM = {}
 
-- Define default variables
InfoboxBuilder.vars = {
  Theme                   = "default", -- Adds prefix to CSS classes
  CustomModule            = " ",       -- Defines a path to a module with custom functions
  MainImageCaption        = "Off",     -- Toggles display of Label in the Main Image field
  ToggleContentLongerThan = 1000       -- Makes fields with long values collapsible
}
 
function InfoboxBuilder.builder( frame )
 
  local input = InfoboxBuilder.parse( frame.args )
  local Infobox = View.render( input, InfoboxBuilder.vars )
  return Infobox
 
end
 
function InfoboxBuilder.parse( args )
 
  local input = {}
        input.fields   = {}   -- Actual Infobox data
        input.sections = {}   -- Relating headers to lines
        input.vars     = {}   -- Variables useful for styling etc.
 
  -- Distribute args to vars and fields.
 
  local indexes = {} -- Table used to sort indexes of fields
  local fields = {}  -- Temporary fields table
  local f = 0        -- Fields consecutive indice
 
  for k, v in pairs(args) do
 
    local keySplit = HF.explode( ":", tostring(k) )
 
    local index  = tonumber( HF.trim( keySplit[1] ) )
    local key    = tostring( HF.trim( keySplit[2] ) )
    local value  = tostring( HF.trim( v )           )
 
    if index > 0 then
 
      if fields[index] == nil then
        table.insert( indexes, index )
        fields[index] = {}
      end
 
      fields[index][key] = value
 
    else
      if not HF.isempty( HF.trim( value ) ) then
        InfoboxBuilder.vars[key] = value
      end
    end
 
  end
 
  input.vars = InfoboxBuilder.vars
 
  table.sort( indexes )
 
  local currentHeader = 0
 
  for i, index in ipairs(indexes) do
 
    f = f + 1
    input.fields[f] = {}
    input.fields[f] = fields[index]
 
    -- Add fields to sections
    if input.fields[f]["Type"] == "Header" then
      currentHeader = f
      input.sections[f] = "Off" -- Hide header by default, show it when it has at least 1 line
    elseif input.fields[f]["Type"] == "Line" and currentHeader > 0 then -- Prevent false sections without a header
      if not HF.isempty( input.fields[f]["Value"] ) then
        input.sections[currentHeader] = "On" -- Show header if there is at least one line filled in its section
      end
    end
 
    if input.fields[f]["Type"] == "Split" then
      input.fields[f]["Label"] = { input.fields[f]["LabelLeft"], input.fields[f]["LabelRight"] }
      input.fields[f]["Value"] = { input.fields[f]["ValueLeft"], input.fields[f]["ValueRight"] }
    end
 
  end
 
  input = InfoboxBuilder.execute( input )
 
  return input
 
end
 
function InfoboxBuilder.execute( input )
 
  -- Require user's custom module
  if not HF.isempty( HF.trim( InfoboxBuilder.vars["CustomModule"] ) ) then
 
    CM = require( HF.trim( InfoboxBuilder.vars["CustomModule"] ) )
 
      -- Execute custom methods
      for index, field in ipairs( input.fields ) do
 
        if type( field.Label ) == "table" then
          if InfoboxBuilder.methodExists( field.LabelMethod ) then
            input.fields[index].Label = CM[ field.LabelMethod ]( field, InfoboxBuilder.vars )
          end
        elseif not HF.isempty( HF.trim( field.Label ) ) and InfoboxBuilder.methodExists( field.LabelMethod ) then
          input.fields[index].Label = CM[ field.LabelMethod ]( field, InfoboxBuilder.vars )
        end
 
        if type( field.Value ) == "table" then
          if InfoboxBuilder.methodExists( field.ValueMethod ) then
            input.fields[index].Value = CM[ field.ValueMethod ]( field, InfoboxBuilder.vars )
          end
        elseif not HF.isempty( HF.trim( field.Value ) ) and InfoboxBuilder.methodExists( field.ValueMethod ) then
          input.fields[index].Value = CM[ field.ValueMethod ]( field, InfoboxBuilder.vars )
        end
      end
 
  end
 
  return input
 
end
 
function InfoboxBuilder.methodExists( name )
  local exists = false
  if type( name ) ~= nil then
    if not HF.isempty( name ) then
      if type( CM[ name ] ) == "function" then
        exists = true
      end 
    end
  end
  return exists
end
 
return InfoboxBuilder

Interférence d'un bloqueur de publicité détectée !


Wikia est un site gratuit qui compte sur les revenus de la publicité. L'expérience des lecteurs utilisant des bloqueurs de publicité est différente

Wikia n'est pas accessible si vous avez fait d'autres modifications. Supprimez les règles personnalisées de votre bloqueur de publicité, et la page se chargera comme prévu.

Sur le réseau FANDOM

Wiki au hasard