Module:Dochead: Difference between revisions

Ganaram inukshuk (talk | contribs)
bugfix blank hatnote output
Ganaram inukshuk (talk | contribs)
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 pagename is "Namespace:Title"
-- Helper function
function p.page_exists(fullpagename)
-- 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 p.categorize(namespace, pagename, is_lua_based_template)
-- 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 p.categorize(namespace, pagename)
return categorize(namespace, pagename)
end
end
Line 72: Line 77:


local result = ""
local result = ""
local has_template = p.page_exists(corr_template)
local has_template = page_exists(corr_template)
local has_module  = p.page_exists(corr_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 = header
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 p.categorize(namespace, pagename, has_link)
return categorize(namespace, pagename, has_link)
else
else
return string.format(":''%s'' %s\n", result, p.categorize(namespace, pagename, has_link))
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 {}