Spiderjjr45 (talk | contribs) No edit summary |
Spiderjjr45 (talk | contribs) No edit summary |
||
(12 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 "Campaign Page not found?" |
|||
return "Error: Unable to fetch content for page '" .. pageTitle .. "'." |
|||
end |
end |
||
Line 15: | Line 15: | ||
PA = {}, |
PA = {}, |
||
MD = {}, |
MD = {}, |
||
Twitch = {}, |
|||
Online = {}, |
|||
International = {} |
|||
} |
} |
||
⚫ | |||
local function processRow(row) |
local function processRow(row) |
||
-- Extract |
-- Extract everything up to the first "]]" |
||
local |
local campaignWithLink = row:match("^.-]]") |
||
⚫ | |||
campaign = row:match("|'''%[%[(.-)%]%]'''") -- Fallback for rows without a pipe in the wiki link |
|||
⚫ | |||
⚫ | |||
-- Extract the location, which is the last element before the end of the row |
-- Extract the location, which is the last element before the end of the row |
||
local location = row:match(" |
local location = row:match("[^\n]+$") |
||
if |
if campaignWithLink and location then |
||
campaignWithLink = campaignWithLink:gsub("^|", ""):gsub("'''%s*$", ""):gsub("'''", ""):gsub("|%[%[", "%[%[") |
|||
location = mw.text.trim(location) -- Trim whitespace from the location string |
|||
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("Online") then |
if location:find("Online") then |
||
table.insert(campaigns.Online, |
table.insert(campaigns.Online, campaignWithLink) |
||
end |
end |
||
if location:find("Twitch") then |
|||
table.insert(campaigns.Twitch, campaignWithLink) |
|||
end |
|||
if location:find("🇩🇪") then |
|||
table.insert(campaigns.International, campaignWithLink) |
|||
end |
|||
if 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 = "| |
local rowPattern = "|-%s*(.-)\n|%-" |
||
wikitext = wikitext .. '|-' -- Append delimiter to capture the last row |
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 |
for row in wikitext:gmatch(rowPattern) do |
||
⚫ | |||
⚫ | |||
-- Skip the row |
|||
skipRows = skipRows - 1 -- Decrement the counter |
|||
else |
|||
-- Process the row (e.g., print it) |
|||
⚫ | |||
⚫ | |||
end |
end |
||
Line 56: | Line 72: | ||
end |
end |
||
navbox = navbox .. '|}' |
navbox = navbox .. '|}' |
||
return navbox |
return navbox |
||
end |
end |
Latest revision as of 21:12, 25 April 2024
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 = {}, 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("Online") then table.insert(campaigns.Online, campaignWithLink) end if location:find("Twitch") then table.insert(campaigns.Twitch, campaignWithLink) end if location:find("🇩🇪") then table.insert(campaigns.International, campaignWithLink) end if 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 -- 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