Модуль:RequestTable
Перейти к навигации
Перейти к поиску
Этот модуль относится к критическим. У него очень много включений или он используется с подстановкой. Из-за опасности вандализма или ошибочного редактирования он был защищён. |
Прежде чем вносить какие-либо изменения в данный модуль, просьба оттестировать их в /песочнице и проверить результат на странице с /контрольными примерами. Изменения могут быть внесены после этого в данный модуль всего одной правкой. |
Модуль предназначен для формирования таблицы ссылок на страницы обсуждения на ТП:КУ, ТП:КПМ, ТП:КУЛ, ТП:КО, ТП:КР, ТП:ВУС.
Функции[править код]
Формирование таблицы по датам
{{#invoke:RequestTable|TableByDate|<дата>|<список>|<дата>|<список>|...|<дата>|<список>|link=<путь>|header=<заголовок колонки>}}
Параметры[править код]
link
— путь к странице (по умолчанию 'Тептар:К переименованию')header
— заголовок колонки (по умолчанию 'Статьи, вынесенные на переименование')days
— количество дней, после которых обсуждения считаются просроченными- Остальные параметры неименованные и должны следовать парами: дата, список.
Пример[править код]
{{#invoke:RequestTable|TableByDate|link=Тептар:К удалению|header=Статьи, вынесенные на удаление |2017-5-17|<s>[[Гиаферон]]</s> • [[Мацестинская чайная фабрика]] • <s>[[Стенковой Владимир Ильич]]</s> |2017-5-16|[[Роуз Коэн]] • <s>[[Я вам не негр]]</s> • <s>[[Розы (картина Крёйера)]]</s> }}
Результат[править код]
Дата | Статьи, вынесенные на удаление |
---|---|
17 мая 2017 | |
16 мая 2017 | Роуз Коэн • |
---- Этот модуль формирует таблицу по списку
local p = {}
local function buildTable(head, rows)
local tabl = mw.html.create( 'table' )
:addClass('standard');
tabl:tag('tr')
:tag('th'):wikitext(head[1]):done()
:tag('th'):wikitext(head[2]);
for i, r in ipairs(rows) do
if r[2] == nil then
tabl:tag('tr')
:tag('td')
:attr('colspan', '2')
:css('text-align', 'center')
:css('color', 'white')
:css('background', 'gray')
:wikitext(r[1]);
else
tabl:tag('tr')
:tag('td'):wikitext(r[1]):done()
:tag('td'):wikitext(r[2]);
end
end
return tostring(tabl);
end
function p.TableByDate(frame)
local new_args = frame.args;
if new_args[1] == nil then
local parent = frame:getParent();
new_args = parent.args;
end
local headertext = new_args['header'] or 'Статьи, вынесенные на переименование';
local link = new_args['link'] or 'Тептар:К переименованию';
local head = {'Дата', headertext };
local daysEarlier = (new_args['days'] and tonumber(new_args['days'])) or 0;
if daysEarlier <= 0 then
daysEarlier = 8 -- количество дней для просроченных обсуждений по-умолчанию
end;
local i=1;
local j=1;
local rows = {};
local divided = false;
local lang = mw.language.new('ru');
while new_args[i] ~= nil do
local y, m, d = mw.ustring.match(new_args[i], '^(%d+)%-(%d+)%-(%d+)$');
if y ~= nil then
local datestr = lang:formatDate('j xg Y', new_args[i], false);
-- mw.logObject(datestr, 'datestr');
if datestr ~= nil then
local col1 = '<b>[[' .. link .. '/' .. datestr ..
"|" .. datestr .. ']]</b> ';
local rowTime = tonumber(lang:formatDate('Ymd', new_args[i], false));
local eightDaysEarlier = tonumber(lang:formatDate('Ymd', '-' .. daysEarlier .. 'days', false));
if rowTime > eightDaysEarlier then
datestr = lang:formatDate('j" "xg', new_args[i] .. '+' .. daysEarlier-1 .. ' days');
col1 = col1 .. '<small>до ' .. datestr .. '</small>';
else
if not divided then
if j > 1 then
rows[j] = { '<b>Просроченные обсуждения, в которых нужно подвести итог</b>', nil}
j = j+1;
end
divided = true;
end
end
rows[j] = { col1, ''}
end
else
if rows[j][1] ~= nil then
rows[j][2]= new_args[i];
j = j+1;
end
end
i = i+1;
end
return buildTable(head, rows);
end
return p;