Модуль:HF/MediaNavs: различия между версиями
Перейти к навигации
Перейти к поиску
[непроверенная версия] | [отпатрулированная версия] |
Нет описания правки |
Нет описания правки |
||
(не показано 10 промежуточных версий этого же участника) | |||
Строка 14: | Строка 14: | ||
-- Language functions | -- Language functions | ||
local language = mw.language.new('ru') | 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 | |||
--------------------------------------------------------- | --------------------------------------------------------- | ||
-- Открытые функции (вызываются из шаблона или статьи) -- | -- Открытые функции (вызываются из шаблона или статьи) -- | ||
Строка 19: | Строка 28: | ||
-- Обеспечивает кросс-медиа навигацию | -- Обеспечивает кросс-медиа навигацию | ||
function MN.MediaNav(frame) | function MN.MediaNav(frame) | ||
local iargs = getArgs(frame) | |||
return MN._MediaNav(iargs) | return MN._MediaNav(iargs) | ||
end | end | ||
Строка 28: | Строка 37: | ||
function MN._MediaNav ( args ) | function MN._MediaNav ( args ) | ||
-- {{#invoke:HF/MediaNavs|MediaNav|1=<Категория>|2=<Название>|3=<Номер>|4=<Направление>|5=<Отображение>}} | -- {{#invoke:HF/MediaNavs|MediaNav|1=<Категория>|2=<Название>|3=<Номер>|4=<Направление>|5=<Отображение>}} | ||
local Category = args[1] or nil | local Category = args[1] or args['Category'] or nil | ||
local Name = args[2] or nil | local Name = args[2] or args['Name'] or nil | ||
local Release = args[3] or 0 | local Release = args[3] or args['Release'] or 0 | ||
local Direction = args[4] or 0 | local Direction = args[4] or args['Direction'] or 0 | ||
local DisplayType = args[5] or nil | local DisplayType = args[5] or args['DisplayType'] or nil | ||
local querystring = { 'mainlabel=main' } | local querystring = { 'mainlabel=main' } | ||
-- Сезон мультсериала | -- Сезон мультсериала | ||
if Category == 'сезон мультсериала' then | if Category == 'сезон мультсериала' then | ||
table.insert( querystring, HF.Link( ('Категория:Сезоны мультсериала «'..Name..'»') ) ) | 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, | table.insert( querystring, | ||
HF.Link( (" | HF.Link( ("Глава номер::" .. numberFix( Release, Direction ) ) ) | ||
) | ) | ||
if DisplayType == 'Number' then | if DisplayType == 'Number' then | ||
querystring['userparam'] = ' | querystring['userparam'] = 'Глава #' .. numberFix( Release, Direction ) | ||
else | |||
querystring['default'] = Release | |||
end | end | ||
else | |||
return nil | |||
end | end | ||
Текущая версия от 02:06, 18 марта 2020
Этому шаблону не хватает документации. Вы можете помочь проекту, сделав описание шаблона: что он делает, как его использовать, какие параметры он принимает. Это поможет другим использовать его. Для оформления можете воспользоваться {{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 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