Module:Hatnote inline
| 30px | This module depends on the following other modules: |
| 40x40px | This is a meta-template for development of additional, more specific templates. If you intend to use the template inline in articles or other pages, use {{crossreference}} (shortcuts or {{crossref}} and {{xref}}) or other specific templates based on this metatemplate, e.g. {{see above}} and {{see below}}. |
The {{Hatnote inline}} meta-template formats text into a standardized style for an inline (not block-level) variant of a Wikipedia:Hatnote, a short note placed at the point of insertion, to link to more information or otherwise cross-reference another Wikipedia page. like this:
The most common uses for this meta-template are:
- Inline "(See also ...)"-type parenthetical Wikipedia crossreferences to other Wikipedia pages, provided by the
{{crossreference}}template and its progeny. These are unprintworthy Wikipedia self-references. - Hatnotes inside definitions in template-formatted glossaries, provided by the
{{ghat}}template. These are printworthy, as they refer to content on the same page.
Contents
Usage
- Basic usage
{{hatnote inline|text}}
- All parameters
{{hatnote inline|text|extraclasses=class1 class2|selfref=yes|category=no}}
The meta-template does not automatically create links of any kind. Links and other desired formatting must be explicitly added, using normal Wikipedia markup.
Parameters
This template accepts the following parameters:
|1=or|text=or|content=the inline hatnote's text (required). While the explicit naming of this parameter with1=,text=, orcontent=is not required, it is always safest to use it this way, since any=character in the text will break the template if the parameter is unnamed.|class=or|extraclasses=any extra CSS classes to be added. This should not normally be used.|selfref=no– if set to no (or n, false, 0, etc.) removes the default CSS classselfref, used to denote unprintworthy self-references to Wikipedia (see Template:Selfref for more information). This option should not be used to indicate a non-selfref on cross-article links, only links within the same article (and the derived shorthand templates{{See above}}and{{See below}}do this automatically). The parameter alias|printworthy=yes(or with any other value, like y, true, 1, etc.) has the same effect as|selfref=no. Note the attempting to manually supply a "this is a selfref" value with|selfref=yesor|printworthy=nowill not have the desired effect (which is the default anyway); the meta-template is set to selfref by default, since most uses are self-references (only those within the same article as the template are not).|category=if set to no (or n, false, 0, etc., suppresses the error-tracking category (Category:Hatnote templates with errors). This only has an effect if the first positional parameter (the hatnote text) is omitted. This should not normally be used.
Technical details
The meta-template places an HTML <span>...</span> container around the text entered as its first, required parameter, upon which it provides standardized formatting (italicized in most displays, and only stylistically, not as semantic emphasis); it also uses CSS classes to isolate the contained code to make sure that it is interpreted correctly and can be acted upon independently of true article content.
The HTML code produced by this template looks like this:
<span class="hatnote">hatnote text</span>
This is the same class used by the <div>-based {{hatnote}} template, the block display of which is controlled by a separate div.hatnote directive in Mediawiki:Common.css.
The output is produced by Module:Hatnote inline.
See also
- Template:Hatnote templates documentation, for all the block-format hatnotes
Templates based on this meta-template
- {{Crossreference}} (a.k.a. {{Crossref}}, {{Xref}}) – Template for inline crossreferences to (usually) other Wikipedia pages (unprintworthy in most cases)
- {{Ghat}} – Hatnote template for use in template-structured glossaries (printworthy)
- {{See above}} and {{See below}} – some more specific templates than {{Crossreference}} for use on same page only (printworthy)
--------------------------------------------------------------------------------
-- Module:Hatnote-inline --
-- --
-- This module produces hatnote-style links and links to related articles, --
-- but inside a <span>, instead of the <div> used by Module:Hatnote. It --
-- implements the {{hatnote-inline}} meta-template. --
--------------------------------------------------------------------------------
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local mArguments -- lazily initialise [[Module:Arguments]]
local yesno -- lazily initialise [[Module:Yesno]]
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getArgs(frame)
-- Fetches the arguments from the parent frame. Whitespace is trimmed and
-- blanks are removed.
mArguments = require('Module:Arguments')
return mArguments.getArgs(frame, {parentOnly = true})
end
local function removeInitialColon(s)
-- Removes the initial colon from a string, if present.
return s:match('^:?(.*)')
end
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
--------------------------------------------------------------------------------
-- Format link
--
-- Makes a wikilink from the given link and display values. Links are escaped
-- with colons if necessary, and links to sections are detected and displayed
-- with " § " as a separator rather than the standard MediaWiki "#". Used in
-- the {{format hatnote link}} template.
--------------------------------------------------------------------------------
function p.formatLink(frame)
local args = getArgs(frame)
local link = args[1]
local display = args[2]
if not link then
return p.makeWikitextError(
'no link specified',
'Template:Format hatnote link#Errors',
args.category
)
end
return p._formatLink(link, display)
end
function p._formatLink(link, display)
-- Find whether we need to use the colon trick or not. We need to use the
-- colon trick for categories and files, as otherwise category links
-- categorise the page and file links display the file.
checkType('_formatLink', 1, link, 'string')
checkType('_formatLink', 2, display, 'string', true)
link = removeInitialColon(link)
local namespace = p.findNamespaceId(link, false)
local colon
if namespace == 6 or namespace == 14 then
colon = ':'
else
colon = ''
end
-- Find whether a faux display value has been added with the {{!}} magic
-- word.
if not display then
local prePipe, postPipe = link:match('^(.-)|(.*)$')
link = prePipe or link
display = postPipe
end
-- Find the display value.
if not display then
local page, section = link:match('^(.-)#(.*)$')
if page then
display = page .. ' § ' .. section
end
end
-- Assemble the link.
if display then
return string.format('[[%s%s|%s]]', colon, link, display)
else
return string.format('[[%s%s]]', colon, link)
end
end
--------------------------------------------------------------------------------
-- Hatnote
--
-- Produces standard hatnote text. Implements the {{hatnote}} 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#Errors',
args.category
)
end
options.extraclasses = args.extraclasses
options.selfref = args.selfref
options.inline = args.inline
return p._hatnote(s, options)
end
function p._hatnote(s, options)
checkType('_hatnote', 1, s, 'string')
checkType('_hatnote', 2, options, 'table', true)
local classes = {'hatnote'}
local extraclasses = options.extraclasses
local selfref = options.selfref
if type(extraclasses) == 'string' then
classes[#classes + 1] = extraclasses
end
if selfref then
classes[#classes + 1] = 'selfreference noprint'
end
local tag = options.inline and 'span' or 'div'
return string.format(
'<%s class="%s">%s</%s>',
tag,
table.concat(classes, ' '),
s,
tag
)
end
return p