Module:BadgeDisplay

Usage wysig

Please rather use the template I've created to use this data. {{Template:Badge Display}}.

Module:MilAward/data wysig

EDITORS PLEASE NOTE: Be VERY careful that you understand exactly what you are doing if you edit the data in the subpage file. If in doubt, add a topic on the talk page or ping me User:BoonDock with your questions.

Structure wysig

Note that I have set this up to use the structure: xx = {Code = "xx", Type = "", Description = "xx", Class="", Variation="", Image="XX", PageLink="XX", Country="ZAR", Note="", Org="SANDF", RecipCat="" },

  • xx : the UNIQUE code we use to access this record.
  • Description : Description to be used at the top of the display-box, so it will be used when producing the link
  • class: intended to be for the class of the badge, it's turning out to be useful for other things as well
  • Variation: Mainly whether it's cloth, metal etc. What it's made out of etc
  • Image : File name of the file for the badge to be displayed
  • PageLink  : Name of Wiki Article which the specific badge will link to
  • Country.  : This should be obvious, but I haven't made a decision whether to use codes or country name
  • org: Organisation
  • RecipCat: Contents of this field are used as a category name. Not being used at the moment


Examples:

Military Law Practitioner
(Qualification)
Black on Thatch beige, Embossed
Scales of Justice surrounded by a Laurel Wreath
Musician
(Qualification/Post)
Musician (SACB)
Black on Thatch beige, Embossed
Round badge. Lyre with a wreath


With different sizes:

61 Mech Operational Service Badge
(Service)
Black on Thatch beige, Embossed
Rectangular bar (upright) with a black dagger and three black lightning flashes angled diagonally across the blade
61 Mech Operational Service Badge
(Service)
Black on Thatch beige, Embossed
Rectangular bar (upright) with a black dagger and three black lightning flashes angled diagonally across the blade


You can also float left and right:

Equestrian Advanced
(Qualification)
Advanced
Black on Thatch beige, Embossed
Stirrup with a riding crop with a two black circles surrounding the stirrup
Explosive Ordnance Disposal (EOD)
(Qualification)
EOD Badge
Gilt and silver
Gilt metal ring and bomb, facing down, with silver coloured lightning flash


What this does is it provides the data to various routines which combine it in different ways.

When a template calls one of the routines in the module, the {{{size}}} is replaced with the second un-named parameter when the template is called. That is passed on to this module to set the size of the image.

The "PageLink" provides the name of an article on Wikipedia with no wikilinking. (In theory it could be a URL, but that's not preferred)

The contents of the Description field can be any text which can be used as shown in the examples. Please be careful with this. Using links or curly braces "{}" or inverted commas '' etc can break that entry as well as, potentially, the rest of the entries in the template.

How this works, is that the first unnamed parameter when you call the template is used as the value to look up the corresponding value in this list. Once that value has been found, then the fields in that line are available to the module. These fields are combined in different ways to produce the specific formatting required for the template that called this module.

For this reason, it's very important that this format is not broken or interfered with!

There are now named parameters.

  • code: The code for the image
  • size: Size of the image
  • float: left, right or none

A NOTE ON COUNTRIES wysig

Separation of countries didn't make sense. It is a lot easier to sort based on a field in the data

Let's please try to keep this as organised as possible. Search the file for your Country's name. If there isn't any mention of it, then create a heading using a comment for your country and add any relevant entries there. Within the country heading, not a bad idea to create sub-headings for different things.

NOTE: the data in this module is now self documenting.

Sjabloon:Sandbox other


require('strict')
local p = {}
local data = mw.loadData('Module:BadgeDisplay/data')
local getArgs = require('Module:Arguments').getArgs
local GlobalTemplateArgs = '' -- define as global (to this module) variable


function p.DisplayImage(frame)
    -- Usage from a template etc:
    -- {{#invoke:BadgeDisplay|DisplayImage
    -- | image = NameOfImage.jpg
    -- | caption = Caption for the image
    -- | description = Description of the image
    -- | float = left/right/center
    -- | width = width in pixels or other units of the table
    -- | size = size in pixels or other units, e.g. "x25px"
    -- }}

    local args = getArgs(frame)

    -- Set default values for optional parameters
    local float = args.float or 'none'
    if float == "left" then 
        float = "floatleft"
    else
        if float == "right" then
            float = "floatright"
        end
    end
    if float == "none" then float = '' end
    
    local size = args.size or 'x200px'
    local width = args.width or ''
    local code =''
    code = args[1] or '' -- Taking a risk. Set code to first unnamed param but then overwriting it if code is named
    if string.len(code) < 2 then 
        code =  args.code
    end
    if not code or '' == code then
		-- return '<span style="color:#d33">Error: missing positional parameter 1</span>'
		return '<span style="color:#d33"> (Invalid Code: <b>' .. code .. '</b> )</span> [[Category:BadgeDisplay Error]]'
	end
    
--	local code = code:upper() -- DO NOT DO THIS. Code is case sensitive -- Converts the first argument to uppercase
	if not data[code] then
		-- return '<span style="color:#d33">Error: invalid positional parameter 1: ' .. code .. '</span>'
		return '<span style="color:#d33"> (Code not found: <b>' .. code .. '</b> )</span> [[Category:BadgeDisplay Error]]'
	end

    -- {Code = "xx", Type = "", Description = "xx", Class="", Variation="", Image="XX", PageLink="XX",  Country="ZAR", Note="", Org="SANDF", RecipCat="" }
    -- Data from the record into local variables
    local Code = data[code].Code
    local Type = data[code].Type
    local Description = data[code].Description
    local Class = data[code].Class
    local Variation = data[code].Variation
    local Image = data[code].Image
    local PageLink = data[code].PageLink
    local Country = data[code].Country
    local Note = data[code].Note
    local Org = data[code].Org
    local caption = ''
    
   if string.len(Image) < 1 then
    Image="Ribbon - Question mark.png"
   end
    local NoTable = args.NoTable or ''
    if string.len(NoTable) > 0 then -- Do not output a table, just the badge
        local output = ''
        output = output .. "[[File:" .. Image .. "|".. size .. "|" .. Description .. "|link=" .. PageLink .. "]]"
        return output -- This will exit the function and stop processing further
    end

    local DescOnly = args.DescOnly or ''
    if string.len(DescOnly) > 0 then -- Do not output a table, just the badge with a description
        if DescOnly ~= "yes" then -- Hidden option to over-ride the description
            Description=DescOnly
        end
        local output = ''
        output = output .. "[[File:" .. Image .. "|".. size .. "|" .. Description .. "|link=" .. PageLink .. "]]"
        output = output .. " [[" .. PageLink .. "|" .. Description .. "]]"
        return output -- This will exit the function and stop processing further
    end

        -- Build the wikitext table
        local wikitext=''
        wikitext = wikitext .. '{| class="wikitable ' .. float .. '" style="width:250px; margin:0 auto;border:none;"\n'
        caption= "[[" .. PageLink .. "|" .. Description .. "]]"
        if string.len(Type) > 1 then
            caption = caption .. "<br />(" .. Type .. ")"
        end
        wikitext = wikitext .. '|+ ' .. caption ..'\n|-\n'
        wikitext = wikitext .. '|style="text-align:center;border:none;"| [[File:' .. Image .. '|' .. size .. '|link=' .. PageLink .. ']]\n|-\n'
        wikitext = wikitext .. '|style="text-align:center;"|' -- .. Description 
        if string.len(Class) > 1 then 
            wikitext = wikitext  .. Class .. " <br />"
        end
        if string.len(Variation) > 1 then
            wikitext = wikitext  .. Variation .. " <br />"
        end
        if string.len(Note) > 1 then
            wikitext = wikitext ..  "<i>" .. Note .. "</i>"
        end
        wikitext = wikitext .. '\n|-\n'
        wikitext = wikitext .. '|}\n'
        return wikitext
end
function p.BadgeTable(frame)
	
	local output = ''
	local templateArgs = getArgs(frame)
	local localfloat = templateArgs["float"] or ''
	if not localfloat then
		localfloat = "left"  -- NOTE TODO: Make the table float according to the value of locafloat ;-)
	end
	local tableCode = '{| class="wikitable sortable" \n'
	tableCode = tableCode .. "|+ List of Badges Available \n" -- Caption
	tableCode = tableCode .. "|-\n"
    -- xx = {Code = "xx", Type = "", Description = "xx", Class="", Variation="", Image="XX", PageLink="XX",  Country="ZAR", Note="", Org="SANDF", RecipCat="" },    
	tableCode = tableCode .. "! Code !! Type !! Description !! Class !! Variation !! Image !! Note !! Country\n"
	-- Iterate through the data in the table "GunnerData"
	for code, record in pairs(data) do
		-- Generate wiki table code for the Badges
		tableCode = tableCode .. "|-\n"
		tableCode = tableCode .. "|" ..code .. "\n"
		-- tableCode = tableCode .. "| " .. record.Code .. "\n"
		tableCode = tableCode .. "| " .. record.Type .. "\n"
		if string.len(record.PageLink) < 1 then
			tableCode = tableCode .. "| " .. record.Description 
		else
			tableCode = tableCode .. "| " .. "[[" .. record.PageLink .. "|" .. record.Description .. "]]"
		end
		tableCode = tableCode .. "\n"
		tableCode = tableCode .. "| " .. record.Class .. "\n"
		tableCode = tableCode .. "| " .. record.Variation .. "\n"
        tableCode = tableCode .. "| [[File:" .. record.Image .. "|80px]]\n"
		tableCode = tableCode .. '| style=\"text-align: left;\"|' .. record.Note .. "\n"
        tableCode = tableCode .. "| " .. record.Country .. "\n"
		
	end
	tableCode = tableCode .. "|}" -- End the table
	return tableCode
end

return p
-- Initial Code by John Dovey (19 April 2023) [[User:BoonDock]]