Call of Duty Esports Wiki
[checked revision][checked revision]
m (Syncing content across wikis)
m (Syncing content across wikis)
Line 1: Line 1:
 
local util = require('Module:Util')
 
local util = require('Module:Util')
 
local util_table = require('Module:TableUtil')
 
local util_table = require('Module:TableUtil')
  +
local util_title = require('Module:TitleUtil')
 
local tabsheader = require('Module:TabsHeader')
 
local tabsheader = require('Module:TabsHeader')
 
local corr = require('Module:CorrespondingPageBox').makeBox
 
local corr = require('Module:CorrespondingPageBox').makeBox
Line 97: Line 98:
 
this = util_table.keyOf(t.links, title[i]) or 1
 
this = util_table.keyOf(t.links, title[i]) or 1
 
}
 
}
basepagestr = util.concatSubpage(basepagestr,t.links[tbl[j].this])
+
basepagestr = util_title.concatSubpage(basepagestr,t.links[tbl[j].this])
 
if t[title[i]] then
 
if t[title[i]] then
 
t = t[title[i]]
 
t = t[title[i]]
 
i = i + 1
 
i = i + 1
  +
elseif tbl[j].this == 1 then
else
 
 
t = t['Overview']
 
t = t['Overview']
 
else
  +
t = nil
 
end
 
end
 
j = j + 1
 
j = j + 1
Line 112: Line 115:
 
local tbl = {}
 
local tbl = {}
 
for i, link in ipairs(links) do
 
for i, link in ipairs(links) do
tbl[i] = util.concatSubpage(path, link)
+
tbl[i] = util_title.concatSubpage(path, link)
 
end
 
end
 
return tbl
 
return tbl

Revision as of 23:32, 3 September 2018

To edit the documentation or categories for this module, click here.


local util = require('Module:Util')
local util_table = require('Module:TableUtil')
local util_title = require('Module:TitleUtil')
local tabsheader = require('Module:TabsHeader')
local corr = require('Module:CorrespondingPageBox').makeBox

local p = {}
function p.main(json, linkadjustments, navboxdata, corr, basepage, after)
	local frame = mw.getCurrentFrame()
	local title = p.getCanonicalTitle(linkadjustments, basepage)
	local thisevent, tabstable = p.whereAreWe(json, title, basepage)
	
	local text = {}
	if navboxdata then p.makeNavboxes(frame, text, navboxdata, thisevent) end
	n = #text + 2
	if json then
		p.makeTabs(text, tabstable, linkadjustments)
	end
	if corr then table.insert(text, n, p.makeCorrBox(corr, title)) end
	if after then text[#text+1] = after end
	local output = table.concat(text,'')
	return output
end

-- making parts of the page
function p.getCanonicalTitle(linkadjustments, basepage)
	local title = mw.title.getCurrentTitle()
	titlestr = title.nsText == 'Template' and basepage or title.prefixedText
	if not linkadjustments then
		return titlestr
	end
	return p.findReplace(titlestr, linkadjustments.fr.replace, linkadjustments.fr.find)
end

function p.makeNavboxes(frame, text, data, thisevent)
	for i, navboxdata in ipairs(data) do
		if navboxdata.events.showAll or util_table.keyOf(navboxdata.events, thisevent) then
			text[#text+1] = frame:expandTemplate({
				title = navboxdata.title,
				args = navboxdata.args
			})
		end
	end
	return
end

function p.makeCorrBox(args, title)
	local i = tonumber(args.showCorr)
	if i then
	elseif args.corr_titlematch then
		for k, v in ipairs(args.corr_titlematch) do
			if string.find(title,v,1,true) then
				i = k
			end
		end
	else
		i = 1
	end
	return corr({
		find = mw.text.split(args.corr_find[i] or '','%s*;%s*'),
		replace = mw.text.split(args.corr_replace[i] or '','%s*;%s*'),
		display = args.corr_display and mw.text.split(args.corr_display[i] or '','%s*;%s*'),
		tournament = args.corr_tournament and mw.text.split(args.corr_tournament[i] or '','%s*;%s*'),
		targetpage = args.targetpage,
	})
end

function p.makeTabs(text, tabstable, linkadjustments)
	for k, v in ipairs(tabstable) do
		if linkadjustments then
			p.linksToOutput(v.links, linkadjustments)
		end
		text[#text+1] = tabsheader.fromTables(v.names, v.links, v.this, {})
	end
	return
end

function p.linksToOutput(links, linkadjustments)
	for k, link in ipairs(links or {}) do
		links[k] = p.linkToOutput(link, linkadjustments.fr, linkadjustments.cd, k)
	end
	return
end

-- where are we
function p.whereAreWe(json, titlestr, basepagestr)
	local title = mw.text.split(titlestr,'/')
	local basepage = mw.text.split(basepagestr,'/')
	local tbl = {}
	local i = #basepage + 1
	local thisevent = title[i] or 'Overview'
	local t = json
	local j = 1
	while t do
		tbl[j] = {
			links = p.constructLinks(t.links,basepagestr),
			names = t.names,
			this = util_table.keyOf(t.links, title[i]) or 1
		}
		basepagestr = util_title.concatSubpage(basepagestr,t.links[tbl[j].this])
		if t[title[i]] then
			t = t[title[i]]
			i = i + 1
		elseif tbl[j].this == 1 then
			t = t['Overview']
		else
			t = nil
		end
		j = j + 1
	end
	return thisevent, tbl
end

function p.constructLinks(links,path)
	local tbl = {}
	for i, link in ipairs(links) do
		tbl[i] = util_title.concatSubpage(path, link)
	end
	return tbl
end

-- Processing utils
function p.newIndex(base, extension)
	-- concatenate the two but don't add a / if the 2nd argument is empty
	if not base and extension == 'Overview' then
		return 'events/Overview'
	elseif not base or base == '' or base == 'events' then
		return extension
	elseif extension == '' or not extension then
		return base
	else
		return base .. '/' .. extension
	end
end

function p.linkToOutput(link, fr, cd, k)
	link = p.findReplace(link, fr.find, fr.replace)
	link = (k~= 1) and cd[link] or link
	return link
end

function p.findReplace(link, find, replace)
	for k, v in ipairs(find) do
		link = string.gsub(link, util.escape(v), util.escape(replace[k]))
	end
	return link
end

return p