Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Module:Bad title suggestion

Permanently protected module
From Wikipedia, the free encyclopedia

require("strict")
local getArgs = require("Module:Arguments").getArgs
local 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{
				title = "Did you mean box",
				args = { page.fullText }
			}
		end
	end
	local substitute = p._substitute(frame, title, chr)
	if substitute ~= "" or truncate ~= "" then
		return '<div class="mw-parser-output">' .. substitute .. truncate .. '</div>'
	end
	return ""
end
function 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{
				title = "Did you mean box",
				args = { spage.fullText }
		}
	end
	return substitute
end
function p.substitute(frame)
	local subst = p._substitute(frame, frame.args[1], nil)
	if subst ~= "" then
		return '<div class="mw-parser-output">' .. p._substitute(frame, frame.args[1], nil) .. '</div>'
	end
	return ""
end
return p