Module:Dochead: Difference between revisions
Jump to navigation
Jump to search
remove /doc from pagename if present |
order of operations |
||
| Line 149: | Line 149: | ||
args["pagename" ] = args["pagename" ] or title.text | args["pagename" ] = args["pagename" ] or title.text | ||
args["header" ] = args["header" ] or args["namespace"] == "Module" and "noinvoke" or "" | args["header" ] = args["header" ] or args["namespace"] == "Module" and "noinvoke" or "" | ||
-- Remove doc subpage if present | -- Remove doc subpage if present | ||
args["pagename"] = args["pagename"]:gsub("/doc$", "") | args["pagename"] = args["pagename"]:gsub("/doc$", "") | ||
-- Extract template/module names, or autogenerate them | |||
args["temp"] = args["temp"] or ("Template:" .. args["pagename"]) | |||
args["mod" ] = args["mod" ] or ("Module:" .. args["pagename"]) | |||
return p._dochead(args) | return p._dochead(args) | ||
Revision as of 09:06, 28 October 2025
- This module should not be invoked directly; use its corresponding template instead.
| Introspection summary for Module:Dochead | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||||||||||||||
No function descriptions were provided. The Lua code may have further information.
-- This module follows [[User:Ganaram inukshuk/Provisional style guide for Lua]]
local getArgs = require("Module:Arguments").getArgs
local p = {}
-- Produces a hatnote that is placed on the top of a documentation page (either
-- template or module documentation) and can autodetect and categorize:
-- - FOR MODULES:
-- - whether a module has an accompanying template (overridable)
-- - whether a module is meant as a library for other modules
-- - FOR TEMPLATES:
-- - whether a template has an accompanying module (overridable)
-- - what functions from which modules are invoked
-- Options for specific types of templates and modules include:
-- - (TEMPLATES) whether it's a metatemplate
-- - (MODULES) whether it's a metamodule (used the same way as a metatemplate,
-- but direct use of module code is allowed)
-- Detect whether a page exists, where pagename is "Namespace:Title"
function p.page_exists(fullpagename)
local title = mw.title.new(fullpagename)
if title and title.exists then
return true
else
return false
end
end
function p.categorize(namespace, pagename, is_lua_based_template)
local is_lua_based_template = is_lua_based_template or false
local cats = ""
if pagename:sub(-4) == "/doc" then
-- Documentation subpages
if namespace == "Template" then
cats = "[[Category:Template documentation]]"
elseif namespace == "Module" then
cats = "[[Category:Module documentation]]"
end
else
-- Main pages
if namespace == "Template" then
cats = "[[Category:Templates]]"
if is_lua_based_template then
cats = cats .. " [[Category:Lua-based templates]]"
end
elseif namespace == "Module" then
cats = "[[Category:Lua modules]]"
end
end
return cats
end
function p._dochead(args)
local namespace = args["namespace"]
local pagename = args["pagename"]
local header = args["header"] or "none"
local corr_template = args["temp"] or ("Template:" .. pagename)
local corr_module = args["mod"] or ("Module:" .. pagename)
-- If header is none, don't bother
if header == "none" then
return p.categorize(namespace, pagename)
end
local result = ""
local has_template = p.page_exists(corr_template)
local has_module = p.page_exists(corr_module)
-- Handle each header type first
if header == "dualuse" then
if namespace == "Module" 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)
else
result = header
end
else
result = "This template or its options is in the wrong namespace. It should be used within the Module namespace."
end
elseif header == "metatemplate" then
if namespace == "Module" 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)
else
result = "This module implements a metatemplate."
end
elseif namespace == "Template" 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)
else
result = "This template is a metatemplate. It is used to build other templates and should not be used standalone, except for testing or simple usage."
end
else
result = "This template or its options is in the wrong namespace. It should be within the Template or Module namespaces."
end
elseif header == "noinvoke" then
if namespace == "Module" then
if has_template then
result = string.format("This module should not be invoked directly; use its corresponding [[%s|template]] instead.", corr_template)
else
result = header
end
else
result = "This template or its options is in the wrong namespace. It should be used within the Module namespace."
end
elseif header == "library" or header == "metamodule" then
if namespace == "Module" then
result = "This module primarily serves as a library for other modules."
else
result = "This template or its options is in the wrong namespace. It should be used within the Module namespace."
end
else
if namespace == "Module" then
if has_template then
result = string.format("%s This module implements [[%s]].", header, corr_template)
else
result = header
end
elseif namespace == "Template" then
if has_module then
result = string.format("%s This template is implemented by the Lua module [[%s]].", header, corr_module)
else
result = header
end
else
result = "This template or its options is in the wrong namespace. It should be used within the Template or Module namespaces."
end
end
-- Append categorization info
local has_link = namespace == "Template" and has_module
return string.format(":''%s'' %s", result, p.categorize(namespace, pagename, has_link))
end
function p.dochead(frame)
local args = getArgs(frame, { removeBlanks = true }) or {}
local title = mw.title.getCurrentTitle()
-- Extract or parse args
args["namespace"] = args["namespace"] or title.nsText
args["pagename" ] = args["pagename" ] or title.text
args["header" ] = args["header" ] or args["namespace"] == "Module" and "noinvoke" or ""
-- Remove doc subpage if present
args["pagename"] = args["pagename"]:gsub("/doc$", "")
-- Extract template/module names, or autogenerate them
args["temp"] = args["temp"] or ("Template:" .. args["pagename"])
args["mod" ] = args["mod" ] or ("Module:" .. args["pagename"])
return p._dochead(args)
end
return p