Module:Autovirusbox

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, 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' 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
	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
	-- This is not this module's limitation: go blame Template:Taxobox/core!
	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

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.