Модуль:ТранспортнаяСхема: различия между версиями
Tringoli (обсуждение | вклад) м Пока вырежу картинки |
Tringoli (обсуждение | вклад) Нет описания правки |
||
| Строка 1: | Строка 1: | ||
local p = {} | local p = {} | ||
-- Функция извлечения аргументов из прямого вызова и из шаблона | |||
local function getArgs(frame) | local function getArgs(frame) | ||
local args = {} | local args = {} | ||
| Строка 15: | Строка 16: | ||
end | end | ||
-- Загрузка данных из data.json | |||
local function loadData(args) | local function loadData(args) | ||
local dataParam = args['данные'] or args[1] | local dataParam = args['данные'] or args[1] | ||
| Строка 36: | Строка 38: | ||
if rawText and rawText ~= '' then | if rawText and rawText ~= '' then | ||
rawText = mw.ustring.gsub(rawText, '<noinclude>.-</noinclude>', '') | rawText = mw.ustring.gsub(rawText, '<noinclude>.-</noinclude>', '') | ||
rawText = mw.ustring.gsub(rawText, '<!--.--->', '') | rawText = mw.ustring.gsub(rawText, '<!--.-?-->', '') | ||
rawText = mw.text.trim(rawText) | rawText = mw.text.trim(rawText) | ||
| Строка 51: | Строка 53: | ||
end | end | ||
-- Генерация только интерактивной ImageMap карты | |||
function p.map(frame) | |||
function p. | |||
local args = getArgs(frame) | local args = getArgs(frame) | ||
local jsonData = loadData(args) | local jsonData = loadData(args) | ||
local | local file = args['файл'] or args['изображение'] or jsonData.file or 'Схема_Муроморского_метрополитена.png' | ||
local width = args['ширина'] or jsonData.width or '850px' | |||
local alt = args['alt'] or args['название'] or jsonData.title or 'Схема скоростного транспорта' | |||
local defaultRadius = args['радиус'] or jsonData.defaultRadius or '16' | |||
local mapText = 'Файл:' .. file .. '|' .. width .. '|center|alt=' .. alt .. '\n' | |||
mapText = mapText .. '# Автоматически сгенерированная разметка станций\n' | |||
if jsonData.lines then | |||
for _, line in ipairs(jsonData.lines) do | for _, line in ipairs(jsonData.lines) do | ||
-- Зона названия / плашки линии (если задан box) | |||
if line.box and line.article then | |||
mapText = mapText .. 'rect ' .. line.box .. ' [[' .. line.article .. '|' .. (line.name or line.article) .. ']]\n' | |||
end | |||
-- Дополнительные произвольные полигоны линий (если есть) | |||
if line.shapes then | |||
for _, shape in ipairs(line.shapes) do | |||
mapText = mapText .. shape .. '\n' | |||
end | |||
end | |||
-- Станции линии | |||
if line.stations then | |||
for _, st in ipairs(line.stations) do | |||
if st.coords and st.article then | |||
local r = st.radius or defaultRadius | |||
mapText = mapText .. 'circle ' .. st.coords .. ' ' .. r .. ' [[' .. st.article .. '|' .. (st.name or st.article) .. ']]\n' | |||
end | |||
end | |||
end | |||
end | end | ||
end | end | ||
-- Дополнительные объекты (вокзалы, аэропорты) | |||
local extras = {'Вокзалы', 'Ж/д станции', 'Терминалы', 'Аэропорты'} | |||
for _, key in ipairs(extras) do | |||
if jsonData[key] then | |||
for _, item in ipairs(jsonData[key]) do | |||
if item[1] and item[2] then | |||
mapText = mapText .. 'circle ' .. item[2] .. ' ' .. defaultRadius .. ' ' .. item[1] .. '\n' | |||
for _, | |||
end | end | ||
end | end | ||
end | end | ||
end | end | ||
return | mapText = mapText .. 'desc none\n' | ||
-- Обработка через встроенный парсер MediaWiki тега <imagemap> | |||
return frame:preprocess('{{#tag:imagemap|' .. mapText .. '}}') | |||
end | end | ||
return p | return p | ||