For faster navigation, this Iframe is preloading the Wikiwand page for Модуль:Check for unknown parameters.

Модуль:Check for unknown parameters

Материал из Википедии — свободной энциклопедии

Документация

Этот модуль может быть добавлен в шаблоны для проверки использования неизвестных параметров. Самый простой способ использовать его — поставить в начало шаблона ((subst:cfup))[⇨]. Обратите внимание, что статьи добавятся в категорию не сразу из-за кэширования.

Использование

Базовое использование

((#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))

Здесь arg1, arg2, …, argN — известные параметры. Неименованные параметры также могут быть перечислены: |1|2|argname1|argname2|.... Любой используемый параметр, не входящий в этот список, заставит модуль вернуть то, что передано в параметре unknown. Ключевое слово _VALUE_ будет заменено на название параметра. Это может быть полезным как для сортировки страниц в категории, так и для отображения более полнятной информации.

По умолчанию модуль не различает объявленные пустые параметры и непустые параметры. Поэтому модуль сообщит как о |foo=x, так и о |foo=, если их нет в списке. Для того, чтобы отслеживать только непустые параметры, используйте |ignoreblank=1.

По умолчанию модуль игнорирует пустые неименованные параметры. То есть |2= будет проигнорирован, даже если его нет в списке. Для включения пустых неименованных параметров используйте |showblankpositional=1.

Паттерны Lua

Модуль поддерживает паттерны Lua (схожие с регулярными выражениями), которые могут быть полезными, когда есть много известных параметров, названных по одной системе. Например, код

| 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]*

сработает на всех параметрах из headerNUM, labelNUM, dataNUM, dataNUMa, dataNUMb, dataNUMc, …, rowcellstyleNUM, где NUM — строка цифр.

Генератор параметров

((subst:#invoke:check for unknown parameters|generate
|unknown=[[Категория:Какая-то отслеживающая категория]]
|((subst:NAMESPACE))|((subst:PAGENAME))))

Автоматически перечисляет параметры, находя в коде страницы, на которую подставляется, фрагменты вида (({param (в том числе закомментированные). Параметры |ignoreblank=, |preview=, |showblankpositional= можно указать тут же, они перекинутся при подстановке.

Шаблоны-предупреждения

Существует шаблон-предупреждение ((установлена проверка на неизвестные параметры)), показывающий категорию, в которую включаются статьи с неизвестными параметрами (задаётся параметром |категория=, по умолчанию - Страницы с неизвестными параметрами шаблона ((PAGENAME))).

Шаблон-предупреждение также добавляет шаблон в категорию.

Также существует шаблон ((категория с неизвестными параметрами|имя порождающего шаблона)), который можно поставить на автоматически добавляемую категорию.

Шаблон-предупреждение также добавляет шаблон в надкатегорию

Упрощённое задание

Генератор параметров[⇨] и шаблон-предупреждение[⇨] можно вставить в статью одной правкой, добавив в начало шаблона подстановочный шаблон ((subst:cfup)).

В результате в коде шаблона появится что-то вроде

<noinclude>((Установлена проверка на неизвестные параметры))</noinclude><!--
--><includeonly>((#invoke:check for unknown parameters|check
|unknown=[[Категория:Страницы с неизвестными параметрами шаблона Что-то непонятное с бантиком|_VALUE_]]
|ignoreblank=
|preview=<span class="error">Неизвестный параметр «_VALUE_» шаблона Что-то непонятное с бантиком</span>
|showblankpositional=
|nocat|что-то|непонятное|бантик|котик|пёсик))</includeonly>

Параметр |noambox=1 подставит только вторую часть, без шаблона-предупреждения.

Пример

((Карточка
| вверху = (({name|))}

| метка1 = Height
| текст = (({height|))}

| метка2 = Weight
| текст2 = (({weight|))}

| метка3 = Website
| текст3 = (({website|))}
))<!-- 
  конец карточки, начало отслеживания
-->((#invoke:Check for unknown parameters|check
| unknown = ((#if:((NAMESPACE))||[[Категория:Какая-то отслеживающая категория|_VALUE_]]))
| preview = Неизвестный параметр «_VALUE_»
| name
| height | weight
| website
))
-- 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 trim(s) ~= ''
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 'Found _VALUE_, '
	local preview = frame.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>Предупреждение:</strong> ' .. preview .. ' (это сообщение видно только при предпросмотре страницы).</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 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
				k = mw.ustring.gsub(k, '[^%w\-_ ]', '?')
				table.insert(values, k)
			end
		elseif type(k) == 'number' and 
			knownargs[tostring(k)] == nil and
			( showblankpos or isnotempty(v) )
		then
			local vlen = mw.ustring.len(v)
			v = mw.ustring.sub(v, 1, (vlen < 25) and vlen or 25) 
			v = mw.ustring.gsub(v, '[^%w\-_ ]', '?')
			table.insert(values, k .. ' = ' .. v .. ((vlen >= 25) and ' ...' or ''))
		end
	end

	-- add resuls to the output tables
	if #values > 0 then
		if frame:preprocess( "((REVISIONID))" ) == "" then
			unknown = preview
		end
		for k, 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
			local r =  unknown:gsub('_VALUE_', v)
			table.insert(res, r)
		end
	end

	return table.concat(res)
end

function p.generate (frame)
	local res = '((#invoke:check for unknown parameters|check\n' ..
	'|unknown=' .. frame.args['unknown'] .. '\n'
	local checkerparams = {'ignoreblank', 'preview', 'showblankpositional'}
	for _, v in pairs(checkerparams) do
		if frame.args[v] then
			res = res .. '|' .. v .. '=' .. frame.args[v] .. '\n'
		end
	end
	
	local templatenamespace = frame.args[1]
	local templatetitle = frame.args[2]
	local pagepointer = mw.title.new(templatetitle, templatenamespace) -- именно такой порядок!
	local text = pagepointer.getContent(pagepointer)
	local params = {}
	for param in string.gmatch(text, '\{\{\{([^\|\}]*)') do
		params[#params+1] = mw.text.trim(param)
	end
	table.sort(params)
	for k, v in pairs(params) do
		if k == 1 or v ~= params[k-1] then
			res = res .. '|' .. v
		end
	end
	res = res .. '))'
	
	return res
end

return p
{{bottomLinkPreText}} {{bottomLinkText}}
Модуль:Check for unknown parameters
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Wikiwand 2.0 is here 🎉! We've made some exciting updates - No worries, you can always revert later on