Модуль:HF/Infobox/Episode

Материал из Викимультии — энциклопедии мультипликации
Перейти к навигации Перейти к поиску


Документация
local Infobox = {}
-------------------------------------
-- Библиотеки и глобальные функции --
-------------------------------------
-- обозначает высокочастотный
local HF = require('Module:HF')
-- Анализирует параметры вызова и шаблона, удаляет пробелы и удаляет пробелы.
local getArgs = require('Module:Arguments').getArgs
-- Функции MediaNav
local MN = require('Module:HF/MediaNav')._MediaNav
-- Вспомогательные функции (локальные, чтобы не беспокоиться о пространствах имен)
local mediaDebutList = require('Module:HF/Infobox').mediaDebutList
-- Заголовок любой страницы, вызывающей функцию
local pageTitle = mw.title.getCurrentTitle().text
-----------------------------------------------------------
-- Локальные функции (используются только в этом модуле) --
-----------------------------------------------------------
-- Нет.
---------------------------------------------------------
-- Открытые функции (вызываются из шаблона или статьи) --
---------------------------------------------------------
function Infobox.titleEpisode(frame)
	local args = getArgs(frame)
	if mw.title.getCurrentTitle().isContentPage == true then
		local out = {}
		table.insert( out, HF.Category('Эпизоды аниме по алфавиту') )
		--local _editFormURL = mw.html.create('span')
		--	:css('float','right'):css('font-size','x-small')
        --    :wikitext( HF.Link('Special:FormEdit/Episode/' .. pageTitle, 'edit') ):allDone()			
		--local editFormURL = tostring(_editFormURL)
		if args['название'] then
			mw.smw.set{ ['Название'] = args['название'], ['Названия'] = args['название'] }
			table.insert( out, ('%s'):format(mw.text.trim(args['название']:match('[^(]*'))) )
		else
			mw.smw.set {
				['Название'] = tostring(pageTitle:match("[^(]*"):gsub(''',"'")),
				['Названия'] = pageTitle:match("[^(]*")
			}
			table.insert( out, ('%s'):format(mw.text.trim(pageTitle:match('[^(]*'))) )
		end
		--if args['english'] then
		--	mw.smw.set {
		--		['English name'] = args['english'],
		--		['Names'] = args['english']
		--	}
		--end
		if args['кандзи'] then
			mw.smw.set {
				['Кандзи'] = args['кандзи'],
				['Названия'] = args['кандзи']
			}
		else
			mw.smw.set{ ['Обслуживание'] = 'Кандзи' }
		end
		if args['киридзи'] then
			mw.smw.set {
				['Киридзи'] = args['киридзи'],
				['Названия'] = args['киридзи']
			}
		end
		if not args['арка'] then mw.smw.set{ ['Несобранные'] = 'Да' } end
		return table.concat( out ) .. ( args['ref'] or '' )
	elseif mw.title.getCurrentTitle().namespace == 10
		and not pageTitle:match('/testcases') then
			return nil
	else
		return ( args['название'] and args['название']:match('[^(]*') ) or pageTitle:match("[^(]*")
	end
end

-- Предыдущий эпизод
function Infobox.episodePrevious (frame)
	local args = getArgs(frame)
	local previous =
		MN {
			'Эпизод', args['эпизод'], '-1',
			['боруто'] = args['боруто аниме'], ['ураганные хроники'] = args['ураганные хроники']
		}
	return previous and ('%s'):format( previous ) or nil
end

-- Текущий эпизод
function Infobox.episodeEpisode (frame)
	local args = getArgs(frame)
	mw.smw.set { ['Эпизод номер'] = args['эпизод'] }
	local affix = args['watchonlinelink']
		and (' <sup>([http://www.crunchyroll.com/media-%s Смотреть онлайн])</sup>')
			:format( args['watchonlinelink'] )
		or ''
	if args['боруто аниме'] == 'Да' then
		mw.smw.set { ['Аниме'] = 'Боруто: Следующее поколение Наруто' }
		return ("''Боруто'' #%s"):format( args['эпизод'] ) .. affix
	elseif args['ураганные хроники'] == 'Да' then
		mw.smw.set { ['Аниме'] = 'Наруто: Ураганные хроники' }
		return ("''Наруто: Ураганные хроники'' #%s"):format( args['эпизод'] ) .. affix
	else
		mw.smw.set { ['Аниме'] = 'Наруто' }
		return ("''Наруто'' #%s"):format( args['эпизод'] ) .. affix
	end
end

-- Следующий эпизод
function Infobox.episodeNext (frame)
	local args = getArgs(frame)
	local nextepisode =
		MN {
			'Эпизод', args['эпизод'], '1',
			['боруто'] = args['боруто аниме'], ['ураганные хроники'] = args['ураганные хроники']
		}
	return nextepisode and ('%s'):format( nextepisode ) or nil
end

--Манга
function Infobox.episodeManga (frame)
	local args = getArgs(frame)
	local out = {}
	local chapters = mw.text.split( args['главы'], ',%s*' )
	if args['боруто'] == 'Да' then
		mw.smw.set { ['Манга'] = 'Боруто: Следующее поколение Наруто (манга)' }
	else
		mw.smw.set { ['Манга'] = 'Наруто (манга)' }
	end
	for _,v in ipairs( chapters ) do
		mw.smw.set { ['Глава манги'] = mw.text.trim(v) }
		local chapter = tonumber(mw.text.trim(v)) and
			MN {
				'Глава', mw.text.trim(v),
				['DisplayType'] = 'Number', ['боруто'] = args['боруто']
			}
		if chapter then table.insert( out, chapter ) end
	end
	return table.concat( out, ', ' )
end

--Персонажи
function Infobox.episodeCharacters( frame )
	local args = getArgs(frame)
	local Boruto = args['боруто аниме'] == 'Да' and true or nil
	local Shippuden = args['ураганные хроники'] == 'Да' and true or nil
	local number = tonumber( args['эпизод'] or 0 ) + ( Boruto and 720 or ( Shippuden and 220 or 0 ) )
	local query =
		mw.smw.ask {
        	HF.Link( ('Категория:Персонажи аниме «%s»'):format(
				(Boruto == true and 'Боруто: Следующее поколение Наруто' or
					(Shippuden == true and 'Наруто: Ураганные хроники'
						or 'Наруто')
				)
        	) ),
			( HF.Link('Дебют в аниме::%s') ):format( number ),
			'?Обслуживание',
			'mainlabel=main'
		}
	return mediaDebutList ( query )
end
-- Дзюцу
function Infobox.episodeJutsu( frame )
	local args = getArgs(frame)
	local Boruto = args['боруто аниме'] == 'Да' and true or nil
	local Shippuden = args['ураганные хроники'] == 'Да' and true or nil
	local number = tonumber( args['эпизод'] or 0 ) + ( Boruto and 720 or ( Shippuden and 220 or 0 ) )
	local query =
		mw.smw.ask {
			HF.Link('Категория:Дзюцу по алфавиту'),
			( HF.Link('Дебют в аниме::%s') ):format( number ),
			'?Обслуживание',
			'mainlabel=main'
		}
	return mediaDebutList ( query )
end

-- Предметы
function Infobox.episodeTools( frame )
	local args = getArgs(frame)
	local Boruto = args['боруто аниме'] == 'Да' and true or nil
	local Shippuden = args['ураганные хроники'] == 'Да' and true or nil
	local number = tonumber( args['эпизод'] or 0 ) + ( Boruto and 720 or ( Shippuden and 220 or 0 ) )
	local query =
		mw.smw.ask {
			HF.Link('Категория:Предметы по алфавиту'),
			( HF.Link('Дебют в аниме::%s') ):format( number ),
			'?Обслуживание',
			'mainlabel=main'
		}
	return mediaDebutList ( query )
end

-- Команды
function Infobox.episodeTeams( frame )
	local args = getArgs(frame)
	local Boruto = args['боруто аниме'] == 'Да' and true or nil
	local Shippuden = args['ураганные хроники'] == 'Да' and true or nil
	local number = tonumber( args['эпизод'] or 0 ) + ( Boruto and 720 or ( Shippuden and 220 or 0 ) )
	local query =
		mw.smw.ask {
			HF.Link('Категория:Команды по алфавиту'),
			HF.Link('Появляется в::Аниме'),
			( HF.Link('Дебют в аниме::%s') ):format( number ),
			'?Обслуживание',
			'mainlabel=main'
		}
	return mediaDebutList ( query )
end
-------------------------------------------------------------------
-- Экспортируемые функции (используются в этом и других модулях) --
-------------------------------------------------------------------
-- Нет.
----------------------------------------------
-- Вывод (отправьте его обратно как угодно) --
----------------------------------------------
return Infobox