Module:Sidebar

From Chalo Chatu, Zambia online encyclopedia
Jump to navigationJump to search

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

require('strict')
local cfg = mw.loadData('Module:Sidebar/configuration')
local getArgs = require('Module:Arguments').getArgs
local p = {}

local function hasSubgroup(s)
	return s and s:match(cfg.i18n.pattern.subgroup)
end

local function has_navbar(navbar_mode, sidebar_name)
	return navbar_mode ~= cfg.i18n.navbar_none
		and navbar_mode ~= cfg.i18n.navbar_off
		and (
			sidebar_name or
			mw.getCurrentFrame():getParent():getTitle():gsub(cfg.i18n.pattern.sandbox, '') ~=
			cfg.i18n.title_not_to_add_navbar
		)
end

function p.sidebar(frame, args)
	args = args or getArgs(frame)
	local root = mw.html.create('table')
	root
		:addClass(cfg.i18n.class.sidebar)
		:addClass(args.bodyclass or args.class)
		:css('width', args.width)
		:cssText(args.style or args.bodystyle)

	if args.title then
		root:tag('tr'):tag('th')
			:addClass(cfg.i18n.class.title)
			:cssText(args.titlestyle)
			:wikitext(args.title)
	end

	for i = 1, 20 do
		local heading = args['heading' .. i]
		local content = args['content' .. i]

		if heading then
			root:tag('tr'):tag('th')
				:addClass(cfg.i18n.class.heading)
				:cssText(args['heading' .. i .. 'style'])
				:wikitext(heading)
		end

		if content then
			root:tag('tr'):tag('td')
				:addClass(hasSubgroup(content) and cfg.i18n.class.content_with_subgroup or cfg.i18n.class.content)
				:cssText(args['content' .. i .. 'style'])
				:wikitext(content)
		end
	end

	if args.below then
		root:tag('tr'):tag('td')
			:addClass(cfg.i18n.class.below)
			:cssText(args.belowstyle)
			:wikitext(args.below)
	end

	if has_navbar(args.navbar, args.name) then
		root:tag('tr'):tag('td')
			:addClass(cfg.i18n.class.navbar)
			:wikitext(require('Module:Navbar')._navbar{
				args.name,
				mini = 1,
				fontstyle = args.navbarfontstyle
			})
	end

	return tostring(root)
end

return p