Módulo:Citar episódio/Testes

local e = require('Módulo:Citação/CS1/Testes')

--[[--------------------------< e . e p i s o d i o >------------------------------------------------------

Este é o método principal da predefinição {{citar episódio}}.

]]

e.episodio = function(frame)
    -- lista de parâmetros usados apenas neste módulo
    frame.whitelist = {
        ['episódio'] = true,
        episodio = true,
        episode = true,

        unique_arguments = true

    }

    -- suporte aos antigos parâmetros "início" e "fim" da versão anterior ao código em Lua
    local airDate
    do
        local tmpFrame = frame:getParent()
        local inicio = tmpFrame.args['início'] or tmpFrame.args.began
        local fim = tmpFrame.args.fim or tmpFrame.args.ended
        if (inicio and fim) then
            airDate = inicio .. ' – ' .. fim
        end
        if inicio or fim then
            frame.whitelist['início'] = true
            frame.whitelist.began = true
            frame.whitelist.fim = true
            frame.whitelist.ended = true
        end
    end

    local config, args, A = tratarArgumentos(frame)
    config.CitationClass = ''
    config.usaIssue = true
    config.naoUsaPage = true
    local sepc = set_style (A.Mode:lower())

    table.insert(cfg.aliases.Issue, 'episódio')
    table.insert(cfg.aliases.Issue, 'episodio')
    table.insert(cfg.aliases.Issue, 'episode')

    cfg.aliases.ChapterURL = cfg.aliases.URL
    --[[ isto é apenas para forçar o upvalue da tabela 'origin' do metadados de
         'A' a carregar o nome do alias usado pelo parâmetro em tal tabela, se o
         atributo A.URL receber atribuição antes disso, A:ORIGIN('URL') será nil
    ]]
    A:ORIGIN('URL')
    A:ORIGIN('Chapter')

    -- verefica wikimarkup em |series-link= ou em |series= quando |series-link= estiver definido
    link_title_ok (A.SeriesLink, A:ORIGIN ('SeriesLink'), A.Series, 'series')

    local s, n = {}, {};
    if is_set(A.Network) then table.insert(n, A.Network); end
    if is_set(A.Station) then table.insert(n, A.Station); end
    A.ID = table.concat(n, sepc .. ' ');

    if not is_set(A.AirDate) then
        A.AirDate = airDate or ''
    end
    if not is_set (A.Date) and is_set (A.AirDate) then
        A.Date = A.AirDate
    end

    --[[ ou um ou outro
    if is_set (A.Season) and is_set (A.SeriesNumber) then
        -- adiciona mensagem de erro
        table.insert( z.message_tail, { set_error('redundant_parameters', {wrap_style
            ('parameter', 'season') .. ' e ' .. wrap_style ('parameter', 'seriesno')}, true)})
        A.SeriesNumber = '' -- esvaziar; preferir |season= sobre |seriesno=
    end]]

    -- monta uma tabela de partes concatenadas depois no parâmetro Series
    if is_set(A.Season) then table.insert(s, wrap_msg ('season', A.Season, sepc == ',')); end
    if is_set(A.SeriesNumber) then table.insert(s, wrap_msg ('series', A.SeriesNumber, sepc == ',')); end
    if is_set(A.Issue) then table.insert(s, wrap_msg ('episode', A.Issue, sepc == ',')); end
    A.Issue = '' -- esvaziar porque este não é um parâmetro único

    A.Chapter = A.Title -- promove o parâmetro title para chapter
    A.ScriptChapter = A.ScriptTitle
    A.TransChapter = A.TransTitle

    A.Title = A.Series -- promove series para title
    A.TitleLink = A.SeriesLink

     -- esta é a concatenação de season, seriesno, episode number
    A.Series = table.concat(s, sepc .. ' ')

    if is_set (A.TitleLink) then
        -- se ambos estão definidos, URL liga episódio;
        if  is_set (A.ChapterURL) then
            -- series liga com A.TitleLink (episodelink -> A.TitleLink -> ChapterLink) feio
            A.Series = '[[' .. A.TitleLink .. '|' .. A.Series .. ']]'
        -- link, mas não URL
        else
            -- ok para wikiligar
            A.Chapter = '[[' .. A.TitleLink .. '|' .. A.Chapter .. ']]'
        end
    end

    A.URL = '' -- esvaziar
    A.TransTitle = ''
    A.ScriptTitle = ''

    -- testa se a citação está sem título
    if not is_set(A.Title) then
        table.insert(z.message_tail, { set_error('citation_missing_title', {'series'}, true)})
    end
    config.TituloDispensavel = true -- não precisa testar isso posteriormente em citation0

    -- Função com o código abstraído
    local B
    A, B = citation0( config, args, A)

    B.tcommon = safe_join( {A.Title, A.TitleNote, A.TitleType, A.Series, A.Transcript
        , A.Language, A.Edition, B.Publisher}, sepc )

    config.CitationClass = 'episode'
    B.config = config

    return textoFinal(A, B)
end

return e