Модуль:ЛНВиступ

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
{{i}} Документація модуля[створити]
require('Module:No globals')
local yesno = require('Module:Yesno')

-- Exported members
local p = {}
-- Private members
local m = {}
local args = {}
local data = {}

local function getArgs(frame)
	local parents = mw.getCurrentFrame():getParent()
		
	for k,v in pairs(parents.args) do
		--check content
		if v and v ~= "" then
			args[k]=mw.text.trim(v) --parents.args[k]
		end
	end
	for k,v in pairs(frame.args) do
		--check content
		if v and v ~= "" then
			args[k]= mw.text.trim(v)  --parents.args[k]
		end
	end
end

function p.main(frame)
    getArgs(frame)
    data = require('Модуль:ЛНВиступ/data')
    
    local host = yesno(args['г'] or args['господарі'])
    local season = data[m.getSeason(args.season)]
	return m.createEntry(frame, season, args.league, args.group, args.pld, args.w or 0, args.d or 0, args.l or 0, args.gf or 0, args.ga or 0, args.rnk, args.chng or '~', host)
end

-- 2010-2011 -> 10
-- 2010-11 -> 10
-- 10-11 -> 10
-- 2010/2011 -> 10
-- 2010/11 -> 10
-- 10/11 -> 10
-- 2010 -> 10
-- 2010 -> 10
-- 10 -> 10
-- 2011-12 -> nil (starts with odd year)
-- 2011/12 -> nil (-"-)
-- ...
-- else -> nil
function m.getSeason(seasonArg)
    local season = m.split(seasonArg, '%-')
    if season then
    	return season
    end
    
    season = m.split(seasonArg, '/')
    if season then
    	return season
    end
    
    season = tonumber(seasonArg)
    return m.getSeasonYear(season)
end

function m.split(s, separator)
	local idx = string.find(s or '', separator)
	local season = idx and tonumber(string.sub(s, 1, idx - 1)) or nil
	return m.getSeasonYear(season)
end

function m.getSeasonYear(year)
	return (year and year % 2 == 0) and ((year > 2000) and year - 2000 or year) or nil
end

function m.createEntry(frame, season, league, group, pld, w, d, l, gf, ga, rnk, chng, host)
    return (host and 'style="border: 2px solid red;"|' or '')..m.flagiconTemplate(frame, season.host)..' [[Ліга націй УЄФА '..season.years..'|'..season.yearsDisplay..']]||[[Ліга націй УЄФА '..season.years..' (Ліга '..league..')|'..league..']]||[[Ліга націй УЄФА '..season.years..' (Ліга '..league..')#Група '..group..'|'..group..']]||'..pld..'||'..w..'||'..d..'||'..l..'||'..gf..'||'..ga..'||'..m.formatChange(frame, chng)..'||'..m.formatRank(frame, rnk, season.yearFinal)
end

function m.flagiconTemplate(frame, country, flagVariant)
	--local flagVariant = variant or ''
	return frame:expandTemplate{ title = 'ПрапорЗначок' , args = { country, flagVariant } }
end

function m.formatChange(frame, change)
	if change == '+' then
		return frame:expandTemplate{ title = 'rise' , args = { 'a', 'Підвищення' } }
	elseif change == '~' then
		return frame:expandTemplate{ title = 'same position' , args = { '', 'Без змін' } }
	elseif change == '-' then
		return frame:expandTemplate{ title = 'fall' , args = { 'a', 'Пониження' } }
	else
		return ''
	end
end

function m.formatRank(frame, srank, yearOfFinal)
	if not srank then
		return ''
	end
	
    local rank = tonumber(srank)
    if srank == 'б/в' then
    	return frame:expandTemplate{ title = 'abbr' , args = { 'б/в', 'буде визначено', 'Фінал чотирьох Ліги націй УЄФА '..yearOfFinal } }
    end
    local topFour = rank and rank >= 1 and rank <= 4
    local suffix = (string.sub(srank, string.len(srank), string.len(srank) + 1) == '3' and not rank == 13) and 'є' or 'е'
    if topFour then
    	return '[[Фінал чотирьох Ліги націй УЄФА '..yearOfFinal..'|'..srank..'-'..suffix..']]'
	else
		return srank..'-'..suffix
	end
end

function p.currentSeason(frame)
    data = require('Модуль:ЛНВиступ/data')
	return data.currentSeason
end

function p.parseSeason(frame)
    getArgs(frame)
    data = require('Модуль:ЛНВиступ/data')
	return m.getSeason(args[1])
end

function p.host(frame)
    getArgs(frame)
    data = require('Модуль:ЛНВиступ/data')
    local season = data[m.getSeason(args[1])]
	return season and season.host or nil
end

return p