Перейти к содержанию

Модуль:Игроки клуба

Материал из Наро-Фоминский Футбол

Для документации этого модуля может быть создана страница Модуль:Игроки клуба/doc

-- Категория игроков футбольного клуба по названию его страницы.
-- «Название (футбольный клуб, Место[, год])» → «Игроки ФК «Название» (Место[, год])»;
-- приставка «ФК » в начале названия отбрасывается («ФК Сокол» → «Сокол»).
-- MediaWiki делает первую букву названия страницы заглавной («iFlat» → «IFlat»),
-- поэтому, если категории с заглавной буквой нет, ищется и вариант со строчной
-- («IFlat (футбольный клуб, Киевский)» → «Игроки ФК «iFlat» (Киевский)»).
-- Используется в {{Футбольный клуб}}: строка «Игроки» со ссылкой на категорию.
local p = {}

function p.category(title)
	local base, place = mw.ustring.match(title or '', '^(.-) %(футбольный клуб, (.+)%)$')
	if not base then
		return nil
	end
	base = mw.ustring.gsub(base, '^ФК ', '')
	return 'Игроки ФК «' .. base .. '» (' .. place .. ')'
end

-- Название существующей категории игроков для страницы клуба или nil.
local function existing(page)
	local variants = { page }
	local lower = mw.ustring.lower(mw.ustring.sub(page, 1, 1)) .. mw.ustring.sub(page, 2)
	if lower ~= page then
		table.insert(variants, lower)
	end
	for _, name in ipairs(variants) do
		local cat = p.category(name)
		if cat then
			local t = mw.title.new(cat, 14)
			if t and t.exists then
				return cat
			end
		end
	end
	return nil
end

-- {{#invoke:Игроки клуба|link}} — ссылка «все игроки клуба», если категория существует;
-- необязательный параметр 1 — название страницы клуба (по умолчанию текущая страница).
function p.link(frame)
	local args = frame.args
	local page = args[1]
	if not page or page == '' then
		page = mw.title.getCurrentTitle().text
	end
	local cat = existing(page)
	if not cat then
		return ''
	end
	local text = args.text
	if not text or text == '' then
		text = 'все игроки клуба'
	end
	return '[[:Категория:' .. cat .. '|' .. text .. ']]'
end

-- {{#invoke:Игроки клуба|name}} — только название категории (без пространства имён):
-- существующей, а если её нет — построенной по названию страницы.
function p.name(frame)
	local page = frame.args[1]
	if not page or page == '' then
		page = mw.title.getCurrentTitle().text
	end
	return existing(page) or p.category(page) or ''
end

return p