Módulo:Cartas

Origem: Wikipédia, a enciclopédia livre.
Documentação do módulo[ver] [editar] [histórico] [purgar]



Utilização[editar código-fonte]

Função exportável :

  • carta(frame) – devolve a cor que corresponde à info caixa, a categoria e o tipo de carta gráfica desejada
    • Parâmetros :
      • infobox= : indica o tipo de infobox (a cada tipo de infobox pode ter as suas cartas gráficas). Valor por padrão : "biografia"
      • tipo= : tipo de carta no marco da infobox escolhida. Valor por padrão : "padrão"
      • categoria= : categoria de cor no marco da infobox e do tipo de carta. Os valores possíveis são "principal" (ou "1" ou "primário"), "secundário" (ou "2"), eventualmente "terciário" (ou "3"). Valor por padrão : "primário"
      • sustenido=sim : a cor devolvida está precedida do sustenido (#). Valor por padrão : ausente (o # não é inserido)

Nota : a opção sustenido=sim põe o problema : o # é interpretado durante o regresso do módulo, gerando um começo de lista numerada. Não utilizar por enquanto.

Função utilizável directamente desde outro módulo :

  • carta_m(infobox, categorie, tpe, sustenido) - função idêntica à precedente, mas chamada directamente desde outro módulo (nota : sustenido pode valer « sim » ou true)

Sub-módulo de dados[editar código-fonte]

Este módulo utiliza o sub-módulo Módulo:Cartas/dados que descreve as cartas gráficas para as diferentes infobox, tipos e categorias.

Formato[editar código-fonte]

O formato deste sub-módulo é o seguinte :

  • uma entrada na tabela data para a cada infobox gerada
    • esta entrada tem que ter como índice o nome da infobox (como passado ao parâmetro infobox=). Isto pode se fazer de dois modos :
      • data.nome = { … } para o infobox « nome », se e só se « nome » só contém das letras não acentuadas (e não tem espaços)
      • data["nome"] = { … } para a infobox « nome », nos demais casos (espaços, acentos, outros caracteres)
    • esta entrada é uma tabela em que a cada elemento descrito um tipo de carta. Construção :
      • indexado pelo tipo como passado ao parâmetro tipo=
      • o conteúdo é uma tabela que contém ao menos duas cadeias de texto, a primeira que corresponde à categoria "primária", a segunda à categoria "secundária" (e eventualmente uma terçeira para a categoria "terciária")
      • deve ter obrigatóriamente uma entrada para o tipo "padrão" correspondente às cores por padrão
      • as entradas devem obrigatóriamente ser em minúsculas. Não faz falta escrever "rugby Seven" mas "rugby seven".
      • se um tipo retoma os mesmos valores que outro tipo faz falta substituir a tabela por uma cadeia de texto que contém o nome do tipo etiqueta (ver exemplos)

Exemplos[editar código-fonte]

No exemplo aqui mostrado cria-se uma carta para a infobox "biografia" e uma carta para a infobox "testes" :

-- Nota : decidir bem qual o separador dos elementos (a virgula em final de linha).
--        O último elemento pode não ter.
-- uma entrada para a infobox "biografia" na tabela "data"
data["biografia"] = {
    -- cria-se uma entrada por "tipo"
    -- um entrada "padrão" obrigatório
    ["padrão"] = { "FFFFFF", "EEEEEE" },  -- uma entrada por categoria (primária, secundária)
    -- para compatibilidade aceita-se "default", idêntico
    ["default"] = "padrão",  -- um texto em lugar de uma tabela indica uma "redireccionamento"
    -- tipo animação e BD asiática"
    ["animação e banda desenhada asiática"] = { "80DDBF", "B0FFD0" },
    -- versão mais curta
    ["abda"] = "animação e banda desenhada asiática"
} -- final de "biografia"

-- uma entrada para a infobox "testes" na tabela "data"
data["testes"] = {
    -- um entrada "padrão" obrigatória
    ["padrão"] = { "AACCEE", "EECCAA", "AAEECC" },  -- uma entrada por categoria (primária, secundária, terciária)
    -- tipo "tipo1"
    ["tipo1"] = { "00CCEE", "00CCAA", "00.ºECC" },
    -- tipo "tipo2"
    ["tipo2"] = { "AACC00", "EECC00", "AAEE00" },
} -- final de "testes"

Exemplos de utilização[editar código-fonte]

  • {{#invoke:Cartas|carta|infobox=testes|tipo=cat1|categoria=primária}} dados « AAAAAA »
  • {{#invoke:Cartas|carta|infobox=testes | tipo=cat1|categoria=secundária}} dados « EEEEFF »
  • {{#invoke:Cartas|carta|infobox=testes | tipo=cat2|categoria=primária}} dados « 777777 »
  • {{#invoke:Cartas|carta|infobox=testes | tipo=cat2|categoria=secundária}} dados « 777700 »

Outra documentação:

--[[
  Módulo que devolve as cores ligadas à carta indicada
--]]

local p = {}

-- carregar o módulo de dados
local success, data = pcall(mw.loadData, "Módulo:Cartas/dados")

--[[
   Função realmente manipulando o pedido (veja os parâmetros abaixo)
   Pode ser chamado diretamente de outro módulo sem passar por
   uma chamada de modelo/módulo no wikicode
   
--]]
function p.carta_m(infobox, categoria, tpe, sustenido)
    -- validação dos parâmetros (valor por padrão)
    if (infobox == nil) then infobox = "biografia" end
    if (categoria == nil) then categoria = "primária" end
    if ((tpe == nil) or (tpe == "")) then tpe = "padrão" end
    -- interromper se o carregamento do módulo de dados falhar
    if (not success) then
        return "<span class=\"error\">Problema interno no módulo (dados)</span>"
    end
    
    -- verificação da existência dos dados para a infobox
    if (data[infobox] == nil) then
        infobox = "biografia"
        if (data[infobox] == nil) then
            -- não deveria acontecer !
            return "<span class=\"error\">Problema interno no módulo (infobox)</span>"
        end
    end

    -- se este tipo contiver uma cadeia de texto (ao invés de uma tabela) é um "redireccionamento", nós substítuimos
    if (type(data[infobox][tpe]) == "string") then
        tpe = data[infobox][tpe]
    end
    -- nós checamos a existência do tipo
    if (data[infobox][tpe] == nil) then
        tpe = "padrão"
        if (data[infobox][tpe] == nil) then
            return "<span class=\"error\">Problema interno no módulo (tipo)</span>"
        end
    end

    -- procuramos o número do pedido da categoria
    local n = 1
    if (categoria == "primária" or categoria == "1" or categoria == "principal") then
        n = 1
    elseif (categoria == "secundária" or categoria == "2") then
        n = 2
    elseif (categoria == "terciária" or categoria == "3") then
        n = 3
        -- a 3ª é opcional
        if (data[infobox][tpe][n] == nil) then
            n = 1
        end
    end -- se não for encontrado, fique em "1"
    
    -- nós verificamos se temos um elemento
    if (data[infobox][tpe][n] == nil) then
        return "<span class=\"error\">Problema interno no módulo (elemento)</span>"
    end
    
    -- nós retornamos o valor
    if ((sustenido == "sim") or (sustenido == true)) then
        return "#" .. data[infobox][tpe][n]
    else
        return data[infobox][tpe][n]
    end
end

--[[
   Retorna a cor correspondente ao gráfico solicitado.
   Os parâmetros são:
     tipo: o tipo de carta de cor solicitada (depende da infobox)
     categoria: primária ou secundária (ou terciário), a sub-cor em questão
     infobox: a infobox em questão (valor padrão: biografia)
     sustenido: defina como "sim" para prefixar o valor retornado com um caractere "#"
   Se a categoria não for especificada ou errônea, a principal será retornada
   Se o tipo não for especificado ou inválido, o "padrão" será retornado
   Se a infobox não for especificada ou inválida, a "biografia" é retornada
 
   Os parâmetros podem vir da chamada para o módulo ou da chamada para o modelo (avaliado nesta ordem).
 
   Nota: invólucro recuperando os parâmetros e chamando a função "real"
--]]
function p.carta(frame)
    local infobox = frame.args["infobox"] or frame:getParent().args["infobox"]
    local categoria = frame.args["categoria"] or frame:getParent().args["categoria"]
    local tpe = mw.ustring.lower(frame.args["tipo"] or frame:getParent().args["tipo"] or "")
    local sustenido = frame.args["sustenido"] or frame:getParent().args["sustenido"]
    
    return p.carta_m(infobox, categoria, tpe, sustenido)
end

return p