Модуль:Sandbox/Olexa Riznyk/Стан перекладів

{{i}} Документація модуля[створити]
-- Стан перекладів: Відображує перелік перекладених статей як таблицю з додатковою інформацією про стан перекладів
-- Приклад використання: {{#invoke:Стан перекладів|table|[[Стаття 1]]|[[Стаття 2]]|[[Стаття 3]]}}

local p = {}

function p.table(frame)

	-- Header
	local header = {'{|class="wikitable sortable"\n',
		'|-\n',
		'!№\n',
		'!Сторінка\n',
		'!Мова<br/>оригіналу\n',
		'!Версія<br/>перекладу\n',
		'!Версія<br/>оригіналу\n'}
	local resultTable = table.concat(header);
	
	-- Rows
	for index, pageText in pairs(frame.args) do
		
		_, _, pageTitleText = mw.ustring.find(pageText, '%[%[(.+)%]%]') -- RRR Is there a wikicode parser to some kind of DOM?
		pageTitle = mw.title.new(pageTitleText)
		translTemplateNames = {'Перекладена стаття', 'перекладена стаття',
			'ПКС',
			'Перекладено', 'перекладено',
			'Перекладена сторінка', 'перекладена сторінка',
			'Пс', 'пс',
			'Translated page', 'translated page',
			'Translated', 'translated',
			'Запозичений код', 'запозичений код',
			'Запозичений шаблон', 'запозичений шаблон',
			'Перекладений шаблон', 'перекладений шаблон'} -- TODO: Implement automatic letter case variation instead of listing variants
		for _, translTemplateName in ipairs(translTemplateNames) do
			translTemplatePattern = '(%{%{%s*' .. translTemplateName .. '%s*%|[^%}]+%}%})' 
			if mw.ustring.find(pageTitle.talkPageTitle:getContent(), translTemplatePattern) then
				_, _, translTemplateText = mw.ustring.find(pageTitle.talkPageTitle:getContent(), translTemplatePattern) -- RRR Couldn't mw.ustring.find be called once?
				break  --  Note: We're taking first translation template only
			end
		end
		_, _, sourceLang = mw.ustring.find(translTemplateText, '%|%s*(%a+)')
		if mw.ustring.find(translTemplateText, '%|%s*version%s*%=%s*(%d+)') then
			_, _, sourceVers = mw.ustring.find(translTemplateText, '%|%s*version%s*%=%s*(%d+)')
		else
			_, _, sourceVers = mw.ustring.find(translTemplateText, '%|%s*версія%s*%=%s*(%d+)')
		end
		_, _, translVers = mw.ustring.find(translTemplateText, '%|%s*insertversion%s*%=%s*(%d+)')
		
		row = {'|-\n',
			'|' .. index .. '\n',
			'|' .. pageText .. '\n',
			'|' .. mw.language.fetchLanguageName(sourceLang, mw.getContentLanguage():getCode()) .. '\n',
			'|' .. translVers .. '\n',
			'|' .. sourceVers .. '\n'}
		resultTable = resultTable .. table.concat(row)
	end
	
	-- Footer
	local footer = {'|}\n'}
	resultTable = resultTable .. table.concat(footer)
	
	return resultTable
end

return p