Модуль:RatingFIDETable
Перейти до навігації
Перейти до пошуку
Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]
Використання
[ред. код]Модуль імпортує дані про шахістів та шахісток у вигляді таблиці. Створений для використання у шаблоні Рейтинги ФІДЕ .
Підтримуються параметри: тип (яка категорія буде імпортована) і кількість (скільки елементів буде імпортовано)
Зразок:
{{#invoke:RatingFIDETable|GetTable|Тип|Кількість}}
Які типи підтримуються:
- Гравці — найкращі з активних шахістів
- Жінки — найкращі з активних шахісток
- Юніори — найкращі з активних юніонір у шахи
- Дівчата — найкращі з активних юніорок у шахи
- Країни Гравці — найкращі країни за середнім рейтингом 10 найкращих шахістів
- Країни Жінки — найкращі країни за середнім рейтингом 10 найкращих шахісток
Документація вище включена з Модуль: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', 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