Модуль:ParamValue2Value

З пляцоўкі Вікіпедыя
Jump to navigation Jump to search
(i) Дакументацыя

Гэты модуль дазваляе ў асобных выпадках пазбавіцца ад неабходнасці выкарыстоўваць у неіменаваных параметрах шаблона мыліцы тыпу шаблона {{=}}, HTML-сутнасці = або ручной нумарацыі параметраў. Ён:

  1. прымае ад шаблона параметры, з якімі ён быў выкліканы;
  2. пераўтварае найменныя параметры выгляду параметр=значэнне, за выключэннем тых, імя якіх пачынаецца са знака падкрэсліванне _, з пералічаных праз / у параметры _exceptions, у ненайменныя, злучаючы імя параметру і яго значэнне знакам = і дадаючы атрыманы параметр у канец спісу;
  3. перадае ўсе параметры ў шаблон, паказаны ў параметры _pass_to.

Важна: пакуль не будзе вырашана праблема скажонага парадку найменных параметраў у Scribunto, модуль будзе стабільна працаваць толькі пры 'адным' , і не больш, найменным параметры, які трэба пераўтварыць; інакш парадак прытрымлівання параметраў можа змяняцца без усялякай логікі. Прычым параметр, у які можа зачасацца знак «=», павінен быць апошнім у спісе, інакш парадак сказіцца.

У прыватнасці, ён выкарыстоўваецца ў шаблонах для спасылак на шаблоны з указаннем параметраў, такіх як {{tp}}, {{tc}} і {{tlx}}. Напрыклад, у шаблоне {{tp}} ён выклікаецца так:

{{#invoke:ParamValue2Value|main|_pass_to=tp/formatting}}

У шаблоне tp/formatting ажыццяўляецца фінальнае фарматаванне, і ў выніку мы можам выклікаць {{tp}} з найменнымі параметрамі, не выкарыстоўваючы для гэтага мыліцы ў выглядзе шаблона {{=}}, HTML-сутнасці = або ручной нумарацыі параметраў:

{{tp|шаблон|параметр 1|параметр 2=значэнне}}{{t|параметр 1|параметр 2=значэнне}}

Гл. Таксама

Каб пазбегнуць паломак старонак, якія выкарыстоўваюць гэты модуль, пажадана эксперыментаваць у пясочніцы для модуляў.


local p = {}

-- выклік шаблона, пры памылцы вяртае пусты радок
local function expand(frame, tname, targs)
	local success, result = pcall(
		frame.expandTemplate,
		frame,
		{title = tname, args = targs}
	)
	if success then
		return result
	else
		return ''
	end
end

local function is_exception(arg, exceptions)
	return mw.ustring.find(exceptions, '/' .. arg .. '/')
end

function p.main(frame)
	if not getArgs then
		getArgs = require('Module:Arguments').getArgs
	end
	local args = getArgs(frame, {
		trim = false,
		removeBlanks = false
	})
	local tname = args._pass_to
	local exceptions = args._exceptions and '/' .. args._exceptions .. '/' or ''
	local targs, i = {}, 1
	for k, v in pairs(args) do
		if type(k) == 'number' then --ненайменныя параметры
			targs[i] = v
			i = i+1
		elseif not k:find('^_') and not is_exception(k, exceptions) then --найменныя параметры, выключаючы налады выклікаючага шаблона
			targs[i] = k .. "=" .. v
			i = i+1
		elseif k ~= '_pass_to' and k ~= '_exceptions' then --налады выклікаючага шаблона
			targs[k] = v
		end
	end
	
	return tostring(expand(frame, tname, targs))
end

return p