Модуль:Последние запуски Falcon 9

Поделись знанием:
Это текущая версия страницы, сохранённая Jack who built the house (обсуждение | вклад) в 23:14, 3 августа 2016. Вы просматриваете постоянную ссылку на эту версию.

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
 Документация

Реализация шаблона {{Последние запуски Falcon 9}}, см. его документацию.

Во избежание поломок страниц, использующих данный модуль, желательно экспериментировать в Песочнице для модулей.

local p = {}

function p.main(frame)
	local getArgs = require('Модуль:Arguments').getArgs
	local args = getArgs(frame)
	local currentYear = os.date('*t')['year']
	local launchCount = args[1] or 10
	local showUpTo = args[2] or currentYear --'декабрь 2016'

	local title = mw.title.new( 'Список запусков ракеты-носителя Falcon 9', '' )
	local fullContent = title:getContent()
	
	local pattern = '|%- *style="background:[^"]+"\n| *rowspan="?2"? *| *(%d+) *'
	local lastLaunchNumber
	if fullContent:match(pattern) then --чтобы избежать превышения времени выполнения скрипта в случае ненахождения фрагмента
		lastLaunchNumber = fullContent:match('.*' .. pattern)
	end
	
	if lastLaunchNumber then
		local firstLaunchNumber = lastLaunchNumber - launchCount + 1
		--mw.log(firstLaunchNumber)
		patternToFormat = '(|%%- *style="background:[^"]+"\n| *rowspan="?2"? *| *' .. firstLaunchNumber .. '.*|[ %%w]*%s.-)\n\n'
		content = mw.ustring.match(fullContent, string.format(patternToFormat, showUpTo))
		if not content and showUpTo ~= currentYear then
			content = mw.ustring.match(fullContent, string.format(patternToFormat, currentYear))
		end
		if not content then
			content = mw.ustring.match(fullContent, string.format(patternToFormat, currentYear+1))
		end
		
		if content then
			content = content:gsub('</?onlyinclude>', '')
			return frame:preprocess(content)
		else
			return ''
		end
	else
		return ''
	end
end

return p