Дополнительные действия
Этому шаблону не хватает документации. Вы можете помочь проекту, сделав описание шаблона: что он делает, как его использовать, какие параметры он принимает. Это поможет другим использовать его. Для оформления можете воспользоваться {{doc}} или {{doc-inline}}. Не забывайте помещать описание внутрь <noinclude></noinclude>. P.S. Также не забываем про категорию. |
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 chapterFix (chapter)
if chapter and tonumber(chapter) > 700 then
return '700+' .. (tonumber(chapter) - 700)
else
return chapter or ''
end
end
---------------------------------------------------------
-- Открытые функции (вызываются из шаблона или статьи) --
---------------------------------------------------------
-- Обеспечивает кросс-медиа навигацию
function MN.MediaNav(frame)
local iargs = getArgs(frame)
return MN._MediaNav(iargs)
end
---------------------------------------------------------------
-- Внутренние функции (используются в этом и других модулях) --
---------------------------------------------------------------
-- Обеспечивает кросс-медиа навигацию
function MN._MediaNav ( args )
-- {{tlx|1=MediaNav|2=Media Category|3=Release Number|4=Direction|5=shippuden=Value|6=boruto=Value}}
local Category = args[1] or args['Category'] or nil
assert(Category, 'No MediaNav category given')
local Release = args[2] or args['Release'] or 0
assert(Release, 'No MediaNav release given')
local Direction = args[3] or args['Direction'] or 0
local Shippuden = args[4] or args['ураганные хроники'] or 'Нет'
if Shippuden == 'Да' then Shippuden = true else Shippuden = false end
local Boruto = args[5] or args['боруто'] or 'Нет'
if Boruto == 'Да' then Boruto = true else Boruto = false end
local DisplayType = args['DisplayType'] or nil
local querystring = { 'mainlabel=main' }
--local list1 = { ['Эпизод'] = true, ['Фильм'] = true, ['Арка'] = true }
--local list2 = { ['Том'] = true, ['Датабук'] = true, ['Фанбук'] = true, ['Артбук'] = true }
-- Эпизоды
if Category == 'Эпизод' then
table.insert( querystring,
HF.Link( ('Категория:Эпизоды аниме «%s»'):format(
(Boruto == true and 'Боруто: Новое поколение Наруто' or
(Shippuden == true and 'Наруто: Ураганные хроники'
or 'Наруто')
)
) )
)
--Тома манги
elseif Category == 'Том' then
table.insert( querystring,
Boruto == true and
HF.Link('Категория:Тома манги «Боруто: Новое поколение Наруто»') or
HF.Link('Категория:Тома манги «Наруто»')
)
--Главы манги
elseif Category == 'Глава' then
table.insert( querystring,
Boruto == true and
HF.Link('Категория:Главы манги «Боруто: Новое поколение Наруто»') or
HF.Link('Категория:Главы манги «Наруто»')
)
--Сезон мультсериала
elseif Category == 'Сезон' then
table.insert( querystring,
HF.Link( ('Категория:Сезоны мультсериала «'.. args[4] .. '»') )
)
--Фильмы
--Сюжетные арки
--Датабуки
--Фанбуки
--Артбуки
else
return nil
end
table.insert( querystring,
HF.Link( ("%s номер::%s")
:format( Category,
(tonumber(Release or nil) or 0) + (tonumber(Direction or nil) or 0) ) )
)
if Category == 'Эпизод' then
querystring['default'] =
(Boruto == true and
"''Боруто'' эпизод" or
(Shippuden == true and
"''Наруто: Ураганные хроники'' эпизод" or
"''Наруто'' эпизод")) .. ' #' .. Release
if args['DisplayType'] == 'Number' then
querystring['userparam'] =
(Boruto == true and
"''Боруто'' эпизод" or
(Shippuden == true and
"''Наруто: Ураганные хроники'' эпизод" or
"''Наруто'' эпизод")) .. ' #' .. chapterFix( Release )
end
elseif Category == 'Сезон' then
querystring['default'] = Release
if args['DisplayType'] == 'Number' then
querystring['userparam'] = Release
end
elseif Category == 'Глава' then
querystring['default'] =
(Boruto == true and
"''Боруто'' глава" or
"''Наруто'' глава") .. ' #' .. Release
if args['DisplayType'] == 'Number' then
querystring['userparam'] =
(Boruto == true and
"''Боруто'' глава" or
"''Наруто'' глава") .. ' #' .. chapterFix( Release )
end
else
querystring['default'] = Category .. ' #' .. Release
if args['DisplayType'] == 'Number' then
querystring['userparam'] = Category .. ' #' .. chapterFix( Release )
end
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