Module:Format link: Difference between revisions

From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Updated from sandbox with new target override functionality
(An extra layer of nil check)
(Updated from sandbox with new target override functionality)
Line 11:
local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg
local mArguments -- lazily initialise [[Module:Arguments]]
local mError -- lazily initialise [[Module:Error]]
local yesno -- lazily initialise [[Module:Yesno]]
 
Line 29 ⟶ 30:
-- Removes the initial colon from a string, if present.
return s:match('^:?(.*)')
end
 
local function italicize(s)
-- Italicize a string.
return '<i>' .. s .. '</i>'
end
 
local function maybeItalicize(s, shouldItalicize)
-- italicizeItalicize s if s is a string and the shouldItalicize parameter is true.
if s and shouldItalicize then
return italicize('<i>' .. s) .. '</i>'
else
return s
Line 82 ⟶ 78:
section = section,
display = display,
}
end
 
local function formatDisplay(parsed, options)
-- Formats a display string based on a parsed link table (matching the
-- output of parseLink) and an options table (matching the input options for
-- _formatLink).
local page = maybeItalicize(parsed.page, options.italicizePage)
local section = maybeItalicize(parsed.section, options.italicizeSection)
if (not section) then
return page
elseif (not page) then
return mw.ustring.format('§&nbsp;%s', section)
else
return mw.ustring.format('%s §&nbsp;%s', page, section)
end
end
 
local function missingArgError(target)
mError = require('Module:Error')
return mError._error{message =
'Error: no link or target specified! ([[' .. target .. '#Errors|help]])'
}
end
Line 93 ⟶ 111:
yesno = require('Module:Yesno')
local args = getArgs(frame)
local link = args[1] or args.link
local target = args[3] or args.target
if not link then
if not (link or target) then
return
return missingArgError('Template:Format link')
'<strong class="error">'..
'Error: no link specified ([[Template:Format link#Errors|help]]).'..
'</strong>'
end
 
return p._formatLink{
link = link,
display = args[2] or args.display,
target = target,
italicizePage = yesno(args.italicizepage),
italicizeSection = yesno(args.italicizesection),
Line 112 ⟶ 130:
-- The formatLink export function, for use in modules.
checkType('_formatLink', 1, options, 'table')
local function check(key, expectedType) --for brevity
checkTypeForNamedArg('_formatLink', 'link', options.link, 'string', false)
checkTypeForNamedArg(
'_formatLink', key, options[key], expectedType or 'string', true
)
'display',
end
options.display,
check('link')
'string',
check('display')
true
check('target')
)
check('italicizePage', 'boolean')
checkTypeForNamedArg(
check('italicizeSection', 'boolean')
'_formatLink',
check('categorizeMissing')
'italicizePage',
 
options.italicizePage,
-- Normalize link and target and check that at least one is present
'boolean',
if options.link == '' then options.link = nil end
true
if options.target == '' then options.target = nil end
)
if not (options.link or options.target) then
checkTypeForNamedArg(
return missingArgError('Module:Format link')
'_formatLink',
end
'italicizeSection',
options.italicizeSection,
'boolean',
true
)
checkTypeForNamedArg(
'_formatLink',
'categorizeMissing',
options.categorizeMissing,
'string',
true
)
 
local parsed = parseLink(options.link)
Line 147 ⟶ 154:
local category = ''
 
-- Find the display text
--Test if page exists if a diagnostic category is specified
if not display then display = formatDisplay(parsed, options) end
 
-- Handle the target option if present
if options.target then
local parsedTarget = parseLink(options.target)
parsed.link = parsedTarget.link
parsed.page = parsedTarget.page
end
 
-- Test if page exists if a diagnostic category is specified
if catMissing and (mw.ustring.len(catMissing) > 0) then
local title = nil
Line 155 ⟶ 172:
end
end
 
-- Deal withFormat the caseresult whereas we don't have to pipe thea link
if not display and not parsed.sectionlink and== not options.italicizePagedisplay then
return mw.ustring.format('[[:%s]]%s', parsed.link, category)
else
return mw.ustring.format('[[:%s|%s]]%s', parsed.link, display, category)
end
-- Find the display text for piped links
if not display then
local page = maybeItalicize(parsed.page, options.italicizePage)
local section = maybeItalicize(parsed.section, options.italicizeSection)
if not page then
display = mw.ustring.format('§&nbsp;%s', section)
elseif section then
display = mw.ustring.format('%s §&nbsp;%s', page, section)
else
display = page
end
end
return mw.ustring.format('[[:%s|%s]]%s', parsed.link, display, category)
end
 
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.

Navigation menu