{{i}} Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]

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

ред.

Модуль імпортує дані про шахістів та шахісток у вигляді таблиці. Створений для використання у шаблоні Рейтинги ФІДЕ .

Підтримуються параметри: тип (яка категорія буде імпортована) і кількість (скільки елементів буде імпортовано)

Зразок:

{{#invoke:RatingFIDETable|GetTable|Тип|Кількість}}

Які типи підтримуються:

  • Гравці — найкращі з активних шахістів
  • Жінки — найкращі з активних шахісток
  • Юніори — найкращі з активних юніонір у шахи
  • Дівчата — найкращі з активних юніорок у шахи
  • Країни Гравці — найкращі країни за середнім рейтингом 10 найкращих шахістів
  • Країни Жінки — найкращі країни за середнім рейтингом 10 найкращих шахісток
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', 6):wikitext(Quantity..' найкращих з активних шахістів станом на ' .. string.match(Tabular.sources, "(%d+%.%d+%.%d+)") .. '<ref>['..Tabular.sources..']</ref>:')
		elseif TypeTable == "Жінки" then
			TempRow = HTML:tag('th'):attr('colspan', 6):wikitext(Quantity..' найкращих з активних шахісток станом на ' .. string.match(Tabular.sources, "(%d+%.%d+%.%d+)") .. '<ref>['..Tabular.sources..']</ref>:')
		elseif TypeTable == "Юніори" then
			TempRow = HTML:tag('th'):attr('colspan', 6):wikitext(Quantity..' найкращих з активних юніорів станом на ' .. string.match(Tabular.sources, "(%d+%.%d+%.%d+)") .. '<ref>['..Tabular.sources..']</ref>:')
		elseif TypeTable == "Дівчата" then
			TempRow = HTML:tag('th'):attr('colspan', 6):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|Прогрес|Зміна позиції порівняно з попереднім місяцем|}}")
		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|Різн.|Різниця в рейтингу порівняно з попереднім місяцем|}}")
	
		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 = '[[Файл:FIDE flag icon.png|22px|Виступає під прапором ФІДЕ]] '
		    else
		    	Flag = '{{прапорець|'..v[6]..'}} '
		    end
	
		    if v[5] == nil then
			    WikiPath = v[3]
			    WikiName = v[3]
			    TempRow:tag('td'):wikitext(Flag .. '{{Не перекладено|'.. WikiName ..'|'.. 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
	
			local birthday
			local birthyear
		    if v[5] == nil then
				birthyear=''
			else
				birthday=mw.wikibase.getBestStatements(v[5], 'P569')
				birthyear=string.match( birthday[1]['mainsnak']['datavalue']['value']['time'], "%+(%d+)")
		    end
			TempRow:tag('td'):wikitext(birthyear):attr('align', 'center')
		    TempRow:tag('td'):wikitext(v[8]):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