Модуль:Игроки клуба
Для документации этого модуля может быть создана страница Модуль:Игроки клуба/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