Jump to content

Module:Lockbox

Permanently protected module
From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Kephir (talk | contribs) at 05:28, 5 August 2014 (other voodoo). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

local export = {}

function export.lock(frame)
	local output = {}
	
	-- check if the current page is cascade-protected
	-- XXX: unfortunately there is no other way; title.protectionLevels does not report cascading protection status
	mw.title.getCurrentTitle():getContent() -- self-transclude; see [[mw:Extension:Scribunto/Lua reference manual#Title objects]]
	if frame:preprocess "{{CASCADINGSOURCES}}" == "" then
		table.insert(output, '<strong class="warning">Warning: this page (' .. mw.title.getCurrentTitle().fullText .. ') is not cascade-protected.</strong>\n')
	end
	
	local match = string.match
	local args = { }
	-- transclude everything, and discard the output
	for _, item in ipairs(frame.args) do
		item = mw.text.trim(item)
		
		-- getContent() on a title object might be cleaner, but getContent() and title objects
		-- are considered "expensive". even though they are probably cheaper than actual transclusion
		args.title = item
		frame:expandTemplate(args)

		local ns = match(item, "^(.-):")
		if not ns or not mw.site.namespaces[ns] then
			table.insert(output, '* [[Template:' .. item .. ']]\n')
		elseif (ns == "File") or (ns == "Image") then
			-- XXX: leaving this separate just in case it needs special handling
			table.insert(output, '* [[:' .. item .. ']]\n')
		elseif ns == "Category" then
			table.insert(output, '* [[:' .. item .. ']]\n')
		end
	end

	if frame.args.silent then
		return ""
	else
		return table.concat(output)
	end
end

return export