Модуль:Список
Jump to navigation
Jump to search
Для документации этого модуля может быть создана страница Модуль:Список/doc
local p = {}
local function get_args (frame)
-- На случай вызова из шаблона и из модуля:
local args = frame:getParent () and mw.clone (frame:getParent ().args) or {}
-- Overrides:
for key, val in pairs (frame.args) do
args [key] = val
end
return args
end -- local function get_args (frame)
local function remove_empty (list)
local ret = {}
for i, item in ipairs (list) do
if item ~= '' then
ret [#ret + 1] = item
end
end
return ret
end -- local function remove_empty (list)
local function multiline (list, mark, header)
local ret = ''
for _, item in ipairs (list) do
ret = ret .. '\n' .. mark .. ' ' .. tostring (item)
end
if ret ~= '' and header then
ret = header .. ret
end
return ret
end -- local function multiline (list, mark, header)
p.multiline = multiline
function p.l (frame)
local args = get_args (frame)
-- Извлекаем параметры — не пункты списка:
local header = args ['заголовок']
local separator = args ['разделитель']
-- Для явно заданного разделителя, вроде «•», «и» не нужно:
local last = separator or args ['последний']
-- Случай многострочного списка:
if separator == '*' or separator == '#' then
return multiline (remove_empty (args), separator, header)
else
local ret = mw.text.listToText (remove_empty (args), separator, last)
if ret ~= '' and header then
ret = header .. ' ' .. ret
end
return ret
end
end -- function p.l (frame)
function p.bl (frame)
local args = get_args (frame)
-- Общий маркёр:
local bullet = args ['маркёр'] or args ['bullet'] or '{{*}}'
local lines = {}
for i = 1, #args, 2 do
lines [#lines + 1] = {bullet = args [i] or bullet, str = args [i + 1] or ''}
end
local ret = ''
if #lines > 0 then
ret = ret .. '<table style="background: transparent; vertical-align: top;">'
for _, line in ipairs (lines) do
ret = ret .. '\n<tr><td style="vertical-align:top; padding-top: 0.3ex">' .. line.bullet
.. '</td><td style="vertical-align:top">' .. line.str .. '</td></tr>'
end
ret = ret .. '\n</table>'
end
return ret
end -- function p.bl (frame)
function p.ul (frame)
local args = get_args (frame)
-- Извлекаем параметры — не пункты списка:
local header = args ['заголовок']
return multiline (remove_empty (args), '*', header)
end -- function p.ul (frame)
function p.ol (frame)
local args = get_args (frame)
-- Извлекаем параметры — не пункты списка:
local header = args ['заголовок']
return multiline (remove_empty (args), '#', header)
end -- function p.ol (frame)
return p