Module:Bad title suggestion explained

require("strict")local getArgs = require("Module:Arguments").getArgslocal p = local function dedab(title) return title:gsub(" ?%(.-%)","")end

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) local truncate = "" if index then local page = mw.title.new(mw.ustring.sub(title, 1, index - 1)) if page and page.exists then truncate = '

' .. frame:expandTemplate .. '

' end end return p._substitute(frame, title, chr)..truncateendfunction p._substitute(frame, title, chr) -- Since the overrides page has a lower protection level than this one don't crash if it's invalid local success, overrides = pcall(function return mw.loadJsonData("Module:Bad title suggestion/override.json") end) local spage local substitute = "" title = mw.text.decode(title):gsub("_", " ") if success and overrides[title] then spage = mw.title.new(overrides[title]) elseif success and overrides[title:lower] then spage = mw.title.new(overrides[title:lower]) elseif success and overrides[dedab(title)] then spage = mw.title.new(overrides[dedab(title)]) elseif not chr or chr

"[" or chr == "]" then local replaced = title:gsub("%[","("):gsub("%]",")") if replaced ~= title then spage = mw.title.new(replaced) end end if spage and spage.exists then substitute = '

' .. frame:expandTemplate .. '

' end return substituteendfunction p.substitute(frame) return p._substitute(frame, frame.args[1], nil)endreturn p