Модуль:ParamValue2Value
Гьаб модулалъе къимат кьун буго хӀалтӀизабиялъе хӀадураб гӀадин. РикӀкӀун буго киналниги багал лӀугӀизарун ругилан ва гьеб гӀатӀидго хӀалтӀизабизе бегьулилан. Гьеб бихьизабизе бегьула баянгьумеразда ва хӀалтӀизабизе рекомендация кьезе бегьула цӀиял гӀахьалчагӀазе. Гьеб хисизабиялъе ва тестинабиялъе хӀалтӀизабе салулгъамас. |
Этот модуль позволяет в отдельных случаях избавиться от нужды использовать в неименованных параметрах шаблона костыли типа шаблона {{paramValue2Value}}
, HTML-сущности = или ручной нумерации параметров. Он:
- принимает от шаблона параметры, с которыми тот был вызван;
- преобразует именованные параметры вида
параметр=значение
, за исключением тех, имя которых начинается со знака подчёркивания_
, и перечисленных через/
в параметре_exceptions
, в неименованные, соединяя имя параметра и его значение знаком=
и добавляя получившийся параметр в конец списка; - передаёт все параметры в шаблон, указанный в параметре
_pass_to
.
Важно: пока не будет решена проблема искажённого порядка именованных параметров в Scribunto, модуль будет стабильно работать только при одном, и не больше, именованном параметре, который надо преобразовать; иначе порядок следования параметров может изменяться безо всякой логики. Причём параметр, в который может затесаться знак «=», должен быть последним в списке, иначе порядок исказится.
В частности, он используется в шаблонах для ссылок на шаблоны с указанием параметров, таких как {{tp}}, {{tc}} и {{tlc}}. Например, в шаблоне {{tp}} он вызывается так:
{{#invoke:ParamValue2Value|main|_pass_to=tp/formatting}}
В шаблоне tp/formatting осуществляется финальное форматирование, и в результате мы можем вызвать {{tp}} с именованными параметрами, не используя для этого костыли в виде шаблона {{paramValue2Value}}
, HTML-сущности = или ручной нумерации параметров:
{{tp|шаблон|параметр 1|параметр 2=значение}}
→{{шаблон|параметр 1}}
См. также
хисизабизеlocal p = {}
--[=[
Helper function that escapes all pattern characters so that they will be treated
as plain text. Copied from [[:en:Module:String]].
]=]
local function escapePattern(pattern_str)
return mw.ustring.gsub(pattern_str, '([%(%)%.%%%+%-%*%?%[%^%$%]])', '%%%1')
end
-- вызов шаблона, при ошибке возвращает пустую строку
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, '/' .. escapePattern(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