Для документации этого модуля может быть создана страница Модуль:Серии/doc
local seriesApi = {}
seriesApi._serialsTable = {}
seriesApi._serialsTable.length = 2
--G4
seriesApi._serialsTable[1] = mw.loadData( 'Модуль:Серии/G4' )
--Friendship is Forever
seriesApi._serialsTable[2] = mw.loadData( 'Модуль:Серии/FriendshipForever' )
--Pony Life
seriesApi._serialsTable[3] = mw.loadData( 'Модуль:Серии/PonyLife' )
--Make Your Mark
seriesApi._serialsTable[4] = mw.loadData( 'Модуль:Серии/MYM' )
--Tell Your Tale
seriesApi._serialsTable[5] = mw.loadData( 'Модуль:Серии/TYT' )
seriesApi._episodesTable = seriesApi._serialsTable[1]
seriesApi._library = require( 'Модуль:Библиотека' )
--name - имя страницы; searchParametres - строка либо таблица. Возможные значения строки или ключи таблицы - ruName(bool), enName(bool), pageName(bool), code(string);
--Возвращает таблицу
function seriesApi:_getEpisodeByName( name, searchParametres )
if type( searchParametres ) == 'string' then
local parameter = searchParametres
searchParametres = {}
searchParametres[ parameter ] = true
end
local episodesCounter
for i, serial in ipairs( self._serialsTable ) do
episodesCounter = 1
for j, season in ipairs( serial ) do
if ( searchParametres and searchParametres.code and searchParametres.code ~= serial.code ) then
break
end
for k, episode in ipairs( season ) do
if ( not searchParametres or searchParametres.ruName ) and name == episode.ruName then
return { episode, serial.name, serial.code, j, k, episodesCounter }
end
if ( not searchParametres or searchParametres.enName ) and name == episode.enName then
return { episode, serial.name, serial.code, j, k, episodesCounter }
end
if ( not searchParametres or searchParametres.pageName ) and episode.pageName and name == episode.pageName then
return { episode, serial.name, serial.code, j, k, episodesCounter }
end
episodesCounter = episodesCounter + 1
end
end
end
end
function seriesApi:_getEpisodeByNumbers( serialCode, seasonNumber, episodeNumber )
local serialTable
for i, serial in ipairs( self._serialsTable ) do
if serialCode == serial.code then
serialTable = serial
end
end
if not serialTable or not serialTable[ seasonNumber ] or not serialTable[ seasonNumber ][ episodeNumber ] then
return
end
local totalEpisodeNumber = 0
for i, season in ipairs( serialTable ) do
for j, episode in ipairs( season ) do
totalEpisodeNumber = totalEpisodeNumber + 1
if j == episodeNumber then
break
end
end
if i == seasonNumber then
break
end
end
return { serialTable[ seasonNumber ][ episodeNumber ], serialTable.name, serialCode, seasonNumber, episodeNumber, totalEpisodeNumber }
end
function seriesApi:_getEpisodeByTotalNumber( serialCode, totalEpisodeNumber )
if totalEpisodeNumber <= 0 then
return
end
local serialTable
for i, serial in ipairs( self._serialsTable ) do
if serialCode == serial.code then
serialTable = serial
end
end
local episodeNumber = 0
for i, season in ipairs( serialTable ) do
for j, episode in ipairs( season ) do
episodeNumber = episodeNumber + 1
if episodeNumber == totalEpisodeNumber then
return { serialTable[ i ][ j ], serialTable.name, serialCode, i, j, totalEpisodeNumber }
end
end
end
end
function seriesApi:getEpisode( parameter1, parameter2, parameter3 )
local selectedEpisode
local episodeTable = {}
if not parameter1 then
return
end
if not parameter2 or type( parameter2 ) == 'table' then
selectedEpisode = self:_getEpisodeByName( parameter1, parameter2 )
elseif type( parameter2 ) == 'number' then
if parameter3 then
selectedEpisode = self:_getEpisodeByNumbers( parameter1, parameter2, parameter3 )
else
selectedEpisode = self:_getEpisodeByTotalNumber( parameter1, parameter2 )
end
end
if not selectedEpisode then
return
end
if selectedEpisode[1].ruName then
episodeTable.name = selectedEpisode[1].ruName
episodeTable.ruName = selectedEpisode[1].ruName
else
episodeTable.name = selectedEpisode[1].enName
end
episodeTable.enName = selectedEpisode[1].enName
if selectedEpisode[1].pageName then
episodeTable.pageName = selectedEpisode[1].pageName
else
episodeTable.pageName = episodeTable.name
end
episodeTable.serialName = selectedEpisode[ 2 ]
episodeTable.serialCode = selectedEpisode[ 3 ]
episodeTable.seasonNumber = selectedEpisode[ 4 ]
episodeTable.episodeNumber = selectedEpisode[ 5 ]
episodeTable.totalEpisodeNumber = selectedEpisode[ 6 ]
return episodeTable
end
function seriesApi:forEach( func, serialCode, seasonNumber )
local serialTable
for i, serial in ipairs( self._serialsTable ) do
if serialCode == serial.code then
serialTable = serial
end
end
if not serialTable or not serialTable[seasonNumber] then
return
end
local iterationsCounter = 1
for i, episode in ipairs( serialTable[seasonNumber] ) do
local episode = self:getEpisode( serialCode, seasonNumber, i )
func( episode, iterationsCounter )
iterationsCounter = iterationsCounter + 1
end
end
function seriesApi:getLength( serialCode, seasonNumber )
local serialTable
for i, serial in ipairs( self._serialsTable ) do
if serialCode == serial.code then
serialTable = serial
end
end
if not serialTable or not serialTable[seasonNumber] then
return
end
local length = 0
for i, episode in ipairs( serialTable[seasonNumber] ) do
length = length + 1
end
return length
end
return seriesApi