Module:CCG

From SW420
Revision as of 16:53, 26 August 2021 by imported>Cade Calrayn
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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&nbsp;%s &ndash; ''[[%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