Module:Format link: Difference between revisions

m
13 revisions imported from wikipedia:Module:Format_link: All aboard the import train again. Originally imported from English Wikipedia.
(Add missing "return p")
m (13 revisions imported from wikipedia:Module:Format_link: All aboard the import train again. Originally imported from English Wikipedia.)
 
(12 intermediate revisions by 3 users not shown)
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 26 ⟶ 27:
end
 
local function italicizeremoveInitialColon(s)
-- ItalicizeRemoves the initial colon from a string, if present.
return s:match('<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 77 ⟶ 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 88 ⟶ 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 p.makeWikitextError(
return missingArgError('Template:Format link')
'no link specified',
'Template:Format link#Errors',
args.category
)
end
 
return p._formatLink{
link = link,
display = args[2] or args.display,
target = target,
italicizePage = yesno(args.italicizepage),
italicizeSection = yesno(args.italicizesection),
categorizeMissing = args.categorizemissing
}
end
Line 107 ⟶ 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
)
 
local parsed = parseLink(options.link)
local display = options.display or parsed.display
local catMissing = options.categorizeMissing
local category = ''
-- 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
-- Find the display text
return string.format('[[:%s]]', parsed.link)
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
-- Find the display text for piped links
if catMissing and (mw.ustring.len(catMissing) > 0) then
if not display then
local title = nil
local page = maybeItalicize(parsed.page, options.italicizePage)
if parsed.page then title = mw.title.new(parsed.page) end
local section = maybeItalicize(parsed.section, options.italicizeSection)
if title and (not title.isExternal) and (not pagetitle.exists) then
displaycategory = stringmw.ustring.format('§&nbsp;[[Category:%s]]', sectioncatMissing)
elseif section then
display = string.format('%s §&nbsp;%s', page, section)
else
display = page
end
end
-- Format the result as a link
return string.format('[[:%s|%s]]', parsed.link, display)
if parsed.link == display then
return mw.ustring.format('[[:%s]]%s', parsed.link, category)
else
return mw.ustring.format('[[:%s|%s]]%s', parsed.link, display, category)
end
end
 
--------------------------------------------------------------------------------
-- Derived convenience functions
--------------------------------------------------------------------------------
 
function p.formatPages(options, pages)
-- Formats an array of pages using formatLink and the given options table,
-- and returns it as an array. Nil values are not allowed.
local ret = {}
for i, page in ipairs(pages) do
ret[i] = p._formatLink{
link = page,
categorizeMissing = options.categorizeMissing,
italicizePage = options.italicizePage,
italicizeSection = options.italicizeSection
}
end
return ret
end