Модуль:ExampleList
Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]
Цей модуль позначений як К:реліз, готовий до загального вжитку (27). Він досягнув стадії готовності і вважається, що вільний від помилок і може використовуватись всюди, де знадобиться. Його можна вживати на допоміжних сторінках та інших сторінках Вікіпедії як можливість для навчання новачків. Аби зменшити навантаження на сервери та некоректний показ сторінок, його можна вдосконалювати в рамцях чернеткового тестування, а не з застосуванням спроб і помилок. |
Реалізація шаблонів {{стіс прикладів}} і {{таблиця прикладів}}, див. їх документацію.
Див. також ред.
Документація вище включена з Модуль:ExampleList/документація. (ред. | історія) Дописувачі можуть експериментувати на підсторінках пісочниця (створити | дзеркало) та тести (створити) цього шаблону. Будь ласка, додавайте категорії до підсторінки /документація. Підсторінки цієї сторінки. |
local p = {}
-- використовується для того, щоб можна було видаляти елементи з таблиці
local function copy(other)
local res = {}
for k, v in pairs(other) do
res[k] = v
end
return res
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
--return frame:expandTemplate({title = tname, args = args})
end
function p.main(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
yesno = require('Module:Yesno')
local trim = not (yesno(frame:getParent().args.trim or frame:getParent().args._trim, false) == false) -- за замовчуванням true
local args = copy(getArgs(frame, {trim = trim, removeBlanks = false})) -- copy(frame.args)
local tname = args.t or args._t or args.template or args._template
local opener = args.opener or args._opener
local sep = args.sep or args._sep
local prefix = args.prefix or args._prefix
local postfix = args.postfix or args._postfix
local style = args.style or args._style
local nobr = args.nobr or args._nobr
local nocat = args.nocat or args._nocat
local spaced = args.spaced or args._spaced
local comment_sep = args.comment_sep or args._comment_sep
local between = args.between or args._between
local inthemiddle = yesno(args.inthemiddle or args._inthemiddle, false)
local wide = yesno(args.wide or args._wide, false)
if not opener then
if style == 'wikitable' then
opener = '|-\n| '
elseif style == 'pre' or style == '*pre' or style == 'pre↓' or style == '*pre↓' then
opener = ''
if between == nil and (style == '*pre' or style == '*pre↓') then
if mw.isSubsting() then
between = '{{^|3em}}'
else
between = '<div style="margin-top:3em"></div>'
end
end
else
opener = '* '
end
end
if between == nil and (style == 'pre' or style == '*pre' or style == 'pre↓' or style == '*pre↓') then
if mw.isSubsting() then
between = '{{^|2em}}'
else
between = '<div style="margin-top:2em"></div>'
end
end
if tname == '' or tname == nil then -- при опущеному першому параметрі беремо ім'я шаблону з назви сторінки
local lang = mw.language.new('uk')
local currentTitle = mw.title.getCurrentTitle().rootText
if (lang:uc(currentTitle) ~= currentTitle and
not mw.ustring.match(currentTitle, '[а-я]:[А-Я]') -- Книга:Літературна спадщина
) or
#currentTitle == 1
then
tname = lang:lcfirst(currentTitle)
else
tname = currentTitle
end
end
-- Дізнаємося, чи заповнене десь поле коментаря
local are_comments = false
for k, v in pairs(args) do
local pre_targs = {}
if type(k) == 'number' then
if v ~= '' then
pre_targs = mw.text.split(v, '\\')
for k2, v2 in pairs(pre_targs) do
local equals_pos
if v2:sub(1, 1) == '_' and v2:find('=') then -- параметри налаштувань шаблону {{приклад}}
equals_pos = v2:find('=')
end
if equals_pos then
local param = v2:sub(1, equals_pos - 1)
if param == '_comment' then are_comments = true end
end
end
end
end
end
local content, i = '', 0
for k, v in pairs(args) do
local pre_targs, targs = {}, {}
if type(k) == 'number' then
i = i + 1
if are_comments then
targs._comment = '' -- значення за замовчуванням
end
if v ~= '' then
pre_targs = mw.text.split(v, '\\')
for k2, v2 in pairs(pre_targs) do
local equals_pos
if v2:sub(1, 1) == '_' and v2:find('=') then -- параметри налаштувань шаблону {{приклад}}
equals_pos = v2:find('=')
end
if equals_pos then
local param = v2:sub(1, equals_pos - 1)
local value = v2:sub(equals_pos + 1)
targs[param] = value
else
if v2:sub(1, 5) == '_' then
targs[k2] = v2:gsub('_', '_')
else
targs[k2] = v2
end
end
end
end
table.insert(targs, 1, tname)
targs._sep, targs._style, targs._nobr, targs._nocat, targs._spaced, targs._comment_sep, targs._prefix, targs._postfix
= sep, style, nobr, nocat, spaced, comment_sep, prefix, postfix
local adjusted_opener
if style == 'pre' and opener == '*' and targs._before == nil then
adjusted_opener = ''
targs._style = '*pre'
else
if style == 'pre' and opener == '*' then
if mw.isSubsting() then
targs._before = targs._before .. '{{^|-0.5em}}'
else
targs._before = targs._before .. '<div style="margin-top:-0.5em"></div>'
end
end
adjusted_opener = opener == '*' and '* ' or opener
end
--[[if not targs._style then
targs._style = style
end]]
local exampleCode
if mw.isSubsting() then
exampleCode = '{{приклад'
for name, value in pairs(targs) do
if type(name) == 'number' then
exampleCode = exampleCode .. '|' .. value
else
exampleCode = exampleCode .. '|' .. name .. '=' .. value
end
end
exampleCode = exampleCode .. '}}'
else
exampleCode = tostring(expand(frame, 'приклад', targs))
end
content = content .. (i ~= 1 and (between and between .. '\n' or '\n') or '') .. adjusted_opener .. exampleCode
end
end
if style == 'wikitable' then
local table_content = ''
if not inthemiddle then
table_content = '{| class="wikitable '
if wide then table_content = table_content .. 'wide' end
table_content = table_content .. '"\n! Код !! Результат'
if are_comments then table_content = table_content .. ' !! Коментар' end
end
content = table_content .. '\n' .. content
if not inthemiddle then
content = content .. '\n|}'
end
end
return content
end
return p