Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Module:Autovirusbox/sandbox

From Wikipedia, the free encyclopedia
require('strict')
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, infraTaxa, infraTaxaRanks, 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' and args["italic_title"] ~= "no"
	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
	-- oops, here goes the problem
	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 infraTaxa = {}
	local infraTaxaRanks = {}
	local targetTaxon = ''
	local targetTaxonRank

	-- populate infraTaxa
	if virus ~= '' then
		infraTaxa[#infraTaxa+1] = virus
		infraTaxaRanks[#infraTaxaRanks+1] = 'virus'
	end
	if serotype ~= '' then
		infraTaxa[#infraTaxa+1] = serotype
		infraTaxaRanks[#infraTaxaRanks+1] = 'serotype'
	end
	if strain ~= '' then
		infraTaxa[#infraTaxa+1] = strain
		infraTaxaRanks[#infraTaxaRanks+1] = 'strain'
		targetTaxon = infraTaxon
		targetTaxonRank = infraTaxonRank
	end
	-- populate targetTaxon using lowest
	if #infraTaxa > 1 then
		targetTaxon = infraTaxa[#infraTaxa]
		targetTaxonRank = infraTaxaRanks[#infraTaxaRanks]
	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..(table.concat(infraTaxa, ''))  == '' then
			autoTaxon = taxon
			autoTaxonType = 'TAXON'
		end
	elseif parent ~= '' and (species ~='' or #infraTaxa > 1) then
		autoTaxon = parent
		autoTaxonType = 'PARENT'
	end
	return autoTaxon, autoTaxonType, infraTaxa, infraTaxaRanks, targetTaxon, targetTaxonRank
end

return p