Module:Check DYK hook
This module checks the format of Wikipedia:Did you know hooks used in {{DYK talk}} and {{Article history}}.
Usage
This module can be used from templates or from other Lua modules.
From templates
From templates, call the isValidHook
function, and use the Template:Para 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 Template:Para 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
From modules, call the _isValidHook
function with the hook as the first positional parameter.
<syntaxhighlight lang="lua"> mCheckDYKHook = require('Module:Check DYK hook') result = mCheckDYKHook._isValidHook(hook) </syntaxhighlight>
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. "^%.%.%. *that", "^%.%.%. *about", }, { -- Check that hooks end with a question mark, or another acceptable -- phrase. [[.%?%]*'*"?$]], [[.?</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