FANDOM


    --Copiado de Wookieepedia, autores Master Jonathan y Cade Calrayn.
local p = {}
 
local yesno = require('Módulo:Yesno')
local datatable = mw.loadData('Módulo:CardGameCite/data')
local currentTitle = mw.title.getCurrentTitle()
 
local function makeCategoryLink(cat)
    -- "La categoría "se divide aquí para que el módulo no se coloque en la
    -- categoría "%s" cuando se guarde la página.
    return string.format('[[%s:%s]]', 'Categoría', cat)
end
 
local function makeWikitextError(template, msg)
    local ret = string.format(
        '<strong class="error">[[Plantilla:%s]] error: %s.</strong>',
        template, msg
    )
    if currentTitle.namespace == 0 then
        ret = ret .. makeCategoryLink('Páginas con parámetros erróneos en plantillas')
    end
    return ret
end
 
function p._main(args, warnings, template)
    --[[
    Args:
    set: nombre del artículo establecido
    text: mostrar texto para establecer el enlace del artículo
    link: texto para vincular el nombre de la tarjeta a (posiblemente nula)
    cardname: nombre de la tarjeta (posiblemente nula)
    nourl: booleano que indica enlace externo / interno (verdadero para interno)
    escenario (solo SWGTCG): nombre del escenario
 
    Advertencias: tabla, posiblemente vacía, de mensajes relativos a parámetros desaprobados.
 
    Plantilla: nombre de la plantilla, para buscar los datos en ella
    ]]
    local data = datatable[template]
    local ret = {string.format('%s&nbsp;', data.image)}
    -- El acceso local es más rápido que indexar una tabla cada vez
    local title, noSet = data.title, data.noSet
    if title then
        ret[#ret + 1] = title
        if not noSet then
            ret[#ret + 1] = ' &ndash; '
        end
    end
    if not noSet then
        local set, text = args.set, args.text
        args.set, args.text = nil, nil
        if set == text then
            ret[#ret + 1] = string.format("''[[%s]]''", set)
        else
            ret[#ret + 1] = string.format("''[[%s|%s]]''", set, text)
        end
    end
    local link, cardname = args.link, args.cardname
    args.link, args.cardname = nil, nil
    if link or cardname then
        if link and not cardname then
            return makeWikitextError(
                template, '"link" no se puede usar sin "cardname"'
            )
        end
        local fmt = ' <small class="plainlinks">(Card: %s)</small>'
        if not link then
            ret[#ret + 1] = fmt:format(cardname)
        else
            local cardlink
            if args.nourl then
                if link == cardname then
                    cardlink = string.format('[[%s]]', cardname)
                else
                    cardlink = string.format('[[%s|%s]]', link, cardname)
                end
            else
                cardlink = string.format(
                    '[%s%s %s]', data.urlprefix, link, cardname
                )
            end
            ret[#ret + 1] = fmt:format(cardlink)
        end
    end
    args.nourl = nil
    local scenarioFormat, scenarioName = data.scenario, args.scenario
    if scenarioFormat and scenarioName then
        args.scenario = nil
        ret[#ret + 1] = scenarioFormat:format(scenarioName)
    end
 
    --  En este punto, la tabla args debería estar vacía. Llamando next() en él
    -- devolverá nulo si está realmente vacío, o una clave de cadena si no lo está.
    local key = next(args)
    if key then
        warnings[#warnings + 1] = makeCategoryLink(
            'Plantillas con parámetros no reconocidos'
        )
        ret[#ret + 1] = string.format(
            ' <span style="color: red;">Aviso: Llamada a la Plantilla:%s' ..
            ' contiene un parámetro no reconocido "%s"</span>', template, key
        )
    end
 
    return table.concat(ret) .. table.concat(warnings)
end
 
-- Recorta los espacios en blanco de los argumentos de la plantilla y almacénalos
local function processArgs(frame, ...)
    local args, warnings = {}, {}
    local funcs = {...}
    for k, v in pairs(frame:getParent().args) do
        v = v:match('^%s*(.-)%s*$') -- recorta espacio en blanco
        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
 
-- 
local function archiveWizards(args, warnings)
    if not args.nourl and args.link and args.link:match('wizards.com') then
        args.link = 'http://web.archive.org/web/' .. args.link
    end
end
 
-- Comprueba el parámetro de texto en los parámetros de la plantilla.
-- y también agrega advertencias para el uso del parámetro 1 sin nombre
-- o la falta de un parámetro de texto cuando sea necesario.
local function processSet(args, warnings)
    if not args.set then
        if args[1] then
            args.set = args[1]
            args[1] = nil
            warnings[#warnings + 1] = makeCategoryLink(
                'Páginas que utilizan el parámetro 1 sin nombre en desuso para el juego de cartas'
            )
        else
            error('el parámetro "set" es obligatorio', 0)
        end
    end
end
 
-- Si el parámetro de texto no está presente, recupera el texto que
-- será utilizado para el conjunto después de algunos recortes.
local function generateTextFromSet(args, warnings)
    if not args.text then
        local stop = args.set:find('%s*%(')
        if stop then
            args.text = args.set:sub(1, stop - 1)
        else
            args.text = args.set
        end
    end
end
 
-- Comprueba el parámetro de texto en los parámetros de la plantilla.
-- y también agrega advertencias para el uso del parámetro 2 sin nombre
-- o la falta de un parámetro de texto cuando sea necesario.
local function processText(args, warnings)
    if not args.text then
        if args[2] then
            args.text = args[2]
            args[2] = nil
            warnings[#warnings + 1] = makeCategoryLink(
                'Páginas que utilizan el parámetro 2 sin nombre en desuso para el juego de cartas'
            )
        else
            generateTextFromSet(args, warnings)
        end
    end
end
 
-- Recorta el texto establecido para el conjunto básico de juegos de cartas FFG.
local function processTextFFGTCG(args, warnings)
    generateTextFromSet(args)
    if args.text == 'Star Wars: The Card Game Core Set' then
        args.text = 'Core Set'
    end
end
 
-- Comprueba el parámetro cardname en los parámetros de la plantilla.
-- y también agrega advertencias para el uso del parámetro 2 sin nombre
-- o la falta del parámetro text cuando sea necesario.
local function processCardname(args, warnings)
    if not args.cardname then
        if args[2] then
            args.cardname = args[2]
            args[2] = nil
            warnings[#warnings + 1] = makeCategoryLink(
                'Páginas que utilizan el parámetro 2 en desuso para el nombre de la tarjeta del juego de cartas'
            )
        end
    end
end
 
-- Comprueba y almacena el parámetro url en los parámetros de la plantilla
-- y agrega una advertencia para el uso del parámetro url en desuso.
local function urlToLink(args, warnings)
    if not args.link then
        if args.url then
            args.link = args.url
            args.url = nil
            warnings[#warnings + 1] = makeCategoryLink(
                'Páginas que usan parámetros de URL desaprobados para la Plantilla:SWGTCG'
            )
        end
    end
end
 
local function processSetTextSWPM(args, warnings)
    processSet(args, warnings)
    if not args.text then
        if args[2] then
            args.text = args[2]
            args[2] = nil
            warnings[#warnings + 1] = makeCategoryLink(
                'Páginas que utilizan el parámetro 2 sin nombre en desuso para el juego de cartas'
            )
        elseif args.set == 'Base Set' then
            args.text = args.set
            args.set = 'Star Wars PocketModel TCG: Base Set'
        elseif args.set == 'Clone Wars'
            or args.set == 'Ground Assault'
            or args.set == 'Order 66'
        then
            args.text = args.set
            args.set = args.set .. ' (PocketModels)'
        else
            generateTextFromSet(args, warnings)
        end
    end
end
 
local function main(frame, template, ...)
    local success, args, warnings = pcall(processArgs, frame, ...)
    if not success then
        return makeWikitextError(template, args)
    end
    return p._main(args, warnings, template)
end
 
-- Las siguientes son funciones de llamada para cada plantilla que
-- utiliza este módulo para su plantilla. Para agregar una plantilla,
-- simplemente copia la última entrada y cambia el nombre de la plantilla. 
function p.TCG(frame)
    return main(frame, 'TCG', processSet, processText, archiveWizards)
end
 
function p.CCG(frame)
    return main(frame, 'CCG', processSet, generateTextFromSet)
end
 
function p.FFGTCG(frame)
    return main(frame, 'FFGTCG', processSet,
                processTextFFGTCG, processCardname)
end
 
function p.JKTCG(frame)
    return main(frame, 'JKTCG', processSet, processText)
end
 
function p.SOTE(frame)
    return main(frame, 'SOTE')
end
 
function p.SOTEEMCC(frame)
    return main(frame, 'SOTEEMCC')
end
 
function p.SWGTCG(frame)
    return main(frame, 'SWGTCG', processSet, processText, urlToLink)
end
 
function p.SWPM(frame)
    return main(frame, 'SWPM', processSetTextSWPM)
end
 
function p.Topps(frame)
    return main(frame, 'Topps', processSet, generateTextFromSet,
                processCardname)
end
 
function p.YJCCG(frame)
    return main(frame, 'YJCCG', processSet, generateTextFromSet)
end
 
function p.SWIA(frame)
    return main(frame, 'SWIA', processSet, processText)
end
 
return p
*Nota: Algunos de los enlaces son de afiliados, lo que significa que, sin costo adicional para ti, Fandom ganará una comisión si haces clic y realizas una subscripción. El contenido de la comunidad está disponible bajo CC-BY-SA a menos que se indique lo contrario.

Algunos de los enlaces son de afiliados, lo que significa que, sin costo adicional para ti, Fandom ganará una comisión si haces clic y realizas una subscripción.

Stream the best stories.

Algunos de los enlaces son de afiliados, lo que significa que, sin costo adicional para ti, Fandom ganará una comisión si haces clic y realizas una subscripción.

Get Disney+