Модуль:MoscowMetro

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Документация

Функции

NameByNum

Возвращает название линии Московского метрополитена (без слова "линия", если таковое присутствует). Параметр - номер линии или сокращение её названия (см. ниже).

ColorByNum

Возвращает цвет линии (наиболее близкий к официальной схеме). Параметр - номер линии или сокращение её названия (см. ниже).

interchange

Возвращает иконку с номером линии и, в зависимости от параметров, название линии или станции пересадки. Подробнее см. {{MOSMETRO icon}}. Параметры:

  • line — номер или сокращение названия линии
  • size — размер иконки
  • station_dabbed — название статьи о станции пересадки
  • station — станция пересадки без уточнения
  • CPIC — непустое значение для кроссплатформенной пересадки
  • text, alt, small, style — так же, как в {{MOSMETRO icon}}
Линия NameByNum ColorByNum {{MOSMETRO icon}}
1 Сокольническая EF161E Сокольническая линия
2 Замоскворецкая 2DBE2C Замоскворецкая линия
3 Арбатско-Покровская 0078BE Арбатско-Покровская линия
4 Филёвская 00BFFF Филёвская линия
Филёвская 00BFFF Филёвская линия
5 Кольцевая 8D5B2D Кольцевая линия
6 Калужско-Рижская ED9121 Калужско-Рижская линия
7 Таганско-Краснопресненская 800080 Таганско-Краснопресненская линия
8 Калининская FFD702 Калининская линия
Солнцевская FFD702 Солнцевская линия
9 Серпуховско-Тимирязевская 999999 Серпуховско-Тимирязевская линия
10 Люблинско-Дмитровская 99CC00 Люблинско-Дмитровская линия
11 Большая кольцевая 82C0C0 Большая кольцевая линия
11А Большая кольцевая 82C0C0 Большая кольцевая линия
12 Бутовская A1B3D4 Бутовская линия
13 Монорельс B9C8E7 Московский монорельс
14 Московское центральное кольцо FFFFFF Московское центральное кольцо
15 Некрасовская DE64A1 Некрасовская линия
16 Троицкая 03795F Троицкая линия
17 Рублёво-Архангельская 27303F Рублёво-Архангельская линия
18 Бирюлёвская AC1753 Бирюлёвская линия
D1 МЦД-1 F6A600 МЦД-1
D2 МЦД-2 E74280 МЦД-2
D3 МЦД-3 E95B0C МЦД-3
D4 МЦД-4 40B280 МЦД-4
D5 МЦД-5 77B729 МЦД-5
0 остальные линии 231F20

Для Солнцевской линии "8А" и для Большой Кольцевой линии "11А" вводится кириллицей.

local i18n = {
	NAMES = {
		['1']   = 'Сокольническая',
		['2']   = 'Замоскворецкая',
		['3']   = 'Арбатско-Покровская',
		['4']   = 'Филёвская',
        ['4А']   = 'Филёвская',
		['5']   = 'Кольцевая',
		['6']   = 'Калужско-Рижская',
		['7']   = 'Таганско-Краснопресненская',
		['8']   = 'Калининская',
		['8А']  = 'Солнцевская',
		['8КС'] = 'Калининско-Солнцевская',
		['9']   = 'Серпуховско-Тимирязевская',
		['10']  = 'Люблинско-Дмитровская',
		['11']  = 'Большая кольцевая',
		['11А'] = 'Большая кольцевая',
		['11К'] = 'Каховская',
		['12']  = 'Бутовская',
		['13']  = 'Монорельс',
		['14']  = 'Московское центральное кольцо',
		['15']  = 'Некрасовская',
		['16']  = 'Троицкая',
		['17']  = 'Рублёво-Архангельская',
        ['18']  = 'Бирюлёвская',
		['D1']  = 'МЦД-1',
		['D2']  = 'МЦД-2',
		['D3']  = 'МЦД-3',
		['D4']  = 'МЦД-4',
		['D5']  = 'МЦД-5'
	},
	html = {
		icon_fmt = '<span title="%s">[[File:Moskwa Metro Line %s.svg|%spx|%s|link=%s]]</span>', -- parameters: alt, linenum, icon size, alt, link
		text_fmt = '[[%s|<span style="display:inline-block;line-height:%spx;height:%spx;font-size:%spx;font-style:normal;font-weight:bold;background:#%s;color:white;white-space:nowrap;text-align:center" title="%s">&thinsp;%s&thinsp;</span>]]', --[[
		                                          parameters: link, icon size, icon size, icon size - 3, color, alt, linenum   ]]
		small = '<span style="font-size:85%%">%s</span>',
		style = '<span style="%s">%s</span>',
		sortkey = '<span style="display:none" class="sortkey">%s</span>',
	},
	text = {
		transfer = 'Переход на станцию «%s» %s',
		CPIC = 'Кросс-платформенная пересадка на станцию «%s» %s',
		dab = ' (станция метро)',
	},
	default = {
		icon_size = '15'
	}
}
i18n.NAMES['КалЛ'] = i18n.NAMES['8'];  i18n.NAMES['КСЛ'] = i18n.NAMES['8'];
i18n.NAMES['СолЛ'] = i18n.NAMES['8А'];
i18n.NAMES['ТПК']  = i18n.NAMES['11']; i18n.NAMES['БКЛ'] = i18n.NAMES['11']; i18n.NAMES['БКЛ'] = i18n.NAMES['11А']; 
i18n.NAMES['L1']   = i18n.NAMES['12']; i18n.NAMES['Л1']  = i18n.NAMES['12']; --для совместимости с предыдущими версиями шаблонов
i18n.NAMES['МОЖД'] = i18n.NAMES['14']; i18n.NAMES['МЦК'] = i18n.NAMES['14']; 
i18n.NAMES['КожЛ'] = i18n.NAMES['15']; i18n.NAMES['НЛ']  = i18n.NAMES['15'];
i18n.NAMES['КомЛ'] = i18n.NAMES['16']; 

i18n.line = function(num) -- название линии в именительном падеже
	if num == '13' then return 'Московский монорельс'
	elseif num == '14' then return 'Московское центральное кольцо'
	elseif num == 'D1' then return 'МЦД-1'
	elseif num == 'D2' then return 'МЦД-2'
	elseif num == 'D3' then return 'МЦД-3'
	elseif num == 'D4' then return 'МЦД-4'
	elseif num == 'D5' then return 'МЦД-5'
	else return i18n.NAMES[num] .. ' линия'
	end
end

i18n.link = function(num) -- ссылка на страницу линии
	if num == '5' then return i18n.NAMES[num] .. ' линия (Москва)'
	else return i18n.line(num)
	end
end

i18n.ofLine = function(num) -- название линии в родительном падеже ("пересадка на станцию ... ... линии")
	if num == 'ТПК' or num == '11' then return 'Большой кольцевой линии'
	elseif num == '13' then return 'Московского монорельса'
	elseif num == '14' then return 'Московского центрального кольца'
	elseif num == 'D1' then return 'МЦД-1'
	elseif num == 'D2' then return 'МЦД-2'
	elseif num == 'D3' then return 'МЦД-3'
	elseif num == 'D4' then return 'МЦД-4'
	elseif num == 'D5' then return 'МЦД-5'
	else return mw.ustring.sub(i18n.NAMES[num], 1, -3) .. 'ой линии'
	end
end

local COLORS = { -- МЕНЯЙТЕ ЗНАЧЕНИЯ ЦВЕТОВ ТОЛЬКО ПОСЛЕ ОБСУЖДЕНИЯ в [[ПРО:МОСМЕТРО]]
	['1']   = 'EF161E', -- Сокольническая
	['2']   = '2DBE2C', -- Замоскворецкая
	['3']   = '0078BE', -- Арбатско-Покровская
	['4']   = '00BFFF', -- Филёвская
    ['4А']   = '00BFFF', -- Филёвская
	['5']   = '8D5B2D', -- Кольцевая
	['6']   = 'ED9121', -- Калужско-Рижская
	['7']   = '800080', -- Таганско-Краснопресненская
	['8']   = 'FFD702', -- Калининская
	['8А']  = 'FFD702', -- Солнцевская
	['8КС'] = 'FFD702', -- Калининско-Солнцевская
	['9']   = '999999', -- Серпуховско-Тимирязевская
	['10']  = '99CC00', -- Люблинско-Дмитровская
	['11']  = '82C0C0', -- Большая кольцевая
	['11А'] = '82C0C0', -- Большая кольцевая
	['11К'] = '231F20', -- Каховская (историческая линия)
	['12']  = 'A1B3D4', -- Бутовская
	['13']  = 'B9C8E7', -- Московский монорельс
	['14']  = 'FFFFFF', -- Московское центральное кольцо
	['15']  = 'DE64A1', -- Некрасовская
	['16']  = '03795F', -- Троицкая 
	['17']  = '27303F', -- Рублёво-Архангельская
	['18']  = 'AC1753', -- Бирюлёвская
	['D1']  = 'F6A600', -- МЦД-1
	['D2']  = 'E74280', -- МЦД-2
	['D3']  = 'E95B0C', -- МЦД-3
	['D4']  = '40B280', -- МЦД-4
	['D5']  = '77B729', -- МЦД-5
	['0']   = '231F20', -- для всех остальных планирующихся линий
}
COLORS['КСЛ']  = COLORS['8']; COLORS['КалЛ'] = COLORS['8'];
COLORS['СолЛ'] = COLORS['8А']; COLORS['Солнцевская'] = COLORS['8А']; 
COLORS['ТПК']  = COLORS['11']; COLORS['БКЛ'] = COLORS['11']; COLORS['БКЛ'] = COLORS['11А'];
COLORS['L1']   = COLORS['12']; COLORS['Л1'] = COLORS['12'];
COLORS['М1']   = COLORS['13']; 
COLORS['МОЖД'] = COLORS['14']; COLORS['МЦК'] = COLORS['14'];
COLORS['КожЛ'] = COLORS['15']; COLORS['Кожуховская'] = COLORS['КожЛ']; COLORS['НЛ'] = COLORS['15'];
COLORS['КомЛ'] = COLORS['16'];
COLORS['РАЛ']  = COLORS['17'];
COLORS['БирЛ'] = COLORS['18'];

function IconByNum(num)
	if num == 'КожЛ' then return nil
	elseif num == 'КСЛ' or num == 'КалЛ' then return '8'
	elseif num == 'СолЛ' then return '8А'
	elseif num == 'ТПК'  then return '11'
	elseif num == 'М1'   then return '13'
	elseif num == 'МОЖД' then return '14'
	else return num
	end
end

local p = {}

function p.ColorByNum(frame)
	return COLORS[mw.text.trim(frame.args[1] or '')] or '[[Категория:Википедия:Статьи с неверно заданными параметрами модуля MoscowMetro]]'
end

function p.NameByNum(frame)
    return i18n.NAMES[mw.text.trim(frame.args[1] or '')] or '[[Категория:Википедия:Статьи с неверно заданными параметрами модуля MoscowMetro]]'
end

function p.interchange(frame)
	local num, station, station_dabbed, CPIC = frame.args['line'] or '', frame.args['station'] or '', frame.args['station_dabbed'] or '', frame.args['CPIC'] or '' ~= ''
	local icon_size, alt, text, small, style = frame.args['size'] or '', frame.args['alt'] or '', frame.args['text'] or '', frame.args['small'] or '', frame.args['style'] or ''
	local icon, station_stripped
	if not i18n.NAMES[num] then return '[[Категория:Википедия:Статьи с неверно заданными параметрами модуля MoscowMetro]]' end
	local iconN = IconByNum(num)
	local Dx = num == 'D1' or num == 'D2' or  num == 'D3' or  num == 'D4' or  num == 'D5';
	if icon_size == '' then
		if Dx then icon_size = '22' 
		else icon_size = i18n.default.icon_size end
	elseif mw.ustring.sub(icon_size, -2 ) == 'px' then
		icon_size = mw.ustring.sub(icon_size, 1, -3 )
	end
	if alt == '' then
		if station ~= '' then
			alt = mw.ustring.format(i18n.text[CPIC ~= '' and 'CPIC' or 'transfer'], station, i18n.ofLine(num))
		elseif station_dabbed ~= '' then
			station_stripped = mw.ustring.match(station_dabbed, '(.-) %(') or station_dabbed
			alt = mw.ustring.format(i18n.text[CPIC ~= '' and 'CPIC' or 'transfer'], station_stripped, i18n.ofLine(num))
		else
			alt = i18n.line(num)
		end
	elseif station_dabbed ~= '' then
		station_stripped = mw.ustring.match(station_dabbed, '(.-) %(') or station_dabbed
	end
	local link = text == '' and (station_dabbed ~= '' and station_dabbed or (station ~= '' and station .. i18n.text.dab or i18n.link(num))) or i18n.link(num)
	if iconN then
		icon = mw.ustring.format(i18n.html.sortkey, mw.ustring.len(iconN) == 2 and iconN or '0' .. iconN) .. mw.ustring.format(i18n.html.icon_fmt, alt, iconN, icon_size, alt, link)
	else
		icon = mw.ustring.format(i18n.html.text_fmt, link, icon_size, icon_size, tonumber(icon_size) - 3, COLORS[num], alt, num)
	end
	if text == '' then return icon end
	
	function text2()
		return text == '2' and i18n.NAMES[num] or i18n.line(num)
	end
	
	local result = ''
	if station_dabbed ~= '' then
		result = '[[' .. station_dabbed .. '|' .. (station ~= '' and station or station_stripped) .. ']]'
	elseif station ~= '' then
		result = '[[' .. station .. i18n.text.dab .. '|' .. station .. ']]'
	elseif link == mw.title.getCurrentTitle().prefixedText then
		result = style ~= '' and mw.ustring.format(i18n.html.style, style, text2()) or text2()
	elseif text == '2' and num ~= 'ТПК' or style ~= '' or num == '5' then
		result = '[[' .. link .. '|' .. (style ~= '' and mw.ustring.format(i18n.html.style, style, text2()) or text2()) .. ']]'
	else
		result = '[[' .. link .. ']]'
	end
	if small ~= '' then result = mw.ustring.format(i18n.html.small, result) end
	return (not iconN and station == '' and station_dabbed == '' and '' or icon .. '&nbsp;') .. result
end

return p