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:Check DYK hook/sandbox

From Wikipedia, the free encyclopedia
-- This module performs validation checks for [[WP:DYK]] hooks

local libraryUtil = require('libraryUtil')
local p = {}

local validationPatternGroups = {
	{
		-- Check that hooks start with three periods, followed by an acceptable
		-- follow-on word.
		"^%.%.%. *that",
		"^%.%.%. *about",
		"^%[%[File:.-%]%]%s*%.%.%. *that",
		"^%[%[File:.-%]%]%s*%.%.%. *about",
	},
	{
		-- Check that hooks end with a question mark, or another acceptable
		-- phrase.
		[[.%?%]*'*"?$]],
		[[.&#63;</span>%]*'*"?$]],
		"[Yy]ou probably did%.+$",
	}
}

function p._isValidHook(hook)
	-- Whether the given hook is valid.
	-- We use the patterns in the validationPatternGroups table to find whether
	-- a hook is valid or not. Hooks are treated as valid if they match at least
	-- one pattern from each group.
	libraryUtil.checkType("_isValidHook", 1, hook, "string")
	for _, patternGroup in ipairs(validationPatternGroups) do
		local found = false
		for _, pattern in ipairs(patternGroup) do
			if mw.ustring.find(hook, pattern) then
				found = true
				break
			end
		end
		if not found then
			return false
		end
	end
	return true
end

function p.isValidHook(frame)
	local args = frame.args
	local hook = args.hook or args[1]
	if not hook then
		error("No hook specified")
	end
	hook = hook:match('^%s*(.-)%s*$') -- Trim whitespace
	if p._isValidHook(hook) then
		return "yes"
	else
		return ""
	end
end

return p