Модуль:HF/MediaNavs
Перейти к навигации
Перейти к поиску
Этому шаблону не хватает документации. Вы можете помочь проекту, сделав описание шаблона: что он делает, как его использовать, какие параметры он принимает. Это поможет другим использовать его. Для оформления можете воспользоваться {{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')
---------------------------------------------------------
-- Открытые функции (вызываются из шаблона или статьи) --
---------------------------------------------------------
-- Обеспечивает кросс-медиа навигацию
function MN.MediaNav(frame)
local iargs = getArgs(frame)
return MN._MediaNav(iargs)
end
---------------------------------------------------------------
-- Внутренние функции (используются в этом и других модулях) --
---------------------------------------------------------------
-- Обеспечивает кросс-медиа навигацию
function MN._MediaNav ( args )
-- {{#invoke:HF/MediaNavs|MediaNav|<Категория>|<Название>|<Номер>|<Направление>|<Отображение>}}
local Category = args[1] or nil
assert(Category, 'No MediaNav category given')
local Name = args[2] or nil
assert(Name, 'No MediaNav name given')
local Release = args[3] or nil
assert(Name, 'No MediaNav release given')
local Direction = args[4] or 0
local DisplayType = args[5] or nil
local querystring = { 'mainlabel=main' }
-- эпизод мультсериала
if Category == 'сезон мультсериала' then
table.insert( querystring, HF.Link( ('Категория:Сезоны мультсериала «%s»'):format(Name) ) )
querystring['default'] = Release
if args['DisplayType'] == 'Number' then
querystring['userparam'] = Release
end
else
return nil
end
table.insert( querystring, HF.Link( ("Сезон номер::%s"):format( "Сезон", (tonumber(Release or nil) or 0) + (tonumber(Direction or nil) or 0) ) ) )
if Category == 'сезон мультсериала' then
table.insert( querystring, HF.Link( ('Категория:Сезоны мультсериала «%s»'):format(Name) ) )
querystring['default'] = Release
if args['DisplayType'] == 'Number' then
querystring['userparam'] = 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