Модуль:List
Материал из HARITONOV
Для документации этого модуля может быть создана страница Модуль:List/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) 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