Модуль:ParamValue2Value
This module is rated as ready for general use. It has reached a mature form and is thought to be bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing. |
Этот модуль позволяет в отдельных случаях избавиться от нужды использовать в неименованных параметрах шаблона костыли типа шаблона {{paramValue2Value}}
, HTML-сущности = или ручной нумерации параметров. Он:
- принимает от шаблона параметры, с которыми тот был вызван;
- преобразует именованные параметры вида
параметр=значение
, за исключением тех, имя которых начинается со знака подчёркивания_
, и перечисленных через/
в параметре_exceptions
, в неименованные, соединяя имя параметра и его значение знаком=
и добавляя получившийся параметр в конец списка; - передаёт все параметры в шаблон, указанный в параметре
_pass_to
.
Важно: пока не будет решена проблема искажённого порядка именованных параметров в Scribunto, модуль будет стабильно работать только при одном, и не больше, именованном параметре, который надо преобразовать; иначе порядок следования параметров может изменяться безо всякой логики. Причём параметр, в который может затесаться знак «=», должен быть последним в списке, иначе порядок исказится.
В частности, этот модуль используется в шаблоне
- багытталды Калып:Tl:
{{#invoke:ParamValue2Value|main|_pass_to=Сделано/форматирование}}
В шаблоне Сделано/formatting осуществляется финальное форматирование, и в результате мы можем вызвать
- багытталды Калып:Tl со ссылкой в первом параметре, не используя для этого костыли в виде шаблона
- багытталды Калып:Tl, HTML-сущности = или ручной нумерации параметров:
{{жасалган|https://ru.wikipedia.org/w/index.php?title=Конгресс_Мексики&diff=47059625&oldid=47059396}}
→
Кошумча маалымат
түзөтүү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