For faster navigation, this Iframe is preloading the Wikiwand page for Module:Biota infobox/core.

Module:Biota infobox/core

require('strict')

local p = {}
local templateArgs = {}
local info = {}

local paramData = require( 'Module:Biota infobox/data' ) -- contains the taxon ranks in order
local autotaxa = require("Module:Autotaxobox")
local parameters = require( 'Module:Biota infobox/param' ) 

--[[ ##################### CORE FUNCTIONS ###################################
       this core function emulates Template:Taxobox/core 
       it is followed by functions handling the different type of entry
]]
p.main = function(frame)
	-- this function emulates Template:Taxobox/core when called from taxobox feeder templates
	--  i.e. Taxobox, Automatic taxobox, Speciesbox, etc
	parameters.getArgs(frame) 
	templateArgs['image_upright'] = templateArgs['upright'] or 1   
    templateArgs['image2_upright'] = templateArgs['upright2']  or 1
    info.headerColor = templateArgs['colour']
	return p._core
    --TODO check it works
end
-- this is the core function, called either from main() or auto()
p.core = function(frame, args, localinfo) 
	templateArgs = args
	info = localinfo
	return p._core(frame) 
end

p._core = function(frame) 

	                                    -- TODO use mw.title.getCurrentTitle().basePageTitle
	info.name = templateArgs['name'] or tostring( mw.title.getCurrentTitle() ) --.rootPageTitle )

    if not info.headerColor then
    	info.headerColor = p.getTaxoboxColor(frame) -- so only transverse taxobox heirarchy once
    end
    
	--[[ create table (two versions)
	     1. use mwhtml library to build table in taxoboxTable
	     2. use wikitest to build table in wikitextTable
    ]]
	local taxoboxTable = mw.html.create('table'):addClass('infobox'):addClass('biota')
								                :addClass('biota-infobox')
	local wikitextTable = '\n{| class="infobox biota biota-infobox" '							                
								                
    info.subheader = ''
    if templateArgs['subheader'] and templateArgs['subheader'] ~= '' then
		info.subheader='<div style="font-weight:normal;font-size:smaller;">'..templateArgs['subheader']..'</div>'
    end
    
    --TODO do we need additional handling to check ((geological range)) templete 
    --        or handle oldest_fossil and youngest_fossil (these don't seem to be used now)
    -- Note: taxobox/core uses temporal_range
    local temporalRange = ''
    if templateArgs['temporal_range']  then
    	temporalRange = '<div><small>Temporal range: ' .. templateArgs['temporal_range'] .. '</small></div>' -- use <div> rather than <br/>
    end
    
    local rowHeader = taxoboxTable:tag('tr'):tag('th'):attr('colspan', '2'):addClass('section-header')
	                :cssText('background:' ..  info.headerColor .. ';')
					:wikitext(info.name .. info.subheader .. temporalRange)
    
    wikitextTable = wikitextTable .. '\n|-\n! colspan="2" class="section-header" style="background:' ..  info.headerColor .. ';" '
                      .. '|' .. info.name .. info.subheader .. temporalRange
    
    -- add images
    wikitextTable = wikitextTable ..  p.addImageSection(frame, taxoboxTable, 'image')
                                  .. p.addImageSection(frame, taxoboxTable, 'image2')
    
    --add conservation status 
	wikitextTable = wikitextTable .. p.addStatusSection(frame, taxoboxTable, 'status')
	                              .. p.addStatusSection(frame, taxoboxTable, 'status2')
	
	-- add taxonomy table (uses entered parameters or automatic taxonomy system)
	wikitextTable = wikitextTable .. p.addTaxonomySection(frame, taxoboxTable)
    
	-- add sections with binomial, trinomial, type species/genus (with authorities)
	wikitextTable = wikitextTable 
				..	p.addTaxonSection(frame, taxoboxTable, 'binomial', 'Binomial name')
				..	p.addTaxonSection(frame, taxoboxTable, 'trinomial', 'Trionomial name')
				..	p.addTaxonSection(frame, taxoboxTable, 'type_genus', 'Type genus')
					--TODO type_ichnogenus, type_oogenus
				..	p.addTaxonSection(frame, taxoboxTable, 'type_species', 'Type species')
					--TODO type_ichnospecies, type_oospecies
				..  p.addTaxonSection(frame, taxoboxTable, 'type_strain', 'Type strain')

	-- add sections showing subdivisions (i.e. child taxa)
	wikitextTable = wikitextTable 
                 .. p.addListSection(frame, taxoboxTable, 'subdivision', templateArgs['subdivision_ranks'] or 'Subdivisions')
                 ..	p.addListSection(frame, taxoboxTable, 'possible_subdivision', templateArgs['possible_subdivision_ranks'] or 'Possible subdivisions')
    
    -- diversity section (TODO consider how best to handle)
    wikitextTable = wikitextTable .. p.addTaxonSection(frame, taxoboxTable, 'diversity', 'Diversity') 

	-- show included groups (accepts 'included' or 'includes') [used for paraphyletic taxa]
	wikitextTable = wikitextTable .. p.addListSection(frame, taxoboxTable, 'includes', 'Groups included')
	--p.addListSection(frame, taxoboxTable, 'included', 'Groups included') -- use alias

    --add range map (should this be below binomial/trinomial?)
    wikitextTable = wikitextTable .. p.addImageSection(frame, taxoboxTable, 'range_map')

	-- show excluded groups (accepts 'excluded' or 'excludes') [used for paraphyletic taxa]
	local excludedHeaderText = '[[Cladistics|Cladistically]] included but traditionally excluded taxa'
	wikitextTable = wikitextTable .. p.addListSection(frame, taxoboxTable, 'excludes', excludedHeaderText)

    -- add addition binomials, trinomial and range maps
	wikitextTable = wikitextTable 
	         .. p.addTaxonSection(frame, taxoboxTable, 'binomial2', 'Binomial name (2)')
	         --p.addTaxonSection(frame, taxoboxTable, 'trinomial2', 'Trionomial name (2)')
             .. p.addImageSection(frame, taxoboxTable, 'range_map2')
             .. p.addTaxonSection(frame, taxoboxTable, 'binomial3', 'Binomial name (3)')
             --p.addTaxonSection(frame, taxoboxTable, 'trinomial3', 'Trionomial name (3)')
             .. p.addImageSection(frame, taxoboxTable, 'range_map3')
             .. p.addTaxonSection(frame, taxoboxTable, 'binomial4', 'Binomial name (4)')
             --p.addTaxonSection(frame, taxoboxTable, 'trinomial4', 'Trionomial name (4)')
             .. p.addImageSection(frame, taxoboxTable, 'range_map4')

	-- add synonyms section
	wikitextTable = wikitextTable .. p.addListSection(frame, taxoboxTable, 'synonyms', '[[Synonym (taxonomy)|Synonyms]]')

	-- add debug/tracking  info section
	if info.debug then
	    wikitextTable = wikitextTable ..p.addListSection(frame, taxoboxTable, 'debug', 'Debug/tracking info')
	end
	
	------------------add templateSyles and return taxobox table---------------------------
	
	local src = "Template:Biota infobox/styles.css" -- TemplateStyles file
    	
   	wikitextTable = 	wikitextTable .. '\n|}'

    local output =	wikitextTable            -- output the wikitext table
    --local output = tostring(taxoboxTable)    -- output the mw.html table
	
	return output .. p.templateStyle( frame, src ) .. info.parameterCategory 
	--return '<div style="float:right;">' .. output .. p.templateStyle( frame, src ) .. info.parameterCategory .. '</div>'
	
end  -- End the main function.	

--[[ ====================================================================================
     function to add conservation sections 
        uses template ((taxobox/species|(({status_system|))}|(({status|))}|(({status_ref|))}|extinct=(({extinct|))} )) ))
 --]]
function p.addStatusSection(frame, taxoboxTable, status)

    -- must use table container to handle template output
    -- don't use header or content cells; the 'taxobox/species' template handles it
    -- just need to add background colour on the row
    local wikiText = ""
    if templateArgs[status] and templateArgs[status] ~= "" then
 
		local statusText = frame:expandTemplate{ title = 'taxobox/species', 
									          args = {templateArgs[status..'_system'] or '',
									    		      templateArgs[status] or '',
									    		      templateArgs[status..'_ref'] or '',
									    		      ['extinction_date'] = templateArgs['extinct'] or ''  
									    		      }
    	          	                        }
		local row = taxoboxTable:tag('tr')
		                                  --:cssText('background:' ..  p.getTaxoboxColor(frame) .. ';')
		local cell = row:tag('td'):attr('colspan', '2')
		           :wikitext('\n{|\n|- style="background:' ..  info.headerColor .. ';"')
		           :wikitext('\n'..tostring(statusText))
    	           :wikitext('\n|}')
        
       -- mw.addWarning ('taxobox/species returns:' .. '<pre>' .. statusText .. '</pre>')
        if status == "status2" then
        	wikiText = '\n|-' ..tostring(statusText) -- Horrible fudge to prevent header on second conservation status 
        	                                         --  mimicks taxobox in not having newline after \- so header doesn't show
        else
        	wikiText = '\n|-  colspan="2" style="background:' ..  info.headerColor .. ';" ' 
                      .. '\n' ..tostring(statusText)
        end
    end
    return wikiText 
end

--[[ ==============================================================================
     function to add sections for taxonomic information with authorities ('_authority' suffix)
        e.g. binomial, trinomial, type_species, type_genus; 
        diversity also handled here
--]]
function p.addTaxonSection(frame, taxoboxTable, target, headerText)
	
	local wikiText = ""
    -- return if we don't have value
	if not templateArgs[target]  or templateArgs[target] == '' then return "" end
	
	local bold = "" -- variable for bolding binomial and trinomial (type genus/species etc are not bolded)
	local showHeader = true
	
	local listHeader = (templateArgs[target..'_text'] or headerText) 

	-- custom processing section
	--if target == 'binomial' or target == 'binomial2' or target == 'binomial3' or target == 'binomial4' then
	if target == 'binomial' then
		headerText = '[[Binomial nomenclature|' .. listHeader .. ']]'
		bold ="'''"
	--elseif target == 'trinomial' or target == 'trinomial2' or target == 'trinomial3' or target == 'trinomial4' then
	elseif target == 'trinomial'  then
		local trinomenLink = "Trinomen" -- for zoological or default
		if info.auto ==  "infraspeciesbox" then trinomenLink = "Infraspecific name (botany)" end -- regnum contains plant/fung/Archaeplastida"
		headerText = '[['.. trinomenLink .. '|' .. headerText .. ']]'
		bold ="'''"
	elseif target == 'binomial2' or target == 'binomial3' or target == 'binomial4'
		   or target == 'trinomial2' or target == 'trinomial3' or target == 'trinomial4' then
		showHeader = false
		bold ="'''"
	elseif target == 'diversity'  then
	   headerText = '[[Biodiversity|' .. headerText .. ']]'
	else
	   --TODO is any handling needed for other option
	   headerText = '[[' .. headerText .. ']]'
	end
    
	if templateArgs[target..'_ref'] then
			headerText = headerText .. templateArgs[target..'_ref'] .. '\n'
	 end
	
	local contentString = ''   -- content for the content cell
	if target == 'diversity' and templateArgs['diversity'] ~= "" then
		if templateArgs[target..'_link'] and templateArgs[target..'_link'] ~= "" then 
		    contentString =  '\n[[' .. templateArgs[target..'_link'] .. '|' .. templateArgs[target] .. ']]\n' 
		else
			contentString =  '\n' .. templateArgs[target] .. '\n'
		end
	 else
	 	-- taxon name and authority (binomial, type species, etc)
		local authorityString = ''
		if templateArgs[target..'_authority'] then
			authorityString = '<br/><small>' .. templateArgs[target..'_authority'] .. '</small>' -- \n' 
		end 
		contentString =  bold .. templateArgs[target] .. bold .. authorityString .. '\n' 
		--contentString =  '\n' ..  bold .. templateArgs[target] .. bold .. authorityString .. '\n'  -- extra <p> inserted
    end 	 
	
	-- add table rows
	if templateArgs[target] and templateArgs[target] ~= '' then
		if showHeader then
			local rowHeader = taxoboxTable:tag('tr')
			rowHeader  :tag('th')
			           :attr('colspan', '2')
			           :addClass('section-header')
			           :cssText('background:' ..  info.headerColor .. ';')
			           :wikitext( headerText )                   
        	wikiText = wikiText .. '\n|- \n! colspan="2" class="section-header" style="background:' ..  info.headerColor .. ';" '
            		   .. '|' .. headerText

        end
		
		local rowList = taxoboxTable:tag('tr')
		rowList    :tag('td')
		           :attr('colspan', '2')
		           --:addClass('section-content')
		           :addClass('taxon-section')
		           --:cssText('text-align:center;') --font-weight:bold;')
		           :wikitext( contentString )
         wikiText = wikiText .. '\n|- \n| colspan="2" class="taxon-section" |' .. contentString
                             
	end	
    return wikiText
end

--[[ ====================================================================================
     function to produce sections for included taxa (subdivisions), synonyms, etc
      - each consists of two rows containing a header and the content
      - for paraphyletic groups it has include(d|s) and exclude(d|s) groups 
      - for general taxobox it has subdivision and possible subdivision (disabled here)
      - any can be modified for other purposes (e.g. sisters) by changing the header taxt with a -text parameter
  ]]
function p.addListSection(frame, taxoboxTable, target, headerText)
   
    if not templateArgs[target] or templateArgs[target] == "" then return "" end -- redundant for now
    
    local wikiText = ""
    local refString = ''
	if templateArgs[target..'_ref'] then
		   --add '_ref' option for 'synonym_ref' (the rest get it as a bonus) TODO check example
			refString = templateArgs[target..'_ref'] --.. '\n' 	
	 end
	local listHeader = (templateArgs[target..'_text'] or headerText) .. refString
	-- add table rows
	if templateArgs[target] and templateArgs[target] ~= ''then
		local rowHeader = taxoboxTable:tag('tr')
		rowHeader  :tag('th')
		           :attr('colspan', '2')
		           :addClass('section-header')
		           :cssText('background:' .. info.headerColor .. ';')
		           :wikitext(listHeader)
        wikiText = wikiText .. '\n|- \n! colspan="2" class="section-header" style="background:' ..  info.headerColor .. ';" '
               .. '|' .. listHeader

        
		local rowList = taxoboxTable:tag('tr')
		rowList    :tag('td')
		           :attr('colspan', '2')
		           :addClass('section-content')
		           :wikitext('\n' .. templateArgs[target] .. '\n' )	
        wikiText = wikiText .. '\n|- \n| colspan="2" class="section-content" '
               .. '|' .. '\n' .. templateArgs[target] .. '\n'


	 end	
	 return wikiText
end
-----------------------------------------------------------------------------------------------
--[[ ============================================================================
     function to add image sections
     - used for illustrative images at top and for range maps
--]]
function p.addImageSection(frame, taxoboxTable, target)
	 
	 local wikiText = ""
	 if templateArgs[target] and templateArgs[target] ~= '' then
	 	
        local imageWidth = ''
        local imageCaptionString = ''
        if templateArgs[target..'_caption'] then 
        	--imageCaptionString = '<br /><small><div style="text-align:center">' .. templateArgs[target .. '_caption'] .. '</div></small>' 
        	--imageCaptionString = '<br /><div>' .. templateArgs[target .. '_caption'] .. '</div>' 
        	imageCaptionString = templateArgs[target .. '_caption']
        end
        local imageAltString = ''
        if templateArgs[target..'_alt'] then
        	imageAltString = templateArgs[target..'_alt']
        elseif templateArgs[target..'_caption'] then
        	imageAltString = templateArgs[target..'_caption'] -- use caption for alt text if none provided
        end 
        local upright = templateArgs['image_upright'] or 1
        
        local InfoboxImage = require( 'Module:InfoboxImage' ) --, parent.args[target]  )
        local params = { args = { 	image = templateArgs[target],
							        size = templateArgs[target..'_width'],
							        sizedefault = 'frameless',
							        alt = imageAltString,
							        upright = templateArgs[target..'_upright'] or upright 
							        }
					    }
					    
        local image = InfoboxImage.InfoboxImage(  params )
        
	    --local rowImage = taxoboxTable:tag('tr') 
	    local rowImage = mw.html.create('tr')
		rowImage:tag('td')
					 :attr('colspan', '2')
		             :addClass("image-section")
		             :wikitext(image)
		             --:wikitext(imageCaptionString)
		taxoboxTable:node(rowImage)
        wikiText= wikiText .. '\n|- \n|colspan="2" class="image-section" |' .. image 
	    
	    if imageCaptionString ~= "" then                  -- only insert row if caption string
		    local rowImageCaption = mw.html.create('tr')
			rowImageCaption:tag('td')
						 :attr('colspan', '2')
			             :addClass("image-section")
			             --:wikitext(image)
			             :wikitext(imageCaptionString)
	        taxoboxTable:node(rowImageCaption)
	        wikiText = wikiText ..  '\n|- \n|colspan="2" class="image-section" |' .. imageCaptionString
        end 
    end
    
    -- TODO handle upright
	return wikiText
end 

--[[ ============================ TAXONOMY SECTION =======================================
     adds a table showing the taxonomy
      - uses either manual parameters or the automatic taxonomy system
      - currently adds a table inside a cell (like paraphyletic group) rather than just adding rows (core taxobox system)
--]]    
 
function p.addTaxonomySection(frame, taxoboxTable)
    
    local wikiText = ""
	local taxonomyHeader = "[[Taxonomy_(biology)|Scientific classification]]"
	if templateArgs['virus_group']  then 
		taxonomyHeader = "[[Virus classification]]"
	elseif templateArgs['ichnos']  then 
		taxonomyHeader = "[[Trace fossil classification]]"
	elseif templateArgs['veterovata']  then 
		taxonomyHeader = "[[Veterovata|Eggshell classification]]"
	else
		-- TODO add other options (DONE but not verified ichnos or veterovata)
		-- ! colspan=2 style="min-width:15em; text-align: center((#if:(({colour|))}|((;)) background-color((COLON)) (({colour))} ))" | 
		--   ((#if:(({virus_group|(({virus|))))))|[[Virus classification]]
		--    	|((#if:(({ichnos|))}|[[Trace fossil classification]]
	    --   	|((#if:(({veterovata|))}|[[Veterovata|Eggshell classification]]
	    --   |[[Taxonomy (biology)|Scientific classification]])) )) )) 
     	--	    ((#if:(({edit link|))}|((edit taxonomy|(({parent|))} | (({edit link))} ))
		--   ((#if: (({classification_status|))} | <br>((({classification_status))}) | )) ))
		-- handle |classification_status=disputed (add ref)
	end
	
	-- add symbol and link to taxonomy editor
	local editLink = ''
	if info.auto then
		local tooltip = templateArgs['edit link'] or "Edit this classification"
		local style = 'font-size:smaller; float:right; padding-right:0.4em; margin-left:-3em;'
		local link = 'Template:Taxonomy/' .. templateArgs['parent']
		if info.db == "wikidata" then
			local message = 'Select%20preview%20to%20see%20Wikidata%20hierarchy'
			local url='https://en.wikipedia.org/w/index.php?action=edit&section=new&preloadtitle=' .. message 
			      .. '&title=Template:Biota_infobox/Wikidata/preview&preload=User:Jts1882/Taxonomy/preload2&preloadparams%5b%5d='
			link =  url .. string.gsub( templateArgs['parent'], " ", "_")
		end
		editLink  = '<span class="plainlinks" style="'.. style ..'">'
			.. '[[File:OOjs UI icon edit-ltr.svg|15px|link=' .. link .. '|' .. tooltip  .. ']]</span>'
			--.. '[[File:Red Pencil Icon.png|link=' .. link .. '|' .. tooltip  .. ']]</span>'
			
	end
	local status = ""
	if templateArgs['classification_status'] then 
		status = '<div style="font-weight:normal;" >(' .. templateArgs['classification_status'] .. ')'
	    if templateArgs['classification_ref'] then status = status .. templateArgs['classification_ref'] end
		status = status .. '</div>'
	end
	
	local rowTaxonomyHeader = taxoboxTable:tag('tr')
	rowTaxonomyHeader:tag('th')
	           :attr('colspan', '2')
	           :addClass('section-header')
	           :cssText('background:' ..  info.headerColor .. ';')
	           :wikitext(taxonomyHeader)
	           :wikitext(editLink)
	           :wikitext(status)
    
    wikiText = wikiText .. '\n|- \n! colspan="2" class="section-header" style="min-width:15em;text-align:center;background:' ..  info.headerColor .. ';" '
               .. '|' .. taxonomyHeader .. editLink .. status
    
    --[[ get taxonomy list, either using automatic taxobox system or manual system     
         manual: get ranks and taxa from template parameter
         auto (default): get ranks and taxa from taxonomy template parameters
         module: get ranks and taxa from dataa submodules
         wikidata: get ranks and taxa from wikidata
    ]]
    -- shows ranks of genus or above for all auto modes
	if info.db == "module" then 
	    local wdModule = require( 'Module:Biota infobox/Wikidata' ) 
	    wikiText = wikiText .. wdModule.addModuleTaxonomy(frame, taxoboxTable,  templateArgs)   -- use module copy of template data
	elseif info.db == "wikidata" then 
	    --wikiText = wikiText ..'\n|-|\n|' .. p.addWikidataTaxonomy(frame, taxoboxTable)   -- use wikidata
        local wdModule = require( 'Module:Biota infobox/Wikidata' ) 

        wikiText = wikiText .. wdModule.addWikidataTaxonomy(frame, taxoboxTable,  templateArgs)   -- use wikidata
		
		-- TODO need to handle colour 
        -- the default is class="section-header" colspan="2" style="background:rgb(250,240,230);"
        -- wikiText = wikiText:gsub('style="background:rgb%(250,240,230%);"', 'style="background:red;"')
        -- gsub must be applied to wikitextTable
        -- use more generally to avoid traversing the hierarchy twice)
	elseif info.auto then 
		--[[ get automatic taxonomy hierarchy (three different variants)
		      1) direct call to taxoboxList() - preferred if issues with setting frame arguments can be resolved (used in live version)
		      2) experimental version of taxoboxList()
		      3) [ET] using Template:Taxobox/taxonomy
		]]
	    wikiText = wikiText ..'\n|-|\n|' .. p.addAutomaticTaxonomy(frame, taxoboxTable)   -- use #invoke of module
	end
	if info.auto then
		-- use manual taxobox for subgeneric ranks:  subgenus,species, subspecies, variety (also for informal group)
    -- ranks below genys using manual taxobox code 
	    local taxonRanks = { 'subgenus', 'species', 'hybrid',  'subspecies', 'population', 'variety' , 'infraspecies_rank1' , 'infraspecies_rank2', 'informal'} 
		
		wikiText = wikiText .. p.addManualTaxonomy(frame, taxoboxTable, taxonRanks)
	else
		wikiText = wikiText .. p.addManualTaxonomy(frame, taxoboxTable, paramData.taxonRanks) -- just add rows manually
    end
    return wikiText
end
-------------------------------------------------AUTOMATIC TAXONOMY (using invoke of module function) -----------
function p.addAutomaticTaxonomy(frame, taxoboxTable) -- use invoke of module function
	--emulate template: ((taxobox/taxonomy))
	--which uses ((#invoke:Autotaxobox|taxoboxList
	--local autotaxa = require("Module:Autotaxobox") -- also needed for colours so global now

    local bold_first = 'bold'
    if templateArgs['species'] or templateArgs['hybrid'] then 	bold_first = 'link'    end
    if templateArgs['link_parent'] then 	bold_first = 'link'    end

    local args = {	templateArgs['parent'],  -- or tostring( mw.title.getCurrentTitle() ), 
					display_taxa	    = templateArgs['display_taxa'] or 1,
					offset              = templateArgs['offset'] or 0,
					authority           = templateArgs['authority'],
			        parent_authority    = templateArgs['parent_authority'],
			        gparent_authority   = templateArgs['grandparent_authority'],
			        ggparent_authority  = templateArgs['greatgrandparent_authority'],
			        gggparent_authority = templateArgs['greatgreatgrandparent_authority'],
			        virus=templateArgs['virus'],
			        bold_first          = bold_first
	          }
	          
    frame.args = args
   -- templateArgs['debug'] =  mw.dumpObject(frame) 

	local autoTaxonomy = autotaxa.taxoboxList(frame)
	
    if (1==1) then return autoTaxonomy end
    
    local row = taxoboxTable:tag('tr')  --  incompatible with the templates called
                        :wikitext('\n|rank ||taxon name ')  
                        :wikitext('\n'.. autoTaxonomy )  -- autoTaxonomy ends with a new row (|-)at end
                        :wikitext('\n|x ||y ')                 -- so add blank cells to complete extra row
                                                               --   this and affects spacing in taxonomy rows
                        --:wikitext('\n')                      -- spacing fine, newline for table wikitext
                        
                    
    --[[ note:  the output of ((taxobox/showtaxon)) [used by invoke:Autotaxobox|taxoboxList] ends with a newline token
                this and affects spacing in taxonomy rows
                leaving the empty row results in spurious paragraphs above the table
      ]]
	return 
end

----------------------------------------MANUAL TAXONOMY--------------------------------

function p.addManualTaxonomy(frame,taxoboxTable, taxonRanks)
	
	--local parent = mw.getCurrentFrame():getParent()
	--local taxonRanks = data.taxonRanks
	
	-- following ((Paraphyletic group, a table is add to the cell in the classification row
	--local taxonomyTable = mw.html.create('table'):addClass('taxonomy')
	
	-- an alternative is to dispense with the extra table and just add the rows (like taxobox/core), 
	--    which would need colspan=2 on other rows (DONE)
	local taxonomyTable = 	taxoboxTable  
	local wikiText = ""
	
	for k,v in pairs(taxonRanks) do
		
		if templateArgs[v] then
		    local taxonName = templateArgs[v]
		    
		    local taxonRank = frame:expandTemplate{ title = "anglicise rank", args = {taxonRanks[k]} }
		    if v == 'infraspecies_rank1' and templateArgs['infraspecies_rank1_name'] then
		        taxonRank = templateArgs['infraspecies_rank1_name']
		    elseif  v == 'infraspecies_rank2' and templateArgs['infraspecies_rank2_name']then
		        taxonRank = templateArgs['infraspecies_rank2_name']
		    elseif  v == 'population' and templateArgs['population_rank_name']then
		        taxonRank = templateArgs['population_rank_name']
		    end
		    
		    if taxonRanks[k] == "virus_group" then
		    	taxonName = frame:expandTemplate{ title = "Virus group", args = {templateArgs[v]} }
		    --	taxonRank = "Group" -- handled by anglicise rank template
		    end
		    local authorityString = ''
		    if templateArgs[taxonRanks[k]..'_authority'] then
		    	authorityString = '<br /><small>'..templateArgs[taxonRanks[k]..'_authority']..'</small>'
		    end
		    local taxonString = '<span class="'.. taxonRanks[k] ..'">'..taxonName..'</span>'..authorityString

		    local row = taxonomyTable:tag('tr')
	     	row:tag('td'):wikitext(taxonRank..':')
		    row:tag('td'):wikitext(taxonString)
		    --:wikitext('<br /><small>'..parent.args[taxonRanks[k]..'_authority']..'</small>')
            
            wikiText = wikiText  .. '\n|- \n|' .. taxonRank..': \n|' .. taxonString
		end 
	end -- end for loop
	
	--return tostring(taxonomyTable)
	return wikiText
	
end

--[[ ########################### UTILITY FUNCTIONS ###############################################

-----------------------------------------TAXOBOX COLOUR--------------------------------------
   -- gets colour for headers using manual or automatic taxobox schemes
]]	
function p.getTaxoboxColor(frame)
	
	local colorAs = templateArgs['color_as'] or nil
	
	if  info.auto and not templateArgs['virus_group'] then 
	   --[[(1) if color_as|colour_as|color as|colour as set, use template ((Taxobox colour|color_as))
	   	   (2) else use the auto taxonnomy tree to find colour: ((#invoke:Autotaxobox|taxoboxColour| ))
	    ((#invoke:Autotaxobox|taxoboxColour|(({parent|(({genus|((first word|(({taxon|((PAGENAME)) ))
	--]]
		--[[if (templateArgs['color_as'] and templateArgs['color_as'] ~= "") or
		   (templateArgs['colour_as'] and templateArgs['colour_as'] ~= "") or
		   (templateArgs['color as'] and templateArgs['color as'] ~= "") or
		   (templateArgs['colour as'] and templateArgs['colour as'] ~= "") then
		    
		   local colorAs = ""
		   if templateArgs['color_as'] then colorAs = templateArgs['color_as']  end
		   if templateArgs['colour_as']  then colorAs =  templateArgs['colour_as'] end
		   if templateArgs['color as'] then colorAs =  templateArgs['color as'] end
		   if templateArgs['colour as']  then colorAs =  templateArgs['colour as']  end]]
		if colorAs then -- templateArgs['color_as'] and templateArgs['color_as'] ~= ""   then
			
		    return frame:expandTemplate{ title = 'Taxobox colour', args = {colorAs} }
		    
		else
			-- us #invoke:Autotaxobox|taxoboxColour|(({parent))} [parent should be set]
			
			frame.args[1] = templateArgs['parent']
			
	        return autotaxa.taxoboxColour(frame)
			--return	"palegreen"
		end
	else -- use manual taxobox colours
		--((Taxobox colour|(({regnum|(({virus_group|(({unranked_phylum|(({phylum|''[[Incertae sedis]]''))))))))))))))
		if not colorAs then  --templateArgs['color_as']    then
     
			local group =''
			if templateArgs['regnum'] then
				group = templateArgs['regnum']
			elseif templateArgs['virus_group'] then
				group = templateArgs['virus_group']
			elseif templateArgs['unranked_phylum'] then
				group = templateArgs['unranked_phylum']
			elseif templateArgs['phylum'] then
				group = templateArgs['phylum']
			else
				group = "''[[Incertae sedis]]''"          -- TODO check if this is what was desired
			end
            colorAs = group
        end
	    return frame:expandTemplate{ title = 'Taxobox colour', args = {colorAs} }
	end
end
-------------------------------------------------------------------
function p.templateStyle( frame, src )
   return frame:extensionTag( 'templatestyles', '', { src = src } );
   
end	
function p.firstToUpper(str)
    return (str:gsub("^%l", string.upper))
end

function p.test(frame)
	return info.auto	
end

return p
{{bottomLinkPreText}} {{bottomLinkText}}
Module:Biota infobox/core
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?