[checked revision] | [checked revision] |
RheingoldRiver (talk | contribs) m (Syncing content across wikis) |
RheingoldRiver (talk | contribs) m (Syncing content across wikis, if something seems broken as a result let me know) |
||
Line 1: | Line 1: | ||
⚫ | |||
local util = require('Module:Util') |
local util = require('Module:Util') |
||
− | local |
+ | local util_args = require('Module:ArgsUtil') |
⚫ | |||
local util_dpl = require('Module:DPLUtil') |
local util_dpl = require('Module:DPLUtil') |
||
local util_table = require('Module:TableUtil') |
local util_table = require('Module:TableUtil') |
||
⚫ | |||
+ | |||
⚫ | |||
+ | local Navbox = require('Module:SubpageNavbox').navbox |
||
local After = require('Module:SubpageAfter').after |
local After = require('Module:SubpageAfter').after |
||
Line 18: | Line 20: | ||
local p = {} |
local p = {} |
||
− | function p.getPageList(frame, title, fulltitle) |
+ | function p.getPageList(frame, title, fulltitle, title_obj) |
local pages = frame:callParserFunction{name = '#dpl', args = { |
local pages = frame:callParserFunction{name = '#dpl', args = { |
||
'', |
'', |
||
− | titleregexp = '^' .. util_dpl.escape( |
+ | titleregexp = '^' .. util_dpl.escape(title_obj.rootText) .. '/.*', |
format = ',%PAGE%,;,', |
format = ',%PAGE%,;,', |
||
− | namespace = |
+ | namespace = title_obj.nsText, |
debug = 0, |
debug = 0, |
||
notuses = 'Template:NoDPLTabs', |
notuses = 'Template:NoDPLTabs', |
||
Line 163: | Line 165: | ||
end |
end |
||
return |
return |
||
− | 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 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.getTeamFromPlayer(title) |
||
− | local where = string.format('_pageName="%s"', title) |
||
− | return util_cargo.getOneResult('InfoboxPlayer', 'Team', {where = where}) |
||
end |
end |
||
function p.main(frame) |
function p.main(frame) |
||
+ | local args = util_args.merge(true) |
||
− | if frame == mw.getCurrentFrame() then |
||
− | args = require('Module:ProcessArgs').merge(true) |
||
− | else |
||
− | frame = mw.getCurrentFrame() |
||
− | end |
||
local tabstype = args[1] or 'Player' |
local tabstype = args[1] or 'Player' |
||
local title_obj = mw.title.getCurrentTitle() |
local title_obj = mw.title.getCurrentTitle() |
||
local fulltitle = title_obj.prefixedText |
local fulltitle = title_obj.prefixedText |
||
local title = tostring(title_obj.rootPageTitle) |
local title = tostring(title_obj.rootPageTitle) |
||
− | local pages = p.getPageList(frame, title, fulltitle) |
+ | local pages = p.getPageList(frame, title, fulltitle, title_obj) |
local json = pages and p.jsonFromPages(pages, tabstype) |
local json = pages and p.jsonFromPages(pages, tabstype) |
||
+ | local data = { |
||
− | local linkadjustments = json and json.links and p.linkAdjustments(json, title, tabstype) |
||
− | + | linkadjustments = json and json.links and p.linkAdjustments(json, title, tabstype), |
|
+ | navboxdata = (args.nonavbox ~= 'Yes') and Navbox(tabstype, title), |
||
− | + | after = title_obj.namespace == 0 and After(frame, fulltitle,tabstype), |
|
− | return tabs(json, linkadjustments, navbox, nil, title, after) |
||
+ | basepage = title, |
||
+ | tabstype = args.tabstype or 'header' |
||
⚫ | |||
+ | return tabs(json, data) |
||
end |
end |
||
return p |
return p |
Latest revision as of 20:00, 16 February 2019
To edit the documentation or categories for this module, click here.
local util = require('Module:Util')
local util_args = require('Module:ArgsUtil')
local util_dpl = require('Module:DPLUtil')
local util_table = require('Module:TableUtil')
local util_title = require('Module:TitleUtil')
local tabs = require('Module:AutomatedTabs').main
local Navbox = require('Module:SubpageNavbox').navbox
local After = require('Module:SubpageAfter').after
--[[ json structure:
{
links = a, b, c, d,
names = ,
a = { links = , names = }, b = { links = , names = }
names table is added only after construction of links table
construction is recursive
}
]]
local p = {}
function p.getPageList(frame, title, fulltitle, title_obj)
local pages = frame:callParserFunction{name = '#dpl', args = {
'',
titleregexp = '^' .. util_dpl.escape(title_obj.rootText) .. '/.*',
format = ',%PAGE%,;,',
namespace = title_obj.nsText,
debug = 0,
notuses = 'Template:NoDPLTabs',
skipthispage = 'no'
}}
if pages == '' and title == fulltitle then return nil end
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.processJson(json, data.lookup, data.order, '')
return json
end
function p.jsonLoop(json, pages)
-- go through all of the pages from our dpl list, and for each page add its data to the json
while #pages > 0 do
local page = table.remove(pages,1)
p.pageRecursion(json, page)
p.addMissingPages(json)
end
return
end
function p.pageRecursion(json, page)
-- the page should always exist, but when we reach the end of our recursion for this one page, #page will be 0
if not page or #page == 0 then
return
end
-- pull out the first titlepart of the page, and the rest of the page will be dealt with later when we call this again
titlepart = table.remove(page, 1)
if #page > 0 then
-- if we dont have an entry at this level yet
if not json[titlepart] then
-- assume the 1st thing is going to be called Overview
json[titlepart] = { links = { 'Overview' } }
end
-- recursion
-- json[titlepart] is one step later, and page has been truncated
p.pageRecursion(json[titlepart],page)
elseif #page == 0 then
-- if we are on the very last part of the page then just append the current page to the list
json.links[#json.links+1] = titlepart
end
return
end
function p.addMissingPages(json)
-- if there's no overview for statistics for example, we still want to print the stats
for k, v in pairs(json) do
-- actually pretty sure everything in the json is a table but we'll just double check to avoid errors
-- want to skip this for links obviously
if type(v) == 'table' and k ~= 'links' then
if not util_table.keyOf(json.links, k) then
-- k is the set of sub-subpages, so if there's no subpage of this then we want to add it
json.links[#json.links+1] = k
-- also in this case that means there's no overview. because we made an overview by default
-- we now need to remove it from the list of sub-subpages
if v.links[1] then
table.remove(v.links,1)
end
end
p.addMissingPages(v)
end
end
end
function p.processJson(json, lookup, order, index)
p.processJsonLinks(json, order)
-- add the name list
json.names = {}
for k, link in ipairs(json.links) do
json.names[k] = lookup[index .. link] or link
end
-- recursion
for k, v in pairs(json) do
if v.links then
p.processJson(v, lookup, order[k] or {}, k)
end
end
return
end
function p.processJsonLinks(json, order)
-- we already added the missing links in p.addMissingPages, so no need to do that again here
-- sort links
util_table.sortByKeyOrder(json.links, order)
-- remove overview if we don't have an overview, since json creation automatically adds one
-- but actually we may have already removed the overview in the event that the page doesn't exist period
-- but if the page exists & we don't want it to be here, then we will remove it now
-- this code means that you may want to specify both Overview as being the first element of your
-- page order array in SubpageTabs and also have nooverview=true in the same line
if order.nooverview and json.links[1] == 'Overview' then
table.remove(json.links,1)
end
return
end
function p.linkAdjustments(json, title, tabstype)
local tbl = { fr = { find = {}, replace = {} }, cd = {} }
local data = mw.loadData('Module:SubpageSettings')[tabstype].order
p.linkAdjustmentsRecursion(json, title, data, tbl)
return tbl
end
function p.linkAdjustmentsRecursion(json, title, data, tbl)
for _, v in ipairs(json.links) do
if json[v] and json[v].links and data[v] then
local lr = data[v .. '_linkrecent']
if lr then
new_title = util_title.concatSubpage(title, v)
-- optionally can define _linkrecent=true to just show the last one
-- or can specify a specific tab to show as a string
-- we'll pick what to focus depending
local focused = type(lr) == 'string' and lr or json[v].links[#json[v].links]
tbl.cd[new_title] = util_title.concatSubpage(new_title, focused)
end
p.linkAdjustmentsRecursion(json[v], new_title, data[v], tbl)
end
end
return
end
function p.main(frame)
local args = util_args.merge(true)
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, title_obj)
local json = pages and p.jsonFromPages(pages, tabstype)
local data = {
linkadjustments = json and json.links and p.linkAdjustments(json, title, tabstype),
navboxdata = (args.nonavbox ~= 'Yes') and Navbox(tabstype, title),
after = title_obj.namespace == 0 and After(frame, fulltitle,tabstype),
basepage = title,
tabstype = args.tabstype or 'header'
}
return tabs(json, data)
end
return p