Модуль:Список: различия между версиями
Перейти к навигации
Перейти к поиску
(add templatestyles for hlist) |
м (1 версия импортирована) |
||
Строка 1: | Строка 1: | ||
− | |||
− | |||
− | |||
− | |||
local p = {} | local p = {} | ||
− | local | + | 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 | |
− | |||
− | |||
− | function | ||
− | -- | ||
− | local | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | 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 | ||
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 | end | ||
− | + | if ret ~= '' and header then | |
− | + | ret = header .. ret | |
− | if | ||
− | |||
− | |||
− | |||
end | 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 | |
− | if | + | local ret = mw.text.listToText (remove_empty (args), separator, last) |
− | return | + | if ret ~= '' and header then |
− | + | ret = header .. ' ' .. ret | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | return ret | |
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
+ | end -- function p.l (frame) | ||
− | + | function p.bl (frame) | |
− | + | local args = get_args (frame) | |
+ | -- Общий маркёр: | ||
+ | local bullet = args ['маркёр'] or args ['bullet'] or '{{*}}' | ||
− | + | local lines = {} | |
− | local | + | for i = 1, #args, 2 do |
− | for | + | lines [#lines + 1] = {bullet = args [i] or bullet, str = args [i + 1] or ''} |
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
local ret = '' | local ret = '' | ||
− | if | + | if #lines > 0 then |
− | ret = ret .. ' | + | 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 | end | ||
return ret | return ret | ||
− | end | + | end -- function p.bl (frame) |
− | function p. | + | 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 | return p |
Версия от 10:56, 10 августа 2023
Для документации этого модуля может быть создана страница Модуль:Список/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