Module:Biota infobox/param
Appearance
From Wikipedia, the free encyclopedia
You might want to create a documentation page for this Scribunto module.
Editors can experiment in this module's sandbox (create | mirror) and testcases (create) pages.
Add categories to the /doc subpage. Subpages of this module.
Editors can experiment in this module's sandbox (create | mirror) and testcases (create) pages.
Add categories to the /doc subpage. Subpages of this module.
require('strict') localp={} localtemplateArgs={} localinfo={} localparamData=require('Module:Biota infobox/data')-- contains the taxon ranks in order -- call parameter checking independently of taxobox display functionp.main(frame) p._getArgs(frame) returninfo.parameterCategory end -- get parameters for calling function functionp.getArgs(frame,args,localinfo) templateArgs=args info=localinfo p._getArgs(frame) end -- get the arguments and check them in vaious ways functionp._getArgs(frame) localparents=mw.getCurrentFrame():getParent() localtempArgs={}-- local copy of arguments that will be checked (empty, aliases, invalid) -- get copy of parent arguments, aliasing spaces for underscores fork,vinpairs(parents.args)do iftype(k)=='string'then-- no positional parameters --v = v:match('^%s*(.-)%s*$') -- include trimming (only needed for positional parameters) ifvand(v~="")then-- check for content localj=k:gsub(" ","_")-- substitute spaces with underscore (aliases) tempArgs[j]=v-- parents.args[k] end end end -- do we need to check frame args? fork,vinpairs(frame.args)do ifvandv~=""then--check for content tempArgs[k]=v end end -- parameters that can be set without a value, e.g. |extinct= ifparents.args['extinct']andparents.args['extinct']==""thentemplateArgs['extinct']=""end ifparents.args['auto']orframe.args['auto']then info.auto=parents.args['auto']orframe.args['auto']-- keep template parameters seperate from control flow arguments end ifparents.args['db']orframe.args['db']then info.db=parents.args['db']orframe.args['db']-- keep template parameters seperate from control flow arguments end p.preprocessArgs(tempArgs)-- check aliases, check valid parameters for calling template end functionp.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', ... } ]] functionp.aliasParams(tempArgs) -- change parameters using alias map fork,vinpairs(paramData.aliasMap)do iftempArgs[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 ]] functionp.validateParams(tempArgs) localvalidParamsList=paramData.validList[info.auto] iftype(validParamsList)=='table'then-- if checklist for valid parameters fork,vinpairs(validParamsList)do iftempArgs[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#tempArgsthen-- 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 fork,vinpairs(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 functionp.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 returninfo.parameterCategory-- return tracking categories end -- function that checks for extraneous parameters functionp._checkParameters(tempArgs) localcategoryString="" -- (1) check for speciesbox with taxon and (genus or species) ifinfo.auto=="speciesbox"then iftemplateArgs['taxon']and(templateArgs['genus']ortemplateArgs['species'])then categoryString=categoryString.."[[Category:Speciesboxes using taxon with genus or species parameters]]" end end -- (2) check for manual taxobox parameters fork,vinpairs(paramData.taxonRanks)do--run through manual taxobox parameter list ifv=='genus'thenbreakend-- don't check at genus and below iftempArgs[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 localorphan=false localdependentParams={ 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', } fork,vinpairs(dependentParams)do iftemplateArgs[k]andnottemplateArgs[v]thenorphan=trueend --templateArgs[k] = nil -- delete orphaned variable end iforphanthen categoryString=categoryString.."[[Category:Automatic taxoboxes with orphaned dependent parameters]]" end -- paraphyletic groups using manual taxonomy --categoryString = categoryString .. "[[Category:" .. mw.getCurrentFrame():getParent():getTitle() .."]]" ifmw.getCurrentFrame():getParent():getTitle()=="Template:Paraphyletic group"then ifinfo.auto~="yes"andinfo.auto~="virus"andinfo.auto~="virusbox"andinfo.auto~="hybridbox" andinfo.auto~="speciesbox"andinfo.auto~="subspeciesbox"andinfo.auto~="infraspeciesbox"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 returnp