Модуль:ArticleCandidatesNavigation

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
{{i}} Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]

Модуль для шаблонів навігації на підсторінках ВП:ВИЛ {{ВПВИЛ-навігація}}, ВП:ПОЛ {{ВППОЛ-навігація}} тощо.

Використання

{{#invoke:ArticleCandidatesNavigation|navigation
|pagename=Вікіпедія:Статті-кандидати на вилучення
|linkText=На вилучення
|seeAlso=
;Також
: [[Вікіпедія:Статті-кандидати на вилучення|усі кандидати на вилучення]]
|reminder=Пам'ятайте, що статті вилучаються за підсумками обговорення, а не голосування. Неаргументовані голоси не враховуються!
}}

Результат

Помилка Lua у mw.lua у рядку 313: frame:expandTemplate: the first parameter must be a table.

Функції

Напівжирним позначено обов'язкові параметри.

Основна функція. Генерує шаблон з навігацією по підсторінках. Параметри:

|pagename=
Повна назва кореневої сторінки.
|linkText=
Текст посилання, яке відображається зліва від календаря підсторінок.
|days=
Кількість днів, які відображаються в календарі підсторінок (включно з поточним). За замовчуванням 7.
|seeAlso=
Додаткова інформація. Відображається меншим шрифтом, списки горизонтальні.
|reminder=
Окреме нагадування. Відкоремлюється від тіла шаблону горизонтальною лінією.
|closed=
Закриття обговорення. Будь-який вміст параметру підставляє шаблон {{closed}}.
|opencat=
Категорія для сторінок з відкритими обговореннями.
|closedcat=
Категорія для сторінок із закритими обговореннями.
|nocat=
Відключення категоризації шаблоном. Будь-який вміст параметру запобігає включенню сторінки у категорії, вказані в opencat і closedcat.
|dateFormat=
Формат дати у назвах підсторінок. Див. довідку. За замовчуванням j xg Y.
|color=
Колір рамки і горизонтальної лінії-відокремлювача. За замовчуванням #6cbed0

Генерує посилання на підсторінку, якщо підсторінки не існує - повертає текст сірого кольору. Параметри:

|pagename=
|dateFormat=
Аналогічні відповідним параметрам функції navigation.
|targetDay=
День, на підсторінку якого потрібне посилання. Формат дати повинен підтримуватися функцією парсеру #time. За замовчуванням поточний день.

daysTable

Генерує таблицю-календар підсторінок. Параметри:

|pagename=
|linkText=
|days=
|dateFormat=
Аналогічні відповідним параметрам функції navigation.
local p = {}

function p.dayLink(pagename, shift, dateFormat)
    local frame = mw.getCurrentFrame()
	local targetDay = frame:callParserFunction('#time', dateFormat, shift .. 'days')
	local linkText = frame:callParserFunction('#time', 'j xg', shift .. 'days')
	local exists = frame:callParserFunction('#ifexist', pagename .. '/' .. targetDay, 1, 0)
	local link
	if exists == 1 then
		link = '[[' .. pagename .. '/' .. targetDay .. '|' .. linkText .. ']]'
	else
		link = '<span style="color: gray;">' .. linkText .. '</span>'
	end
	return link
end

function p.daysTable(pagename, linkText, days, dateFormat)
	local tbl = mw.html.create('table')
	tbl
		:addClass('center')
		:css('width', 'auto')
		:css('margin', '0 auto')
	local row
	local adjust
	for i = 1, days do
		if i % 7 == 1 then
			tbl:node(row)
			row = mw.html.create('tr')
			if i == 1 then
				row:tag('td')
					:attr('rowspan', math.ceil(days, 7))
					:css('font-weight', 'bold')
					:wikitext('[[' .. pagename .. '|' .. linkText .. ':]]')	
			end
			if i / 7 > 1 then
				row:css('font-size', 'small')
			end
			adjust = 2 * i + 5
		end
		row:tag('td'):wikitext(p.dayLink(pagename, i - adjust, dateFormat))
	end
	
	return tbl
end

local function findClosest(day, sign, dateFormat)
    local frame = mw.getCurrentFrame()
	local targetDay
	local exists
	for i = 1, 28 do 
		targetDay = frame:callParserFunction('#time', dateFormat, sign .. i .. 'days')
		exists = frame:callParserFunction('#ifexist', pagename .. '/' .. targetDay, 1, 0)
		if exists == 1 then
			return targetDay
		end
	end

	return nil
end

local function PrevNext(pagename, dateFormat)
    local frame = mw.getCurrentFrame()
	local pageDay = frame:expandTemplate('DataConverter', frame:expandTemplate('SUBPAGENAME'))
	local prv = findClosest(pageDay, '-', dateFormat)
	local nxt = findClosest(pageDay, '+', dateFormat)
	local res = ''
	if prv then
		res = res .. '[[' .. pagename .. '/' .. prv .. '|' .. '<<]]'
	end
	if prv and nxt then
		res = res .. ' | '
	end
	if nxt then
		res = res .. '[[' .. pagename .. '/' .. nxt .. '|' .. '>>]]'
	end
	
	return res
end

function p.navigation(frame) 
	local args = frame.args
	if not args.days then
		args.days = 7
	end
	if not args.dateFormat then
		args.dateFormat = 'j xg Y'
	end
	if not args.color then
		args.color = '#6cbed0'
	end
	
	local res = ''
	
	if args.closed == 1 then
		res = res .. '{{closed}}'
	elseif args.opencat then
		res = res .. '[[Категорія:' .. args.opencat .. ']]'
	end
	
	local nav = mw.html.create('div')
	if args.id then
		nav:attr('id', args.id)
	end
	if args.class then
		nav:addClass(args.class)
	end
	nav
		:css('background', '#fff')
		:css('border', '1px solid' .. args.color)
		:css('margin-bottom', '1em')
		:css('padding', '.5em .25em .25em')
		:css('text-align', 'center')
		:tag('table')
			:tag('tr')
				:tag('td')
					:css('width', '75px')
					:wikitext('&nbsp;')
				:done()
				:tag('td')
					:css('text-align', 'center')
					:node(p.daysTable(args.pagename, args.linkText, args.days, args.dateFormat))
				:done()
				:tag('td')
					:css('width', '75px')
					:css('text-align', 'right')
					:css('font-size', '120%')
					:css('font-weight', 'bold')
					:wikitext(PrevNext(args.pagename, args.dateFormat))
				:done()
			:done()
			:tag('tr')
				:attr('colspan', '3')
				:addClass('hlist')
				:css('font-size', 'small')
				:tag('td')
					:wikitext(args.seeAlso)
				:done()
			:done()
		:done()
		
	res = res .. tostring(nav)
		
	return res
end

return p