Difference between revisions of "Module:Bad title suggestion"
MyWikiBiz, Author Your Legacy — Thursday November 06, 2025
Jump to navigationJump to search (Pywikibot 6.4.0) |
(No difference)
|
Latest revision as of 20:48, 15 July 2021
Template:Used in system Template:Module rating
This module implements title suggestions for the "Bad title" interface message at MediaWiki:Title-invalid-characters. When the user asks for a page with invalid characters, this module checks for a page with the given title up to the first invalid character. If it exists, {{Did you mean box}} is displayed.
Usage
{{#invoke:Bad title suggestion|main|invalid_char|bad_title_encoded}}
In the case of MediaWiki:Title-invalid-characters, this is:
{{#invoke:Bad title suggestion|main|$1|$2}}
Examples
- Foobar>:
{{#invoke:Bad title suggestion|main|>|Foobar>}}
- Wikipedia:Village pump}}:
{{#invoke:Bad title suggestion|main|}|Wikipedia:Village pump}}}}
- Main Page|title text!:
{{#invoke:Bad title suggestion|main|||Main Page|title text!}}
Lua error: expandTemplate: template "Did you mean box" does not exist.
- This page absolutely does not exist>:
{{#invoke:Bad title suggestion|main|>|This page absolutely does not exist>}}
(nothing displayed)
- Category:Contents>:
{{#invoke:Bad title suggestion|main|>|Category:Contents>}}
- <Foobar>:
{{#invoke:Bad title suggestion|main|<|#60;Foobar#62;}}
(nothing displayed)
local getArgs = require("Module:Arguments").getArgs
local p = {}
function p.main(frame)
local args = getArgs(frame)
-- The invalid character, e.g. ">" or "}"
local chr = args[1]
-- The escaped bad title, e.g. "Foobar>" or "Foobar|text"
local title = args[2]
-- A pipe (|) as the invalid character is a special case; it is not
-- escaped, so instead the module thinks it got two empty arguments
-- and the title as the third argument.
if chr == nil and title == nil then
chr = "|"
title = args[3]
end
if chr == nil or title == nil then
return ""
end
-- Determine the suggested title by taking a prefix of the bad title
-- up to the first invalid character. Only display the suggestion box
-- if the page exists.
local index = mw.ustring.find(title, mw.text.nowiki(chr), 1, true)
if index == nil then
return ""
end
local page = mw.title.new(mw.ustring.sub(title, 1, index - 1))
if page == nil or not page.exists then
return ""
end
return frame:expandTemplate{
title = "Did you mean box",
args = { page.fullText }
}
end
return p