Spiderjjr45 (talk | contribs) No edit summary |
Spiderjjr45 (talk | contribs) No edit summary |
||
| (16 intermediate revisions by the same user not shown) | |||
| Line 9: | Line 9: | ||
-- Check if the page content is available |
-- Check if the page content is available |
||
if not wikitext then |
if not wikitext then |
||
return " |
return "Campaign Page not found?" |
||
end |
end |
||
| Line 15: | Line 15: | ||
PA = {}, |
PA = {}, |
||
MD = {}, |
MD = {}, |
||
MN = {}, |
|||
Twitch = {}, |
|||
Online = {}, |
|||
International = {} |
|||
} |
} |
||
-- Function to process each campaign row |
|||
local function processRow(row) |
local function processRow(row) |
||
-- |
-- Extract everything up to the first "]]" |
||
local |
local campaignWithLink = row:match("^.-]]") |
||
-- Extract the location, which is the last element before the end of the row |
|||
local locationPattern = "|(.-)\n" |
|||
local |
local location = row:match("[^\n]+$") |
||
| ⚫ | |||
-- Debug output to check matches (remove this line in production) |
|||
mw.log("Campaign: " .. (campaign or "nil") .. ", Location: " .. (location or "nil")) |
|||
| ⚫ | |||
-- If the campaign name or location are not captured, return without processing |
|||
if not campaign or not location then return end |
|||
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 |
if location:find("PA") then |
||
table.insert(campaigns.PA, |
table.insert(campaigns.PA, campaignWithLink) |
||
end |
end |
||
if location:find("MD") then |
if location:find("MD") then |
||
table.insert(campaigns.MD, |
table.insert(campaigns.MD, campaignWithLink) |
||
end |
end |
||
if location:find(" |
if location:find("MN") then |
||
table.insert(campaigns. |
table.insert(campaigns.MN, campaignWithLink) |
||
end |
|||
if location:find("Online") then |
|||
table.insert(campaigns.Online, campaignWithLink) |
|||
end |
|||
if location:find("Twitch") then |
|||
table.insert(campaigns.Twitch, campaignWithLink) |
|||
end |
|||
if location:find("🇩🇪") or location:find("🏴") then |
|||
table.insert(campaigns.International, campaignWithLink) |
|||
end |
|||
end |
end |
||
end |
end |
||
-- Split the wikitext into rows and process each |
-- 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 |
|||
skipRows = skipRows - 1 |
|||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
end |
end |
||
| Line 57: | Line 75: | ||
end |
end |
||
navbox = navbox .. '|}' |
navbox = navbox .. '|}' |
||
return navbox |
return navbox |
||
end |
end |
||
Latest revision as of 17:22, 5 November 2025
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 "Campaign Page not found?"
end
local campaigns = {
PA = {},
MD = {},
MN = {},
Twitch = {},
Online = {},
International = {}
}
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)
end
if location:find("MD") then
table.insert(campaigns.MD, campaignWithLink)
end
if location:find("MN") then
table.insert(campaigns.MN, campaignWithLink)
end
if location:find("Online") then
table.insert(campaigns.Online, campaignWithLink)
end
if location:find("Twitch") then
table.insert(campaigns.Twitch, campaignWithLink)
end
if location:find("🇩🇪") or location:find("🏴") then
table.insert(campaigns.International, 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
skipRows = skipRows - 1
else
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
