Module:Autovirusbox
Documentation for this module may be created at Module:Autovirusbox/doc
require('Module:No globals') local ItalicTitle = require('Module:Italic title') local p = {} -- functions made public local l = {} -- internal functions, kept separate -- ============================================================================= -- main implements Template:Virusbox; see the documentation of that template -- for details. -- ============================================================================= function p.main(frame) local args if frame.args['direct'] == 'yes' then args = frame.args else args = frame:getParent().args end -- --------------------------------------------------------------------- -- pick up taxobox parameters from the caller that need to be processed; -- most are passed on unchanged -- --------------------------------------------------------------------- local name = args['name'] or '' local taxon = args['taxon'] or '' local parent = args['parent'] or '' local species = args['species'] or '' local strain = args['strain'] or '' local serotype = args['serotype'] or '' local virus = args['virus'] or '' local displayParents = args['display_parents'] or '1' --[[ local authority = args['authority'] or '' local parentAuthority = args['parent_authority'] or '' local gParentAuthority = args['grandparent_authority'] or '' local ggParentAuthority = args['greatgrandparent_authority'] or '' local gggParentAuthority = args['greatgreatgrandparent_authority'] or '' local typeGenusAuthority = args['type_genus_authority'] or '' ]] local subdivision = args['subdivision'] or '' local subdivisionRanks = args['subdivision_ranks'] or '' local subdivisionRef = args['subdivision_ref'] or args['subdivision ref'] or '' -- ------------------------------------------------------ -- set the taxobox parameters determined by this function -- ------------------------------------------------------ local autoTaxon, autoTaxonType, infraTaxon, infraTaxonRank, targetTaxon, targetTaxonRank = l.paramChk(frame, taxon, parent, species, strain, serotype, virus) -- set default taxobox name/title local italicsRequired = frame:expandTemplate{ title = 'Is italic taxon', args = {targetTaxonRank, virus='yes'} } == 'yes' if name == '' then if autoTaxonType == 'ERROR' then name = '<span class="error">ERROR: parameter(s) specifying taxon are incorrect; see [[Template:Virusbox/doc#Usage|documentation]]</span>' else name = targetTaxon if italicsRequired then name = "''" .. targetTaxon .. "''" end end end -- the page name (title) should be italicized if it's the same as the target taxon and that is italicized local currentPage = mw.title.getCurrentTitle() local pagename = currentPage.text if pagename == targetTaxon then if italicsRequired then ItalicTitle._main({}) end end -- is the auto-taxon name bold or linked (i.e. will it be the last row in the taxobox or not)? local boldFirst = 'bold' if autoTaxonType == 'PARENT' then boldFirst = 'link' end -- italicize and link species name, or embolden if nothing below if species ~= '' then if infraTaxon ~= '' then species = "''[["..species.."]]''" else species = "'''''"..species.."'''''" end end -- embolden lowest rank if infraTaxon ~= '' then infraTaxon = "'''"..infraTaxon.."'''" end -- set offset and fix display_parents if there are ranks below autoTaxon local offset = 0 if infraTaxon ~= '' then offset = offset + 1 end if species ~= '' then offset = offset + 1 end if offset ~= 0 then displayParents = tostring(tonumber(displayParents) - offset) end -- fill in a missing subdivision_ranks parameter if subdivision ~= '' and subdivisionRanks == '' then subdivisionRanks = frame:expandTemplate{ title = 'Children rank', args = {targetTaxonRank} } end -- ------------------------------------------------ -- now call Taxobox/core with all of its parameters -- ------------------------------------------------ local res = frame:expandTemplate{ title = 'Taxobox/core', args = { ['edit link'] = 'e', virus = 'yes', colour = frame:expandTemplate{ title = 'Taxobox colour', args = { 'virus' } }, name = name, parent = autoTaxon, bold_first = boldFirst, --[[ authority = authority, parent_authority = parentAuthority, grandparent_authority = gparentAuthority, grandparent_authority = gparentAuthority, greatgrandparent_authority = ggparentAuthority, greatgreatgrandparent_authority = gggparentAuthority, offset = tostring(offset), ]] image = args['image'] or '', image_upright = args['image_upright'] or '', image_alt = args['image_alt'] or '', image_caption = args['image_caption'] or '', image2 = args['image2'] or '', image2_upright = args['image2_upright'] or '', image2_alt = args['image2_alt'] or '', image2_caption = args['image2_caption'] or '', species = species, virus_infrasp = infraTaxon, virus_infrasp_rank = infraTaxonRank, display_taxa = displayParents, type_genus = args['type_genus'] or '', --type_genus_authority = args['type_genus_authority'] or '', type_species = args['type_species'] or '', --type_species_authority = args['type_species_authority'] or '' subdivision_ranks = subdivisionRanks, subdivision_ref = subdivisionRef, subdivision = subdivision, type_strain = args['type_strain'] or '', synonyms = args['synonyms'] or '', synonyms_ref = args['synonyms_ref'] or '', range_map = args['range_map'] or '', range_map_upright = args['range_map_upright'] or '', range_map_alt = args['range_map_alt'] or '', range_map_caption = args['range_map_caption'] or '', } } -- put page in error-tracking category if required if autoTaxonType == 'ERROR' then res = res .. frame:expandTemplate{ title = 'Main other', args = {'[[Category:Virusboxes with incorrect parameters that specify taxon]]'} } end return res end -- ============================================================================= -- paramChk checks the taxon-specifying parameters for consistency, selecting -- the target taxon (the taxon that is the target of the taxobox), the -- infra-taxon (the taxon below species level), if any, and the 'auto-taxon', -- the taxon that is the entry point into the automated taxobox system. -- ============================================================================= function l.paramChk(frame, taxon, parent, species, strain, serotype, virus) -- set target taxon and infra-taxon local infraTaxon = '' local infraTaxonRank = '' local targetTaxon local targetTaxonRank if strain ~= '' then infraTaxon = strain infraTaxonRank = 'strain' targetTaxon = infraTaxon targetTaxonRank = infraTaxonRank elseif serotype ~= '' then infraTaxon = serotype infraTaxonRank = 'serotype' targetTaxon = infraTaxon targetTaxonRank = infraTaxonRank elseif virus ~= '' then infraTaxon = virus infraTaxonRank = 'virus' targetTaxon = infraTaxon targetTaxonRank = infraTaxonRank elseif species ~= '' then targetTaxon = species targetTaxonRank = 'species' else targetTaxon = taxon targetTaxonRank = frame:expandTemplate{ title = 'Taxon info', args = {targetTaxon, 'rank' } } end -- set the autotaxon (entry into the automated taxobox system) if the -- parameters are valid; the default is invalid local autoTaxon = '' local autoTaxonType = 'ERROR' if taxon ~= '' then if parent..species..infraTaxon == '' then autoTaxon = taxon autoTaxonType = 'TAXON' end elseif parent ~= '' and (species ~='' or infraTaxon ~= '') then autoTaxon = parent autoTaxonType = 'PARENT' end -- check for multiple infra-taxa local count = 0 if strain ~= '' then count = count + 1 end if serotype ~= '' then count = count + 1 end if virus ~= '' then count = count + 1 end if count > 1 then autoTaxonType = 'ERROR' end return autoTaxon, autoTaxonType, infraTaxon, infraTaxonRank, targetTaxon, targetTaxonRank end return p