Documentation for this module may be created at Module:HF/MediaNav/doc
local MN = {}
-- The page title of whatever page is calling the function
_G.pageTitle = mw.title.getCurrentTitle().text
----------------------------
-- Libraries of functions --
----------------------------
-- Modules and functions used inside this Module
-- stands for High Frequency
local HF = require('Module:HF')
-- Parses invocation and template parameters, trims whitespace, and removes blanks.
local getArgs = require('Dev:Arguments').getArgs
-- Language functions
local language = mw.language.new('en')
local function chapterFix (chapter)
if chapter and tonumber(chapter) > 700 then
return '700+' .. (tonumber(chapter) - 700)
else
return chapter or ''
end
end
----------------------------------------------------------
-- Public functions (called from a Template or article) --
----------------------------------------------------------
-- Provides cross-media navigation
function MN.MediaNav(frame)
local iargs = getArgs(frame)
return MN._MediaNav(iargs)
end
---------------------------------------------------------
-- Internal functions (used in this and other Modules) --
---------------------------------------------------------
-- Provides cross-media navigation
function MN._MediaNav ( args )
-- {{tlx|1=MediaNav|2=Media Category|3=Release Number|4=Direction|5=shippuden=Value|6=boruto=Value|7=sasukeretsuden=Value|8=konohashinden=Value|9=bluevortex=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['shippuden'] or 'No'
if Shippuden == 'Yes' then Shippuden = true else Shippuden = false end
local Boruto = args[5] or args['boruto'] or 'No'
if Boruto == 'Yes' then Boruto = true else Boruto = false end
local SasukeRetsuden = args[6] or args['sasukeretsuden'] or 'No'
if SasukeRetsuden == 'Yes' then SasukeRetsuden = true else SasukeRetsuden = false end
local KonohaShinden = args[7] or args['konohashinden'] or 'No'
if KonohaShinden == 'Yes' then KonohaShinden = true else KonohaShinden = false end
local BlueVortex= args[8] or args['bluevortex'] or 'No'
if BlueVortex == 'Yes' then BlueVortex = true else BlueVortex = false end
local DisplayType = args['DisplayType'] or nil
local querystring = { 'mainlabel=main' }
local list1 = { Episode = true, Movie = true, Arc = true }
local list2 = { Volume = true, Databook = true, Fanbook = true, Artbook = true }
if list1[Category] then
table.insert( querystring,
HF.Link( ('Concept:%ss of %s'):format(
Category,
(Boruto == true and 'Boruto' or
(Shippuden == true and 'Naruto Shippuden'
or 'Naruto Original')
)
) )
)
elseif list2[Category] then
table.insert( querystring, ('[[Concept:%s]]'):format( Category ) )
table.insert( querystring,
Boruto == true and '[[Manga::Boruto]]' or '[[Manga::!Boruto]]'
)
table.insert( querystring,
SasukeRetsuden == true and '[[Manga::Sasuke Retsuden]]' or '[[Manga::!Sasuke Retsuden]]'
)
table.insert( querystring,
KonohaShinden == true and '[[Manga::Konoha Shinden]]' or '[[Manga::!Konoha Shinden]]'
)
table.insert( querystring,
BlueVortex == true and '[[Manga::Blue Vortex]]' or '[[Manga::!Blue Vortex]]'
)
elseif Category == 'Chapter' then
table.insert( querystring,
Boruto == true and
HF.Link('Concept:Chapter of Boruto Manga') or
SasukeRetsuden == true and
HF.Link('Concept:Chapter of Sasuke Retsuden Manga') or
KonohaShinden == true and
HF.Link('Concept:Chapter of Konoha Shinden Manga') or
BlueVortex == true and
HF.Link('Concept:Chapter of Boruto Two Blue Vortex Manga') or
HF.Link('Concept:Chapter of Naruto Manga') )
else
return nil
end
table.insert( querystring,
HF.Link( ("%s number::%s")
:format( Category,
(tonumber(Release or nil) or 0) + (tonumber(Direction or nil) or 0) ) )
)
if Category == 'Episode' then
querystring['default'] =
(Boruto == true and
"''Boruto'' Episode" or
(Shippuden == true and
"''Naruto Shippūden'' Episode" or
"''Naruto'' Episode")) .. ' #' .. Release
if args['DisplayType'] == 'Number' then
querystring['userparam'] =
(Boruto == true and
"''Boruto'' Episode" or
(Shippuden == true and
"''Naruto Shippūden'' Episode" or
"''Naruto'' Episode")) .. ' #' .. chapterFix( Release )
end
elseif Category == 'Chapter' then
querystring['default'] =
(Boruto == true and
"''Boruto'' Chapter" or
(SasukeRetsuden == true and
"''Sasuke Retsuden'' Chapter" or
(KonohaShinden == true and
"''Konoha Shinden'' Chapter" or
(BlueVortex == true and
"''Boruto: Two Blue Vortex'' Chapter" or
"''Naruto'' Chapter") ) ) ) .. ' #' .. Release
if args['DisplayType'] == 'Number' then
querystring['userparam'] =
(Boruto == true and
"''Boruto'' Chapter" or
(SasukeRetsuden == true and
"''Sasuke Retsuden'' Chapter" or
(KonohaShinden == true and
"''Konoha Shinden'' Chapter" or
(BlueVortex == true and
"''Boruto: Two Blue Vortex'' Chapter" or
"''Naruto'' Chapter") ) ) ) .. ' #' .. 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 )
-- for each result is a record, and the first property should be the bare page name, the second the type
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
-------------------------------------------------
-- Output (send it back to whatever called it) --
-------------------------------------------------
return MN