Модуль:MoscowMetro
Поделись знанием:
Документация
Этот модуль оценён как готовый к использованию. Предполагается, что все баги устранены и он готов для широкого использования. Его можно указывать на справочных страницах и рекомендовать к использованию новым участникам. Для его изменения и тестирования, пожалуйста, используйте песочницу. |
Содержание
Функции
NameByNum
Возвращает название линии Московского метрополитена (без слова "линия", если таковое присутствует). Параметр - номер линии или сокращение её названия (см. ниже).
ColorByNum
Возвращает цвет линии (наиболее близкий к официальной схеме). Параметр - номер линии или сокращение её названия (см. ниже).
interchange
Возвращает иконку с номером линии и, в зависимости от параметров, название линии или станции пересадки. Подробнее см. {{MOSMETRO icon}}. Параметры:
line
— номер или сокращение названия линииsize
— размер иконкиstation_dabbed
— название статьи о станции пересадкиstation
— станция пересадки без уточненияCPIC
— непустое значение для кроссплатформенной пересадкиtext
,alt
,small
,style
— так же, как в {{MOSMETRO icon}}
Линия | NameByNum | ColorByNum | {{MOSMETRO icon}} |
---|---|---|---|
1 | Сокольническая | D92B2C | |
2 | Замоскворецкая | 4DBE52 | |
3 | Арбатско-Покровская | 2C75C4 | |
4 | Филёвская | 4DC6F4 | |
5 | Кольцевая | 85412E | |
6 | Калужско-Рижская | F07025 | |
7 | Таганско-Краснопресненская | 89339E | |
8 | Калининская | FBC81E | |
8А | Солнцевская | FBC81E | |
9 | Серпуховско-Тимирязевская | 9F9F9F | |
10 | Люблинско-Дмитровская | A8D92D | |
11 | Третий пересадочный контур | 231F20 | |
11А | Каховская | 80D4C9 | |
12 | Бутовская | B0BFE7 | |
13 | Монорельс | 2C75C4 | |
14 | Московское центральное кольцо | FFFFFF | |
КожЛ | Кожуховская | CC0066 | КожЛ |
Для Солнцевской линии "8А" и для Каховской линии "11А" вводится кириллицей.
Во избежание поломок страниц, использующих данный модуль, желательно экспериментировать в Песочнице для модулей.
local i18n = { NAMES = { ['1'] = 'Сокольническая', ['2'] = 'Замоскворецкая', ['3'] = 'Арбатско-Покровская', ['4'] = 'Филёвская', ['5'] = 'Кольцевая', ['6'] = 'Калужско-Рижская', ['7'] = 'Таганско-Краснопресненская', ['8'] = 'Калининская', ['8А'] = 'Солнцевская', ['9'] = 'Серпуховско-Тимирязевская', ['10'] = 'Люблинско-Дмитровская', ['11'] = 'Третий пересадочный контур', ['11А'] = 'Каховская', ['12'] = 'Бутовская', ['13'] = 'Монорельс', ['14'] = 'Московское центральное кольцо', ['КожЛ']='Кожуховская', }, 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"> %s </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['15'] = i18n.NAMES['КожЛ']; --по умолчанию пока КожЛ будет считаться пятнадцатой линией, если что, поменяем. i18n.NAMES['L1'], i18n.NAMES['Л1'] = i18n.NAMES['12'], i18n.NAMES['12']; --для совместимости с предыдущими версиями шаблонов i18n.NAMES['МОЖД'] = i18n.NAMES['14']; i18n.NAMES['ТПК'] = i18n.NAMES['11']; i18n.line = function(num) -- название линии в именительном падеже if num == 'ТПК' or num == '11' then return 'Третий пересадочный контур' elseif num == '13' then return 'Московский монорельс' elseif num == '14' then return 'Московское центральное кольцо' 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 == '11' then return 'Третьего пересадочного контура' elseif num == '13' then return 'Московского монорельса' elseif num == '14' then return 'Московского центрального кольца' else return mw.ustring.sub(i18n.NAMES[num], 1, -3) .. 'ой линии' end end local COLORS = { -- МЕНЯЙТЕ ЗНАЧЕНИЯ ЦВЕТОВ ТОЛЬКО В СООТВЕТСТВИИ С ОФИЦИАЛЬНОЙ СХЕМОЙ ['1'] = 'D92B2C', -- Сокольническая ['2'] = '4DBE52', -- Замоскворецкая ['3'] = '2C75C4', -- Арбатско-Покровская ['4'] = '4DC6F4', -- Филёвская ['5'] = '85412E', -- Кольцевая ['6'] = 'F07025', -- Калужско-Рижская ['7'] = '89339E', -- Таганско-Краснопресненская ['8'] = 'FBC81E', -- Калининская ['8А'] = 'FBC81E', -- Солнцевская ['9'] = '9F9F9F', -- Серпуховско-Тимирязевская ['10'] = 'A8D92D', -- Люблинско-Дмитровская ['11'] = '231F20', -- Третий пересадочный контур ['11А'] = '80D4C9', -- Каховская ['12'] = 'B0BFE7', -- Бутовская ['13'] = '2C75C4', -- Московский монорельс ['14'] = 'FFFFFF', -- Московское центральное кольцо ['16'] = 'F09E36', -- временно ['КожЛ'] = 'CC0066', -- Кожуховская } COLORS['М1'] = COLORS['13'] COLORS['Кожуховская'] = COLORS['КожЛ'] COLORS['СолЛ'] = COLORS['8А'] ; COLORS['Солнцевская'] = COLORS['8А'] ; COLORS['КСЛ'] = COLORS['8'] COLORS['L1'], COLORS['Л1'] = COLORS['12'], COLORS['12'] COLORS['МОЖД'] = COLORS['14']; COLORS['ТПК'] = COLORS['11']; function IconByNum(num) if num == 'КожЛ' then return nil elseif num == 'М1' then return '13' elseif num == 'КСЛ' or num == 'СолЛ' then return '8А' elseif num == 'МОЖД' then return '14' elseif num == 'ТПК' then return '11' 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) if icon_size == '' then icon_size = i18n.default.icon_size 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 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, text == '2' and i18n.NAMES[num] or i18n.line(num)) or (text == '2' and i18n.NAMES[num] or i18n.line(num)) elseif text == '2' and num ~= 'ТПК' or style ~= '' or num == '5' then result = '[[' .. link .. '|' .. (style ~= '' and mw.ustring.format(i18n.html.style, style, text == '2' and i18n.NAMES[num] or i18n.line(num)) or (text == '2' and i18n.NAMES[num] or i18n.line(num))) .. ']]' 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 .. ' ') .. result end return p