Модуль:ТранспортнаяСхема: различия между версиями

мНет описания правки
мНет описания правки
Строка 1: Строка 1:
local p = {}
local p = {}


-- Универсальное слияние аргументов (из инфобокса, шаблона и вызова)
local function getArgs(frame)
local function getArgs(frame)
     local args = {}
     local args = {}
Строка 16: Строка 15:
end
end


-- Безопасная загрузка JSON
local function loadData(args)
local function loadData(args)
     local dataParam = args['данные'] or args[1]
     local dataParam = args['данные'] or args[1]
Строка 53: Строка 51:
end
end


-- Генерация кода <imagemap> с учётом ширины
local function buildImageMap(jsonData, imageFile, width, defaultRadius)
local function buildImageMap(jsonData, imageFile, width, defaultRadius)
     local radius = defaultRadius or '16'
     local radius = defaultRadius or '16'
Строка 89: Строка 86:
      
      
     local isInfobox = (args['карточка'] == 'да' or args['тип'] == 'карточка')
     local isInfobox = (args['карточка'] == 'да' or args['тип'] == 'карточка')
    local defaultWidth = isInfobox and '280px' or '850px'
   
    -- Ширина теперь строго приоритезирует параметр вызова, затем режим карточки
     local width = args['ширина'] or (isInfobox and '280px') or jsonData.width or '850px'
     local width = args['ширина'] or (isInfobox and '280px') or jsonData.width or '850px'
     local imageFile = args['файл'] or jsonData.image or 'Схема_Муроморского_метрополитена.png'
     local imageFile = args['файл'] or jsonData.image or 'Схема_Муроморского_метрополитена.png'
Строка 105: Строка 99:
             ['text-align'] = 'center'
             ['text-align'] = 'center'
         })
         })
    -- Принудительное ограничение стилей для картинок внутри схемы (чтобы не ломали инфобокс)
    root:wikitext('<style>.ts-transport-map-card img { max-width: 100% !important; width: 100% !important; height: auto !important; box-sizing: border-box; }</style>')


     -- Контейнер карты
     -- Контейнер карты
Строка 111: Строка 108:
         :css({
         :css({
             ['display'] = isInfobox and 'block' or 'inline-block',
             ['display'] = isInfobox and 'block' or 'inline-block',
            ['width'] = isInfobox and '100%' or 'auto',
             ['max-width'] = '100%',
             ['max-width'] = '100%',
             ['background'] = isInfobox and 'transparent' or 'var(--background-color-base, #ffffff)',
             ['background'] = isInfobox and 'transparent' or 'var(--background-color-base, #ffffff)',
Строка 123: Строка 121:
             ['overflow-x'] = 'auto',
             ['overflow-x'] = 'auto',
             ['max-width'] = '100%',
             ['max-width'] = '100%',
             ['text-align'] = 'center'
             ['text-align'] = 'center',
            ['width'] = isInfobox and '100%' or 'auto'
         })
         })


Строка 141: Строка 140:
     end
     end


     -- Легенда и список выводятся только вне карточки инфобокса
     -- Легенда и список (выводятся только вне карточки)
     if not isInfobox then
     if not isInfobox then
         if jsonData.lines and #jsonData.lines > 0 then
         if jsonData.lines and #jsonData.lines > 0 then