Vdna Wiki
Advertisement

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

local InfoboxBuilderView = {}

-- Define dependencies
local HF = require("Module:HF")

InfoboxBuilderView.vars = {}

function InfoboxBuilderView.render( input, vars )

	local fields   = input.fields
	local sections = input.sections

	InfoboxBuilderView.vars = vars

	local Infobox = mw.html.create('div')
    Infobox:addClass( InfoboxBuilderView.vars.Theme .. 'InfoboxContainer')
 
	    local table = Infobox:tag('table')
	          table:attr('cellspacing', '0')
	               :attr('cellpadding', '0')
                       :addClass('infobox-table')
	 
	    for index, field in ipairs( fields ) do
	 
	      if     field.Type == "Image" then
	        table:node( InfoboxBuilderView.addRowImage( field.Label, field.Value ) )

	      elseif field.Type == "MainImage" then
	        table:node( InfoboxBuilderView.addRowMainImage( field.Label, field.Value ) )

	      elseif field.Type == "Title" then
	        table:node( InfoboxBuilderView.addRowTitle( field.Label, field.Value ) )

	      elseif field.Type == "Header" then
	        if input.sections[index] == "On" then
	          table:node( InfoboxBuilderView.addRowHeader( field.Label, field.Value ) )
	        end

	      elseif field.Type == "Line" then
	        if not HF.isempty( field.Value ) then
	          table:node( InfoboxBuilderView.addRowLine( field.Label, field.Value ) )
	        end

	      elseif field.Type == "Footer" then
	        table:node( InfoboxBuilderView.addRowFooter( field.Label, field.Value ) )

        elseif field.Type == "Split" then
          table:node( InfoboxBuilderView.addRowSplit( field.Label, field.Value ) )

	      end
	 
	    end
  
  output = tostring( Infobox )
  
	return output

end

function InfoboxBuilderView.addRowMainImage( label, value )
  local node = mw.html.create('')
  
  local row1 = node:tag('tr')
    row1:tag('td')
        :addClass( InfoboxBuilderView.vars.Theme .. 'InfoboxMainImage' )
        :attr('colspan', '2')
        :wikitext( value ) 

  if InfoboxBuilderView.vars.MainImageCaption == "On" then
    local row2 = node:tag('tr')
      row2:tag('td')
          :addClass( InfoboxBuilderView.vars.Theme .. 'InfoboxMainImageCaption' )
          :attr('colspan', '2')
          :wikitext( label )
  end

  return node
end

function InfoboxBuilderView.addRowImage( label, value )
  local node = mw.html.create('')
  
  local row1 = node:tag('tr')
    row1:tag('td')
        :addClass( InfoboxBuilderView.vars.Theme .. 'InfoboxImage' )
        :attr('colspan', '2')
        :wikitext( value ) 

  local row2 = node:tag('tr')
    row2:tag('td')
        :addClass( InfoboxBuilderView.vars.Theme .. 'InfoboxImageCaption' )
        :attr('colspan', '2')
        :wikitext( label )

  return node
end
 
function InfoboxBuilderView.addRowTitle( label, value )
  local row = mw.html.create('tr')
    row:tag('td')
       :addClass( InfoboxBuilderView.vars.Theme .. 'InfoboxTitle' )
       :attr('colspan', '2')
       :wikitext( value )
  return row
end

function InfoboxBuilderView.addRowFooter( label, value )
  local row = mw.html.create('tr')
    row:tag('td')
       :addClass( InfoboxBuilderView.vars.Theme .. 'InfoboxFooter' )
       :attr('colspan', '2')
       :wikitext( value )
  return row
end
 
function InfoboxBuilderView.addRowHeader( label, value )
 
    local row = mw.html.create('tr')
      row:tag('td')
         :addClass( InfoboxBuilderView.vars.Theme .. 'InfoboxHeader' )
         :attr('colspan', '2') 
         :wikitext( value )
    return row
 
end

function InfoboxBuilderView.addRowLink( label, value )
 
    local row = mw.html.create('tr')
      row:tag('td')
         :addClass( InfoboxBuilderView.vars.Theme .. 'InfoboxLink' )
         :attr('colspan', '2') 
         :wikitext( value )
    return row
 
end

function InfoboxBuilderView.addRowLine( label, value )
    
    local row = mw.html.create('tr')
      row:addClass( InfoboxBuilderView.vars.Theme .. 'InfoboxLine' )
      row:tag('td')
         :addClass( InfoboxBuilderView.vars.Theme .. 'InfoboxLineLeft' )
         :wikitext( label )
         :done()

    if string.len( value ) > tonumber( InfoboxBuilderView.vars.ToggleContentLongerThan ) then
      local cell = row:tag('td')
      cell:addClass( InfoboxBuilderView.vars.Theme .. 'InfoboxLineRight' )
        cell:tag('div')
            :addClass('mw-collapsible mw-collapsed ' .. InfoboxBuilderView.vars.Theme .. 'InfoboxToggleContent')
            :wikitext( value )
            :done()
      row:done()
    else
      row:tag('td')
         :addClass( InfoboxBuilderView.vars.Theme .. 'InfoboxLineRight' )
         :wikitext( value )
         :done()
    end

    return row
 
end

function InfoboxBuilderView.addRowSplit( label, value )

  local node = mw.html.create('')
  
  local labelLeft = mw.html.create('td')
    labelLeft:addClass( InfoboxBuilderView.vars.Theme .. 'InfoboxSplitLabelLeft' )
  local valueLeft = mw.html.create('td')
    valueLeft:addClass( InfoboxBuilderView.vars.Theme .. 'InfoboxSplitValueLeft' )

  local labelRight = mw.html.create('td')
    labelRight:addClass( InfoboxBuilderView.vars.Theme .. 'InfoboxSplitLabelRight' )
  local valueRight = mw.html.create('td')
    valueRight:addClass( InfoboxBuilderView.vars.Theme .. 'InfoboxSplitValueRight' )

  if type( label ) == "string" then
    labelLeft:wikitext( label )
  end

  if type( value ) == "string" then
    valueLeft:wikitext( value )
  elseif type( value ) == "table" then
    if not HF.isempty( value[1] ) then
      labelLeft:wikitext( label[1] )
      valueLeft:wikitext( value[1] )
    end
    if not HF.isempty( value[2] ) then
      labelRight:wikitext( label[2] )
      valueRight:wikitext( value[2] )
    end
  end

  local row1 = node:tag('tr')
    row1:node( labelLeft )
    row1:node( labelRight )

  local row2 = node:tag('tr')
    row2:node( valueLeft )
    row2:node( valueRight )

  return node

end

return InfoboxBuilderView
Advertisement