Módulo:Check for unknown parameters
![]() | Este módulo está na categoria sujeitos a proteção de página. Ele é um módulo de alta visibilidade em uso por um grande número de páginas, ou é transcluído muito frequentemente. Por causa do vandalismo ou erros que podem afectar muitas páginas, e mesmo edições triviais podem causar cargas substanciais nos servidores, ele está protegido de editar. |
![]() | Este módulo é usado em aproximadamente 96 000 páginas. (Ver Wikipedia:Predefinições em alto risco) Para evitar sobrecargas desnecessárias ao servidor e outros transtornos, quaisquer mudanças devem ser previamente testadas, seja na subpágina de testes deste módulo, na subpágina de testes de módulos (ou ainda em sua subpágina de testes). Por favor, sempre considere expor eventuais mudanças na página de discussão, antes de implementá-las. |
![]() | Este módulo depende dos seguintes outros módulos: |
Este módulo pode ser anexado a uma predefinição para verificar o uso de parâmetros desconhecidos. Diferentemente de muitos outros módulos, este módulo não é implementado por uma predefinição.
Uso
Uso básico
{{#invoke:Check for unknown parameters|check
|unknown=[[Categoria:Alguma categoria de manutenção]]
|arg1|arg2|arg3|argN}}
ou para classificar as entradas na categoria de manutenção por parâmetro com uma mensagem de erro de visualização
{{#invoke:Check for unknown parameters|check
|unknown=[[Categoria:Alguma categoria de manutenção|_VALUE_]]
|preview=parâmetro desconhecido "_VALUE_"
|arg1|arg2|...|argN}}
ou para uma mensagem de erro vermelha explícita
{{#invoke:Check for unknown parameters|check
|unknown=<span class="error">Desculpe, eu não reconheço _VALUE_</span>
|arg1|arg2|...|argN}}
Aqui, arg1
, arg2
, ..., argN
, são os parâmetros conhecidos. Parâmetros sem nome (posicionais) também podem ser adicionados: |1|2|nomedoarg1|nomedoarg2|...
. Qualquer parâmetro que for usado, mas não estiver nesta lista, fará com que o módulo retorne o que for passado com o parâmetro unknown
. A palavra-chave _VALUE_
, se for utilizada, será alterada para o nome do parâmetro. Isso é útil tanto para classificar as entradas em uma categoria de rastreamento quanto para fornecer informações mais explícitas.
Por padrão, o módulo não faz distinção entre um parâmetro definido, mas em branco, e um parâmetro que não está em branco. Isto é, tanto |foo=x
quanto |foo=
, se não forem listados, são reportados. Para rastrear somente parâmetros que não estiverem em branco, use |ignoreblank=1
.
Por padrão, o módulo ignora os parâmetros posicionais em branco. Ou seja, um |2=
que não estiver listado é ignorado. Para incluir parâmetros posicionais em branco no rastreamento use |showblankpositional=1
.
Padrões Lua
Este módulo suporta padrões Lua (semelhante a expressões regulares), que são úteis quando existem muitos parâmetros conhecidos que usam um padrão sistemático. Por exemplo, Infobox3cols
usa
regexp1 = "header[%d]+",
regexp2 = "label[%d]+",
regexp3 = "data[%d]+[abc]?",
regexp4 = "class[%d]+[abc]?",
regexp5 = "rowclass[%d]+",
regexp6 = "rowstyle[%d]+",
regexp7 = "rowcellstyle[%d]+",
para corresponder a todos os parâmetros do formulário headerNUM
, labelNUM
, dataNUM
, dataNUMa
, dataNUMb
, dataNUMc
, ..., rowcellstyleNUM
, onde NUM é uma sequência (string) de dígitos.
Exemplo
{{Infobox
| above = {{{name|{{{nome|}}}}}}
| label1 = Altura
| data1 = {{{height|{{{altura|}}}}}}
| label2 = Peso
| data2 = {{{weight|{{{peso|}}}}}}
| label3 = Website
| data3 = {{{website|}}}
}}<!--
Término da caixa de informações, início do rastreamento
-->{{#invoke:Check for unknown parameters|check
| unknown = {{Testes outro|[[Categoria:Alguma categoria de manutenção|_VALUE_]]}}
| preview = parâmetro "_VALUE_" desconhecido
| name | nome
| height | altura
| weight | peso
| website
}}
Chamada de dentro de código Lua
Veja o final de Rugby box para um exemplo simples ou Infobox3cols ou Flag para exemplos mais complicados.
-- This module may be used to compare the arguments passed to the parent
-- with a list of arguments, returning a specified result if an argument is
-- not on the list
local p = {}
local function isnotempty(s)
return s and s:match( '^%s*(.-)%s*$' ) ~= ''
end
function p.check (frame)
local args = frame.args
local pargs = frame:getParent().args
local ignoreblank = isnotempty(frame.args['ignoreblank'])
local checkpos = isnotempty(frame.args['checkpositional'])
local knownargs = {}
local unknown = 'Found _VALUE_, '
local res = {}
local regexps = {}
local comments = {}
local commentstr = ''
-- create the list of known args, regular expressions, and the return string
for k, v in pairs(args) do
if type(k) == 'number' then
v = mw.ustring.gsub(v, '^%s*(.-)%s*$', '%1')
knownargs[v] = 1
else
if (k == 'unknown' and type(v) == 'string') then
unknown = v
elseif (mw.ustring.match(k, '^regexp[%d]*$') and type(v) == 'string') then
table.insert(regexps, '^' .. v .. '$')
end
end
end
-- loop over the parent args, and make sure they are on the list
for k,v in pairs(pargs) do
if (type(k) == 'string' and knownargs[k] == nil) then
local knownflag = nil
for r = 1,#regexps do
if( mw.ustring.match(k,regexps[r]) ) then
knownflag = 1
end
end
if( (not knownflag) and ( (not ignoreblank) or (ignoreblank and isnotempty(v)) ) ) then
k = mw.ustring.gsub(k, '[^%w\-_ ]', '?')
local r = mw.ustring.gsub(unknown, '_VALUE_', k)
table.insert(res, r)
table.insert(comments, '"' .. k .. '"')
end
elseif(checkpos and type(k) == 'number' and knownargs[tostring(k)] == nil) then
if( (not ignoreblank) or (ignoreblank and isnotempty(v)) ) then
local r = mw.ustring.gsub(unknown, '_VALUE_', k)
table.insert(res, r)
table.insert(comments, '"' .. k .. '"')
end
end
end
if(#comments > 0) then
commentstr = '<!-- Module:Check for unknown parameters results: ' ..
table.concat(comments, ', ') .. '-->'
end
return table.concat(res) .. commentstr
end
return p