Module:UserLinks/shared
< Module:UserLinks
Jump to navigation
Jump to search
Revision as of 15:35, 4 April 2014 by blackwiki>Mr. Stradivarius (add new makeUrlLink function)
| 40x40px | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
| 40x40px | This module is used in system messages. Changes to it can cause immediate changes to the Wikipedia user interface. To avoid large-scale disruption, any changes should first be tested in this module's /sandbox or /testcases subpage, or in your own user space. The tested changes can then be added in one single edit to this module. Please discuss any changes on the talk page before implementing them. |
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)
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
if namespace then
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
end
ret[#ret + 1] = page
return table.concat(ret)
end
local function formatDisplay(s)
-- Replaces spaces in a string with " " to make sure they don't wrap.
return s:gsub(' ', ' ')
end
function p.makeWikilink(interwiki, namespace, page, display)
local formattedPage = formatPage(interwiki, namespace, page)
if display then
display = formatDisplay(display)
return string.format('[[%s|%s]]', formattedPage, display)
else
return string.format('[[%s]]', formattedPage)
end
end
local function formatUrlLink(url, display)
if display then
display = formatDisplay(display)
return string.format('[%s %s]', url, display)
else
return string.format('[%s]', url)
end
end
function p.makeUrlLink(s, display)
local url = mw.uri.new(s)
url = tostring(url)
return formatUrlLink(url, display)
end
function p.makeFullUrlLink(interwiki, namespace, page, query, display)
-- Makes a wikitext link to the full URL of a page.
local formattedPage = formatPage(interwiki, namespace, page)
local url = mw.uri.fullUrl(formattedPage, query)
url = tostring(url)
return formatUrlLink(url, display)
end
function p.message(key, ...)
local msg = cfg[key]
if not msg then
p.raiseError(
'No message found with key "' .. tostring(key) .. '"',
'No message found',
2
)
end
local noArgs = select('#', ...)
if noArgs < 1 then
return msg
else
local msg = mw.message.newRawMessage(msg, ...)
return msg:plain()
end
end
return p