<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FJts1882%2FSpeciesbox</id>
	<title>Module:Sandbox/Jts1882/Speciesbox - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FJts1882%2FSpeciesbox"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Jts1882/Speciesbox&amp;action=history"/>
	<updated>2026-05-26T10:01:43Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Sandbox/Jts1882/Speciesbox&amp;diff=145650&amp;oldid=prev</id>
		<title>imported&gt;Legoktm: Replace Module:No globals with require( &quot;strict&quot; )</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Jts1882/Speciesbox&amp;diff=145650&amp;oldid=prev"/>
		<updated>2022-10-23T21:09:16Z</updated>

		<summary type="html">&lt;p&gt;Replace &lt;a href=&quot;/research/Module:No_globals&quot; title=&quot;Module:No globals&quot;&gt;Module:No globals&lt;/a&gt; with require( &amp;quot;strict&amp;quot; )&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
-- All Lua modules on Wikipedia must begin by defining a variable that will hold their&lt;br /&gt;
-- externally accessible functions. They can have any name and may also hold data.&lt;br /&gt;
local p = {}  -- exposed variables&lt;br /&gt;
local g = {}  -- these are variables with global scope in this module&lt;br /&gt;
local info = {}&lt;br /&gt;
&lt;br /&gt;
local parameters = require( &amp;#039;Module:Sandbox/Jts1882/Biota infobox/param&amp;#039; ) &lt;br /&gt;
local autotaxa = require(&amp;quot;Module:Autotaxobox&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
    info.auto = &amp;quot;speciesbox&amp;quot; &lt;br /&gt;
    g.args = {}&lt;br /&gt;
   &lt;br /&gt;
   --[[ get parameters, check for aliases, that they are valid for species box, etc&lt;br /&gt;
        uses Module:Biota infocore/param ]]&lt;br /&gt;
    parameters.getArgs(frame, g.args, info) &lt;br /&gt;
    &lt;br /&gt;
    -- process the speciesbox parameters that must be changed before passing to taxobox/core&lt;br /&gt;
    p.speciesbox(frame)&lt;br /&gt;
   &lt;br /&gt;
    -- pass the processed arguments to the Template:Taxobox/core&lt;br /&gt;
    return frame:expandTemplate { title = &amp;#039;Taxobox/core&amp;#039; , args = g.args }&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.speciesbox(frame)&lt;br /&gt;
&lt;br /&gt;
    g.args[&amp;#039;display_taxa&amp;#039;]  = g.args[&amp;#039;display_parents&amp;#039;] or 1  -- note change of parameter name &lt;br /&gt;
   &lt;br /&gt;
    local extinct = &amp;quot;&amp;quot;&lt;br /&gt;
 	if  g.args[&amp;#039;extinct&amp;#039;]  then &lt;br /&gt;
		--extinct = &amp;quot;†&amp;quot;&lt;br /&gt;
		extinct = frame:expandTemplate{ title = &amp;#039;extinct&amp;#039; }  -- use template to get tooltip&lt;br /&gt;
		-- speciesbox also checks the genus taxonomy template for extinct parameter&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
        --[[ {{speciesbox}} gets genus and species from taxon, genus+species or page name&lt;br /&gt;
                1. uses &amp;#039;taxon&amp;#039; paramter ( given as binomial) if available&lt;br /&gt;
                2. otherwise uses &amp;#039;genus&amp;#039; and &amp;#039;species&amp;#039; parameters&lt;br /&gt;
                3. uses page name&lt;br /&gt;
             the genus is used for the &amp;#039;parent&amp;#039; taxon &lt;br /&gt;
            	unless the parent is supplied (e.g. for subgenus)&lt;br /&gt;
            	else use genus (from taxon or genus parameter or page name)&lt;br /&gt;
            	&lt;br /&gt;
           {{Speciesbox}} now using {{Speciesbox/getGenus}} and  {Speciesbox/getSpecies}}&lt;br /&gt;
                code doing similar is commented out below&lt;br /&gt;
           &lt;br /&gt;
           TODO use {{{{Speciesbox/name}}&lt;br /&gt;
        --]]&lt;br /&gt;
       local genus, species = &amp;quot;&amp;quot;, &amp;quot;&amp;quot;&lt;br /&gt;
       &lt;br /&gt;
       genus = frame:expandTemplate{ title = &amp;#039;Speciesbox/getGenus&amp;#039; , args = {g.args[&amp;#039;taxon&amp;#039;], g.args[&amp;#039;genus&amp;#039;]} }&lt;br /&gt;
       species = frame:expandTemplate{ title = &amp;#039;Speciesbox/getSpecies&amp;#039; , args = {g.args[&amp;#039;taxon&amp;#039;], g.args[&amp;#039;genus&amp;#039;]} }&lt;br /&gt;
       &lt;br /&gt;
		if g.args[&amp;#039;taxon&amp;#039;] then&lt;br /&gt;
           &lt;br /&gt;
           -- following line disableas using getGenus/getSpecies templates	       &lt;br /&gt;
           -- genus, species = string.match(templateArgs[&amp;#039;taxon&amp;#039;], &amp;quot;(%S+)%s(%S+)&amp;quot;) -- %S: All characters not in %s&lt;br /&gt;
	       &lt;br /&gt;
	       g.args[&amp;#039;genus&amp;#039;] = genus                 &lt;br /&gt;
	       g.args[&amp;#039;species&amp;#039;] = species            &lt;br /&gt;
	   &lt;br /&gt;
	    elseif g.args[&amp;#039;genus&amp;#039;] and g.args[&amp;#039;species&amp;#039;] then&lt;br /&gt;
	    	&lt;br /&gt;
	    	--[[strip off (disambiguator) to handle multi-kingdom genus e.g.| genus = Acanthocarpus (plant)&lt;br /&gt;
	    	local genusParts =mw.text.split( templateArgs[&amp;#039;genus&amp;#039;], &amp;quot; &amp;quot;, true )     -- string.match( s, &amp;#039;^%a*&amp;#039;&amp;#039;, 1 )&lt;br /&gt;
	    	                                    &lt;br /&gt;
	    	if genusParts[1] ~= &amp;quot;&amp;quot; then &lt;br /&gt;
	    		--templateArgs[&amp;#039;parent&amp;#039;]=templateArgs[&amp;#039;genus&amp;#039;]  -- set parent (NO, parent should override)&lt;br /&gt;
	    		genus = genusParts[1] &lt;br /&gt;
	    	end&lt;br /&gt;
	    	now handled by getGenus/getSpecies templates --]]&lt;br /&gt;
	    	&lt;br /&gt;
	    	g.args[&amp;#039;taxon&amp;#039;] = genus .. &amp;#039; &amp;#039; .. g.args[&amp;#039;species&amp;#039;]&lt;br /&gt;
	&lt;br /&gt;
	    else&lt;br /&gt;
	    	-- TODO no valid taxon yet; use page name&lt;br /&gt;
	    	-- use first word of pagename - handled by {{Speciesbox/getGenus}}&lt;br /&gt;
	    end&lt;br /&gt;
    &lt;br /&gt;
        if not g.args[&amp;#039;parent&amp;#039;] or g.args[&amp;#039;parent&amp;#039;] == &amp;quot;&amp;quot; then&lt;br /&gt;
        	g.args[&amp;#039;parent&amp;#039;] = g.args[&amp;#039;genus&amp;#039;]       -- set parent to genus if not supplied&lt;br /&gt;
        end&lt;br /&gt;
        --[[if not templateArgs[&amp;#039;name&amp;#039;] or templateArgs[&amp;#039;name&amp;#039;] == &amp;quot;&amp;quot; then -- if page name not set&lt;br /&gt;
        	templateArgs[&amp;#039;name&amp;#039;] = &amp;quot;&amp;#039;&amp;#039;&amp;quot; .. templateArgs[&amp;#039;taxon&amp;#039;] .. &amp;quot;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
        end    ]]    	&lt;br /&gt;
        --TODO use {{Speciesbox/name}}&lt;br /&gt;
        g.args[&amp;#039;name&amp;#039;]  = frame:expandTemplate{ title = &amp;#039;Speciesbox/name&amp;#039; , &lt;br /&gt;
        	                           args = { g.args[&amp;#039;name&amp;#039;], g.args[&amp;#039;taxon&amp;#039;], &lt;br /&gt;
        	                                    g.args[&amp;#039;genus&amp;#039;], g.args[&amp;#039;species&amp;#039;],&lt;br /&gt;
        	                                    mw.title.getCurrentTitle().baseText,&lt;br /&gt;
        	                                    g.args[&amp;#039;italic_title&amp;#039; or &amp;#039;yes&amp;#039;]  &lt;br /&gt;
        	          	&lt;br /&gt;
        	          } }&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
		-- set binomial : the speciesbox template seems to use genus and species before taxon name&lt;br /&gt;
		-- &amp;quot;| binomial = &amp;#039;&amp;#039;{{Str letter/trim|{{{genus|{{{taxon|&amp;lt;includeonly&amp;gt;{{PAGENAME}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Acacia&amp;lt;/noinclude&amp;gt;}}}}}}}} {{{species|{{remove first word|{{{taxon|&amp;lt;includeonly&amp;gt;{{PAGENAMEBASE}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Acacia aemula&amp;lt;/noinclude&amp;gt;}}}}}}}}&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
		-- documentation suggest taxon, which is followed here&lt;br /&gt;
		g.args[&amp;#039;binomial&amp;#039;] = &amp;quot;&amp;#039;&amp;#039;&amp;quot; .. g.args[&amp;#039;taxon&amp;#039;] .. &amp;quot;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
		g.args[&amp;#039;binomial_authority&amp;#039;] = g.args[&amp;#039;authority&amp;#039;] or nil&lt;br /&gt;
				&lt;br /&gt;
&lt;br /&gt;
    	-- set species_name e.g. Panthera leo -&amp;gt; P. leo&lt;br /&gt;
    	g.args[&amp;#039;species_name&amp;#039;] = extinct .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. string.sub(g.args[&amp;#039;genus&amp;#039;],1,1) .. &amp;#039;. &amp;#039; .. g.args[&amp;#039;species&amp;#039;] .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
        g.args[&amp;#039;species&amp;#039;] = g.args[&amp;#039;species_name&amp;#039;]&lt;br /&gt;
        &lt;br /&gt;
        g.args[&amp;#039;display_taxa&amp;#039;]   = g.args[&amp;#039;display_taxa&amp;#039;] -1&lt;br /&gt;
        g.args[&amp;#039;offset&amp;#039;] = 1&lt;br /&gt;
	    if g.args[&amp;#039;subgenus&amp;#039;] and g.args[&amp;#039;subgenus&amp;#039;] ~= &amp;quot;&amp;quot;  then&lt;br /&gt;
	    	g.args[&amp;#039;offset&amp;#039;] =  g.args[&amp;#039;offset&amp;#039;] + 1&lt;br /&gt;
			g.args[&amp;#039;subgenus_authority&amp;#039;]              = g.args[&amp;#039;parent_authority&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
    	end&lt;br /&gt;
&lt;br /&gt;
        g.args[&amp;#039;taxon&amp;#039;] = nil -- no longer needed&lt;br /&gt;
        g.args[&amp;#039;genus&amp;#039;] = nil -- {{Taxobox/core}} uses parent&lt;br /&gt;
 &lt;br /&gt;
     g.args[&amp;#039;colour&amp;#039;] = p.getTaxoboxColor(frame)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getTaxoboxColor(frame)&lt;br /&gt;
	&lt;br /&gt;
	local colorAs = g.args[&amp;#039;color_as&amp;#039;] or nil&lt;br /&gt;
	&lt;br /&gt;
	if  info.auto and not g.args[&amp;#039;virus_group&amp;#039;]  then &lt;br /&gt;
	   --[[(1) if color_as|colour_as|color as|colour as set, use template {{Taxobox colour|color_as}}&lt;br /&gt;
	   	   (2) else use the auto taxonnomy tree to find colour: {{#invoke:Autotaxobox|taxoboxColour| }}&lt;br /&gt;
	    {{#invoke:Autotaxobox|taxoboxColour|{{{parent|{{{genus|{{first word|{{{taxon|{{PAGENAME}} }}&lt;br /&gt;
	--]]&lt;br /&gt;
&lt;br /&gt;
		if colorAs then &lt;br /&gt;
			&lt;br /&gt;
		    return frame:expandTemplate{ title = &amp;#039;Taxobox colour&amp;#039;, args = {colorAs} }&lt;br /&gt;
		    &lt;br /&gt;
		else&lt;br /&gt;
			-- us #invoke:Autotaxobox|taxoboxColour|{{{parent}}} [parent should be set]&lt;br /&gt;
			&lt;br /&gt;
			frame.args[1] = g.args[&amp;#039;parent&amp;#039;]&lt;br /&gt;
			&lt;br /&gt;
	        return autotaxa.taxoboxColour(frame)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Legoktm</name></author>
	</entry>
</feed>