Module:Section link: Difference between revisions
Content added Content deleted
m (1 revision imported: cite web) |
(percent-decode;) |
||
Line 1: | Line 1: | ||
-- This module implements {{section link}}. |
-- This module implements {{section link}}. |
||
require('Module:No globals'); |
|||
local checkType = require('libraryUtil').checkType |
local checkType = require('libraryUtil').checkType |
||
Line 9: | Line 10: | ||
page = page or '' |
page = page or '' |
||
return string.format('[[%s#%s|%s]]', page, section, display) |
return string.format('[[%s#%s|%s]]', page, section, display) |
||
end |
|||
local function normalizeTitle(title) |
|||
title = mw.ustring.gsub(mw.ustring.gsub(title, "'", ""), '"', '') |
|||
title = mw.ustring.gsub(title, "%b<>", "") |
|||
return mw.title.new(title).prefixedText |
|||
end |
end |
||
Line 43: | Line 50: | ||
if isShowingPage then |
if isShowingPage then |
||
page = page or title.prefixedText |
page = page or title.prefixedText |
||
display |
if options.display and options.display ~= '' then |
||
if normalizeTitle(options.display) == normalizeTitle(page) then |
|||
display = options.display .. ' ' .. display |
|||
else |
|||
error(string.format( |
|||
'Display title "%s" was ignored since it is ' .. |
|||
"not equivalent to the page's actual title", |
|||
options.display |
|||
), 0) |
|||
end |
|||
else |
|||
display = page .. ' ' .. display |
|||
end |
|||
end |
end |
||
return makeSectionLink(linkPage, section, display) |
return makeSectionLink(linkPage, section, display) |
||
Line 77: | Line 96: | ||
function p.main(frame) |
function p.main(frame) |
||
local yesno = require('Module:Yesno') |
|||
local args = require('Module:Arguments').getArgs(frame, { |
local args = require('Module:Arguments').getArgs(frame, { |
||
wrappers = 'Template:Section link', |
wrappers = 'Template:Section link', |
||
Line 87: | Line 107: | ||
end |
end |
||
}) |
}) |
||
for k, v in pairs(args) do -- replace underscores in the positional parameter values |
|||
if 'number' == type(k) then |
|||
if not yesno (args['keep-underscores']) then -- unless |keep-underscores=yes |
|||
args[k] = mw.uri.decode (v, 'WIKI'); -- percent-decode; replace underscores with space characters |
|||
else |
|||
args[k] = mw.uri.decode (v, 'PATH'); -- percent-decode; retain underscores |
|||
end |
|||
end |
|||
end |
|||
-- Sort the arguments. |
-- Sort the arguments. |
||
Line 95: | Line 125: | ||
-- Doing this in the loop because of a bug in [[Module:Arguments]] |
-- Doing this in the loop because of a bug in [[Module:Arguments]] |
||
-- when using pairs with deleted arguments. |
-- when using pairs with deleted arguments. |
||
page = v |
page = mw.text.decode(v, true) |
||
elseif type(k) == 'number' then |
elseif type(k) == 'number' then |
||
sections[k] = v |
sections[k] = v |
||
Line 101: | Line 131: | ||
options[k] = v |
options[k] = v |
||
end |
end |
||
end |
|||
options.nopage = yesno (options.nopage); -- make boolean |
|||
-- Extract section from page, if present |
|||
if page then |
|||
local p, s = page:match('^(.-)#(.*)$') |
|||
if p then page, sections[1] = p, s end |
|||
end |
end |
||