Documentation for this module may be created at Module:CampaignNavbox/doc
local p = {}
function p.getCampaigns(frame)
-- Fetch the content of the "Campaign" page
local pageTitle = "Campaign"
local page = mw.title.new(pageTitle)
local wikitext = page:getContent()
-- Check if the page content is available
if not wikitext then
return "Error: Unable to fetch content for page '" .. pageTitle .. "'."
end
local campaigns = {
PA = {},
MD = {},
Online = {}
}
local function processRow(row)
-- Extract everything up to the first "]]"
local campaignWithLink = row:match("^.-]]")
-- Extract the location, which is the last element before the end of the row
local location = row:match("[^\n]+$")
if campaignWithLink and location then
campaignWithLink = campaignWithLink:gsub("^|", ""):gsub("'''%s*$", ""):gsub("'''", ""):gsub("|%[%[", "%[%[")
location = location:gsub("^|", ""):gsub("'''%s*$", "")
-- Add the campaign to the relevant location list
if location:find("PA") then
table.insert(campaigns.PA, campaignWithLink)
elseif location:find("MD") then
table.insert(campaigns.MD, campaignWithLink)
elseif location:find("Online") then
table.insert(campaigns.Online, campaignWithLink)
end
end
end
-- Split the wikitext into rows and process each
local rowPattern = "|-%s*(.-)\n|%-"
wikitext = wikitext .. '|-\n' -- Append delimiter to capture the last row
local skipRows = 1 -- Number of rows to skip to get rid of pre-table text
for row in wikitext:gmatch(rowPattern) do
if skipRows > 0 then
-- Skip the row
skipRows = skipRows - 1 -- Decrement the counter
else
-- Process the row (e.g., print it)
processRow(row)
end
end
-- Build the navbox
local navbox = '{| class="wikitable"\n!Location\n!Campaigns\n'
for loc, camps in pairs(campaigns) do
navbox = navbox .. '|-\n|' .. loc .. '\n|' .. table.concat(camps, ', ') .. '\n'
end
navbox = navbox .. '|}'
return navbox
end
return p
