Модуль:Check for unknown parameters


Бу модуль билгесез параметрлар кулллануны тикшерү өчен калыпларга кертелә ала. Куллануның иң гади ысулы — {{cfup}}[⇨] калыпы башына урнаштыру. Игътибар итегез, мәкаләләр кэшлану аркасында мәкаләләр төркемгә вакыт үткәч кенә өстәлә.

Куллану

үзгәртү

Гади рәвештә куллану

үзгәртү
{{#invoke:check for unknown parameters|check
|unknown=[[Төркем:Ниндидер күзәтүче төркем]]
|arg1|arg2|...|argN}}

,

яки төркемдәге битләрне параметр буенча сортлау һәм алдан карау режимында күрсәтү өчен:

{{#invoke:check for unknown parameters|check
|unknown=[[Төркем:Ниндидер күзәтүче төркем|_VALUE_]]
|preview=Билгесез параметр «_VALUE_»
|arg1|arg2|...|argN}}

,

яки хата турында ачык күренә торган хәбәрнамә өчен:

Монда arg1, arg2, …, argN — билгеле параметрлар. Исемләнмәгән параметрлар шулай ук санала алалар: |1|2|argname1|argname2|.... Бу исемлеккә кермәгән, кулланышта булган теләсә нинди параметр модульне unknown параметрында тапшырылган мәгънәне кайтарырга мәҗбүр итә. _VALUE_ сүзе параметрның исеменә алмашына. Төркемдәге битләрне сортлау өчен дә, өстәмә мәгълүмат күрсәтү өчен дә бу файдалы булырга мөмкин.

Килешенгәнчә, модуль игълан ителгән буш параметрларны һәм буш булмаган параметрларны аермый. Шуңа күрә, алар исемлектә булмаса, модуль |foo=x турында да, |foo= турында да хәбәр итәр. Буш булмаган параметрларны гына күзәтү өчен |ignoreblank=1 кулланыгыз.

Килешенгәнчә, модуль буш исемләнмәгән параметрларга игътибар итми. Ягъни, исемлектә булмаса да, |2= игътибарсыз калачак.

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= параметрларын монда ук билгеләргә була, алар модульне кертеп куйганда өстәлер.


Бу мәкалә тулысынча яки өлешчә төп нөсхәсе Рус Википедиясендәге «Модуль:Check for unknown parameters/doc» мәкаләсе нигезендә ясалды.
Авторлар исемлеген төп мәкаләнең үзгәртүләр тарихы битеннән карый аласыз.

-- 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>Warning:</strong> ' .. preview .. ' (this message is shown only in 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

return p