Для документации этого модуля может быть создана страница Модуль:Инфобокс серии/doc
local infoboxSeries = {}
function infoboxSeries.create( frame )
local numToString = function( num )
if num == 1 then
return 'Первый'
elseif num == 2 then
return 'Второй'
elseif num == 3 then
return 'Третий'
elseif num == 4 then
return 'Четвёртый'
elseif num == 5 then
return 'Пятый'
elseif num == 6 then
return 'Шестой'
elseif num == 7 then
return 'Седьмой'
elseif num == 8 then
return 'Восьмой'
elseif num == 9 then
return 'Девятый'
elseif num == 10 then
return 'Десятый'
elseif num == 11 then
return 'Одинадцатый'
end
end
local args = frame.args
local seriesApi = require( 'Модуль:Серии' )
local library = require( 'Модуль:Библиотека' )
local parser1 = library.parser.create( 'standart' )
local parser2 = library.parser.create({
baseSettingName = 'standart',
actions = {
separators = 'replace'
},
separators = {
[1] = { ',', '<br />' }
}
})
local commonInfobox = require( 'Модуль:Обычный инфобокс' )
local pageName = mw.title.getCurrentTitle().text
local currentEpisode = seriesApi:getEpisode( pageName, 'pageName' )
if not currentEpisode then
return '<span style="color: red">Ошибка. Данной серии не существует</span>[[Категория:Pages with script errors]]'
end
local nextEpisode = seriesApi:getEpisode( currentEpisode.totalEpisodeNumber + 1 )
local previousEpisode = seriesApi:getEpisode( currentEpisode.totalEpisodeNumber - 1 )
local infobox, image
if args[ 'изображение' ] then
image = args[ 'изображение' ]
else
image = pageName..' изображение.png'
end
local infobox = commonInfobox.create( currentEpisode.name, image )
infobox:addHeader( 'Информация' )
infobox:addRow( '№'..currentEpisode.seasonNumber, 'Сезон:' )
infobox:addRow( '№'..currentEpisode.episodeNumber, 'Серия в сезоне:' )
infobox:addRow( '№'..currentEpisode.totalEpisodeNumber, 'Серия в сериале:' )
if (args[ 'эфир' ] and args[ 'эфир' ] ~= '') or (args[ 'эфир рф' ] and args[ 'эфир рф' ] ~= '') then
local broadcast = ''
local title
if args[ 'эфир' ] and args[ 'эфир' ] ~= '' then
broadcast = broadcast..args[ 'эфир' ]
end
if args[ 'эфир' ] and args[ 'эфир' ] ~= '' and args[ 'эфир рф' ] and args[ 'эфир рф' ] ~= '' then
broadcast = broadcast..'<br />'
title = 'Даты выхода в эфир: '
else
title = 'Дата выхода в эфир: '
end
if args[ 'эфир рф' ] and args[ 'эфир рф' ] ~= '' then
broadcast = broadcast..args[ 'эфир рф' ]..' (РФ)'
end
infobox:addRow( broadcast, title )
end
if args[ 'сценаристы' ] and args[ 'сценаристы' ] ~= '' then
local title
if mw.ustring.find( args[ 'сценаристы' ], '[^\\],[^,]' ) then
title = 'Сценаристы:'
else
title = 'Сценарист:'
end
infobox:addRow( parser2:parse( args[ 'сценаристы' ] ), title )
end
if args[ 'раскадровка' ] and args[ 'раскадровка' ] ~= '' then
infobox:addRow( parser2:parse( args[ 'раскадровка' ] ), 'Раскадровка:' )
end
local characters = 0
if args[ 'персонажи' ] and args[ 'персонажи' ] ~= '' then
if mw.ustring.find( args[ 'персонажи' ], '[^\\],[^,]' ) then
characters = 2
else
characters = 1
end
end
local songs = 0
if args[ 'песни' ] and args[ 'песни' ] ~= '' then
if mw.ustring.find( args[ 'песни' ], '[^\\],[^,]' ) then
songs = 2
else
songs = 1
end
end
if characters == 1 then
infobox:addRow( parser2:parse( args[ 'персонажи' ] ), 'Главный персонаж:' )
end
if songs == 1 then
infobox:addRow( parser2:parse( args[ 'песни' ] ), 'Песня:' )
end
if characters == 2 then
infobox:addHeader( 'Главные персонажи' )
infobox:addRow( parser1:parse( args[ 'персонажи' ] ) )
end
if songs == 2 then
infobox:addHeader( 'Песни' )
infobox:addRow( parser1:parse( args[ 'песни' ] ) )
end
infobox:addHeader( 'См. также' )
infobox:addRow( '[[Стенограммы/'..currentEpisode.name..'|Стенограмма]] • [['..pageName..'/Галерея|Галерея]] • [[Отсылки/'..numToString( currentEpisode.seasonNumber )..' сезон#'..currentEpisode.name..'|Отсылки]]' )
infobox:addHeader( 'Навигация' )
local linkNext, linkPrevious
if nextEpisode then
linkNext = '[['..nextEpisode.pageName..'|'..nextEpisode.name..']]'
else
linkNext = 'TBA'
end
if previousEpisode then
linkPrevious = '[['..previousEpisode.pageName..'|'..previousEpisode.name..']]'
else
linkPrevious = 'N/A'
end
infobox:addNav( linkPrevious, linkNext )
return infobox:getInfobox()
end
return infoboxSeries
Материалы сообщества доступны в соответствии с условиями лицензии CC-BY-SA, если не указано иное.