Module:UtilsPage
Lua error in Module:Documentation/Module at line 351: attempt to call field 'Documentation' (a table value).
local p = {}
local h = {}
local utilsString = require("Module:UtilsString")
local utilsTable = require("Module:UtilsTable")
function p.exists(fullPageName, noRedirect)
local title = mw.title.new(fullPageName)
local isMainNamespace = utilsString.isEmpty(title.nsText)
local result = p.dpl({
title = title.text,
namespace = title.nsText,
skipthispage = "no",
notnamespace = (not isMainNamespace) and "" or nil, -- For some reason it'll return results for the main namespace without this line
redirects = noRedirect and "exclude" or "include"
})
return #result > 0
end
local SEPARATOR = "#"
function p.dpl(args)
local dplArgs = ""
for k, v in pairs(args) do
if k == "format" or type(v) == "table" and v.value == "format" then
mw.addWarning("<code>format</code> argument cannot be used here. Format the resulting Lua table instead.")
elseif type(v) == "table" then
dplArgs = dplArgs .. h.appendArg(v.param, v.value)
else
dplArgs = dplArgs .. h.appendArg(k, v)
end
end
dplArgs = dplArgs .. h.appendArg("format", SEPARATOR..",,%PAGE%" .. SEPARATOR .. ",")
local result = mw.getCurrentFrame():preprocess("{{#dpl:" .. dplArgs .. "}}")
if not utilsString.endsWith(result, SEPARATOR) then
return {}
end
result = string.gsub(result, SEPARATOR .. ":", SEPARATOR) -- strip : prefix from Category results
result = utilsString.trim(result, SEPARATOR)
result = utilsString.split(result, SEPARATOR)
return result
end
function h.appendArg(param, value)
value = tostring(value)
value = string.gsub(value, "\|", "{{!}}")
if param and value then
return "|" .. param .. "=" .. value .. "\n"
else
return ""
end
end
function p.inCategory(category, fullPageName)
if (not category) or (not fullPageName) then
return false
end
local title = mw.title.new(fullPageName)
local dplResult = p.dpl({
category= p.stripNamespace(category),
namespace= title.nsText,
title= title.text,
})
return #dplResult ~= 0
end
function p.inNamespace(namespaces, fullPageName)
if type(namespaces) == "string" then
namespaces = {namespaces}
end
local title = fullPageName and mw.title.new(fullPageName) or mw.title.getCurrentTitle()
return utilsTable.includes(namespaces, title.nsText)
end
function p.stripNamespace(page, namespace)
if not namespace then
namespace = "[^:]*"
end
return string.gsub(page, ":?".. namespace..":", "")
end
p.Schemas = {
exists = {
fullPageName = {
type = "string",
required = true,
desc = "Full page name with namespace prefix.",
},
noRedirect = {
type = "boolean",
desc = "If true, redirects are not considered."
},
},
inCategory = {
category = {
type = "string",
required = true,
desc = "Category name with or without namespace prefix.",
},
fullPageName = {
type = "string",
required = true,
desc = "Full page name with namespace prefix."
},
},
inNamespace = {
namespaces = {
desc = "A namespace or array of namespaces.",
required = true,
oneOf = {
{ type = "string" },
{ type = "array", items = { type = "string" } }
},
},
fullPageName = {
type = "string",
desc = "Full pagename. Defaults to the name of the current page."
}
},
stripNamespace = {
page = {
required = true,
type = "string",
desc = "Pagename to strip namespace prefix from.",
},
namespace = {
type = "string",
desc = "Namespace to strip. If nil, any namespace will be stripped."
},
},
}
p.Documentation = {
exists = {
desc = 'Check whether a page exists. Unlike {{Scribunto Manual|lib=mw.title}}, this function does not register a link in [[Special:WantedPages]]. It also does not count as an "expensive parser function."',
params = {"fullPageName", "noRedirect"},
returns = "Boolean indicating whether the page exists.",
cases = {
{
args = {"OoT"},
expect = true,
},
{
args = {"OoT", true},
expect = false,
},
},
},
dpl = {
desc = "This function is wrapper for the [[gphelp:Extension:DPL3/Manual|DPL]] parser function.",
params = {"args"},
returns = "Array of results. '''Results are limited to a 500 maximum.'''",
cases = {
{
args = { {titlematch = "Link|Zelda", namespace = "Category"} },
expect = {"Category:Link", "Category:Zelda"}
},
{
desc = "A special array format exists for specifying repeated arguments",
args = {
{
{
param = "category",
value = "Lynels",
},
{
param = "notcategory",
value = "Enemies in Breath of the Wild",
},
{
param = "notcategory",
value = "Enemies in A Link Between Worlds",
},
}
},
expect = {"Purple Lynel", "Blue Lynel"},
},
},
},
inCategory = {
params = {"category", "fullPageName"},
returns = "A boolean indicating whether the given page is a member of the given category.",
cases = {
{
desc = "Works with or without the namespace prefix.",
args = {"Characters in Breath of the Wild", "Link"},
expect = true,
},
{
args = {"Category:Characters", "Link"},
expect = true,
},
{
args = {"Items", "Link"},
expect = false,
},
{
args = {"Fakecategory", "Link"},
expect = false,
},
{
desc = "For pages not in the main namespace, the namespace prefix is required.",
args = {"Characters by Game", "Characters in Breath of the Wild"},
expect = false,
},
{
args = {"Characters by Game", "Category:Characters in Breath of the Wild"},
expect = true,
},
},
},
inNamespace = {
params = {"namespaces", "fullPageName"},
returns = "<code>true</code> if and only if <code>fullPageName</code> (or the current page) has a namespace prefix that is one of <code>namespaces</code>, regardless of whether the page actually exists.",
cases = {
{
desc = "Main namespace is the empty string.",
args = {"", "Link"},
expect = true,
},
{
args = {"Category", "Link"},
expect = false,
},
{
args = {"Category", "Category:Link"},
expect = true,
},
{
desc = "Can evaluate to true even when page does not exist.",
args = {"Category", "Category:Flippityfloppityfloo"},
expect = true,
},
{
desc = "Current page",
args = {"Module"},
expect = true,
},
{
desc = "Multiple namespaces",
args = {{"User", "MediaWiki"}, "Princess Zelda"},
expect = false,
},
{
args = {{"User", "MediaWiki"}, "User:Abdullah"},
expect = true,
},
},
},
stripNamespace = {
params = {"page", "namespace"},
returns = "<code>page</code> with namespace prefix stripped off.",
cases = {
outputOnly = true,
{
args = {"Category:Items in Breath of the Wild", "Category"},
expect = "Items in Breath of the Wild",
},
{
args = {"Items in Breath of the Wild", "Category"},
expect = "Items in Breath of the Wild",
},
{
args = {"Category:Items in Breath of the Wild", "File"},
expect = "Category:Items in Breath of the Wild",
},
{
args = {"File:TWWHD Tingle Model.png", "File"},
expect = "TWWHD Tingle Model.png",
},
{
args = {"File:TWWHD Tingle Model.png"},
expect = "TWWHD Tingle Model.png",
},
{
args = {":Category:Items in Breath of the Wild"},
expect = "Items in Breath of the Wild",
}
}
}
}
return p