Open main menu

Changes

Module:Hatnote

2,135 bytes added, 13:46, 30 July 2020
parse pages for section-only links as nil - this prevents section-only links that have an italicized page parameter from having empty <i></i> tags
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg
local mArguments -- lazily initialise [[Module:Arguments]]
local yesno -- lazily initialise [[Module:Yesno]]
local ret = {}
for i, page in ipairs(pages) do
ret[i] = p._formatLink({link = page)}
end
return ret
local link = t[1]
local display = t[2]
links[i] = p._formatLink({link = link, display)= display}
end
return links
-- Make the category text.
local category
if not title.isTalkPage -- Don't categorise talk pages and title.namespace ~= 2 -- Don't categorise userspace and yesno(addTrackingCategory) ~= false -- Allow opting out then
category = 'Hatnote templates with errors'
category = string.format(
-- 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)
-- The formatLink export function, for use in templates.
yesno = require('Module:Yesno')
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 = link, display= args[2], italicizePage = yesno(args.italicizepage), italicizeSection = yesno(args.italicizesection), }
end
local function p._formatLinkitalicize(link, displays) checkType(-- Italicize a string. return '_formatLink<i>', 1, link, .. s .. 'string</i>'end local function maybeItalicize(s, shouldItalicize) checkType('_formatLink', 2, display, '-- italicize s if s is a string', and the shouldItalicize parameter is true. if s and shouldItalicize then return italicize(s) else return s endend
local function parseLink(link) -- Remove Parse a link and return a table with the link's components. -- These components are: -- - link: the link, stripped of any initial colon for links where it was specified (always present) -- - page: the page name (always present) -- - section: the page name (may be nil) -- - display: the display text, if manually.entered after a pipe (may be nil)
link = removeInitialColon(link)
-- Find whether a faux display value has been added with the {{!}} magic
-- word.
if not display then local prePipe, postPipe display = link:match('^(.-)|(.*)$') link = prePipe or link  -- Find the page, if it exists. -- For links like [[#Bar]], the page will be nil. local preHash, postHash = link:match('^(.-)#(.*)$') local page if not preHash then -- We have a link like [[Foo]]. page = link elseif preHash ~= '' then -- We have a link like [[Foo#Bar]]. page = preHash end  -- Find the section, if it exists. local section if postHash and postHash ~= '' then display section = postPipepostHash
end
return {
link = link,
page = page,
section = section,
display = display,
}
end
 
function p._formatLink(options)
-- The formatLink export function, for use in modules.
checkType('_formatLink', 1, options, 'table')
checkTypeForNamedArg('_formatLink', 'link', options.link, 'string', false)
checkTypeForNamedArg(
'_formatLink',
'display',
options.display,
'string',
true
)
checkTypeForNamedArg(
'_formatLink',
'italicizePage',
options.italicizePage,
'boolean',
true
)
checkTypeForNamedArg(
'_formatLink',
'italicizeSection',
options.italicizeSection,
'boolean',
true
)
local parsed = parseLink(options.link) local display = options.display or parsed.display -- Deal with the case where we don't have to pipe the link if not display and not parsed.section and not options.italicizePage then return string.format('[[:%s]]', parsed.link) end -- Find the display value.text for piped links
if not display then
local page = maybeItalicize(parsed.page, options.italicizePage) local section = link:match('^maybeItalicize(parsed.-)#(section, options.*)$'italicizeSection) if not page then display = page string.format('§&nbsp;%s', section) elseif section then display = string. format(' %s §&nbsp;%s' .. , page, section) else display = page
end
end
  -- Assemble the link. if display then return string.format( '[[:%s|%s]]', stringparsed.gsub(link, '|(.*)$', ''), --display overwrites manual piping display ) else return string.format('[[:%s]]', link) end
end