Modul:Check DYK hook

Documentation icon Dokumentacija modula[predogled] [uredi] [zgodovina] [osveži]

This module checks the format of Wikipedia:Did you know hooks used in {{DYK talk}} and {{Article history}}.

Usage uredi

This module can be used from templates or from other Lua modules.

From templates uredi

From templates, call the isValidHook function, and use the |hook= parameter to specify the hook.

{{#invoke:Check DYK hook|isValidHook|hook=hook}}

Valid hooks will return a value of "yes"; invalid hooks will return the empty string.

You can also use the first positional parameter to specify the hook. If you do this, it is recommended to use |1= explicitly; if not, and the hook contains an equals sign, the text before the equals sign will be treated as a parameter name and the hook will not be recognised.

From modules uredi

From modules, call the _isValidHook function with the hook as the first positional parameter.

mCheckDYKHook = require('Module:Check DYK hook')
result = mCheckDYKHook._isValidHook(hook)

Valid hooks will return true; invalid hooks will return false.


-- 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.
		"^%.%.%. *je",
		"^%.%.%. *lahko",	
		"^%.%.%. *se",	
	},
	{
		-- Check that hooks end with a question mark, semicolon or another acceptable
		-- phrase.
		[[.%?%]*'*"?$]],
		[[.&#63;</span>%]*'*"?$]],
		[[.%;%]*'*"?$]],
		[[.	&#59;</span>%]*'*"?$]],
		"[Vv]erjetno ste%.+$",
	}
}

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("Podan ni noben vnos")
	end
	hook = hook:match('^%s*(.-)%s*$') -- Trim whitespace
	if p._isValidHook(hook) then
		return "yes"
	else
		return ""
	end
end

return p