Модуль:HF/MediaNavs

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


Документация
local MN = {}

-- Заголовок любой страницы, вызывающей функцию
_G.pageTitle = mw.title.getCurrentTitle().text

----------------------------
-- Библиотеки функций --
----------------------------
-- Модули и функции, используемые внутри этого модуля
-- обозначает высокочастотный
local HF = require('Module:HF')
-- Parses invocation and template parameters, trims whitespace, and removes blanks.
local getArgs = require('Module:Arguments').getArgs
-- Language functions
local language = mw.language.new('ru')

local function numberFix (release, direction)
	
    if release and direction then 
        return (tonumber(release or nil) or 0) + (tonumber(direction or nil) or 0)
    else
        return release or ''
    end
end
---------------------------------------------------------
-- Открытые функции (вызываются из шаблона или статьи) --
---------------------------------------------------------
-- Обеспечивает кросс-медиа навигацию
function MN.MediaNav(frame)
	local iargs = getArgs(frame)
    return MN._MediaNav(iargs)
end
---------------------------------------------------------------
-- Внутренние функции (используются в этом и других модулях) --
---------------------------------------------------------------
-- Обеспечивает кросс-медиа навигацию
function MN._MediaNav ( args )
	-- {{#invoke:HF/MediaNavs|MediaNav|1=<Категория>|2=<Название>|3=<Номер>|4=<Направление>|5=<Отображение>}}
	local Category = args[1] or args['Category'] or nil
	local Name = args[2] or args['Name'] or nil
	local Release = args[3] or args['Release'] or 0
	local Direction = args[4] or args['Direction'] or 0
	local DisplayType = args[5] or args['DisplayType'] or nil
	local querystring = { 'mainlabel=main' }
	
	-- Сезон мультсериала
	if Category == 'сезон мультсериала' then
		table.insert( querystring,
			HF.Link( ('Категория:Сезоны мультсериала «'..Name..'»') )
		)
		table.insert( querystring, 
			HF.Link( ("Сезон номер::" .. numberFix( Release, Direction ) ) )
		)
		if DisplayType == 'Number' then
			querystring['userparam'] = 'Сезон #' .. numberFix( Release, Direction )
		else
			querystring['default'] = Release
		end
	elseif Category == 'эпизод мультсериала' then
		table.insert( querystring,
			HF.Link( ('Категория:Эпизоды мультсериала «'..Name..'»') )
		)
		table.insert( querystring, 
			HF.Link( ("Общий эпизод номер::" .. numberFix( Release, Direction ) ) )
		)
		if DisplayType == 'Number' then
			querystring['userparam'] = 'Эпизод #' .. numberFix( Release, Direction )
		else
			querystring['default'] = Release
		end
	elseif Category == 'эпизод аниме' then
		table.insert( querystring,
			HF.Link( ('Категория:Эпизоды аниме «'..Name..'»') )
		)
		table.insert( querystring, 
			HF.Link( ("Эпизод номер::" .. numberFix( Release, Direction ) ) )
		)
		if DisplayType == 'Number' then
			querystring['userparam'] = 'Эпизод #' .. numberFix( Release, Direction )
		else
			querystring['default'] = Release
		end
	elseif Category == 'сезон аниме' then
		table.insert( querystring,
			HF.Link( ('Категория:Сезоны аниме «'..Name..'»') )
		)
		table.insert( querystring, 
			HF.Link( ("Сезон аниме::" .. numberFix( Release, Direction ) ) )
		)
		if DisplayType == 'Number' then
			querystring['userparam'] = 'Сезон #' .. numberFix( Release, Direction )
		else
			querystring['default'] = Release
		end
	elseif Category == 'глава' then
		table.insert( querystring,
			HF.Link( ('Категория:Главы манги «'..Name..'»') )
		)
		table.insert( querystring, 
			HF.Link( ("Глава номер::" .. numberFix( Release, Direction ) ) )
		)
		if DisplayType == 'Number' then
			querystring['userparam'] = 'Глава #' .. numberFix( Release, Direction )
		else
			querystring['default'] = Release
		end
	elseif Category == 'том' then
		table.insert( querystring,
			HF.Link( ('Категория:Тома манги «'..Name..'»') )
		)
		table.insert( querystring, 
			HF.Link( ("Том номер::" .. numberFix( Release, Direction ) ) )
		)
		if DisplayType == 'Number' then
			querystring['userparam'] = 'Том #' .. numberFix( Release, Direction )
		else
			querystring['default'] = Release
		end
	elseif Category == 'роман' then
		table.insert( querystring,
			HF.Link( ('Категория:Главы лайт-новелы «'..Name..'»') )
		)
		table.insert( querystring, 
			HF.Link( ("Глава номер::" .. numberFix( Release, Direction ) ) )
		)
		if DisplayType == 'Number' then
			querystring['userparam'] = 'Глава #' .. numberFix( Release, Direction )
		else
			querystring['default'] = Release
		end
	else
		return nil
	end
	
	local query = mw.smw.ask( querystring )
	-- для каждого результата есть запись, и первое свойство должно быть пустым именем страницы, а второе - типом
	if query then
		local o = {}
		for _,item in ipairs( query ) do
			--MediaNav/link
			table.insert(o,
				HF.Link( 
					item['main']:match('%[%[([^|]*)|?'), 
					querystring['userparam'] or mw.text.trim(item['main']:match('%[%[:?([^|]*)|?'):match("[^(]*"))
				)
			)
		end
		return table.concat(o, '\n')
	else
		return nil
	end
end
-------------------------------------------------
-- Вывод (отправьте его обратно как угодно) --
-------------------------------------------------
return MN