Module:UserLinks/shared

-- 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 = ' (help)' else section = '' end local category if not demo then category = '' mCategoryHandler = require('Module:Category handler') category = mCategoryHandler.main{ all = category -- Categorise all namespaces, but not blacklisted pages. }	end category = category or '' return string.format(		' User-multi error: %s%s. %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', 2) 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(' ', ' ') return string.format('%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(' ', ' ') 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