-- This module follows [[User:Ganaram inukshuk/Provisional style guide for Lua]]
local getArgs = require("Module:Arguments").getArgs
local ctg = require("Module:Category handler")._category_handler
local yesno = require("Module:Yesno")
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 pagename = pagename or "Template:Dochead"
local title = mw.title.new(pagename)
if title and title.exists then
return true
else
return false
end
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 "" end
local result = ""
if namespace == "Module" then
if p.page_exists(corr_template) then
if header == "dualuse" then
result = string.format("This module may be invoked by templates by using its corresponding [[%s | template]], or used directly from other modules.", corr_template)
elseif header == "metatemplate" then
result = string.format("This module implements a metatemplate, and may be invoked by templates by using its corresponding [[%s | template]], or used directly from other modules.", corr_template)
elseif header == "noinvoke" then
result = string.format("This module should not be invoked directly; use its corresponding [[%s | template]] instead.", corr_template)
else
result = table.concat({header, string.format("This module implements [[%s]].", corr_template)}, " ")
end
else
if header == "library" or header == "metamodule" then
result = string.format("This module primarily serves as a library for other modules.")
else
result = header
end
end
elseif namespace == "Template" then
if header == "noinvoke" then header = "" end
if p.page_exists(corr_module) then
if header == "metatemplate" then
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." .. " " .. string.format("This template is implemented by the Lua module [[%s]].")
else
result = table.concat({header, string.format("This template is implemented by the Lua module [[%s]].")}, " ")
end
else
if header == "metatemplate" then
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."
else
result = header
end
end
else
result = "This template is in the wrong namespace. It should be used within the Template or Module namespaces."
end
return string.format(":''%s''", result)
end
function p.dochead(frame)
local args = getArgs(frame) or {}
-- Get current title
local title = mw.title.getCurrentTitle()
args["namespace"] = args["namespace"] or title.nsText
args["pagename"] = args["pagename" ] or title.text
args["header"] = args["header"] or "noinvoke"
--return p._dochead(args)
return args["header"]
end
return p