Module:MasterGunner

require('strict') local p = {} local data = mw.loadData('Module:MasterGunner/data') local getArgs = require('Module:Arguments').getArgs -- South African Master Gunner Data -- Data Fields --     Code: This is just a duplicate of the lookup code, but expressed as a number instead of a string --     Rank: Person's rank. Not wikilinked ---    FirstName: Initials or first name(s) --     Surname: Person's Surname --     Year:   Year appointed Master Gunner --     WikiPage: If the person has a Wiki article, name of the article here --     PostNoms: list of Post Nominal Titles. Stored in Lua table format ie Curly braces with values seperated by commas --     Post: The name of the post that they held when awarded. Commas will be turned into line breaks --     Note: Any additional info about this Gunner. --     RecipCat: Category for recipients. "List of Master Gunners (South Africa)"

function p.Gunner(frame) local output = '' local templateArgs = getArgs(frame) local gunnercode = templateArgs["code"] or nil -- local pagename=templateArgs["pagename"] or nil if not gunnercode then output = ' Error: No code specified ' return output end if data[gunnercode] then output = output .. gunnercode .. ": "		output = output .. data[gunnercode].Code .. " Master Gunner" .. " "		output = output .. data[gunnercode].FirstName .. " " .. data[gunnercode].Surname .. " Year: " .. data[gunnercode].Year .. " "		return output else output = ' Error: code '.. gunnercode .. ' not found ' end return output end

function p.GunnerBox(frame) local output = '' local templateArgs = getArgs(frame) local gunnercode = templateArgs["code"] or nil local imagesize = templateArgs["imagesize"] or '150px' if not gunnercode then output = ' Error: No "code" specified. Use the Gunner number preceded by an A for example, code=A100 ' return output end

if data[gunnercode] then -- Send Info -- Generate wiki table code for the Master Gunner

local float = templateArgs.float or 'none' if float == "left" then float = "floatleft" elseif float == "right" then float = "floatright" elseif float == "none" then float = '' end

local tableCode = '{| class="wikitable ' .. float .. '" style="text-align:center" \n' --		tableCode = tableCode .. "|+ Master Gunner \n" -- Caption tableCode = tableCode .. "|-\n" tableCode = tableCode .. '!colspan=2 style="background:red; color:white;"| Master Gunner: ' .. data[gunnercode].Code .. '\n' tableCode = tableCode .. "|-\n" tableCode = tableCode .. "|colspan=2|\n" tableCode = tableCode .. "|-\n" tableCode = tableCode .. "|colspan=2|" .. p.GetGunner("A" .. data[gunnercode].Code) if string.len(data[gunnercode].Post) > 1 then tableCode = tableCode .. mw.getCurrentFrame:expandTemplate{ title = 'Efn', args = {"Post occupied when award was made: " .. data[gunnercode].Post} } end if string.len(data[gunnercode].Note) > 1 then tableCode = tableCode .. mw.getCurrentFrame:expandTemplate{ title = 'Efn', args = {data[gunnercode].Note} } end tableCode = tableCode .. "\n" tableCode = tableCode .. "|-\n " tableCode = tableCode .. "|colspan=2|Year: '''".. data[gunnercode].Year .. "'''\n" tableCode = tableCode .. "|-\n" local prevgunner="A" .. data[gunnercode].Code -1 .. ""		tableCode = tableCode .. "| ←" .. data[gunnercode].Code -1 .. ": " .. p.GetGunner(prevgunner) .. "\n" local nextgunner="A" .. data[gunnercode].Code +1 .."" tableCode = tableCode .. "| " .. p.GetGunner(nextgunner) .. " :".. data[gunnercode].Code +1 .. "→\n" tableCode = tableCode .. "|}"		return tableCode end return output end function p.GetGunner(gunnercode) local output = '' if not data[gunnercode] then output = "Unknown" else if string.len(data[gunnercode].WikiPage) < 1 then output = data[gunnercode].Rank .. " ".. data[gunnercode].FirstName .. " " .. data[gunnercode].Surname else output = data[gunnercode].Rank .. " " .. "" .. data[gunnercode].FirstName .. " " .. data[gunnercode].Surname .. "" end end return output -- Should never get here, but belts-and -braces... just to be sure end

function p.GunnerTable(frame) -- Data Fields --     Code: This is just a duplicate of the lookup code, but expressed as a number instead of a string --     Rank: Person's rank. Not wikilinked ---    FirstName: Initials or first name(s) --     Surname: Person's Surname --     Year:   Year appointed Master Gunner --     WikiPage: If the person has a Wiki article, name of the article here --     PostNoms: list of Post Nominal Titles. Stored in Lua table format ie Curly braces with values seperated by commas --     Post: The name of the post that they held when awarded. Commas will be turned into line breaks --     Note: Any additional info about this Gunner. --     RecipCat: Category for recipients. "List of Master Gunners (South Africa)" 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 Master Gunners \n" -- Caption	tableCode = tableCode .. "|-\n"	tableCode = tableCode .. "! Code !!Number !! Rank !! Surname !! First Names !! Post !! Year !! Note \n"	-- Iterate through the data in the table "GunnerData"	for code, record in pairs(data) do		-- Generate wiki table code for the Master Gunner		-- TODO: If record.Surname == "Unknown" make the row distinctive somehow.		tableCode = tableCode .. "|-\n"		tableCode = tableCode .. "|" ..code .. "\n"		tableCode = tableCode .. "| " .. record.Code .. "\n"		tableCode = tableCode .. "| " .. record.Rank .. "\n"		if string.len(record.WikiPage) < 1 then			tableCode = tableCode .. "| " .. record.Surname 		else			tableCode = tableCode .. "| " .. "" .. record.Surname .. "" end --	if string.len(record.Post)>1 then --		tableCode = tableCode .. mw.getCurrentFrame:expandTemplate{ title = 'Efn', args = {"Post occupied when award was made: " .. record.Post} } --	end tableCode = tableCode .. "\n" tableCode = tableCode .. "| " .. record.FirstName .. "\n" tableCode = tableCode .. "| " .. string.gsub(record.Post, ",", " - ") .. "\n" tableCode = tableCode .. "| " .. record.Year .. "\n" tableCode = tableCode .. "| " .. record.Note .. " \n" end tableCode = tableCode .. "|}" -- End the table return tableCode end

return p -- Initial Code by John Dovey (13 April 2023) User:BoonDock