This wiki is still in active development, many areas of the site are unstable or broken.
In the meantime, consider adding content to pages you like!
Module:Tab
From NBITTRPG Wiki
Documentation for this module may be created at Module:Tab/doc
local p = {}
local getArgs = require('Module:Arguments').getArgs;
local function escape_group(group)
if not group then
return group;
end
return group:gsub("[ -\"\\]", "_");
end
local function make_style_class(class)
return class and (" tab-" .. class) or " tab-default-style";
end
function p.tab_list(button_labels, group, options)
options = options or {};
group = escape_group(group);
local class = make_style_class(options['class']);
local container = mw.html.create('div')
:addClass('tab-button-container')
:addClass(class)
:attr('data-group', group);
for i, button_label in pairs(button_labels) do
local classes = {"tab-button"};
if i == 1 then
table.insert(classes, "tab-button-selected");
end
local class = options[string.format("button-class%d", i)] or "";
if class ~= "" then
table.insert(classes, class);
end
container:tag('div')
:addClass(table.concat(classes, " "))
:wikitext(button_label)
end
return container;
end
function p.panel_list(panels, group, options)
options = options or {};
group = escape_group(group);
local class = make_style_class(options['class']);
local container = mw.html.create('div')
:addClass('tab-panel-container')
:addClass(class)
:attr('data-group', group);
for i, panel in ipairs(panels) do
local panelClass = "tab-panel" .. (i ~= 1 and " tab-panel-hidden" or "");
panelClass = panelClass .. " " .. (options[string.format("panel-class%d", i)] or "")
container:tag('div')
:addClass(panelClass)
:wikitext("\n" .. tostring(panel));
end
return container;
end
-- backward compatibility on Strinova Wiki
p.tabs = p.tab_list;
p.content = p.panel_list;
function p.style(frame)
return frame:extensionTag( 'templatestyles', '', { src = 'Module:Tab/styles.css' } );
end
function get_positional_args(args)
local p_args = {}
for _, value in ipairs(args) do
table.insert(p_args, value);
end
return p_args;
end
function p.__tab_list(frame)
local args = getArgs(frame, {parentFirst = true});
local group = args['group'] or "defaultgroup";
local p_args = get_positional_args(args);
return tostring(p.tab_list(p_args, group, args)) .. p.style(frame);
end
function p.__panel_list(frame)
local args = getArgs(frame, {parentFirst = true});
local group = args['group'] or "defaultgroup";
local p_args = get_positional_args(args);
return tostring(p.panel_list(p_args, group, args)) .. p.style(frame);
end
function p.main(frame)
local args = getArgs(frame, {parentFirst = true});
local tab_type = args['type'] or "";
if tab_type == "tabs" or tab_type == "labels" or tab_type == "buttons" then
return p.__tab_list(frame);
elseif tab_type == "content" or tab_type == "panels" then
return p.__panel_list(frame);
end
local tabs = {};
local panels = {};
for i, v in ipairs(args) do
if i % 2 == 1 then
table.insert(tabs, v);
else
table.insert(panels, v);
end
end
if #tabs ~= #panels then
table.insert(panels, "")
end
local group = args['group'] or nil;
tabsObj = p.tab_list(tabs, group, args);
panelsObj = p.panel_list(panels, group, args);
local class = make_style_class(args['class']);
local container = mw.html.create('div')
:addClass("tab-group-container" .. class)
:attr('data-group', group)
container:node(tabsObj)
container:node(panelsObj)
container:wikitext(p.style(frame))
return tostring(container)
end
return p
