Module:AnimalInfoCard: Difference between revisions

From Eco - English Wiki
[checked revision][checked revision]
Demian (talk | contribs)
Copy code from sandbox module.
No edit summary
 
(74 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}
local Utils = require("Module:Utils")
local Utils = require('Module:Utils')
local Unit = require("Module:Unit")
local IconUtils = require('Module:IconUtils')
local AnimalUtils = require("Module:UtilsAnimalTables")
local Lang = Utils.WikiLang


-- Build an Animal Infobox
function p.main(frame)
function animalBox( args, animalData )
local PageName = frame.args[1]
    -- check that all necessary arguments are passed correctly
if (Lang == 'English') then AnimalName = PageName else AnimalName = Utils.AnimalSearch(PageName) end
    assert(not Utils.isEmpty(args.name), 'Member \'name\' must be specified for an animal in Module:AnimalData.')
local AnimalData = mw.loadData( "Module:AnimalData" )
   
     local Animal = AnimalData.animals[AnimalName]
    local animal = args.name
local WikiText =''
    local animalTable = animalData.animals[animal]
 
WikiText = WikiText ..'__NOTOC__'
    --Check Passes
WikiText = WikiText ..'page name get test: ' .. PageName ..'</br>'
    assert(animalTable ~= nil, mw.ustring.format('Animal \'%s\' could not be found in Module:AnimalData.', animal))
WikiText = WikiText ..'Animal name get test: ' .. AnimalName ..'</br>'
 
    local animalEN = animalTable.untranslated
WikiText = WikiText .. '<div class="row gy-4 gx-5"><div class="col-md-6">'
    local animalimagename = string.gsub(animalEN, ' ', '')
local GalleryImagesList = AnimalName .. "_Animal.jpg|" .. AnimalName .."\n" .. AnimalName .. "_Animal.jpg"
   
WikiText =  WikiText .. frame:callParserFunction{ name = '#tag:gallery', args = { mode = 'slideshow', widths = '100%', ''.. GalleryImagesList .. '' , showthumbnails = 'true'} }
    -- string used to build the infobox
WikiText = WikiText .. '</div>'
    local alternateRowColor = ' bgcolor=\"#c3e2ec\"' -- Mixed in 10% Green Blue Crayola from the palette with the table background color.
WikiText = WikiText ..'<div class="col-md-6"><div class="card border-primary"><div class="card-body">'
    local headerStyle = 'style=\"background-color:#4688C0;text-align:center;\"'
     WikiText = WikiText ..'<h2 class="card-title fs-40">' .. IconUtils.main{name = Animal.Name[Lang], id = Animal.ID , size = 48, style = 1} .. ' ' .. Animal.Name[Lang] .. '</h2>'
     local valueColumnStyle = 'style=\"text-align:right;padding:0.2em\"'
WikiText = WikiText ..'<p class="col-lg-10 card-text">' .. Animal.Description[Lang] .. '</p>'
    local longValueColumnStyle = 'style=\"text-align:right;padding:0.2em;max-width:12em\"'
WikiText =  WikiText .. '<table class="table table-striped table-bordered w-80"><tr class="thead-dark">';
   
WikiText = WikiText .. '<th>' .. Utils.Translate("Name") .. '</th><th>' .. Utils.Translate("Value") .. '</th>'
    local infobox = '{| class=\"infobox\"\n'
    -- name of the animal
WikiText = WikiText .. '</table>'
    infobox = infobox .. '|- style=\"color: white; background-color: #1165AF; text-align: center;\"\n| colspan=\"2\" | \'\'\'<big>' .. animal .. '</big>\'\'\'\n'
WikiText = WikiText ..'</div></div></div></div>'
       
    -- Water, Flying or Land Animal
if (Lang ~= 'English') then WikiText = WikiText .. '[[en:' .. Animal.Name.English .. ']]' end
    infobox = infobox .. '|- style=\"text-align: center; color: white; background-color: '
if (Lang ~= 'Russian') then WikiText = WikiText .. '[[ru:' .. Animal.Name.Russian .. ']]' end
    if animalTable.isSwimming == 'Swimming' then
if (Lang ~= 'German') then WikiText = WikiText .. '[[de:' .. Animal.Name.German .. ']]' end
        infobox = infobox .. '#65a9e6;\"\n| colspan=\"2\" | \'\'\'Water Animal\'\'\'[[Category:Animals]]\n'
if (Lang ~= 'French') then WikiText = WikiText .. '[[fr:' .. Animal.Name.French .. ']]' end
    elseif animalTable.isFlying == 'Flying' then
        infobox = infobox .. '#e3bd27;\"\n| colspan=\"2\" | \'\'\'Flying Animal\'\'\'[[Category:Animals]]\n'
local descriptionpage = Animal.Name[Lang] .. " - " .. Animal.Description[Lang]
    else
WikiText = WikiText .. frame:callParserFunction{ name = '#description2', args = { descriptionpage }}
        infobox = infobox .. '#11af53;\"\n| colspan=\"2\" | \'\'\'Land Animal\'\'\'[[Category:Animals]]\n'   
--- WikiText = WikiText .. frame:callParserFunction{ name = '#setmainimage', args = { AnimalName .. "_Animal.jpg" }}
    end   
 
WikiText = WikiText .. Utils.checkImage(AnimalName .. '_Animal.jpg')
    -- 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
return WikiText
        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 .. '|-' .. headerStyle .. '\n| colspan=\"2\" | \'\'\'General\'\'\'\n'
 
    -- Health
    if animalTable.health ~= nil then
        infobox = infobox .. '|-\n| Health:\n|' .. valueColumnStyle .. '| ' .. animalTable.health .. '\n'
    end   
   
    -- Idle Speed
    if animalTable.wanderingSpeed ~= nil then
        infobox = infobox .. '|-' .. alternateRowColor .. '\n| Idle Speed:\n|' .. valueColumnStyle .. '| ' .. 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|' .. longValueColumnStyle .. '| ' .. AnimalUtils.formatFoodSources(animalTable.foodSources) .. '\n'
    end   
   
    -- Climbing
    if animalTable.climbHeight ~= nil then
        infobox = infobox .. '|--' .. alternateRowColor .. '\n| Climb Height:\n|' .. valueColumnStyle .. '| ' .. Unit._unit(animalTable.climbHeight, 'm') .. '\n'
    end   
   
    -- Carbon Released
    if animalTable.carbonRelease ~= nil then
        infobox = infobox .. '|-\n| Carbon Released:\n|' .. valueColumnStyle .. '| ' .. Unit._unit(animalTable.carbonRelease, 'ppm') .. '\n'
    end   
   
    -- 'Hunting Information' section header
    infobox = infobox .. '|-' .. headerStyle .. '\n| colspan=\"2\" | \'\'\'Hunting\'\'\'\n'   
 
    -- Harvest
    if animalTable.resourceItem ~= nil then
        infobox = infobox .. '|-\n| Harvest Item:\n|' .. valueColumnStyle .. '| ' .. animalTable.resourceItem .. '\n'
    end  
   
    -- Flees
    infobox = infobox .. '|--' .. alternateRowColor .. '\n| Flees:\n|' .. valueColumnStyle .. '| ' .. Utils.formatNilToYesNo(animalTable.flees) .. '\n'
 
    -- Animals Fear
    if animalTable.fearFactor ~= nil then
        infobox = infobox .. '|-\n| [[Fear Factor]]:\n|' .. valueColumnStyle .. '| ' .. animalTable.fearFactor .. '\n'
    end
   
    -- Running Speed
    if animalTable.speed ~= nil then
        infobox = infobox .. '|-' .. alternateRowColor .. '\n| Flee Speed:\n|' .. valueColumnStyle .. '| ' .. Unit._unit(animalTable.speed, 'm/s') .. '\n'
    end      
 
    -- Attack Chance
    if animalTable.chanceToAttack ~= nil then
        infobox = infobox .. '|-\n| Attack Chance:\n|' .. valueColumnStyle .. '| ' .. (animalTable.chanceToAttack*100) .. ' % \n'
    end
   
    -- Attack Damage
    if animalTable.damage ~= nil then
        infobox = infobox .. '|-' .. alternateRowColor .. '\n| Attack Damage:\n|' .. valueColumnStyle .. '| ' .. animalTable.damage .. '\n'
    end
   
    -- Detect Range
    if animalTable.detectRange ~= nil then
        infobox = infobox .. '|-\n| Detect Range:\n|' .. valueColumnStyle .. '| ' .. Unit._unit(animalTable.detectRange, 'm') .. '\n'
    end
 
    -- Attack Range
    if animalTable.attackRange ~= nil then
        infobox = infobox .. '|-' .. alternateRowColor .. '\n| Attack Range:\n|' .. valueColumnStyle .. '| ' .. 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
end


return p
return p

Latest revision as of 11:06, 13 April 2026

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

local p = {}
local Utils = require('Module:Utils')
local IconUtils = require('Module:IconUtils')
local Lang = Utils.WikiLang

function p.main(frame)
	local PageName = frame.args[1]
	if (Lang == 'English') then AnimalName = PageName else AnimalName = Utils.AnimalSearch(PageName) end
	local AnimalData = mw.loadData( "Module:AnimalData" )
    local Animal = AnimalData.animals[AnimalName]
	local WikiText =''
	
	WikiText =  WikiText ..'__NOTOC__'
	WikiText =  WikiText ..'page name get test: ' .. PageName ..'</br>'
	WikiText =  WikiText ..'Animal name get test: ' .. AnimalName ..'</br>'
	
	WikiText =  WikiText .. '<div class="row gy-4 gx-5"><div class="col-md-6">'
	local GalleryImagesList = AnimalName .. "_Animal.jpg|" .. AnimalName .."\n" .. AnimalName .. "_Animal.jpg"
	WikiText =  WikiText .. frame:callParserFunction{ name = '#tag:gallery', args = { mode = 'slideshow', widths = '100%', ''.. GalleryImagesList .. '' , showthumbnails = 'true'} }
	WikiText =  WikiText .. '</div>'
	WikiText =  WikiText ..'<div class="col-md-6"><div class="card border-primary"><div class="card-body">'
    WikiText =  WikiText ..'<h2 class="card-title fs-40">' .. IconUtils.main{name = Animal.Name[Lang], id = Animal.ID , size = 48, style = 1} .. '  ' .. Animal.Name[Lang] .. '</h2>'
	WikiText =  WikiText ..'<p class="col-lg-10 card-text">' .. Animal.Description[Lang] .. '</p>'
	WikiText =  WikiText .. '<table class="table table-striped table-bordered w-80"><tr class="thead-dark">';
	WikiText =  WikiText .. '<th>' .. Utils.Translate("Name") .. '</th><th>' .. Utils.Translate("Value") .. '</th>'
	
	WikiText =  WikiText .. '</table>'
	WikiText =  WikiText ..'</div></div></div></div>'
	
	if (Lang ~= 'English') then WikiText =  WikiText .. '[[en:' .. Animal.Name.English .. ']]' end
	if (Lang ~= 'Russian') then WikiText =  WikiText .. '[[ru:' .. Animal.Name.Russian .. ']]' end
	if (Lang ~= 'German') then WikiText =  WikiText .. '[[de:' .. Animal.Name.German .. ']]' end
	if (Lang ~= 'French') then WikiText =  WikiText .. '[[fr:' .. Animal.Name.French .. ']]' end
	
	local descriptionpage = Animal.Name[Lang] .. " - " .. Animal.Description[Lang]
	WikiText =  WikiText .. frame:callParserFunction{ name = '#description2', args = { descriptionpage }}
	--- WikiText =  WikiText .. frame:callParserFunction{ name = '#setmainimage', args = { AnimalName .. "_Animal.jpg" }}
	
	WikiText =  WikiText .. Utils.checkImage(AnimalName .. '_Animal.jpg')
	
	
	return WikiText
end

return p