Module:Sandbox/Mr. Stradivarius/sandbox4

From Wikipedia, the free encyclopedia

-- This module implements {{pp-meta}}, a meta-template for protection templates.

----------------------------------------------------------------------
-- title object
----------------------------------------------------------------------

-- Get the title object for the current page and add data about protection level to it.
-- We are only doing this for the current page, as this is all the {{PENDINGCHANGELEVEL}}
-- magic word supports, as of November 2013.

local title = {}

function title.getCurrentTitle()
	local obj = mw.title.getCurrentTitle()
	
	local function getProtectionLevel(protectionType)
		-- Gets the protection level or pending change level of the current title.
		local frame = mw.getCurrentFrame()
		local level
		if protectionType == 'pc' then
			level = frame:preprocess('{{PENDINGCHANGELEVEL}}')
		else
			level = frame:callParserFunction('PROTECTIONLEVEL', protectionType)
		end
		if level == '' then -- Make unprotected pages return "unprotected" rather than the blank string.
			level = 'unprotected'
		end
		return level
	end
	
	obj.createProtection = getProtectionLevel('create')
	obj.editProtection = getProtectionLevel('edit')
	obj.moveProtection = getProtectionLevel('move')
	obj.pcProtection = getProtectionLevel('pc')
	return obj
end

----------------------------------------------------------------------
-- icon class
----------------------------------------------------------------------

----------------------------------------------------------------------
-- mbox class
----------------------------------------------------------------------

----------------------------------------------------------------------
-- Process arguments and initialise objects
----------------------------------------------------------------------

local p = {}

function p._main(args)
	local currentTitle = title.getCurrentTitle()
	return currentTitle[args[1]]
end

function p.main(frame)
	-- If called via #invoke, use the args passed into the invoking template, or the args passed to #invoke if any exist.
	-- Otherwise assume args are being passed directly in from the debug console or from another Lua module.
	local origArgs
	if frame == mw.getCurrentFrame() then
		origArgs = frame:getParent().args
		for k, v in pairs(frame.args) do
			origArgs = frame.args
			break
		end
	else
		origArgs = frame
	end
	-- Trim whitespace and remove blank arguments.
	local args = {}
	for k, v in pairs(origArgs) do
		if type(v) == 'string' then
			v = mw.text.trim(v)
		end
		if v ~= '' then
			args[k] = v
		end
	end
	return p._main(args)
end

return p