ATTENTION! The process of updating WiKi to version Eco 10.x has begun. Those wishing to participate can find out more Information on our ECO Contribution Wiki Discord.
From April 26 to May 12, errors may occur in the Wiki, as we will be carrying out a major update to the information processing modules.

Module:Infobox Animal/sandbox: Difference between revisions

From Eco - English Wiki
[checked revision][unchecked revision]
m (Use assert.)
m (Attempt to utilize CSS styles)
Line 20: Line 20:
     -- string used to build the infobox
     -- string used to build the infobox
     local alternateRowColor = ' bgcolor=\"#c3e2ec\"' -- Mixed in 10% Green Blue Crayola from the palette with the table background color.
     local alternateRowColor = ' bgcolor=\"#c3e2ec\"' -- Mixed in 10% Green Blue Crayola from the palette with the table background color.
     local headerStyle = 'style=\"background-color:#4688C0;text-align:center;\"'
     local subheaderClass = 'class=\"subheader\"'
     local valueColumnStyle = 'style=\"text-align:right;padding:0.2em\"'
     local valueColumnClass = 'class=\"value-column\"'
     local longValueColumnStyle = 'style=\"text-align:right;padding:0.2em;max-width:12em\"'
     local wideColumnClass = 'class=\"value-column wide-column\"'
      
      
     local infobox = '{| class=\"infobox\"\n'
     local infobox = '{| class=\"infobox animal-infobox\"\n'
     -- name of the animal
     -- name of the animal
     infobox = infobox .. '|- style=\"color: white; background-color: #1165AF; text-align: center;\"\n| colspan=\"2\" | \'\'\'<big>' .. animal .. '</big>\'\'\'\n'
     infobox = infobox .. '|- class=\"animal-name\"\n| colspan=\"2\" | ' .. animal .. '\n'
          
          
     -- Water, Flying or Land Animal
     -- Water, Flying or Land Animal
    infobox = infobox .. '|- style=\"text-align: center; color: white; background-color: '
     if animalTable.isSwimming == 'Swimming' then
     if animalTable.isSwimming == 'Swimming' then
         infobox = infobox .. '#65a9e6;\"\n| colspan=\"2\" | \'\'\'Water Animal\'\'\'[[Category:Animals]]\n'
         infobox = infobox .. '|- class=\"animal-type swimming\"\n| colspan=\"2\" | Water Animal[[Category:Animals]]\n'
     elseif animalTable.isFlying == 'Flying' then
     elseif animalTable.isFlying == 'Flying' then
         infobox = infobox .. '#e3bd27;\"\n| colspan=\"2\" | \'\'\'Flying Animal\'\'\'[[Category:Animals]]\n'
         infobox = infobox .. '|- class=\"animal-type flying\"\n| colspan=\"2\" | Flying Animal[[Category:Animals]]\n'
     else  
     else  
         infobox = infobox .. '#11af53;\"\n| colspan=\"2\" | \'\'\'Land Animal\'\'\'[[Category:Animals]]\n'     
         infobox = infobox .. '|- class=\"animal-type land\"\n| colspan=\"2\" | Land Animal[[Category:Animals]]\n'     
     end     
     end     


Line 49: Line 48:
      
      
     -- 'General' section header
     -- 'General' section header
     infobox = infobox .. '|-' .. headerStyle .. '\n| colspan=\"2\" | \'\'\'General\'\'\'\n'
     infobox = infobox .. '|-' .. subheaderClass .. '\n| colspan=\"2\" | \'\'\'General\'\'\'\n'


     -- Health
     -- Health
     if animalTable.health ~= nil then
     if animalTable.health ~= nil then
         infobox = infobox .. '|-\n| Health:\n|' .. valueColumnStyle .. '| ' .. animalTable.health .. '\n'
         infobox = infobox .. '|-\n| Health:\n|' .. valueColumnClass .. '| ' .. animalTable.health .. '\n'
     end     
     end     
      
      
     -- Idle Speed
     -- Idle Speed
     if animalTable.wanderingSpeed ~= nil then
     if animalTable.wanderingSpeed ~= nil then
         infobox = infobox .. '|-' .. alternateRowColor .. '\n| Idle Speed:\n|' .. valueColumnStyle .. '| ' .. Unit._unit(animalTable.wanderingSpeed, 'm/s') .. '\n'
         infobox = infobox .. '|-' .. alternateRowColor .. '\n| Idle Speed:\n|' .. valueColumnClass .. '| ' .. Unit._unit(animalTable.wanderingSpeed, 'm/s') .. '\n'
     end         
     end         


Line 65: Line 64:
         -- 12em seems to be enough for the other column to scale up to fill the remaining space.
         -- 12em seems to be enough for the other column to scale up to fill the remaining space.
         -- With this the longest line "Attack Damage:" fits on one line.
         -- With this the longest line "Attack Damage:" fits on one line.
         infobox = infobox .. '|-\n| Eats:\n|' .. longValueColumnStyle .. '| ' .. AnimalUtils.formatFoodSources(animalTable.foodSources) .. '\n'
         infobox = infobox .. '|-\n| Eats:\n|' .. wideColumnClass .. '| ' .. AnimalUtils.formatFoodSources(animalTable.foodSources) .. '\n'
     end     
     end     
      
      
     -- Climbing
     -- Climbing
     if animalTable.climbHeight ~= nil then
     if animalTable.climbHeight ~= nil then
         infobox = infobox .. '|--' .. alternateRowColor .. '\n| Climb Height:\n|' .. valueColumnStyle .. '| ' .. Unit._unit(animalTable.climbHeight, 'm') .. '\n'
         infobox = infobox .. '|--' .. alternateRowColor .. '\n| Climb Height:\n|' .. valueColumnClass .. '| ' .. Unit._unit(animalTable.climbHeight, 'm') .. '\n'
     end     
     end     
      
      
     -- Carbon Released
     -- Carbon Released
     if animalTable.carbonRelease ~= nil then
     if animalTable.carbonRelease ~= nil then
         infobox = infobox .. '|-\n| Carbon Released:\n|' .. valueColumnStyle .. '| ' .. Unit._unit(animalTable.carbonRelease, 'ppm') .. '\n'
         infobox = infobox .. '|-\n| Carbon Released:\n|' .. valueColumnClass .. '| ' .. Unit._unit(animalTable.carbonRelease, 'ppm') .. '\n'
     end     
     end     
      
      
     -- 'Hunting Information' section header
     -- 'Hunting Information' section header
     infobox = infobox .. '|-' .. headerStyle .. '\n| colspan=\"2\" | \'\'\'Hunting\'\'\'\n'     
     infobox = infobox .. '|-' .. subheaderClass .. '\n| colspan=\"2\" | \'\'\'Hunting\'\'\'\n'     


     -- Harvest
     -- Harvest
     if animalTable.resourceItem ~= nil then
     if animalTable.resourceItem ~= nil then
         infobox = infobox .. '|-\n| Harvest Item:\n|' .. valueColumnStyle .. '| ' .. animalTable.resourceItem .. '\n'
         infobox = infobox .. '|-\n| Harvest Item:\n|' .. valueColumnClass .. '| ' .. animalTable.resourceItem .. '\n'
     end     
     end     
      
      
     -- Flees
     -- Flees
     infobox = infobox .. '|--' .. alternateRowColor .. '\n| Flees:\n|' .. valueColumnStyle .. '| ' .. Utils.formatNilToYesNo(animalTable.flees) .. '\n'
     infobox = infobox .. '|--' .. alternateRowColor .. '\n| Flees:\n|' .. valueColumnClass .. '| ' .. Utils.formatNilToYesNo(animalTable.flees) .. '\n'


     -- Animals Fear
     -- Animals Fear
     if animalTable.fearFactor ~= nil then
     if animalTable.fearFactor ~= nil then
         infobox = infobox .. '|-\n| [[Fear Factor]]:\n|' .. valueColumnStyle .. '| ' .. animalTable.fearFactor .. '\n'
         infobox = infobox .. '|-\n| [[Fear Factor]]:\n|' .. valueColumnClass .. '| ' .. animalTable.fearFactor .. '\n'
     end
     end
      
      
     -- Running Speed
     -- Running Speed
     if animalTable.speed ~= nil then
     if animalTable.speed ~= nil then
         infobox = infobox .. '|-' .. alternateRowColor .. '\n| Flee Speed:\n|' .. valueColumnStyle .. '| ' .. Unit._unit(animalTable.speed, 'm/s') .. '\n'
         infobox = infobox .. '|-' .. alternateRowColor .. '\n| Flee Speed:\n|' .. valueColumnClass .. '| ' .. Unit._unit(animalTable.speed, 'm/s') .. '\n'
     end         
     end         


     -- Attack Chance
     -- Attack Chance
     if animalTable.chanceToAttack ~= nil then
     if animalTable.chanceToAttack ~= nil then
         infobox = infobox .. '|-\n| Attack Chance:\n|' .. valueColumnStyle .. '| ' .. (animalTable.chanceToAttack*100) .. ' % \n'
         infobox = infobox .. '|-\n| Attack Chance:\n|' .. valueColumnClass .. '| ' .. (animalTable.chanceToAttack*100) .. ' % \n'
     end
     end
      
      
     -- Attack Damage
     -- Attack Damage
     if animalTable.damage ~= nil then
     if animalTable.damage ~= nil then
         infobox = infobox .. '|-' .. alternateRowColor .. '\n| Attack Damage:\n|' .. valueColumnStyle .. '| ' .. animalTable.damage .. '\n'
         infobox = infobox .. '|-' .. alternateRowColor .. '\n| Attack Damage:\n|' .. valueColumnClass .. '| ' .. animalTable.damage .. '\n'
     end
     end
      
      
     -- Detect Range
     -- Detect Range
     if animalTable.detectRange ~= nil then
     if animalTable.detectRange ~= nil then
         infobox = infobox .. '|-\n| Detect Range:\n|' .. valueColumnStyle .. '| ' .. Unit._unit(animalTable.detectRange, 'm') .. '\n'
         infobox = infobox .. '|-\n| Detect Range:\n|' .. valueColumnClass .. '| ' .. Unit._unit(animalTable.detectRange, 'm') .. '\n'
     end
     end


     -- Attack Range
     -- Attack Range
     if animalTable.attackRange ~= nil then
     if animalTable.attackRange ~= nil then
         infobox = infobox .. '|-' .. alternateRowColor .. '\n| Attack Range:\n|' .. valueColumnStyle .. '| ' .. Unit._unit(animalTable.attackRange, 'm') .. '\n'
         infobox = infobox .. '|-' .. alternateRowColor .. '\n| Attack Range:\n|' .. valueColumnClass .. '| ' .. Unit._unit(animalTable.attackRange, 'm') .. '\n'
     end         
     end         
      
      

Revision as of 18:50, 9 April 2022

Documentation for this module may be created at Module:Infobox Animal/sandbox/doc

local p = {}
local Utils = require("Module:Utils")
local Unit = require("Module:Unit")
local AnimalUtils = require("Module:UtilsAnimalTables")

-- Build an Animal Infobox
function animalBox( args, animalData )
    -- check that all necessary arguments are passed correctly
    assert(not Utils.isEmpty(args.name), 'Member \'name\' must be specified for an animal in Module:AnimalData.')
    
    local animal = args.name
    local animalTable = animalData.animals[animal]

    --Check Passes
    assert(animalTable ~= nil, mw.ustring.format('Animal \'%s\' could not be found in Module:AnimalData.', animal))

    local animalEN = animalTable.untranslated
    local animalimagename = string.gsub(animalEN, ' ', '')
    
    -- string used to build the infobox
    local alternateRowColor = ' bgcolor=\"#c3e2ec\"' -- Mixed in 10% Green Blue Crayola from the palette with the table background color.
    local subheaderClass = 'class=\"subheader\"'
    local valueColumnClass = 'class=\"value-column\"'
    local wideColumnClass = 'class=\"value-column wide-column\"'
    
    local infobox = '{| class=\"infobox animal-infobox\"\n'
    -- name of the animal
    infobox = infobox .. '|- class=\"animal-name\"\n| colspan=\"2\" | ' .. animal .. '\n'
        
    -- Water, Flying or Land Animal
    if animalTable.isSwimming == 'Swimming' then
        infobox = infobox .. '|- class=\"animal-type swimming\"\n| colspan=\"2\" | Water Animal[[Category:Animals]]\n'
    elseif animalTable.isFlying == 'Flying' then
        infobox = infobox .. '|- class=\"animal-type flying\"\n| colspan=\"2\" | Flying Animal[[Category:Animals]]\n'
    else 
        infobox = infobox .. '|- class=\"animal-type land\"\n| colspan=\"2\" | Land Animal[[Category:Animals]]\n'     
    end    

    -- Animals Icon Image
    local image = 'NoImage.png|link=https://wiki.play.eco/index.php?title=Special:Upload&wpDestFile=' .. animalimagename .. '_Animal.png|[[Category:Pages_with_missing_animal]]'
    if mw.title.makeTitle('File', animalimagename .. '_Animal.png').file.exists then
        image = animalimagename .. '_Animal.png'
    elseif mw.title.makeTitle('File', animalimagename .. '_Animal.jpg').file.exists then
        image = animalimagename .. '_Animal.jpg'
    end
    
    infobox = infobox .. '|-\n| colspan=\"2\" style=\"padding:0;\" | [[File:' .. image .. '|center|frameless|250x250px]]\n'
    
    -- 'General' section header
    infobox = infobox .. '|-' .. subheaderClass .. '\n| colspan=\"2\" | \'\'\'General\'\'\'\n'

    -- Health
    if animalTable.health ~= nil then
        infobox = infobox .. '|-\n| Health:\n|' .. valueColumnClass .. '| ' .. animalTable.health .. '\n'
    end    
    
    -- Idle Speed
    if animalTable.wanderingSpeed ~= nil then
        infobox = infobox .. '|-' .. alternateRowColor .. '\n| Idle Speed:\n|' .. valueColumnClass .. '| ' .. Unit._unit(animalTable.wanderingSpeed, 'm/s') .. '\n'
    end        

    -- Eats
    if animalTable.foodSources ~= nil then
        -- 12em seems to be enough for the other column to scale up to fill the remaining space.
        -- With this the longest line "Attack Damage:" fits on one line.
        infobox = infobox .. '|-\n| Eats:\n|' .. wideColumnClass .. '| ' .. AnimalUtils.formatFoodSources(animalTable.foodSources) .. '\n'
    end    
    
    -- Climbing
    if animalTable.climbHeight ~= nil then
        infobox = infobox .. '|--' .. alternateRowColor .. '\n| Climb Height:\n|' .. valueColumnClass .. '| ' .. Unit._unit(animalTable.climbHeight, 'm') .. '\n'
    end    
    
    -- Carbon Released
    if animalTable.carbonRelease ~= nil then
        infobox = infobox .. '|-\n| Carbon Released:\n|' .. valueColumnClass .. '| ' .. Unit._unit(animalTable.carbonRelease, 'ppm') .. '\n'
    end    
    
    -- 'Hunting Information' section header
    infobox = infobox .. '|-' .. subheaderClass .. '\n| colspan=\"2\" | \'\'\'Hunting\'\'\'\n'    

    -- Harvest
    if animalTable.resourceItem ~= nil then
        infobox = infobox .. '|-\n| Harvest Item:\n|' .. valueColumnClass .. '| ' .. animalTable.resourceItem .. '\n'
    end    
    
    -- Flees
    infobox = infobox .. '|--' .. alternateRowColor .. '\n| Flees:\n|' .. valueColumnClass .. '| ' .. Utils.formatNilToYesNo(animalTable.flees) .. '\n'

    -- Animals Fear
    if animalTable.fearFactor ~= nil then
        infobox = infobox .. '|-\n| [[Fear Factor]]:\n|' .. valueColumnClass .. '| ' .. animalTable.fearFactor .. '\n'
    end
    
    -- Running Speed
    if animalTable.speed ~= nil then
        infobox = infobox .. '|-' .. alternateRowColor .. '\n| Flee Speed:\n|' .. valueColumnClass .. '| ' .. Unit._unit(animalTable.speed, 'm/s') .. '\n'
    end        

    -- Attack Chance
    if animalTable.chanceToAttack ~= nil then
        infobox = infobox .. '|-\n| Attack Chance:\n|' .. valueColumnClass .. '| ' .. (animalTable.chanceToAttack*100) .. ' % \n'
    end
    
    -- Attack Damage
    if animalTable.damage ~= nil then
        infobox = infobox .. '|-' .. alternateRowColor .. '\n| Attack Damage:\n|' .. valueColumnClass .. '| ' .. animalTable.damage .. '\n'
    end
    
    -- Detect Range
    if animalTable.detectRange ~= nil then
        infobox = infobox .. '|-\n| Detect Range:\n|' .. valueColumnClass .. '| ' .. Unit._unit(animalTable.detectRange, 'm') .. '\n'
    end

    -- Attack Range
    if animalTable.attackRange ~= nil then
        infobox = infobox .. '|-' .. alternateRowColor .. '\n| Attack Range:\n|' .. valueColumnClass .. '| ' .. Unit._unit(animalTable.attackRange, 'm') .. '\n'
    end        
    
    infobox = infobox .. '|}'
    
    return infobox
end

-- Main entry point for the Module
function p.AnimalMain(frame)
    -- get args from the Template
    local args = Utils.normaliseArgs(frame)
    
    -- get animal data
    local animalData = require( 'Module:AnimalData' )
    
    return animalBox( args, animalData )
end

return p