Module:Dochead: Difference between revisions
No edit summary |
No edit summary |
||
| Line 31: | Line 31: | ||
function p.categorize(namespace, pagename, is_lua_based_template) | function p.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 = "" | |||
if pagename:sub(-4) == "/doc" then | if pagename:sub(-4) == "/doc" then | ||
-- | -- Documentation subpages | ||
if namespace == "Template" then | if namespace == "Template" then | ||
cats = "[[Category:Template documentation]]" | |||
elseif namespace == "Module" then | elseif namespace == "Module" then | ||
cats = "[[Category:Module documentation]]" | |||
end | end | ||
else | else | ||
-- | -- Main pages | ||
if namespace == "Template" then | if namespace == "Template" then | ||
cats = "[[Category:Templates]]" | |||
if is_lua_based_template then | |||
cats = cats .. " [[Category:Lua-based templates]]" | |||
end | |||
elseif namespace == "Module" then | elseif namespace == "Module" then | ||
cats = "[[Category:Lua modules]]" | |||
end | end | ||
end | end | ||
return | return cats | ||
end | end | ||
function p._dochead(args) | function p._dochead(args) | ||
local namespace = args["namespace"] | local namespace = args["namespace"] | ||
local pagename = args["pagename" ] | local pagename = args["pagename"] | ||
local header = args["header" | local header = args["header"] or "none" | ||
local corr_template = args["temp"] or "Template:" .. pagename | local corr_template = args["temp"] or ("Template:" .. pagename) | ||
local corr_module = args["mod" ] or "Module:" .. pagename | local corr_module = args["mod"] or ("Module:" .. pagename) | ||
-- If header is none, don't bother | -- If header is none, don't bother | ||
if header == "none" then return | if header == "none" then | ||
return p.categorize(namespace, pagename) | |||
end | |||
local result = "" | 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) | |||
result = string.format("This module | |||
else | else | ||
result = | result = header | ||
end | end | ||
else | else | ||
result = "This template or its options is in the wrong namespace. It should be used within the Module namespace." | |||
end | |||
if | |||
result = string.format("This module | 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 | else | ||
result = header | result = header | ||
end | 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 | end | ||
else | |||
if namespace == "Module" then | |||
if has_template then | |||
if | result = string.format("%s This module implements [[%s]].", header, corr_template) | ||
if | |||
result = | |||
else | else | ||
result = | result = header | ||
end | end | ||
elseif namespace == "Template" then | |||
if has_module then | |||
result = "This template is | result = string.format("%s This template is implemented by the Lua module [[%s]].", header, corr_module) | ||
else | else | ||
result = header | result = header | ||
end | 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 | ||
end | end | ||
return string.format(": | -- Append categorization info | ||
local has_link = (namespace == "Module" and has_template) | |||
or (namespace == "Template" and has_module) | |||
return string.format(":%s %s", result, p.categorize(namespace, pagename, has_link)) | |||
end | end | ||
function p.dochead(frame) | function p.dochead(frame) | ||
local args = getArgs(frame) or {} | local args = getArgs(frame, { removeBlanks = true }) or {} | ||
local title = mw.title.getCurrentTitle() | local title = mw.title.getCurrentTitle() | ||
args["namespace"] = args["namespace"] or title.nsText | args["namespace"] = args["namespace"] or title.nsText | ||
args["pagename" ] = args["pagename" ] or title.text | args["pagename"] = args["pagename"] or title.text | ||
args["header" | args["header"] = args["header"] or args["namespace"] == "Module" and "noinvoke" or "" | ||
args["temp"] = args["temp"] or args["pagename"] | args["temp"] = args["temp"] or ("Template:" .. args["pagename"]) | ||
args["mod" ] = args["mod" ] or args["pagename"] | args["mod"] = args["mod"] or ("Module:" .. args["pagename"]) | ||
return p._dochead(args) | return p._dochead(args) | ||
end | end | ||
return p | return p | ||