Edit the documentation or categories for this module.
local tabs = require('Module:AutomatedTabs').main
local util = require('Module:Util')
local util_cargo = require('Module:CargoUtil')
local util_form = require('Module:FormUtil')
local p = {}
function p.getPageList(frame, title, fulltitle)
local pages = frame:callParserFunction{name = '#dpl', args = {
'',
titleregexp = '^' .. util.dplEscape(title) .. '/.*',
format = ',%PAGE%,;,',
namespace = '',
debug = 0,
}}
if pages == '' and title == fulltitle then return nil end
pages = pages .. fulltitle
local pgtbl = mw.text.split(pages,';')
p.processPageTable(pgtbl)
return pgtbl
end
function p.processPageTable(pgtbl)
for k, v in ipairs(pgtbl) do
if not k or k == '' then
table.remove(pgtbl,k)
else
pgtbl[k] = mw.text.split(v,'/')
table.remove(pgtbl[k],1) -- get rid of the base page
end
end
return
end
function p.jsonFromPages(pages, tabstype)
local data = mw.loadData('Module:SubpageSettings')[tabstype]
local json = { links = { 'Overview' } }
p.jsonLoop(json, pages)
p.processJsonRecursion(json, data.lookup, data.order, '')
return json
end
function p.jsonLoop(json, pages)
while #pages > 0 do
local page = table.remove(pages,1)
p.pageRecursion(json, page)
end
return
end
function p.pageRecursion(json, page)
if not page or #page == 0 then
return
end
titlepart = table.remove(page, 1)
if #page > 0 then
if not json[titlepart] then
json[titlepart] = { links = { 'Overview' } }
end
p.pageRecursion(json[titlepart],page)
elseif #page == 0 then
json.links[#json.links+1] = titlepart
end
return
end
function p.processJsonRecursion(json, lookup, order, index)
table.sort(json.links, function (a,b)
return (util.keyOf(order,a) or 0) < (util.keyOf(order,b) or 0)
end
)
json.names = {}
for k, link in ipairs(json.links) do
json.names[k] = lookup[index .. link] or link
end
for k, v in pairs(json) do
if v.links then
p.processJsonRecursion(v, lookup, order[k] or {}, k)
end
end
return
end
function p.linkAdjustments(json, title)
local tbl = { fr = { find = {}, replace = {} }, cd = {} }
if json.Statistics and json.Statistics.links then
tbl.cd[title .. '/Statistics'] = title .. '/Statistics/' .. json.Statistics.links[#json.Statistics.links]
end
return tbl
end
-- navbox stuff
function p.navboxArgs(tabstype, title)
if tabstype == 'Champion' or tabstype == 'Item' then
return nil
end
local team = (tabstype == 'Team') and title or p.getTeamFromPlayer(title)
local orgnavbox = p.orgNavboxArgs(team)
local navboxes = { orgnavbox }
if tabstype == 'Team' then
table.insert(navboxes,1,p.cplnArgs(team))
end
return p.doWeMakeNavbox(orgnavbox.args) and navboxes
end
function p.orgNavboxArgs(team)
return {
title = 'OrgNavbox',
events = { showAll = true },
args = { team, suffix = 'Yes' },
}
end
function p.cplnArgs(team)
return {
title = 'CurrentLeagueParticipantNavbox',
events = { showAll = true },
args = { team, suffix = 'Yes' },
}
end
function p.doWeMakeNavbox(n_args)
local team = n_args[1]
if not team then return nil end
local teamtitle = mw.title.makeTitle('', team)
if not teamtitle.exists then return nil end
local result = mw.ext.cargo.query(
'InfoboxTeam',
'IsDisbanded',
{ where = string.format('_pageName="%s"',team) }
)
return util_cargo.getOnlyResult(result,'IsDisbanded') == 'No'
end
function p.getTeamFromPlayer(title)
local result = mw.ext.cargo.query('InfoboxPlayer','Team', {
where = '_pageName="' .. title .. '"'
})
return util_cargo.getOnlyResult(result, 'Team')
end
function p.after(frame, fulltitle, tabstype)
local titletbl = mw.text.split(fulltitle, '/')
local text = {}
if tabstype == 'Player' then
p.after_player(text, frame, titletbl)
elseif tabstype == 'Team' then
p.after_team(text, frame, titletbl)
end
if not mw.title.makeTitle('',titletbl[1]).exists then
text[#text+1] = '[[Category:Player Secondary Pages Without Primary Pages]]'
end
local output = table.concat(text)
return output
end
function p.after_player(text, frame, titletbl)
if titletbl[2] == 'Statistics' and titletbl[3] then
text[#text+1] = p.playerConcept(titletbl) or ''
end
if titletbl[2] then
if p.doWeLowercase('InfoboxPlayer', titletbl[1]) == 'Yes' then
text[#text+1] = frame:expandTemplate({ title = 'lowercase' })
end
end
return
end
function p.playerConcept(titletbl)
local player = titletbl[1]
local year = titletbl[3]
local concept = mw.title.makeTitle('Concept', player .. '/Games')
if not concept.exists then
return nil
end
local formlink = util_form.makeBaseQueryURL('CareerPlayerStats', 'CPS', { 'player', 'year'}, { player, year })
return string.format("\n:''To see all stats for %s not separated by tournament, <span class=\"plainlinks\">[%s Click Here]</span>.",
year,
formlink.full
)
end
function p.after_team(text, frame, titletbl)
if titletbl[2] then
if p.doWeLowercase('InfoboxTeam', titletbl[1]) == 'Yes' then
text[#text+1] = frame:expandTemplate({ title = 'lowercase' })
end
end
return
end
function p.doWeLowercase(tbl, title)
local result = mw.ext.cargo.query(tbl, 'IsLowercase', {
where = string.format('_pageName="%s"',title),
groupBy = '_pageName',
})
return util_cargo.getOnlyResult(result,'IsLowercase')
end
function p.main(frame)
if frame == mw.getCurrentFrame() then
args = require('Module:ProcessArgs').merge(true)
else
frame = mw.getCurrentFrame()
end
local tabstype = args[1] or 'Player'
local title_obj = mw.title.getCurrentTitle()
local fulltitle = title_obj.prefixedText
local title = tostring(title_obj.rootPageTitle)
local pages = p.getPageList(frame, title, fulltitle)
frame:callParserFunction{name='#vardefine:page1',args=pages and pages[1]}
local json = pages and p.jsonFromPages(pages, tabstype)
local linkadjustments = json and p.linkAdjustments(json, title)
local navbox = (args.nonavbox ~= 'Yes') and p.navboxArgs(tabstype, title)
local after = p.after(frame, fulltitle,tabstype)
return tabs(json, linkadjustments, navbox, nil, title, after)
end
return p