Módulo:Responder a

Wikisource, a biblioteca livre
Documentação do módulo[ver] [editar] [histórico] [purgar]

Este módulo é usado por {{Responder a}} para dar a notificação a um usuário(s) registados que você está a responder na discussão.

Uso de texto wiki[editar]

Este módulo não pode ser usado diretamente de texto wiki. Em vez disso, por favor use a predefinição {{Responder a}}.

Uso dentro de predefinições[editar]

{{#invoke:Responder a|responder a|<noinclude>exemplo=nome exemplo</noinclude>|max=número máximo de nomes}}
  • O parâmetro exemplo define o nome que vai mostrar quando a predefinição é vista. Este parâmetro deve estar em volta de <noinclude>...</noinclude> para que não seja trancluído com a predefinição parente, e a predefinição parente vai mostrar um erro se nenhum nome for fornecido.
  • O Parâmetro {{max define o máximo nomes que a predefinição aceita. Se não for incluído como parâmetro definido, ele assume o valor de 50 (que equivale ao número máximo de Echo que os parâmetros da predefinição vai aceitar). Se o número de nomes for excedido, a predefinição parente devolve uma mensagem de erro.

local p = {}

local function makeError(msg)
    msg ='Erro em [[Predefinição:Responder a]]: ' .. msg
    return mw.text.tag('strong', {['class']='error'}, msg)
end

function p.replyto(frame)
    local origArgs = frame:getParent().args
    local args = {}
    local maxArg = 1
    local usernames = 0
    for k, v in pairs(origArgs) do
        if type(k) == 'number' then
            if mw.ustring.match(v,'%S') then
                if k > maxArg then maxArg = k end
                usernames = usernames + 1
                local title = mw.title.new(v)
                if not title then return makeError('Dados de entrada contêm carateres proibidos.') end
                	
                args[k] = title.rootText
            end
        elseif v == '' and k:sub(0,5) == 'label' then
            args[k] = '&#x200B;'
        else
            args[k] = v
        end
    end

    if usernames > (tonumber(frame.args.max) or 50) then
        return makeError(string.format(
            'Mais de %s nomes especificados.',
            tostring(frame.args.max or 50)
        ))
    else
        if usernames < 1 then
            if frame.args.exemplo then args[1] = frame.args.exemplo
            elseif frame.args.example then args[1] = frame.args.example
            else return makeError('Nome de usuário(a) não fornecido.')
            end
       end
        args['label1'] = args['label1'] or args['label']
        args['prefix'] = args['prefix'] or args['prefixo']
        local isfirst = true
        local outStr = args['prefix'] or '@'
        for i = 1, maxArg do
            if args[i] and (((i == 1 or i == 2) or args['c'] == '') or i ~= maxArg)  then
                if isfirst then
                    isfirst = false
                else
                    if usernames >= 2 and (args['c'] == '' or i ~= maxArg) then outStr = outStr..', ' end
                end
                if 1 == maxArg or i ~= maxArg  then outStr = string.format(
                    '%s[[User:%s|%s]]',
                    outStr,
                    args[i],
                    args['label'..tostring(i)] or args[i]
                ) end
            end
            if args[i] and (i == maxArg and i ~= 1) then
				outStr = outStr.. ' '..(args['c'] or 'e')..string.format(' [[User:%s|%s]]', args[i], args['label'..tostring(i)] or args[i])
            end
        end
        outStr = outStr..(args['p'] or ':')
        return mw.text.tag('span', {['class']='template-ping'}, outStr)
    end
end

return p