The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Documentation for this module may be created at Module:Lua banner/sandbox/doc

-- 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 p = {}

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)
	local modules = mTableTools.compressSparseArray(args)
	local box = p.renderBox(modules)
	local trackingCategories = p.renderTrackingCategories(args, modules)
	return box .. trackingCategories
end

function p.renderBox(modules)
	local boxArgs = {}
	local moduleLinks = {}
	local title = mw.title.getCurrentTitle()
	if #modules < 1 then
		moduleLinks[1] = string.format('[[:%s]]', 'Module:' .. title.baseText)
		local maybeSandbox = mw.title.new('Module:' .. title.baseText .. '/sandbox')
		if maybeSandbox.exists then
			moduleLinks[1] = moduleLinks[1] .. string.format(' ([[:%s|sandbox]])', maybeSandbox.fullText)
		end
	end
	for i, module in ipairs(modules) do
		local moduleName = mw.title.new(module)
		local modulePage = 'Module:' .. moduleName.text
		moduleLinks[i] = string.format('[[:%s]]', modulePage)
		local maybeSandbox = mw.title.new(modulePage .. '/sandbox')
		if maybeSandbox.exists then
			moduleLinks[i] = moduleLinks[i] .. string.format(' ([[:%s|sandbox]])', maybeSandbox.fullText)
		end
	end
	local moduleList = mList.makeList('bulleted', moduleLinks)
	if title.subpageText == "doc" then
		title = title.basePageTitle
	end
	if title.contentModel == "Scribunto" then
		boxArgs.text = 'This module depends on the following other modules:' .. moduleList
	else
		boxArgs.text = 'This template  uses [[Bharatpedia:Lua|Lua]]:\n' .. moduleList
	end
	boxArgs.type = 'notice'
	boxArgs.small = true
	boxArgs.image = '[[File:Lua-logo-nolabel.svg|30px|alt=|link=]]'
	return mMessageBox.main('mbox', boxArgs)
end

function p.renderTrackingCategories(args, modules, titleObj)
	if yesno(args.nocat) then
		return ''
	end

	local cats = {}
	
	-- Lua templates category
	titleObj = titleObj or mw.title.getCurrentTitle()
	local subpageBlacklist = {
		doc = true,
		sandbox = true,
		sandbox2 = true,
		testcases = true
	}
	if not subpageBlacklist[titleObj.subpageText] then
		local protCatName
		if titleObj.namespace == 10 then
			local category = args.category
			if not category then
				local categories = {
					['Module:String'] = 'Lua String-based templates',
					['Module:Math'] = 'Templates based on the Math Lua module',
					['Module:BaseConvert'] = 'Templates based on the BaseConvert Lua module',
					['Module:Citation'] = 'Lua-based citation templates'
				}
				categories['Module:Citation/CS1'] = categories['Module:Citation']
				category = modules[1] and categories[modules[1]]
				category = category or 'Lua-based templates'
			end	
			cats[#cats + 1] = category
			protCatName = "Templates using under-protected Lua modules"
		elseif titleObj.namespace == 828 then
			protCatName = "Modules depending on under-protected modules"
		end
		if not args.noprotcat and protCatName then
			local protLevels = {
				autoconfirmed = 1,
				extendedconfirmed = 2,
				templateeditor = 3,
				sysop = 4
			}
			local currentProt
			if titleObj.id ~= 0 then
				-- id is 0 (page does not exist) if am previewing before creating a template.
				currentProt = titleObj.protectionLevels["edit"][1]
			end
			if currentProt == nil then currentProt = 0 else currentProt = protLevels[currentProt] end
			for i, module in ipairs(modules) do
				if module ~= "BP:libraryUtil" then
					local moduleProt = mw.title.new(module).protectionLevels["edit"][1]
					if moduleProt == nil then moduleProt = 0 else moduleProt = protLevels[moduleProt] end
					if moduleProt < currentProt then
						cats[#cats + 1] = protCatName
						break
					end
				end
			end
		end
	end
	for i, cat in ipairs(cats) do
		cats[i] = string.format('[[Category:%s]]', cat)
	end
	return table.concat(cats)
end

return p