Модуль:ParamValue2Value
Цей модуль позначений як К:реліз, готовий до загального вжитку (26). Він досягнув стадії готовності і вважається, що вільний від помилок і може використовуватись всюди, де знадобиться. Його можна вживати на допоміжних сторінках та інших сторінках Вікіпедії як можливість для навчання новачків. Аби зменшити навантаження на сервери та некоректний показ сторінок, його можна вдосконалювати в рамцях чернеткового тестування, а не з застосуванням спроб і помилок. |
Цей модуль дозволяє в окремих випадках позбутися від потреби використовувати в різних неназваних параметрах шаблону милиці типу шаблону {{=}}, HTML-сутності = або ручної нумерації параметрів. Він:
- приймає від шаблону параметри, з якими той був викликаний;
- перетворює іменовані параметри виду
параметр=значення
, за винятком тих, ім'я яких починаються зі знака підкреслення_
, і перерахованих через/
у параметрі_exceptions
, в неіменовані, поєднуючи ім'я параметра і його значення знаком=
і додаючи отриманий параметр у кінець списку; - передає всі параметри у шаблон, зазначений у параметрі
_pass_to
.
Важливо: поки не буде вирішена проблема спотвореного порядку іменованих параметрів у Scribunto, модуль працюватиме стабільно тільки при одному, і не більше, іменованому параметрі, який треба перетворити; інакше порядок проходження параметрів може змінюватися без будь-якої логіки. Причому параметр, у який може затесатися знак «=», повинен бути останнім у списку, інакше порядок спотвориться.
Зокрема, він використовується в шаблонах для посилань на шаблони із зазначенням параметрів, таких як {{tp}}, {{tc}} і {{tlc}}. Наприклад, у шаблоні {{tp}} він викликається так:
{{#invoke:ParamValue2Value|main|_pass_to=tp/formatting}}
У шаблоні tp/formatting здійснюється фінальне форматування, і в результаті ми можемо викликати {{tp}} з іменованими параметрами, не використовуючи для цього милиці у вигляді шаблону {{=}}, HTML-сутності = або ручної нумерації параметрів:
{{tp|шаблон|параметр 1}}
→ {{шаблон|параметр 1|параметр 2=значення}}
Див. також[ред. код]
Документація вище включена з Модуль:ParamValue2Value/документація. (ред. | історія) Дописувачі можуть експериментувати на підсторінках пісочниця (створити | дзеркало) та тести (створити) цього шаблону. Будь ласка, додавайте категорії до підсторінки /документація. Підсторінки цієї сторінки. |
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