Модуль:Последние запуски Falcon 9 (Bk;rl,&Hkvly;uny [ghrvtn Falcon 9)

Перейти к навигации Перейти к поиску
Документация

Реализация шаблона {{Последние запуски 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 = '|%- *id="[^"]+" *style="background:[^"]+"\n| *rowspan="?3"? *| *(%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 = '(|%%- *id="[^"]+" *style="background:[^"]+" *\n| *rowspan="?3"? *| *' .. 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