Spiderjjr45 (talk | contribs) No edit summary |
Spiderjjr45 (talk | contribs) No edit summary |
||
| Line 19: | Line 19: | ||
local function processRow(row) |
local function processRow(row) |
||
-- Extract the campaign name |
-- Extract the campaign name, handling both cases |
||
local campaign = row:match("|%[%[(.-) |
local campaign = row:match("|'''%[%[(.-)%]%]'''") -- Matches cases like |'''[[SotS Inc]]''' |
||
if not campaign then |
if not campaign then |
||
campaign = row:match("| |
campaign = row:match("|%[%[(.-)|'''") -- Matches cases like |[[Ancients Alive|'''Ancients Alive''']] |
||
if not campaign then |
|||
campaign = row:match("|%[%[(.-)%]%]") -- Matches cases like |[[Campaign Name]] |
|||
end |
|||
end |
end |
||
-- In case campaign name is still not found, use alternative pattern |
|||
| ⚫ | |||
if not campaign then |
|||
| ⚫ | |||
campaign = row:match("|'''(.-)'''") -- Matches cases without wiki link but with bold formatting |
|||
end |
|||
| ⚫ | |||
| ⚫ | |||
local location = "test" |
|||
if campaign and location then |
if campaign and location then |
||
location = mw.text.trim(location) -- Trim whitespace from the location string |
location = mw.text.trim(location) -- Trim whitespace from the location string |
||
-- Check and add to the relevant location |
|||
if location:find("PA") then |
if location:find("PA") then |
||
table.insert(campaigns.PA, campaign) |
table.insert(campaigns.PA, campaign) |
||
| Line 41: | Line 50: | ||
end |
end |
||
end |
end |
||
-- Split the wikitext into rows and process each |
-- Split the wikitext into rows and process each |
||
Revision as of 15:50, 23 January 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 "Error: Unable to fetch content for page '" .. pageTitle .. "'."
end
local campaigns = {
PA = {},
MD = {},
Online = {}
}
local function processRow(row)
-- Extract the campaign name, handling both cases
local campaign = row:match("|'''%[%[(.-)%]%]'''") -- Matches cases like |'''[[SotS Inc]]'''
if not campaign then
campaign = row:match("|%[%[(.-)|'''") -- Matches cases like |[[Ancients Alive|'''Ancients Alive''']]
if not campaign then
campaign = row:match("|%[%[(.-)%]%]") -- Matches cases like |[[Campaign Name]]
end
end
-- In case campaign name is still not found, use alternative pattern
if not campaign then
campaign = row:match("|'''(.-)'''") -- Matches cases without wiki link but with bold formatting
end
-- Extract the location, which is the last element before the end of the row
-- local location = row:match("|([^|]-)\n?$") -- The '$' ensures that we are at the end of the row
local location = "test"
if campaign and location then
location = mw.text.trim(location) -- Trim whitespace from the location string
-- Check and add to the relevant location
if location:find("PA") then
table.insert(campaigns.PA, campaign)
end
if location:find("MD") then
table.insert(campaigns.MD, campaign)
end
if location:find("Online") then
table.insert(campaigns.Online, campaign)
end
end
end
-- Split the wikitext into rows and process each
local rowPattern = "|%-(.-)\n|%-"
wikitext = wikitext .. '|-' -- Append delimiter to capture the last row
for row in wikitext:gmatch(rowPattern) do
processRow(row)
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
