Module:Badge display
This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
Usage
[edit]Please rather use the template I've created to use this data. {{Template:Badge display}}
.
Module:MilAward/data
[edit]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
[edit]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:
Black on Thatch beige, Embossed Scales of Justice surrounded by a Laurel Wreath |
Musician (SACB) Black on Thatch beige, Embossed Round badge. Lyre with a wreath |
With different sizes:
Black on Thatch beige, Embossed Rectangular bar (upright) with a black dagger and three black lightning flashes angled diagonally across the blade |
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:
Advanced Black on Thatch beige, Embossed Stirrup with a riding crop with a two black circles surrounding the stirrup |
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
[edit]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.
require('strict')
local p = {}
local data = mw.loadData('Module:Badge display/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]]