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 TabVariables = require('Module:TabVariables')
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
TabVariables.setName(name)
TabVariables.setIndex(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