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 trim(s)
return s:match('^%s*(.-)%s*$')
end
local function isnotempty(s)
return s and s:match('%S')
end
local function clean(text)
-- Return text cleaned for display and truncated if too long.
-- Strip markers are replaced with dummy text representing the original wikitext.
local pos, truncated
local function truncate(text)
if truncated then
return ''
end
if mw.ustring.len(text) > 25 then
truncated = true
text = mw.ustring.sub(text, 1, 25) .. '...'
end
return mw.text.nowiki(text)
end
local parts = {}
for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do
pos = remainder
table.insert(parts, truncate(before) .. '<' .. tag .. '>...</' .. tag .. '>')
end
table.insert(parts, truncate(text:sub(pos or 1)))
return table.concat(parts)
end
function p.check (frame)
local args = frame.args
local pargs = frame:getParent().args
local ignoreblank = isnotempty(args['ignoreblank'])
local showblankpos = isnotempty(args['showblankpositional'])
local knownargs = {}
local unknown = args['unknown'] or 'Found _VALUE_, '
local preview = args['preview']
local values = {}
local res = {}
local regexps = {}
-- 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 = trim(v)
knownargs[v] = 1
elseif k:find('^regexp[1-9][0-9]*$') then
table.insert(regexps, '^' .. v .. '$')
end
end
if isnotempty(preview) then
preview = '<div class="hatnote" style="color:red"><strong>Aviso:</strong> ' .. preview .. ' (esta mensagem é mostrada somente em antevisão).</div>'
elseif preview == nil then
preview = unknown
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 = false
for _, regexp in ipairs(regexps) do
if mw.ustring.match(k, regexp) then
knownflag = true
break
end
end
if not knownflag and ( not ignoreblank or isnotempty(v) ) then
table.insert(values, clean(k))
end
elseif type(k) == 'number' and
knownargs[tostring(k)] == nil and
( showblankpos or isnotempty(v) )
then
table.insert(values, k .. ' = ' .. clean(v))
end
end
-- add results to the output tables
if #values > 0 then
if frame:preprocess( "{{REVISIONID}}" ) == "" then
unknown = preview
end
for _, v in pairs(values) do
if v == '' then
-- Fix odd bug for | = which gets stripped to the empty string and
-- breaks category links
v = ' '
end
-- avoid error with v = 'example%2' ("invalid capture index")
local r = unknown:gsub('_VALUE_', {_VALUE_ = v})
table.insert(res, r)
end
end
return table.concat(res)
end
return p