Модуль:ParamValue2Value
Файл:Green check.svg | Этот модуль оценён как готовый к использованию. Предполагается, что все баги устранены и он готов для широкого использования. Его можно указывать на справочных страницах и рекомендовать к использованию новым участникам. Для его изменения и тестирования, пожалуйста, используйте песочницу. |
Этот модуль позволяет в отдельных случаях избавиться от нужды использовать в неименованных параметрах шаблона костыли типа шаблона {{=}}, HTML-сущности = или ручной нумерации параметров. Он:
- принимает от шаблона параметры, с которыми тот был вызван;
- преобразует именованные параметры вида
параметр=значение
, за исключением тех, имя которых начинается со знака подчёркивания_
, и перечисленных через/
в параметре_exceptions
, в неименованные, соединяя имя параметра и его значение знаком=
и добавляя получившийся параметр в конец списка; - передаёт все параметры в шаблон, указанный в параметре
_pass_to
.
Важно: пока не будет решена проблема искажённого порядка именованных параметров в Scribunto, модуль будет стабильно работать только при одном, и не больше, именованном параметре, который надо преобразовать; иначе порядок следования параметров может изменяться безо всякой логики. Причём параметр, в который может затесаться знак «=», должен быть последним в списке, иначе порядок исказится.
В частности, этот модуль используется в шаблоне {{Сделано}}:
{{#invoke:ParamValue2Value|main|_pass_to=Сделано/форматирование}}
В шаблоне Сделано/formatting осуществляется финальное форматирование, и в результате мы можем вызвать {{Сделано}} со ссылкой в первом параметре, не используя для этого костыли в виде шаблона {{=}}, 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