Module:Dochead: Difference between revisions
bugfix blank hatnote output |
comments |
||
| Line 18: | Line 18: | ||
-- but direct use of module code is allowed) | -- but direct use of module code is allowed) | ||
-- Detect whether a page exists, where | -- Helper function | ||
function | -- Detect whether a page exists, where fullpagename is "Namespace:Title" | ||
local function page_exists(fullpagename) | |||
local title = mw.title.new(fullpagename) | local title = mw.title.new(fullpagename) | ||
| Line 29: | Line 30: | ||
end | end | ||
function | -- Helper function | ||
-- Categorizes pages if they're in the right namespace, and based on the nature | |||
-- of the page | |||
local function categorize(namespace, pagename, is_lua_based_template) | |||
local is_lua_based_template = is_lua_based_template or false | local is_lua_based_template = is_lua_based_template or false | ||
local cats = "" | local cats = "" | ||
| Line 55: | Line 59: | ||
end | end | ||
-- Main function | |||
function p._dochead(args) | function p._dochead(args) | ||
local namespace = args["namespace"] | local namespace = args["namespace"] | ||
| Line 64: | Line 69: | ||
-- If header is none, don't bother | -- If header is none, don't bother | ||
if header == "none" then | if header == "none" then | ||
return | return categorize(namespace, pagename) | ||
end | end | ||
| Line 72: | Line 77: | ||
local result = "" | local result = "" | ||
local has_template = | local has_template = page_exists(corr_template) | ||
local has_module = | local has_module = page_exists(corr_module) | ||
-- Handle each header type first | -- Handle each header type first, then namespace, then if applicable, | ||
-- presence of a corresponding template or module. | |||
if header == "dualuse" then | if header == "dualuse" then | ||
if namespace == "Module" then | if namespace == "Module" then | ||
-- A dual-use module MUST have a corresponding template; if not, say | |||
-- it's missing. | |||
if has_template then | if has_template then | ||
result = string.format("This module may be invoked by templates using its corresponding [[%s|template]], or used directly from other modules.", corr_template) | result = string.format("This module may be invoked by templates using its corresponding [[%s|template]], or used directly from other modules.", corr_template) | ||
else | else | ||
result = | result = "This module has a template that is currently missing, so should be used directly from other modules." | ||
end | end | ||
else | else | ||
| Line 89: | Line 97: | ||
elseif header == "metatemplate" then | elseif header == "metatemplate" then | ||
if namespace == "Module" then | if namespace == "Module" then | ||
-- A metatemplate-implementing module MUST have a corresponding | |||
-- template since it's expected to be dual-use. | |||
if has_template then | if has_template then | ||
result = string.format("This module implements a metatemplate, and may be invoked by templates using its corresponding [[%s|template]], or used directly from other modules.", corr_template) | result = string.format("This module implements a metatemplate, and may be invoked by templates using its corresponding [[%s|template]], or used directly from other modules.", corr_template) | ||
else | else | ||
result = "This module implements a metatemplate." | result = "This module implements a metatemplate whose template is currently missing." | ||
end | end | ||
elseif namespace == "Template" then | elseif namespace == "Template" then | ||
-- A metatemplate may either be lua-implemented or not. | |||
if has_module then | if has_module then | ||
result = string.format("This template is a metatemplate. It is used to build other templates and should not be used standalone, except for testing or simple usage. This template is implemented by the Lua module [[%s]].", corr_module) | result = string.format("This template is a metatemplate. It is used to build other templates and should not be used standalone, except for testing or simple usage. This template is implemented by the Lua module [[%s]].", corr_module) | ||
| Line 105: | Line 116: | ||
elseif header == "noinvoke" then | elseif header == "noinvoke" then | ||
-- A noinvoke module MUST have a corresponding template. Since this is | |||
-- the default for modules, the absence of a template results in the | |||
-- message being blank. | |||
if namespace == "Module" then | if namespace == "Module" then | ||
if has_template then | if has_template then | ||
| Line 110: | Line 124: | ||
else | else | ||
result = header | result = header | ||
--result = "This module's corresponding template is currently missing." | |||
end | end | ||
else | else | ||
| Line 116: | Line 131: | ||
elseif header == "library" or header == "metamodule" then | elseif header == "library" or header == "metamodule" then | ||
-- A metamodule should NOT have a corresponding template. | |||
if namespace == "Module" then | if namespace == "Module" then | ||
result = "This module primarily serves as a library for other modules." | result = "This module primarily serves as a library for other modules." | ||
| Line 123: | Line 139: | ||
else | else | ||
-- For any other case, just say that the module implements a template, | |||
-- or a template invokes a module's function. | |||
if namespace == "Module" then | if namespace == "Module" then | ||
if has_template then | if has_template then | ||
| Line 145: | Line 163: | ||
local has_link = namespace == "Template" and has_module | local has_link = namespace == "Template" and has_module | ||
if result == "" then | if result == "" then | ||
return | return categorize(namespace, pagename, has_link) | ||
else | else | ||
return string.format(":''%s'' %s\n", result, | return string.format(":''%s'' %s\n", result, categorize(namespace, pagename, has_link)) | ||
end | end | ||
end | end | ||
-- Wrapper to be invoked | |||
function p.dochead(frame) | function p.dochead(frame) | ||
local args = getArgs(frame, { removeBlanks = true }) or {} | local args = getArgs(frame, { removeBlanks = true }) or {} | ||