Module:Hatnote: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
m (Reverted edits by Mr. Stradivarius (talk) to last version by JJMC89) |
(reinstate the "italicizepage" and "italicizesection" arguments to _formatLink (I pulled the trigger a little bit early)) |
||
Line 9: | Line 9: | ||
local libraryUtil = require('libraryUtil') |
local libraryUtil = require('libraryUtil') |
||
local checkType = libraryUtil.checkType |
local checkType = libraryUtil.checkType |
||
local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg |
|||
local mArguments -- lazily initialise [[Module:Arguments]] |
local mArguments -- lazily initialise [[Module:Arguments]] |
||
local yesno -- lazily initialise [[Module:Yesno]] |
local yesno -- lazily initialise [[Module:Yesno]] |
||
Line 56: | Line 57: | ||
local ret = {} |
local ret = {} |
||
for i, page in ipairs(pages) do |
for i, page in ipairs(pages) do |
||
ret[i] = p._formatLink |
ret[i] = p._formatLink{link = page} |
||
end |
end |
||
return ret |
return ret |
||
Line 70: | Line 71: | ||
local link = t[1] |
local link = t[1] |
||
local display = t[2] |
local display = t[2] |
||
links[i] = p._formatLink |
links[i] = p._formatLink{link = link, display = display} |
||
end |
end |
||
return links |
return links |
||
Line 130: | Line 131: | ||
function p.formatLink(frame) |
function p.formatLink(frame) |
||
-- The formatLink export function, for use in templates. |
|||
yesno = require('Module:Yesno') |
|||
local args = getArgs(frame) |
local args = getArgs(frame) |
||
local link = args[1] |
local link = args[1] |
||
⚫ | |||
if not link then |
if not link then |
||
return p.makeWikitextError( |
return p.makeWikitextError( |
||
Line 140: | Line 142: | ||
) |
) |
||
end |
end |
||
return p._formatLink |
return p._formatLink{ |
||
⚫ | |||
⚫ | |||
italicizePage = yesno(args.italicizepage), |
|||
italicizeSection = yesno(args.italicizesection), |
|||
} |
|||
end |
end |
||
function |
local function italicize(s) |
||
-- Italicize a string. |
|||
⚫ | |||
return '<i>' .. s .. '</i>' |
|||
⚫ | |||
⚫ | |||
local function maybeItalicize(s, shouldItalicize) |
|||
-- italicize s if s is a string and the shouldItalicize parameter is true. |
|||
if s and shouldItalicize then |
|||
return italicize(s) |
|||
⚫ | |||
return s |
|||
⚫ | |||
end |
|||
local function parseLink(link) |
|||
-- Remove the initial colon for links where it was specified manually. |
|||
-- Parse a link and return a table with the link's components. |
|||
-- These components are: |
|||
-- - link: the link, stripped of any initial colon (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) |
link = removeInitialColon(link) |
||
-- Find whether a faux display value has been added with the {{!}} magic |
-- Find whether a faux display value has been added with the {{!}} magic |
||
-- word. |
-- word. |
||
local prePipe, display = link:match('^(.-)|(.*)$') |
|||
link = prePipe or link |
|||
⚫ | |||
⚫ | |||
⚫ | |||
-- Find the |
-- Find the section, if it exists. |
||
local page, section = link:match('^(.-)#(.*)$') |
|||
page = page or link |
|||
return { |
|||
link = link, |
|||
⚫ | |||
section = section, |
|||
⚫ | |||
} |
|||
end |
|||
function p._formatLink(options) |
|||
-- The formatLink export function, for use in modules. |
|||
⚫ | |||
⚫ | |||
checkTypeForNamedArg( |
|||
'_formatLink', |
|||
⚫ | |||
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 |
|||
⚫ | |||
end |
|||
-- Find the display text for piped links |
|||
if not display then |
if not display then |
||
local page |
local page = maybeItalicize(parsed.page, options.italicizePage) |
||
local section = maybeItalicize(parsed.section, options.italicizeSection) |
|||
⚫ | |||
⚫ | |||
display = |
display = string.format('%s § %s', page, section) |
||
else |
|||
display = page |
|||
end |
end |
||
end |
end |
||
return string.format('[[:%s|%s]]', parsed.link, display) |
|||
-- Assemble the link. |
|||
⚫ | |||
return string.format( |
|||
'[[:%s|%s]]', |
|||
string.gsub(link, '|(.*)$', ''), --display overwrites manual piping |
|||
⚫ | |||
) |
|||
⚫ | |||
⚫ | |||
⚫ | |||
end |
end |
||