Module:CCG
Jump to navigation
Jump to search
Documentation for this module may be created at Module:CCG/doc
local p = {}
local yesno = require('Module:Yesno')
local datatable = mw.loadData('Module:CCG/data')
local function makeCategoryLink(cat)
-- "Category" is split out here so that the module isn't put into the
-- category "%s" when the page is saved.
if mw.title.getCurrentTitle().namespace == 10 then
return ''
end
return string.format('[[%s:%s]]', 'Category', cat)
end
local function makeWikitextError(template, msg)
local ret = string.format(
'<strong class="error">[[Template:%s]] error: %s.</strong>',
template, msg
)
if mw.title.getCurrentTitle().namespace ~= 10 then
ret = ret .. makeCategoryLink('Pages with template parameter errors')
end
return ret
end
local function buildCategory()
if mw.title.getCurrentTitle().namespace == 10 then
return ''
end
return string.format("%s%s", makeCategoryLink('Pages with missing permanent archival links'), makeCategoryLink('Pages with missing permanent archival links/CCG'))
end
function p._main(args)
local image = "[[File:Swccglogolg.png|text-top|x16px|link=Star Wars Customizable Card Game]]"
local title = "[[Star Wars Customizable Card Game|''Star Wars'' Customizable Card Game]]"
local set = args.set
local error = false
if set == nil then
if mw.title.getCurrentTitle().namespace == 10 then
return ''
end
set = '<span style="color: red"><b>No set defined!</b></span>'
error = true
end
local set_data = datatable[set]
if set_data == nil then
if mw.title.getCurrentTitle().namespace == 10 then
return ''
end
set = string.format('<span style="color: red"><b>Unknown set: %s</b></span>', set)
error = true
end
local ret = {string.format("%s %s – ''[[%s]]''", image, title, set)}
if error then
return table.concat(ret)
end
local cardname = args.cardname
local cardtext = args.cardtext
if cardname == nil then
ret[#ret + 1] = makeCategoryLink("CCG usages without cardname")
return table.concat(ret)
end
cardname = cardname:gsub("_", " "):gsub("(Dark Side)", "(Dark)"):gsub("(Light Side)", "(Light)")
if cardtext == nil and string.find(cardname, "''") then
cardtext = cardname
cardname = cardname:gsub("''", "")
end
local card_data = set_data[string.upper(cardname:gsub('é', 'e'):gsub("á", "a"))]
if card_data == nil then
ret[#ret + 1] = string.format(' <small class="plainlinks">(Card: %s)</small>%s', cardname, makeCategoryLink("Unknown CCG cardname values"))
return table.concat(ret)
end
local link = card_data.link
local archivedate = card_data.archivedate
local archiveurl = card_data.archiveurl
local fmt = ' <small class="plainlinks">(Card: [%s %s])%s</small>'
local archive_link = ''
if archiveurl then
archive_link = string.format(' ([%s backup link])', archiveurl, link)
elseif archivedate then
archive_link = string.format(' ([https://web.archive.org/web/%s/%s backup link])', archivedate, link)
elseif args.nobackup or card_data.nobackup then
archive_link = ' (no backup available)'
else
archive_link = string.format(' ([https://web.archive.org/web/%s backup link]) <span style="color: red"><b>not verified!</b></span>%s', link, buildCategory())
end
if cardtext then
ret[#ret + 1] = fmt:format(link, cardtext, archive_link)
else
ret[#ret + 1] = fmt:format(link, cardname, archive_link)
end
return table.concat(ret)
end
-- Trim whitespace from template arguments and store them
local function processArgs(frame, ...)
local args, warnings = {}, {}
local funcs = {...}
for k, v in pairs(frame:getParent().args) do
v = v:match('^%s*(.-)%s*$') -- trim whitespace
if v ~= '' then
args[k] = v
end
end
args.nourl = yesno(args.nourl)
for _, func in ipairs(funcs) do
func(args, warnings)
end
return args, warnings
end
function p.main(frame, ...)
local success, args, warnings = pcall(processArgs, frame, ...)
if not success then
return makeWikitextError("CCG", args)
end
return p._main(args)
end
return p