Для документации этого модуля может быть создана страница Модуль:Появления/doc
local appearance = {}
function appearance.appearanceCreate(frame)
--подготовка
local library = require('Модуль:Библиотека')
local seriesApi = require('Модуль:Серии')
local args = frame.args
local name
if args['имя'] then
name = args['имя']
else
name = mw.title.getCurrentTitle().text
end
--создание заголовка
local header = mw.html.create("div"):addClass('appBlock_header'):wikitext('Присутствие в сериях')
--создание оболочки
local containerBlock = mw.html.create('div'):addClass('appBlock_apperanceBlock'):attr('data-name', name):node(header)
--построение блока
local sC = 1
--проход по сезонам
while args['сезон '..sC] do
--проверка на появление
if (args['сезон '..sC] ~= 'none') then
local season = {}
--разбор на статусные группы
local statusGroups = library.string.split(args['сезон '..sC], ';%s?', true)
--проход по статусным группам
for i = 1, #statusGroups do
--определение статуса
local parsedStatusGroup = library.string.split(statusGroups[i], ':%s?', true)
local appStatus = parsedStatusGroup[1]--статус текущей группы серий
local appSeries = parsedStatusGroup[2]--серии текущей группы
--проверка на заполненность
if appSeries then
--разбор по сериям/диапазонам
local series = library.string.split(appSeries, ',%s?', true)
for j = 1, #series do
--если значение конвертируется в число => не диапазон
local seriesTN = tonumber(series[j])
--проверка значений на адекватность
if seriesTN and seriesTN <= seriesApi:getLength( 'g4', sC ) and seriesTN > 0 then
season[seriesTN] = appStatus
else
--разбор интервала
local interval = library.string.split(series[j], '-')
--проверка на полноту интервала
if interval[2] then
local interval1TN = tonumber(interval[1])
local interval2TN = tonumber(interval[2])
--проверка значений на адекватность
if (interval1TN and interval2TN and interval1TN <= interval2TN
and interval2TN <= seriesApi:getLength( 'g4', sC ) and interval1TN > 0) then
--проход по диапазону
for k = interval1TN, interval2TN do
season[k] = appStatus
end
end
end
end
end
end
end
--создание группы серий
local rightColumn = mw.html.create('div'):addClass('appBlock_episodesGroup')
seriesApi:forEach(function( series, i )
--определение статуса
local dAppearance
if season[i] == 'главный' then
dAppearance = 'main'
elseif season[i] == 'второстепенный' then
dAppearance = 'supporting'
elseif season[i] == 'фоновый' then
dAppearance = 'background'
elseif season[i] == 'упоминаемый' then
dAppearance = 'mentioned'
else
dAppearance = 'missing'
end
--создание графы эпизода
local episode = mw.html.create('div')
episode:addClass('appBlock_episode')
episode:wikitext(i)
episode:attr('data-appearance', dAppearance)
episode:attr( 'data-series-name', series.name )
if series.pageName ~= series.name then
episode:attr( 'data-article-link', series.pageName )
end
episode:attr('data-season-number', sC)
rightColumn:node(episode)
end, 'g4', sC)
--создание и добавление новой строки
local leftColumn = mw.html.create('div'):addClass('appBlock_season'):wikitext('Сезон '..sC)
local line = mw.html.create('div'):addClass('appBlock_line'):node(leftColumn):node(rightColumn)
containerBlock:node(line)
end
sC = sC + 1
end
return containerBlock
end
return appearance