请输入您要查询的百科知识:

 

词条 Module:UserLinks/shared
释义 -- This module stores functions that are shared between UserLinks-- and UserLinks/extra.-- Load data and define often-used variables

local cfg = mw.loadData('Module:UserLinks/config')

local namespaces = mw.site.namespaces

-- Lazily initialise modules that we may or may not need

local mCategoryHandler

-- Define namespaces for which links need to be escaped with the colon trick.-- See en:Help:Colon trick.

local colonNamespaces = {

[6] = true, -- File

[14] = true, -- Category

}

local p = {}

function p.maybeLoadModule(s)

-- Attempts to load the module s. If it succeeds, returns the module;

-- otherwise, returns false.

local success, mdl = pcall(require, s)

if success then

return mdl

else

return false

end

end

function p.raiseError(message, section, level)

-- Raises an error using the Lua error function. The error message is

-- designed to be caught with pcall and then passed to p.makeWikitextError.

-- The section, if specified, is the section name on a help page that gives

-- help to users about that particular error.

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

local localBlacklist = {

'/[sS]andbox$', -- Don't categorise sandboxes

'/[tT]est ?cases$', -- Don't categorise test case pages

}

local function currentTitleMatchesLocalBlacklist()

-- Return true if the current title matches any of the patterns in the

-- local blacklist table. Otherwise return false.

local title = mw.title.getCurrentTitle().prefixedText

for i, pattern in ipairs(localBlacklist) do

if title:find(pattern) then

return true

end

end

return false

end

function p.makeWikitextError(encodedMessage, demo)

local errorMessage, section = mw.ustring.match(encodedMessage, '^(.-)|(.*)$')

errorMessage = errorMessage or encodedMessage

-- If not a demo, get the error category link and pass it through

-- Category handler's blacklist.

local category

if not demo then

category = string.format(

'%s',

namespaces[14].name,

p.message('error-config-category')

)

mCategoryHandler = p.maybeLoadModule('Module:Category handler')

if mCategoryHandler then

-- Categorise all namespaces, but not blacklisted pages.

category = mCategoryHandler.main{all = category}

end

if category and currentTitleMatchesLocalBlacklist() then

category = nil

end

end

category = category or

-- Format the error message and the section link.

local formattedError

if section then

formattedError = p.message(

'error-config-message-help',

errorMessage,

section

)

else

formattedError = p.message(

'error-config-message-nohelp',

errorMessage

)

end

-- Return the error message and the category inside html error tags.

return string.format(

'%s%s',

formattedError,

category

)

end

local function formatPage(interwiki, namespace, page)

-- Formats an interwiki, a namespace and a page into a wikilink-ready

-- string. The interwiki and namespace are optional. If a namespace is

-- specified, it should be a valid key to mw.site.namespaces. The page

-- parameter is required.

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.

-- Don't replace anything if we are substing, as we generally don't want

-- to use " " in that case.

if mw.isSubsting() then

return s

else

return s:gsub(' ', ' ')

end

end

function p.makeWikilink(interwiki, namespace, page, display)

-- Creates a wikilink. The interwiki, namespace and display parameters are

-- optional. If a namespace parameter is specified it must be a valid key

-- to mw.site.namespaces.

local formattedPage = formatPage(interwiki, namespace, page)

if display then

display = formatDisplay(display)

return string.format('%s', formattedPage, display)

else

return string.format('%s', formattedPage)

end

end

local function formatUrlLink(url, display)

-- Formats a URL link with an optional display parameter.

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)

-- Makes a URL link with an optional display parameter. The first input

-- may be any valid input to mw.uri.new.

local url = mw.uri.new(s)

url = tostring(url)

return formatUrlLink(url, display)

end

function p.makeFullUrlLink(interwiki, namespace, page, query, display)

-- Makes a link to the full URL of a page. The interwiki, namespace, query

-- and display parameters are optional. If a namespace parameter is

-- specified it must be a valid key to mw.site.namespaces. The query

-- parameter can be a string or a table as specified in the mw.uri library.

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, ...)

-- Returns the message with the given key from UserLinks/config.

-- Extra parameters are substituted in the message for keys $1, $2, $3, etc.

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

随便看

 

开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。

 

Copyright © 2023 OENC.NET All Rights Reserved
京ICP备2021023879号 更新时间:2024/9/25 2:35:20