Editing Module:Hatnote inline
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 2: | Line 2: | ||
-- Module:Hatnote-inline -- | -- Module:Hatnote-inline -- | ||
-- -- | -- -- | ||
-- This module produces hatnote | -- This module produces *inline* hatnote links and links to related articles. -- | ||
-- | -- It implements the {{hatnote-inline}} meta-template, and -- | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
local libraryUtil = require('libraryUtil') | |||
local checkType = libraryUtil.checkType | |||
local mHatnote = require('Module:Hatnote') | local mHatnote = require('Module:Hatnote') | ||
local mArguments | local getArgs = mHatnote.getArgs | ||
local yesno | local removeInitialColon = mHatnote.removeInitialColon | ||
local findNamespaceId = mHatnote.findNamespaceId | |||
local mArguments -- lazily initialise [[Module:Arguments]] | |||
local yesno -- lazily initialise [[Module:Yesno]] | |||
local p = {} | local p = {} | ||
function p. | -------------------------------------------------------------------------------- | ||
local | -- Helper functions - these are already in Module:Hatnote, actually. | ||
local | -------------------------------------------------------------------------------- | ||
local | function p.findNamespaceId(link, removeColon) | ||
-- Finds the namespace id (namespace number) of a link or a pagename. This | |||
['< | -- function will not work if the link is enclosed in double brackets. Colons | ||
-- are trimmed from the start of the link by default. To skip colon | |||
-- trimming, set the removeColon parameter to true. | |||
checkType('findNamespaceId', 1, link, 'string') | |||
checkType('findNamespaceId', 2, removeColon, 'boolean', true) | |||
if removeColon ~= false then | |||
link = removeInitialColon(link) | |||
end | |||
local namespace = link:match('^(.-):') | |||
if namespace then | |||
local nsTable = mw.site.namespaces[namespace] | |||
if nsTable then | |||
return nsTable.id | |||
end | |||
end | |||
return 0 | |||
end | |||
function p.formatPages(...) | |||
-- Formats a list of pages using formatLink and returns it as an array. Nil | |||
-- values are not allowed. | |||
local pages = {...} | |||
local ret = {} | |||
for i, page in ipairs(pages) do | |||
ret[i] = p._formatLink(page) | |||
end | |||
return ret | |||
end | |||
function p.formatPageTables(...) | |||
-- Takes a list of page/display tables and returns it as a list of | |||
-- formatted links. Nil values are not allowed. | |||
local pages = {...} | |||
local links = {} | |||
for i, t in ipairs(pages) do | |||
checkType('formatPageTables', i, t, 'table') | |||
local link = t[1] | |||
local display = t[2] | |||
links[i] = p._formatLink(link, display) | |||
end | |||
return links | |||
end | |||
function p.makeWikitextError(msg, helpLink, addTrackingCategory) | |||
-- Formats an error message to be returned to wikitext. If | |||
-- addTrackingCategory is not false after being returned from | |||
-- [[Module:Yesno]], and if we are not on a talk page, a tracking category | |||
-- is added. | |||
checkType('makeWikitextError', 1, msg, 'string') | |||
checkType('makeWikitextError', 2, helpLink, 'string', true) | |||
yesno = require('Module:Yesno') | |||
local title = mw.title.getCurrentTitle() | |||
-- Make the help link text. | |||
local helpText | |||
if helpLink then | |||
helpText = ' ([[' .. helpLink .. '|help]])' | |||
else | |||
helpText = '' | |||
end | |||
-- Make the category text. | |||
local category | |||
if not title.isTalkPage and yesno(addTrackingCategory) ~= false then | |||
category = 'Hatnote templates with errors' | |||
category = string.format( | |||
'[[%s:%s]]', | |||
mw.site.namespaces[14].name, | |||
category | |||
) | |||
else | |||
category = '' | |||
end | |||
return string.format( | |||
'<strong class="error">Error: %s%s.</strong>%s', | |||
msg, | |||
helpText, | |||
category | |||
) | |||
end | |||
-------------------------------------------------------------------------------- | |||
-- Hatnote-inline | |||
-- | |||
-- Produces standard hatnote-inline text. Implements the {{hatnote-inline}} template. | |||
-------------------------------------------------------------------------------- | |||
function p.hatnote(frame) | |||
local args = getArgs(frame) | |||
local s = args[1] | |||
local options = {} | |||
if not s then | |||
return p.makeWikitextError( | |||
'no text specified', | |||
'Template:Hatnote-inline#Errors', | |||
args.category | |||
) | |||
end | end | ||
return | options.extraclasses = args.extraclasses | ||
options.selfref = args.selfref | |||
return p._hatnote(s, options) | |||
end | end | ||
p.hatnote = | function p._hatnote(s, options) | ||
checkType('_hatnote', 1, s, 'string') | |||
checkType('_hatnote', 2, options, 'table', true) | |||
local classes = {'hatnote-inline'} | |||
local extraclasses = options.extraclasses | |||
local selfref = options.selfref | |||
if type(extraclasses) == 'string' then | |||
classes[#classes + 1] = extraclasses | |||
end | |||
if selfref then | |||
classes[#classes + 1] = 'selfref' | |||
end | |||
return string.format( | |||
'<span class="%s">%s</span>', | |||
table.concat(classes, ' '), | |||
s | |||
) | |||
end | |||
return p | return p |