Модуль:Check for unknown parameters Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]
{{Модуль:Check for unknown parameters}} (обг. · викор. · ред.) Модуль викликається з шаблонів, які бажають перевіряти власні виклики з невідомими їм параметрами.
ВикористанняБазове{{#invoke:check for unknown parameters|check |unknown=[[Категорія:Шаблон:<Назва шаблону>:Параметр не підтримується]] |arg1|arg2|...|argN}} або щоб відсортувати сторінки з помилками в категорії спостереження за помилковою назвою параметра із повідомленням про помилку у попередньому перегляді {{#invoke:check for unknown parameters|check |unknown=[[Категорія:Шаблон:<Назва шаблону>:Параметр не підтримується |_VALUE_]] |preview=невідомий параметр "_VALUE_" |arg1|arg2|...|argN}} або для повідомлення про помилку у тілі сторінки {{#invoke:check for unknown parameters|check |unknown=<span class="error">Вибачте, я не розумію параметр «_VALUE_»</span> |arg1|arg2|...|argN}} або використати приховані повідомлення про помилку, які можна побачити у вихідному коді HTML, разом з повідомленням у попередньому перегляді {{#invoke:check for unknown parameters|check |unknown=<span class="error" style="display:none">HIDDEN ERROR: Usage of "_VALUE_" is not recognized</span> |preview=unknown parameter "_VALUE_" |arg1|arg2|...|argN}} Тут, By default, the module makes no distinction between a defined-but-blank parameter and a non-blank parameter. Щоб відстежувати лише непорожні параметри вкажіть модулю Регулярні виразиМодуль підтримує патерни Lua (подібні до регулярних виразів), якими зручно користуватися, коли у шаблона багато відомих параметрів за певною маскою назви параметра. Наприклад, {{infobox3cols}} (обг. · викор. · ред.) використовує | regexp1 = header[%d][%d]* | regexp2 = label[%d][%d]* | regexp3 = data[%d][%d]*[abc]? | regexp4 = class[%d][%d]*[abc]? | regexp5 = rowclass[%d][%d]* | regexp6 = rowstyle[%d][%d]* | regexp7 = rowcellstyle[%d][%d]* to match all parameters of the form Приклад{{Infobox | above = {{{name|}}} | label1 = Height | data1 = {{{height|}}} | label2 = Weight | data2 = {{{weight|}}} | label3 = Website | data3 = {{{website|}}} }}<!-- end infobox, start tracking -->{{#invoke:Check for unknown parameters|check | unknown = [[Category:Some tracking category|_VALUE_]] | preview = unknown parameter "_VALUE_" | name | height | weight | website }} Шаблони на Модуль:Check for unknown parametersThe following is a list of templates which invoke this module, with the associated category for each.
-- 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
-- modified at ukwiki
local p = {}
local function trim(s)
return s:match('^%s*(.-)%s*$')
end
local function isnotempty(s)
return s and trim(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(frame.args['ignoreblank'])
local showblankpos = isnotempty(frame.args['showblankpositional'])
local knownargs = {}
local unknown = frame.args['unknown'] or '<s>|_VALUE_=</s>, '-- якщо не задано
local preview = frame.args['preview'] or '<s>|_VALUE_=</s>, '-- завжди попередж. в прев'ю
local values = {}
local res = {}
local regexps = {}
local revisionid = isnotempty( frame:preprocess( "{{REVISIONID}}" ) )
local function nounderscore( pargs )
for k, v in pairs(pargs) do
k = mw.ustring.gsub(k, '[_]', ' ')
end
return pargs
end
-- 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 not isnotempty(preview) 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 i, 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 resuls to the output tables
if #values > 0 then
if not revisionid then unknown = preview
end
for k, v in pairs(values) do
-- Fix odd bug for | = which gets stripped to the empty string and
-- breaks category links
if v == '' then v = ' ' end
local r = unknown:gsub('_VALUE_', v)
table.insert(res, r)
end
if not revisionid then
table.insert(res, 1, '<div class="hatnote" style="color:red; border:1px dashed pink; border-radius:10px;"><strong>Увага:</strong> {{[['
.. tostring(mw.getCurrentFrame():getParent():getTitle()) .. ']]}}: не розумію параметр(и):<br/><span style="font-color:black;font-size:85%;">')
table.insert(res, '</span><br/>(це повідомлення лише в попередперегляді). [[Вікіпедія:Проєкт:Шаблони#Параметри шаблонів|Докладніше]]</div>')
end
end
return table.concat(res)
end
return p
|