Módulo:Forumheader

De RuneScape Wiki
Ir para: navegação, pesquisa
Documentação do módulo
Esta documentação é transcluída de Predefinição:Sem documentação/doc. [editar] [atualizar]
Este módulo não possui nenhuma documentação. Por favor, considere adicionar uma documentação em Módulo:Forumheader/doc. [editar]
Módulo:Forumheader's a função main é invocada por Predefinição:Cabeçalhofórum.
Módulo:Forumheader requer Module:Yesno.

-- <nowiki>
-- Implements {{Forumheader}}
--
-- @todo traduzir as categorias
--
-- Categories added by this module:
-- > [[Category:Yew Grove]]
-- > [[Category:Active threads]]
-- > [[Category:Forums excluded from the main page]]
-- > [[Category:Forum archives/$type]]
-- > [[Category:Forum archives with invalid type parameter]]
-- > [[Category:Forum archives with missing type parameter]]
-- > [[Category:Forum archives by date closed]]
-- > [[Category:Forum archives by month/$year]]
-- > [[Category:Forum archives with missing date parameter]]
-- > [[Category:Forum archives with missing name parameter]]
-- > [[Category:Forum archives with missing subject parameter]]
-- > [[Category:Forum archives with invalid closure parameter]]
-- > [[Category:Forum archives with missing closure parameter]]
--

local p = {}
local lang = mw.getContentLanguage()
local title = mw.title.getCurrentTitle()
local yesno = require('Module:Yesno')

-- list of type aliases
local types = {
    community = {
        community = true,
        comm = true
    },
    content = {
        content = true
    },
    discussion = {
        discussion = true,
        discuss = true,
        disc = true
    },
    miscellaneous = {
        miscellaneous = true,
        misc = true
    },
    policy = {
        policy = true
    },
    technical = {
        technical = true,
        tech = true
    },
    ['user-related'] = {
        ['user-related'] = true,
        ['user related'] = true,
        user = true
    },
    ['clan chat'] = {
        ['clan chat'] = true,
        clan = true
    },
    meta = {
        meta = true
    }
}

-- list of closure aliases
local closures = {
    allow = {
        allow = true
    },
    disallow = {
        disallow = true
    },
    ['no consensus'] = {
        ['no consensus'] = true,
        consensus = true,
        ['no con'] = true
    },
    withdrawn = {
        withdrawn = true,
        with = true
    },
    ['no proposal'] = {
        ['no proposal'] = true,
        proposal = true
    },
    ['no formal closure'] = {
        ['no formal closure'] = true,
        ['no closure'] = true,
        none = true
    },
    ['partial allow and partial disallow'] = {
    	['partial allow and partial disallow'] = true,
    	mixed = true
    }
}

--
-- Output archive notice
--
-- @todo convert {{Archive}} to a module
--
local function archived(frame, args)
    local ret = ''

    if yesno(args.arquivo) then
        ret = '{{Arquivo|date=' .. (args.data  or '') ..  '|user=' .. (args.usuario or '') .. '}}'
        ret = frame:preprocess(ret)
    end

    return ret
end

--
-- Output Yew Grove nav
--
local function nav(args)
    local nav = mw.html.create('div')
        :addClass('forumheader')
        :wikitext('<strong>Fóruns:</strong> [[Forum:Taverna Lua Azul|Taverna Lua Azul]] > <strong>' .. title.text .. '</strong>')
        :done()
    
    return tostring(nav)
end

--
-- Category handler
--
local function categories(_args)
    local cats = {}
    local args = {}
    
    -- make blank params behave like missing params
    for k, v in pairs(_args) do
        if v ~= '' then
            args[k] = v
        end
    end
    
    -- yew grove
    table.insert(cats, '[[Categoria:Taverna Lua Azul|' .. title.text .. ']]')

    -- option to hide the forum on the main page
    if yesno(args.mainpage) == false and not yesno(args.arquivo) then
        table.insert(cats, '[[Categoria:Fóruns apagados da página principal]]')
    end

    -- active/closed threads
    if yesno(args.arquivo) then
        -- handle type
        if args.tipo then
            local catType
            local lcType = lang:lc(args.tipo)

            for k, v in pairs(types) do
                if v[lcType] then
                    catType = lang:ucfirst(k)
                    break
                end
            end
    
            if catType then
                table.insert(cats, '[[Categoria:Arquivos do Fórum/' .. catType .. '|'.. title.text .. ']]')
            else
                table.insert(cats, '[[Categoria:Arquivos do fórum com um parâmetro de tipo inválido]]')
            end
        else
            table.insert(cats, '[[Categoria:Arquivos do fórum com um parâmetro faltando]]')
        end
    
        -- date closed
        -- @todo default to revisiontimestamp
        if args.data then
            mw.log(args.data)
            local dateStr = lang:formatDate('c', args.data)
            table.insert(cats, '[[Categoria:Arquivos do fórum por data de fechamento|*' .. dateStr .. ']]')
        
            local year = lang:formatDate('Y', args.data)
            local month = lang:formatDate('n', args.data)
            local day = lang:formatDate('d H:i', args.data)
        
            month = month
                :gsub('10', 'A')
                :gsub('11', 'B')
                :gsub('12', 'C')
        
            table.insert(cats, '[[Categoria:Arquivos do fórum por mês/' .. year .. '|' .. month .. ' ' .. day .. ']]')
        else
            table.insert(cats, '[[Categoria:Arquivos do fórum com parâmetro de data faltando]]')
        end

        
        -- other args
        if not args.usuario then
            -- @todo Should we do anything here?
        end
        
        if not args.nome then
            table.insert(cats, '[[Categoria:Arquivos do fórum com parâmetro de nome faltando]]')
        end
        
        if not args.assunto then
            table.insert(cats, '[[Categoria:Arquivos do fórum com parâmetro de assunto faltando]]')
        end
        
        if args.fechamento then
            local lcClosure = lang:lc(args.fechamento or '')
            local closure
            
            for k, v in pairs(closures) do
                if v[lcClosure] then
                   closure = k
                   break
                end
            end
        
            if not closure then
                table.insert(cats, '[[Categoria:Arquivos do fórum com parâmetro de fechamento inválido]]')
            end
        else
            table.insert(cats, '[[Categoria:Arquivos do fórum com parâmetro de fechamento faltando]]')
        end
    else
        table.insert(cats, '[[Categoria:Tópicos ativos|'.. title.text .. ']]')
    end
    
    return table.concat(cats, '')
end

--
-- Access point
--
function p.main(frame)
    local args = frame:getParent().args
    
    return nav(args) .. archived(frame, args) .. categories(args)
end

return p