Модуль:RatingFIDETable

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Документация
local p = {}

function p.GetTable(frame)
	local args = frame:getParent().args
    local TypeTable = args['Тип'] or frame.args['Тип'] or "Игроки"
    local Quantity = args['Количество'] or frame.args['Количество'] or 20
	local Tabular = mw.ext.data.get("FIDE Top 100 Players.tab")
	if TypeTable == "Игроки" then
		Tabular = mw.ext.data.get("FIDE Top 100 Players.tab")
	elseif TypeTable == "Женщины" then
		Tabular = mw.ext.data.get("FIDE Top 100 Women.tab")
	elseif TypeTable == "Юниоры" then
		Tabular = mw.ext.data.get("FIDE Top 100 Juniors.tab")
	elseif TypeTable == "Девушки" then
		Tabular = mw.ext.data.get("FIDE Top 100 Girls.tab")
	elseif TypeTable == "Страны Игроки" then
		Tabular = mw.ext.data.get("FIDE Contry Players.tab")
	elseif TypeTable == "Страны Женщины" then
		Tabular = mw.ext.data.get("FIDE Contry Women.tab")
	end
	if Tabular == nil then return "Нет таблицы с данными" end
    Quantity = tonumber(Quantity)
    if Quantity < 0 then Quantity = 20 end
    if Quantity > #Tabular.data then Quantity = #Tabular.data end
	
    local HTML = mw.html.create('table')
    local TempRow
    local NumRow = 0
    
	if TypeTable == "Страны Игроки" or TypeTable == "Страны Женщины" then
	    HTML:attr('class', 'standard sortable')
		if TypeTable == "Страны Игроки" then
			TempRow = HTML:tag('th'):attr('colspan', 6):wikitext(Quantity..' лучших стран по среднему рейтингу'..'<br>'..'10 лучших из активных шахматистов по состоянию на ' .. string.match(Tabular.sources, "(%d+%.%d+%.%d+)") .. '<ref>['..Tabular.sources..']</ref>:')
		elseif TypeTable == "Страны Женщины" then
			TempRow = HTML:tag('th'):attr('colspan', 6):wikitext(Quantity..' лучших стран по среднему рейтингу'..'<br>'..'10 лучших из активных шахматисток по состоянию на ' .. string.match(Tabular.sources, "(%d+%.%d+%.%d+)") .. '<ref>['..Tabular.sources..']</ref>:')
		end
		TempRow = HTML:tag('tr'):addClass("bright"):attr('align', 'center')
		TempRow:tag('th'):wikitext("№")
		TempRow:tag('th'):wikitext("Страна")
		TempRow:tag('th'):wikitext("Средний<br>рейтинг")

		local Rating = nil
		local Player = {}
	    local WikiPath
	    local WikiName
		for k,v in pairs(Tabular.data) do
			if k > Quantity then break end
			TempRow = HTML:tag('tr')
		    TempRow:tag('td'):wikitext(v[1]):attr('align', 'center')
		    local Flag
	    	Flag = '{{флаг|'..v[2]..'}} '

		    WikiPath = mw.wikibase.getSitelink(v[3]) or mw.wikibase.getSitelink(v[3], 'enwiki') or v[3]
		    WikiName = mw.wikibase.getLabel(v[3]) or v[3]
		    TempRow:tag('td'):wikitext(Flag .. '[['.. WikiPath ..'|'.. WikiName .. ']]')

		    TempRow:tag('td'):wikitext(v[4]):attr('align', 'right')
		end
	else
	    HTML:attr('class', 'standard sortable')
		if TypeTable == "Игроки" then
			TempRow = HTML:tag('th'):attr('colspan', 7):wikitext(Quantity..' лучших из активных шахматистов по состоянию на ' .. string.match(Tabular.sources, "(%d+%.%d+%.%d+)") .. '<ref>['..Tabular.sources..']</ref>:')
		elseif TypeTable == "Женщины" then
			TempRow = HTML:tag('th'):attr('colspan', 7):wikitext(Quantity..' лучших из активных шахматисток по состоянию на ' .. string.match(Tabular.sources, "(%d+%.%d+%.%d+)") .. '<ref>['..Tabular.sources..']</ref>:')
		elseif TypeTable == "Юниоры" then
			TempRow = HTML:tag('th'):attr('colspan', 7):wikitext(Quantity..' лучших из активных юниоров по состоянию на ' .. string.match(Tabular.sources, "(%d+%.%d+%.%d+)") .. '<ref>['..Tabular.sources..']</ref>:')
		elseif TypeTable == "Девушки" then
			TempRow = HTML:tag('th'):attr('colspan', 7):wikitext(Quantity..' лучших из активных юниорок по состоянию на ' .. string.match(Tabular.sources, "(%d+%.%d+%.%d+)") .. '<ref>['..Tabular.sources..']</ref>:')
		end
		TempRow = HTML:tag('tr'):addClass("bright"):attr('align', 'center')
		TempRow:tag('th'):wikitext("№")
		TempRow:tag('th'):wikitext("{{comment|Прогресс|Изменение позиции по сравнению с позицией в среднем рейтинге за 12 месяцев|}}")
		if TypeTable == "Игроки" or TypeTable == "Юниоры" then
			TempRow:tag('th'):wikitext("Шахматист")
		elseif TypeTable == "Женщины" or TypeTable == "Девушки" then
			TempRow:tag('th'):wikitext("Шахматистка")
		end
		TempRow:tag('th'):wikitext("Г. р.")
		TempRow:tag('th'):wikitext("Рейтинг")
		TempRow:tag('th'):wikitext("{{comment|Средний<br>рейтинг|Средний рейтинг за 12 месяцев|}}")
		TempRow:tag('th'):wikitext("{{comment|Изм.|Изменение рейтинга по сравнению со средним рейтингом за 12 месяцев|}}")
	
		local Rating = nil
		local Player = {}
	    local WikiPath
	    local WikiName
		for k,v in pairs(Tabular.data) do
			if k > Quantity then break end
			TempRow = HTML:tag('tr')
		    TempRow:tag('td'):wikitext(v[1]):attr('align', 'center')
		    if v[2] == nil then
		    	TempRow:tag('td'):wikitext("")
		    else
		    	if v[2] > v[1] then
		    		TempRow:tag('td'):wikitext("{{Увеличение}}"..v[2] - v[1]):attr('align', 'center')
		    	elseif v[2] < v[1] then
		    		TempRow:tag('td'):wikitext("{{Уменьшение}}"..v[1] - v[2]):attr('align', 'center')
		    	else
		    		TempRow:tag('td'):wikitext("{{Без изменения}}"):attr('align', 'center')
		    	end
		    end
	
		    local Flag
		    if v[6]=='FID' then
		    	Flag = '[[Файл:Fidelogo.jpg|22px|Выступает под флагом ФИДЕ]] '
		    else
		    	Flag = '{{флаг|'..v[6]..'}} '
		    end
	
		    if v[5] == nil then
			    WikiPath = v[3]
			    WikiName = v[3]
			    TempRow:tag('td'):wikitext(Flag .. '{{Не переведено 5|'.. WikiPath ..'|'.. WikiPath ..'||'.. WikiPath .. '}}')
			else
			    WikiPath = mw.wikibase.getSitelink(v[5]) or mw.wikibase.getSitelink(v[5], 'enwiki') or v[3]
			    WikiName = mw.wikibase.getLabel(v[5]) or v[3]
			    TempRow:tag('td'):wikitext(Flag .. '[['.. WikiPath ..'|'.. WikiName .. ']]')
			end
	
			TempRow:tag('td'):wikitext(v[10]):attr('align', 'center')
		    TempRow:tag('td'):wikitext(v[8]):attr('align', 'right')
		    TempRow:tag('td'):wikitext(v[9]):attr('align', 'right')
		    if v[9]== nil or v[8]==v[9] then
			    TempRow:tag('td'):wikitext()
		    elseif  v[8]<v[9] then
			    TempRow:tag('td'):wikitext(v[8]-v[9]):attr('align', 'right')
			else
				TempRow:tag('td'):wikitext('+'.. v[8]-v[9]):attr('align', 'right')
		    end
		end
	end
	return frame:preprocess( tostring(HTML)  )
end

return p