Модуль:ProcessArgs

Материал из Foxhole Wiki
Перейти к навигации Перейти к поиску
Template-info.png Документация

Этот модуль позволяет объединять и нормализовать аргументы. Это также имеет побочный эффект: аргументы становятся реальной таблицей, а не пустой таблицей с метатаблицей для доступа к аргументам. Это позволяет работать оператору #, а также добавлять в таблицу новые значения, которые не будут игнорироваться при итерации

Функция norm нормализует переданные ей аргументы, обрезая пробельные символы и устанавливая пустые аргументы в nil. Если в функцию не передана таблица, то она автоматически получит таблицу аргументов родительского кадра текущего фрейма.

Функция merge Функция merge объединяет две таблицы, заменяя дублирующиеся значения из второй таблицы значениями из первой таблицы, а также выполняет те же действия, что и функция norm, если параметр norm равен true. Если первый параметр не является таблицей, то он используется в качестве значения для параметра norm, при этом функция автоматически получит таблицу аргументов текущего фрейма, переданную напрямую, и объединит ее с таблицей аргументов родительского фрейма.


local p = {}
function p.norm( origArgs )
	if type( origArgs ) ~= 'table' then
		origArgs = mw.getCurrentFrame():getParent().args
	end
	local args = {}
	
	for k, v in pairs( origArgs ) do
		v = mw.text.trim( tostring( v ) )
		if v ~= '' then
			args[k] = v
		end
	end
	
	return args
end

function p.merge( origArgs, parentArgs, norm )
	if type( origArgs ) ~= 'table' then
		norm = origArgs
		local f = mw.getCurrentFrame()
		origArgs = f.args
		parentArgs = f:getParent().args
	end
	local args = {}
	
	for k, v in pairs( origArgs ) do
		v = mw.text.trim( tostring( v ) )
		if not norm or norm and v ~= '' then
			args[k] = v
		end
	end
	
	for k, v in pairs( parentArgs ) do
		v = mw.text.trim( v )
		if ( not norm or norm and v ~= '' ) and not args[k] then
			args[k] = v
		end
	end
	
	return args
end
return p