Module:Lua banner/sandbox

Module documentation
warning Warning:This page is shared between multiple wikis.
All changes to this page will be automatically copied to all wikis listed in the left side bar.
To avoid unnecessary page regeneration and server load, changes should be tested on the page's sandbox.
Please help translate this page.

This module implements the {{Lua}} template.

Module Quality

edit
Test Status
Module:Lua banner success: 5, error: 0, skipped: 0
Module:Lua banner/sandbox success: 5, error: 0, skipped: 0

Usage from wikitext

edit

This module cannot be used directly from wikitext. It can only be used through the {{Lua}} template. Please see the template page for documentation.

Usage from Lua modules

edit

To use this module from other Lua modules, first load the module.

local mLuaBanner = require('Module:Lua banner')

You can then generate a side box using the _main function.

mLuaBanner._main(args)

The args variable should be a table containing the arguments to pass to the module. To see the different arguments that can be specified and how they affect the module output, please refer to the {{Lua}} template documentation.


-- This module implements the {{lua}} template.

local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local TNT = require('Module:TNT')

local p = {}

local function format(msg)
	return TNT.format('I18n/Lua banner', msg)
end

local function getConfig()
	return mw.loadData('Module:Lua banner/config/sandbox')
end

function p.main(frame)
	local origArgs = frame:getParent().args
	local args = {}
	for k, v in pairs(origArgs) do
		v = v:match('^%s*(.-)%s*$')
		if v ~= '' then
			args[k] = v
		end
	end
	return p._main(args)
end

function p._main(args, cfg)
	local modules = mTableTools.compressSparseArray(args)
	local box = p.renderBox(modules, cfg)
	local trackingCategories = p.renderTrackingCategories(args, modules, nil, cfg)
	return box .. trackingCategories
end

function p.renderBox(modules, cfg)
	local boxArgs = {}
	if #modules < 1 then
		cfg = cfg or getConfig()
		if cfg['allow_wishes'] then
			boxArgs.text = format('wishtext')
		else
			boxArgs.text = string.format('<strong class="error">%s</strong>', format('error_emptylist'))
		end
	else
		local moduleLinks = {}
		for i, module in ipairs(modules) do
			moduleLinks[i] = string.format('[[:%s]]', module)
		end
		local moduleList = mList.makeList('bulleted', moduleLinks)
		boxArgs.text = format('header') .. '\n' .. moduleList
	end
	boxArgs.type = 'notice'
	boxArgs.small = true
	boxArgs.image = string.format(
		'[[File:Lua-logo-nolabel.svg|30px|alt=%s|link=%s]]',
		format('logo_alt'),
		format('logo_link')
	)
	return mMessageBox.main('mbox', boxArgs)
end

function p.renderTrackingCategories(args, modules, titleObj, cfg)
	if yesno(args.nocat) then
		return ''
	end
	
	cfg = cfg or getConfig()
	
	local cats = {}
	
	-- Error category
	if #modules < 1 and not cfg['allow_wishes'] and cfg['error_category'] then
		cats[#cats + 1] = cfg['error_category']
	end
	
	-- Lua templates category
	titleObj = titleObj or mw.title.getCurrentTitle()
	if titleObj.namespace == 10 
		and not cfg['subpage_blacklist'][titleObj.subpageText]
	then
		local category = args.category
		if not category then
			local pagename = modules[1] and mw.title.new(modules[1])
			category = pagename and cfg['module_categories'][pagename.text]
			if not category then
				if cfg['allow_wishes'] and #modules < 1 then
					category = cfg['wish_category']
				else
					category = cfg['default_category']
				end
			end
		end
		if category then
			cats[#cats + 1] = category
		end
	end
	
	for i, cat in ipairs(cats) do
		cats[i] = string.format('[[Category:%s]]', cat)
	end
	return table.concat(cats)
end

return p