Halo Esports Wiki

We are currently performing extensive maintenance to this wiki and as a result there will likely be errors. Please be patient while we work to fix all problems.

READ MORE

Halo Esports Wiki
Advertisement

Documentation for this module may be created at Module:TabsAbstract/doc

local util_args = require('Module:ArgsUtil')
local util_cargo = require("Module:CargoUtil")
local util_html = require("Module:HtmlUtil")
local util_map = require('Module:MapUtil')
local util_table = require("Module:TableUtil")
local util_text = require("Module:TextUtil")
local util_title = require("Module:TitleUtil")
local util_vars = require("Module:VarsUtil")
local i18n = require("Module:I18nUtil")
local lang = mw.getLanguage('en')

local LCS = require('Module:LuaClassSystem').class

local h = {}
local p = LCS.abstract()
function p:init()
	-- this won't do anything but this is what we'll overwrite when we subclass
	self.tabClass = nil
	self.activeClass = nil
	self.outerClass = nil
end

function p:run(args)
	self.args = args
	self.title = mw.title.getCurrentTitle().prefixedText
	self.sep = '%s*' .. (args.sep or ',') .. '%s*'
	self.basepage = args.basepage
	self.This = args.This and tonumber(args.This) or 1
	self.links = self:getLinksFromArgs()
	self:setThisVar()
	return self:makeOutput()
end

function p:getLinksFromArgs()
	if self.args.links then return self:getLinksFromSplitArgs() end
	return self:getLinksFromNumberedArgs()
end

function p:getLinksFromSplitArgs()
	local names = util_text.split(self.args.names, self.sep)
	local links = {}
	for i, linkPart in ipairs(util_text.split(self.args.links, self.sep)) do
		linkPart = linkPart:gsub('_', ' ')
		local link = util_title.concatSubpage(self.basepage, linkPart)
		local defaultDisplay = linkPart ~= '' and linkPart or i
		links[i] = self:getOneLinkInfo(
			link,
			self.args['name' .. i] or names[i] or defaultDisplay
		)
		if link == self.title then
			self.This = i
		end
	end
	return links
end

function p:getLinksFromNumberedArgs()
	local links = {}
	local i = 1
	while self.args['link' .. i] do
		links[i] = self:getOneLinkInfo(self.args['link' .. i], self.args['name'.. i])
		i = i + 1
	end
	return links
end

function p:getOneLinkInfo(link, name)
	local ret = {
		link = link,
		name = name,
	}
	return ret
end

function p:setThisVar()
	local name = self.links[self.This].name
	util_vars.setVar('thisTab', name)
	util_vars.setVar('tabThis', self.This)
end

function p:makeOutput()
	local output = mw.html.create('div')
		:addClass(self.outerClass)
	for i, linkInfo in ipairs(self.links) do
		local tab = self:printOneTab(output, self:makeTabLink(linkInfo))
		self:setTabActiveState(i, tab)
	end
	return tostring(output)
end

function p:printOneTab(output, tabDisplay)
end

function p:makeTabLink(linkInfo)
	return util_text.intLink(linkInfo.link, linkInfo.name)
end

function p:setTabActiveState(i, tab)
	if i ~= self.This then return end
	tab:addClass(self.activeClass)
end

return p
Advertisement