Модуль: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"&nbsp;"xg',  new_args[i] .. '+' .. daysEarlier-1 .. ' days');
					col1 = col1 .. '<small>до&nbsp;' .. 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;