Module:UserLinks/shared: Difference between revisions

From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Content added Content deleted
(add error for invalid namespace keys)
(try one error level deeper)
Line 63: Line 63:
local nsTable = namespaces[namespace]
local nsTable = namespaces[namespace]
if not nsTable then
if not nsTable then
error('"' .. tostring(namespace) .. '" is not a valid namespace key', 2)
error('"' .. tostring(namespace) .. '" is not a valid namespace key', 3)
end
end
ret[#ret + 1] = nsTable.name
ret[#ret + 1] = nsTable.name

Revision as of 16:31, April 3, 2014

This module stores functions that are shared between Module:UserLinks and Module:UserLinks/extra.


-- This module stores functions that are shared between [[Module:UserLinks]]
-- and [[Module:UserLinks/extra]].

-- Load data and define often-used variables
local cfg = mw.loadData('Module:UserLinks/config')
local namespaces = mw.site.namespaces

-- Define namespaces for which links need to be escaped with the colon trick.
-- See [[w:en:Help:Colon trick]].
local colonNamespaces = {
	[6] = true, -- File
	[14] = true, -- Category
}

local p = {}

function p.raiseError(message, section, level)
	if section then
		message = message .. '|' .. section
	end
	if not level or level == 0 then
		level = 0
	else
		level = level + 1
	end
	error(message, level)
end

function p.makeWikitextError(encodedMessage, demo)
	local message, section = mw.ustring.match(encodedMessage, '^(.-)|(.*)$')
	message = message or encodedMessage
	if section then
		section = ' ([[Template:User-multi#' .. section .. '|help]])'
	else
		section = ''
	end
	local category
	if not demo then
		category = '[[Category:UserLinks transclusions with errors]]'
		mCategoryHandler = require('Module:Category handler')
		category = mCategoryHandler.main{
			all = category -- Categorise all namespaces, but not blacklisted pages.
		}
	end
	category = category or ''
	return string.format(
		'<strong class="error">[[Template:User-multi|User-multi]] error: %s%s.</strong>%s',
		message, section, category
	)
end

local function formatPage(interwiki, namespace, page)
	namespace = namespace or error('no namespace defined', 2)
	local ret = {}
	interwiki = interwiki or ''
	if interwiki ~= '' or colonNamespaces[namespace] then
		ret[#ret + 1] = ':'
	end
	ret[#ret + 1] = interwiki
	if interwiki ~= '' then
		ret[#ret + 1] = ':'
	end
	local nsTable = namespaces[namespace]
	if not nsTable then
		error('"' .. tostring(namespace) .. '" is not a valid namespace key', 3)
	end
	ret[#ret + 1] = nsTable.name
	if namespace ~= 0 then
		ret[#ret + 1] = ':'
	end
	ret[#ret + 1] = page
	return table.concat(ret)
end

function p.makeWikilink(interwiki, namespace, page, display)
	local formattedPage = formatPage(interwiki, namespace, page)
	if display then
		display = display:gsub(' ', '&nbsp;')
		return string.format('[[%s|%s]]', formattedPage, display)
	else
		return string.format('[[%s]]', formattedPage)
	end
end

function p.makeUrlLink(interwiki, namespace, page, query, display)
	local formattedPage = formatPage(interwiki, namespace, page)
	query = query or {}
	local url = mw.uri.fullUrl(formattedPage, query)
	url = tostring(url)
	if display then
		display = display:gsub(' ', '&nbsp;')
		return string.format('[%s %s]', url, display)
	else
		return string.format('[%s]', url)
	end
end

function p.message(key)
	local msg = cfg[key]
	return msg or p.raiseError(
		'No message found with key "' .. tostring(key) .. '"',
		'No message found',
		2
	)
end

return p