Module:Biota infobox/param
require('strict')
local p = {}
local templateArgs = {}
local info = {}
local paramData = require( 'Module:Biota infobox/data' ) -- contains the taxon ranks in order
-- call parameter checking independently of taxobox display
function p.main(frame)
p._getArgs(frame)
return info.parameterCategory
end
-- get parameters for calling function
function p.getArgs(frame, args, localinfo)
templateArgs = args
info = localinfo
p._getArgs(frame)
end
-- get the arguments and check them in vaious ways
function p._getArgs(frame)
local parents = mw.getCurrentFrame():getParent()
local tempArgs={} -- local copy of arguments that will be checked (empty, aliases, invalid)
-- get copy of parent arguments, aliasing spaces for underscores
for k,v in pairs(parents.args) do
if type (k) == 'string' then -- no positional parameters
--v = v:match('^%s*(.-)%s*$') -- include trimming (only needed for positional parameters)
if v and (v ~= "") then -- check for content
local j = k:gsub( " ", "_") -- substitute spaces with underscore (aliases)
tempArgs[j]=v -- parents.args[k]
end
end
end
-- do we need to check frame args?
for k,v in pairs(frame.args) do
if v and v ~= "" then --check for content
tempArgs[k]=v
end
end
-- parameters that can be set without a value, e.g. |extinct=
if parents.args['extinct'] and parents.args['extinct'] == "" then templateArgs['extinct'] = "" end
if parents.args['auto'] or frame.args['auto'] then
info.auto = parents.args['auto'] or frame.args['auto'] -- keep template parameters seperate from control flow arguments
end
p.preprocessArgs(tempArgs) -- check aliases, check valid parameters for calling template
end
function p.preprocessArgs(tempArgs) -- handles aliases ajc validates parameters
info.parameterCategory = "" -- initialise empty string for tracking categories
p.aliasParams(tempArgs) -- check parameters for aliases
p.validateParams(tempArgs) -- check parameters for invalid parameters (from allowed list)
p._checkParameters(tempArgs) -- check manual taxon ranks, orphaned parameters and invalid combinations
end
--[[ -------------------------------------------------------------------
function p.aliasParams(tempArgs)
-- alias of spaces to underscores handled in getArgs()
-- uses alias list from the data subpage (param.aliasmap)
-- e.g. local aliasMap = { ['fossil_range'] = 'temporal_range',
['colour_as'] = 'color_as', ... }
]]
function p.aliasParams(tempArgs)
-- change parameters using alias map
for k,v in pairs(paramData.aliasMap) do
if tempArgs[k] then -- if templateArgs has parameter with alias name
tempArgs[v] = tempArgs[k]; -- create new element with alias' value as key
tempArgs[k] = nil; -- delete the alias
end
end
--[[ alias: change parameters using spaces instead of underscores
local localArgs = {} -- Note: adding new keys while iterating over a table gives unpredictable results
for k,v in pairs(templateArgs) do
if type(k)=='string' then
local j,n = string.gsub(k, " ", "_") -- substitute spaces
if n > 0 then --if j ~= k then -- if substitution made
localArgs[j] = v -- create new key with underscore
localArgs[k] = nil; -- delete old key with space
else
localArgs[k] = v
end
end
end
templateArgs = localArgs -- now copy the corrected table
--templateArgs['debug'] = mw.dumpObject (templateArgs)
--]]
end
--[[ -------------------------------------------------------------------------------------------
function p.validateParams(tempArgs)
- uses list of valid parametere accepted by template (from data subpage)
params.validList = {
automatictaxobox = params.validAutomatictaxobox,
speciesbox = params.validSpeciesbox,
subspeciesbox = params.validSubspeciesbox,
infraspeciesbox = params.validInfraspeciesbox, }
- invalid parameters are retaining in tempArgs
]]
function p.validateParams(tempArgs)
local validParamsList = paramData.validList[info.auto]
if type(validParamsList) == 'table' then -- if checklist for valid parameters
for k,v in pairs(validParamsList) do
if tempArgs[v] then -- v contains the name of valid parameter key
templateArgs[v] = tempArgs[v]
tempArgs[v] = nil -- delete so only invalid arguments left in tempArgs
end -- TODO use these for tracking categories (partially done)
end
tempArgs['auto'] = nil -- this if not on tracking list but used internally
if #tempArgs then -- table not empty -- if next(tempArgs) ~= nil then
templateArgs['debug'] = mw.dumpObject(tempArgs)
info.parameterCategory = info.parameterCategory .. "[[Category:Automatic taxobox with unsupported parameters]]"
end
else -- checklist for valid parameters not available for this option
for k,v in pairs(tempArgs) do
templateArgs[k] = v
end
end
--DISABLE the parameter checking is currently being call from the template (this is temporary)
-- this function checks for bad combinations (e.g. genus without species)
--info.parameterCategory = p._checkParameters(frame)
end
-------------------------------------- CATEGORY FUNCTIONS --------------------------------
-- function for external invoke
function p.checkParameters(frame)
p.getArgs(frame) -- populates templateArgs[] with parameters, after alias checking and validation of supported parameters
-- then calls p._checkParameters for addition parameter checking
return info.parameterCategory -- return tracking categories
end
-- function that checks for extraneous parameters
function p._checkParameters(tempArgs)
local categoryString = ""
-- (1) check for speciesbox with taxon and (genus or species)
if info.auto == "speciesbox" then
if templateArgs['taxon'] and (templateArgs['genus'] or templateArgs['species']) then
categoryString = categoryString .. "[[Category:Speciesboxes using taxon with genus or species parameters]]"
end
end
-- (2) check for manual taxobox parameters
for k,v in pairs(paramData.taxonRanks) do --run through manual taxobox parameter list
if v == 'genus' then break end -- don't check at genus and below
if tempArgs[v] then -- use tempArgs as these won't have been validated (produces redundant category?)
categoryString = categoryString .. "[[Category:Automatic taxoboxes using manual rank parameters]]"
end
end
local orphan = false
local dependentParams = {
image_caption = 'image', image_alt = 'image', image_upright = 'image', image_width = 'image',
image2_caption = 'image2', image2_alt = 'image2', image2_upright = 'image2', image2_width = 'image2',
range_map_caption = 'range_map', range_map_alt = 'range_map', range_map_upright = 'range_map', range_map_width = 'range_map',
range_map2_caption = 'range_map2', range_map2_alt = 'range_map2', range_map2_upright = 'range_map2', range_map2_width = 'range_map2',
range_map3_caption = 'range_map3', range_map3_alt = 'range_map3', range_map3_upright = 'range_map3', range_map3_width = 'range_map3',
range_map4_caption = 'range_map4', range_map4_alt = 'range_map4', range_map4_upright = 'range_map4', range_map4_width = 'range_map4',
}
for k,v in pairs(dependentParams) do
if templateArgs[k] and not templateArgs[v] then orphan = true end
--templateArgs[k] = nil -- delete orphaned variable
end
if orphan then
categoryString = categoryString .. "[[Category:Automatic taxoboxes with orphaned dependent parameters]]"
end
-- paraphyletic groups using manual taxonomy
--categoryString = categoryString .. "[[Category:" .. mw.getCurrentFrame():getParent():getTitle() .."]]"
if mw.getCurrentFrame():getParent():getTitle() == "Template:Paraphyletic group" then
if info.auto ~= "yes" and info.auto ~= "virus" then
categoryString = categoryString .. "[[Category:Paraphyletic group infoboxes with manual taxonomy]]"
end
--categoryString = categoryString .. "[[Category:Paraphyletic group infoboxes]]"
end
-- add to category list
info.parameterCategory = info.parameterCategory .. categoryString
--return categoryString
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.
- 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:
- 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.
- 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.
- 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.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.